--- name: whiteboard description: Make hand-drawn whiteboard / doodle-explainer / sketch-note animation videos (MP4) with code — marker lines that draw themselves on, a cartoon hand holding a marker that follows the pen tip, handwritten text (Latin + CJK) written left to right, hatching and highlighter fills, arrows/circles/callouts/icons, two doodle characters (Bo the kid, Mochi the cat), camera pans across a big board, eraser wipes and page flips. Canvas 2D rendered frame by frame in headless Chrome, encoded with ffmpeg. Use when a reference video or brief calls for a whiteboard animation, VideoScribe-style explainer, doodle / sketch-note / marker-drawing / notebook-doodle look, 白板動畫 / 手繪解說 / 塗鴉解說 / 手寫字, or when the video-clone router picks the whiteboard style. --- # Whiteboard engine Every frame is a pure function of time `t`. `studio.html` loads `src/kit.js` (shared ReelMimic runtime: timeline, timing/motion helpers, camera, render hooks), `src/whiteboard.js` (the look: board, marker strokes, drawOn, handwriting, icons, hand, transitions, captions), `src/cast.js` (characters) and your scene files. `render.mjs` drives headless Chrome for contact sheets / crops / frames and ffmpeg encodes the MP4. **Read [GUIDE.md](GUIDE.md) in full before designing anything** — it has the look rules, the complete API with examples, the character system and the review checklist. Look at the model sheets: `docs/faces.jpg` (16 expressions × 2 characters), `docs/poses.jpg` (views, walk, jump, props), `docs/kit.jpg` (icons, strokes, fills, text) and `docs/demo-sheet.jpg` (the demo). ## Workflow 1. **Scaffold**: `bash .claude/skills/whiteboard/scripts/new_project.sh ` (`--keep-demo` keeps the demo hooked up). Copies the template, runs `npm install`, checks node / ffmpeg / Chrome. 2. **Plan the board.** Whiteboard films are planned as a BIG BOARD: decide where each idea is drawn in world coordinates, and let the camera travel between areas (one shot) or clear the board (eraser wipe / page flip = new shot). Write the reads per shot (see GUIDE §Timing): each drawing is a read, and the hand must not cover a read. 3. **Build** one IIFE file per shot/chapter in `src/scenes/`, ending with `shots([[t0, fn], ...])`; add its `