AI Video Creation Skill
Role
Act as the director layer above the existing video skills. Route the job, define the acceptance standard, then coordinate production and QC. Do not replace hyperframes, remotion, ra-audio-to-subtitles, skill-captions, embedded-captions, graphic-overlays, ra-video-download, video-transcription, tts-skill, heygen-digital-avatar, or ai-video-qc-delivery; load those skills only when their lane is selected.
If the user provides a source video URL or local file and asks for video rewriting, video re-creation, or rewrite and produce video, route to ra-video-wash-pipeline before this skill so extraction and rewrite happen first.
Queue Intake
If the input is a handoff project folder under 01-Content-Production/Video-Workbench/Queue/<date-topic>/ (contract file handoff.md at its root; or the user says process queue, process from handoff, or points at a queued script):
- The
handoff.mdfrontmatter is the binding production contract — platform, ratio,duration_target_s,word_count,voice,caption_style,visual,illustration_skill,typographyoverride intake defaults and must never be replaced by an execution skill's own defaults (e.g. HyperFrames TTS voices are not a substitute for the contract voice) - Before starting work, set
status: in_productioninhandoff.mdand move the whole project folder to01-Content-Production/Video-Workbench/In-Production/<date-topic>/, so the other machine does not double-produce; all engineering happens inside that folder - The script segments in the handoff file are the scene units; do not re-split or re-flow the narration
- Skip intake questions the contract already answers
Hard Rules
- Define the output standard before production: original video, pixel-level alignment, visual replica, style-inspired creation, captioned footage, narrated explainer, product promo, website tour, or motion graphic.
- Do not claim pixel-level alignment for a hand-authored HyperFrames/Remotion rebuild. Pixel-level requires source-stream reuse, original project assets, or hard metrics such as matching hash,
cmp, PSNR infinity, or SSIM 1.0. - Keep source projects and intermediates under
<WORKSPACE>/01-Content-Production/Video-Workbench/In-Production/; the workbench01-Content-Production/Video-Workbench/holds only handoffs, transcripts, and archives. - Final deliverables stay inside the vault. Every video produced by this system — queue or non-queue, transcript-direct, practical long-form, translated/repackaged, or ad hoc — delivers to
01-Content-Production/Video-Workbench/Completed/<early-month|late-month>/<date-topic>/Master/, with key QC images in the siblingQC/. Use the delivery date: days 1-15 go toEarly-Monthand days 16 through month-end go toLate-Month.Completed/06-Historical-Archive/(sealed read-only) and the desktop<WORKSPACE>/legacy-archive/are retired legacy history — do not write new deliverables there. - Publish titles are not production work for queue jobs:
ra-video-titlealready wrote 8-12 candidates into the handoff'sTitle Candidatessection at wash time, and the final title is chosen manually by the user at publish time. Do not generate or apply publish titles and do not createvideo-title.mdfor queue jobs (on-page scene titles from the script are unaffected). Only for non-queue jobs (no handoff contract) generate 8-12 candidates withra-video-titleafter QC and let the user choose before savingvideo-title.mdnext to the final MP4. - A video is not complete until media specs, visual checks, and archive paths are confirmed. The selected-title-file requirement applies to non-queue jobs only; queue jobs finish without
video-title.md(title selection stays manual with the user). - If the user explicitly names a visual or illustration skill, load and follow that skill before designing the visual layer. Do not replace a requested illustration skill with hand-coded shapes, CSS drawings, or "style-like" approximations unless the user explicitly approves that substitution.
- When full AI narration is required, final deliverables must use local IndexTTS2 through
tts-skill, voice idpluvio-indextts2-calm-v1, and the canonical lossless WAV declared inautomation/config/tts-routing.json. MiniMax is reserved for public article/tutorial relay examples and is forbidden for local video narration. Do not silently fall back to macOSsay, browser speech, MiniMax, or another generic/cloud voice. If the local model or canonical WAV is missing, repair the IndexTTS2 lane or stop before final render. - For jobs taken from the queue, delivery is not complete until
python3 automation/scripts/check_delivery.py <handoff-file> <project-dir> <master.mp4>exits 0, the production receipt in the handoff file is filled (paths + checker output),statusis set tocompleted, and the per-project archive folder01-Content-Production/Video-Workbench/Completed/<early-month|late-month>/<date-topic>/(folder name = the project folder name) is assembled by moving the cleaned project folder fromIn-Production/:handoff.mdat its root, the final MP4 inMaster/, key QC frames inQC/, minimal engineering inEngineering/. Non-queue jobs assemble the same dated archive structure using a clear topic slug; copy a production note/script/plan into the archive root when available. No job copies a new final intoCompleted/06-Historical-Archive/(sealed read-only). - The Image-Workbench queue follows the same contract pattern: take
01-Content-Production/Image-Workbench/Queue/<file>.md(frontmatter contract: card_count, ratio, style, illustration_skill, image_skill), setstatus: in_productionon start, produce the image cards without rewriting the copy and without generating or applying publish titles, deliver to01-Content-Production/Image-Workbench/Completed/<date-topic>/(handoff file moved in + finished cards underImages/), setstatus: completed, and register the item under pending modifications in01-Content-Production/Publishing-Board.md. The source-privacy wall applies unchanged. - Practical long-form projects follow the unified engineering layout under
01-Content-Production/Video-Workbench/In-Production/<date-topic>/; do not create a separate planning directory underVideo-Workbench/. The planning script frontmatterstatusis the only handoff signal, and the user handles recording and editing integration stages personally. Codex owns three stages: (a)status: rough_cut_pending— default tora-local-talking-head-cut: Seed ASR word timestamps, terminology/uncertainty review, and a source-timeline pre-cut SRT. Stop for explicit user approval; no EDL or render is allowed before approval. Then perform semantic cleanup, adaptive pauses, source-size/source-fps rendering, dialogue loudness, media QC, and final-media subtitle generation with caption QC PASS. Usevideo-useas the multiple-take evidence/selection layer; useAgentchengfeng/chengfeng-videocut-skillsonly for word-level web review or an intentionally aggressive comparison; chooseAI-Cut-Speechwhen the user wants waveform review and an FCPXML timeline for editing/Final Cut Pro. The default MP4 workflow deliversRough-Cut/speech-rough-cut.mp4and setsstatus: merging; the FCPXML workflow moves forward only after the editor timeline is accepted; (b)status: subtitles_pending— runra-audio-to-subtitlesagainst the user's final merged cut, require word-timestamp QC to pass, then runskill-captionswith the contractcaption_style(defaultanchor-dark) to preview, burn, and validate the phrase captions; save the matching.srtand passingcaption-render-qc.json, then setstatus: animation_pending; (c)status: animation_pending— add Remotion component overlays ONLY to the full-body segments listed in the planning script frontmatter, composite, deliver the final MP4 toVideo-Workbench/Completed/<early-month|late-month>/<date-topic>/Master/, put key QC in the siblingQC/, register on the publishing board, setstatus: finished. All rough-cut tools are rough-cut-only in this workspace: never use any rough-cut tool's subtitle output as the production subtitle timeline. - For any narrated final video, the final concatenated audio or final merged video is the only subtitle timing source. Run
ra-audio-to-subtitlesafter audio is locked; archivecaptions_words.json,captions.json,captions.srt, andcaption-qc.json. Character-count interpolation, scene-duration interpolation, and fixed-delay caption timing are preview-only and must never enter a recommended final. - Whenever a video component, video background, or reference-video replica reaches a rendered, QC-passed final, stop before adding it to
05-Video-Components/and explicitly ask the user: whether it should enter the component library, which existing category should contain it, and whether a new category is needed. Do not infer placement or create a category before the user answers. If the user declines, use only the normal finished-video archive. If the user approves, treat the confirmed05-Video-Components/<Chinese-Category>/<Chinese-Component-Name>/names as canonical and make the component directory self-contained in the same task: portable MP4,manifest.json,QC/, andEngineering/(the sole editable source, stripped of node_modules/renders). No engineering mirrors, symlinks, or second copies exist anywhere else; register the component in05-Video-Components/CATALOG.mdbefore reporting completion. - Whenever the user asks for a HeyGen/digital-human/avatar video, or a video production contract calls for the existing Pluviobyte digital human, load
heygen-digital-avatarbefore generation. Its original Digital Twin look, CLI OAuth subscription billing, Avatar III default, local IndexTTS2 audio, one-master reuse, and approvedheadroom_08lower-left circle layout are binding. Only an explicit request forfull-screen digital humanmay bypass the circle layout. - Treat any decorative focus frame enclosing over 40% of the canvas or multiple content groups as an entrance cue only. Its total visibility must not exceed the shorter of 2 seconds or 15% of the scene, and it must exit before the steady information state. Persistent frames require explicit semantic purpose and must tightly bound one local target.
Default Visual System
When the user says to make a video with this skill and does not provide a conflicting visual direction, use a white-first visual system:
- background: pure white or warm white, with generous blank space
- for white-first AI/tool tutorials, page-based explainers, and white motion graphics, read
references/perspective-grid-v5.mdand start from the workspace component05-Video-Components/Video-Backgrounds/Perspective-Grid-Background/. The bundledassets/perspective-grid-v5/copy is the same-hash Skill mirror and fallback, not a second independently editable baseline. Use the approved V5 loop as the bottom-most visual layer at its native playback rate: 1920x1080, 30fps, 7.3 seconds / 219 frames, three complete grid cells per loop, and a 2.433-second single-cell period. Preserve its geometry, asymmetric color plate, center fog, phase, and seamless-loop timing. Do not rebuild it from an older version or an ad-hoc CSS grid. - disable the V5 grid only when source footage, full-screen talking head, dense UI, readability, a handoff contract, or an explicit reference conflicts with it. Record the reason in the production note.
- primary marks: black text, black line art, and restrained dark UI elements
- accents: use only small amounts of red, orange, or blue for emphasis, warnings, arrows, feedback, or state
- captions: for narrated explainers over footage, screenshots, the V5 grid, or variable backgrounds, run
skill-captionsand use itsanchor-darkshrink-wrapped panel by default. A handoffcaption_styleor explicit user style overrides it; frameless captions require a controlled uniform light caption zone and a recorded reason. - avoid defaulting to dark, purple, neon, or SaaS-magic styling unless the user explicitly asks for it or the selected route requires it
- use
ian-xiaohei-illustrationsas the default illustration source for page-based or scene-based videos. Prefer the active project-local copies under.agents/skills/ian-xiaohei-illustrations/,.codex/skills/ian-xiaohei-illustrations/, and.claude/skills/ian-xiaohei-illustrations/; the shared library path<WORKSPACE>/.claude/skills/ian-xiaohei-illustrationsis only a source of truth to repair from when the project copy is missing. - give every page or scene a meaningful Xiaohei illustration whenever possible; skip only when footage, screenshots, dense UI, or readability would clearly be harmed
- each illustration must explain the page's core claim, process, contrast, or state; Xiaohei should perform the core action, not appear as decoration
- if the plan says "Xiaohei" or "Xiaohei illustration", create real image assets with
ian-xiaohei-illustrationsand save them into the project. A CSS/HTML approximation of Xiaohei does not satisfy this requirement. - for page-based 16:9 Xiaohei videos, use the
xiaohei-16x9-layoutcontract before writing the composition. The contract fixes the page skeleton first: left-top title, left-middle note card, right-middle Xiaohei illustration, and lower caption. Do not invent a fresh layout unless the user asks for a different visual system.
Page-Based Explainer Defaults
For AI/tool tutorials, page-based narrated explainers, and long-form Chinese teaching videos, apply these defaults unless the user gives a conflicting reference:
- For 16:9 Xiaohei explainers, read
references/xiaohei-16x9-layout.mdbefore building. Copy or adapt the template asset inassets/xiaohei-16x9-template/when the project is a HyperFrames page-based video. - Treat the layout as a contract, not a loose suggestion. The right-side Xiaohei image belongs to the right-middle area, not the upper-right corner. The left note card belongs to the left-middle area, not the lower-left area. Captions must stay below the content zones with a clear bottom safe margin.
- Select a page variant before writing HTML:
standard,long-title,wide-visual, orclose. Uselong-titlefor titles that would produce awkward automatic breaks; usewide-visualfor horizontal illustrations; useclosefor final action or summary pages. - Manually plan page transitions: fades for narrative continuity, cuts for topic shifts. Animate the Xiaohei illustration into position for the first page that introduces a new diagram, then keep it static on repeated appearances.
- For voiceover-to-textport timing, read the narration at a natural pace, underline key terms as they pass, and keep a textport visible for at least 2 seconds at the end before fade-out.
- If the narration has sparse audio (long pauses, ambient-only segments), cover those with motion-graphic sequences rather than freeze frames.
- When the script calls for on-screen code or terminal blocks, use a monospace font on a warm dark panel; fade the panel in and out with the block.
- An explicit
duration_target_sorword_countin the handoff contract is the authoritative production target; do not pad or trim unless doing so produces a coherence break.