What you need
- A
.fdxfile from Final Draft (any version that produces standard FDX XML). screenjsonon your PATH, or Docker.
If you just want the simplest free path, use screenjson-export. The command line is nearly identical.
Convert
screenjson convert -i screenplay.fdx -o screenplay.json
That’s the whole recipe. Reads screenplay.fdx, writes ScreenJSON to
screenplay.json.
Pipe to stdout
Drop -o to emit to stdout — useful for piping into jq, into another
command, or into a storage upload in one shot:
screenjson convert -i screenplay.fdx | jq '.title.en'
screenjson convert -i screenplay.fdx | aws s3 cp - s3://bucket/key.json
In Docker
docker run --rm -v "$PWD:/data" screenjson/cli \
convert -i /data/screenplay.fdx -o /data/screenplay.json
Force the input format
Useful when a file has been renamed:
screenjson convert -i renamed.txt -f fdx -o screenplay.json
Set the primary language
Default is en. For a French master, set --lang fr so the primary text
map uses the correct key:
screenjson convert -i script-fr.fdx --lang fr -o script.json
Validate after
If this is going into a CI pipeline or an archive, always validate:
screenjson validate -i screenplay.json --strict
Exit 0 means conformant.
Troubleshooting
“file does not exist” — double-check your path, or use an absolute one.
“not valid XML” — the source file is not a standard FDX. Open it in Final Draft and “Save As” to produce a clean copy.