Files
OpenMontage/backlot
calesthio 4f9c612b28 backlot: address review findings (SVG visuals, decision-key doc, tests)
From an independent review of the branch:

- Regression: existing non-raster-but-showable visuals (.svg diagrams) were
  dropped by the renderable filter — they were served fine before via <img>
  (/thumb passes SVG through). Add .svg to MEDIA_IMAGE_EXT.
- Doc accuracy: the board dedupes decisions by (category, subject), not category
  alone (category-only would wrongly merge distinct decisions that share a
  category, e.g. TTS vs image provider_selection). Correct AGENT_GUIDE to say
  the pair is the key and to reuse the same subject when re-logging.
- Coverage: the new visual-selection logic was untested (which let the earlier
  missing-file regression through). Add TestStoryboardVisualSelection covering
  the .tsx-animation exclusion, snapshot fallback (exact + <id>_* match), SVG
  renderability, the preserved missing-file indicator, and takes = renderable.

Not changed (reviewed, deliberate): .narr clamp at --fs-scale 1.16 degrades
gracefully via the fade + click-to-expand modal; decision dedupe stays keyed on
(category, subject) as the more-correct behavior.
2026-07-03 07:25:39 -07:00
..

Backlot — the living storyboard

A read-only local board that shows a production happening: pipeline stages lighting up, the script as a screenplay page, the scene plan as a filmstrip that fills in as assets generate, decisions, spend, and activity — all derived from what the pipeline already writes to projects/<id>/.

python -m backlot open <project-id>   # start server if needed + open browser
python -m backlot open                # library view (all projects)
python -m backlot serve --port 4750   # run the server in the foreground

How it stays live

No agent involvement. A watchfiles watcher on projects/ publishes change notifications over SSE; the browser refetches board state. State sources:

Board element Disk source
identity / rail order project.json + pipeline_defs/<type>.yaml
stage states, gates, versions checkpoint_<stage>.json + history/
script card / modal artifacts/script.json
filmstrip cards scene_plan × script × asset_manifest join
generating shimmer, activity events.jsonl (written by BaseTool instrumentation)
cost meter checkpoint cost_snapshot
renders renders/*.mp4 (+ root-level mp4 heuristic)

Projects without checkpoints degrade gracefully to a "what the watcher found" view — media, snapshots, renders.

Replay: a completed run can be scrubbed end-to-end (▶ REPLAY RUN on the board) — reconstructed from checkpoint history and event timestamps.

Try it without a real production:

python scripts/backlot_simulate_run.py          # live demo run (~1 min)
python -m backlot open backlot-demo-run

Design doc: internal/design/LIVING_STORYBOARD.md.