shot-recipes
A shot-vocabulary library for AI generative video. The premise is engraved in the bones: this is generative video (MiniMax H3 / Kling), not procedural rendering—for the same position, the procedural side writes frame counts and easing curves, while we writehow to write the prompt, how to attach the reference image, how many cells to cut, and where the AI will break。
What it fills is this layer of the gap:
| Layer | Who manages it | Problem |
|---|---|---|
| Vocabulary layer | Shot-size enumeration + H3 official camera-movement terms | Atomic words, not recipes—the model combines them freely, with no knowledge of "how this shot should be cut" |
| Recipe layer + Technique layer | This skill | Named shot vocabulary: intent / applicable scenes + prompt skeleton + parameters + known pitfalls, and it can be machine-verified |
| Feel layer | The shot-cutting manuals of each pipeline skill | Verbal experience, with no way to check whether it was used or used correctly |
Two card families,kind distinguished by field, each with its own category table and six-section body:
| Family | What question it answers | Categories |
|---|---|---|
Recipe Card recipe |
How this shot in this scene should be cut | Dialogue / Emotion / Reveal / Entrance / Reaction / Transition / Emphasis / Product Showcase / Talking-head |
Technique Card technique |
What this device is,when to use it, and when not to use it | Camera Movement / Camera Angle / Shot Size / Composition / Focal Length and Depth of Field / Lighting / Special Techniques |
The completeness of Technique Cards is a gate: each technique category has a domain (the camera-movement domain is the 20 H3 official terms), each card uses covers to claim the items it covers, and if the domain is missing an item lint it is called out—"fully covered" is found by checking, not by saying so.
{baseDir} = the directory this file is in. The script {baseDir}/scripts/shot-recipes.mjs, zero dependencies,node runs directly.
Self-contained: it does not depend on any other skill—the card bodies do not reference external documents, and the image-output contract / card-writing discipline / report conventions are all in the bundled references/ , and the display data and example frames are also this skill's own (examples/vocab-reel.json)。the whole directory can be copied away and used. The mounting of Usage Five with novel-storyboard isoptional integration, and it still runs without it.
Boundary (things it does not do): it does not write scripts, does not lay out storyboard structure, and does not produce video. It only provides vocabulary and checks—recipes only describe what the official term list cannot describe(foreground shoulder, shallow depth of field, handheld texture, material silhouette, lighting ratio difference); shot size and camera-movement terms already each have a gate managing them, and the cards do not set up duplicate gates.
Usage One: Look Up Cards (most common)
node {baseDir}/scripts/shot-recipes.mjs list # 索引表(两族都列)
node {baseDir}/scripts/shot-recipes.mjs list --kind technique # 只看技法卡
node {baseDir}/scripts/shot-recipes.mjs list --kind recipe # 只看配方卡
node {baseDir}/scripts/shot-recipes.mjs list --for product # 按题材筛
node {baseDir}/scripts/shot-recipes.mjs list --category camera-move
node {baseDir}/scripts/shot-recipes.mjs search 正反打 # 搜卡(正文也搜)
node {baseDir}/scripts/shot-recipes.mjs show ots-shot-reverse # 打印整张卡
node {baseDir}/scripts/shot-recipes.mjs show ots-shot-reverse --lang en
Before cutting shots and writing prompts for users,first list pick cards, then show read the full text, and write the shot image prompt for this panel according to the card's "prompt skeleton"—not a single required phrase in the skeleton may be missing.
Usage 2: Generate a gallery report
node {baseDir}/scripts/shot-recipes.mjs render --html > {baseDir}/references/cards/gallery.html
node {baseDir}/scripts/shot-recipes.mjs render --html --lang en > {baseDir}/references/cards/gallery-en.html
node {baseDir}/scripts/shot-recipes.mjs render --html --check <storyboard.json> > {baseDir}/references/cards/gallery.html
The report must be written into {baseDir}/references/cards/—example frames use relative paths frames/…, and if written elsewhere the images will not display.
Single page, zero external dependencies, opens with a double-click. Includes a category × energy matrix (empty cells are vocabulary gaps), a recipe card wall, atechnique coverage table(domains laid out item by item;the one grayed out with hatching is the item no one has covered yet), a technique card wall, and an index of required phrases (collisions visible at a glance). Given --check it will also listcards that have never been used。
Usage 3: Check recipe references in the storyboard
node {baseDir}/scripts/shot-recipes.mjs check <storyboard.json>
Deep-traverse any JSON, collectingobjects that have both recipe and frame objects, using the JSON path as the locator—so it works with any storyboard structure and is not tied to a particular skill. Check two things: the recipe id is in the library, and the card's required phrases appear in that panel's frame . Skip and count Chinese prompts (跳过 K 个非英文提示词), neither silently nor reporting a flood of false positives.
Usage 4: Write a new card
Read {baseDir}/references/card-schema.md(field structure and invariants) and {baseDir}/references/card-pass.md(card-writing discipline); after writing, run:
node {baseDir}/scripts/shot-recipes.mjs lint
The threshold for adding a new card is not in the format:## 示例 . The section must be able to cite a real storyboard segment that was actually done or a sample frame that was actually generated—if it cannot, it is not a recipe, it is an idea.
Usage 5: Attach to novel-storyboard (optional)
node <novel-storyboard>/scripts/novel-storyboard.mjs validate <storyboard.json> \
--script <script.json> --shots {baseDir}/references/cards
Write on the storyboard's cut "recipe": "<卡片 id>",--shots to point to the card library directory, and the gate there will check that the recipe exists and the required phrases land.If --shots is not given, explicitly say it is skipped—the two skills are independent; either can run without the other.
What a card looks like
frontmatter contains the machine fields (family, category, subject, energy, seconds, panel count, suggested shot size and camera movement,required phrases, sample frames; technique cards additionally have covers), the body has six fixed sections, andone set for each of the two families:
- Recipe card:
意图→提示词骨架→参数表(four columns, including "adjusting the feel") →参考图约束→已知坑(three columns: problem / symptom / remedy) →示例 - Technique card:
这是什么→适用场景→提示词怎么写→参数表→已知坑→示例
A technique card's "applicable scenarios" must state "when not to use it"; this is a gate—if it only says when to use it, readers of the card will definitely overuse it. This section being placed before the prompt is for the same reason: a technique itself without "when to use it" is useless knowledge.
Required phrases are the only thing in the entire library that is machine-enforced, with six hard constraints: ≤ 3 items, all lowercase, must contain a space or hyphen and be at least 6 characters long, must not collide with the 20 H3 camera movement words and 5 shot size phrases, must appear as-is on a single line in this card's prompt skeleton, and must be paired with a Chinese explanation. Constraint 4 gives rise to the reason this library exists—recipes only say what the vocabulary cannot; constraint 5 ensures that copying the skeleton lets it pass directly check; constraint 6 lets Chinese readers understand this all-English table.
Bilingual organization:there is only one copy of the machine fields(cards/<id>.md 's frontmatter, language-neutral), while the body is split by language (Chinese in the same file, English in cards/en/<id>.md). The door always reads only one machine field; there is no bilingual drift.
Generate an example frame (optional)
Read {baseDir}/references/frame.md. If there is no codex, skip the whole step, and the card shows a "Example frame not generated" placeholder—no faking.
Self-test
node {baseDir}/scripts/selftest.mjs
Does not call the model, does not spend quota.Every lint rule has a breaking test case, run this first after changing the script.
Source notes
The card'sFormat(one sentence / applicable / intent / parameter table with a "tuning feel" column / known pitfalls) learned from the open-source project video-shotcraft outside the MiniMax ecosystem (in the Remotion programmatic rendering direction).All content is this repository's own generative practice: its parameters are frame count and easing curves, our parameters are seconds, grid count, blur strength, and reference image mounting. The methodology is internalized in the references bundled with this skill,does not depend on any external skill。