🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

YanKaFei/2d-limited-mv-studio

DeepSeek Harnessspec-screened扫描:无法判定在 GitHub 查看 ↗
需源码安装

二次元 MV 工坊 · 2D 运镜限制 · 一张图,一首歌,万千世界。

暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/18 · 已提供中文文档

一个 DeepSeek Harness 智能体技能,可将一张角色图片和一首歌曲转化为适用于 MiniMax H3 的完整提示词包,生成一段 14.5 秒的动漫舞蹈音乐视频,镜头始终平贴在纸面上,舞蹈动作设计为可重复循环,直到你自己也能跳出来。

综合分
31.3
GitHub 分
31.3
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add YanKaFei/2d-limited-mv-studio
仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
信任档位:已验证本站已于 3 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · vision
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 7 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/23
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/20(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包2d-limited-mv-studio(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

仓库缺少 package.json,无法用 dsh 插件安装命令安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/20 15:19:32

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
2d-limited-mv-studio

二次元 MV 工坊 · 2D 运镜限制 · 一张图,一首歌,万千世界。

限制就是风格。
限制就是风格。

世界不断变异,角色始终稳定。
世界不断变异,角色始终稳定。

使用 DeepSeek Harness 构建
DSH Skill
目标
最佳运行于
测试
依赖
运镜

English · 中文 · 快速开始 · 平台 · 结局

一条 MV 不是一串好看的画面。
它是一具拒绝停下来的身体:周围的世界被反复
重画——印刷、撕开、刻蚀、溶解、错版——而到最后一帧,它仍然明确地
是同一个人。

一条 MV 不是一串好看的画面。它是一具拒绝停下来的身体:周围的世界被反复重画——
印刷、撕开、刻蚀、溶解、错版——而到最后一帧,她仍然明确地是同一个人。

一键生成二次元人物 MV 音乐动画。 给它一张人物图和一首歌,它交回一整套经过机器校验的
MiniMax H3 提示词包:音乐按 14.5 秒切分,人物穿越多种艺术流派,歌词里的实物落进背景,
运镜只用 H3 官方词表,并且每一段都用上一段的真实尾帧续接。

一键生成二次元人物 MV 音乐动画。 给它一张人物图和一首歌,它交回一整套经过机器校验的
MiniMax H3 提示词包:音乐按 14.5 秒切分,人物穿越多种艺术流派,歌词里的实物落进背景,
运镜只用 H3 官方词表,并且每一段都用上一段的真实尾帧续接。

English

为什么是 14.5 秒

H3 的 duration 参数只接受 整数,范围在 4 到 15 秒之间——而它的帧网格
(17k+5)意味着请求 15 秒实际上会交付 362 帧 ≈ 15.083 秒。

所以这两个数字被刻意分开:

| | 数值 | 原因 |
|---|---|---|
| 音乐切分 | 14.5 秒,对齐到最近的节拍线 | 符合音乐性,也是用户的单位 |
| H3 request | 15 | 最小的合法整数,其实际交付长度仍能覆盖音乐 |
| 实际交付 | 15.083 秒 | 已根据真实 H3 输出验证 |
| 可用 | 14.5 秒 | 剩余的 0.58 秒是接缝重叠——把衔接藏在最快的动作里 |

天真的向上取整会悄悄截断音乐(请求 6 秒只会交付 5.875 秒)。
2d-limited-mv-studio 会选择实际交付长度仍能覆盖音频的最小整数。

六段式提示词

每个提示词都使用一种固定结构,顺序如下:

人物与参考保持一致性:   参考角色 + 完整角色设定 + 漂移禁止项
风格提示词:           2D · limited animation · hand-drawn · flat composition + this segment's movement
内容提示词:           the continuity clause, then shot by shot
integrated_multimodal_description:  how reference, lyrics, music, dance and edit co-operate
overall_soundscape:    ambience and the physical sounds of the body
non_diegetic_music: N/A

N/A 不是省略。你已经上传了这首歌。 这里没有任何内容要求模型去作曲——
这也避开了官方那种「一边要求音乐、一边禁止音乐」的失败模式。

摄影机永不离开纸面

这不是一台碰巧对着画作的实拍摄影机。它是一台架在一叠纸上的摄影机,而这正是关键所在。

摄影机可以做什么,是被刻意限定的:

- 不做 3D 运镜。 不绕空间轨道运动,不无人机上升,不飞越,不穿越透视。
深度来自图层——前景纸、人物赛璐珞、背景插画、图形叠加——绝不来自移动的视点。
- 运动在 2D 中被写就。 摄影台推移在画面上平移,透视零变化。赛璐珞滑动让背景纹丝不动,
而人物在动。多层视差通过速度分离图层——这是 2D 唯一诚实的「景深」。
- limited animation 是质感本身。 定格帧、on twos、stepped motion、
pose-to-pose、smear drawing。丝滑不是目标;一张表现得像一张画的画才是。
- 错版是语言,不是事故。 色层错开几个像素,正是本技能表达身份松动了的方式。

运动词汇被压在 H3 的 20 个官方术语之内,正是这个原因——更大的词汇表会诱使摄影机离开纸面。
被丰富的是摄影机在看什么:角度、构图、焦、以及这一下要揭示什么。

我们拿来衡量自己的那条标准:如果把所有 3D 运镜全拿掉,这条片子还立得住吗?
立不住,那它本来就不是一条 2D 片。

摄影机永不离开纸面——运镜限制感

这不是一台「碰巧对着画的实拍摄影机」,而是一台架在纸堆上的摄影机——这才是重点。

摄影机被允许做什么,是被刻意限死的:

- 不做 3D 运镜。 不绕空间、不无人机上升、不飞越、不穿越透视。
深度只来自图层:前景纸 + 人物赛璐珞 + 背景插画 + 图形叠加,绝不来自移动的视点。
- 运动在 2D 里被写出来。 摄影台推移是画面平移、透视完全不变;
赛璐璐滑动是背景纹丝不动、只有人在动;多层视差靠图层速度差——
这是 2D 唯一诚实的那种「景深」。
- limited animation 是质感本身。 定格、on twos、stepped motion、pose-to-pose、
smear drawing。不追求丝滑——追求的是「一张画在该有的样子里动」。
- 错版是语言,不是事故。 色层错开几个像素,是本技能说「身份松动了」的方式。

运动词被压在 H3 官方那 20 个里,正是这个原因——词表一大,摄影机就想离开纸面。
于是我们丰富的是摄影机在看什么:角度、构图、焦、以及这一下要揭示什么。

我们拿来衡量自己的那条标准:如果把所有 3D 运镜全拿掉,这条片子还立得住吗?
立不住,那它本来就不是一条 2D 片。

摄影机:六个图层,一套词汇

H3 恰好识别 20 个运镜词——仅此而已。所以「更丰富的运镜」不可能来自发明新词;
crane shot 和 whip pan 根本不会被读取。丰富来自分层:

镜头大小 → 角度 → 构图 → 对焦 → 官方运动词 → 主体–相机关系 → 它揭示了什么

| 层级 | 数量 | 示例 |
|---|---|---|
| 镜头大小 | 10 | 极远景 → 极特写 |
| 角度 | 12 | 低角度 / 高角度 / 荷兰角 / 俯视 / 虫眼视角 / 过肩 / POV / 平面正面(2D 原生) |
| 构图 | 12 | 三分法、对称、负空间、画中画、海报式布局 |
| 对焦 | 4 | 深焦、浅焦、柔焦、变焦 |
| 2D 原生运动 | 10 | 逐格摄影机、多层视差、赛璐璐滑动、定位偏移、纸擦、光圈、硬裁切重构、分屏、曝光闪烁、定格漂移 |
| 关系 | 7 | 跟随 / 引领 / 匹配节奏 / 观察 / 揭示 / 对抗 / 环绕 |

缺失的层级从来不是运动——而是角度。 一个只有平移和推镜的库,正是相机显得单薄的原因。

三条规则,全部机器校验:

1. 固定镜头要有一行明确的锁定说明。 模型会漂移,尤其是在广角镜头上。每个
Static Shot 都要加上“相机在整个场景期间完全静止,只有主体产生运动。”
2. 每个运动镜头都必须写明它与主体的关系。 没有它,两种运动会各走各的时钟——表现为抖动,以及角色看起来像在滑行。
3. 丰富的相机工作不是相机展示 reel。 一个片段中最多一半的镜头可以运动;
其余锁定,能量由 2D 原生运动提供——锁定相机之下,一幅活着的画。

实拍术语用于思考;输出的一切都会映射回官方 20 个词
(crane_up → Pedestal Up、whip_pan → Pan Right + large + fast)。测试强制每个
映射目标都是真实的官方术语——该技能不会教你写出模型会忽略的词。来源与完整表格:references/camera-vocabulary.md。

运镜:六层,而不是一层(角度丰富,平面不变)

H3 只认官方那 20 个运动词。所以「丰富运镜」不能靠编新词——crane shot、whip pan
模型根本不读。丰富化只能靠分层:

景别 → 角度 → 构图 → 焦 → 官方运动词 → 相机与主体的关系 → 这一下要揭示什么

原来缺的从来不是运动词,是角度层。 一个只有平移推拉的库,镜头当然是薄的。

三条硬规矩,全部机器校验:固定镜头必须再用自然语言加一次锁(模型在远景上会自己飘);
运动镜头必须写清与主体的关系(不写就抖动、人物像在飘);
运镜丰富 ≠ 运镜展览(每段运动镜头 ≤ 一半,其余靠 2D 专属招提供动感——机位锁死、画面在动)。

实拍术语只用于思考,输出前一律映射回官方词;测试强制每个映射目标都是真官方词。
词表与来源见 references/camera-vocabulary.md。

让舞蹈变得魔性(上瘾)

一支舞之所以令人难忘,不是因为它复杂,而是因为它被重复到你也能跳。所以运动层不是更长的词表——而是一套重复设计。

| 层级 | 字段 | 它决定什么 |
|---|---|---|
| 病毒式层级 | seg.motion.viral_level | 这个片段重复得有多狠——0 克制 → 3 洗脑 |
| 重复安排 | seg.motion. | 运动单元长度、循环长度、重复次数、在哪里变异、哪个变体 |
| 钩子 | plan.motion_design.hook_id | 影片的唯一标志性动作,每个副歌中都必须出现 |
魔性度逐段从音乐推导而来——而且越到结尾越升级,因为
魔性是先积攒、再引爆的东西。哪怕是一首能量平坦的曲子,你也会得到
主歌克制 → 副歌抓耳 → 结尾洗脑。
bash
python3 scripts/mvstudio.py motion                          # 菜单 + 当前设计
python3 scripts/mvstudio.py motion --hook shoulder_pop_8
python3 scripts/mvstudio.py motion --viral 3                # 整部片子拉到洗脑
python3 scripts/mvstudio.py motion --segment C2 --viral 0   # 某一段保持克制

八种记忆点动作,每一种都为不同风味的成瘾性而设计:身体纹丝不动、只有脑袋在点的
点头;八次抖肩,计数本身就是笑点;每次停顿越来越久的跺脚;挤压拉伸的蹲弹,
这是通往惹人喜爱的笨拙感的最快路径;一个半转,三次都差一点停住,然后超额兑现。

五种重复变体——递增强调、双倍速、半速、错位半拍卡农,以及
砍掉最后一次(你一直在哼的那个记忆点做到一半就停了)。铁律:
变异是同一个动作的变奏;它绝不替换动作。 替换了动作,记忆就断了。

循环表由拍网格驱动,而不是靠猜一个「重复 4 次」——这与所有已发表的
音乐条件舞蹈生成模型共享同一个前提。我们取原理,不取任何
依赖;管线依然是零依赖。

让舞蹈「魔性」起来

一支舞之所以洗脑,不是因为编舞复杂,恰恰是因为它简单到你能跟着做,然后做了八遍。
所以动作层的核心不是更长的词表,而是重复的设计。

魔性度逐段从音乐推,而且往后递增——魔性是攒起来再爆的。哪怕整首歌能量平坦,
你也会得到 主歌克制 → 副歌魔性 → 结尾洗脑。

八种记忆点动作,各治一种「停不下来」:身体完全不动只有头在点的点头锁;
把计数本身变成笑点的抖肩八连;越停越久的跺脚停顿;
挤压拉伸最出「憨」的蹲弹;差一半三次然后超额兑现的半转重复。

五种重复变体——递增强调、双倍速、半速拖拍、错位半拍卡农,以及末次截断
(你正在哼的那个动作突然只做一半)。铁律:变异是同一个动作的变奏,绝不换动作。
换了动作,记忆点就断了。

循环表由拍网格驱动,不是拍脑袋写「重复 4 次」——这条前提和所有已发表的
音乐驱动舞蹈生成模型一致;我们只取原理,不取依赖,管线仍然零第三方依赖。

最后一个手势

一个站定的姿势是结束一部片子最偷懒的方式。最后一个手势才是观众会记住的东西。
2d-limited-mv-studio 提供八种可导演的结尾,依据音乐自身的结尾性格来排序:

| id | 结尾 | 会发生什么 |
|---|---|---|
| jump_freeze | 跃起定格 | 完整起跳,在最高点定格,背景被抽离成一条偏移的轮廓线 |
| reach_and_crack | 伸手裂屏 | 她把指尖戳进镜头;整个画面像玻璃一样裂开,白光透出 |
| swipe_to_black | 手一滑黑屏卡点 | 手臂扫过镜头,画面在强拍上恰好切黑,留下一道残影 |
| frame_drop_vanish | 逐帧抽掉 | 手臂先消失,然后是躯干,动作继续,直到只剩一条轮廓线 |
| misregistration_exit | 印版退位 | 分层脱印:颜色 → 线条 → 只剩套准标记 |
| spin_to_line | 旋转成线 | 旋转中途身体坍缩成一条竖线,然后向上被擦除 |
| paper_tear_exit | Paper Tear Exit 纸撕离场 | 画面从中间撕裂;她从裂口处舞动离场 |
| look_back_fade | Look Back, Fade 回望褪色 | 全片唯一的停顿——她回望,画面淡出为一张旧照片 |

每一个结尾都保留了身份。消失的是画,从来不是人。

末帧链接

C1 ──its last frame──▶ C2 ──its last frame──▶ C3 ──▶ C4

前一段的末帧成为下一段的首帧。
这是模型无法反驳的唯一连续性证据:它看到的是同一张图。

由此产生两条硬约束,其中一条是真正值得点明的设计张力:

1. 风格变化发生在片段内部。 链接的首帧会把前一段的美术风格一并带入。与其在“连贯”和“每段一种新风格”之间二选一,2d-limited-mv-studio 两者兼顾:0–1.5 s 保持前一段的绘画风格和姿态,然后世界在镜头内完成过渡。过渡本身成为一个事件,而非一次剪切。
2. 链接时不要改变姿态。 一份第三方实测报告(未经核实——见 references/platform-playbook.md)指出,当两个链接帧之间的垂直位移超过画面高度的 12 % 时,会出现肢体撕裂。我们采取保守立场。

帧捕获阶梯:ffmpeg → macOS AVFoundation(无需安装;已验证可在 15.034 s 处提取 2560×1440 的帧)→ 从平台时间线导出。
它绝不会把首帧冒充为末帧。

每一步都等你确认
bash
python3 scripts/mvstudio.py confirm --status
python3 scripts/mvstudio.py confirm --step canon --note "人设没问题"
python3 scripts/mvstudio.py confirm --all

确认点写入 workspace/confirmations.json——可审计、可撤销:

gate → analyze → lyrics → canon → threeview → styles → segments
→ prompt-01 … prompt-N      每一个提示词
→ chain-01  … chain-N       每一段的输出和尾帧
→ ending → render → validate → pack

只要有任何未确认项,render 和 pack 会拒绝继续(退出码 5),除非你传入
--unattended。(MiniMax Design 自己的上手评测把用户仅有的两个动作描述为
“确认,以及等”——确认,然后等待。节奏吻合。)

机器检查的内容

不是“看起来不错”——而是那些可以被断言的东西:

segments = ceil(duration / 14.5), each ≤ 15 s, contiguous
every camera word is in H3's official 20-term vocabulary
every background lyric element is derivable from that segment's lyrics
≥ 3 distinct art movements across the film, never the same one twice in a row
six sections present, in order, zero Markdown, ≤ 7000 chars per prompt
no music-generation instruction anywhere
the six render-critical canon fields are filled

中文

为什么是 14.5 秒

H3 的 duration 只接受 4–15 的整数;而它的帧网格(17k+5)意味着
请求 15 秒实际交付 362 帧 ≈ 15.083 秒。

所以两个数字被刻意分开:
| | 值 | 为什么 |
|---|---|---|
| 音乐切点 | 14.5 秒,吸附到最近的小节线 | 音乐上干净,也是你要的单位 |
| H3 duration | 15 | 「实出时长仍能盖住音乐」的最小合法整数 |
| 实出 | 15.083 秒 | 已在真实 H3 产出上核对 |
| 可用 | 14.5 秒 | 多出的 0.58 秒是接缝重叠量——把缝藏在最快的那一下动作里 |

单纯向上取整会悄悄截断音乐(请求 6 秒只交付 5.875 秒)。
2d-limited-mv-studio 取的是「实出时长仍能盖住音乐」的最小整数。

每条提示词的固定六段
text
人物与参考保持一致性:  参考素材职责 + 完整 Character Canon + 漂移禁令
风格提示词:           2D · limited animation · hand-drawn · flat composition + 本段画风
内容提示词:           延续上一帧的接续句,然后逐镜头写
integrated_multimodal_description:  参考 / 歌词 / 音乐 / 舞蹈 / 剪辑如何协同
overall_soundscape:    环境音与身体动作的物理声音
non_diegetic_music: N/A

N/A 不是省略。你已经自己上传了原曲,这里没有任何一句要求模型作曲——
这同时避开了官方列出的失败模式:一边要配乐、一边禁配乐。

最后一个手势

站定是最偷懒的收尾。观众记住的是最后一个动作。
2d-limited-mv-studio 提供 八种可直接写进提示词的收尾效果,并按音乐自己的收束性格排序
(见上方英文表格 / python3 scripts/mvstudio.py endings)。

每一种都不改变人物身份。消失的是「画」,不是「人」。

尾帧续接

C1 ──它的最后一帧──▶ C2 ──它的最后一帧──▶ C3 ──▶ C4

上一段的最后一帧成为下一段的第一帧。这是模型无法争辩的连续性证据——
它看到的是同一张图。

随之而来两条硬约束,其中一条是值得点明的设计张力:

1. 画风转换发生在段内。 续接的首帧会把上一段的画风一起带进来。
我们没有在「接得上」和「每段换画风」之间二选一,而是两个都要:
0–1.5 秒保持上一帧的画风与姿势,之后世界在同一个镜头内转场。
转场本身变成了一个事件,而不是一次硬切。
2. 续接时不要换姿势。 一条第三方现场经验(未经官方证实,见
references/platform-playbook.md):首尾帧之间垂直位移超过画面高度 12%
容易肢体撕裂。我们取保守的一侧。

取帧降级:ffmpeg → macOS 自带 AVFoundation(无需安装;实测取出
2560×1440、位于 15.034 秒的精确尾帧)→ 平台时间轴导出。
绝不拿首帧冒充尾帧。

每一个步骤都等你确认

确认点落盘在 workspace/confirmations.json,可查、可撤销:

gate → analyze → lyrics → canon → threeview → styles → segments
→ prompt-01 … prompt-N      每一条提示词
→ chain-01  … chain-N       每一段的输出与尾帧
→ ending → render → validate → pack

未确认时 render / pack 拒绝继续(exit 5),除非显式 --unattended。

机器校验的是这些

段数 = ceil(时长 / 14.5),每段 ≤15s,首尾相接
运镜全部落在 H3 官方 20 词表内
每个背景歌词元素都能从该段歌词推出
整片穿越 ≥3 种画风,且相邻两段不重复
六段齐全且有序,零 Markdown,每条 ≤7000 字符
全文没有任何生成音乐的要求
六个渲染关键 Canon 字段已填满

Quick start
bash
git clone  ~/Desktop/2d-limited-mv-studio && cd ~/Desktop/2d-limited-mv-studio

python3 scripts/mvstudio.py doctor          # environment check
python3 scripts/mvstudio.py all             # deterministic pipeline
python3 scripts/mvstudio.py endings         # pick the last gesture
python3 scripts/mvstudio.py confirm --all   # confirm each step
python3 scripts/mvstudio.py render          # six-section package
python3 scripts/mvstudio.py validate        # must exit 0
python3 scripts/mvstudio.py pack --platform xiaoyunque

Runs from any directory with --project . If the skill folder itself is read-only
(shared install, sandboxed session), the CLI tells you exactly which command to run instead.

Platforms

Best on 小云雀 and MiniMax Design — this skill is tuned for their cut, first/last-frame and
AI-edit features. Other platforms work too: anything that accepts an uploaded asset plus a
per-segment prompt can run the package; with --platform generic you get a canvas-agnostic
playbook instead of a platform-specific one.
最佳平台是 小云雀 与 MiniMax Design —— 本技能专门适配了它们的切割、首尾帧与 AI 剪辑能力。
其他平台同样可以挂载运行:任何支持「上传素材 + 逐条提示词」的画布都能跑,
--platform generic 会给出与画布无关的通用操作单。

| | 小云雀 | MiniMax Design |
|---|---|---|
| cut | 智能分镜 / 时间轴切割 | AI 剪辑(自然语言)——实测「裁掉最后 2 秒」通过 |
| first frame | 首尾帧模式 | 尾帧作为首帧参考;或 3D 导演台先摆姿势 |
| identity lock | 角色库 / 局部重改 | 资产中心(人物锚) |
| rhythm | 逐条提交 | Agent 先反问确认再动手 |

分工是:音乐由本技能切,画面由平台裁。
完整落地手册、各自的坑、以及每条结论的来源与
可信度,见 references/platform-playbook.md。

分工是:音乐由本技能切,画面由平台裁。 完整落地手册、各自的坑、以及每条结论的来源与
可信度,见 references/platform-playbook.md。

安装

bash
bash install-to-dsh.sh ~/my-project    # symlink into /.dsh/skills/2d-limited-mv-studio

使用 DeepSeek Harness 构建

这是一个 DeepSeek Harness(DSH)智能体技能,任何 DSH agent 都能挂载;
因为它就是 SKILL.md + 零依赖 Python,在 Claude Code / Codex / Cursor 里同样可用。

这是一个 DeepSeek Harness(DSH)智能体技能,任何 DSH agent 都能挂载;
因为它就是 SKILL.md + 零依赖 Python,在 Claude Code / Codex / Cursor 里同样可用。

社区标签: deepseek-harness dsh agent-skill ai-video minimax-h3
music-video prompt-engineering 2d-animation lyrics art-direction xiaoyunque

环境要求

- Python ≥ 3.7,仅使用标准库。整条流水线以零第三方依赖运行
(已在 3.9.6 系统 Python 上测试)。
- 可选项,每一项都严格为增量增强:
- ffmpeg 或 macOS afconvert —— 切割非 WAV 音频
- macOS AVFoundation(内置)—— 提取精确的尾帧
- numpy / librosa —— 更精准的 BPM 与频谱分析
- 艺术风格库(147 个流派,带分层提示词)—— 路径可配置;没有它时
本技能会降级为内置媒体调色板,并如实说明

测试

bash
python3 -m unittest discover -s tests -t tests
Ran 173 tests … OK

173 个测试,零依赖,包括一次端到端运行(合成素材 → all → 草稿
必须拒绝渲染 → 填充 → 渲染 → 校验 → 打包)以及一个隐私守卫:一旦项目专属名称、
私有提示词集或硬编码本地路径进入包中,构建即失败。

仓库结构

2d-limited-mv-studio/
├── SKILL.md                    技能本体 —— 工作流、硬性关卡、DoD
├── config/defaults.yaml        可调参数(导演判断不在这里)
├── scripts/
│   ├── mvstudio.py                单一入口,15 个子命令
│   └── lib/
│       ├── beats.py            节拍网格 · 小节对齐 · 14.5 秒分段 · H3 时长契约
│       ├── slicer.py           实际切割音频(ffmpeg → afconvert → wave)
│       ├── h3render.py         六段式渲染器(mv / ref / i2va / t2va)
│       ├── chain.py            跨分段的尾帧链接
│       ├── frames.py           帧捕获(ffmpeg → AVFoundation → 平台导出)
│       ├── endings.py          八种可导演的结局
│       ├── motion.py           魔性动作:viral level · beat-driven repeat schedule · hook
│       ├── camera.py           六层镜头语汇(角度、取景、2D 运动)
│       ├── styleroutes.py      穿越艺术史的六条融合路线
│       ├── threeview.py        角色三视图
│       ├── confirm.py          逐步确认台账
│       ├── platforms.py        小云雀 / MiniMax Design 适配器
│       ├── gates.py            机器可校验的门禁
│       ├── director.py         草稿 + 工作表
│       ├── materials.py        素材与时长门禁
│       ├── canon.py            角色设定脚手架
│       ├── pack.py             上传包
│       ├── music.py            音频分析(librosa → numpy → stdlib)
│       ├── audioprobe.py       ffprobe → afinfo → 纯 Python
│       ├── imgprobe.py         图像探测与调色板,纯 Python
│       ├── lyricsrc.py         歌词来源(embedded / lrc / srt / vtt / txt / ASR)
│       ├── artbridge.py        通往艺术风格库的桥接
│       ├── miniyaml.py         微型 YAML 读取器(无 PyYAML)
│       └── common.py           路径、配置、日志、降级
├── references/                 方法、语汇、官方 H3 指南
└── tests/                      173 项测试,零依赖

设计说明

一些并不显而易见的决定,以及它们背后的理由:

角色设定存放在官方槽位,而非正文中。
一种来源方法坚持每个提示词都要重述完整的角色设定;另一种则坚持绝不能在正文中描述外貌,
因为文本与参考图会相互冲突,导致模型漂移。
两者都对,只是适用于不同的位置。H3 的全参考模式有 subject_definitions 和
retention_analysis —— 正是格式为此预留的槽位。设定放在那里;正文保持干净。

大声降级,绝不悄悄降级。
没有 ffmpeg?你会得到一份毫秒级精确的剪辑表,并被告知自行剪辑 —— 而不是一个
悄无声息的错误结果。没有帧提取器?报错,并给出通往平台自带导出的路径。
每一次回退都会连同其影响一并记录。

色彩不是装饰。
艺术运动的选取由歌词索引,每一个背景元素都必须能追溯到它所处的那一行歌词。
随意的装饰是校验失败,而非风格。

许可证

MIT —— 见 LICENSE。

One body. Many worlds. The same face at the last frame.*
一具身体,许多世界,最后一帧上还是同一张脸。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群