Skip to main content
The slugline — the scene heading — is one of the few places in screenwriting where formatting is the structure. ScreenJSON decomposes it into parts.

Shape

{
  "no":      14,
  "context": "INT.",
  "setting": "VAULT — SUB-LEVEL 3",
  "time":    "NIGHT",
  "mods":    ["FLASHBACK", "ESTABLISHING"],
  "desc":    { "en": "Low-ceilinged. Emergency lighting." },
  "meta":    {}
}

Fields

FieldTypeRequiredDescription
contextenumI/E, INT/EXT, EXT/INT, INT, EXT, POV.
settingstring (1–200)Location text, free-form.
timestringTime-of-day / continuity label. See below.
nointeger ≥1Production scene number.
modsstring[] unique, each 1–40 charsAdditional slugline modifiers — INTERCUT, FLASHBACK, ESTABLISHING, SAME, etc.
desctextLanguage-keyed description.
metametaExtension.

time values

Enumerated (preferred):
DAY · NIGHT · DAWN · DUSK · LATER · MOMENTS LATER · CONTINUOUS ·
MORNING · AFTERNOON · EVENING · THE NEXT DAY
Custom values are allowed, constrained by the pattern:
^[A-Z0-9][A-Z0-9 .'’/-]{1,39}$
Uppercase, 2–40 chars, alphanumeric plus space, period, apostrophe, slash, hyphen.

Rendering

Renderers typically reassemble the slugline into the traditional INT. SETTING - TIME form:
INT. VAULT — SUB-LEVEL 3 - NIGHT
The mods array is rendered inline with a dash separator:
INT. VAULT - NIGHT - FLASHBACK
Language rendering uses the per-scene or per-element lang override if present, otherwise the document root lang.