mcpField
C
chat-animation

chat-animation

github.com/xue-xiaobao创意与媒体1758 次安装13 周前更新
代码仓库

关于 chat-animation

将一句话创意按五阶段流程制作成 MP4 的 Skill,面向需要口播、画面与字幕协调的视频创作。它以 WAV 时长控制画面节奏,并支持分阶段审批和局部返工。

主要功能

  1. 01五阶段视频制作流程
  2. 02按关键帧生成画面运动
  3. 03MiMo 中文口播与声音校准
  4. 04支持人工审批或全自动模式
  5. 05验证产物并支持单镜返工
  6. 06合成带可选字幕的 MP4

适用场景

  1. 01将简短创意制作成解说视频
  2. 02逐阶段审核画面、运动和声音
  3. 03替换单个镜头或调整字幕后重渲染

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/xue-xiaobao/chat-animation --skill chat-animation

安装后在 Claude Code 中输入/chat-animation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

THIRD_PARTY_NOTICES.md
agents/
openai.yaml
references/
director.md
fonts.md
providers.md
schemas.md
stages.md
style-storybook.md
style-vox.md
styles.json
transitions.md
scripts/
common.py
compose.py
font_setup.py
project.py
providers.py
self_test.py

详细介绍

来自项目 README

Chat Animation

把用户的一句话要求做成观点清楚、视觉统一、口播自然、字幕同步且可局部返工的完整 MP4。不要把目标降级为“写提示词”或“生成几段视频”。

不可绕过的规则

  1. 首次动作必须是预检。与所选区域匹配的 Agnes Key 和 MiMo token 未同时配置时,停止生产并只引导配置。
  2. 严格按五阶段执行:编导 → 视觉 → 运动 → 声音 → 合成。
  3. 每阶段都必须先由 Agent 自检。human-gated 模式展示产物并等待人明确通过;full-auto 模式在验证通过后自动进入下一阶段。
  4. 默认使用人工 Gate。只有用户明确要求“全自动完成并跳过所有审批”时才启用 full-auto;全自动仍执行每阶段自检、确定性验证和产物留档。
  5. Agnes 只使用首帧 + 尾帧 + 英文动作提示词的 keyframes 模式。禁止用纯文本视频替代。
  6. MiMo WAV 是最终时钟。运动生成前先确定声音时序配置;调整画面时长,不变速有声内容来迁就视频。
  7. 所有外部结果下载到项目目录;不要依赖临时 URL,不要保存或打印 token。
  8. human-gated 模式下,视觉、运动、声音三个高成本阶段必须先生产一镜样片并获得明确批准,之后才允许批量生产;样片批准不能替代该阶段的全量批准。full-auto 模式可跳过样片 Gate。
  9. 生产流程只显式指定本 Skill 的 scripts/、references/ 和项目产物,不在流程文档、命令或用户交付中显式指定本目录之外的能力路由。
  10. 转场模式必须在编导层确定。默认使用 hard-cut 且转场时长为 0;用户明确选择动画转场时才生成过渡动画,独立转场成片默认 1.0 秒。

首次预检

首次使用只配置一次凭据。命令在终端中隐藏输入,并保存到用户私有目录:macOS/Linux 为 ~/.chat-animation/credentials.env,Windows 为 %USERPROFILE%\\.chat-animation\\credentials.env。

python3 <skill>/scripts/project.py configure-credentials \
  --set agnes-global --set agnes-cn --set mimo

只配置实际使用的 Agnes 区域即可。后续自动读取该文件,环境变量只用于临时覆盖。

运行:

python3 <skill>/scripts/project.py preflight

要求:

  • 国际站使用 AGNES_GLOBAL_API_KEY,CN 站使用 AGNES_CN_API_KEY;旧的 Agnes 变量继续作为国际站兼容别名
  • MIMO_API_KEY
  • Python 3.9+
  • FFmpeg 与 FFprobe

预检失败时,不创建项目、不进入编导阶段。按命令输出引导用户分别到 Agnes AI 和 Xiaomi MiMo 开放平台创建 key,并用环境变量配置。详细说明见 providers.md。

首次配置新 key 或遇到 401 时,再做一次最小在线鉴权:

python3 <skill>/scripts/providers.py auth-smoke \
  --output <安全的本地临时目录>/chat-animation-auth-smoke

该命令只调用一次 Agnes 文本和一次极短 MiMo TTS;不测试视频。失败时停止,不进入编导层。

预检通过后创建项目:

python3 <skill>/scripts/project.py init \
  --projects-root <用户指定或当前目录>/chat-animation-projects \
    --name <project-name> \
    --idea "<用户要求>" \
    --style vox \
    --agnes-region global

初始化同时从得意黑官方发布页下载固定版本 v2.0.1 到当前用户缓存,并校验压缩包与 TTF 的 SHA-256;字体文件不放进 Skill 包。若网络、GitHub 或校验失败,初始化继续进行并自动使用 Windows 的微软雅黑/黑体或 macOS 的苹方/黑体。最终选择写入 state/font-selection.json,详见 fonts.md。

--style 可省略,默认读取内部风格注册表的默认项。同名项目自动使用 _01、_02 版本号。--agnes-region 选择 global 或 cn,并把对应域名固化到项目;只有一套 Key 时可自动选择,两套 Key 同时存在时必须明确指定。转场默认写入 hard-cut 和 0 秒;需要动画转场时使用 --transition-mode transition-separated 或 transition-fused,需要调整动画转场时长时使用 --transition-duration。

审批模式

默认 human-gated,保持逐阶段展示、等待用户确认、记录人工批准。仅当用户明确要求全自动并跳过所有审批时,在初始化时记录授权原话:

python3 <skill>/scripts/project.py init \
  --projects-root <root> --name <name> --idea "<idea>" \
  --full-auto --approval-note "<用户明确要求的原话>"

已有项目切换时使用 set-approval-mode。不要根据“尽快”“继续”“帮我完成”等模糊表达推断全自动。

full-auto 跳过样片等待和人工批准,但不跳过生产顺序、Agent QA、validate 和失败阻断。每阶段完成后运行:

python3 <skill>/scripts/project.py auto-complete <project> <stage>

该命令只在 full-auto 项目可用,验证通过后记录 automation_review=completed。验证失败时停止并修复,不能强行进入下一层。

项目契约

<project-name>_01/
├── request.json
├── script.json
├── state/
│   ├── style-selection.json
│   ├── style-definition.md
│   ├── font-selection.json
│   └── motion-plan.json
├── visual/
│   ├── visual-manifest.json
│   ├── 01-first.png
│   ├── 01-end.png
│   └── contact-sheet.jpg
├── motion/
│   ├── motion-manifest.json
│   ├── 01-scene.mp4
│   └── ...
├── audio/
│   ├── audio-manifest.json
│   ├── 01-scene-raw.wav
│   ├── 01-scene.wav
│   └── ...
├── composition/
│   ├── timing.json
│   ├── subtitles.ass
│   ├── aligned/
│   ├── contact-sheet.jpg
│   └── final.mp4
└── reviews/
    ├── 01-director.json
    ├── 02-visual.json
    ├── 02-visual-sample.json
    ├── 03-motion.json
    ├── 03-motion-sample.json
    ├── 04-audio.json
    ├── 04-audio-sample.json
    └── 05-composition.json

文件后缀可随供应商实际输出调整,但 manifest 必须记录真实相对路径。所有状态帧必须有内容,禁止用纯色空白图代替。静态帧数量、边界帧复用和视频任务拆分由转场模式决定,完整规则见 transitions.md。

五阶段状态机

每个阶段开始前读取 stages.md 中对应章节。需要写 JSON 时读取 schemas.md。

1. 编导层

目标:把想法变成可听懂的论证、逐镜台词、视觉隐喻、图像提示词和动作提示词。

先完整读取 director.md 完成内容导演,并读取 transitions.md 选择运动剪辑策略。再读取内部注册表 styles.json,按以下顺序选择风格:

  1. 用户明确指定风格 ID 或别名时,选择对应项。
  2. 用户提供参考图或参考视频时,选择视觉与运动语言最接近的项。
  3. 用户未指定时,使用 default_style_id。
  4. 读取选中项 reference 指向的完整风格定义。
  5. 在编导预览中展示风格名称、ID 和版本,允许用户在批准前修改。

不在运行时读取其他 Skill 补充风格知识。风格通过 request.json.style_id/style_version、script.json.style_bible、state/style-selection.json 和 state/style-definition.md 项目快照固定。Skill 中的风格定义更新后,不自动改变旧项目。切换或刷新风格时运行:

python3 <skill>/scripts/project.py set-style <project> --style <style-id>

输出 script.json 和 state/motion-plan.json。风格与转场策略相互独立;把规范化的 mode 和目标时长同步写入 request.json.transition 与 script.json.project.transition。涉及金融、医学、法律、时效信息或专业事实时先检索权威来源,并把来源写入 script.json.research.sources。

自检:

python3 <skill>/scripts/project.py validate <project> director

在 human-gated 模式向用户展示:选中风格 ID 与版本、转场模式与目标时长、一句话结论、叙事弧、逐镜台词、逐镜视觉隐喻、计划生成的静态帧与视频任务、运动摘要,停下等待确认。收到明确通过后:

python3 <skill>/scripts/project.py approve <project> director \
  --reviewer human --note "<用户原话或简短摘要>"

full-auto 模式不等待确认,完成自检后运行 auto-complete <project> director。

2. 视觉层

目标:根据已批准的 motion plan 得到所需状态帧,而不是无条件为每镜生成两张图片。

生成图片前读取项目内的 state/style-definition.md,不要悄悄改用 Skill 中更新后的风格版本。所有静帧和图像提示词必须遵守该项目快照。

先读取 transitions.md 的静态帧契约:硬切静态模式通常每场景一张;独立转场模式每内容场景首尾两张;融合转场模式默认每叙事状态一张。相邻任务需要完全相同的边界状态时,复用同一个已生成文件,不重复调用图片模型。

human-gated 模式先选择一组能代表当前模式的状态帧作为视觉样片,默认使用第一场景。只生成并检查该样片,向用户展示原尺寸图片;不要同时生成其他镜头。样片通过后记录:

python3 <skill>/scripts/project.py validate-sample <project> visual --scene 01
python3 <skill>/scripts/project.py approve-sample <project> visual \
  --scene 01 --reviewer human --note "<用户原话或简短摘要>"

human-gated 模式只有 visual 样片批准有效时,才生成后续全部静帧。首镜被修改后样片批准自动失效,必须重新展示和批准。full-auto 模式按镜生成并检查全部静帧,不创建 sample review。

使用本 Skill 内置的 Agnes Image 适配器,根据 motion plan 和项目快照中的 frame_policy 生成有内容的状态帧。distinct-first-end 根据 first_frame_prompt 和 image_prompt 分别生成首帧与完成态尾帧;shared-hero-frame 只根据主画面提示词生成一次,并把同一文件复用为首尾帧:

python3 <skill>/scripts/providers.py agnes-image <project> --scene 01

只有用户明确提供图片或迁移已有本地图片时,才用统一导入命令保存原图、规范化尺寸、准备首帧并更新 manifest:

python3 <skill>/scripts/providers.py register-visual <project> \
  --scene 01 --first <generated-first-frame> --end <generated-end-frame> \
  --provider user-provided --model none

在需要双关键帧的内容任务中,首帧和尾帧都必须显式提供。distinct-first-end 要求两者视觉可区分;shared-hero-frame 要求两者指向同一个权威主画面且哈希相同。融合模式的一张状态帧可以同时作为前一任务尾帧和后一任务首帧;这是连续性复用,不重复生成。命令生成的 QA 默认全部为 false,实际查看图片并确认具有叙事内容后才可如实更新。不要用动画模型修复错误静帧。

全部静帧完成后,自检并向用户展示 contact sheet:

python3 <skill>/scripts/project.py validate <project> visual

human-gated 模式收到明确通过后批准 visual;full-auto 模式运行 auto-complete <project> visual。

3. 运动层

目标:按已批准的转场模式生成内容动画与跨场运动。

先确定声音时序配置。内置默认配置为 MiMo 预置音色“白桦”及固定的中等略快金融科普 context,实测基线 0.215 秒/有效字符;用户接受默认配置时直接使用内置基线,不调用 TTS 校准。用户改用其他预置音色、克隆音色或改变会影响语速的 context 时,在提交任何内容动画前只生成一次代表性口播样片:

python3 <skill>/scripts/providers.py mimo-calibrate <project> --voice <Voice ID>
# 或
python3 <skill>/scripts/providers.py mimo-calibrate <project> \
  --voice-file "/path/to/authorized-voice.mp3" --context "<固定播讲指令>"

未指定 --scene 时自动选择有效字符最多的镜头。命令用清理后 WAV 时长除以有效字符数,把结果写入 state/voice-timing.json,并按模型、音色 ID 或参考音频哈希、context 哈希缓存到用户本地配置。相同声音时序配置在当前项目和后续项目直接复用,不再调用 TTS;配置变化才重新校准。human-gated 模式展示首次校准音频并确认声音后再生成运动,full-auto 模式完成自动试听/转写 QA 后继续。

先完整读取 transitions.md。动作语言来自项目内的 state/style-definition.md;Agnes 的双关键帧契约保持不变,但任务拆分不同:

  • hard-cut:不生成转场任务;静态项目不调用视频模型,有内部运动时只生成各场景内容任务。
  • transition-separated:可选的高质量动画转场;生成 N 个内容任务和 N-1 个独立转场任务。内容任务不得进入下一场景,转场任务只连接前景尾帧与后景首帧。独立转场成片默认压缩到 1.0 秒。
  • transition-fused:通常用 N 张状态图生成 N-1 个融合任务;每个提示词明确“内容动作”和“进入下一状态”两个节拍,并记录转场区间。
python3 <skill>/scripts/providers.py agnes-video <project> --scene 01 --poll
python3 <skill>/scripts/project.py validate-sample <project> motion --scene 01
python3 <skill>/scripts/project.py approve-sample <project> motion \
  --scene 01 --reviewer human --note "<用户原话或简短摘要>"
python3 <skill>/scripts/providers.py agnes-video <project> --all --poll
python3 <skill>/scripts/project.py validate <project> motion

默认 agnes-video-v2.0、1280×720、24fps,串行提交。提交内容动画前统计该镜有效台词字数,乘以当前项目 state/voice-timing.json 的实测值;没有该文件时只能使用内置“白桦”基线。把预计口播时长映射到最接近的 Agnes 合法帧数(8n+1,81–441 帧);转场任务仍默认 169 帧。motion plan 可用 target_duration_seconds 人工覆盖,CLI 可用 --num-frames 显式覆盖。若预计时长超过 441 帧在 24fps 下的上限 18.375 秒,必须先在自然语义停顿处拆成多个内容镜头,并为每个新镜头补齐首尾帧和运动提示词;禁止钳制到 441 帧后再靠合成长时间拉伸。每镜保存字数、声音时序来源、预计时长、帧数来源、请求摘要、task/video ID、原始 MP4、无声 MP4、首尾抽帧和 contact sheet。帧数变化视为新的运动请求,不能因提示词未变而复用旧视频。网络中断时先恢复已有 task,禁止盲目重复提交。

human-gated 模式必须先展示一镜完整运动样片,收到明确通过后才能批量提交其余镜头;全量完成后再展示运动 contact sheet 并批准 motion。full-auto 模式可直接 --all 串行生成,逐镜 QA 后运行 auto-complete <project> motion。

4. 声音层

目标:使用运动层已经锁定的声音配置,通过 MiMo V2.5 TTS 按镜生成自然中文口播。用户未替换声音时使用默认“白桦”;已校准其他声音时必须沿用 state/voice-timing.json 中相同的音色与 context:

  1. MiMo 预置音色:列出适合当前语言的音色并让用户指定。
  2. 用户音色:要求用户提供本人或已获授权的 MP3/WAV 样本,使用 mimo-v2.5-tts-voiceclone;样本不超过 10 MB,并复制到项目 audio/reference/ 留存哈希。

human-gated 模式把运动前的首次校准样片同时作为声音试听样片;使用内置默认音色时,在声音层先生成一镜试听。full-auto 模式未指定声音时直接使用内置默认配置。

python3 <skill>/scripts/providers.py mimo-tts <project> --scene 01

用户音色样例:

python3 <skill>/scripts/providers.py mimo-tts <project> --scene 01 \
  --voice-file "/path/to/authorized-voice.mp3" \
  --context "自然清晰的中文科普解说,语速中等,停顿克制。"
python3 <skill>/scripts/project.py validate-sample <project> audio --scene 01
python3 <skill>/scripts/project.py approve-sample <project> audio \
  --scene 01 --reviewer human --note "<用户原话或简短摘要>"
python3 <skill>/scripts/providers.py mimo-tts <project> --all \
  --voice-file "/path/to/authorized-voice.mp3" \
  --context "自然清晰的中文科普解说,语速中等,停顿克制。"
python3 <skill>/scripts/project.py validate <project> audio

预置音色也要完成同样的 validate-sample、试听和 approve-sample,之后才能以完全相同的 voice/context 参数运行 --all。

优先一镜一次完整合成。保留 raw WAV;只压缩异常长静音,不改变有声段速度和音高。逐镜试听或转写核对,不得只检查文件存在。批量参数与已批准样片的模型、音色、参考音频哈希和 context 不一致时停止。

human-gated 模式向用户提供试听文件与时长表,收到明确通过后批准 audio;full-auto 模式逐镜完成试听/转写 QA 后运行 auto-complete <project> audio。

5. 合成层

目标:以清理后的 WAV 为主时钟,按 motion plan 变速画面,按用户要求选择是否生成单行字幕,并导出最终 MP4。

只使用本 Skill 内置的 FFmpeg 合成脚本:

python3 <skill>/scripts/compose.py <project>
python3 <skill>/scripts/project.py validate <project> composition

硬切模式让台词边界对齐切点。两种过渡动画模式都不得为转场插入静音:上一场景台词覆盖转场前半段,下一场景台词从转场中点开始并覆盖后半段;中间场景的台词还覆盖下一转场的前半段。融合模式按记录的内部转场区间定位中点,不能简单按文件边界切台词。字幕启用时默认读取 state/font-selection.json:优先得意黑,下载不可用时使用当前系统的中文字体;仍保持按真实停顿切换、单行、白字、黑描边、无背景。用户明确不要字幕时不烧录字幕。镜头之间没有黑场或静音缝隙。完成 FFprobe、完整解码和全片 contact sheet 后展示最终视频。human-gated 模式收到明确通过后批准 composition;full-auto 模式运行 auto-complete <project> composition 后直接交付。

独立替换与局部返工

  • 替换编导:重写 script.json,使后续审批失效。
  • 切换视频风格:运行 set-style,重写当前层提示词并从编导层重新审核。
  • 替换图片模型:只重做 visual/ 对应镜头。
  • 替换视频模型:保持 visual manifest 契约,只重做 motion/。
  • 替换音色或影响语速的播讲指令:先校准或读取缓存;若时序配置改变,则按新帧数重做受影响的 motion/,再重做 audio/ 和合成。
  • 修改字幕:只改 composition/timing.json 或字幕文件并重渲染。
  • 单镜失败:只重做该镜,禁止整批推倒重来。

任何上游已确认产物发生变化时,必须重新运行该阶段验证;human-gated 模式重新获得人类批准,full-auto 模式重新完成自动验证。下游 review 自动视为过期。

扩展内部风格

新增风格时:

  1. 新增 references/style-<id>.md,完整定义适用范围、视觉签名、构图与材质、首尾帧、动作语法、图像/动作提示词、QA 和常见失败。
  2. 在 references/styles.json 登记唯一 ID、用户名称、版本、别名、定义路径、运动策略和 frame_policy。当前合法策略为 distinct-first-end 与 shared-hero-frame。
  3. 用至少一个真实编导任务验证后再设为默认或用于生产。

修改既有风格的视觉或运动结果时递增版本;只修错别字时不递增。不要在其他文档重复维护风格列表。

扩展内置能力

生产过程中发现内置能力缺口时,先进入 Skill debug/维护流程。可以查阅本机已有实现或官方资料来理解协议,但不要把参考来源显式写进生产流程或用户交付;应把必要知识、请求适配、恢复逻辑和校验规则沉淀到本目录的 references/ 或 scripts/,补充离线回归并通过结构校验后再恢复生产。不要复制无关文件,也不要保留运行时引用。

完成定义

  • human-gated:五个 review 均为 human_review.status=approved,三个 sample review 均有效
  • full-auto:五个 review 均为 automation_review.status=completed,sample review 可省略
  • request.json、style_bible 和风格快照的 ID、版本与哈希一致
  • 所有运动镜头均记录 mode=keyframes 和两张输入帧
  • request.json、script.json 与 state/motion-plan.json 的转场模式一致;未指定时为 hard-cut 且转场时长为 0,明确选择独立转场时成片默认 1.0 秒
  • 过渡动画的台词交接位于转场中点,整条口播没有转场静音
  • 最终 MP4 为 1280×720、24fps、H.264 + AAC 且可完整解码
  • 总时长与清理后 WAV 累计时长仅有编码级误差
  • 字幕不换行、不溢出、不遮挡主体
  • 中间产物、请求摘要、provider 记录和 QA 结论可追溯

评论

支持 Markdown