by Win-Hao
用 AI 写代码给一首歌做音乐 MV 的 agent skill:听懂歌 → 定画风 → 画角色 → 剧本分镜 → 先出草图再做整片 → 看片修改。每一帧都是代码画的,不是视频生成;不限模型。
# Add to your Claude Code skills
git clone https://github.com/Win-Hao/music-mvSee how music-mv compares with popular alternatives.
music-mv is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Win-Hao. 用 AI 写代码给一首歌做音乐 MV 的 agent skill:听懂歌 → 定画风 → 画角色 → 剧本分镜 → 先出草图再做整片 → 看片修改。每一帧都是代码画的,不是视频生成;不限模型。. It has 52 GitHub stars.
music-mv's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/Win-Hao/music-mv" and add it to your Claude Code skills directory (see the Installation section above). music-mv ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
music-mv is primarily written in Python. It is open-source under Win-Hao on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh music-mv against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
原理:不生成视频。代码把每一帧画出来(画面是时间 t 的函数),踩着歌的节拍和歌词编排,最后和原曲合成一条视频。下文 <skill> 指本文件所在的文件夹。
song.md、song-analysis.json)video_rhythm.py),画面靠接触表看(contact_sheet.py)。每版都跑,不凭感觉说「很流畅」song.mp3,wav、m4a 也行);可选 lyrics.srt、reference.mp4(想学风格的那支视频)python3 <skill>/scripts/check_env.py。缺的东西把它打印的安装命令给用户,问过再装。出图要 puppeteer:在这个文件夹里 npm i puppeteer-core(用本机 Chrome)style.md 来文件这样放:
<歌的文件夹>/
song.mp3 lyrics.srt song.md song-analysis.json
styles/ 第 2 步的样图
character.js character-sheet.png
storyboard.md sketches/ storyboard.png
mv/ HyperFrames 工程
review/ 每版的接触表、量出来的数
mv-r1.mp4 mv-r2.mp4 … 每改一版存一个,不覆盖
lyrics.srt 就直接用。没有就用 Whisper 转成带时间轴的 lyrics.srt(whisper song.mp3 --model medium --output_format srt;Apple 芯片用 mlx-whisper 快得多)
lyrics.srt 放进文件夹python3 <skill>/scripts/analyze_song.py song.mp3 -o song-analysis.json,得到 BPM、每一拍、每小节第一拍、分段和每段多响、突然安静 / 低音撤掉 / 重新进来的点、最重的几下、最后一下重音。BPM 可能差一倍,请用户跟着拍手对一下song.md:主题和情绪走向(哪里起、哪里落);分段表(时间、段名、情绪);镜头该变的点;几种理解和链接;没把握的歌词完成:用户确认了歌词;song.md、song-analysis.json 都在
照 references/styles.md:按情绪挑 3 种(拿不准就用像素游戏风、纸艺拼贴绘本、蜡笔手绘绘本),用代码把同一个开场画面按每种风格自己的画法从头各画一张 1920×1080 样图放 styles/(不是画好一张再套滤镜,四种的原生示范在 examples/;出图用 render_frames.mjs --times,见 references/render.md「出静态图」),每张一句适配理由。不用图像生成模型。停,等用户选。用户已经说了画风,就只画那一种确认。
选定后把画法(颜色 HEX、线条、纹理、动起来的手感、歌词放哪)写进 song.md 的「画风」一节。
完成:用户选定了
照 references/character.md 写 character.js:统一的绘制接口(朝向、表情、动作、拿着的道具),表情至少开心、害羞、难过,动作至少走、跳、拥抱、拿东西(按故事要的加)。画一张 character-sheet.png:三视图 + 表情表 + 动作定格。停,等用户确认。
之后所有镜头都通过 character.js 画角色。
完成:用户确认了设定图
照 references/storyboard.md 写 storyboard.md:每句歌词一个镜头,起止以 lyrics.srt 为准、切换对齐拍点;抽象的歌词拆成看得懂的连续动作(用户说了自己的理解就照用户的);每个镜头写场景、角色动作、景别运镜、情绪色调、卡在哪一拍。
转场照 references/transitions.md:从一镜到底、卡点切换、拼贴快切里推荐一种并说明理由,再给每两个相邻镜头写明怎么接。
整体要有情感起伏,结尾留余味(用户要欢快的就写欢快的)。停,等用户确认。故事被否就整个重写,不在旧的上面修。
完成:用户确认了分镜
render_frames.mjs --times 出 sketches/01.png…),拼成 storyboard.png(contact_sheet.py --images sketches -o storyboard.png)。停,等用户确认。在这时候改最省事references/render.md 选路线。同步画得完的(Canvas 2D、SVG)用路线 A,直接写在 HyperFrames 里;p5.brush 这类一帧要等的用路线 B,先逐帧渲再叠歌词。歌词 srt2js.py 转成 lyrics.js,在最上层、不跟镜头动。先渲最难的 10–20 秒给用户看手感,再渲整片python3 <skill>/scripts/finalize_audio.py render.mp4 song.mp3 -o mv-r1.mp4,把原曲按原音量封回去(渲染器常把歌压小 2 dB 以上)references/review.md「每一版交给用户之前」,接触表、歌词对照、节奏量一遍,过线了再交完成:mv-r1.mp4 自检通过;告诉用户文件在哪、多长、量出来的结果、哪些地方拿不准
用户看完提意见,照 references/review.md 的毛病清单改(像幻灯片、运镜晃、表现力不够、道具不对、歌词没演出来,还有别的)。每改一版存新文件、说清改了什么在哪几秒、只重渲改过的段、重跑自检。剧情被否回第 4 步。
完成:用户说可以了
用户给了 reference.mp4:照 references/learn-style.md,裁掉录屏的边,测音乐、量每个镜头停多久和切点卡不卡拍,抽帧看画面,写成 style.md(一句话风格、配色 HEX、画法、节奏和运镜、转场、画面里的字、量出来的规律)。只记能迁移的规律,不搬它的画面和角色。新片做完,同一段落两边抽帧对照,列差距逐条改。
| 文件 | 干什么 |
|---|---|
scripts/check_env.py |
查 ffmpeg、Node、Python 库、Whisper 在不在,只查不装 |
scripts/analyze_song.py |
歌的骨架:BPM、拍点、分段、突变点、重音 |
scripts/srt2js.py |
lyrics.srt → lyrics.js(合成页面用) |
scripts/contact_sheet.py |
视频抽成带时间的接触表;--srt 按歌词抽;--images 拼草图 |
scripts/video_rhythm.py |
切点、每个镜头停多久、几乎不动的段、黑帧、卡不卡拍 |
scripts/render_frames.mjs |
调网页的 renderAt(t) 出图:--times 出样图、设定图、草图;路线 B 逐帧渲整片、接成视频 |
scripts/finalize_audio.py |
原曲按原音量封回成片,量三个响度 |
templates/hf-canvas/ |
路线 A 的 HyperFrames 合成 |
templates/frames/scene.html |
路线 B 的逐帧页面(p5.js + p5.brush) |
templates/hf-overlay/ |
路线 B 叠歌词、配歌的合成 |
templates/lyrics-layer.js |
歌词层(逐字弹出,不跟镜头动) |
examples/<风格>/scene.html |
四种画风的原生示范(同一段 5 秒,renderAt(t) 接口),读代码学画法 |
一个 agent skill,也是一份教程:
不限模型:Claude Code、Codex 等能读写文件、跑命令的 agent 都能用。模型越强画面越细。
同一段 5 秒:雪夜街角,小螃蟹横着走进来,路灯卡在拍子上亮起,它蹦一下、冒出一颗心。四种风格都是从头用这种风格自己的画法画的,不是同一张图换滤镜:
源码在 examples/,每种一个 scene.html。agent 做第 2 步时会读它们学画法,你也可以直接打开改。
任何 agent(Claude Code、Codex、Cursor、Gemini CLI……):把这句话发给它
帮我安装这个 skill:https://github.com/Win-Hao/music-mv
或者用 skills 命令行,一条命令装进 Claude Code、Codex、Cursor、Cline 等二十多种 agent:
npx skills add Win-Hao/music-mv -g
-g 装到你的用户目录,所有项目都能用;不加就只装进当前项目。
只用 Claude Code,也可以直接 clone:
git clone https://github.com/Win-Hao/music-mv ~/.claude/skills/music-mv
不支持 skill 的工具:让它读 SKILL.md,或者照 教程.md 发提示词。
要用到的东西(第一次用时 agent 会跑 scripts/check_env.py 检查,缺什么会告诉你):
numpy、librosa、Pillow:pip install -r requirements.txtpip install openai-whisper)转歌词;不装就自己准备 lyrics.srtnpm i puppeteer-core(用本机的 Chrome,或者 HyperFrames 下载过的那个;都没有就 npm i puppeteer)新建一个文件夹,放进歌(song.mp3),在里面打开 agent:
给 song.mp3 做一支 MV,横屏,画风想要纸艺拼贴
想学一支视频的风格,把它录下来命名 reference.mp4 放进去:
学一下 reference.mp4 的风格,给 song.mp3 做一支 MV
脚本也可以自己跑:
python3 scripts/analyze_song.py song.mp3 -o song-analysis.json # 歌的骨架:BPM、拍点、分段、突变点
python3 scripts/contact_sheet.py mv.mp4 --every 0.5 -o review/sheet.jpg # 接触表
python3 scripts/contact_sheet.py mv.mp4 --srt lyrics.srt -o review/lyrics.jpg # 逐句核对歌词
python3 scripts/video_rhythm.py mv.mp4 --analysis song-analysis.json # 切点、镜头时长、不动的段、黑帧
python3 scripts/finalize_audio.py render.mp4 song.mp3 -o mv.mp4 # 原曲按原音量封回去
整支 MV(1–1.5 分钟)从开始到做完 7–10 小时,大部分时间在看片、提意见、改;改 4–9 版是常事。渲染:Canvas 画风很快;p5.brush 水彩约 0.3 秒一帧,1 分钟成片要渲 20 分钟左右。
| 文件 | 内容 |
|---|---|
SKILL.md |
agent 照着走的流程 |
教程.md |
给人看的六步教程和全部提示词 |
references/ |
画风、角色、分镜、转场、渲染、看片清单、学风格的细则 |
scripts/ |
环境检查、歌曲分析、接触表、节奏检查、逐帧渲染、音轨封装、字幕转换 |
templates/ |
两条渲染路线的 HyperFrames 合成和逐帧页面、歌词层 |
examples/ |
四种画风的原生示范(同一段 5 秒),源码就是画法参考 |
docs/ |
README 里的预览图(不影响使用) |
代码 MIT(见 LICENSE)。用到的第三方工具和库见 NOTICE.md。歌曲的版权归原作者,发布前确认平台允许使用。