Split creation into two stages: first decode the visuals into an editable specification, then build the animation from approved stills or transparent layers. By default, use a locally compatible workflow, and truthfully record every generator and renderer.
Choose delivery scope
First determine which layer the user wants:
- Analysis only: deliver the breakdown, general prompts, and JSON visual specification.
- Stills only: complete the analysis and generate and select stills.
- Collage motion effects: after still approval, produce a silent animation master.
- Full video: treat this Skill as the visual stage and continue to follow the video production contract, subtitles, voiceover, digital human, and archiving rules.
When a reference image is missing but the user explicitly asks to "analyze this image," request the image first. When there is only a brief description, draft the specification directly and do not repeatedly ask for known information.
Choose execution path
By default, use the local path:
- Stills or layers: load the
imagegenSkill and use Codex's built-inimage_gen. Do not switch to the OpenAI API, CLI, or other image generation models by default. - Simple layer-by-layer assembly: use
scripts/render_assembly.py。 - Complex layout, multiple transitions, or component-level timeline: load the
hyperframesSkill and follow this specification and source statement.
Only when the user explicitly requests Arcads, Nano Banana, Seedance, or Kling, and the corresponding tool is callable in the current session, read references/provider-boundaries.md and enter the external path. Before uploading local brand images, product images, or people images, you must explain the upload location, cost, and purpose and obtain user confirmation.
Do not infer the actual provider from prompts, filenames, or the expected model. Models that were not actually called may only be written as a "target prompt" or "compatible style," and may not be written as the output source.
Default production pipeline (hard default)
Execute strictly in the following order:
- Decode the reference image or brief description, and generate the breakdown, general prompts, and JSON visual specification.
- Use Codex's built-in
image_gento generate a complete still separately for each scene. Brand images, product images, or people references must remain visible in all relevant calls. - Copy the generated results from the Codex default generation directory to the project
assets/stills/, and do not let the project reference files under$CODEX_HOME/generated_images/for a long time. - Show the complete stills to the user. Before the user explicitly confirms the stills, generating animations, FFmpeg assembly plans, or formal videos is prohibited.
- After still confirmation, use Codex's built-in
image_gento generate each independent cut-paper element. When a transparent PNG is needed, first generate a solid-color chroma-key background, then call theimagegenspecified by theremove_chroma_key.pySkill for local matting, and pass the alpha precheck. - Use the approved stills to lock the final composition, build the
assembly-plan.jsonwith transparent layers, then assemble piece by piece from an empty background using local FFmpeg or HyperFrames. - Complete the media probe, keyframe check, and source manifest. By default, record
actual_still_provider: codex-image-gen、actual_motion_provider: local-ffmpegorhyperframes、external_uploads: false。
If the user directly provides all still frames or transparent layers, change actual_still_provider to user-supplied. Only fill in Arcads, Nano Banana, Seedance, or Kling when an external call actually occurs.
Phase A: Decode references
On first decode, read references/visual-contract.md and references/schemas.mdin full. Output in the following order:
### 拆解: medium and craft, color field, elements and cut edges, composition and hierarchy, single-scene concept, text, safe area, mood.### 通用提示词: write a self-contained natural-language prompt that does not rely on "the image above."### JSON 规范: copy fromassets/templates/collage-spec.jsonand fill it in, keeping valid JSON.
Write observations as reproducible parameters. For example, write "black-and-white dot halftone, about 65 lpi, thin white outline, 6px soft shadow at bottom right," not just "has a paper feel."
Multiple reference images should be decoded separately, then add a shared style summary. When the user asks to "keep the look, only change the color," change only the corresponding fields, but re-output the complete JSON.
Phase B: Plan scenes
Keep only one core concept per scene. For each scene, lock in:
- background color and frame size.
- primary elements, secondary elements, hierarchy, and final coordinates.
- text content, typography, and editable method.
- the entry order from empty background to complete composition.
- avoidance zones for real people, digital humans, subtitles, logos, and platform UI.
From assets/templates/assembly-plan.json build an assembly plan. For the final video, prefer layered mode, providing one PNG with an alpha channel per element.bands mode only slices the entire still frame into strips that slide in, and can only be used for quick previews or simplified versions the user explicitly accepts.
Phase C: Generate and approve still frames
Load the imagegen Skill, use Codex's built-in image_gen to first generate or composite the complete still frame, then show it to the user for approval. Keep brand or product references visible in all relevant generation calls.
Local production mode works in the following order:
- Initiate one independent built-in
image_gencall per scene to generate a complete composition still frame; do not use one call to stitch different scenes into a large image. - Copy the selected still frame to the project
assets/stills/, and record the final prompt and reference image roles. - Show the still frame and obtain explicit user confirmation. Without confirmation, only prompt adjustments and regeneration are allowed.
- After confirmation, generate independent collage elements. Use
imagegen's chroma-key plus a local matting path to obtain transparent PNGs, preserving the white keyline and soft shadow. - Use the approved still frame to calibrate layer size, coordinates, and hierarchy. By default, keep text as editable text layers in HyperFrames, HTML, or Remotion.
- Export the scene still frames and layer manifest, then proceed to the animation phase.
When the built-in image_gen is unavailable or fails, do not automatically switch to the CLI. First inform the user that the CLI/API path requires OPENAI_API_KEY, and switch only after the user explicitly agrees.
If you only have one complete still frame, you can first use bands mode for a low-cost motion preview, but you must not describe rectangular strip sliding as true "element-by-element assembly."
Phase D: Local layer-by-layer assembly
First verify the spec and plan:
python3 .claude/skills/editorial-collage-motion/scripts/validate_collage.py \
--spec /absolute/path/collage-spec.json \
--plan /absolute/path/assembly-plan.json \
--project /absolute/path/project
Then render the silent base:
python3 .claude/skills/editorial-collage-motion/scripts/render_assembly.py \
--project /absolute/path/project \
--plan /absolute/path/assembly-plan.json \
--output /absolute/path/project/renders/collage-assembly.mp4
The animation must start from a solid-color empty stage, with elements entering from the edges of the frame as planned and settling into place. It is forbidden to pass off camera shake, whole-image drift, or continuous zooming as assembly. After settling into place, leave enough readable time.
Phase E: Quality check and source declaration
Read in full references/qc-and-provenance.md, at minimum complete:
- Media probe: dimensions, aspect ratio, frame rate, duration, encoding, and decodability.
- Spot-check the first frame, before and after each act's settling into place, the midpoint of each act, and the final frame.
- Check empty-stage start, item-by-item entry, stable shadows, text readability, safe area, and frame density.
render-manifest.jsonconsistent with the actual output, input plan, and generator.
Clearly state in the production notes:
actual_still_provideractual_motion_providerexternal_uploads- Whether it belongs to
compatible_render, and which set of visual specifications it is compatible with
When the current session has not called Arcads MCP, always use "Arcads-style compatible rendering" or "editorial collage local rendering"; do not write it as native Nano Banana or Seedance output.
Resources
references/visual-contract.md: style vocabulary, hard visual contract, and counterexamples.references/schemas.md: field descriptions for visual specifications and assembly plans.references/provider-boundaries.md: permission and disclosure boundaries for local and external generation paths.references/qc-and-provenance.md: delivery quality check and source records.assets/templates/collage-spec.json: copyable visual specification template.assets/templates/assembly-plan.json: copyable local assembly plan template.assets/templates/assembly-plan-bands.json: strip preview template used only when there are complete still frames.scripts/validate_collage.py: pre-check for specifications, plans, and assets.scripts/render_assembly.py: FFmpeg deterministic layer-by-layer or strip assembler.