painted-animation plugin
A Claude Code skill for hand-painted animation and lyric videos: frames drawn in code with p5.js, no image models
- 223 ★ on the repository
- Last commit
Extended access
Why this level
- The skill runs Node.js, Chrome and ffmpeg and writes project files and video to the working folder
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add plugins/painted-animationDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The skill runs Node.js, Chrome and ffmpeg and writes project files and video to the working folder
This is third-party code. Review the repository files before installing.
What it does
The opus-video-skills repository contains the painted-animation skill for Claude Code with Claude Opus 5.5. It drives a hand-painted video from start to finish: storyboard, animation, review, lyric synchronization and final encoding. All imagery is drawn in code, and no image or video generation model is involved. Every shot is built with p5.js and the p5.brush watercolor library. Characters act through a library of expressions and motion principles. Music videos are cut to the measured beat, and lyric videos get word-by-word karaoke subtitles. The README includes an example: a 31-second lyric video for a song. For a music video you provide the audio file and an LRC lyric file, and the skill asks one combined question about story, mood, recurring imagery and anything to avoid; the question can be left blank. The skill scaffolds a project and works through stages.
Who it is for. Creators of short animated videos and music clips who want a hand-painted watercolor look without frame generation by a model.
Good fit when
- A 15-second clip with a character and a simple plot, drawn in code
- A song gets a lyric video with word-by-word karaoke subtitles from an LRC file
- A clip is cut to the measured audio beat
- You want every frame reproducible, with no generation artifacts
Not a fit when
- You want photorealistic footage: the style here is watercolor and hand-painted
- You have no Claude Opus 5.5, Node.js, Google Chrome and ffmpeg: they are listed as requirements
- You want a clip from one quick request: the skill runs staged work with review
Example request
Make a 15-second hand-painted video of Clawd trying to catch a butterflyLimitations
The skill is written for Claude Code with Claude Opus 5.5, and results on other models are not guaranteed. Node.js, Google Chrome (for rendering), ffmpeg and Python 3 with numpy for tempo detection are required. The repository layout changed: the skill now lives in skills/painted-animation, and the old clone straight into ~/.claude/skills/painted-animation no longer works and must be removed. GitHub metadata shows no detected license, so read the terms in LICENSE. Rights to songs and lyrics used in a clip remain yours.
How to disable. Run /plugin uninstall for painted-animation, or delete the ~/.claude/skills/painted-animation symlink and the repository clone.
FAQ
Are frames generated by an image model?
No. All imagery is built procedurally in code with p5.js and the p5.brush watercolor library. No image or video generation models are used.
What do I need for a music video?
The song audio and an LRC lyric file. The skill then asks one combined question about story and feeling, recurring imagery and anything to avoid, and does not split it into five fields.
How do I install it?
As a plugin: /plugin marketplace add tuzhechen2005/opus-video-skills and /plugin install painted-animation@opus-video-skills. Or clone the repository and symlink skills/painted-animation into ~/.claude/skills/.
How do I update it?
With /plugin update for the plugin, or git pull in the clone when installed as personal skills. The old single-skill clone must be removed first.
What subtitles does a lyric video get?
Word-by-word karaoke subtitles synced from the LRC file. The clip is cut to the measured audio beat, and tempo is detected by a Python script with numpy.
Discussion
No questions or reviews yet.
Related
PluginsTwo Claude Code skills for videos made entirely in code: hand-painted watercolour animation and kinetic typography reels
A skill for hand-drawn 2D animation as code: a detail vocabulary, anatomical rigs and a frame-exact MP4, on Node and ffmpeg
A Claude Code skill for code-made video: it splits a clip into scenes and picks an engine for each, from Paper.js to Manim.
Four skills turn a song with lyrics into a watercolour animated music video: storyboard, parallel painters and render.
Six Claude Code skills make animation for reels with no footage: graphs, map routes, exploded views and narrated explainers
Three skills that draw paintings, paper figures and short films by p5.js program, improving through another model blind review.
README in short
The README briefly describes the painted-animation skill: what is built on p5.js and p5.brush, requirements (Claude Code with Opus 5.5, Node.js, Chrome, ffmpeg, Python with numpy), installing as a plugin or personal skills, a note on migrating from the old layout and how to use it for videos and clips.
README badge
Original SKILL.md
--- name: painted-animation description: Make hand-painted watercolour-and-ink cartoon videos (MP4) with code — p5.js + p5.brush rendered frame by frame in headless Chrome, encoded with ffmpeg — starring Clawd or any character. Use when the user asks to make an animation, animated short, cartoon, music video, lyric video, animated GIF/loop or "a video of Clawd…", or mentions the PDoomVideo / ClaudeAnimationBase approach. Covers storyboarding, the engine API, music and LRC lyric sync, cloud-friendly preview review, and choosing local or cloud rendering for the final video. --- # Painted animation A method for making short cartoons entirely in code, distilled from [JohnHeibel/PDoomVideo](https://github.com/JohnHeibel/PDoomVideo) (a 156 s music video painted by Claude Opus) and its generalised kit [ClaudeAnimationBase](https://github.com/JohnHeibel/ClaudeAnimationBase) (MIT), which is bundled here as `template/`. **How it works:** every frame is a pure function of time `t`. `studio.html` loads p5.js + p5.brush and your scene files; each shot paints the whole 1920×1080 frame with watercolour fills and boiling ink lines. `render.mjs` drives headless Chrome to render contact sheets for review, or every frame in parallel, and ffmpeg encodes the MP4 (with audio if given). ## Workflow ### 0. Scaffold ```bash bash ~/.claude/skills/painted-animation/scripts/new_project.sh <project-dir> # add --keep-demo to keep the example scene hooked up ``` This copies the template, unhooks the demo scene, runs `npm install` and checks node / ffmpeg / Chrome. Then **read `<project-dir>/ANIMATION_GUIDE.md` in full** before designing anything: it holds the rules, the animation principles and the complete engine / Clawd API. Look at `docs/emotions.jpg` and `docs/views.jpg` (the model sheets) with the Read tool. For a music video or anything longer than ~20 s, also read [references/music-video.md](references/music-video.md). For every music video, complete this intake before storyboarding or scene implementation: 1. Ask the user to provide both the song audio file and its `.lrc` lyric file. Do not invent, transcribe or approximate missing lyrics when an LRC is expected. 2. Always ask for the creative direction, even if the user has already mentioned part of it. Ask it as **one natural-language question in one message**, covering the desired story and overall feeling plus any recurring visual idea or content to avoid. Do not split it into separate questions, fields, a checklist or a five-part form. Tell the user they may answer in one sentence or leave it blank. Example: "What kind of story and overall feeling should this MV have, and is there any recurring image you want included or anything you want avoided? You can leave this blank if you have no preference." 3. Confirm the received files and summarize the creative direction inferred from the single answer. Internally extract story, emotion, atmosphere / imagery, visual motif and content to avoid; do not ask the user to answer those five categories separately. Treat a blank answer as "no preference", not as missing input, and propose an appropriate interpretation during storyboarding. If the audio or LRC file is missing, pause the music-video workflow and request it. 4. Measure the tempo with `scripts/beat_grid.py`; lyric lines are usually faster than you'd guess. Treat the provided audio and LRC as the timing source of truth. ### 1. Storyboard before code Write `STORYBOARD.md` in the project (format in the guide: logline, world + palette arc, motif, the character's emotion arc, then shots with **reads** — the timed list of what the viewer must understand). Worked example: [examples/xiaozhen/](examples/xiaozhen/) (a 31 s lyric video: storyboard and full scene code). For a music video, turn the user's story and mood into a coherent visual narrative and emotional arc rather than illustrating each lyric literally. Show the storyboard to the user and let them react before building, unless they said to just go ahead. ### 2. Build shot by shot - Set `duration`, `bpm`, `offset` (and `audio`) in `src/config.js`. - One IIFE-wrapped file per scene/chapter in `src/scenes/`, ending with `shots([[t0, fn], ...])`; add its `<script>` to `studio.html`. - Block key poses first, check them as stills, then add the motion between them. ### 3. Render and look — every shot, several times You can't see motion by reading code. From the project dir: