Scene Studio → Short‑Film Studio roadmap
Scene Studio is a story‑first animatic generator (chapter → shot breakdown →
keyframes → Kling i2v clips → ffmpeg cut with multi‑voice dialogue), with
character consistency, versioning, cost caps, and a clip preview. This roadmap
turns it into a short‑film studio that's distinctively better than generic
prompt‑to‑video tools by leaning into the moat (consistent characters +
places across a whole universe) and adding the missing product layers (a real
edit timeline, lip‑sync, integrated sound). The model layer is
pluggable (replicate.run(<id>)), so staying current on motion fidelity is
near‑free.
Each phase ships as its own PR. Generation goes through recordGenerationCost
- the daily spend cap. Migrations applied to prod by the user.
| Phase | What | Key artifacts |
|---|---|---|
| 1 ✅ | Universe canon library — dedicated universe_characters + universe_places tables, service CRUD + idempotent import from story_universes.canon (+ existing portraits) | migration 393, services/universe-canon.ts, /api/story-seasons/universes/:key/{characters,places,canon/import} |
| 2 | Canon image gen + universe‑editor UI — extract shared gen helpers to services/image-gen.ts; generate/restyle/version character + place images; Characters/Places panels in UniverseEditorModal | services/image-gen.ts, universe canon gen, editor UI |
| 3 | Scene Studio ↔ canon + Places — import characters from the library + promote back; a Places panel; per‑shot place_key (migration 394) conditions the keyframe background (multi‑image Kontext) for cross‑shot/chapter consistency | migration 394, scene‑studio service + UI |
| 4 | Shot timeline editor — per‑shot trim + transitions (cut/dissolve/fade, migration 395); assembleSceneAnimatic honors them (ffmpeg xfade); drag‑reorder + scrubber UI | migration 395, assembly rework, timeline UI |
| 5 | Lip‑sync — lipSyncClip(video/image, audio) Replicate model per dialogue shot → scene_shots.lip_sync_url (migration 396); assembly prefers it; per‑shot opt‑in | migration 396, Replicate model |
| 6 | Integrated sound — per‑scene music bed + ducking under dialogue (reuse season-music.ts mixVoiceAndMusic + buildPerSegmentMusicBed); optional per‑shot SFX | assembly sound mix |
| 7 | Model currency + finish (ongoing) — keep model ids current (Kling 2.x / Veo / Gen‑4), engine/quality + camera‑hint selectors, optional 4K upscale | pluggable model ids |
Honest gap framing
- Already competitive as a story‑grounded animatic / pre‑viz generator; the canon depth is the differentiator.
- The distance to a finished short film is mostly product gaps — the timeline (4), lip‑sync (5), and sound mix (6) — not model gaps. "Latest models" closes fidelity (7) but won't, alone, cut a film.
Cross‑cutting
Cost metering (recordGenerationCost, GEN_PRICE_USD, daily cap extended to universe_canon.*), the versions[] + restore pattern on every asset, the scripts/audit-gen-cost-logging.py gate for new gen sites, and docs/ai/INDEX.md kept in sync.