film-pipeline
Skill2 starsChanged 51 days agoApache-2.0View on GitHub
End-to-end workflow for making a short, photoreal, live-action-style AI film or cinematic product film (idea → direction → script → character/location/prop sheets → screen captures → shot prompts → parallel video generation → review/lock/assemble). Use when the user wants a short film, a cinematic scene, a product trailer shot like a film, or asks "how do we go from idea to finished AI video". Routes to the stage skills.
In this repository74 other files it gives its agents.
- card-gameSkill
- pixel-art-spriteSkill
- rhythm-gameSkill
- side-scrollerSkill
- visual-novelSkill
- boss-modelSkill
- character-modelSkill
- environment-sceneSkill
- vfx-effectSkill
- weapon-propSkill
- worldview-3d-asset-production-routeSkill
- film-action-combatSkill
- film-character-sheetSkill
- film-dialogue-voiceoverSkill
- film-directionSkill
- film-end-creditsSkill
- film-generate-reviewSkill
- film-locationSkill
- film-prop-sheetSkill
- film-screen-captureSkill
- film-scriptSkill
- film-shot-promptSkill
- film-storySkill
- film-style-librarySkill
- anime-action-sceneSkill
- cinematic-filmSkill
- game-cutscene-generatorSkill
- product-demoSkill
- social-media-videoSkill
- worldview-gameplay-experience-studySkill
- worldview-gameplay-video-analysisSkill
- boss-battleSkill
- hero-skill-systemSkill
- horror-chaseSkill
- narrative-choiceSkill
- platformer-levelSkill
- puzzle-mechanicSkill
- roguelike-generatorSkill
- worldview-game-asymmetric-information-cooperationSkill
- worldview-game-barricade-delay-and-route-choiceSkill
- worldview-game-character-handoff-and-shared-evidenceSkill
- worldview-game-chase-route-architectureSkill
- worldview-game-death-loop-persistent-cluesSkill
- worldview-game-driving-horror-divided-attentionSkill
- worldview-game-evidence-based-entity-identificationSkill
- worldview-game-horror-experience-rhythmSkill
- worldview-game-horror-mundane-routine-corruptionSkill
- worldview-game-horror-procedural-duty-and-incidentSkill
- worldview-game-horror-returning-place-escalationSkill
- worldview-game-horror-role-and-identity-pressureSkill
- worldview-game-key-item-backtrackingSkill
- worldview-game-limited-save-riskSkill
- worldview-game-lure-hide-escapeSkill
- worldview-game-observation-gated-stalkerSkill
- worldview-game-perception-distortion-and-trustSkill
- worldview-game-relief-resource-with-hidden-costSkill
- worldview-game-restore-power-under-pressureSkill
- worldview-game-roaming-stalker-pressureSkill
- worldview-game-safe-room-pressure-resetSkill
- worldview-game-scarce-inventory-triageSkill
- The first 60 shown.
The file
Files
AI Short Film Pipeline (router)
Why this pipeline exists
A video model has no memory. It only knows what the current prompt and the current reference images tell it. Every failure in the source course — a third chair, a character in a different seat, a grandfather with the hero's face, waxy hands, scribbled notebook text, a smile after a crying scene — was the model filling a gap the prompt left open. So the whole discipline is: close every gap before spending credits, and when randomness still wins, fight it with parallel takes, not with one-at-a-time rerolls.
We have the advantage of hindsight. The course taught these lessons one failure at a time because that is how humans learn; a skill should not repeat the failures. It should encode the final state of knowledge and aim for first-pass success, then use parallelism to absorb what randomness remains.
Stages
| # | Skill | Produces | Gate (user confirms before next) |
| -1 | film-style-library | style.json — one visual style locked from reference cards; style header, sheet modifier, negative block, model routing | yes (one letter) |
| 0 | film-direction | direction.md — intent, genre, quality variables, shot-logic rules, continuity ledger template | yes |
| 0b | film-story | story.md — spine(s), conflict ladder, loss, dilemma, setups/payoffs, emotion map, hook | yes — no script until the story has a loss and a dilemma |
| 1 | film-script | script.md — blocks ≤15 s, each shot justified, build list | yes — hardest gate |
| 2 | film-character-sheet | locked 3-panel sheets: main cast, wardrobe variants, aged variants | yes (pick) |
| 3 | film-location | locked 3/4-angle plates with palette | yes (pick) |
| 4 | film-prop-sheet | locked prop sheets (incl. text props) | yes (pick) |
| 4b | film-screen-capture | real screenshots of web pages/apps that must appear on screens in shots (user-supplied first; browser capture only as fallback) | yes (pick) |
| 5 | film-shot-prompt | one prompt per block (or per split sub-block) with @refs | yes (read prompt) |
| 5b | film-action-combat | action-block prompts: anchors, four-part strikes, causality, density and camera parameters — called by 5 for any fight, chase or stunt | no (automatic) |
| 5c | film-dialogue-voiceover | stable voice cast, verified speech files, measured timing, and actual audio inputs — completed before any voiced video request | resolve missing service or recording before a voiced batch |
| 6 | film-generate-review | parallel takes, per-beat verdicts, locks, assembled scene | yes (lock) |
| 7 | film-end-credits | title, director and brand cards in cinema convention (black, white, still); dissolve spec; appended after the last shot | yes (read) |
Stages 2–4b run in parallel with each other. Stage 5 needs locked assets and calls 5b/5c as needed. Stage 6 loops to 5.
Who calls whom. Users talk to an entry skill (cinematic-film, game-cutscene-generator, boss-battle, …). Entry skills call these stages. Stages -1 through 6 are internal: they are documented so their decisions are legible, not so users have to invoke them.
Never generate video without passing through the gates. The only exception is the user explicitly saying "just generate it" — then note the skipped gates in review.md so the debt is visible.
Order of work (whole-film, not shot-by-shot)
The course went scene by scene: assets for scene 1, shoot scene 1, assets for scene 2… That is how you learn, not how you ship. The pipeline order is:
- Outline (
direction.md+story.md: spine, conflict ladder, emotion map) → user approves. The story stage supplies conflict, loss and dilemma even when the user did not ask for them; most users won't. - Full script, iterated until every block, shot and line is approved. Nothing is generated until here.
- All assets for the whole film — every character, variant, location, prop, screen — generated in parallel batches, picked, locked. For dialogue or narration, use
film-dialogue-voiceovernow: recommend ElevenLabs MCP, resolve each speaker's real voice ID, generate and check the speech files, measure their durations, and verify the video's audio-input route. The script's build list includes these recordings. - Style check: block 1 only,
standard(×4), on the final video model. The user confirms the look is live-action, the motion feels right, the references hold. If not, fix the prompt template, not the film. - All remaining blocks fired as one parallel wave (
standardeach;maxfor blocks the user flags as risky). - Lock by index — review picture and required speech; user names take numbers per block; assemble accepted takes.
- Final mix last, speech preparation first. After picture lock, add music and effects and balance the mix. Speech that drives a performance is already prepared and attached before video generation. Off-screen narration may be mixed in later using its prepared track; never silently defer requested character voices until after a video batch.
Reasoning: every API call adds variance; every gate closed early removes a class of it. Batching the whole film also means all takes arrive together and the review is one sitting instead of eight.
Project folder (fixed)
films/<slug>/
direction.md stage 0: intent, genre, palette per location, quality variables in play
script.md stage 1: blocks, shots, justifications, build list
continuity.md ledger: per block → exit state of every character (emotion, wardrobe, seat, props in hand)
asset-map.json name → locked file/url/desc + which blocks it appears in
voice-cast.json character/narrator → provider, real voice ID, settings, accepted preview
speech-lines.json exact line → speaker, audio file, measured duration, shot, input binding
assets/
characters/ locations/ props/ screens/ speech/ candidates/
prompts/
block-<nn>[<a|b|c>][-v<k>].txt
takes/
block-<nn>/ ...takes, review.md, locks.json
scenes/ assembled block videos + last frames
tasks/asset-map.json entry shape:
"santiago": {"kind":"character","file":"assets/characters/santiago.png","url":"https://…",
"desc":"25, Spanish, lean 1.82 m, dark curly hair, stubble, marbled camp shirt, olive trousers",
"blocks":[1,3,5,7,8], "continuity_critical":["face","hair","shirt print"]}continuity_critical lists the features a viewer would notice if they changed. Those features must be in the sheet and in every prompt's desc.
Batch modes
| Mode | Prompts | Copies | Total | When |
lite | 1 | 1 | 1 | user explicitly asks for a single run |
standard (default) | 1 | 4 | 4 | normal work |
max | 4 variants | 4 | 16 | user trades credits for wall-clock; or the last standard batch was 4/4 wrong |
Reasoning: one 30 s 1080p video take can take 5–20 minutes. Serial rerolls make a 2-minute film a multi-day job. Four parallel copies of a well-specified prompt almost always yield at least one keeper per shot; max additionally explores four prompt axes at once so the next rewrite is informed by evidence, not guesses.
Shared scripts (scripts/ next to this file — resolve absolute path)
batch.sh— fire N parallel async generations from prompt files, record task ids. This image/parameter-only helper does not upload speech; use a verified audio-capable MCP/API for audio-conditioned takes.poll.sh— poll, download, status table.capture.sh— screenshot a live web page for use as an on-screen prop.
Model defaults (verify with cohub models ls --model-type multimodal)
| Job | Model | Params / notes |
| Character / prop / location sheets, photoreal | gpt-image-2 | --param size=2048x1152 --param quality=high; ≤16 reference images |
| Edits that must preserve a reference (kit number, crest, aging, put-him-in-this-kit) | gpt-image-2 (fallback gemini-3.1-flash-image-preview for legible text) | pass the locked sheet(s) as --image |
| Text-only mood exploration | krea2 | never for a locked asset |
| Video draft (blocking check) | seedance-2-0-fast | 1080p, cheap, ≤15 s |
| Video final | seedance-2-5 | --param duration=<4–30> --param resolution=1080p --param ratio=16:9; ≤30 reference images, public URLs only; first_frame for match cuts |
| Dialogue / VO | ElevenLabs MCP recommended; ElevenLabs API, compatible TTS MCP/API, or supplied recordings also work | fixed voice per speaker; prepare and measure before video, attach through the selected provider's audio-input interface |
| Music | suno_music_chirp_fenix | after picture lock; instrumental unless asked |
Block length with Seedance 2.5: default 30 s. One generation = one block; fewer calls = less variance. Go shorter (10–15 s) only when a block needs a match cut, a single line that must be isolated, or a physical beat the model must not rush. A ~2 min film ≈ 4–5 blocks of 30 s. Translate any 4K / 21:9 note in a source prompt to 1080p / 16:9 and keep the composition intent.
Non-negotiables
- Read the stage skill before doing the stage. Open
film-<stage>/SKILL.mdwith the read tool at the start of each stage and run its checklist literally. Working from memory is how the skill's own rules get skipped (this happened once: an outline was written with no conflict because §1b was never consulted). - Direction before script, script before assets, assets before video. Each earlier artifact is the specification for the next.
- Every shot must justify itself (see
film-direction). If it cannot say what it reveals and what breaks if it is cut, it is cut. - Continuity-critical details get their own reference image. Faces, hairstyles, wardrobe per scene, recurring props, anything with text, any one-off character who is featured (an old man in close-up), any real product UI. Background crowds do not.
- Positive language only inside shot blocks. Say what is; never what is not.
- Wide anchor first whenever a block has more than one shot in a known room.
- Parallel by default.
standard= 4 takes. Serial rerolls are not a strategy. - Lock explicitly. Every kept take/span is written to
locks.jsonwith the reason. If two takes each have a good half, prefer regenerating a merged version over a hard splice (splices between different generations rarely match; the source course did it, but the author of this pipeline found it reads unnatural). - Record everything — prompt text, task ids, verdicts, locks, continuity exit-states. A film is rebuilt from its notes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

