# RECORD STORE GUY — master execution plan *(title FINAL — John's executive call, 2026-07-19)* Dragon's Lair / Space Ace-style FMV QTE game: a guy in a record store surviving escalating, ridiculous, surreal hazards — the floor floods into a shark ocean, turns to lava, the roof rips off into space, the store goes full Tron. Uncharted- level setpiece adrenaline + Dragon's Lair wrong-move-you're-dead urgency + comedy. AI-generated 4–5s clips (Google Flow / Veo, John's 9000 paid credits) strung together by a web player demanding precisely-timed inputs. Creative design of the worlds/setpieces: **WORLDS.md** (read it after this file). **Division of labor (hard rule):** - **Google Flow (9000 credits)** = ONLY the final in-game video clips. John paid for these and wants them used — but never wasted on tests that FLUX can do. - **MODELBEAST FLUX (`flux_local`, free, ~9s/image)** = all concept art, character bible references, style frames, marketing art, and the stills we upload to Flow as "ingredients" for character consistency. - **MODELBEAST local video ops** = optional pre-viz/animatics only, never final clips. ## Environment facts (verified 2026-07-19 on m3ultra) - MODELBEAST queue **UP**: `http://100.89.131.57:8777` (34 operators). This machine (m3ultra) IS the primary. - CLI: `~/Documents/MODELBEAST/mb` (stdlib-only python). Needs `MB_TOKEN` env var. **Token was NOT found on m3ultra** — it lives in `~/Documents/backnforth/.env` on **ultra** (per fleet skill), or create/read one via MODELBEAST web UI ⚙ Settings → Users → token, or `scripts/users.py`. Read from disk; never print/commit it. Example: `MB_TOKEN=$(ssh ultra@100.91.239.7 'grep MB_TOKEN ~/Documents/backnforth/.env | cut -d= -f2')` — or ask John which token to use. Guest tokens cap at 4 active jobs. - ffmpeg: `/opt/homebrew/bin/ffmpeg` ✅ - Project dir created: `~/Documents/recordstoreguy/` with `bible/concept/`, `engine/clips/`, `tools/`. ## Phases ### Phase 1 — Engine shell with placeholder clips (zero credits) Build the full player before any real video exists. Placeholders prove the QTE feel. Spec: `ENGINE.md`. Placeholder generator: `tools/make_placeholders.sh` (ffmpeg test-pattern clips with big text + a visual "beep" flash at the QTE window so timing is testable by eye). Definition of done: playable in browser start→3 scenes→death→ retry→win, lives counter, attract loop, debug overlay showing windows. ### Phase 2 — Bible + FLUX concept art (zero credits) `bible/BIBLE.md` holds the verbatim STYLE/CHARACTER/SET blocks (drafted — see file). Generate concept art on MODELBEAST; iterate until John approves each. Commands: ```sh cd ~/Documents/MODELBEAST export MB_TOKEN=... # from disk, see above ./mb run flux_local -p prompt="" -p seed= --wait --download ~/Documents/recordstoreguy/bible/concept/ ``` Concept shot list (full prompts in BIBLE.md §Concept-art prompts): 1. `hero_sheet` — Dez full-body turnaround, neutral pose, front+side 2. `hero_face` — close-up head, 3/4 view (this becomes the Flow ingredient) 3. `villain` — the antagonist (direction TBD with John — see Open Decisions) 4. `store_wide` — the record store master set, wide establishing 5. `store_backroom` — second set (stockroom / listening booth) 6. `style_frame` — one full "this is what the game looks like" money shot 7. `death_concept` — one comedic death (shelf of crates toppling) 8. `title_card` — RECORD STORE GUY logo/marquee concept Run 3–4 seeds each, keep best. Free, so iterate hard BEFORE touching Flow. ### Phase 3 — Flow style + consistency test (~180 credits MAX, gated on John's approval) **3a Style test first:** compile `shots/t2_s3_sharkrun.json` in all 4 looks (`tools/promptc.py ... --all`), gen each once in Veo Fast (~80 cr) with the matching FLUX ingredient still per look. John picks the look (default cel80s — the build assumes it; a different pick only swaps prompt text, zero code change). **3b then:** In Google Flow (browser; John logs in himself — never handle his credentials): 1. Upload approved `hero_face` + `hero_sheet` FLUX stills as **ingredients**. 2. Generate 5 test clips, Veo Fast (~20 cr each): same character, same set block, 5 different one-sentence actions (walk-in, duck, grab record, get scared, run). 3. Judge: does the face/outfit/style hold across clips? Log verdicts in `production/SHOTLOG.csv`. If it holds → green-light full production. If not → revise ingredients/style block with more FLUX iterations and retest (another ~100). ### Phase 4 — Story + scene graph (with John — mise en scène discussion) Creative direction now drafted in `WORLDS.md` (premise, 7 worlds, setpieces, deaths, clip budget). Remaining work this phase: John iterates WORLDS.md, then: - `scenes.json` fully authored (schema in ENGINE.md) with per-scene prompt sheets in `production/prompts/` — each sheet is the verbatim template with only the action sentence and camera line filled in. ### Phase 5 — Batch production in Flow (the 9000 credits) Budget: 9000 cr ≈ 450 Veo Fast gens. Keep-rate assumption 1-in-2.5 → ~180 usable clips. Target game: ~35 scenes × (1 action clip + 1 death clip) + intro + attract + game-over + win ≈ **80 final clips** → ~200–280 gens spent, leaving reserve for hero-moment quality gens (100 cr each, use sparingly: intro, final scene, best deaths). Discipline: - Work scene-by-scene from prompt sheets; NEVER freestyle a prompt in Flow. - Frame-chain within a scene (last frame → start frame / Flow extend) for continuity; hard cuts between scenes hide the rest. - Log every gen in `production/SHOTLOG.csv`: `scene_id,take,credits,verdict,notes`. Running credit total in the log; stop and re-plan if burn rate exceeds 2× budget line. - Download keepers to `production/raw/`, then `tools/postprocess.sh` (ffmpeg: trim, normalize to 24fps 1280×720 h264 + aac silent/or SFX bed, name `_.mp4`) into `engine/clips/`. ### Phase 6 — Sound + deploy - SFX/music: needle-drop crackle bed + stingers. (m1max is the audio machine but disk-critical — keep audio work local or ask John.) - Deploy: static site → botchat games VPS (`humanjing@100.71.119.27`, docker) next to the other partly.party games, per deploy-map skill. Verify live with cache-busted curl. - Run ship-check skill before exposing publicly. ## Decisions status 1. **Title**: ✅ RECORD STORE GUY (final, John 2026-07-19). 2. **Premise/worlds/tone**: ✅ surreal escalating setpiece worlds, Uncharted chaos + comedy deaths — designed in WORLDS.md (John reviews/iterates the specifics). 3. **Art style**: OPEN — plan assumes 80s hand-drawn cel (Bluth-adjacent); alt is live-action FMV cheese. Style block in BIBLE.md is written for cel — decide before Phase 3. 4. **Hero design**: OPEN — "Dez" is a placeholder design; John approves/redirects at concept-art review. 5. **Villain**: recommended **The Dead Wax** (fits WORLDS.md arc) — confirm with John. ## File map ``` recordstoreguy/ PLAN.md ← this file (master; Opus starts here) WORLDS.md ← creative design: premise, 7 worlds, setpieces, QTEs, deaths, clip budget ENGINE.md ← full engine spec (schema, player loop, QTE rules, placeholder script spec) bible/BIBLE.md ← style/character/set blocks, prompt grammar, concept-art prompts, Flow workflow bible/concept/ ← FLUX outputs land here engine/ ← index.html, player.js, styles.css, scenes.json, clips/ tools/ ← make_placeholders.sh, postprocess.sh production/ ← (Phase 4+) prompts/, raw/, SHOTLOG.csv ``` Git: repo lives at `~/Documents/recordstoreguy`, remote already configured: `origin ssh://git@100.71.119.27:222/monster/recordstoreguy.git` (Gitea). Never commit tokens; engine/clips + production/raw are gitignored (video bulk stays out of git).