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.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.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 atA library person. Cast onto a character automatically at the Script stage or by hand; casting copies their look, performance and voice onto the character once. These fields only reach a sequence through a regenerated talent sheet: edit the description and the character keeps the old face until the sheet is redone.TalentA reusable location from the team library, matched onto a sequence location automatically or by hand. Its fields only reach a sequence through a regenerated reference image.LibrarylocationA team 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, rewritten by casting when a talent is matched, then yours to edit. A voice-only character (a narrator) has a row but never a sheet.CharacterExtracted from the script at the Script stage, linked to a library location when one matches, then yours to edit.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.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 dialoguelinesThe talent as a sequence sees it. A cast character usually reuses this sheet as its own and always draws from it, so "the talent changed" means "the selected talent sheet changed".Talent sheetTurnaround sheet for a character in this sequence. When cast, it is usually the talent sheet reused; a costumed one is generated only when the role's clothing or features diverge from the talent.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 recording(whole file)The time range of a recording this shot speaks in. A recording 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 dialoguesectionThe library location as a sequence sees it: the location sheet draws from it and folds its hash in.Librarylocation refReference image for a location in this sequence.LocationsheetThe text the still is rendered from.VisualpromptThe text the clip is rendered from.MotionpromptOne prompt for the whole sequence.Music promptThe rendered start frame for a shot.StillThe rendered video for a shot.ClipThe generated score.Music trackThe stitched MP4.Export

Shot dialogue section

generatedversioned — shot_dialogue_sectionsoptional — when voices are on and someone speaks in the shotshot_dialogue_sections.sourceKey → shots.audioClips

The time range of a recording this shot speaks in. A recording 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.

Counts

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

  • Voice id + line + tone + TTS model of the shot's authored voiced lines (sourceKey)
  • Which recording, and from where to where in it

Does not count

Change these freely. Nothing goes stale.

  • A newer recording made for another shot (its reading of this shot waits, unselected, until picked)
  • The wording a fit rewrite actually delivered (kept as spokenLines; sourceKey keys the authored lines)
  • The cut file itself: a cache at a key made from the recording id, the range and the pad floor

Regenerate this and these go stale

  1. by selected version — 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
  2. via Clip — the selected clip URL

Goes stale when any of these change

  1. in the input hash — sourceKey keys this shot's own voiced lines; only a shot whose key no longer matches adopts new audio
  2. in the input hash — the voice id is part of sourceKey, so a new voice re-records the shots that voice speaks in
  3. by selected version — a section is a time range of one recording; a re-record appends a recording 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.