Pipeline Hub

workflow-animation-styles

Choose, lock and run ONE animation style for any Dawn cartoon format (claymation, paper/cut-paper, disney3d, pixar, skeleton, bluey 2D, bergamot, plus the Zach-D continuous-camera grammar): style anchor from a proven ad, character + isometric floor-plan environment + product sheets in that style, the per-style model ROUTE (image role, video role, shot tier), in-batch transitions and the last-frame chaining spec, and style re-skins of proven ads via reskin.py.

Lane: cartoon-h3 (narrator, dialogue, song) + re-skin · not built yet: 12 (see below) · source: /Users/ayden/.openclaw/workspace/skills/workflow-animation-styles

SKILL.mdprocedure.mdsources.mdEvals (6)Learnings (12)
1. Read first2. When to use / when not3. Inputs4. Outputs5. Process6. Tools & models7. Gates & QA checklist8. Failure modes9. Sources

workflow-animation-styles — one style per ad, anchored, routed, re-skinnable

The format skill decides WHAT the ad says (beat sheet). This skill decides what it LOOKS like and which model role draws it. A style is never a vibe: it is an anchor frame from a proven ad + a style block + a sheet set + a route. Change it as ONE variable against a paying parent, never mid-ad.

1. Read first

2. When to use / when not

3. Inputs

4. Outputs

5. Process

  1. Pick the style (free). One per ad. Default order for Dawn: the parent's own style for iterations; disney3d (paying anchor) for new stories; claymation or skeleton as the one-variable re-skin of a paying song; paper only as a cost test; bluey and bergamot not without Fish's go (rejected 9-19 and 8-16).
Style key Anchor on disk Dawn status Image role Video role (tier A-B / tier C)
disney3d style-refs/disney3d/anchor.png = exhibit A frame (OURS, paying) paying signal (exhibit A, n=1) Image gen (GPT Image 2.5); Seedream A/B NOT BUILT Stylized video (H3-max); --tier-models can put B/C on h3 after a side-by-side
claymation style-refs/clay/anchor.png = our 8-14 clay final live, unread Image gen Stylized video; ask for stop-motion cadence in the block
skeleton style-refs/skeleton/anchor.png = Pilloway outside winner, ours unread Image gen Stylized video
pixar none (9-17 Turning Red audit block only) sheet scored 6/10 (college sniper) Image gen; Seedream candidate Stylized video
paper none untested Image gen tier A reveal/CTA on Stylized video; everything else = Cheap simple-motion i2v (NOT BUILT, §6)
bluey none; rejected 9-19 (outlines) rejected Image gen (GPT Image 2.5 may fix outlines: one-sheet proof first) Stylized video
bergamot none; rejected 8-16 as fake clay legacy Image gen Stylized video
Zach-D grammar a stage eye-level plate (procedure §3.4) + disney3d/pixar anchor untested Image gen Stylized video + run.py --chain-frames (built 10-06, unproven)
  1. Zak-D rule check (free). skills/cartoon-pipeline rule cp-003 holds for Dawn: overhead dollhouse framing + a narrator talking ABOUT a character = observational; it kills "that's me". Every Dawn winner is identification (mom first person, recipe A; natives with a recognition line 1 ran $31.8 CPA vs $36.2 for first-person openers), and core §1 needs lines 1-2 to name HER. So: the Zach-D CAMERA grammar (continuous flow, planned transitions, 3-5 s beats, one stage) may be used at eye level on any style; Zak-D FRAMING (overhead diorama, third-person observer) is never used on a Dawn recipe A/B ad. Nothing in the davidaistar video overturns this: his Zach-D demo claims no results.
  2. Lock the anchor (free). ls the anchor; open it; confirm it is the look Fish wants. Missing → procedure §2 (search the category that sells the style, download, Gemini-classify 3 frames, Fish picks). Write style_anchor: with the workspace-relative path.
  3. Write the style keys (free). style_key = run.py choice; style_block = the per-style block in procedure §1 (claymation MUST use the Fish 8-16 stop-motion block, not canvas.py's generic one); visual_negative names the rejected neighbours (clay: smooth/glossy 3D, Pixar; disney3d: flat 2D, outlines; paper: 3D render, plastic).
  4. Sheets (PAID ~$0.15-0.30 each, gate 4). Write one prompt file per sheet from the templates in procedure §3 (character model sheet; "Isometric 3D floor-plan cutaway view" env; product sheet with knowledge/brands/dawnbands/product-cutout-unlit.png as Image 2, display OFF). List them and the refs (dry run), get Fish's go, then one call per sheet: python3 -m scripts.cartoon_h3.sheet <out.png> <prompt.txt> <anchor.png> [product-cutout-unlit.png] The 10-04 wrapper output/dawn-iterate-2026-10-04/video/render_sheets.sh <disney3d|skeleton|clay> [--spend] only renders the 10-04 song cast. Eye-check every sheet against the anchor; fix one wrong thing with an edit pass (sheet.py with the sheet itself as a ref + a one-fix prompt), never a blind re-roll (cartoon-h3 rule 10).
  5. Grammar into the intents (free). "cut" (default): hard cuts between scenes. "flow" (Zach-D): every in-batch seam gets a picturable transition in the scene intent (push-through, whip pan, match cut on an object, camera rises through the ceiling); storyboard.py's splitter writes it to transition_in, h3.py turns it into a Transition: line. Batch seams cut hard unless run.py --chain-frames is passed (opt-in, built 10-06; seam-pair proof on Fish's eye still pending, §6). Zach-D: the stage is an eye-level empty plate attached to every canvas (procedure §3.4), and the hard-cut count is the format test (his measured originals: 0-2 cuts in 42-56 s; best AI copies ~1 per 8 s; 1 per ~3 s reads as an imitation). Every style, every intent: write emotion as face mechanics, not mood words ("inner brows pushed up, mouth pulled flat", "cheek squashed against her palm, eyelids half-lowered", never "worried" / "exhausted", which render a neutral face), and give every background person in a witness room, meeting or family dinner a distinct described face ("an audience" renders as mush) (starpop ai-claymation-prompts, ai-claymation-ad-examples).
  6. Storyboard (free) → Fish. zsh: P=output/concept-packs/<slug>.md; A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P --storyboard)"}); A=(${(Q)A}); python3 -m scripts.cartoon_h3.run $A --stage storyboard. Review style words in every panel, the wrist rule, no readable text, and mark each batch's tier (A/B/C) in your review note. Fish: touch output/cartoon-h3/<slug>/storyboard.approved.
  7. Canvases (PAID ~$0.20/batch). Full args (packargs without --storyboard) add --style-ref <anchor> automatically; packargs warns on stderr when the anchor is missing: treat that warning as a stop. --stage canvas. Compare 2-3 canvases to the anchor before going on.
  8. Motion (PAID). --stage gen --prompts-only → Fish reviews → core §4 gate 6b (draft → final): on a NEW style, draft one tier-A batch at --resolution 480P --batches <n> and iterate the prompt there; finals at native 768P (480→--hd upscale is unproven vs native, core 6b) → --stage gen --spend --backend fal --model h3-max. Cost: h3.py FAL_PRICE lists h3-max 768P $0.05/s but 480P $0.08/s, contradicting its own "$1.20 per 15 s" note, so budget ~$0.08/s until the fal page is re-read (60 s ad ≈ $5 of video; a 4:30 song ≈ $22) plus canvases ~$0.20/batch and sheets.
  9. Assemble + style QA. --stage assemble; gemini_qa final, then eyes: the last batch must look like the first (style drift shows late), seams per grammar.
  10. Re-skin path (procedure §5). Lane song: python3 -m scripts.cartoon_h3.reskin --from-pack <pack.md> --style <key>. Outside-lane winner: --from-video <final.mp4> --script <lines.txt> --style <key> --slug <new-slug>. Then steps 4-10; storyboard.approved is never copied.
  11. Log. Append a line to memory/learnings.jsonl per run (style, anchor, sheet scores, regens, Fish's verdict).

6. Tools & models

Need Role (registry) Built today NOT BUILT (needs Fish's go)
Sheets, canvases Image gen sheet.py, canvas.py (--canvas-backend fal default; gpt / kie; nb = Nano Banana Pro, retired 10-01: never route to it) Seedream (v5) canvas backend for pixar/disney3d: A/B two sheets first, then a --canvas-backend choice
Fix one thing on a sheet Image edit sheet.py with the sheet as a ref —
Cartoon motion, audio clock Stylized video, ref + audio clock run.py --backend fal --model h3-max style-LoRA and other candidates in the registry row: one-unit proof
Paper pans/zooms, tier C Cheap simple-motion i2v scripts/seedance_img2vid.py exists standalone, not wired into cartoon-h3 per-tier route in run.py (core §2b) + a free ffmpeg push/pan tier; spec in procedure §4
Seamless batch seams (Zach-D) Stylized video (+ Video extend as option B) in-batch Transition: lines; run.py --chain-frames (procedure §4.4, built 10-06) the seam-pair proof (Fish's eye); pack chain: key + first-panel "continues the previous shot" intent
Re-skin — (v2v restyle = Motion transfer / recast role) reskin.py (song runs; --from-video drafts song intents) v2v restyle of a finished parent (procedure §4.5); VO-narrator re-skin untested: needs vo.mp3, words.json, lines.json, vo-receipt.json in the run dir
Clip QA, final QA Video understanding clipqa.py, scripts/gemini_qa.py ~1 fps: cannot judge stop-motion cadence or seams; eyes decide

Exact NOT BUILT lines: (1) the chaining PROOF and pack-level seam picks (the --chain-frames code is built 10-06, auto-picks same-scene/env seams); (2) cheap simple-motion route for paper (per-tier backend map + per-beat 9:16 stills + ffmpeg or i2v motion); (3) Seedream canvas backend; (4) a zakd style key (do not add: Zach-D is grammar on an existing key). Each needs Fish's go and a one-unit proof (registry "How to adopt").

7. Gates & QA checklist

8. Failure modes

Symptom Cause Fix
Clay reads as smooth 3D toy canvas.py claymation block is the generic "cinematic" one (run.py falls back to it when a pack has no style_block) pack style_block = the Fish-ruled stop-motion block (procedure §1; reskin.py copies it from the nottardy pack since 10-06)
Canvases ignore the look no --style-ref (anchor missing → packargs only warns) find/lock the anchor; re-run packargs; never run canvases without it
Style drifts across the ad sheets rendered without the anchor, or mixed sheet sets reused re-render with anchor as Image 1; one sheet set per style dir
Reused Mom looks like another person old sheets carry their old look re-sheet the cast from the avatar (PB §4)
Lit band / smartwatch in clay or 3D product sheet or pose product sheet display OFF; wrist rule in intents (core §3)
Flat-2D with outlines old image model on bluey one-sheet proof on GPT Image 2.5 before any bluey run
Hard jump at every batch seam on a "flow" ad run.py concatenates unless --chain-frames pass --chain-frames (after the seam-pair proof), or stage a deliberate cut at batch ends (end each batch on a whip or a black wipe object)
Skeleton reads as Halloween horror cues skeleton block bans gore/glow; faces decided up front (PB §4)
Paper costs as much as 3D paper rides H3 today accept until the tier route ships, or keep paper ads short
Re-skin "drift" in the story intents edited during the re-skin re-skin changes style words only; any intent change = a new concept, new gate
Gemini passes a seam/cadence problem ~1 fps sampling Fish watches the cut

9. Sources

~/research/davidaistar/analysis/gemini_IolBFaQIrl4.md (Zach-D), gemini_N9Cl7PKrlxQ.md (claymation), gemini_867Fbi-lyCw.md (paper $1), gemini_TozlaC3-rCA.md (Pixar mascot), gemini_AEkzwbp6RRU.md (H3 workflow, floor-plan env), analysis/animation.md, analysis/diff_animation_styles.md; scripts/cartoon_h3/canvas.py (STYLE_BLOCKS), run.py, sheet.py, reskin.py, packargs.py; skills/cartoon-h3/SKILL.md; skills/cartoon-pipeline/SKILL.md (Identification vs Observation); song-ad-playbook §4; style-refs STYLE.md files; memory project_claymation_batch_2026-08-14.md, project_song_lane_2026-09-19.md, corrections-hot.md. Detail in references/sources.md.

Not built yet (needs Fish's go)

Every line in this skill that mentions something not built, roughly de-duplicated. Some items repeat in different words.