01 — Brand Identity

Logo & Mark

The GramWrite logo is a pairing of the wordmark and the living dot — the same dot that appears in the corner of your screen. The dot is the product; the wordmark is the signature.

GramWrite
The Invisible Editor
Primary — Dark
GramWrite
The Invisible Editor
On Surface
GramWrite
The Invisible Editor
Light Background

Colour Palette

A cinematic palette grounded in deep blacks and aged paper, activated by a single green that signals life, attention, and correctness.

Ink
#0d0d10
Surface
#1a1a24
Signal Green
#3ab078
Aged Paper
#e8e4da
Gold
#c9a84c
Error Red
#e05555

Typography

Three typefaces, each with a distinct role. The serif carries editorial authority. The monospace carries technical precision. The display carries the brand voice at scale.

Display — Bebas Neue
GRAMWRITE
Used for large-scale brand moments, headlines, and section markers. All caps only. Never in body copy.
Serif — IM Fell English Italic
Write first.
Polish never.
Used for taglines, section titles, literary copy, and any text that needs warmth or human voice. Italic preferred.
Monospace — Courier Prime
Backend: ollama   Model: qwen2.5:0.5b
Sensitivity: medium  Debounce: 2.0s
// No cloud. No accounts. No rewriting.
Used for all UI elements, code blocks, labels, navigation, settings, and anywhere text must feel mechanical, precise, or technical. This is the workhorse face of GramWrite.

The Living Dot

The dot is the entire UI. It communicates through colour and motion — never through text or popups while you write. Each state has a specific meaning and animation signature.

Idle
Waiting. No movement. Dark grey.
Processing
Inference running. Slow pulse. Blue.
Alert
Correction found. Ripple. Green.
Error
Backend offline. Static. Red.

Brand Voice

GramWrite writes like a screenwriter, not a marketer. Short. Direct. Occasionally poetic. Always in service of the writer's experience.

✓ Do
"Write first. Polish never."
"Your screenplay stays on your machine."
"One small dot. Click when it glows."
"GramWrite exists in the background."
✗ Don't
"Powered by cutting-edge AI technology!"
"Supercharge your screenwriting workflow."
"Our revolutionary grammar engine helps you write better scripts faster."
"Sign up for early access today."
✓ Do
"No accounts. No telemetry. No cloud."
"It knows the difference between a slug and a sentence."
"A script doctor in the corner."
"The correction waits. You decide."
✗ Don't
"Seamlessly integrates with your existing workflow."
"Privacy-first AI-powered writing assistant."
"Boost productivity with smart suggestions."
"Join thousands of satisfied screenwriters."

02 — Configuration Dashboard

Settings Interface

The dashboard is the secondary experience — accessed only when you want to change something. It must feel like a professional tool, never a product. No upsells. No prompts. Just controls.

GramWrite — Settings
General
Model
Appearance
Advanced
About
Auto-detects Ollama (11434) or LM Studio (1234)
Wait time after typing stops before analysis
Medium
Low = major errors only · Medium = standard · High = catch everything
Watch only supported apps
Only monitor Fade In, Final Draft, Highland and known Fountain editors
Check action lines
Light grammar check on action lines — fragments are always preserved
Launch at login
Start GramWrite automatically when you log in
Any model available in your selected backend. Smaller = faster.
This prompt is sent to the LLM with every request. Edit carefully — wrong instructions break screenplay grammar rules.
Lower = more consistent corrections
Width of the correction suggestion bubble in pixels
Add any Fountain-compatible app not in the default list
GramWrite
The Invisible Editor for Screenwriters
Version 1.1.0  ·  MIT License
Built by Revanth Levaka — A Polymath & Film Maker
github.com/revanthlevaka/GramWrite
Privacy Pledge
GramWrite makes zero external network calls.
Your text is never logged, stored, or transmitted.
All inference runs locally on your hardware.

03 — Grammar Correction in Use

How It Looks While Writing

GramWrite analyses only dialogue and action lines — never sluglines, character names, or transitions. Errors are surfaced as underlines. Hover to see the suggestion. The panel on the right mirrors the floating dot experience.

Fade In Pro — untitled_feature.fountain
Screenplay
GramWrite Active
INT. COFFEE SHOP — EARLY MORNING

Rain against glass. MAYA, 30s, stare at stare atstares at — subject–verb agreement a blinking cursor on an empty page.

MAYA
I don't know what you want from I. from Ifrom me — object pronoun

DANIEL
(beat)
Your wrong about that. YourYou're — contraction vs possessive

Maya close closecloses — third person singular the laptop. Stands. Doesn't look back.

CUT TO:

EXT. PARKING LOT — CONTINUOUS

She walks fast. Head down. Keys in hand.
✦ GramWrite
Action
"stare at a blinking cursor"
"stares at a blinking cursor"
Subject–verb agreement. Maya is singular.
Dialogue
"what you want from I"
"what you want from me"
Object pronoun — "me" not "I" after prepositions.
Dialogue
"Your wrong about that"
"You're wrong about that"
Contraction error: "You're" = "You are".
Action
"Maya close the laptop"
"Maya closes the laptop"
Third-person singular present tense.

Hover underlined text to preview corrections  ·  Click Apply or Dismiss in the panel

Interface States

The three moments a writer interacts with GramWrite. Each is designed to be as brief as possible.

Writing — Idle

You're typing. GramWrite sees the keystrokes but stays completely silent. The dot is grey and motionless. The debounce timer hasn't fired. Nothing interrupts your flow.

Pause — Processing

You stopped typing for 2 seconds. The dot pulses blue — quietly indicating it's working. The LLM is running on your machine. In most cases this resolves in under 100ms.

Click — Suggestion
✦ GramWrite
You're wrong about that.

04 — Technical Specifications

System Specs

Hard constraints for every version of GramWrite. These are not goals — they are requirements.

SpecificationValue
Inference target< 100ms on qwen2.5:0.5b with Ollama running locally
Text extracted per checkMaximum 300 characters (configurable)
Debounce window2.0s default — fires after typing inactivity
Network callsLocalhost only — 127.0.0.1:11434 or :1234
External requestsZero
Memory footprint~60MB Python process + model VRAM (GPU) or RAM (CPU)
Python version3.10 or higher
UI frameworkPyQt6 (cross-platform native windows)
Supported backendsOllama ≥ 0.1, LM Studio ≥ 0.2 (OpenAI-compatible)
Recommended modelqwen2.5:0.5b — 400MB, ~50–80ms inference

Fountain Parser Rules

ElementDetected asGrammar check?
INT. OFFICE - DAYSluglineNever — structural element
JOHN (all caps, short)Character nameNever — proper noun
(beat) / (quietly)ParentheticalNever — direction, not prose
CUT TO: / FADE IN:TransitionNever — keyword
Action paragraphAction lineLight check — fragments preserved
Post-character proseDialogueFull check — standard grammar applies