Install
$ agentstack add skill-domco685-ai-cartoon-studio-skill-skill ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Studio
Produce a complete episode + social kit from one idea. Read the project CLAUDE.md and 3d/style-bible-3d.md first — they hold the brand facts, model IDs, voice id, costs, and lip-sync tips this skill depends on. Use the 3D Pixar track by default.
This is a multi-step production with human approval gates. Do NOT skip ahead to the expensive animation step before stills are approved. Announce each step and show results.
Inputs you need before starting
- The video idea (one line). If vague, ask 1–2 quick questions (which content pillar?
any specific lesson/brand to feature?).
- Confirm resolution (default 720p to conserve credits) and track (default 3D).
- Keys present:
ELEVENLABS_API_KEYand Higgsfield MCP connected. (.envgets reset by a
linter — if a key is missing, re-add and set -a; . ./.env; set +a.)
The 7 steps
1. Script → episodes/.../script.md
Write a ~90s script in the beat structure (see references/script-framework.md). Open with "", land the lesson through story (never preachy), include the breathless gag once, end with the CTA + wink + "businesses can give more than they take. Hoo-hoo-hooray!". Split into 8–14 shots, each line ≤ ~13s of speech. Map which shots become the 6 carousel beats. Get the script approved.
2. Voice → audio/shotNN.mp3
Generate each shot's line with ElevenLabs (references/voice.md has the exact API call, voice id `, model eleven_v3, v3 delivery tags). Verify each is ≤15s (afinfo`). Re-split any line that runs long.
3. Keyframe stills (SAMPLES) → stills/shotNN.png
For each shot, generate a 2k 9:16 still with Higgsfield nano_banana_pro (image-to-image from the character refs in the style bible). Prefix every prompt with the 3D style block; for dialogue shots use an open-mouth talking pose. New scenes/characters: keep refs consistent. Show all stills and get them approved — this is the cheap iteration gate.
4. Animation → video-clips/shotNN.mp4 (EXPENSIVE — only after stills approved)
Animate each still with Higgsfield wan2_7 (start_image = the still, audio = that shot's mp3), 720p, duration = audio length (≤15). Use the pause rule + exaggerated-but-controlled mouth prompt. For a guaranteed end pose (wink etc.) use start+end frames (max 2 medias → add voice in assembly). Then QA every fresh clip for lip-sync (see Lip-Sync QA below) before assembling.
5. Assemble the movie → final/.mp4
Using the bundled scripts/ (adapt per-episode content) + ffmpeg/PIL:
- comic SFX pops via
make_sfx.pyoverlaid on the right shots, - captions (
make_captions.py) on book/CTA shots (top), subtitles (gen_subs.py+
burn_subs.py) along the bottom,
- normalize + concat (
build_3d.shpattern), then burn subs, then the music dip mix
(generate a ~2min bed via Higgsfield sonilo_music; fade out on the key emotional-silence line, return after), then prepend the ~0.7s silent cover (make_intro.py → first frame = thumbnail). See references/assembly.md for the exact ffmpeg recipe.
6. Slideshow + captions → slideshow/ (9:16) + slideshow/instagram/ (4:5)
python3 scripts/make_slides.py 1080 1920 slideshow and ... 1080 1350 slideshow/instagram. Point its SLIDES at the 6 beat stills; captions go in open space, never over the face/character. Then write four platform captions (run each through the sound-human skill) — one per destination, each genuinely its own (slides/carousel = swipe voice; video/reel = watch voice): slideshow/caption-tiktok.txt (TikTok slides), slideshow/instagram/caption-instagram.txt (IG carousel), final/caption-video.txt (TikTok video / general), final/caption-reel.txt (IG reel — not a clone of the TikTok video). YouTube's title/description are derived in step 7. **Every TikTok caption (slides AND video) must end with the ` block** — see references/captions-and-distribution.md`.
7. Package per platform → deliverables/
/opt/homebrew/bin/python3 scripts/make_deliverables.py --title "" (use a python with Pillow — it makes the 16:9 thumbnail + 4:5 cover). This assembles the VA-ready, self-contained per-platform tree from the step 5–6 outputs:
deliverables/tiktok/{video,slides}(9:16) ·instagram/{reel,carousel}(4:5)youtube/short(video-only — no carousel; gets a 16:9thumbnail.jpg+title.txt/
description.txt + a 9:16 cover-9x16.jpg)
deliverables/README.txt— a one-page "what to post where" for the VA.
The video master is COPIED into each platform folder; every folder gets its own format-correct cover.jpg and its own caption. Fill the ` / placeholders in make_deliverables.py first. Hand back the deliverables/` path. Keep a LOCKED copy + git tag of the approved master.
Lip-Sync QA (run after step 4, before step 5)
AI video models drive the mouth from the audio but routinely keep it flapping through pauses — the most common, most noticeable defect. scripts/check_lipsync.py automates the catch: it finds where the voice is silent and pulls the exact frame the model drew there. During silence the mouth must be closed; if it's open, that shot is broken and should be re-rendered. Always run this on a batch of fresh clips rather than spotting problems by eye.
- Run the checker per clip. Prefer the clean VO mp3 via
--audio(pure speech → clean
silence detection; aligned at t=0 with the clip): ``bash python3 scripts/check_lipsync.py \ --video video-clips/shot08a.mp4 --audio audio/shot08a.mp3 \ --outdir video-clips/qa/shot08a ` (Create the qa/ dir first.) It prints a JSON manifest and writes silences.png (mouth should be CLOSED) + speechs.png` (control: mouth should be OPEN/moving).
- View frames + judge. Read each
silence_*frame: is the mouth closed? An open/mid-syllable
mouth during silence = lip-sync error. speech_* frames are the sanity control.
- Verdict per shot: PASS, or FLAG with timestamp(s) — e.g. "shot08a: FLAG — mouth open at
11.4s during a 0.6s pause."
- Fix by re-rendering (not frame edits): re-run Wan with the pause rule stated emphatically.
If a shot fails twice, shorten/remove the long pause in the voice line, then re-render.
Tuning: --noise (default -35dB) is the silence threshold; --min-silence (default 0.35s) is the shortest gap to flag. For a whole episode, loop over every clip and give one consolidated PASS/FLAG table.
Guardrails
- Likeness: never depict a real living person's recognizable face on this monetized kids'
content. Use "inspired-by" characters; name real people in voiceover only.
- Cost: stills are cheap, animation is not. Confirm before big animation batches; prefer
720p. Avoid Seedance.
- Tone: wonder not shame; hope + action; simple but not dumb; parents enjoy it too.
- Commit after each step.
See references/ for the script framework, voice API, assembly recipe, and model/style specs.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: domco685
- Source: domco685/ai-cartoon-studio-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.