Command
screenjson encrypt -i plain.json -o cipher.json --key "AtLeast10Chars!"
The key must be at least 10 characters. Shorter keys are rejected.
From an environment variable
export SCREENJSON_ENCRYPT_KEY="AtLeast10Chars!"
screenjson encrypt -i plain.json -o cipher.json
Encrypt at convert time
Skip the intermediate file — convert and encrypt in one shot:
screenjson convert -i script.fdx --encrypt "AtLeast10Chars!" -o cipher.json
What’s encrypted, what isn’t
Encrypted: every text map value on every element — action, dialogue,
parentheticals, shots, transitions, general; scene slugline desc;
character desc; note text; logline; cover extras.
Not encrypted: UUIDs, timestamps, scene counts, character names
(canonical name field), revision labels, status colours, tag arrays,
meta maps, and everything under analysis (embeddings are derivative
and considered redundant to the encrypted text).
This lets an indexer, scheduler, or breakdown tool see structural facts about the document without ever seeing a line of dialogue.
Cipher details
- Cipher: AES-256-CTR
- Key derivation: SHA-256 of the shared secret
- Binary encoding:
hex(default),base16,base32,base64, orascii85
Override the encoding via document.encrypt.encoding on the output.