按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。
Review loop
You can't watch the video, but you can look at frames. Never report a video as done without looking at contact sheets of the current render.
Loop
npm run draft— half-resolution render toout/draft.mp4(fast).npm run sheet— one frame per timeline beat, 0.3 s after it so motion has settled, tiled 4×2 intoout/sheets/beats-N.png. Each tile is labelled with its timestamp.- Open every sheet image and go through the checklist below.
- Zoom in on anything suspicious:
npm run sheet -- --from 3 --to 5 --every 0.2to scrub a transition,npm run sheet -- 3.7 3.75 3.8for exact moments,npm run still -- out/still.png --frame=222for one full-resolution frame.
- Fix, then go back to step 1. Stop when a full pass finds nothing.
- Final:
npm run build, thennpm run sheet -- --video out/effort.mp4andnpm run wave.
Checklist
Composition
- One focal point per frame. If two things compete, one of them waits.
- Nothing collides or overlaps unintentionally, especially during transitions where an exiting and an entering element share space.
- Safe area: nothing important within ~60 px of an edge.
- Frame 0 is a real image, not black (it's the X thumbnail).
Type
- Nothing clipped by a mask, container or the frame when it shouldn't be.
- Key message readable when the sheet tile is shrunk to phone width.
- Text isn't moving while it's meant to be read.
Timing
- Each readable state holds long enough (see
motion-design§4). If a tile mid-hold shows text still animating, the hold is too short. - Scenes overlap instead of cutting to empty frames.
- Exits are faster than entrances.
Consistency
- Only palette colors from
C; the accent marks the point of the frame. - Same element looks the same in every scene it appears in.
Sound (after npm run wave)
- Transients sit on beat lines in
out/wave.png. - −14 LUFS ±1, true peak ≤ −1 dBFS.
Report
When you finish, say what you checked, what you fixed, and which sheet shows it. Don't claim a fix you haven't re-rendered and looked at.

