Asset Preparation Station
Whether video generation can proceed hinges on this step. The only problem to solve is this: make sure the same thing in every picture is the same thing.
The input is an asset list (or storyboard), the output is a batch of images named by ID, directly referenceable as first frames by short-video-generate.
It does not write storyboards, cut segments, write video prompts, or generate videos. It handles the 'image' phase.
I. Four Cardinal Rules
- Anchor first, then derive. Do not make an angle shot until the master is set. Angle shots grow from the master; if the master is wrong, the entire group is wrong.
- Change only one variable at a time. If you change the angle, do not change the light. If you change the light, do not change the angle. Changing two at once makes it impossible to tell which caused a problem.
- Candidates are added, never overwritten.
v1,v2coexist. The chosen version is written into the work order. Generation is probabilistic; deleting an old version is like deleting a safety net. - Images and the list must match. The ID is the filename. If the list has
PR-01, the directory must havePR-01_*.
II. Asset Grading (Three Levels)
Not every image deserves equal effort. Grade first, then allocate resources.
| Level | What It Is | Example | Requirement |
|---|---|---|---|
| Anchor | Identity benchmark for the whole film, referenced multiple times | Product hero shot, character three-view, main scene wide shot | Strictest: multiple candidates, itemized validation, no changes after finalization |
| Derived | Angles, states, or details growing from an anchor | Product back view, open state, hand close-up | Must be compared side-by-side with the anchor |
| One-Off | Appears only once, doesn't affect consistency | Empty shot, light effect, transition asset | Passable is fine; no need for multiple candidates |
Wrong grading wastes time: Treating an empty shot as an anchor can stall a 30-second clip for three days; treating a product hero shot as a one-off means every subsequent segment will need a redo.
III. Sources: All Three Work, Choose by Use Case
| Source | When to Use | Caution |
|---|---|---|
| Live Action | Have the physical object, need accuracy, involves parameters or efficacy | Best, but requires source material |
| AI Generation | No physical object, fictional scene, atmosphere, hands | Must lock geometry and print; use multiple candidates |
| Official Assets | Hero shots, packaging images provided by the brand | Use directly as anchor; most stable |
Live action is not mandatory. For a purely AI-generated film, the entire set of assets can be AI-generated, as long as it's internally consistent.
A Risk That Must Be Stated Upfront
If this clip needs to announce specific parameters or efficacy (capacity, duration, ingredients, effect) to the audience, and the product in the image is AI-generated, then the image and the claim won't match—at best, viewers point it out in comments; at worst, it constitutes false advertising.
There is only one solution: If there's a claim, use live action or official assets for the product image; if there's no claim, just atmosphere or fictional content, AI generation is perfectly fine.
Just ask this question before starting, don't wait until the final clip is done.
How to Run AI Generation
Use the built-in scripts/kie_gen.py (KIE GPT Image 2) to submit, poll, download, and save by naming in one go:
# Text-to-image (resolution defaults to 1K, sufficient)
python scripts/kie_gen.py generate --prompt "…" --ratio 9:16 \
--out 04-Assets/01-AssetImages/PR-01_ProductHero_v1.png
# Image-to-image: use anchor as reference
python scripts/kie_gen.py generate --prompt "…" --ref PR-01_ProductHero_v1.png \
--out 04-Assets/01-AssetImages/S01_f01_v1.png
# Batch: read JSON task list (default 5 concurrent)
python scripts/kie_gen.py batch --tasks tasks.json --out-dir 04-Assets/01-AssetImages --dry-run
python scripts/kie_gen.py batch --tasks tasks.json --out-dir 04-Assets/01-AssetImages
Default resolution is 1K: these images will be resampled by the video model anyway; making the source larger doesn't preserve detail, it only increases failure rates. Specify --resolution 2K only when you need to upscale and crop separately (for a cover) or create a white-background master for reuse.
Batch runs 5 images concurrently by default. Generation takes 10–40 seconds; running 6 images serially is 3–4 minutes of pure waiting; 6 images with 5 concurrent takes roughly as long as the slowest image plus one round. If rate-limited (code != 200 or 429), use --concurrency 2, do not change the prompt because of rate limiting.
Four rules:
- Always run
--dry-runto review the request body before the real run. A batch of 20 images with wrong parameters is 20 wasted submissions. - API key only via environment variable
KIE_API_KEY, never write it into scripts, task lists, or work orders. - Generate and confirm style for anchors first, then batch derive. For anchor-level assets, reduce concurrency and review each one.
- Record the
taskIdin the work order so you can later look it up to regenerate the same image.
For syntax, parameter limits, and failure handling, see references/ai-generation.md.
IV. Seven-Step Workflow
1 Read List → 2 Order → 3 Grade → 4 Generate Candidates → 5 Validate → 6 Save to Disk → 7 Update List
Step 1: Read List
Read the ID, type, purpose, source, and referenced segments from 02-AssetList.md.
For assets without image prompts in the list, use the four category skeletons from references/prompt-fixups.md to fill them in; if they exist, use them directly, do not rewrite.
Step 2: Determine Production Order
Anchor → Derived → One-Off
Within the same level, order by how many times an asset is referenced. The more references, the earlier it's made. Reason: assets with many references, if redone, affect the most segments.
For multi-segment reuse locations where spatial continuity is important, split into two layers as needed:
- Spatial Structure Master: No people, no action. Locks floor/wall materials, window displays and architectural volumes, fixed background structures, spatial depth relationships, and the main light source's origin and general direction in the scene. Does not lock specific camera positions, shot types, characters, or temporary props.
- Camera Sub-Master: Derive the actual shots used (front wide, side close-up, top-down, low-angle, close-up, etc.) from the same space. First frames derive from the corresponding camera sub-master, avoiding the entire film inheriting the same perspective and composition.
Only create camera angles that will actually be used; do not enforce a fixed number for each space. Maintain spatial continuity with lighting direction, but determine whether daytime/dusk lighting versions are needed based on whether the story crosses time periods. The basic master should avoid baking in unnecessary strong time-of-day features. Validate representative camera angles side-by-side first, then batch-derive first frames.
Step 3: Grade
Assign a level (Anchor / Derived / One-Off) to each ID and write it into the work order. This step takes only one minute but determines how many candidates to generate later.
Step 4: Generate Candidates
| Level | Number of Candidates | Explanation |
|---|---|---|
| Anchor | 4–6 | Pick one for finalization, keep the rest as backups |
| Derived | 2–3 | Select after comparing with the anchor |
| One-Off | 1–2 | Use the passable one |
Before generating, confirm three things: Is the aspect ratio correct? Is the background correct (white or scene)? Are there any unwanted elements (text, watermarks, hands)?
When using AI generation, first --dry-run to check parameters, then submit in anchor → derived order, in batches of 4–6.
Step 5: Validate
Go through the seven items from references/acceptance.md one by one. Pass six out of seven to keep an image; if a critical item (geometry, print) fails, it is immediately rejected.
Step 6: Save to Disk
04-Assets/01-AssetImages/
├── PR-01_ProductHero_v1.png
├── PR-01_ProductHero_v2.png ← Backup, do not delete
├── SC-01_OfficeDesk_v1.png
└── CH-01_FemaleHand_v1.png
Naming format: <ID>_<Purpose>_v<N>.<ext>. The ID must match the list (keep status suffixes A/B), purpose is 2–8 characters, can be further divided with underscores, version increases incrementally.
Step 7: Update List
Change the list status to "Ready / Ready with Backup / Pending Supplement" and note the selected version in the work order. Without updating the list, the next step doesn't know which version to reference.
V. Maintaining Consistency
Multiple images under the same ID are aligned through four things:
- Same subject description: Copy from the anchor's prompt, do not change a word.
- Same lighting: Lock the main light direction and color temperature; do not change the light for derived images.
- Same frame and background: If it's white background, all are white background; if it's a scene, all are the same scene.
- Side-by-side comparison: Place two images left and right, look at geometry, color, print, and proportions.
Side-by-side comparison is the most effective technique. Looking at a single image feels fine; put them together and you might notice the cup rim is 2mm wider or the logo is one row higher.
For details, see references/acceptance.md.
VI. Self-Check (Can Run a Script)
python scripts/check_assets.py --dir <production directory>
Five criteria:
| # | Criterion | Level |
|---|---|---|
| A1 | Every ID in the list has a corresponding file | Fatal |
| A2 | Filename follows <ID>_<Purpose>_v<N> | Fatal |
| A3 | No orphan files in the directory that are not in the list | Warning |
| A4 | Each image has a resolution with short edge ≥ 720 | Warning |
| A5 | Anchor-level assets have ≥ 2 candidates | Warning |
Exit codes: 0 Pass / 2 Fatal items found / 3 Cannot read directory.
VII. Boundaries
- No storyboard writing: Asset requirements come from the storyboard and list; this skill does not change the content itself.
- No video prompt writing: That's an upstream task; this skill only fills in image prompts.
- No video generation: Only handles static images.
- No replacement of human judgment: Validation criteria are provided, but a human ultimately decides whether an image is usable.
- No guarantee of first-time correctness: Generation is probabilistic. This skill guarantees: candidates exist, validation was performed, and versions are tracked.
VIII. Reference Materials
| File | When to Read |
|---|---|
references/production.md | When ordering, grading, generating candidates, saving to disk, and updating the list |
references/acceptance.md | When validating, comparing side-by-side, or rejecting and redoing |
references/prompt-fixups.md | When the list has no prompt, or an image repeatedly turns out wrong |
references/ai-generation.md | When using AI generation: parameters, syntax, batch, failure handling |
assets/asset-production-sheet.md | When creating a work order before starting, and updating status upon delivery |
assets/batch-tasks-example.json | Example task list for batch generation |
scripts/kie_gen.py | Submit, poll, download, and save by naming |
scripts/check_assets.py | Run once before delivery |