Skip to content
screenjson

OSS · Free

screenjson-export

The open-source reference implementation of the ScreenJSON conversion pipeline. Reads Final Draft, Fountain, and FadeIn. Emits ScreenJSON. MIT-licensed, single binary, Docker image.

screenjson-export hero image
Repository public
Container ghcr.io/screenjson/screenjson-export

What it is

screenjson-export is the free, open-source reference implementation of the ScreenJSON conversion pipeline. It reads writer-format screenplays — Final Draft .fdx, Fountain .fountain/.spmd, FadeIn .fadein — and emits a valid ScreenJSON document on stdout or to a file.

It’s the only piece of the ScreenJSON toolchain you can download, audit, and build yourself. It exists so anyone can convert a screenplay into ScreenJSON without a license, without an account, and without a network call — and so any team implementing their own converter has a correct, freely-licensed target to compare against.

Under the hood it shares its conversion engine with the full screenjson-cli, but it ships with a deliberately narrow command surface: three writer-format inputs, one output (ScreenJSON), no PDF, no export, no encryption, no server mode, no storage drivers. If you need any of that, the full CLI is a drop-in superset.

Install

Download a release binary

Builds for macOS, Linux, and Windows are published on every GitHub release:

github.com/screenjson/screenjson-export/releases

Docker

docker pull ghcr.io/screenjson/screenjson-export:latest
docker run --rm -v "$PWD:/data" ghcr.io/screenjson/screenjson-export:latest -i /data/screenplay.fdx

From source

git clone https://github.com/screenjson/screenjson-export.git
cd screenjson-export
go build -o screenjson-export ./cmd/screenjson-export
sudo mv screenjson-export /usr/local/bin/

Requires Go 1.22+.

Use

# Basic: FDX in, ScreenJSON out (stdout)
screenjson-export -i screenplay.fdx

# Write to a file
screenjson-export -i screenplay.fdx -o screenplay.json

# Fountain or FadeIn — auto-detected from the extension
screenjson-export -i screenplay.fountain -o screenplay.json
screenjson-export -i screenplay.fadein   -o screenplay.json

# Pipe it into something else
screenjson-export -i screenplay.fdx | jq '.title.en'

In Docker:

docker run --rm -v "$PWD:/data" ghcr.io/screenjson/screenjson-export:latest \
  -i /data/screenplay.fdx -o /data/screenplay.json

Options

FlagDescription
-i, --inputInput file. Required.
-o, --outputOutput path. Defaults to stdout.
-f, --formatForce fdx, fountain, or fadein. Auto-detected otherwise.
--langBCP 47 language tag for the primary text. Default en.
--prettyPretty-print the JSON output. Default true.
-v, --versionPrint version and exit.

What gets converted

Every structural element of an FDX, Fountain, or FadeIn document maps directly onto a typed ScreenJSON node: scene headings become slugline objects with a parsed context/setting/time; action, dialogue, cues, parentheticals, shots, and transitions all become typed elements inside each scene body; the characters referenced by cues and dialogue are extracted into the top-level characters index, each assigned a stable UUID.

What is deliberately not in scope: PDF import, any export format, encryption, database drivers, REST API or MCP modes. Those are the full CLI’s job.

When to use it

Use screenjson-export when you want the simplest possible way to get ScreenJSON out of a Final Draft file — locally, reproducibly, for free — and when you don’t need the full production surface of the licensed CLI. Use it in CI, in a one-off script, as a reference implementation to compare your own converter against, or as a lightweight, auditable starting point for a custom pipeline.

License

MIT. The schema it emits is also open: see the specification.

Next