Desi 歌词动画电影 是做什么的?
将一首歌曲(用户自己的音频文件)转化为 16:9 的歌词电影,采用统一的手绘风格: 一个插画角色承载每一句歌词的情感,每段副歌都是一个眼睛特写镜头,歌词以逐字梵文和下方罗马字体行形式呈现,每个剪辑点都落在演唱的音节上,整体呈现出定格动画般的运动感(双帧绘制、沸腾墨线、纸片剪贴)。
template/ 是一个完整的、经过测试的 Remotion 项目,带有一个数据驱动引擎。你永远不需要手写影片:你只需生成三个 JSON 文件,引擎就会渲染出影片。
| 文件 | 内容 | 创建方式 |
|---|---|---|
src/lyrics.json | 每个演唱短语的条目:{t0, t1, dev[], rom[], times[]} | tools/transcribe_lyrics.py → tools/build_lyrics.py |
src/character.json | 表情集 + 眼睛锚点、眼睛特写图像、造型卡片、旋转动作 | Atlabs MCP + tools/register_frames.py、eye_anchor.py、cu_plates.py、make_cards.py |
src/film.json | 镜头列表(种类、开始时间、歌词槽位、背景、过渡、选项) | tools/plan_shots.py,然后你根据含义进行优化 |
在每一步参考以下文档:
references/atlabs-mcp.md · references/character.md · references/lyrics-and-timing.md ·
references/shot-design.md · references/style-guide.md(精确调色板、排版、运动规范) ·
references/render-deliver.md。
0. 硬性规则 — 必须先连接 Atlabs MCP
所有角色艺术(基础设计、表情、眼睛特写、服装/色调外观)均通过 Atlabs MCP 生成。没有备用方案:如果未连接,停止操作,不做任何其他事情,直到连接成功。
检查:使用 ToolSearch 搜索 atlabs generate_image get_result start_upload get_account(工具名称可能是
mcp__atlabs__… 或 mcp__<id>__…,并且通常是延迟加载的),然后调用 get_account —— 它会返回积分余额。
如果缺少这些工具或 get_account 失败,请回复以下确切步骤并等待:
此技能使用 Atlabs MCP 生成角色艺术,因此需要先连接它(大约一分钟):
- 还没有 Atlabs 账户? 在 https://app.atlabs.ai 注册(图像生成使用 Atlabs 积分;一部完整的电影大约需要 25–40 积分)。
- 连接它:
- Claude Code,作为本插件安装: Atlabs 已捆绑——输入
/mcp,选择 atlabs,登录。- Claude Code(终端): 运行
claude mcp add --transport http atlabs https://mcp.atlabs.ai/mcp,然后/mcp→ atlabs → 登录。- Claude Desktop / claude.ai: 设置 → 连接器 → 添加自定义连接器 → 名称
Atlabs,URLhttps://mcp.atlabs.ai/mcp→ 添加 → 连接 → 登录,然后为此对话启用它。- 连接完成后告诉我,我就开始。
1. 简述 — 提问,不要假设
使用 AskUserQuestion 提问(一轮,然后基于合理的默认值继续):
- 歌曲:用户拥有的音频文件(mp3/wav/m4a)。不要自行下载音乐。
- 选取部分:“为我选择副歌”(默认,30–60 秒)或用户提供的时间戳,或用于匹配的参考片段(
tools/locate.py在歌曲内查找片段)。 - 角色 — 提供:
- “使用我的参考图片” — 用户本人的照片或经同意的人的照片,或用户拥有版权的角色艺术。 用户可以分享多张(不同服装、彩色背景、表情);每张都有用。不要为名人或任何未经其同意的真实人物进行风格化处理——改为提供原创角色。
- “设计一个原创角色” — 可选地提供风格参考图片和简短描述(外观、服装风格)。
- 氛围词(可选):例如“印度坏女孩 Z 世代”、“温柔浪漫”、“喜庆”、“心碎”。默认:现代印度风格,带有印度元素。
如果用户在聊天中分享的图片不是磁盘上的文件,请要求用户将它们保存到 refs/cards/(或提供路径)——
上传到 Atlabs 需要文件。
2. 搭建项目
cp -R <skill dir>/template <project> && cd <project>
npm install
uv venv -q --python 3.12 .venv && uv pip install --python .venv/bin/python numpy scipy pillow faster-whisper
mkdir -p refs && cp <song> refs/song.mp3
(也可以使用 python3.12 -m venv .venv。)从项目根目录运行每个 Python 工具,格式为 .venv/bin/python -I tools/<tool>.py …。
模板附带一个演示角色、道具和演示数据,因此 npx remotion studio src/index.ts 可立即工作。
3. 读取歌曲、选择部分、剪切音频 — references/lyrics-and-timing.md
.venv/bin/python -I tools/beatgrid.py refs/song.mp3 --bpm-min 60 --bpm-max 180 # 速度、节拍相位、响度条
.venv/bin/python -I tools/structure.py refs/song.mp3 # 重复部分 = 副歌
.venv/bin/python -I tools/vocal_onsets.py refs/song.mp3 --from 0 --to <dur> --json refs/onsets.json
tools/cut_audio.sh refs/song.mp3 <start> <end> # → public/audio/song_cut.wav
选择最重复、最有活力的声乐部分(副歌就在那里)。在第一个声乐开始前的 2–4 拍的下拍开始,在进入下一部分前的呼吸处结束。注意 start —— 视频时间 = 歌曲时间 − start。
4. 歌词 — 自动从用户自己的音频获取
.venv/bin/python -I tools/transcribe_lyrics.py refs/song.mp3 --from <start> --to <end> --lang hi --onsets refs/onsets.json
.venv/bin/python -I tools/build_lyrics.py --transcript refs/transcript.json --slice <start> <end> --onsets refs/onsets.json
--lang hi返回梵文,--lang en返回罗马化的印度英语;build_lyrics.py会生成两种文字。- 如果转录器报告无法识别的演唱段落(非常快的演唱、叠加声部),向用户询问一次是否有歌词文本或带时间戳的表格;如果有,则使用
build_lyrics.py --table lyrics.txt …(或--text)。如果没有,继续:这些短语保持无词状态,规划器会为它们分配纯视觉镜头。 - 歌词仅来自用户音频(通过转录器)或用户提供的文本。 不要自己输入歌词,不要凭记忆填补空白,也不要在聊天中回复歌词文本——只报告计数和时间。
5. 角色 — Atlabs MCP — references/character.md
一张基础绘制,其他所有内容都是对该基础的编辑,因此角色永远不会发生漂移。默认模型:
Nano Banana 2.1(nano_banana_2_1)用于从参考进行基础绘制和每次编辑(最佳一致性);
GPT Image 2.5 Sunburst(gpt_image_2_5_sunburst)用于照片需要更强的风格化处理时;
Seedream 5 Pro(seedream_5_pro)用于新道具或全场景图像。
- 基础:清晰、上半身、纯奶油色背景,按照风格(参考或原创)。
- 表情(基于基础的编辑):
front, half, closed, pain, relief, shy, dream, moved(加上基础作为neutral/侧眼)。register_frames.py将它们放在一个画布上;eye_anchor.py --set main …找到角色的眼睛。 - 可选的第二套造型(例如更深的服装)包含
front, half, closed, pain, relief, dream→ 用于沉重情绪。 - 眼睛特写图像 + 编辑
half, closed, tears, glance, smoulder→cu_plates.py,然后eye_anchor.py --closeup。 - 4–6 张造型卡片:同一个人,不同现代服装 + 来自调色板的纯色背景 + 涂鸦,
每张都带有闭眼编辑 →
make_cards.py。 - 全身旋转动作 →
keyout.py。 并行提交独立的生成;使用sheet.py制作联系图并在继续前查看。告知用户使用的模型和消耗的积分。
6. 规划影片 — references/shot-design.md
.venv/bin/python -I tools/plan_shots.py --bpm <bpm> --beat0 <第一个拍,视频秒数> --duration <秒> --audio audio/song_cut.wav
然后阅读每一行的含义(从文件中读取,不要在聊天中粘贴歌词)并优化 src/film.json:
- 每段副歌都是一个眼睛特写镜头(她的近景,每次有不同的凝视,或一个眼睛道具);不能连续两次相同
- 痛苦表现在她的脸上(裂纹、变暗的地面),而解脱出现在治愈性的词语上——永远不要出现真实的伤口
- 触摸/感觉表示为“感动”(花朵绽放、涟漪),而不是真实的心手相印;快的歌词行使用造型卡片切换
- 每个镜头的背景都不同(造型颜色),画框始终保持不变;过渡方式多样化 保持一个连贯的故事:她是主角,她的眼睛是主题。
7. 检查,然后渲染 — references/render-deliver.md
node tools/stills.mjs out/st 0.5 <frames…> && .venv/bin/python -I tools/sheet.py out/st.jpg out/st/*.jpg
./tools/make_film.sh <name> # → out/<name>.mp4 (1920×1080, 24 fps)
在每个短语的第一个词处检查静帧:歌词清晰可辨且在画框内,副歌时眼睛睁开,表情与歌词匹配,没有空镜头。修复问题,重新渲染更改过的帧,然后渲染影片(约 4–6 分钟)。将结果复制到用户的“下载”文件夹并发送。提醒一次:商业歌曲在某些平台上可能被静音;用户有责任拥有发布歌曲的版权。
实际运行中的注意事项
- feTurbulence 将种子 0 和 1 视为相同模式——沸腾/颗粒种子从 1 开始(已在
kit.tsx中修复);否则开场会静止 4 帧然后跳跃。 - Whisper 会漏掉非常快的演唱;起始点仍然为这些短语计时——永远不要猜测词语。
- Remotion 捆绑的无头 shell 在 macOS 上可能崩溃;
remotion.config.ts使用已安装的 Chrome。保持并发数为 6。 - 注册的编辑必须来自同一基础图像;如果编辑发生漂移(不同的姿势/裁剪),请重新生成而非强制使用。
- 深色背景上的文字会自动切换为奶油色/桃色字体——根据情绪选择镜头背景,而非根据文字。