meta stay in plain text.
The encrypt block
| Field | Default | Values |
|---|---|---|
cipher | aes-256-ctr | Any symmetric cipher string the tooling supports. |
hash | sha256 | Hash used for key derivation. |
encoding | hex | hex · base16 · base32 · base64 · ascii85. |
meta | {} | Free-form extension. |
Key derivation
The encryption key is derived from a shared secret via a single pass of the declaredhash (default SHA-256). The key must be at least 10 characters long.
Scope
- Document-level
encrypt(on the document root) applies to every element that doesn’t set its own. - Element-level
encrypton an individual element overrides the root.
What gets encrypted
- Every value in a
textlanguage map on every element. - Every value in
note.text,logline, coverextra, characterdesc, sluglinedesc, scene-level summary text.
What does not
- UUIDs (document, scene, element, character, note, revision, bookmark).
- Timestamps (
created,modified). - Tag arrays (
props,sfx,locations,genre,themes, etc.). - Character canonical
nameandaliases. metamaps.- Everything under
analysis(embeddings, passages, summaries).
CLI entry points
screenjson encrypt— full-document encryption pass.screenjson decrypt— matching decrypt.screenjson convert --encrypt <key>— encrypt at convert time.screenjson export --decrypt <key>— decrypt at export time.