luckiest-co 1.0.41 → 1.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/skills/video-studio/ATTRIBUTION.md +3 -0
  5. package/skills/video-studio/CHANGELOG.md +16 -0
  6. package/skills/video-studio/LICENSE-huashu-art-motion +21 -0
  7. package/skills/video-studio/LICENSE-logo-design +21 -0
  8. package/skills/video-studio/LICENSE-mg-styles-15 +21 -0
  9. package/skills/video-studio/SKILL.md +16 -10
  10. package/skills/video-studio/references/interview.md +39 -2
  11. package/skills/video-studio/references/step-2b-storyboard.md +6 -0
  12. package/skills/video-studio/references/step-3-compose.md +13 -0
  13. package/skills/video-studio/references/step-4-deliver.md +5 -0
  14. package/skills/video-studio/references/storyboard.md +1 -0
  15. package/skills/video-studio/references/styles/3d-render.md +39 -0
  16. package/skills/video-studio/references/styles/anime-light.md +55 -0
  17. package/skills/video-studio/references/styles/aurora-glass.md +40 -0
  18. package/skills/video-studio/references/styles/bauhaus.md +52 -0
  19. package/skills/video-studio/references/styles/cel-boil.md +41 -0
  20. package/skills/video-studio/references/styles/chiaroscuro.md +53 -0
  21. package/skills/video-studio/references/styles/collage.md +46 -0
  22. package/skills/video-studio/references/styles/comic-pop.md +49 -0
  23. package/skills/video-studio/references/styles/constructivist.md +54 -0
  24. package/skills/video-studio/references/styles/cubist.md +49 -0
  25. package/skills/video-studio/references/styles/cut-paper.md +57 -0
  26. package/skills/video-studio/references/styles/era-styles.md +29 -0
  27. package/skills/video-studio/references/styles/finance-chart.md +60 -0
  28. package/skills/video-studio/references/styles/flat-vector.md +41 -0
  29. package/skills/video-studio/references/styles/grain-flat-illustration.md +48 -0
  30. package/skills/video-studio/references/styles/hud.md +41 -0
  31. package/skills/video-studio/references/styles/impressionist.md +48 -0
  32. package/skills/video-studio/references/styles/ink-wash.md +49 -0
  33. package/skills/video-studio/references/styles/isometric.md +40 -0
  34. package/skills/video-studio/references/styles/keynote-ui.md +59 -0
  35. package/skills/video-studio/references/styles/kinetic-type.md +58 -0
  36. package/skills/video-studio/references/styles/line-art.md +47 -0
  37. package/skills/video-studio/references/styles/liquid.md +46 -0
  38. package/skills/video-studio/references/styles/math-explainer.md +58 -0
  39. package/skills/video-studio/references/styles/morph.md +45 -0
  40. package/skills/video-studio/references/styles/mosaic.md +52 -0
  41. package/skills/video-studio/references/styles/newsroom-collage.md +60 -0
  42. package/skills/video-studio/references/styles/pixel.md +46 -0
  43. package/skills/video-studio/references/styles/pointillist.md +49 -0
  44. package/skills/video-studio/references/styles/presenter-explainer.md +57 -0
  45. package/skills/video-studio/references/styles/retro-cgi.md +52 -0
  46. package/skills/video-studio/references/styles/science-explainer.md +59 -0
  47. package/skills/video-studio/references/styles/sticker-explainer.md +40 -0
  48. package/skills/video-studio/references/styles/storytime.md +60 -0
  49. package/skills/video-studio/references/styles/swirl-brushwork.md +53 -0
  50. package/skills/video-studio/references/styles/synthwave.md +47 -0
  51. package/skills/video-studio/references/styles/variety-show.md +40 -0
  52. package/skills/video-studio/references/styles/watercolor-anime.md +50 -0
  53. package/skills/video-studio/references/styles/whiteboard.md +60 -0
  54. package/skills/video-studio/references/styles.md +117 -0
  55. package/skills/video-studio/scripts/qa.mjs +40 -0
  56. package/skills/video-studio/scripts/qa.test.mjs +23 -1
  57. package/skills/video-studio/scripts/storyboard.schema.json +2 -0
  58. package/skills/video-studio-art-director/ATTRIBUTION.md +3 -0
  59. package/skills/video-studio-art-director/CHANGELOG.md +14 -0
  60. package/skills/video-studio-art-director/LICENSE-logo-design +21 -0
  61. package/skills/video-studio-art-director/SKILL.md +120 -11
  62. package/skills/video-studio-art-director/references/palettes.md +22 -0
  63. package/skills/video-studio-director/CHANGELOG.md +6 -0
  64. package/skills/video-studio-director/SKILL.md +21 -5
  65. package/skills/video-studio-director/references/jury.md +63 -0
  66. package/skills/video-studio-motion/CHANGELOG.md +4 -0
  67. package/skills/video-studio-motion/SKILL.md +34 -5
@@ -0,0 +1,57 @@
1
+ # Cartoon Presenter Explainer
2
+
3
+ - id: `presenter-explainer`
4
+ - Source: huashu-art-motion `references/动画语法/y6_presenter_explainer.md` (MIT)
5
+ - Best for: business history, product mechanics and finance or tech knowledge pieces where a cartoon host walks between paper, charts and keywords and reacts emotionally. 60-180s.
6
+ - Not for: anything without character art you can generate or supply. The source ships no character sprites and no ready-made parameterized clip, so it is a grammar and a reference approach only, not a turnkey template.
7
+ - Triggers: presenter explainer, cartoon host, character explainer, business history video, finance explainer with mascot, spacex explainer, character walks across the chart, talking head cartoon, narrated cartoon guide
8
+ - Tone cell: kinetic-soft
9
+ - Clock: on twos (character frames swap, scene camera smooth)
10
+
11
+ ## Look
12
+ - A cartoon presenter built from AI-generated frames stands in a scene made of paper, charts and keywords. Code controls foot anchor, position, scale and frame swaps.
13
+ - The source gives no palette or fonts. Suggested defaults, adjust to brief: warm paper base `#F4EFE6`, ink `#1B1B1F`, one brand accent, one chart color used for the hero data. Keep chart and keyword layers quieter than the presenter.
14
+ - Generate at least two framing sets: full body and bust. Sitting and leaning poses need their own real frames. Do not enlarge a full-body frame for a reaction close-up.
15
+ - Layout is assigned in the storyboard, not fixed. Rotate between: presenter at the side explaining, full-screen number, left-right compare, presenter stepping into the chart, reaction close-up. Do not fix "person left, chart right" for the whole film.
16
+ - A top bar with the year or section, the subtitles and the segment title all read from the same clock.
17
+
18
+ ## Motion
19
+ - Pose changes are hard cuts with a slight pop-in, so different silhouettes never cross-dissolve into a ghost double.
20
+ - Mouth frames switch with the voice and stop in pauses. Walking uses full gait frames, not a slide.
21
+ - Normalize pose heights to the median height. The first cast keyframe of each segment states `x` and `s` explicitly so nothing inherits from the previous segment.
22
+ - Numbers settle on the spoken moment. While counting, do not show assertions like "over" or "+" early. The emphasis circle appears after the number settles.
23
+ - Nested transparency uses multiply (`*=`) so an outer fade survives.
24
+ - Transition between pages flips only the page. Presenter and top bar continue across pages.
25
+ - Camera: use a scene camera for pushes. Whole-frame bitmap zoom crops the character and was a known problem in the reference code.
26
+
27
+ ## Signature features (judged against these)
28
+ - Presenter moves between paper, chart and keyword layers instead of sitting in a corner.
29
+ - At least four different layouts in the film, no fixed left-right composition.
30
+ - Full-body and bust frames used for the right shot sizes.
31
+ - Pose swaps are hard cuts with a small pop, no dissolves between poses.
32
+ - Mouth movement tied to the voice and silent during pauses.
33
+ - Feet stay on a fixed anchor across frame swaps.
34
+ - Number lands on the spoken digit, circle added afterward.
35
+ - Year bar, subtitles and segment title share one time source.
36
+
37
+ ## Beat pattern (30-60s)
38
+ - 0-5s: presenter enters at the side with a hook line, full-body frame.
39
+ - 5-25s: alternate presenter-explaining and full-screen paper or chart beats. Keywords appear as the voice says them.
40
+ - 60-75%: the key figure fills the screen, then the presenter steps in or reacts on a bust close-up. Leave a pause for the beat, written into the script and the voiceover.
41
+ - Last 5-8s: presenter returns to the side with the takeaway, hold 1s with a small idle.
42
+ - Aim for a layout change every 5-8s.
43
+
44
+ ## Sound
45
+ Light upbeat bed, 90-110 BPM, ducked under the voice. Soft pops on keyword entrances, page-turn sound on page flips, a short stinger on the reaction shot.
46
+
47
+ ## Build it in HyperFrames
48
+ - Canvas 2D or HTML layers. Write a `presenterFrame(pose, t)` function that picks a frame from an image set and a `drawFigure` that places it by foot anchor.
49
+ - Cut frames from a sheet with a script that computes the foot anchor per frame.
50
+ - Page flip is the only transition. The HUD and presenter layers draw above it from the global clock.
51
+ - Run the project's text-in-frame QA from the first draft. For light backgrounds without subtitles, also run a subtitle-zone check.
52
+
53
+ ## Watch out
54
+ - Presenter covering text, or being cropped by a push-in. Check by eye.
55
+ - Reusing the same left-person right-chart composition across the film.
56
+ - Pose frames that do not match (sitting needs real sitting art).
57
+ - Using this card as a full template. Art and voice must be supplied and the source says so.
@@ -0,0 +1,52 @@
1
+ # Retro CGI Render
2
+
3
+ - id: `retro-cgi`
4
+ - Source: huashu-art-motion `15_raytrace.md` (MIT)
5
+ - Best for: nostalgia tech, intros for software, games, 3D-logo reveals, retro brand throwbacks (narrow use)
6
+ - Not for: modern minimal UI, organic subjects, handmade looks
7
+ - Triggers: 90s cgi, early ray tracing, chrome sphere, checkerboard floor, plastic render, wireframe, pov-ray, silicon graphics
8
+ - Tone cell: kinetic-sharp
9
+ - Clock: smooth 30/60 fps
10
+
11
+ ## Look
12
+ Every object looks like glossy plastic from a 1993 render.
13
+ - Walls teal `#7dbcb9 -> #64a6a6 -> #3f8285` with a radial light at the window; sky `#a24cc4 -> #df62ae -> #f5a08a -> #f8c070`; pink wireframe grid mountains (28 x 26 cells) with sawtooth snow caps.
14
+ - Ground is a perspective checkerboard computed per pixel (vanishing point (960,480), `X=(x-960)/dy`, `Z=1/dy`, tile 0.27 x 0.00029, 2x2 supersampling, fog over the nearest 140 px by 35%).
15
+ - Plastic shading helper `plastic(path, base, hx, hy, R)`: base fill, radial gradient from the highlight (white 0.55 -> 0.06 at 0.28 -> clear at 0.62 -> deep purple `rgba(10,0,30,0.42)` at the edge), `lighter` ambient bounce in the wall color, then a small hard-edged white ellipse specular (0.16R x 0.09R, alpha 0.85).
16
+ - Limbs are cylinders: gradient across the normal (dark 0.25, bright 0.5 band at 22%, dark 0.45) plus a thin white highlight line. Joints are visible balls (toy-figure feel).
17
+ - Floor reflections: mirror the object layer, alpha 0.34, drawn each object on its own layer first so many small pieces do not stack to opaque.
18
+
19
+ ## Motion
20
+ - Ring of 140 spheres spinning about a vertical axis at 7 rad/s, tilted 0.35, depth-sorted (a dark base layer first so spheres merge into a tube).
21
+ - Chrome ball: per-pixel environment map (down: checkerboard, up: pink-purple sky plus a window strip); the checker u coordinate shifts `t*4.5`; Fresnel rim brightens; diameter 104 px, under 2 ms.
22
+ - Lens flare (`lighter`): core 170 px pulsing +/-8% at 23 rad/s, 12 spikes at 1.6 rad/s, 960 px horizontal bar, five circle and hexagon ghosts along the sun-to-center line sliding `sin(5t)*0.03`.
23
+ - Glowing eyes or lights pulse +/-25% at 18 rad/s; a diagonal glass reflection slides 260 px/s.
24
+ - Transition family: green wireframe of the new image (edges cached on first frame) then scanline-fills into the rendered picture.
25
+
26
+ ## Signature features (judged against these)
27
+ - Uniform plastic shading with the same highlight logic on every object.
28
+ - Perspective checker floor with fog and mirrored reflections.
29
+ - Spinning ring/ball with visible per-sphere highlights.
30
+ - Pink wireframe terrain and a gradient sunset sky.
31
+ - Chrome sphere reflecting the scene.
32
+ - Lens flare with ghosts, rotating spikes.
33
+ - Wireframe to render transition.
34
+
35
+ ## 10-second beat seed
36
+ - 0-1.2s: wireframe resolves to rendered scene.
37
+ - 1.2-6s: ring spins, chrome ball rolls, flare glints.
38
+ - 6-7.5s (hero): camera-fixed flare sweep and title in chrome.
39
+ - 8.8-10s: hold, ring continues to spin.
40
+
41
+ ## Sound
42
+ FM synth pads and a gated snare, 100-115 BPM. Whoosh on flare, "bling" on specular glints.
43
+
44
+ ## Build it in HyperFrames
45
+ Fake it in Canvas 2D or really render in Three.js with MeshPhong materials and a 4x4 checker texture.
46
+ - The checkerboard and fog are cached (cold start about 53 ms); hot frame about 23 ms.
47
+ - Snapshot the wireframe from the first frame of the incoming scene, so that frame must be complete (no blank first frame).
48
+ - Smooth any polyline silhouettes before applying plastic shading or corners show.
49
+
50
+ ## Watch out
51
+ - Current weak spot: legs look like straight columns and the face reads like a mask. Give organic parts rounded profiles and expression.
52
+ - Narrow use: only works when the retro 3D joke is the point.
@@ -0,0 +1,59 @@
1
+ # Glowing Flat Science Explainer
2
+
3
+ - id: `science-explainer`
4
+ - Source: huashu-art-motion `references/动画语法/y1_kurzgesagt.md` (MIT)
5
+ - Best for: scale and "what is inside" topics (cell to galaxy, pixel to model), systems and mechanisms drawn as glowing particles and lines, calm popular-science narration. 45-120s.
6
+ - Not for: real people, real events, archive evidence (use a collage style). Step-by-step reasoning (use a whiteboard style). Very small budgets, because the look depends on something always alive in the frame.
7
+ - Triggers: kurzgesagt, in a nutshell, flat science animation, scale zoom, immune system explainer, cell zoom, popular science, glowing vector, optimistic nihilism, zoom into
8
+ - Tone cell: calm-soft
9
+ - Clock: smooth 30/60 fps
10
+
11
+ ## Look
12
+ - Dark era: deep base, 2-3 saturated accents, strong radial glow. Do not copy a purple-blue starfield gradient, it reads as generic AI. Use a flat deep ink or navy base and keep the rule: one dark base plus 2-3 high-saturation accents that contrast (orange against indigo, cyan against magenta).
13
+ - Reference accents from the source: cyan `#32BAEE`, orange `#F48301`, yellow `#FACC12`, glow core `#F9EF93`, magenta `#BE3A95`, highlight white `#F9FCFB`.
14
+ - Never mix eras in one scene. A bright light-grey low-saturation era is also valid for a "daytime" section. Changing sections can change the whole color temperature.
15
+ - Draw the concept as a concrete object (cell, gear, pipe, city, drop of water). A glowing ball with a few label capsules is not enough.
16
+ - No outlines. Shadow is a block of the same hue one step darker, highlight is a white ellipse or an arc. Two-tone facets: shadow band at about (10, 12)px bottom right, thin highlight edge (4, 5)px top left.
17
+ - Rounded everything. Glowing objects always carry a radial glow.
18
+ - Composition: main subject on the lower third line, sky above for stars and labels. Parallax layers: stars 0.05, far 0.12-0.3, near 0.65, subject 1.0, foreground blur 1.5 (7px blur, dark).
19
+ - Label capsules: large radius, saturated fill, bold sans.
20
+
21
+ ## Motion
22
+ - Core easings: `cubic-bezier(.75,0,.25,1)` for most moves (soft start, fast middle, soft end), and `cubic-bezier(.333,0,.667,1)` for loops. Normal action 50 frames at 60fps (0.83s), snappy 10-30 frames, pop-ins 5-10 frames.
23
+ - Pop: card reaches 90% in 0.25s, overshoots to 108% at frame 20, settles about 0.5s. Label uses back-out with overshoot 1.1 over 0.5s.
24
+ - Stagger: similar items 10-20 frames, limbs 3-4 frames, a pause of 20 frames between actions. Title letters 45ms apart.
25
+ - Blink: closed 5 frames, open 10, irregular gaps, eyes never shrink to zero.
26
+ - Ambient layer (stars, particles, glow) can keep moving. Subject and labels hold still once settled. Cut or change state at least once per narration sentence.
27
+ - Camera: zoom is the main verb. Use log interpolation so every frame scales by the same factor. Hold 0.3s and light up the thing you will enter, then push. Pull back out for reveals.
28
+
29
+ ## Signature features (judged against these)
30
+ - A concrete visual metaphor object, not a generic orb.
31
+ - Dark flat base with 2-3 glowing accents, no outlines.
32
+ - Two-tone facets on every shape, same-hue darker shadows.
33
+ - Parallax layers with depth blur in the foreground.
34
+ - Scale transitions use log zoom and redraw vectors at each scale.
35
+ - Subject is still after landing while the background stays alive.
36
+ - One state change per narration sentence.
37
+ - Labels: thin white leader line, then text typed in, about 40 characters per second, then erased after about 3s.
38
+
39
+ ## Beat pattern (30-60s)
40
+ - 0-5s: world establishes with ambient motion, title letters rise.
41
+ - Every 5-7s: a new visual unit (pop a label, morph, transition). Hard cuts land 0-0.2s before a sentence starts.
42
+ - 60-75%: scale transition. Light the target for 0.3s, push in 0.45-1.4s until its color fills the screen, resolve into the new world.
43
+ - Optional gag: a mascot appears for one joke beat.
44
+ - Last 6-8s: pull back (1.45s, ease in out) to a calm wide frame, ambient motion only, hold 1s.
45
+
46
+ ## Sound
47
+ Warm ambient orchestral or soft synth pad, 60-90 BPM, composed after the picture. Gentle chime on pops, deep swell on scale transitions, soft whoosh on pull-backs. Voice is calm, about 168 words per minute.
48
+
49
+ ## Build it in HyperFrames
50
+ - Canvas 2D or SVG layers, each with a depth value. Position scales linearly by depth, zoom by z^depth.
51
+ - The camera is a function of time only. During a transition window the previous scene keeps drawing with its own zoom, so vectors are redrawn and never blown up as a bitmap.
52
+ - Glow is a radial gradient, not a filter. Stars use per-star phase with seeded random.
53
+ - Avoid expo-out for the scale transition because the first frame jumps most of the scale.
54
+
55
+ ## Watch out
56
+ - Everything breathing and drifting at once, with a constant slow push to fill time.
57
+ - Linear zoom, or scaling a screenshot 20x.
58
+ - Bright mixed colors, black outlines, or mid-tone backgrounds drift into children's picture book style.
59
+ - The source built this over very long production times. A cheap version looks like a slide deck.
@@ -0,0 +1,40 @@
1
+ # Sticker Knowledge Explainer
2
+
3
+ - id: `sticker-explainer`
4
+ - Source: mg-styles-15 `prompts/19-paperclip.md` (MIT, Vincentwei1021). Note: this is a bold-outline sticker-photo explainer on a huge camera-moved canvas, not paper cutout or stop motion.
5
+ - Best for: hard-core science explainers, finance and knowledge channels, corporate documentary explainers, data-rich narration videos
6
+ - Not for: emotional or abstract pieces, playful cartoons, fast hype edits
7
+ - Triggers: sticker, knowledge video, science explainer, infographic video, big canvas, camera pan and zoom, photo cutouts with white outline, periodic table, PaperClip, Lin Chao, explainer channel
8
+ - Tone cell: calm-sharp
9
+ - Clock: smooth 30 fps
10
+
11
+ ## Look
12
+ Calm blue-grey and off-white canvas: #E9EEF2 with slate, 2-3 colors plus one accent such as #FF5A36. Photos cut out and given an 8-12px (10px) white outline with a soft shadow, so differing sources look unified. Flat icons and exact charts. Equal-weight sans typography, strict alignment, leader-line labels. Huge canvas (for example 6000x3000) viewed through a camera.
13
+
14
+ ## Motion
15
+ One continuous camera path of long ease curves, pan and zoom, linking information points. Every sentence introduces a new visual element. Chart motion: bars grow to scale, numbers count up with a ticking sound, map routes draw on with stroke growth. Exploded-parts stickers with leader lines. Periodic-table tiles light up in sequence. Pull out to a bold typographic title card (heavy sans, huge number, small caption).
16
+
17
+ ## Signature features (judged against these)
18
+ - Photo stickers with 8-12px white outline and soft shadow.
19
+ - Cool, restrained palette: 2-3 colors plus one accent.
20
+ - One continuous camera move across a big canvas with long eases.
21
+ - Charts exact: bars to scale, numbers consistent with the copy.
22
+ - Count-up numbers and path draw-on.
23
+ - A new visual element for every narrated beat.
24
+ - Title card with huge number in heavy sans.
25
+
26
+ ## 10-second beat seed
27
+ - 0-1.5s: phone sticker lands, camera already moving.
28
+ - 1.5-4s: exploded parts with leader-line labels.
29
+ - 4-6.5s: periodic-table tiles light up.
30
+ - 6.5-8s (hero at 60-75%): bar chart grows, count-up to "70+", map routes draw.
31
+ - 8-10s: pull out to the typographic title card, hold.
32
+
33
+ ## Sound
34
+ Clean tech-explainer bed, UI clicks, ticking during count-up, soft whoosh on camera moves.
35
+
36
+ ## Build it in HyperFrames
37
+ One wide stage div with a camera transform (translate and scale) animated by GSAP long eases, computed from a keyframed path. Stickers via CC0 or public-domain PNGs with the outline made by an SVG filter (feMorphology dilate plus flood white) and drop shadow. Charts and map routes in SVG with dashoffset. Count-up from a pure function of t.
38
+
39
+ ## Watch out
40
+ Charts that do not match the narration kill credibility. Source licences: record them. Too many colors loses the serious feel. Keep camera moves long and smooth, not jumpy.
@@ -0,0 +1,60 @@
1
+ # Storytime Character Cuts
2
+
3
+ - id: `storytime`
4
+ - Source: huashu-art-motion `references/动画语法/y4_storytime.md` (MIT)
5
+ - Best for: first-person stories, fails, "the first time I..." anecdotes with a setup, a pause and a punchline. A recurring cartoon avatar carries the voiceover. 60-600s, weekly cadence.
6
+ - Not for: dense tutorials or data (viewers watch the character and forget numbers), content with no "I" and no stance, voiceover that is not funny or has no pauses.
7
+ - Triggers: theodd1sout, jaiden animations, domics, storytime animation, story time, youtube storytime, cartoon avatar, stick figure story, reaction face, smash cut joke, animated anecdote
8
+ - Tone cell: kinetic-soft
9
+ - Clock: on twos (character at 24 fps stepping, 12 mouth changes per second, camera smooth)
10
+
11
+ ## Look
12
+ - Medium shot (waist up, head 25-35% of frame height), character centered or to one side, the other side holds the thing being talked about (computer, person, object).
13
+ - Background says only where: 3-5 big flat shapes, or plain white or color. It is always lighter, less saturated, with thinner lines than the character.
14
+ - Reaction shot: remove the room, face fills the frame (head radius about one third of frame height), solid cool void with vignette.
15
+ - Gag shot often flips to a very wide shot where the character is tiny.
16
+ - Palette (demo): skin `#FFE2CC`, white hat and shirt `#FFFFFF` with band `#E4E4E8`, shorts `#CDBB97`, character line `#1B1B1F`, wall `#DCE9EC`, table `#E2C29B`, floor `#E8DCC8`, background line `#5B6470` at 3px, void `#3D405B`, mouth `#6E2430`, tongue `#F07B7B`, blush `rgba(255,140,120,.35)`.
17
+ - Character line = head radius x 0.05 (min 4px), so 8px at medium, 12px at close, 6px wide. Character line is at least 2x background line.
18
+ - Shapes: all round and blunt. Head slightly flat circle, bean body, head about 58% of height, tube arms with no elbows or fingers, circle hands. Eyes are dots inside glasses, expression comes mostly from eyebrows. Mouth set: smile, flat, wave, half, full.
19
+ - The source says code-drawn characters read as AI. Use your own character frame library (generated frames per pose) when the final matters.
20
+
21
+ ## Motion
22
+ - Pose-to-pose. Switch pose in 0.1s (expo-out, 2-3 frames at 24 fps), then hold. Body squashes 7% on the switch with a spring settle (about 0.35s).
23
+ - Seventy percent of frames in a real example are exactly still. Hold lengths median 0.40s, moves median 100ms. A second reference runs on twos continuously at 12 drawings per second with longer shots (average 5.7s versus 2.4s). Pick one rhythm.
24
+ - Mouth follows the voice envelope, changed at most every 1/12 s into 3 shapes (closed under 0.06, half under 0.22, open above).
25
+ - Small life: breathing +-1.2% on a 1.6s cycle, blink every 2.4-3.6s (closed 2 frames), eyes shift 0.09R toward what is mentioned, head dips 0.015R per mouth step.
26
+ - Props and symbols are the things that pop: back-out with 15-30% overshoot. The question mark pops in 0.26s at 30% overshoot. A big number slams with 23% overshoot.
27
+ - Transitions: hard cut (default), smash cut to reaction (starts at 1.22x, springs to 1, 55% white flash for 2 frames, low thump), whip pan toward what he looks at (0.26s expo in-out with 16-sample blur), jump-in to about 2x on the same set, over-the-shoulder shot with a foreground head and a cool rim light on the screen side.
28
+
29
+ ## Signature features (judged against these)
30
+ - One sentence is about one shot, cut on the breath between sentences.
31
+ - Pose switch about 0.1s then a real hold. No constant floating.
32
+ - Reaction shot sits in a silence of 0.8-1.5s after the outrageous line.
33
+ - Background is calmer than the character (lighter, thinner line).
34
+ - Character line is thicker than background line by 2x or more.
35
+ - Mouth changes at most 12 times per second.
36
+ - After the punchline the picture holds at least 0.9s, with the sound tail finishing.
37
+ - Only on-screen text and key numbers are shown, usually no burned subtitles for the native platform.
38
+
39
+ ## Beat pattern (30-60s)
40
+ - 0-2s: character is already in place and talking from the first frame, medium shot.
41
+ - 2-4.5s: whip pan or cut to the thing he sees, number slams in on the spoken syllable with a thump and 9 Hz shake for 0.3s.
42
+ - Next: smash cut to the reaction close-up, 1.3s silence with one tiny detail (sweat bead, slow blink, eyebrow drop).
43
+ - 60-75%: hard cut to a wide shot for the contrast gag, then jump-in to 1.9x on the punchline.
44
+ - Last 1.5s: shrug or question mark pops, then hold at least 0.9s.
45
+ - A 60s piece repeats this 3-5 times. Average shot in the demo was 1.75s.
46
+
47
+ ## Sound
48
+ Voiceover first, music sparse or none. Effect set: whoosh on pans, keyboard clicks, low "dun" on smash cut, thump on numbers, crickets in the silence, small pip and boing on symbols.
49
+
50
+ ## Build it in HyperFrames
51
+ - Draw the room once as a large world canvas (static parts cached) and change only the camera between wide, medium and close shots, so cuts match. World must be larger than the farthest camera move or black edges appear.
52
+ - Quantize character animation with `step(t, 24)`, mouth with `step(t, 12)`. Camera stays at full frame rate.
53
+ - Export the voice RMS envelope as a 60 fps array and read it in the render, so changing the voice track updates the mouth.
54
+ - Smash zoom must clamp at 1 or above to avoid exposing the edge.
55
+
56
+ ## Watch out
57
+ - Animating everything. The style lives in cut and hold.
58
+ - Detailed backgrounds that pull the eye off the face.
59
+ - Moving on to the next sentence immediately after the joke.
60
+ - A whip pan that cuts mid-sentence. Cut and subtitle change happen on the same frame in the gap.
@@ -0,0 +1,53 @@
1
+ # Swirl Brushwork (post-impressionist)
2
+
3
+ - id: `swirl-brushwork`
4
+ - Source: huashu-art-motion `09_postimp.md` (MIT)
5
+ - Best for: emotional launch films, night scenes, brand stories that want a hand-painted, vibrating look
6
+ - Not for: dense data screens, small UI text, anything needing crisp edges
7
+ - Triggers: van gogh, starry night, swirl, post-impressionist, thick paint, impasto, painterly night sky, oil painting video
8
+ - Tone cell: kinetic-soft
9
+ - Clock: on twos (brush seeds change at 8 fps, shapes stay fixed)
10
+
11
+ ## Look
12
+ Palette by region, 6-8 mixed hues each, never one flat blue.
13
+ - Wall/background blues: `#7f9be6 #5f7fd8 #a7bbf2 #6c6fd2 #8ad0e6 #c3cbf6 #4f6cc8 #9a8fe0`
14
+ - Sky: `#22339a #2f4fb8 #5c86dc #8fb6ee #1b2a78 #3c6bd0`
15
+ - Ground (warm contrast): `#c0573c #a8453a #d7774a #8e3b30 #5f8f6a #c96a52 #e08a5c`
16
+ - Outline: deep blue, 4.5px, mixed 40-45% into the stroke color.
17
+ Brushwork is directional: strokes follow a flow field, so every region has its own grain. Compose for the subject, not a fixed room; keep the sky or background as the swirl carrier.
18
+
19
+ ## Motion
20
+ - Strokes re-seed at 8 fps for a living surface, but stroke positions stay anchored (see Watch out).
21
+ - Swirl field rotates slowly (about 0.3 rad/s) around 2-3 vortex centers.
22
+ - Light halos expand as dashed rings; flame-like shapes sway along the direction field.
23
+ - Transition family ("how you enter it"): the old frame is pulled into the swirl, new image resolves out of spiral strokes.
24
+
25
+ ## Signature features (judged against these)
26
+ - Three separate stroke passes: vertical long strokes for walls (cell 14, len 64, w 8), perspective-aligned strokes for floors (cell 12, len 46, w 8), short strokes for everything else (cell 10, len 22, w 6.5).
27
+ - Per-region palettes of 6-8 hues, mixed 30-45% with the base color.
28
+ - Outline pass at 0.8-0.9 opacity in dark blue.
29
+ - Small props rendered in their own small-stroke layer, not the big-brush pass.
30
+ - Visible spiral strokes in the sky that rotate.
31
+ - Subjects get a fine-stroke pass inside their silhouette, then missing outline lines are patched back in.
32
+ - Glows read as concentric rings, not soft gradients.
33
+
34
+ ## 10-second beat seed
35
+ - 0-1.2s: dark swirling sky fills frame, one bright focal glow.
36
+ - 1.2-6s: subject and props paint in; halos pulse outward.
37
+ - 6-7.5s (hero): vortex tightens around the focal point, text lands on a calm patch.
38
+ - 8.8-10s: hold the end frame, rings keep expanding slowly.
39
+
40
+ ## Sound
41
+ Sparse piano or strings, 70-85 BPM, minor-to-major lift. Soft swell on the vortex tighten, a single chime on the halo ring.
42
+
43
+ ## Build it in HyperFrames
44
+ Canvas 2D flow-field strokes, one `strokes(region, params)` function per pass.
45
+ - Flow field angle from seeded noise plus region rules (wall vertical, floor toward a vanishing point, sky along nearest vortex tangent).
46
+ - Draw a flat base layer first, then strokes over it with region masks; small props get their own layer composited with source-atop.
47
+ - Seed strokes by cell index, not by a running random stream, so changing colors never reshuffles later strokes.
48
+
49
+ ## Watch out
50
+ - The heaviest style in the set (about 110 ms per frame in the source). Cache static regions, budget for it.
51
+ - Running one parameter set over the whole image turns into carpet. Always split into three passes.
52
+ - Small objects get shredded by big strokes. Isolate them in a prop layer.
53
+ - Color jitter alone gives "one blue with noise". The look comes from a dozen hues per region.
@@ -0,0 +1,47 @@
1
+ # Synthwave VHS Retro
2
+
3
+ - id: `synthwave`
4
+ - Source: mg-styles-15 `prompts/10-synthwave.md` (MIT, Vincentwei1021)
5
+ - Best for: retro title sequences, music videos, trend brand films, gaming and nostalgia content, Y2K chrome revivals
6
+ - Not for: clean corporate, calm editorial, medical or finance
7
+ - Triggers: synthwave, outrun, 80s, retro, neon, VHS, vaporwave, Y2K, chrome text, scanlines, grid horizon, retrowave
8
+ - Tone cell: kinetic-sharp
9
+ - Clock: smooth 30 fps, with deliberate 15 fps stutters in key moments
10
+
11
+ ## Look
12
+ Starry deep purple sky gradient. Striped retro sun with horizontal band cut-outs, magenta to orange to yellow. Wireframe mountains, palm silhouettes. Neon magenta and cyan perspective grid. Chrome title with a multi-stop metallic gradient and bevel highlight. Pink neon script word. Double glow: tight about 4px and wide about 30px. VHS pass: RGB split (red and blue offset 1-2px), scanlines (2px spacing, 10% black), 4:3 rounded mask optional.
13
+
14
+ ## Motion
15
+ Camera flies low over the grid, grid scrolls toward the camera in a looping vertical offset, sun rises. Chrome title SLAMS in with a lens flare and a star glint sweeping across. Neon script writes on like a tube with flicker. Glitch burst 1-2 times a second (random but seeded), occasional 2-frame rewind, stutter to 15 fps for tape feel. Y2K variant motion: pop-up windows, cursor click, window drag.
16
+
17
+ ## Signature features (judged against these)
18
+ - Perspective grid rushing to the horizon with a striped sun.
19
+ - Double-layer neon glow (tight plus wide).
20
+ - Chrome text with bevel and glint sweep.
21
+ - VHS chain: RGB split, scanlines, wavy jitter, glitch 1-2 times per second.
22
+ - Opening with a tracking-noise plus PLAY OSD.
23
+ - Neon script writing on with flicker.
24
+ - Deliberate frame stutter in key sections.
25
+
26
+ ## 10-second beat seed
27
+ - 0-1s: tracking noise, PLAY OSD.
28
+ - 1-4s: low flight over the grid, sun rises.
29
+ - 4-6s (hero at 60%): chrome title slams in, flare, glint.
30
+ - 6-7.5s: neon script writes on, flicker.
31
+ - 7.5-10s: sustained ride with chroma bleed, end on the hero frame.
32
+
33
+ ## Sound
34
+ Synthwave: gated-reverb snare, arpeggiated saw bass, lush pads, big chord and crash on the title slam.
35
+
36
+ ## Build it in HyperFrames
37
+ WebGL fragment shader for sky, sun bands, grid (grid lines from fract of (z + t*speed) in perspective space) and mountain wireframes. Chrome text on a 2D canvas with a gradient plus bevel then uploaded as a texture. Glow via two blur passes. VHS pass as a post shader: channel offset, scanline multiply, per-second seeded glitch rows.
38
+
39
+ ## Watch out
40
+ Banding in the sky gradient: add noise. Too much glitch kills legibility of the title. Chrome without strong contrast steps looks like plain grey. Keep glitch timing seeded.
41
+
42
+ ## Vaporwave variant (huashu-art-motion `26_vaporwave`)
43
+ - Wall gradient `#0d0322` to `#4a0f6a`; magenta `#ff4fd8`, hot pink `#ff2f8f`, cyan `#3ff6ff`, sun yellow `#ffd84a`, orange `#ff8a3a`.
44
+ - Neon tube: stroke with a wide glow, then a 2-3px near-white core. Build sign lettering from polylines, no font. Flicker = seeded hash of floor(30t) under 0.07; one letter drops out with a dim purple off state.
45
+ - Sunset sliced by 7 horizontal slits (width `2 + q^2 * 16`) rising 0.9/s; floor grid lines at `y = 600 + 520/d`, `d = k + 1 - phase`, `phase = 1.3t mod 1`.
46
+ - VHS post pass: RGB split with a 3 + 1.5 sin(7t) px offset, a 70px tracking-noise band, scanlines, an on-screen "PLAY" with a drawn triangle. Transition in: VHS tear with vertical roll, 0.30s.
47
+ - Watch out: glow shows at joints if you outline each part; stroke the silhouette instead. Draw kana and symbols as paths, they fall back silently.
@@ -0,0 +1,40 @@
1
+ # Variety Show Kinetic Captions
2
+
3
+ - id: `variety-show`
4
+ - Source: mg-styles-15 `prompts/18-hanazi.md` (MIT, Vincentwei1021)
5
+ - Best for: 9:16 vlogs, pet and lifestyle shorts, interview and reaction edits, comedic re-edits, caption-heavy social video
6
+ - Not for: premium calm brand films, data stories, serious tone
7
+ - Triggers: variety show, hanazi, Chinese variety captions, kinetic captions, sticker text, fancy text, reaction text, vlog captions, burst box, outlined text, TikTok captions, Douyin, bilibili
8
+ - Tone cell: kinetic-soft
9
+ - Clock: smooth 30 fps (vertical 1080x1920)
10
+
11
+ ## Look
12
+ Vertical 9:16 over a footage-feel base (CC0 or public-domain photos with Ken Burns, subtle handheld shake, snap punch-in zooms on key moments). Captions in a rounded heavy font, three layers: fill color (gradient allowed), thick white stroke, colored outer stroke or drop shadow. High-saturation pink, yellow, cyan with white strokes. Hand-drawn decoration symbols: burst boxes with speed lines and radial flash, sweat drops, sparkles, question marks, stamps. Keep captions in the safe zone away from UI overlays.
13
+
14
+ ## Motion
15
+ Pop scale 0 to 1.15 to 1.0 in about 8 frames. Per-character bounce with 2-frame stagger. Slight random rotation. Gentle wiggle while the caption holds. Captions appear 2-3 frames after the audio or visual moment. Emotion matching: complaint in slanted handwriting, surprise in a radial burst box, awkward with sweat drops. Punch-in zoom and handheld shake on the base layer for the "moment" feel.
16
+
17
+ ## Signature features (judged against these)
18
+ - Three-layer outlined text: fill, thick white stroke, colored outer stroke or shadow.
19
+ - Pop overshoot 0 to 1.15 to 1.0 in about 8 frames.
20
+ - Per-character bounce with 2-frame stagger.
21
+ - Caption timed 2-3 frames after the sound hit.
22
+ - Hand-drawn decorations (burst box, sweat, sparkle, stamp).
23
+ - Wiggle on long holds.
24
+ - Base layer has Ken Burns, shake and punch-in zooms.
25
+
26
+ ## 10-second beat seed
27
+ - 0-1s: base image punch-in plus the title caption pops.
28
+ - 1-4s: question marks bounce, aside caption in small type.
29
+ - 4-7s (hero at 60-75%): surprise caption inside a radial burst box with speed lines and flash.
30
+ - 7-9s: sparkle caption plus a stamp.
31
+ - 9-10s: final title held with wiggle.
32
+
33
+ ## Sound
34
+ Bouncy variety bed (pizzicato, bass, claps) with boing, pop, ding, slide whistle, and a record scratch on the question marks.
35
+
36
+ ## Build it in HyperFrames
37
+ DOM or SVG text components. Multi-layer stroke via stacked copies with SVG stroke and paint-order: stroke fill, or multiple text-shadow rings. Spring pop with a closed-form damped oscillator of (t minus start). Per-character spans with index times 2 frames of delay. Burst box and decorations are SVG paths. Base layer shake from seeded noise of t.
38
+
39
+ ## Watch out
40
+ Fonts: use OFL rounded heavy fonts with full CJK coverage when needed (for example Zen Maru Gothic or a similar OFL face). Do not put captions under platform UI. Text that appears before the audio hit feels wrong. Avoid trademarked mascots.
@@ -0,0 +1,50 @@
1
+ # Watercolor Anime Background
2
+
3
+ - id: `watercolor-anime`
4
+ - Source: huashu-art-motion `25_ghibli.md` (MIT)
5
+ - Best for: storybook explainers, children's content, wellness, cozy lifestyle, nature, slow narrative openers
6
+ - Not for: hard-sell tech, data-dense frames, dark moody brands
7
+ - Triggers: ghibli, miyazaki, hand-painted watercolor, anime background, storybook, cozy, gouache, wind in curtains
8
+ - Tone cell: calm-soft
9
+ - Clock: smooth 30/60 fps
10
+
11
+ ## Look
12
+ Backgrounds are watercolor washes: transparent layers stacked with multiply, each with a slightly darker edge line where pigment settles. Rooms and skies are bright, never muddy. Wall wash runs from `#fbf3e0` near the light source to `#dcc49a` at corners, with about 28 warm yellow, pink, blue-gray and pale green blooms. Paper grain multiplies on top at 0.3. Characters use two-tone cel shading with a warm brown line (`#4a3428`, softened to `#6a4a38`, width 2.4). Clouds are opaque white puffs with a blue-gray underside.
13
+
14
+ ## Motion
15
+ - Soft cloth billows: hem push `q^2*(60+150*gust)`, `gust = 0.55+0.45*sin(5.4t+phase)`, plus small ripples `sin(7t+6q)`.
16
+ - Grass wind arrives in waves: `wind = 0.5+0.5*sin(3.1t-0.018x)`, so you see a gust cross the field. Around 360 blades.
17
+ - Clouds drift 22-30 px/s, tree canopy sways, 30+ dappled light spots flicker `sin(5t+1.7i)`.
18
+ - Hair, ribbons and flower heads move with the same wind.
19
+ - Transition family: color blooms open on wet paper like spreading water (5 blooms, radius `q*1400*k`, soft bright halo ahead, brown watermark edge).
20
+
21
+ ## Signature features (judged against these)
22
+ - Washes with visible darker settled edges.
23
+ - Bright, warm, airy palette; no moldy parchment look.
24
+ - Cel shading with one crescent shadow, not full gradients.
25
+ - Wind that travels across the frame in waves.
26
+ - Characters carry paper grain and color blooms too, not flat vector fill.
27
+ - Dappled light patches that move.
28
+ - Large soft shapes deformed, never straight-edged rectangles.
29
+
30
+ ## 10-second beat seed
31
+ - 0-1.2s: wind lifts cloth, camera on a bright painted scene.
32
+ - 1.2-6s: grass wave, cloud drift, subject action.
33
+ - 6-7.5s (hero): a strong gust and light patch cross the subject.
34
+ - 8.8-10s: hold with grass and cloth still moving.
35
+
36
+ ## Sound
37
+ Light piano and strings, 70-90 BPM, wind and birdsong bed. Soft swell on the gust.
38
+
39
+ ## Build it in HyperFrames
40
+ Canvas 2D, heavy first-frame cache.
41
+ - `deform(points, depth, amp)`: midpoint displacement, each round amp x0.6. `wash()` fills 3-5 layers with multiply at low alpha plus a 1.6 px same-color edge.
42
+ - Typical wash: large wall layers 5, alpha 0.4, amp 12; blooms layers 3, alpha 0.045, amp 40.
43
+ - Cel function: fill shadow color, then clip and fill base color shifted toward the light; leaves a crescent of shadow.
44
+ - Paint characters offscreen, add a grain and bloom layer, mask it with `destination-in`, composite with multiply.
45
+
46
+ ## Watch out
47
+ - Current weak spot: characters look weaker than backgrounds (flat vector). Give them the same wash texture.
48
+ - Blooms at alpha 0.07 x4 layers with strong grain go moldy. Use 0.045 x3.
49
+ - Rectangular wash patches leave a hard seam. Use heavily deformed polygons (amp 60).
50
+ - First frame takes about 600 ms because of the cache.
@@ -0,0 +1,60 @@
1
+ # Hand-Drawn Whiteboard Explainer
2
+
3
+ - id: `whiteboard`
4
+ - Source: huashu-art-motion `references/动画语法/y3_whiteboard.md` (MIT)
5
+ - Best for: arguments, cause-and-effect chains, historical threads, step-by-step reasoning with a steady voiceover. Ideas that can be drawn as a map. 45-180s.
6
+ - Not for: precise data charts, complex spatial action with depth, high-emotion stories, any claim that it improves learning (the source cites a study that found no gain, its value is attention and company).
7
+ - Triggers: rsa animate, minute physics, whiteboard animation, hand-drawn explainer, doodle video, videoscribe, doodly, sketch explainer, marker drawing, draw my life
8
+ - Tone cell: calm-soft
9
+ - Clock: smooth 30/60 fps (pen and strokes follow length, camera is smooth)
10
+
11
+ ## Look
12
+ - Choose one mode and do not mix. Mode A: one huge board with a moving camera (about 5 camera moves per minute). Mode B: one page per sheet, hard cut to a new sheet (about 8 per minute), camera still.
13
+ - Mode A colors: board `#FBFBFB`, line `#0A0503`, one accent orange (text `#EB701F`, fill `#F3742D`, hatch tone about `#E9A67C`). Orange is about 22% of ink pixels and only for key words and hatching. The demo used `#EF7226` and a 22% orange wash on a cat body.
14
+ - Mode B colors: pinkish paper `#E7DBE1`, pale yellow pencil `#EDE6A2`, pale blue `#B5CBE8`, thicker lines (about 0.8% of frame height).
15
+ - Line width about 0.65% of frame height (6-7px at 1080p). Hatching about 0.3%. Title text about 5.5% of frame height.
16
+ - Plan the final full board first, then draw backwards. Each view holds 3-6 picture and text groups.
17
+ - Text: all-caps hand lettering in the source. For Chinese, a handwriting kai face. For English, a marker print face.
18
+ - Hand: right hand holding a black marker enters from the lower right, forearm angled, covering 15-25% of the frame, leaves entirely when not drawing. Keep object shapes safe (avoid shapes that read as rude silhouettes).
19
+ - Line type is fixed from the first stroke: solid = happened, dashed = planned, dotted = cross-reference. Nothing fades. Things are drawn or erased.
20
+
21
+ ## Motion
22
+ - Writing speed: median 16 characters per second for body text, about 7.5 for the opening title, close to the speaking rate (about 13). Small icons 0.5-1s, a head or portrait about 2s. Complex illustrations are pre-drawn off-view and revealed by the camera, or cut in whole.
23
+ - Stroke time = length / pen speed (demo 2600 world px per second, about 2x real, which is too fast for a real piece). Min 0.04s per stroke, 0.02s lift gap. Sine in-out per stroke.
24
+ - Between strokes under 0.25s the pen slides in an arc (lift 30px). Longer gaps: hand exits 0.35s cubic-in, re-enters 0.3s before the next stroke, cubic-out.
25
+ - Characters with no stroke order reveal with 3 zigzag rows of a mask while the pen follows.
26
+ - Some accent words pop in without the hand: back-out overshoot 2.2 over 0.3s.
27
+ - Camera: sine in-out, 1.2-2.4s for a normal pan. A pan moves only about 0.23 of frame width so 75% of the previous view stays visible. For far jumps use a 0.8s whip pan (cubic in-out) with 9-sample motion blur only during that move. Ending: pull back to the whole board (0.65s sine in-out to about 0.45x), hold 0.5s.
28
+ - Timing to voice: start writing 0.2-0.8s after the phrase begins (median +0.5s), finish within 1s of the phrase ending. Never ahead of the voice, except pre-drawn setup.
29
+
30
+ ## Signature features (judged against these)
31
+ - Voice leads, hand follows about 0.5s behind.
32
+ - Black line plus exactly one accent color.
33
+ - Line width around 0.65% of frame height with slight hand wobble.
34
+ - Hand enters only to draw and leaves after.
35
+ - Camera pans overlap the previous view by roughly 75%.
36
+ - Ending is a pull-back to the whole board.
37
+ - Pictures and jokes drawn, not sentences copied. Handwriting that duplicates more than half the spoken words fails.
38
+ - Same block template used at most 3 times in a row.
39
+
40
+ ## Beat pattern (30-60s)
41
+ - 0-3s: title written slowly at 7.5 cps next to a first simple drawing.
42
+ - 3-35s: one block per argument. Write a line, draw an icon, add an orange keyword, repeat. Pan 1.2-2.4s to the next block. Use compare, flow, and zoom-detail blocks to vary.
43
+ - 60-75%: a far jump with a whip pan, or a big drawing revealed by the camera.
44
+ - Optional: a pop-in orange word for the punchline.
45
+ - Last 6-8s: pull back to show the whole board, hold 0.5s, voice closes.
46
+
47
+ ## Sound
48
+ Mode A has no music under speech (room tone, marker scratch). Mode B has a low music bed about 9 dB under the voice. Marker squeak on strokes, soft thump on pop-ins.
49
+
50
+ ## Build it in HyperFrames
51
+ - SVG or Canvas 2D on one big world canvas, with a time-driven camera. Transitions are only camera moves, so nothing on the board jumps.
52
+ - Build a stroke timeline (line, text, pop, fill, character) from lengths and speeds, then print it and compare each block's end to the camera move.
53
+ - Reveal text with a zigzag mask and use its front edge as the pen position.
54
+ - Smudge texture lives in screen space, following camera pan but not zoom.
55
+
56
+ ## Watch out
57
+ - Drawing a full block before talking, or finishing after the talk ends.
58
+ - Cutting to a fresh blank screen each time, or leaving the hand on screen all the time.
59
+ - Many colors, thin uniform lines.
60
+ - Planning a new stroke timeline that runs later than the camera move (the source found one block 2.5s late).