Combo Style (Creator A × Creator B)
Position & Workflow
Fixed dark grid frame, AI avatar as the 'logic node', precise motion effects as 'evidence'—every cut follows the speech. Quality keywords: Pinned frame / Follows the speech / Precise & minimal. By default, it adopts Creator A's tutorial framework as the skeleton (dark grid, subtitle bar, bottom-left circular PIP, screen recording push/pull, keyword cards, chapter cards, fluorescent green HUD), borrowing six points from Creator B: wide shots return every 15–20s; all static assets slow linear push-in; data topics use charts as evidence; PIP overlaid on charts/B-roll allows "shout enlarge"; 3-minute data videos may include chapter corner badges; large number cards. Target output: 1–3 minutes, 16:9, 1920×1080, 30fps (the original is a 20-minute long video; only the transferable parts are migrated).
This is a collaboration, not a one-shot generation. The AI avatar video is provided by the user (or the user generates it using the script we write). Raw materials (screen recordings, screenshots, data) are provided by the user; Claude handles the script, storyboard, motion effects, and rendering, pausing after each round for user review and iterating based on feedback until the final video matches the original in quality.
- Quality standard is 'like the original': Compare frame by frame against evidence frames from the original (font, shadows, spacing, easing, rhythm)—linting is just a baseline check.
- Deliver only small pieces per round, asking the user for specific decisions (see references/collaboration.md). Do not run through the entire pipeline and deliver everything at once.
- Record every user confirmation and preference into notes.md for the project; write cross-project preferences back to references.
- If a material or tool is missing, say so honestly ('missing / to be built'); do not fabricate or pretend to have it.
Full Pipeline Stages & Gates (details in references/production-playbook.md)
S1 Script (Notion draft → compressed voice-over → hook rewrite → English adaptation, word count calculated from measured speaking speed) → S2 Audio (user clones voice via Fish Audio, never use HeyGen TTS; local silenceremove to cap pauses + atempo; G2 user selects final duration) → S2.5 Asset Prompt Pack (user generates all videos/images via Gemini, Claude provides each prompt + duration; asset QA upon intake; G2.5, see references/gemini-asset-prompts.md) → S3 HeyGen (browser-driven; avatar/background/13s sample G3; full render ≈0.8 credits/sec; authentication/payment/deletion handled only by user) → S4 Still frames G4 → S5 B-roll (Pexels, record LICENSES, 30fps, interpolate only for aerial shots) → S6 Timeline (subtitle/keyword timings must come from word-level forced alignment, never estimated; before preview, pass G5.5 subtitle sync check, see references/subtitle-sync.md) → S7 Low-res preview round v1..vN G5 → S8 Motion polish + SFX + creative graphics (references/motion-polish-and-sfx.md) → S9 Final crf18 + loudnorm -16 LUFS (-c:v copy) → S10 Self-check + copy to desktop G6 (<130MB, no cloud storage).
Default: no BGM—deliver a 'voice + SFX' version; the user adds music in Jianying; do not write assets.bgm, keep SFX quiet.
What the User Cares About (Review before each video)
- The visuals must have rich, real B-roll, not just keyword cards; if missing materials, find them in free stock libraries; don't downgrade to text.
- Motion effects must be smooth and polished: spring/easing, mask + blur reveals, motion blur, precise exits; check frame by frame.
- Elements must have exits and sound effects (SFX light, density ≤0.8/s); use creative graphics (chains/stairs/gates/icons) instead of text for structural points; graphics use bold Anton numbers, bold lines.
- English videos: zero Chinese characters on screen (including signs in B-roll; spot-check with OCR).
- The original video is a reference, not a copy: if PIP/subtitle overlaps, adapt as needed; make small design decisions yourself; only bring major visual changes to the user for confirmation.
- Collaboration is not one-click: stop at each gate for user review, confirm, then write to notes.md.
Why It Looks Comfortable (Core Principles, Values in references/comfort-rules.md)
- Cuts follow the speech: ~70% of cuts land at subtitle sentence changes (Creator A median 69%, Creator B 70–88%); a main frame every 2–3 sentences (4–7s); text appears when the word is spoken (−2 to +4 frames, better late than early).
- Fixed frame, only content changes: same subtitle style throughout, y jitter ≤1% of image height; use only two backgrounds (#010101 grid / darkened B-roll); ≤3 accent colors; ≤1 main title + 3–4 elements per screen.
- Camera moves are few and purposeful: screen recording push only to 1.12x, ~28 frames ease-in-out; host punch-in 1.08x, ≤2 times/min; B-roll linear slow push 1→1.08; camera moves apply only to content layer, not PIP/subtitles/HUD.
- Host = judgment, motion = proof: questions, transitions, conclusions get host wide shots; facts, numbers, processes, interfaces, metaphors get motion effects. Wide shots return every 15–20s; face-less segments ≤10s.
- Motion durations come in tiers: hard cut 0 / fast 6 frames / standard 12 frames (slow 18 frames); dwell ≥40 frames.
Language Switch (Chinese / English)
- Default Chinese version: this file and other references' values are for Chinese parameters; they remain unchanged.
- English version (user says 'English version / pure English video', or notes.md records lang=en): first read references/english.md, which provides English replacement values (words/sec, subtitle word count, Latin fonts & sizes, lint English thresholds, TTS pronunciation, English hooks, HeyGen/Fish Audio notes); where conflicts arise with Chinese parameters, the English version follows english.md; rest (rhythm, camera moves, color values, subtitle y position 0.905H and font size 46px) remain the same.
- English version hard rule: zero Chinese characters on screen (subtitles, keywords, chyrons, chapter cards, HUD, units, labels, placeholders, titles/credits, screen recordings, avatar burned-in subtitles—all in English/numbers/symbols). See english.md §4 for the checklist and inspection commands.
- Font/size/lint for the English version are implemented in the project: writing
meta.lang:'en'in the timeline switches to English (default zh, Chinese unaffected); only a few variants listed at the end of english.md §3 (e.g., gold_card) are not yet adapted. English version placeholder assets usepublic/placeholder/en/(old placeholders contain Chinese characters). Round 0: first ask the user: HeyGen subtitles off? Export resolution/framerate? Fish audio format?
File Map (Read on Demand, Not All at Once)
| File | When to Read |
|---|---|
| references/collaboration.md | Every round: deliverable checklist, how to ask questions, user feedback → parameter mapping, notes.md format, preference write-back |
| references/digital-human.md | Round 0: avatar composition/background/speaking speed/export files, timestamp extraction, notes for each tool |
| references/thinking.md | Round 1: 5 topic questions, opening/structure/psychological pacing, information density, sentence role → who appears, compressing 20 minutes to 1–3 minutes |
| references/templates.md | Round 1: time schedule and word budget for templates A/B/C (60/120/180s) |
| references/hooks-and-copy.md | Round 1: opening technique library (fill-in templates), copy rules, voice-over markers, ending CTA |
| references/visual-mapping.md | Round 2: content type → visuals → component mapping; four-beat/demo sequence; host return; PIP presets and switching; forbidden zones |
| references/packaging.md | Rounds 2–5: subtitle, color, font, keyword card, chyron, HUD, chapter card, annotation box, widescreen and other layout parameters; differences between two themes |
| references/motion-and-camera.md | Rounds 2–5: full motion effect catalog (including Creator B N23–N30) and virtual camera parameter table |
| references/comfort-rules.md | Rounds 2, 5: 11 comfort rules (quantified) and inspection methods; 15 lint rules; must/should/may |
| references/remotion-pipeline.md | Path B (Rounds 3–5): timeline.json fields, component props, unimplemented P2 items and workarounds, avatar integration, linting, render commands, common pitfalls |
| references/jianying-guide.md | Path A: Jianying step-by-step operations (subtitles, keyframe push, circular PIP, text animation duration, transitions, sound effects, music) |
| references/production-playbook.md | Full video production from scratch (HeyGen+Fish+English): S1–S10 stages/gates/costs/pitfalls, with real project examples |
| references/gemini-asset-prompts.md | All assets must be generated by the user via Gemini (S2.5): shotlist → prompt pack, style bible, video/image prompt structure, duration, naming, intake QA, re-output template; scripts: make_prompt_pack.py / ingest_gen_assets.py |
| references/motion-polish-and-sfx.md | Exit choreography, new transitions, SFX library and cue rules, no-BGM default, mg graphic suite and when to use graphics |
| references/english.md | English version: words/sec conversion, Latin fonts & sizes, zero Chinese character checklist and OCR inspection, lint English thresholds and code to modify, English voice-over/hooks, HeyGen+Fish Audio |
| references/forbidden.md | Round 1 and pre-delivery: iconic elements that cannot be copied and their replacements |
| templates/output-template.md | Final delivery summary template (outputs from all rounds combined; see top of file for explanation) |
| templates/timeline.example.json | Component rendering example (placeholder assets, Template A 90s, lint 15/15)—only to see component structure and copy JSON format, not an example topic |
| templates/build_demo_timeline.py | Reference for using the project builder to generate a timeline from a 'beat list' |
| templates/grid_bg_1920x1080.png | Grid background image (#010101 + #1A1A1A, 72px); use Jianying path directly |
| scripts/README.md | List of reusable scripts (SFX compositing/cue, mix check, contact sheet, transition patterns, image generation) and how to bring TS components into a new project |
| scripts/stills_timeline.mjs | Packs multiple keyframe PNGs from any timeline in one batch (for Round 3, tested) |
| examples/demo-script.md | Example of a collaboration process: Rounds 0–4, what to deliver in each round, possible user feedback, how to adapt |
| video-asset-prep/SKILL.md | Advanced motion effects: adding fx motion blocks to voice-over videos, creating full motion effect promo videos, deconstructing new reference motion videos (rules / block catalog / deconstruction methods) |
Remotion project: <project directory>/ (local, not on cloud). src/tokens.ts and components are the single source of truth for parameters; where references conflict, the project code takes precedence. src/ is not read-only: modify it as needed (add/extend blocks, change shared files—the user explicitly approved on 2026-10-19); after changes, it is recommended to run ae-motion-craft regression checks to ensure no breakage; do not git commit unless the user requests it.
Directory Convention for Each Video Project
Remotion's staticFile can only read public/, and public/ is fully bundled into every render/image export—do not put large raw materials into public/. Therefore, each project exists in two locations, slug uses lowercase English kebab-case (e.g., meeting-notes):
<project directory>/projects/<slug>/ # Workspace (not bundled)
input/ Raw files from the user: original avatar video, screen recordings, screenshots, data (read-only, do not overwrite)
script.md Voice-over script + sentence role table (Round 1)
storyboard.md Storyboard + asset list (Round 2)
words.json Sentence-level / word-level timestamps (obtained in Round 0; tools below)
notes.md Decision and preference log (format in references/collaboration.md)
review/ Images/videos for user review per round (stills, compare, preview, with round and version number)
<project directory>/public/projects/<slug>/ # For rendering (bundled; only processed final assets)
host_full.mp4 host_pip_480.mp4 host.wav # Transcoded from input/; specs in digital-human.md §8
assets/… # Screen recordings, images, B-roll, logo for rendering
timeline.json # timelineSrc = "projects/<slug>/timeline.json"
- All paths in the timeline are relative to
public/, e.g.,assets.hostVideo = "projects/<slug>/host_full.mp4",assets.files→projects/<slug>/assets/…(other fields in remotion-pipeline.md §1). - Rendering output goes to
out/<slug>/(already .gitignored).lint:timelineaccepts any path:npm run lint:timeline -- public/projects/<slug>/timeline.json. - This convention does not modify project
src/; Claude createsprojects/directories as needed.
Collaboration Workflow (Rounds 0–5; can go back to any earlier round at any time)
Each round format: What to show the user → What to ask the user to confirm → How to adapt after feedback. Specific question phrasings and feedback translation tables are in references/collaboration.md. After user confirmation, write to notes.md before proceeding to the next round. When the user revisits an earlier round, only redo the affected parts (script change → storyboard/timestamps/timeline must be re-aligned; storyboard change → stills must be re-exported; visual parameter change → script stays unchanged).
Round 0: Material Intake (User Provides Avatar Video, or First Writes Script then Generates)
Two starting points:
- A. User already has an avatar video → Check as below; after passing, extract audio and text.
- B. User does not yet have a video → First do the script in Round 1; after user confirmation, use the paste-ready version from digital-human.md §6 to generate via the avatar tool (inform user of composition/background requirements beforehand, as they cannot be changed later); then return the video and come back to this round for validation.
Avatar Video Validation (first run ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate,avg_frame_rate,duration,pix_fmt -of default=nw=1 in.mp4 for objective data, then extract 3–5 frames with Read to inspect; full standards in digital-human.md §1–§4, §8):
| Check Item | Pass | Action if Fail |
|---|---|---|
| Resolution | 1920×1080, landscape 16:9 | User re-exports 1080p landscape; below 720p or portrait requires re-do, do not stretch |
| Frame Rate | Constant 30fps (avg=r) | We can transcode (-r 30); if variable frame rate, warn of lip-sync drift risk |
| Duration | Matches target 60/90/120/180s, generated as single take (not multiple clips) | Multi-generations cause skin tone/lighting jumps; user must combine into one take or accept seams |
| Composition | Half-body front-facing, hands in frame; face height ≈0.30H, face center ≈(0.48W, 0.38H); headroom ≈0.07H; face sides x 0.03–0.305, 0.667–0.97, y 0.07–0.35 clean; gestures do not overlap y 0.86–0.93 subtitle zone | User adjusts shot size/zoom/position in tool and re-exports; small deviations compensated via PIP framing, large deviations require re-export |
| Background | Dark solid color or clean scene (brightness Y≈42–62), not the original creator's room; no flickering | User re-exports with dark background; if green screen/transparent, warn that current renderer lacks background replacement implementation—user must bake in a dark background |
| Lip Sync & Expression | Extract 3 speaking frames: clear mouth, no blurred face/dropped frames/hand distortion | Point out specific timestamps; user changes avatar/export settings and re-generates |
| Clothing & Lighting | Solid dark top, no fine stripes; face bright, background dark | Same as above; re-export |
| Audio | Video contains audio track; ideally, separate wav without BGM | If no wav, we extract from video (see below); if BGM is baked in, ask user to export a music-free version |
| Subtitles/Text | Ideally accompanied by SRT or original script | If not, proceed with transcription below |
| Present the validation conclusion as a ✓/✗ table to the user; for each fail item, write 'how to set during re-export'. |
Extract Audio & Text (what's available, what's to be built)
- ✓ Available (local ffmpeg/ffprobe): transcode to 30fps, extract audio with
ffmpeg -i in.mp4 -vn -ar 48000 -ac 1 host.wav, create 480p PIP proxy—all commands in digital-human.md §8. - ✓ Available · User has script (Plan B or user-provided): use the script directly for sentence-level text; estimate timings based on wav duration + character count ratio, confidence=0.5, text appearance offset +4 frames (digital-human.md §9-3).
- ✗ To be built · Speech-to-text + Chinese word-level forced alignment: no whisper / WhisperX / stable-ts / FunASR installed locally (checked), and none in Python; the project's
@remotion/openai-whisperis only a utility package to parse OpenAI Whisper API results, requiring the user's API Key—we do not have access. Until built and validated on a sample for Chinese alignment errors, we cannot claim to have word-level timestamps. Fallback options: (1) SRT exported from the avatar tool (sentence-level); (2) User exports SRT from Jianying's 'recognize subtitles' feature; (3) With user consent, set up local ASR (ask permission first, explain dependency installation); (4) Use sentence-level estimates for stills, then add alignment before final render. - Whatever the source, store the result as
projects/<slug>/words.jsonand record the source and confidence in notes.md; for Chinese, compare misread characters against the script (digital-human.md §10). Deliver to the user: validation table + timestamp source explanation + list of items needing re-export. Ask the user to confirm: whether this video is final; which timestamp approach to use.
Round 1: Script (Topic → Voice-over Script → Sentence Role Table)
Do: 5 topic questions (thinking.md §2), template type, one thesis + ≤3 pieces of evidence + one contrast (thinking.md §4–§7), hook (hooks-and-copy.md §1–§2), paragraph time schedule (templates.md; word count = duration × ~4.8, tutorial type N = round((T−42)/25)), write sentence-by-sentence voice-over with role/intent/marks (hooks-and-copy.md §3–§5; ≤20 characters per sentence, numbers stand alone, CTA only once at the end, do not write the original creator's sentences; forbidden.md). If the user already has a video, use the actual spoken lines and only create a 'role table + modification suggestions', do not change the script arbitrarily.
Deliver to the user: 2–3 title/hook options + full voice-over script (paste-ready) + sentence role table (condensed: marker | original line | role | who appears).
Ask the user to confirm: which hook; which sentences to edit/delete; whether numbers/facts are accurate; whether word count and duration are appropriate.
After feedback: edit script → recalculate word count/speed → if a video already exists, re-align timings.
Round 2: Storyboard (Storyboard Table + Asset List)
Do: classify sentences→host, proof→motion; combine 2–3 consecutive sentences into one main frame; select PIP preset (visual-mapping.md, motion-and-camera.md, comfort-rules.md); densest in the first 20–30s, then '15s tight + 15–20s loose'; wide shots return every 15–20s; face-less segments ≤10s; punch ≤2/min; screen recording gets a push/pull or annotation every 3–5s. If evidence materials are insufficient, downgrade to keyword card + host; do not force it.
Deliver to the user: storyboard table (time | voice-over | visuals | PIP | subtitles & emphasized words | motion/camera) + asset list (each item: id, which frame it is used in, what content is needed, how to record/export, fallback if missing, e.g., 'screen_render: screen recording of the render command, ≥1080p, 5–10s, cursor visible; if not available, change to keyword card').
Ask the user to confirm: storyboard rhythm; whether each asset can be provided; for missing assets, whether to supplement or downgrade.
After feedback: edit storyboard, update asset list; when assets arrive, place them in input/, check resolution/content/private info (accounts, keys, faces), then move to public/projects/<slug>/assets/.
Round 3: Keyframe Stills (Side-by-Side with Original Evidence Frames)
Do: write timeline.json (remotion-pipeline.md; may reference the example timeline.json template, but replace content with this project), npm run lint:timeline, then export 6–10 keyframes—representative frames for hook, chyron, keyword card/chapter card, screen recording push midpoint, large number/comparison card, PIP frame, subtitle frame, end frame:
cd <project directory>
# Usage: node <script> <timelineSrc> <outDir> <frame numbers, separated by commas>; exports multiple frames in one batch, ~10 seconds, outputs f<frame number 5 digits>.png
node talking-video-oneshot/scripts/stills_timeline.mjs projects/<slug>/timeline.json out/<slug>/stills 45,300,620
# Single frame also possible: npx remotion still Main out/<slug>/x.png --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --frame=300
# Side-by-side (left original, right ours, both scaled to 960×540)
scripts/compare.sh projects/<slug>/review/r3_cmp_01.png <original evidence frame> out/<slug>/stills/f00045.png
- Original evidence frames are in
<material directory>atv03|v04|ex04–ex06/evidence/,ex01–ex03/ev/,v01|v08|v09|ex07|ex08/frames|bursts|scenes/; correspondinganalysis.md/motion_catalog.md/transcript.mdcan be consulted for how a specific shot was done in the original. The project'scompare/directory also contains existing comparison images for each component. Read-only; do not modify the original directory. - When no matching evidence frame is found, honestly mark 'no corresponding original frame' and verify with packaging.md parameters.
- Under each side-by-side image, write one line: which frame this is, which original frame it corresponds to, and the gaps I see (font/shadow/spacing/position/color value). Deliver to the user: 6–10 side-by-side images (batch, max 4 at a time) + my own list of perceived gaps. Ask the user to confirm: for each image, 'looks like / does not look like / what doesn't look like'; which items to fix first. After feedback: adapt timeline according to the mapping table in collaboration.md, or if it's a component-level defect, record it as a 'project issue' and inform the user; you may directly modify src/ if needed (recommend running regression after changes); re-export only the frames that were flagged.
Round 4: Low-Res Full Video Preview
Do: full video low-res render for rhythm and timing review (high CRF, half resolution possible; before the first render, inform the user of estimated duration, ~4 minutes for a 60s clip):
cd <project directory>
npx remotion render Main out/<slug>/preview_v1.mp4 --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --crf=32 --scale=0.5 --codec=h264
(If only local changes are made, first use --frames=a-b to render only that segment.) If the preview uses placeholder assets or estimated timestamps, you must inform the user.
Deliver to the user: preview_vN.mp4 + 5–8 time points (mm:ss) I have marked as 'please focus'.
Ask the user to confirm: feedback per time point (format: '0:23 text appears late', '1:05 screen recording push too aggressive'); overall rhythm, does it feel like the original?
After feedback: translate each feedback into parameter changes (using the mapping table), then explain 'which parameters of which frames were changed', and render v2 (preferably only the affected segments). Can loop multiple times.
Round 5: Polish & Final Render + Self-Check
Do: address remaining issues from preview; upgrade timestamps to real alignment (if Round 0 used estimates); lint 15/15; final render:
npx remotion render Main out/<slug>/final.mp4 --props='{"timelineSrc":"projects/<slug>/timeline.json"}' --crf=18 --codec=h264
Then extract 5–8 frames to check: no red 'P2 scene not implemented' backgrounds, subtitles don't jump, text doesn't appear before speech, camera moves aren't too aggressive, hostAudio is present. Go through the 'Pre-Delivery Self-Checklist' below, write ✓/✗/value for each item, list uncertain items under 'pending user confirmation', organize into templates/output-template.md. Deliver to the user: final.mp4 + self-check table + final round of side-by-side frames with the original. If the user is not satisfied → return to the appropriate round; do not force the delivery.
Path A (Jianying Manual)
When the user wants to edit in Jianying themselves, Rounds 3–5 change to: write step-by-step operation instructions based on the storyboard in references/jianying-guide.md (subtitle styles, keyframe push, circular PIP, animation duration, transitions, sound effects, music); after the user finishes one edit, they submit a screenshot or exported segment; Claude manually checks against the original and comfort-rules, then provides revision suggestions.
Comparison of Two Execution Paths
| Item | Path A: Jianying Manual | Path B: Remotion Automated |
|---|---|---|
| Suitable for | No coding, few assets, need speed | Batch processing, pixel-perfect consistency, automated checks |
| Input | Avatar video + storyboard + editing instructions | Avatar video + host.wav + timestamps + timeline.json |
| Subtitles | Recognize subtitles → batch apply one style, y≈0.90H | subtitles[], box 46px, y 0.905H (stroke 56px, y 0.885H) |
| Push | Scale keyframe 100→112%, 28 frames, ease-in-out | camera:[{kind:'push',dur:28,scale:[1,1.12],ease:'inOutCubic'}] |
| PIP | Picture-in-picture + circular mask, diameter 0.14W, center (0.08,0.85) | pip:{preset:'bl_circle'}, consecutive shots auto-merged |
| Check | Manual (comfort-rules.md 'manual inspection' items) | 15 lint rules + frame sampling |
| Limitations | Jianying menus/values may vary; annotations with push require compound clips | Charts/fullscreen end cards/closing card/brush word/sound effects not implemented (with workarounds) |
Final Delivery Format (templates/output-template.md; concatenated from all rounds)
- Basic Info 1. Title & Cover 2. Voice-over Script + Role Table 3. Avatar Settings 4. Storyboard Table 5. Editing Instructions (5A Jianying / 5B Remotion) 6. Timeline Summary 7. Self-Check + Pending Items. Collaboration process example: examples/demo-script.md.
Pre-Delivery Self-Checklist
- Hook appears within 3 seconds (question/contrast/promise) with first visual change; no pleasantries, self-introduction, or logo at the start
- Speaking speed 4.5–5.5 characters/sec (total characters ÷ duration); ≤20 characters per sentence; ≤14 characters per subtitle line (8–10 optimal)
- English version: speaking speed 2.2–2.6 words/sec; ≤16 words per sentence; ≤7 words/38 characters per subtitle; entire video frame sampling has no Chinese characters (english.md §4: static grep on timeline +
tools/ocron sampled frames, result NO_CJK) - Every sentence has role and intent; argument points in host, evidence in motion; insufficient evidence downgraded to keyword cards
- Cut points land at sentence start (±3 frames) ≥60%; 2–3 sentences per main frame; cuts/segments 12–20 (data type ≤24)
- Shot durations: host 3–6s; B-roll 1.5–3s; cards 1.5–4s; screen recording 5–10s (with camera moves/annotations in between)
- Wide shots return every 15–20s; longest face-less segment ≤10s; punch-in ≤2/min; dissolves ≤2/min
- Text appears within −2 to +4 frames of keyword start, dwells ≥40 frames; ≤4 text blocks on screen
- Motion durations fall into 0/6/12 (18) frame tiers; camera move magnitude ≤1.12, applies only to content layer; all static assets have slow push
- Subtitles share one style throughout, fixed position; ≤3 accent colors; use only two backgrounds
- No original creator's sentences, catchphrases, slogans, logos, avatar, room decoration, signature titles or endings (forbidden.md)
- Content is the user's own topic and materials; example data marked 'example'; material gaps listed
- Path B: lint 15/15 PASS; frame samples have no red placeholder backgrounds; hostAudio is set (otherwise silent)
- Final version: loudness -16 LUFS (voice+SFX, peak < -1 dBFS); video/audio duration match (±0.05s); OCR on frames every 1.5s strictly checks for zero Chinese characters;
assets.bgmnot set; final file copied to desktop, size and duration recorded in delivery notes
Forbidden Zones (see references/forbidden.md for details)
Account end cards and mascots; original creator's slogans/greetings/catchphrases/fixed titles and transition sentences; original creator's avatar and studio (clothing, neon room, light-up signs, study/sofa); their 3D cartoon characters; flag texture corner badges; flame transitions; voice-over ads; variety show gags (VHS, gag cards, meme images); original creator's materials and data. Only the visual motifs can be reused (dark grid, fluorescent green labels, rounded pills, circular PIP, etc.); the main color can be swapped for your own.
Known Limitations (be honest with the user)
- Sample: 13 episodes (Creator A 9, Creator B 4), all at 540P, 2x speed screen recordings; entries <0.13s are recorded as hard cuts; easing/spring are mostly estimates; original screen recordings have no audio, music and sound effects are entirely inferred.
- Remotion not implemented (P2): charts (pie/bar/line/bubble/3D timeline/flip cards), clip_full full-screen end card, ClosingCard, BrushWord, TitleCard, Badge chapter corner badge, sticker_words/name_tag/checklist text stickers, background replacement, theme switching (
meta.themeis not read, PIP purple ring does not follow theme). Using them will result in red placeholder backgrounds or silent omission—workarounds in remotion-pipeline.md §4. - No speech-to-text/word-level alignment tool: No whisper-class tools installed locally; word-level timestamps in Round 0 currently rely on SRT from the avatar tool / user's Jianying subtitles / word count estimation (to be built, see Round 0).
- No automatic planner: Timeline is currently written manually by Claude or generated via the project builder (based on word count evenly divided by time); after integrating real avatar data, real word-level timestamps must be used to re-layout (avatar tool not yet determined; step 2 pipeline not tested). Chinese forced alignment errors not validated.
- Font differences: Narrow fonts (ZCOOL QingKe HuangYou) are heavier; number fonts (Barlow Condensed) are wider; brush fonts require license self-check. Fonts are loaded via Google Fonts online.
- Jianying path: Menu names, font sizes, and other values may vary by version; confirm before instructing the user.
Asset Preparation (advanced motion effects)
See video-asset-prep/SKILL.md for adding fx motion blocks to voice-over videos, creating full motion effect promo videos, and deconstructing new reference motion videos (rules / block catalog / deconstruction methods).