Screenwriting
Screenplays Overview
Write and format production-ready scripts with the screenplay editor.
The screenplay editor is a block-based writing environment for game narrative scripts. It combines industry-standard screenplay formatting with interactive elements that bridge the gap between written scripts and playable dialogue flows.
When to use Screenplays
- Cutscene scripts – cinematics, linear sequences, voiceover sessions
- Flow-synced scripts – generate formatted scripts from flow dialogue, or push screenplay edits back into a flow
- Branching narratives – use linked pages to write response-driven stories in script format
- Design documents – narrative pitch documents in professional format
Element types
Screenplay content is built from 18 element types organized into four categories.
Standard elements
These follow industry-standard screenplay formatting conventions:
| Element | Purpose | Example |
|---|---|---|
| Scene Heading | Location and time of day | INT. TAVERN - NIGHT |
| Action | Stage directions and descriptions | The door creaks open slowly. |
| Character | Speaker identification (ALL CAPS) | JAIME |
| Dialogue | Spoken lines | I’ve been waiting for you. |
| Parenthetical | Performance direction | (whispering) |
| Transition | Scene transitions | CUT TO: |
| Dual Dialogue | Two characters speaking simultaneously | Side-by-side dialogue columns |
Interactive elements
These map directly to flow nodes, bridging screenplays and flows:
| Element | Flow equivalent | Purpose |
|---|---|---|
| Conditional | Condition node | Branch the script based on a variable |
| Instruction | Instruction node | Modify variables (set health, update flags) |
| Response | Dialogue responses | Player choices that branch the narrative |
Flow markers
Preserved during round-trip sync between screenplays and flows:
| Element | Purpose |
|---|---|
| Hub Marker | Preserves hub node data during sync |
| Jump Marker | Preserves jump target data during sync |
Utility elements
These exist only in the screenplay editor and are not synced to flows:
| Element | Purpose |
|---|---|
| Note | Writer’s notes (excluded from exports) |
| Section | Outline headers for organizing long scripts |
| Page Break | Force a page break in the formatted output |
| Title Page | Script metadata: title, author, credit, source, draft date, contact |
Writing experience
The editor uses a unified TipTap rich-text editor that understands screenplay structure. Key behaviors:
-
Auto-detection – typing
INT.orEXT.at the start of a line automatically converts it to a Scene Heading. Typing an ALL CAPS name detects it as a Character. Parenthetical text wrapped in()is recognized too. - Rich text – dialogue, action, scene headings, parentheticals, transitions, notes, and sections support bold, italic, and other inline formatting via TipTap.
-
Variable mentions – reference project variables inside dialogue and action elements using the
@mention system. - Read mode – toggle a distraction-free reading view that hides editing controls.
Organizing screenplays
Screenplays support a tree structure with folders, just like sheets and flows:
Act 1/
Opening Cinematic
Tavern Introduction
First Quest
Act 2/
The Betrayal
Forest Chase
Flow synchronization
Link a screenplay to a flow for bidirectional sync between your script and your interactive dialogue.
Push to flow (Screenplay -> Flow)
Converts screenplay elements into flow nodes. Dialogue groups become dialogue nodes, conditionals become condition nodes, instructions become instruction nodes, and responses become dialogue nodes with player choices. The sync creates sequential connections between nodes and auto-positions them in a tree layout.
Pull from flow (Flow -> Screenplay)
Traverses the flow graph via depth-first search and reverse-maps nodes back to screenplay elements. Non-mappeable elements (notes, sections, page breaks) are preserved in their original positions.
How sync works
-
Each screenplay element tracks its
linked_node_id– the flow node it maps to. - Hub markers and jump markers are preserved during round-trip sync so flow navigation structure is not lost.
- The sync engine diffs against existing elements/nodes, only creating, updating, or deleting what changed.
- If no flow exists yet, one is created automatically when you first sync.
Linked pages
Response elements contain player choices, and each choice can link to a child screenplay page. This creates a branching tree of screenplay pages visible in the sidebar.
- Click a response choice to create or link a child page.
- The child page continues the narrative for that branch.
- The sidebar tree reflects the branching structure.
- During flow sync, linked pages map to response branches in the flow graph, with a maximum tree depth of 20 levels.
Fountain import and export
Storyarn supports Fountain (.fountain) – the industry-standard plain-text screenplay format used by professional screenwriting tools like Final Draft, Highland, WriterSolo, and Fade In.
Export
Converts screenplay elements to Fountain-formatted text. Standard elements are exported with proper Fountain syntax (scene headings, character cues, dialogue indentation, transitions, dual dialogue with ^ marker, sections with #, notes in [[brackets]], page breaks as ===). Rich text formatting is converted to Fountain marks (**bold**, *italic*). Interactive elements (conditionals, instructions, responses, hub/jump markers) are silently stripped from the output.
Title page metadata is exported as Fountain key-value headers: Title, Credit, Author, Source, Draft date, Contact.
Import
Parses Fountain text back into screenplay elements. Supports:
- Title page key-value headers
-
Standard Fountain element detection (INT./EXT. headings, ALL CAPS characters, transitions ending in
TO:) -
Forced prefixes (
.for scene headings,!for action,@for characters,>for transitions) -
Dual dialogue (
^marker) - Indented document detection (automatic indent-profile analysis for pasted scripts from other tools)
-
Fountain marks converted to HTML (
**bold**to<strong>,*italic*to<em>)