Skip to content
screenjson

screenjson-cli

Encrypt a ScreenJSON document

Apply AES-256 encryption to the text runs in a ScreenJSON document while keeping structure, UUIDs, and metadata visible.

Last updated January 2026

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, or ascii85

Override the encoding via document.encrypt.encoding on the output.

Next