Status: v0.3, 2026-09-04. Phase 0 approved; D1 to D7 locked (section 7). Phase 1 research done (8 files, /research/). Phase 2 bible drafted and awaiting review (/bible/). Review site: https://dating.dev.dgw.to (this doc renders at /plan.html).
Deliverable: one 120-second trailer for a fictional streaming docuseries about the producers of a high-drama dating show.
Acceptance (all must hold):
| # | Criterion | How checked |
|---|---|---|
| A1 | 120s ± 5s, 16:9, 1080p or better, 24 fps, stereo mix | ffprobe on final MP4 |
| A2 | 6 to 8 recurring producer/PA characters, recognizable across every shot they appear in | side-by-side contact sheet per character; Daniel signs off |
| A3 | A legible plot: hook, escalation, turn, button, title card | script table read + rough cut review |
| A4 | Matches the measured trailer grammar (R3, 10 trailers): montage sections average 0.8 to 1.3 s per shot, setup 1.5 to 2.5 s, two mid-trailer music stops, a 2 to 4 s near-silence before the title, title card at 86 to 96% of content | shot-length histogram per 20 s window from scripts/analysis/trailer_metrics.py run on our cut; visual side-by-side |
| A5 | Dialogue lines are intelligible and lip-synced on every on-camera speaking shot | per-shot QA flag |
| A6 | Hosted and playable at https://dating.dev.dgw.to/trailer/ | curl 200 + browser playback |
| A7 | Every phase has a review page on the site before the next phase starts | index page shows status per phase |
Non-goals for this pass: a full episode, vertical cutdowns, distribution, real-person likenesses, licensed music.
Logline (draft): Nobody watches a dating show for the love story. A docuseries follows the story producers, field producers, and production assistants of a Netflix-style villa show as they engineer every hookup, breakup, and blowup the audience will think was real.
Frame: The audience never sees the finished dating show. They see the production of it. Every interview is a producer or PA in a confessional chair. Contestants appear only as raw feed, hidden-camera, or monitor-wall footage. The producers narrate what they did to them and why.
Series title: Manufactured Love (Daniel, 2026-09-04). Name-collision check in docs/research/name-check.md.
Show-within-a-show: Sunburn, a fictional Too Hot to Handle / Love Island hybrid. Trailer only needs a logo card and a recognizable look. Backup names: Heat Index, Villa Rules.
Platform: Bulu, a fictional streamer parodying Hulu (lowercase wordmark, green field, its own tagline). Different green and typeface from Hulu so the trade dress is distinct. Backup: Tantamount+. End card: "A Bulu Original Documentary Series. Coming Soon."
Tone: dark comedy documentary (locked). Straight-faced, no winking. Producers are charismatic, proud, and occasionally horrified at themselves. The comedy comes from the gap between what they say in the chair and what the raw feed shows.
Explicitness rule: manipulation, alcohol, and sex live in dialogue and in implied visuals, never shown outright. Implied beats to build from: a PA tops up a glass below frame; a producer speaks into a radio while a contestant's face falls on the monitor wall; a whiteboard reads "BREAK UP BY EP 4"; a phone slides across a table; a night-vision doorway silhouette; a producer in the chair says "we didn't make her do anything."
Prior art to study and differentiate from:
Each track produces a markdown file under docs/research/ with cited sources, rendered to the review site. Claims below are seeds to verify, not findings.
Seeds to verify with primary or well-sourced secondary sources:
Output: docs/research/R1-production-reality.md, plus a glossary.md the script must use correctly.
Output: docs/research/R2-genre-grammar.md with a style sheet: 10 reference stills, palette swatches, shot-length targets.
Output: docs/research/R3-trailer-grammar.md with a beat sheet template the script fills in.
Live fal catalog pulled with the fal key on 2026-09-04: 154 text-to-video and 233 image-to-video endpoints. Flagship options for talking humans, prices as listed on fal today:
| Model | fal endpoint | Price (per second) | Max clip | Audio | Ref-to-video | Notes |
|---|---|---|---|---|---|---|
| Alibaba Wan 3.0 Prime (Aug 24) | alibaba/wan-3.0-prime/{text,image,reference}-to-video |
$0.14 at 720p, $0.28 at 1080p | 30s single pass | Yes, same pass | 10 images + 5 video + 5 audio | Best reports for two-person dialogue lip-sync at moderate cost |
| ByteDance Seedance 2.5 (Jul 31) | bytedance/seedance-2.5/{text,image,reference}-to-video |
~$0.47 at 720p, ~$1.16 at 1080p | 30s multi-shot | Yes | Up to 50 refs | Highest face realism reports; safety filters reject flirtation/drinking prompts; mixed lip-sync reports |
| MiniMax H3 Max (Aug 26) | minimax/h3-max/{text,image,reference}-to-video, /director, h3-max-turbo |
$0.02 at 768p promo to Sep 7, list $0.08 | 15s | Yes, stereo | Yes | Cheapest iteration; strong lip-sync reports; weaker voice timbre |
| Google Gemini Omni 1.1 Flash (Aug 27) | google/gemini-omni-flash/v1.1/* |
$0.15 at 1080p, $0.30 at 4K | 8s, extend to 40s | Yes | Yes | Clean speech; hero-shot fallback |
| Google Veo 3.1 (Oct 2025) | fal-ai/veo3.1, /fast, /reference-to-video |
$0.40 audio 1080p; fast $0.15 | 8s, extend | Yes | Yes | Oldest flagship, most expensive; cleanest speech per reports |
| Kling 3.0 / O3 (Feb 2026) | fal-ai/kling-video/v3/pro/*, o3/* |
$0.168 with audio | 15s, multi-prompt up to 6 shots | Yes | Elements | Repeated audio/lip-sync complaints |
| LTX 2.5 (Aug 11), FLUX 3 video (Jul 23), Grok Imagine 1.5 (Jun 17) | see catalog | $0.12 to $0.29 | 10 to 20s | Yes | Partial | Bench only if the top three fail |
Not available: Sora (product shut down April 2026; fal endpoints deprecated), Runway Gen-4.5 (not on fal), Luma Ray 3.2 (on fal only via luxin's wired luma/agent/ray/v3.2, no ref-to-video).
Talking-head specialists on fal: fal-ai/bytedance/omnihuman/v1.5 (image + audio to talking video, $0.16/s), fal-ai/kling-video/lipsync/audio-to-video, fal-ai/sync-lipsync/v3.
Character reference images: fal-ai/nano-banana-pro, fal-ai/nano-banana-2, fal-ai/bytedance/seedream/v5/lite/{text-to-image,edit}, fal-ai/gpt-image-1.5. All in the live catalog.
Consistency approach (to validate in Phase 3 and 5):
refs/ folder and a drift.md log of what broke identity (hair, glasses, wardrobe pattern).Sources and the community comparison notes are in docs/research/R4-models.md (to be written from the 2026-09-04 lookup; X-post claims are single-creator tests and not reproduced).
Output: docs/research/R5-longform-practice.md and the dialogue-strategy decision.
All in the repo, all rendered to the review site.
bible/show.md: BTS series title, logline, tone, rules of the world, the show-within-a-show one-pager (format, host, villa, rules, prize).bible/characters.md: 6 to 8 production characters + 4 to 6 contestants + 1 host. For each: name, age, role, one-paragraph bio, wardrobe lock (exact garments and colors), physical lock (hair, glasses, tattoos, build), voice note (ElevenLabs voice id once cast), a signature line, their sin in the trailer, and their arc.characters/<slug>/refs/*.png: approved reference sheets.style/frames/*.png: 8 to 12 style frames (confessional, control room, villa day, villa night hidden-cam, monitor wall, writers' room whiteboard, Zoom call).script/trailer-v1.md: 120s script as a two-column table (picture / sound), with timecodes, every soundbite attributed to a character.storyboard/shots.csv + storyboard/index.html: one row per shot: id, section, duration, shot type, characters, location, action, dialogue, model, prompt, reference images, audio plan, status.audio/: VO takes, music cue, SFX list.Stack: TypeScript on Node 22, pnpm. Reuse from this box:
~/claude/zerostudio: fal queue client with retry and duration bucketing, voice-audition script, LLM critique loop, Remotion caption templates, ffmpeg concat/mux.~/claude/image-mcp-repo/image-mcp/examples/music-videos/tools/create_storyboard_plan.py: per-character wardrobe/appearance lock pattern (port the idea, not the code).~/claude/luxin-repo/luxin/docs/references/sources/: captured OpenAPI schemas for ~20 fal video endpoints; decision doc noting fal video must use the queue API (queue.fal.run), not fal.run.Stages, each a CLI command under pipeline/:
chars: generate and curate reference sheets (image models).frames: style frames and per-shot keyframes (image edit with refs).clips: per-shot video generation via fal queue, with model per shot from shots.csv; writes out/clips/<shot>/<take>.mp4 + a JSON receipt (model, prompt, refs, cost, duration, seed).qa: automated checks (duration, resolution, black frames, audio present); identity gate by InsightFace buffalo_l cosine between each character's front crop and every 6th frame (threshold calibrated on accepted takes, start near 0.40); a 0/1/2 rubric pass (hands, text, extra people, eye line, lip motion) via a vision model; then a contact-sheet page for human pick. (R5 section 4 and 7.)voice: one ElevenLabs Voice Design voice per character, saved to a slot and reused on every line; confessional-chair lines driven through fal-ai/bytedance/omnihuman/v1.5 from an approved still, two takes per line; native model audio only where a camera move is needed. (R5 section 2.)music: trailer bed from Stable Audio 2.5 or Lyria 3 Pro on fal. Not Eleven Music: film/TV rights need an Enterprise plan. SFX and stings from ElevenLabs SFX. (R5 section 5.)assemble: EDL from shots.csv -> ffmpeg cut, Remotion titles/lower-thirds, mix, grade LUT, export.publish: copy phase outputs into site/ and rebuild the index.Receipts: every generated asset gets a sidecar JSON with model, endpoint, prompt, refs, seed, cost, and time, so the cost table in the review site is computed, not estimated.
Secrets: .env.local (gitignored). fal key sourced from ~/claude/luxin-repo/env/.env.local (newest of 7 on disk, verified 2026-09-04). ElevenLabs key exists in ~/claude/zerostudio/.env.local (verify it still works before Phase 7).
Storage: renders live in out/ (gitignored) and are copied to site/ for review. If total exceeds a few GB, move to Vercel Blob or R2 and link.
site/ served by dating-site.service (python http.server, 127.0.0.1:8792), tunneled by ngrok-dating.service (ngrok http 8792 --url dating.dev.dgw.to). Both systemd user units, enabled. pnpm publish rebuilds the site; no deploy step. ngrok only, per Daniel; a Vercel detour on 2026-09-04 was rejected and fully removed.*.dev.dgw.to also names dev.dgw.to, and both hosts resolve to the same ngrok IPs, so a browser can reuse one HTTP/2 connection for both and ngrok's edge answers 421 for the second host. Fix on Daniel's side: reserve dating.dev.dgw.to explicitly in the ngrok dashboard so it gets its own certificate, then add a specific dating.dev CNAME in DNS to that reservation's target.ngrok-dev.service (dev.dgw.to, port 8791) is untouched and still up./phase-N/ with a status line on the index. Clip pages include per-shot approve / redo controls that write to a local JSON via a tiny endpoint, or, simpler, Daniel leaves notes in a REVIEW.md per phase.Each phase ends with a page on the review site and a checkpoint. Work does not start on the next phase until the checkpoint is passed, except research tracks, which run in parallel with creative drafting.
| Phase | Work | Review page | Exit criterion | Est. spend |
|---|---|---|---|---|
| P0 Plan | This document | /plan.html | Done 2026-09-04: D1 to D7 locked | $0 |
| P1 Research | R0 to R5, glossary, name check, UnREAL memo | /research/ | Done 2026-09-04: 8 files, every claim sourced, each with a Not verified list | $0 |
| P2 Bible | Show one-pager (Sunburn, Bulu, two looks), character bible v0.2 (8 crew, 4 cast in trailer, host), arcs, trailer plot on the beat sheet | /bible/ | Done 2026-09-04: four-lens review, decisions in docs/reviews/; Marcus lead, Kaya closer, Colton and Rafe cut |
$0 |
| P3 Looks | v1 and v2 on Seedream 5 lite (superseded). v3 on Nano Banana 2: 21 characters (10 full sheets with three action frames, 11 light), 15 location plates with two candidates each, real stills as style references on every sheet view | /characters-nb2/, /style-nb2/ | v3 plates done 2026-09-04 and read as photographs; v3 fronts generated, picks and sheets in progress; two-reviewer QC against docs/qc-rubric.md before Daniel's checkpoint |
v1+v2 $18, v3 about $25 |
| P3.2 Realism bake-off | Daniel (2026-09-04): the v2 set is "so much worse" than real show stills. Benchmark set of real Love Island / THTH / Bachelor stills in out/refs/real/; R6 research on per-model photoreal prompting and style-reference workflows; the newest generation of each image family on fal (Seedream 5 Pro, Nano Banana 2 and Pro, FLUX 2 Pro, GPT Image 2, Qwen-Image 3, Grok Imagine 2, Muse, MAI-Image 2.5 Pro; Seedream 5 lite and gpt-image-1.5 kept only as baseline rows) on six identical briefs including the real Love Island promo template, text-only then identity-plus-real-still style reference. Rule from Daniel: never use an out-of-date model; check the fal catalog by date before each phase |
/bakeoff-img/ | Decided 2026-09-04: Nano Banana 2 (fal-ai/nano-banana-2, $0.12 per image) for cast, crew, and plates; it matched the real promo template, produced press-photo candids and a photographed-looking bedroom, accepted swimwear briefs, and held identity through style references. Seedream 5 Pro is the fallback for refusals. GPT Image 2 refused every swimwear brief; Grok, MAI, and Muse refused too. v3 set (out/characters-nb2) uses the promo template for cast fronts, a press-still brief for crew fronts, and two real stills per view as style references |
$12 actual for the bake-off |
| P4 Script + board | 120s script, beat sheet, shots.csv with model + prompt per shot | /storyboard/ | Table read holds up; shot count and durations sum to 120s | $0 |
| P5 Bake-off | Same 3 shots (solo confessional, two-person scheme, montage action) on Wan 3.0 Prime r2v, Seedance 2.5 r2v, H3 Max r2v/i2v, plus Omni Flash 1.1 and OmniHuman 1.5 for the confessional | /bakeoff/ | Model-per-shot-type chosen with side-by-side evidence, identity-gate scores, and per-clip cost | $30 to $60 |
| P6 Clips v1 | All shots generated, QA, regen failures | /clips/ | Every shot has an approved take; drift log closed out | $100 to $300 |
| P7 Audio | Voices cast and recorded, lip-sync where needed, music, SFX | /audio/ | Every soundbite approved; cue approved | $10 to $40 |
| P8 Cut v1 | Assemble, grade, titles, mix | /trailer/v1/ | Watchable end to end; shot-length histogram matches R3 targets | $0 |
| P9 Final | Notes, regens, v2/v3 | /trailer/ | Acceptance A1 to A7 all pass | $30 to $100 |
Hard cap: $500 total generation spend (D5 locked). A running spend table on the review site index is computed from asset receipts.
Draft-first policy: every shot is first generated as a draft at 480p or 768p (H3 Max, or Omni Flash at 360p) to lock prompt, blocking, and identity. Only approved drafts are regenerated at 1080p on the model the bake-off picks. Target split: drafts and bake-off under $120, finals under $300, reserve $80.
Cost basis (R5 section 7, fal list prices 2026-09-04, 50 shots, 5 s clips): draft pass of 150 takes on Wan 3.0 Prime at 480p about $51 (H3 Max 768p list about $60); final pass of 75 takes on Wan 3.0 Prime at 1080p about $105 (Omni Flash 1080p about $90); 20 confessional lines x 2 takes on OmniHuman 1.5 about $32; ElevenLabs lines about $2; Topaz upscale of the cut $2.40; music candidates $0.08 to $1.20 each. Clean run about $190. Reference sheets (10 to 20 image generations per character, 11 characters) and the bake-off sit on top. Seedance 2.5 at 1080p ($437 for the final pass alone) is out unless it wins the bake-off by a wide margin, and then only for a handful of hero shots.
| Risk | Mitigation |
|---|---|
| Character drift across shots | Reference sheets in every call; keyframe-first; drift log; accept 720p if it buys more regen passes |
| Safety filters reject drinking / manipulation / sexual content (Seedance reports) | Write prompts in production language ("hands her a third drink" not "gets her drunk"); keep explicit content in dialogue, not picture; Wan and H3 Max as fallbacks |
| Lip-sync fails on native audio | Strategy (b): ElevenLabs track + lip-sync model; decided in P5 |
| Trade dress: Bulu reads as Hulu's actual mark | Own typeface, own green, own tagline; parody name only. No real platform logo or sting anywhere |
| Real-person likeness by accident | Prompts never name real people; refs are generated, not photos; QA checks for celebrity lookalikes |
| "This is UnREAL" | Differentiation memo in P1; docuseries format; ensemble |
| fal queue timeouts and partial failures | Queue API with polling, per-shot receipts, idempotent regen |
| Cost overrun | Per-phase spend gates; receipts roll up on the review site; hard cap set in D5 |
| Music licensing | Generated cue only |
| Review site is public | Accepted (D6). No secrets or keys ever land in site/ |
| # | Decision | Answer |
|---|---|---|
| D1 | Series title | Manufactured Love. Inner show Sunburn |
| D2 | Tone | Dark comedy |
| D3 | Platform framing | Fictional streamer Bulu (Hulu parody), own trade dress |
| D4 | Explicitness | Dialogue plus implied visuals; nothing shown outright |
| D5 | Budget | $500 hard cap; drafts at low res before any 1080p spend |
| D6 | Review site | Public |
| D7 | Aspect | 16:9 only |
~/claude/dating-show-repo/dating-show, GitHub danielgwilson/dating-show (private), main at initial scaffold.~/claude/luxin-repo/env/.env.local.docs/research/R0-prior-work.md.Verified 2026-09-04 (later in the day): ElevenLabs key in ~/claude/zerostudio/.env.local is active, Creator tier, about 290k of 300k characters left this cycle. fal image prices: Seedream 5 lite $0.035 per image (text-to-image and edit), Nano Banana 2 $0.08, Nano Banana Pro $0.15 (+ edit). Reference sheets for 11 full characters at 15 generations each cost about $6 on Seedream 5 lite or $25 on Nano Banana Pro.
Not verified: fal upscaler endpoint behaviour beyond the R5 price list; Gemini Omni Flash duration options beyond 8s on fal; Kling v3 resolution enum on fal; all X-post quality claims.