"Turn a video timeline + voiceover into a reproducible, sliceable Veo 3.1 prompt package with a consistency anchor and AI storyboard sketches."
Instal·la
npx skillscat add blackbelttechnology/pi-agent-dashboard/veo-showreel-production-kit Instal·la des del registre de SkillsCat.
SKILL.md
When to Use
Use when a user has a script/timeline + voiceover and wants to generate a consistent, professional AI video (Veo) where each fragment can be rendered separately/in parallel yet stays visually coherent and is easy to revise. Especially for trade-show/booth showreels.
Procedure
- Research the target context (e.g., trade-show showreel best practices) and Veo prompting + consistency features (reference images, first/last-frame, seed, enhance_prompt=false). Write a research/strategy doc.
- Write a STYLE BIBLE = global consistency anchor: single location/world, color palette, verbatim STYLE LOCK and AUDIO LOCK sentences, recurring object/character descriptions, a global NEGATIVE prompt, brand/compliance rules, and fixed reproduction settings (model, 16:9, 4K/24fps, constant seed, enhance_prompt=false).
- Split the timeline into <=8s render units (Veo max clip ~8s); long scenes become A/B sub-shots. Mark each boundary as hard-cut (parallel) or SEAMLESS (chain last-frame of A as first-frame of B).
- Generate per-shot markdown via a data-driven Python script: each file has the 7-layer prompt (camera, subject, action, environment, lighting, STYLE LOCK, AUDIO LOCK), an assembled Full Veo prompt (~110-170 words), the negative prompt, continuity notes, and repro settings. Also emit one combined VIDEO_MASTER.md.
- Generate AI storyboard sketches with nano-banana (Gemini image model): a master world-anchor frame + one sketch per cut. Use these as Veo reference/first-frame images. Run with limited concurrency (ThreadPoolExecutor max_workers=3) over a sketch_prompts.json.
- Audio policy: instruct Veo 'no spoken dialogue, no voiceover, no song vocals' so it only makes ambient SFX; the official VO + music are added in post.
- Emit machine-readable sidecars from the SAME data file the markdown generator reads (never hand-edit them separately):
video_production/film.json—{ style (required), title?, consistency?, negative?, aspectRatio?, characters?: [{ id, description }] }(unique ids).video_production/shots/shot_NN.jsonpershot_NN.md—{ prompt: { visuals, action, scene?, effects?, audio?, visibleCharacters?: [character ids] }, durationSec: 1–300 }. First frame, SEAMLESS flag, seed and negative stay in the markdown only.video_production/timeline.json—{ segments: [{ shot | image, trimStartSec?, durationSec? (required for image), ambientVolume? 0–2, transitionTo?: { style: fade|fadeblack|fadewhite|wipeleft|wiperight|slideup|slidedown|circlecrop|dissolve, durationSec ≤ 3 }, overlay?: { title?, subtitle?, position?: bottom-left|bottom-center|top-left|center } }], output?: { resolution "WxH", fps 1–120, codec mpeg4|h264 }, voiceover?: { path, volume? 0–2 (1), offsetSec? (0) }, music?: { path, volume? 0–2 (0.3) }, captions?: { path: "*.srt" } }. All paths relative tovideo_production/, inside it, no symlinks. Caption cue times are in the FINAL output time base — never shifted byvoiceover.offsetSec. No transition on the last segment.
These enablepi-veo export render|timeline(pi-video-gen providers) andpi-veo mux(final VO + music + captions).
- Write an index README explaining read order, per-slice render steps, assembly, and how to revise one beat (re-render only that slice with same seed+anchor).
Pitfalls
- Veo clips are ~8s max — never author a single >8s render unit; split into A/B and chain frames.
- Paraphrasing the style block per shot causes drift; the STYLE LOCK and AUDIO LOCK must be byte-identical across every prompt.
- Without a shared reference image attached to every generation, parallel slices diverge — always attach the world-anchor.
- Let Veo invent narration if you don't explicitly forbid speech in the audio line.
- For neutral/defense content add 'no flags, no national insignia, no real weapons, no brand logos' to the negative prompt and reserve a clean empty center for the logo in the final shot.
- Sidecar/markdown drift:
promptinshot_NN.jsonand the markdown "Full Veo prompt" are not cross-checked — regenerate both from one data source. - nano-banana CLI: npx -y @the-focus-ai/nano-banana "" --output file.png ; needs GEMINI_API_KEY; describe 16:9 in the prompt (square by default).
Verification
- All shot files exist (one per cut) + VIDEO_MASTER.md + style bible + research + voiceover + README.
- Every Full Veo prompt ends with the identical STYLE LOCK + AUDIO LOCK and references the same seed.
- Storyboard sketches generated for the world anchor and every cut; spot-check key frames (opener, any on-screen-text shot, recurring character, final logo-space shot) for look + compliance.
pi-veo parse <Project>reportsSidecars: enabledwith 0 problems (exit 0).- Build a contact sheet (ImageMagick montage) to eyeball cross-shot consistency.
Mode: Veo as FX layer over real footage
When the video is built from real screen or site recordings, Veo does not render shots — it renders only additive FX layers.
- Every process on screen comes from real footage; drop any beat that has no recording instead of generating it.
- Prompt each FX layer on a pure black background (light, particles, flares, scan lines; no objects, no people, no text).
- Composite with
mix-blend-mode: screenon the FX wrapper; set the black point before blending if the render is tinted. - The assembly, music edit, camera punches and export QA follow the
hyperframes-showreelskill.