The open conformance suite
for Final Draft round-tripping.
20 fixtures. 33 tracked features. One canonical screenplay model. Any implementation can be scored against the same ruler, including ours. The suite, the fixtures, and the reference adapter are MIT-licensed and live in the same repo as the app.
“Does it round-trip FDX?” is the one question every writer asks a new screenwriting tool.
There was no public test suite for it. So we wrote one. It covers the real gnarly corners — locked scene numbers with letter suffixes (42A), OMITTED scenes, SceneProperties with Title / Length / Color, writer-forced page breaks, revision marks at both paragraph and run level, multi-paragraph script notes with inline bold/italic, and dozens more — and it's MIT-licensed because a shared spec is good for the whole ecosystem.
If you're a writer, this page tells you how trustworthy a given tool's FDX path is. If you're building a screenwriting app, you can drop in an adapter and score your own implementation in an afternoon.
One round trip. One diff. No hand-waving.
- Step 1Parse
Your implementation reads the fixture into its own internal representation.
- Step 2Canonicalize
Project that representation into the shared canonical screenplay model. This is the only lossy step — anything the canonical doesn't cover is implementation-defined passthrough.
- Step 3Emit
Write the internal representation back out to FDX.
- Step 4Re-parse & compare
Parse the emitted FDX again, canonicalize, and structurally deep-equal the two canonical forms. Every differing field is a reported gap.
The gnarly corners real writers hit.
- Scene Heading, Action, Character, Dialogue, Parenthetical, Transition, General
- Character cue extensions: (V.O.), (O.S.), (CONT'D), (filtered)
- Dual dialogue blocks, including parentheticals inside each speaker
- Complex act-break and section layouts (MONTAGE, DREAM SEQUENCE, FLASHBACK, INTERCUT)
- Locked scene numbers — integer (42) and letter-suffixed (42A)
- Mixed-lock-state scripts (some scenes locked, others not)
- SceneProperties — Title, Length, Color (ARGB), Locked, <SceneArcBeats/>
- OMITTED scenes with Length="0"
- Writer-forced page breaks (StartsNewPage="Yes")
- <Revisions> block with per-set metadata and active-set pointer
- Paragraph-level revision marks (<Paragraph Revised>)
- Per-run <Text RevisionID> stamps
- Custom revision Marks (*, **, ***, +) and ARGB colors
- Bold, Italic, Underline, Strikethrough, and combined-style runs
- Unicode text (accents, Greek, Japanese, Arabic RTL, Chinese, emoji)
- XML entity escaping (&, <, >)
- <ScriptNote> children on paragraphs with ID and ARGB Color attrs
- Multi-paragraph note bodies with inline Bold / Italic preserved
- Title, Author, Source, Draft Date, Contact, Notes
- Multiple Contact entries on one page
- <TitlePage><HeaderAndFooter> content with visibility attrs
Bring your parser. Run the suite.
If you're building a screenwriting tool, implement the FdxAdapter interface — a thin wrapper around your parser, writer, and a projection into the canonical model. Run the suite locally. Get a Markdown scorecard showing exactly which fixtures round-trip cleanly and which drop which attribute on which path.
The scorecard is the same one we run against our own adapter. No comparison matrix lives on this page — we'd rather keep the suite neutral than post a leaderboard we're on.
Found a script that breaks the round trip? That's the next fixture.
Drop your .fdx into tests/fixtures/fdx/, add a .meta.json at fdx-conformance/fixtures/ declaring which features it exercises, and open a PR. If it exposes a real gap in the reference adapter, we fix the adapter in the same PR. The suite grows, the spec sharpens, every implementation gets better.
Short, targeted, one category per file. Real-world source beats synthetic when available.
Every fixture carries a source label. Public-domain screenplays and trial exports are welcome; copyrighted material is not.
MIT. Fork it, adapt it, rename it. We only ask that contributed fixtures ship under the same license.