As of 2026-07-16, this skill is retained only for METHOD_LAB/legacy compatibility. New episodes are by default handled by
codex-direct-productiondirectly writing Remotion, rendering the full candidate, watching it in full, and making at most three rounds of fixes; without going through proposal/extension/seal or dual renderers.
This skill executes directorial decisions that have already been made; it does not re-decide which lines should be animated. Animation is not a fixed B-roll coverage rate, nor is it a single HTML template.
Required inputs
Read the current episode:
- 07-edit/clean.mp4 and subtitles.srt;
- 09-director/edl.json, animation-brief.json, animation-ast.json, source-manifest.json, renderer-brief.md, styleframes and animatic-manifest.json; NATIVE also includes renderer-route.json and caption-style.json;
- 10-assets/asset-list.json (only when the EDL has BROLL_STOCK);
- episode-config.json。
If inputs are missing, report the filenames and stop. Only assets marked visually_verified in asset-list.json may be used.
🛑 STOP: when the EDL, animation brief/AST, source manifest, renderer brief, animatic or required assets are missing, do not create a renderer project. First run node animation-method/scripts/compile-animation-ast.mjs episodes/<slug>/09-导演 --check; on drift, return to ⑨, and do not hand-fix the AST in ⑪.
Workflow
1. Establish the renderer task
First run node scripts/prepare-renderer-handoff.mjs episodes/<slug> <remotion|hyperframes>at the workflow root. The two renderers may only consume their own 11-动画/renderer-handoffs/<renderer>/input-manifest.json, verify all SHA-256 first; it is forbidden to guess inputs from the old pilot or historical project in 视频动画 .
Run node scripts/verify-renderer-handoff.mjs episodes/<slug>/11-动画/renderer-handoffs/<renderer>/input-manifest.jsonbefore rendering. Any hash change requires returning to ⑨ or ⑩ to regenerate the handoff, and the old candidate may not continue to be used.
After reading the handoff, first write 11-动画/renderer-proposals/<renderer>.jsonfor each renderer: it must bind the current brief SHA, fully map the AST state, capabilities may only come from the AST allow-list, and proofs may only bind to asset ID/SHA from ⑩. Then generate and verify 11-动画/renderer-extensions/<renderer>.json, binding the AST/proposal SHA and all state/transition/fact boundaries at the same time; implementation must not begin without the extension.
The deterministic order of NATIVE is fixed as:
node scripts/prepare-renderer-extension.mjs episodes/<slug> <renderer>, then verify with--check;node scripts/create-renderer-workspace.mjs episodes/<slug> <renderer>create an unsealed scaffold;- implement the approved extension only in the current episode workspace, remove
NATIVE_IMPLEMENTATION_REQUIRED; node scripts/seal-renderer-workspace.mjs episodes/<slug> <renderer>, then runnode scripts/verify-renderer-workspace.mjs episodes/<slug> <renderer>;node scripts/render-episode-<renderer>.mjs episodes/<slug>to generate onlycandidates/base/<renderer>.mp4;node scripts/apply-review-captions.mjs episodes/<slug> <renderer>use the same SRT/caption style to generatecandidates/<renderer>.mp4and caption evidence.
Before create workspace, a missing proposal/extension must fail and must not leave a half-finished workspace; seal must reject placeholders, embedded captions in the renderer, nondeterministic time/random logic, unregistered timelines, contract/hash drift, and symlinks. After a handoff change, the old workspace, base and candidate must all no longer be used.renderer_track: PARITY only then is it allowed to go through the old render_plan compatibility implementation, and its result may not masquerade as the aesthetic ceiling.
Each candidate is first reviewed by an independent reviewer who writes 11-动画/qa-reviews/<renderer>.json(binding the candidate SHA, reviewer, time, caption safe area, and the audio-inclusive review conclusion and explanation), then run node scripts/create-qa-evidence.mjs episodes/<slug> <renderer> --review-file 11-动画/qa-reviews/<renderer>.json, and finally run node scripts/create-render-manifest.mjs episodes/<slug>. It generates a real contact sheet, the entrance/middle/exit frames of each selected beat, full decode, and a structured qa-evidence.json. PASS cannot be granted by writing it on the command line or in Markdown.
- CROSS_RENDER_VALIDATION_PAIR: Remotion and HyperFrames each create an independent candidate project, using the same source hash, EDL, captions, and factual text.
- PRIMARY_RENDERER: primary_renderer must be remotion or hyperframes, and must have an acceptance record; otherwise stop and require returning to CROSS_RENDER_VALIDATION_PAIR. Specialized beats are handed to the other renderer only when the EDL explicitly specifies it.
- The two candidates share the AST semantic contract and verified assets, but do not share component implementations, HTML, CSS, GSAP, React layout constants, transitions, or scenes from old projects.
2. Implement base video
- Each ILLUSTRATIVE beat implements only the understanding question, state graph, and must-preserve specified by the AST/approved proposal.
- HERO/NONE beats remain live-action, with no new motion graphics added.
- PROOF beats may only use sources recorded in source-manifest.
- BROLL_STOCK beats may only use visually_verified assets.
- Remotion uses frame-driven composition; HyperFrames uses a deterministic paused timeline.
- BROLL/PROOF only uses the real assets locked for the current issue in the handoff; ILLUSTRATIVE only displays AST approved copy, and displaying is prohibited
acceptance_question。
3. Unify captions and compositing
- The workspace only reads caption safe-band values for avoidance, and does not put SRT text into the NATIVE runtime; renderer bases must not each burn in their own captions. After both bases are complete,
apply-review-captions.mjsmust use the same SRT/caption style to generate the review candidate, and bind the base/SRT/style/candidate/audio essence SHA. - Remotion uses a frame-driven native implementation; HyperFrames uses a seekable paused timeline. The two must not use the same fixed card layout, and must not modify the AST in reverse from the renderer.
- Do not mix condensed voiceover scripts, scene titles, or captions from old projects into the caption track.
4. QA and delivery
Write candidates, contact sheets, render-manifest.json, and qa-report.md in 11-动画/. CROSS_RENDER_VALIDATION_PAIR writes only the two candidates; only after viewer_verdict is ACCEPTED and selected_candidate is explicit may the selected candidate be written as 07-剪辑/final.mp4. PRIMARY_RENDERER also follows the same final condition.
QA must record: canvas, fps, duration, audio/video streams, full decode, source hash, EDL version, caption safe area, the hero frame and boundary frames of each selected beat, and the audio review conclusion.
Execution mode
- REVIEW_GATED: static composition and the final MP4 await Jeffrey's conclusion.
- AUTONOMOUS_RUN: autonomously render within the locked EDL and self-check at most three rounds; publishing always awaits Jeffrey.
A technical PASS is not the same as a viewer PASS; a candidate must not be written as an accepted method just because rendering succeeded.
🔴 CHECKPOINT: create final.mp4 only when viewer_verdict=ACCEPTED and selected_candidate is a candidate with technical_qa=PASS.
After Jeffrey explicitly selects a cut, run node scripts/accept-render-candidate.mjs episodes/<slug> candidates/<renderer>.mp4 --viewer-accepted; the script binds the manifest, candidate, and QA evidence, and creates the same-byte final and review-record.
After the dual-renderer comparison is established, run node scripts/record-renderer-validation.mjs episodes/<slug> <renderer> --viewer-accepted "<选择理由>". It binds the two candidates/QA/review and generates a structured comparison; only after that record passes is switching PRIMARY_RENDERER allowed for the next issue.
Failure handling
| Situation | Action |
|---|---|
| renderer cannot read source | Generate a compatible production source, record the new hash, and have both sides use the same byte file |
| Image obscures subtitles | Re-render after fixing the overlay or subtitle safe area; do not delete subtitles to hide the problem |
| Visuals look like an old template or the two renderers look too similar | Re-read the renderer-brief; keep the same semantics and redo the visual language separately |
| EDL is missing source or factual provenance | Return to ⑨; do not guess and fill in from this skill |
| QA does not pass | At most three rounds of targeted repairs; if it still fails, keep the candidate and report the failure evidence |
Prohibitions
- Do not generate based on fixed coverage, a scene every N seconds, fixed face-wrapper, fixed cards, or fixed text;
- Do not copy clean.mp4 and name it final.mp4;
- Do not insert irrelevant B-roll just to showcase footage;
- Do not use the old v10 index.html, examples, visual constants, or manual gate rules;
- Do not publish automatically.