Developer Guide

Dependency graph

Interactive map of the generation graph: pick anything you can edit and see which prompts, sheets, stills and clips go stale.

Every generated artifact stores a hash of the inputs it was made from. Staleness is never a flag we set: on every read we recompute the hash from the current inputs and compare. A mismatch is stale. A row with no stored hash is untracked and never stale. Versioned things (green border) keep every generation as a row and a pointer picks one. Renders record which version of a prompt or sheet they used, so selecting a different version is what makes them stale, not editing the text.

  • tracked
  • not tracked — a gap
  • not tracked, by design
  • seeded once, then yours
  • versioned
  • optional
  • goes stale
  • makes it stale
Dependency graphYou write and setLibrary · optional, reused across sequencesBibles · seeded from the script or the library, then yoursReferencesPromptsRendersCutThe scene text and its slugline, as split from your script. Heading, time of day, story beat and continuity tags are versioned with the text, so a stale shot names the field that moved.ScriptThe sequence frame shape.Aspect ratioThe render tier a clip is asked for.ResolutionThe LLM that writes prompts.Script modelThe model that renders sheets and stills.Image modelThe model that renders clips. Also decides which durations a shot can snap to and whether it can hear dialogue or take reference clips.Video modelThe model that renders the score.Music modelSeconds per shot, snapped to the video model.ShotdurationAnimate a rendered still, or render straight from the reference sheets. A shot can override the sequence setting.Start-framemodeDesign an ElevenLabs voice for each speaking character. Per-character override on the card.VoicesInclude the score in the cut.MusicAppend the dialogue lines and audio direction to the motion prompt when the video model can hear. Chosen per render in the scene editor.SFX &dialogueHow far a generation run goes: script, references, images, motion or music.Stop atPhotos uploaded as input for a location's sheet (#1695). Any number; the sheet is drawn from all of them. Adding or removing one revokes a sheet run in flight.LocationphotosAn organization or system style in the catalog. Picking it copies its config onto the sequence; the catalog row is never read again.CatalogstyleExtracted from the script at the Script stage, then yours to edit. The character's face, sheet and voice live on the character. Every change is a version. The character belongs to the organization (#2017): every sequence that casts it reads its current version, so an edit from any sequence re-stales the shots of every sequence by derivation, and a stale shot names the field that moved since the version live when it was made. A voice-only character (a narrator) has a row but never a sheet. What a character wears is its looks, not the bible.CharacterAn outfit on one character: a name, the clothing, and the hair, makeup or injury notes that change with it (#2015). Every character has a default look, and each scene picks one look per character. Every edit is a version, read by every sequence that casts the character (#2017), so a stale shot names the look and what moved: Character "Mia" (Gala gown): clothing. Each look has its own sheet, shared by every sequence.LookExtracted from the script at the Script stage, or one of the organization's locations picked for the sequence, then yours to edit. Every change is a version. The location belongs to the organization (#1695): every sequence that uses it reads its current version, so an edit from any sequence re-stales the shots of every sequence by derivation, and a stale shot names the field that moved.LocationA prop, effect, sound or clip referenced by @token. Detected in the script at the Script stage or added by hand, then yours to edit.ElementThe look and motion config snapshotted onto the sequence: derived from the script by the auto style, or picked from the catalog. Every snapshot is a version, so a stale shot names the knob that moved.StyleThe lines spoken in one shot. Seeded by the shot-list call at the Script stage, then edited on the shot — the script's copy stays as the LLM's seed and is only read for a shot with no row yet. A scene's conversation is its shots in order, then each shot's lines in order, so there is no scene-level list to keep in step.Shot dialoguelinesTurnaround sheet for one look of a character (#2015): one sheet per look some scene wears, and the character's own sheet is its default look's. The face, the sheet and the voice live on the character. The sheet is the look's, so every sequence that casts the character shares it (#2017). Every look other than the default is drawn from the default look's completed sheet and hashes that sheet's selected version. The default look is drawn from the character's reference photo when it has one (#2254), and hashes its URL. A run holds a claim on its look: an edit to anything the sheet reads revokes it, so the run parks its result instead of landing it.CharactersheetA designed ElevenLabs voice for a speaking character. Bound on the clip like a character sheet on the still — the LLM never sees the id, so a voice change does not rewrite the motion prompt. Every write appends a row and moves the pointer; a row whose ElevenLabs slot has been freed is stamped released and can never be selected again.VoiceOne acted Text to Dialogue call, kept as the whole file it came back as — never joined, never copied per shot. The call speaks the conversation around the shots it was made for, so every turn is a reply to a line the model heard. Append-only with no selection of its own: shots point into it.Dialogue speech(whole file)The time range of a speech this shot speaks in. A speech adds a row for every shot it spoke: selected for the shots it was made for, left as an unselected context reading for the rest, so an edit to one shot re-points one shot. The selected row is cut to a file on shots.audioClips, and that clip's id is the row's id.Shot dialoguesectionReference image for a location. One sheet, whichever sequence drew it, or none (#1695). A run holds a claim: an edit to anything the sheet reads revokes it, so the run parks its result instead of landing it.LocationsheetThe text the still is rendered from. A scene of one shot gets it from the model; every clip of a multi-shot scene has it assembled from the shot spec.VisualpromptThe text the clip is rendered from. Assembled from the shot spec on a multi-shot scene, the same as the visual prompt.MotionpromptOne prompt for the whole sequence.Music promptThe rendered start frame for a shot.StillA shot's grey animatic, drawn from each spec version and stamped with it, start-frame shots included. A sketch of an older spec, or of an older cast, reads stale (#2350).StoryboardsketchThe rendered video for a shot.ClipThe generated score.Music trackThe stitched MP4.Export

Export

generatedsequence_exports.sourceShotsHash

The stitched MP4.

Counts

The check compares these. Change one upstream and this goes stale.

  • Selected clip URL per shot, in order
  • Music URL, if included

Does not count

Change these freely. Nothing goes stale.

Nothing.

Regenerate this and these go stale

Nothing downstream is tracked.

Goes stale when any of these change

  1. in the input hash — the selected clip URL
  2. in the input hash — the music URL
  3. in the input hash — the music URL joins the export hash only when music is on
  4. via Clip — the manifest records the prompt version; a token rename writes a new version, so it re-stales the clip
  5. via Clip — the sheets ride as video references in both modes, only for characters the motion prompt names (#2012); the manifest stamps the version sent
  6. via Clip — only reference-only sends the location sheet, and only the room the motion prompt names. The manifest stamps the version it was sent (#2012)
  7. via Clip — a start-frame render records its still and a reference-only one records none, so switching a shot either way flags its clip
  8. via Clip — the manifest length against the live duration, each snapped onto the model grid, so a pipeline re-snap no longer flags every clip (#767)
  9. via Clip — every line the prompt quoted folds into dialogueKey, and voiced lines into audioSourceKey, on the manifest
  10. via Clip — the voice id folds into audioSourceKey; the LLM never sees it
  11. via Clip — the manifest records the clip id (audioClipIds), which is the section's id, so picking another reading of the same lines re-stales only that shot's clip
  12. via Clip — its media URL is stamped in referenceKeys when the motion prompt names it. A re-upload then flags the render; a key for an element the prompt no longer names is not compared (#2012)
  13. via Music track — the selected prompt text and tags are in the track hash; Update all can regenerate the track on its own
  14. via Motion prompt
  15. via Motion prompt — only a character this prompt names. An unwritten prompt reads the scene continuity tags (#2012)
  16. via Motion prompt — the clothing of the look this scene picks for a character the prompt names. Another look of the same character moves nothing (#2015)
  17. via Motion prompt — only a location this prompt names among the scene's tagged rooms, else those rooms. An unwritten prompt also reads the scene extract (#2012, #2289)
  18. via Motion prompt
  19. via Motion prompt
  20. via Location sheet — the set of uploaded photos; order does not count
  21. via Shot dialogue section — a section is a time range of one speech; a regeneration appends a speech and re-points only the shots it was made for

What "Update all" regenerates

The depth picker is cumulative. Each rung includes the ones above it, and no rung ever creates an artifact that does not exist yet.

  1. 1.Prompts only — Rewrites stale visual and motion prompts. Nothing renders.
  2. 2.Prompts + images — Also re-renders a still that is stale, or whose prompt was just rewritten. Never renders a first still.
  3. 3.Prompts, images + dialogue — Also re-records a dialogue reading whose voice or lines moved. Never a first recording. Video stays for the next tick so the new take can be reviewed.
  4. 4.Prompts, images, dialogue + videos — Also re-renders a clip whose prompt, still, or dialogue changed in this run, or whose manifest already diverged. Never renders a first clip.
  5. 5.Everything, incl. music — Also rewrites a stale music prompt, then the track if one exists. Never a first track.