PolyScript — Tutorials
Written guides for every feature in PolyScript, the Fountain screenwriting app at the start of the PolySpeak pipeline. Work through them in order for a full introduction, or jump to any section using the contents list.
1 Opening, Saving & New Scripts
What you'll learn: creating a new script, opening an existing one, saving your work, and working with multiple scripts at once.
Creating a new script
- Press ⌘N, or choose File → New. A new window opens with a fresh script.
- New documents start with a built-in, annotated starter-template scene — a short example scene with notes explaining each Fountain element in place. It's there to teach the format; once you don't need it, turn it off in Settings → Editor so new scripts start blank.
Opening a script
- Press ⌘O, or choose File → Open…, and choose a .fountain file.
- Double-clicking a .fountain file in Finder opens it directly in PolyScript — the file type is registered to the app.
- Recently opened scripts are listed under File → Open Recent.
Saving a script
- Press ⌘S to save. If the script has never been saved, a Save dialog appears asking for a location and file name.
- Press ⇧⌘S to Save As — saves a copy under a new name or location, and switches the window to that new file.
Multiple scripts at once
Every script you open or create gets its own window. There's no limit on how many you can have open at the same time — keep a feature script and a short side project open together, or compare two drafts side by side.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
| ⌘N | New script |
| ⌘O | Open script |
| ⌘S | Save |
| ⇧⌘S | Save As |
2 Fountain Format Basics
What you'll learn: using the format-teaching toolbar to write correctly structured Fountain screenplay elements without memorizing syntax.
Fountain is a plain-text markup for screenplays — scene headings, action, character names, and dialogue are all just formatted text, but the formatting rules matter. PolyScript's toolbar inserts each element correctly so you never have to remember the exact syntax.
The format toolbar
Each button inserts correctly formatted text at the cursor and shows a tooltip on hover explaining what it does:
| Button | Inserts |
|---|---|
| Scene Heading | An INT./EXT. slugline, formatted and capitalized as a scene heading |
| Action | A plain action/description paragraph |
| Character | A centered, capitalized character name line, ready for dialogue underneath |
| Dialogue | A dialogue block under the current character |
| Parenthetical | A short parenthetical direction inside a dialogue block, e.g. (beat) |
| Transition | A right-aligned transition, e.g. CUT TO: |
| Title Page | Opens the Title Page editor (see Tutorial 4) |
| Section | A # section heading, used for outlining and navigation |
| Synopsis | An = synopsis line summarizing a scene or section |
| Lyric | A ~ lyric line, italicized when sung dialogue is needed |
| Note | A [[bracketed note]] — visible in the editor, invisible in exported/printed pages |
Using the toolbar
- Place your cursor where you want the new element, then click the matching toolbar button.
- PolyScript inserts the correctly formatted text and positions your cursor ready to type.
- Hover over any button to see a tooltip describing what it inserts.
3 Character & Scene-Location Autocomplete
What you'll learn: how PolyScript speeds up typing character names and scene headings you've already used.
Character autocomplete
- Start typing a character name on a Character line.
- As soon as the letters match a character you've already used in the script, a suggestion appears.
- Press Return or Tab to accept the suggestion, or keep typing to enter a new name.
Scene-location autocomplete
- Start a Scene Heading line and begin typing the location (after INT./EXT.).
- PolyScript suggests locations you've already used elsewhere in the script.
- Accept the suggestion the same way, or keep typing for a new location.
4 The Title Page Editor
What you'll learn: filling in your script's title page fields.
- Click the Title Page button in the toolbar.
- Fill in the fields you want to include: Title, Credit, Author, Draft Date, Contact, and Language.
- Leave any field blank to omit it — the title page only shows the fields you fill in.
- The title page is stored as Fountain key/value metadata at the very top of the file, ahead of your first scene.
| Field | Typical use |
|---|---|
| Title | The script's title, shown centered on the title page |
| Credit | Usually "Written by" |
| Author | Your name, or a pen name |
| Draft Date | The date of this draft, useful when tracking revisions |
| Contact | Email, phone, or representation info |
| Language | The script's primary language — also used as the source language for Translation (Tutorial 8) |
5 Page Count & Runtime Estimate
What you'll learn: reading the live page count and runtime estimate in the status bar, and why you can trust the number.
The status bar at the bottom of the window shows two live numbers as you write: the current page count and an estimated runtime.
How it's calculated
This is not a word-count guess. PolyScript lays out your actual script text at Courier 12pt — the standard screenplay format — and counts real pages from that layout, the same way a printed or PDF script would paginate. Runtime then follows the long-standing industry convention that one page of a properly formatted screenplay equals roughly one minute of screen time. Because the page count comes from genuine typeset pages rather than a word or character count, the runtime estimate tracks much closer to reality than a simple words-per-minute formula.
6 Dual Dialogue
What you'll learn: formatting two characters speaking at the same time, side by side.
- Write the first character's Character line and Dialogue as normal.
- Write the second character's Character line directly after — then add a caret ^ immediately after the second character's name.
- PolyScript recognizes the ^ marker and renders the two character/dialogue blocks side by side as simultaneous dialogue, the standard screenplay convention for two people talking over each other.
7 The AI Tab
What you'll learn: using PolyScript's AI actions to draft, tighten, and check your script, and choosing which AI engine powers them.
Setting up AI (first time)
Go to Settings → AI and choose a provider:
- Apple Intelligence — runs entirely on-device. Requires Apple Silicon and macOS 26 with Apple Intelligence enabled. No API key, no data leaves your Mac.
- OpenRouter — uses your own OpenRouter API key and lets you pick from many cloud models. Paste your key in Settings → AI → OpenRouter Key.
AI actions
| Action | What it does |
|---|---|
| Continue | Writes the next lines of action or dialogue, picking up where the script leaves off |
| Punch Up Dialogue | Rewrites selected dialogue to be sharper and more character-specific |
| Voice Check | Flags when two different characters' dialogue reads too similarly — a sign they need more distinct voices |
| Fix Format | Corrects Fountain formatting mistakes in the selection or scene |
| Proofread | Finds spelling, grammar, and consistency issues |
| Summarize Scene | Produces a short synopsis of the current scene |
Running an action
- Open the AI tab in the sidebar.
- Optionally select the text you want the action to apply to — some actions (like Continue) work from the cursor position instead.
- Click the action button. The result appears in the AI tab for review.
- Insert the result into your script, or discard it and try again.
8 Translation
What you'll learn: translating an entire script to a new window, or just a selection in place.
Translating the whole script
- Open the Translation panel from the toolbar.
- Choose a target language from the list — about 40 languages are available, powered by Apple's on-device Translation framework.
- Click Translate. PolyScript opens a new window containing the translated script, leaving your original untouched.
Translating a selection in place
- Select the lines you want to translate — a scene, a speech, or a single action line.
- Open the Translation panel and choose a target language.
- Click Translate Selection. The translated text replaces the selection directly in your current script.