| name | make-paper-collage-video |
| description | Create, resume, revise, or finalize editable, narrated Remotion videos in paper-cutout, hand-drawn, historical-collage, or comic-inspired (Korean/Japanese/Hong Kong/American) styles, including layered/parallax illustration, persistent travelling environments, functional diagrams, and recurring characters. Use for a new video brief or to continue an interrupted project tracked in production.json; drives style approval, motion/asset planning, provider budgeting, and quality review through to local final delivery. |
Make Paper Collage Video
Build an editable video while keeping the human in charge of concept, style/voice, preview judgment, rights, and external publication. Use production.json as the resume source of truth.
Start With One Small State Read
-
Treat the current directory as a workspace only when package.json exposes project:new, project:resume, project:preview, and project:render. Otherwise read references/setup.md, bootstrap a writable workspace, and run its doctor. If this Skill was injected from a versioned plugin-cache path that no longer exists, stop and report a stale task snapshot — do not scan for or silently select the highest cached version; start a new host session/task so the loader formally exposes the installed version.
-
Inspect git status --short in Git workspaces and preserve unrelated changes.
-
For an existing slug, run only:
npm run project:resume -- <slug>
Continue from control.mode and the remaining work items. Do not repeat recorded approvals or read full history unless diagnosing state.
-
For a new project, derive a lowercase hyphenated slug and run project:new.
Load Only the Current Stage Reference
- Workspace creation or doctor failure: references/setup.md
- Provider discovery, confirmation, change, or output recording: references/providers.md
- Duration, scenes, rhythmic storyboard, or production-profile planning: references/story-planning.md
- Per-beat animation choice, effect routing, pose families, graphics, or directing budget: references/motion-directing.md
- Arbitrary 3D subject travel, tangent auto-orientation, optical-depth projection, bound locomotion loops, or world-bounded camera follow: references/path-locomotion-3d.md
- Whole-film action grammar, beat performance roles, motion approval fingerprints, or motion-language-card review: references/motion-contract-v1.md
- Any rear/subject/front separation, relative layer motion, source package, reveal envelope, or oversized seamless travelling environment: references/layer-complete-assets.md
- Any rigid vessel/frame with changing internal contents, fill levels, gauges, cavities, duplicated surfaces, or container-state alignment: references/canonical-containers.md
- Narration resync, scene tails, intentional quiet holds, pacing, or dead-air failures: references/timing-continuity.md
- Concept/style/preview decisions, rights, or external action: references/approval-gates.md
- Image review, depth, motion, subtitles, or delivery tuning: references/quality-motion.md
- Recurring identities, functional mechanisms, topology-sensitive subjects, or explanatory diagrams: references/semantic-contracts.md
- Editing project/state files or diagnosing validation: references/project-contract.md
- Audio edit points, typography, annotations, data SVG, responsive directing, or advanced transitions: references/editorial-system-v9.md
- Tool-only image generation, recovery, or an
auto-continue blocker: references/execution-control.md
Do not load every reference up front.
Apply Reversible Defaults
- Keep 30 fps, a general Chinese-language audience, and the configured fictional narrator unless the brief requires otherwise. Do not silently default a title-only request to one aspect ratio or one visual style: the intake gate owns both.
- Preserve user-specified duration and scene count independently; infer only missing values.
- Recommend
balanced, but never select it invisibly. Show draft, balanced, and full-depth as 轻量成片, 均衡动画, and 完整纵深. Treat each profile ceiling as planning capacity, not spend authorization. The scenario card and combined decision must name an exact budgetDecision.imageAttemptLimit no greater than that ceiling and no lower than the complete scenario estimate; this narrower human-approved cap is what the attempt ledger enforces.
- A one-scene
full-depth story still reserves two independent pose-sheet families when its required action belongs to two recurring identities. Never merge unrelated characters into one state sheet simply to conform to a scene-count heuristic.
- Do not clone a real person, use unclear third-party rights, publish, upload, or send externally without separate authorization.
- Ask only for missing information that materially changes the subject, factual position, rights boundary, delivery format, or material cost.
New Project: Intake, Then Three Scenarios
At capability-review, use the current host model only to prepare a provisional brief and concept; do not call an unconfirmed external or paid provider.
-
Read providers.md, story-planning.md, motion-directing.md, and approval-gates.md.
-
Immediately run project:intake -- <slug> --json. Render every returned visualStylePreset image in the conversation before asking; the catalog is dynamic, so never assume a fixed count or hard-code style ids. Then use the host's Ask Question UI, when available, for exactly three selectors: 16:9 or 9:16; one of the returned visual styles; and text-only parallax preference auto|prefer|minimal. Use a compact structured text fallback only when the host has no Ask Question UI. 分层视差 is not another visual style. Do not ask for production profile or cost in this popup. Record the answer with project:intake; confirmation freezes the catalog's executable styleProfile into project.json and materializes theme from it. Do not hand-edit either snapshot afterward.
-
Run provider:status -- <slug> --compact-json once and inspect actual callable host tools. Using only the current host model, write one common story skeleton and all three planning-scenarios inputs. If the user explicitly supplied duration or scene count, preserve it in every option. Otherwise bind draft→concise, balanced→standard, and full-depth→expanded. Each option must show its duration, scene count, beat rhythm, character/prop state families, rear/mid/front/near plan, parallax and ambient plan, free local-motion targets, exact expected image calls, proposed approved cap, hard ceiling, local derivatives, avoided calls, actual provider recommendation/cost basis, factual/rights risks, and final-film effect. Run project:scenarios -- <slug> --input=<scenarios.json> --json; this is still provider-free.
-
Present all three scenario cards together. Recommend balanced but let the human choose. This single decision is the combined story-scope/concept/profile/budget/provider approval, so each card must already contain the information above; do not add another routine confirmation after the selection.
-
After the human selects a card, continue automatically: run project:plan -- <slug> --scenario=<draft|balanced|full-depth>, fill brief.md, and author the selected schema-v12 storyboard. The plan carries a scenario fingerprint and profilePromise — ceilings block overspend, the promise blocks a high-cost profile from quietly shipping low depth. The shared scenario must enumerate story-critical ; every option routes each one to an actual registered state, local-motion target, or layer package.
If a custom provider or incompatible explicit duration/scenes cannot be resolved in the combined decision, remain at the gate and ask one concise question.
Style and Fictional Voice Gate
At style-review, create the fewest representative source families needed by the compiler-owned styleProofPlan and only enough fictional speech to judge the voice. Run project:style-proof; it must cover the plan's highest semantic-risk classes, each concrete coupled relationship, and state-sequence behavior instead of mechanically selecting one highest score — a low-risk film with none of those facets still gets one baseline:representative target, and one source package may cover several risks when the plan records that reuse.
- Bind every target, the complete plan fingerprint, and both motion-contract fingerprints, then render 3–5 seconds through real v12 composition nodes.
- Every selected target, including a
free target, must produce a non-empty structured composite with current full-frame/crop/debug evidence.
- A selected spatial-contract target must also execute its deterministic contract proof and draw the contract-specific debug overlay; endpoint crops without a passing
spatialProof cannot satisfy the style gate.
- Registered or semantic targets also require their quality-compatible member evidence and recorded checks. Inspect full-resolution relationship crops and the pattern-specific evidence from
quality-motion.md; a registered depth stack requires family-level reconstruction and responsive envelope extremes.
- Show
motion-language-card.json beside the provider/model, voice identity, sample artifacts, and known cost — it exposes the whole-film grammar, pacing, camera/transition/ambient strategy, per-scene phrase roles, final holds, exceptions, and approval fingerprint.
After explicit approval, run:
Before any style image call, classify its semantic risk. If it is not decorative, author and lock semantic-contracts.json as described in semantic-contracts.md; do not treat the prompt as the contract. Use schema-v8 image requests with the current project's exact styleProfileBinding, include every bound directive verbatim in the prompt, declare all profile-required asset checks, and choose an explicit output surface; a layer-aware request must also carry the exact compiled layerPackageBinding. Reserve quota-consuming attempts before invoking a host image provider.
npm run project:advance -- <slug> approve-style-voice --note="<explicit decision>"
approve-style-voice refuses any selected treatment whose style-proof composite is missing, empty, stale, or incomplete, or whose proof does not bind the current motion contract. It records the human note and exact motion approval in motion-approval.json. Registered/semantic targets additionally require their participating assets and composites to have current passed checks. This strengthens the existing gate; it does not add another human wait. Directing-only revisions may preserve the approval fingerprint while invalidating exact proof; semantic role/grammar/proof/intent/Profile changes return here.
Never substitute a real-person clone. Treat cloning as a separate opt-in requiring licensed audio and transcript authorization.
Produce in Batches
At asset-production:
-
Group checkpoints by recoverable batch or location, not by every file. Keep provider provenance per asset.
-
Classify every image as decorative, identity-critical, topology-critical, mechanism-critical, or diagram-critical. Bind every critical request to a ready reusable semantic contract and its evidence targets. Keep recurring-character generationFamily separate from composition mask/source families.
-
Route relationships before generation: persistent inside/on/held-by/worn-by contact uses supported-subject; a shared shoreline/horizon/edge uses registered-environment; only independent elements use free. If no pattern represents the approved meaning, extend the reusable contract before bulk generation.
-
Execute each compiled layer source package exactly as described in layer-complete-assets.md.
- A
registered-layer-sheet is one 2×2 provider root containing reference plus three complete layers, declared as outputSurface.mode=layer-sheet: reference/rear are opaque, while subject/front use real alpha or, by default for a host image model without reliable native alpha, one explicitly declared flat chroma-key color.
- For provider-native chroma cells, declare
keyPlane.mode=provider-native-observed and policyId=flat-v1 — never require the model to reproduce one exact RGB triplet. The runtime must prove one stable, connected, boundary-covering key plane, record requested and observed colors plus the observation fingerprint, and use only the observed color for deterministic keying.
- Record the provider-native RGB sheet unchanged; put separator removal, explicit source-cell rectangles, keying, scaling, and key metadata inside the schema-v2
registered-family spec, then run assets:derive-registered-family. That CLI owns the three canvas-preserving local derivatives, manifest provenance, completeness, lifecycle, keying fingerprint, and optional group patching.
context-preserving-layer-edits remains one complete reference plus three edits that each retain that full reference context. Never use masks on a flat composed master to claim a hidden clean plate or full silhouette. If only a flat source exists, keep the family rigid-locked and limit motion to the whole source/group/camera.
npm run project:assets-ready -- <slug>
It synchronizes narration, caps padding tails when duration was inferred, derives visible subtitles, builds the deterministic timeline mix, automatically masters it to the declared LUFS/true-peak contract, encodes and measures both actual 96k preview AAC and 192k final AAC delivery surfaces, validates schema-v12 project/storyboard plus the approved motion contract and v9 editorial/state schedules/events/scene-boundary continuity, rejects stale proof and motion-approval fingerprints, enforces asset/composite/whole-film motion quality, validates subtitle transcript/timing/safe-area/font contracts, writes a fingerprinted assets-ready-seal.json, and advances to preview.
- Loudness gain, compression, limiting, and codec headroom are automatic technical operations, never a human gate.
- Direct
project:advance ... assets-ready is not a substitute — it only accepts that current seal. In preview or human-review, the same command is an idempotent recheck and does not advance again.
- Explicit duration deficits block here; add real content or revise the approved target instead of padding. This stage cannot claim rendered audiovisual coverage because no artifact exists yet. Do not run separate sync/subtitles/validate commands first.
- A current seal also atomically marks pending/in-progress
directing-revision-* work items completed, because the storyboard/project execution sync has now passed the canonical validation surface. Any unrelated unfinished item, or a blocked directing revision, stops assets-ready; preview approval and both render modes reject every unresolved work item rather than silently bypassing it.
- A directing revision must attribute responsive placement, cue, binding, and scene-directing changes to the exact affected scene ids; only a genuinely global editorial change such as active profile, media, timebase, or responsive-profile policy invalidates every scene.
- Run
project:preview. Its first preflight rejects a stale assets-ready seal or unresolved work item before narration sync, audio encoding, quality work, or frame rendering. Its post-render report is the first authoritative silence/low-motion union check and extracts one encoded subtitle frame per narrated scene. Fresh and audio-only renders both mux the exact already-measured delivery AAC stream; the renderer reuses an unchanged artifact, or reuses the existing video stream when only audio inputs/gain changed. Any visual fingerprint change forces a full frame render, followed by the same authoritative audio mux. Repair failures and continue autonomously until it reaches human-review.
Normal production commands update projects/<slug>/production-metrics.json. Treat AI-review and provider-attempt durations as end-to-end session windows, not provider-only inference time; do not infer token usage. Run project:metrics -- <slug> once when comparing completed projects or diagnosing a slowdown, rather than polling it during production.
If a confirmed provider becomes unavailable, preserve the stage and report the exact missing capability. Never invent artifacts or silently switch paid services.
Preview, Final, and Publication
At human-review, show preview.mp4, contact-sheet.jpg, subtitle-contact-sheet.jpg when narration exists, transition-contact-sheet.jpg when the film has scene boundaries, and report.json, separating technical results from creative judgment. Confirm continuityAnalysis.passed and subtitleProof.passed; the report rejects unapproved intervals that are both silent and low-motion, while the subtitle sheet is the encoded-frame review surface rather than OCR proof. Record revision feedback in review.md and request-preview-revision; after explicit approval run:
npm run project:advance -- <slug> approve-preview --note="<explicit decision>"
When the human requests a directing-only revision, export/edit the current compiled storyboard and run project:revise-preview-directing -- <slug> --input=<storyboard.json>. Use --source=asset-production only for explicit human feedback received after style approval but before assets are sealed; otherwise its default preview source requires the recorded preview revision request. The command accepts timing, treatments, proof timing, and legal scene-boundary changes; it rejects changes to the approved arc, style, scene/beat meaning, or proof assertions, recompiles against the approved motion budget, invalidates derived preview/final evidence, and creates one execution-sync work item per affected scene. It does not call a provider or silently change the production profile. A visibility-event proof may show its settled persistent state any time after the event begins and before the same target's next visibility change.
When the recorded human feedback explicitly changes scene meaning, narration, or deliberate stillness, use a schema-v1 authorization and run project:revise-preview-semantic -- <slug> --input=<storyboard.json> --authorization=<authorization.json>. Only listed scenes may change; top-level arc/style drift is rejected. A motionPolicy=locked-static scene must have a rationale and static-only treatments. The command records old/new concept fingerprints, preserves the approved provider cap, recalculates only legal motion-scene floors, and invalidates all downstream style/proof/render evidence.
After preview approval, run project:render. A successful final render completes the local production task and reports final.mp4, the contact sheet, validation report, and technical acceptance result.
Do not ask for a publication approval merely to mark local delivery complete. If the human later requests upload, sharing, or publication, verify content/facts/rights/platform suitability and obtain one just-in-time authorization for that external action.
After that authorization and before performing the named external action, record its destination, action, and scope:
npm run project:advance -- <slug> approve-publish --note="<destination + action + scope>"
complete remains the local lifecycle terminal state; approve-publish is an optional post-completion audit event, not another production stage or a reusable authorization for any other destination/action.
Keep Turns Lean and Recoverable
- Run
project:resume once at the start of a new turn or after an interruption; do not pair it with full status or project:handoff-check.
- At
asset-production, a null control.nextCommand means continue control.workItems.remaining[0]; when no batch remains, resume returns the concrete project:assets-ready command.
- In
auto-continue, continue to control.nextCommand or the next remaining work item. A tool result is not a human gate.
- End normally only at a human gate, completion, or a genuine blocker with one required user action.
- When implementation files change, run
npm run check, relevant validation/tests, and npm run plugin:sync before validating the packaged Skill/runtime.