Music Mv logo

Music Mv

Community
Win-Hao
music-mv

用代码给一首歌做一支音乐 MV(不用视频生成模型):先把歌听懂(歌词时间轴、节拍、情绪起落、别人怎么理解这首歌),再定画风、画角色、写剧本和分镜、先出草图再做整片,最后照清单看片修改;也能先拆一支参考视频的风格再照着做。画面用 Canvas / p5.js / p5.brush 一帧一帧画,HyperFrames 合成歌词和歌。用户说「给这首歌做个 MV」「做一支音乐 MV / 歌词 MV / 动画 MV」「学这个视频的风格做一支 MV」,或 make a music video / lyric video for this song 时使用。不限模型,能读写文件、跑命令的 agent 都能照做。

Overview

PublisherWin-Hao
Repositorymusic-mv
Skill namemusic-mv
Stars
68
Forks
3
Bundled files
34
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 34 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Win-Hao on GitHub. Read the source before you install it.

Installation

Install the Music Mv AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Win-Hao/music-mv/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Win-Hao/music-mv.git \
  .claude/skills/music-mv
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Music Mv in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Music Mv on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Music Mv is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

用代码做一支音乐 MV

原理:不生成视频。代码把每一帧画出来(画面是时间 t 的函数),踩着歌的节拍和歌词编排,最后和原曲合成一条视频。下文 <skill> 指本文件所在的文件夹。

底线(每一步都守)

  1. 一切跟着音乐走:镜头在哪变、哪个画面最安静、最重要的画面放哪,都从歌里来(song.md、song-analysis.json)
  2. 一句歌词,一个画面:这句唱什么,画面就演什么。没听过这首歌的人只看画面,也能说出发生了什么
  3. 关键处停下来等用户点头:歌词、画风、角色设定图、分镜、草图。用户没确认,不往下做
  4. 画面只由 t 决定:同一个 t 永远画出同一帧,随机数用固定种子
  5. 一个镜头一个画布:背景、角色、道具画在同一个画布上、跟同一个镜头动,不把单独渲的角色视频叠在背景上
  6. 你看不了视频:节奏和动静靠脚本量(video_rhythm.py),画面靠接触表看(contact_sheet.py)。每版都跑,不凭感觉说「很流畅」
  7. 歌词有版权:不在对话、命令里整段打出歌词(会被内容过滤拦),脚本读文件,回复里只说第几句
  8. 歌词以外的字不自己加:片名、章节角标、印章徽章,用户要了再加

开始之前

  1. 文件夹里要有歌(song.mp3,wav、m4a 也行);可选 lyrics.srt、reference.mp4(想学风格的那支视频)
  2. 跑 python3 <skill>/scripts/check_env.py。缺的东西把它打印的安装命令给用户,问过再装。出图要 puppeteer:在这个文件夹里 npm i puppeteer-core(用本机 Chrome)
  3. 一轮问完:画幅(横屏 1920×1080 / 竖屏 1080×1920 / 4:3 1920×1440);整首还是一段;有没有想要的画风或参考视频;主角是谁(没想好就按歌来定);歌词要不要上屏
  4. 给了参考视频:先做「学一支视频的风格」(最后一节),第 2 步按 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 …    每改一版存一个,不覆盖

第 1 步 听懂这首歌

  1. 歌词:有 lyrics.srt 就直接用。没有就用 Whisper 转成带时间轴的 lyrics.srt(whisper song.mp3 --model medium --output_format srt;Apple 芯片用 mlx-whisper 快得多)
    • 识别没把握的几句(第几句、几秒)列给用户,让他对着听改,不要自己猜着改。背景音重的歌常有错字
    • 模型说歌词有版权、不肯转,别硬来:请用户用剪辑软件的「识别歌词」导出 srt,或者从音乐软件复制歌词对好时间,命名 lyrics.srt 放进文件夹
  2. 骨架:python3 <skill>/scripts/analyze_song.py song.mp3 -o song-analysis.json,得到 BPM、每一拍、每小节第一拍、分段和每段多响、突然安静 / 低音撤掉 / 重新进来的点、最重的几下、最后一下重音。BPM 可能差一倍,请用户跟着拍手对一下
  3. 理解:上网搜这首歌的歌词解读、乐评、听众评论,归纳 3–5 种主流理解,每条附来源链接
  4. 写 song.md:主题和情绪走向(哪里起、哪里落);分段表(时间、段名、情绪);镜头该变的点;几种理解和链接;没把握的歌词

完成:用户确认了歌词;song.md、song-analysis.json 都在

第 2 步 定画风

照 references/styles.md:按情绪挑 3 种(拿不准就用像素游戏风、纸艺拼贴绘本、蜡笔手绘绘本),用代码把同一个开场画面按每种风格自己的画法从头各画一张 1920×1080 样图放 styles/(不是画好一张再套滤镜,四种的原生示范在 examples/;出图用 render_frames.mjs --times,见 references/render.md「出静态图」),每张一句适配理由。不用图像生成模型。停,等用户选。用户已经说了画风,就只画那一种确认。

选定后把画法(颜色 HEX、线条、纹理、动起来的手感、歌词放哪)写进 song.md 的「画风」一节。

完成:用户选定了

第 3 步 画角色

照 references/character.md 写 character.js:统一的绘制接口(朝向、表情、动作、拿着的道具),表情至少开心、害羞、难过,动作至少走、跳、拥抱、拿东西(按故事要的加)。画一张 character-sheet.png:三视图 + 表情表 + 动作定格。停,等用户确认。

之后所有镜头都通过 character.js 画角色。

完成:用户确认了设定图

第 4 步 剧本和分镜

照 references/storyboard.md 写 storyboard.md:每句歌词一个镜头,起止以 lyrics.srt 为准、切换对齐拍点;抽象的歌词拆成看得懂的连续动作(用户说了自己的理解就照用户的);每个镜头写场景、角色动作、景别运镜、情绪色调、卡在哪一拍。

转场照 references/transitions.md:从一镜到底、卡点切换、拼贴快切里推荐一种并说明理由,再给每两个相邻镜头写明怎么接。

整体要有情感起伏,结尾留余味(用户要欢快的就写欢快的)。停,等用户确认。故事被否就整个重写,不在旧的上面修。

完成:用户确认了分镜

第 5 步 先出草图,再做整片

  1. 草图:每个镜头用选定的画风画一张关键帧(render_frames.mjs --times 出 sketches/01.png…),拼成 storyboard.png(contact_sheet.py --images sketches -o storyboard.png)。停,等用户确认。在这时候改最省事
  2. 整片:照 references/render.md 选路线。同步画得完的(Canvas 2D、SVG)用路线 A,直接写在 HyperFrames 里;p5.brush 这类一帧要等的用路线 B,先逐帧渲再叠歌词。歌词 srt2js.py 转成 lyrics.js,在最上层、不跟镜头动。先渲最难的 10–20 秒给用户看手感,再渲整片
  3. 声音:python3 <skill>/scripts/finalize_audio.py render.mp4 song.mp3 -o mv-r1.mp4,把原曲按原音量封回去(渲染器常把歌压小 2 dB 以上)
  4. 自检:照 references/review.md「每一版交给用户之前」,接触表、歌词对照、节奏量一遍,过线了再交

完成:mv-r1.mp4 自检通过;告诉用户文件在哪、多长、量出来的结果、哪些地方拿不准

第 6 步 看片、修改

用户看完提意见,照 references/review.md 的毛病清单改(像幻灯片、运镜晃、表现力不够、道具不对、歌词没演出来,还有别的)。每改一版存新文件、说清改了什么在哪几秒、只重渲改过的段、重跑自检。剧情被否回第 4 步。

完成:用户说可以了

发布前(提醒用户)

  • 平台有「内容由 AI 生成」声明的,选上
  • 封面用片子里最好看的一帧,别另外套模板
  • 标题写上歌名和画风(「像素风」「绘本」)
  • 歌的版权归原作者,发布前确认平台允许用这首歌

学一支视频的风格(可选)

用户给了 reference.mp4:照 references/learn-style.md,裁掉录屏的边,测音乐、量每个镜头停多久和切点卡不卡拍,抽帧看画面,写成 style.md(一句话风格、配色 HEX、画法、节奏和运镜、转场、画面里的字、量出来的规律)。只记能迁移的规律,不搬它的画面和角色。新片做完,同一段落两边抽帧对照,列差距逐条改。

脚本和模板

文件干什么
scripts/check_env.py查 ffmpeg、Node、Python 库、Whisper 在不在,只查不装
scripts/analyze_song.py歌的骨架:BPM、拍点、分段、突变点、重音
scripts/srt2js.pylyrics.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) 接口),读代码学画法

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Music Mv AI skill do?

用代码给一首歌做一支音乐 MV(不用视频生成模型):先把歌听懂(歌词时间轴、节拍、情绪起落、别人怎么理解这首歌),再定画风、画角色、写剧本和分镜、先出草图再做整片,最后照清单看片修改;也能先拆一支参考视频的风格再照着做。画面用 Canvas / p5.js / p5.brush 一帧一帧画,HyperFrames 合成歌词和歌。用户说「给这首歌做个 MV」「做一支音乐 MV / 歌词 MV / 动画 MV」「学这个视频的风格做一支 MV」,或 make a music video / lyric video for this song 时使用。不限模型,能读写文件、跑命令的 agent 都能照做。

Why use Music Mv on TypingMind?

Because you install it once and use it with any model. Music Mv is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Music Mv in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Win-Hao/music-mv/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Music Mv?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Music Mv?

As many as you like. As long as a model supports skills, you can use Music Mv with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Music Mv AI skill free?

Yes. It is published on GitHub by Win-Hao under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇