| name | interflow-ip-video |
| description | 把中文文稿做成 Interflow Bold-Mono 竖屏口播视频——火山引擎声音复刻配音(你自己的克隆音,1.2x 紧凑口播)、RMS 响度包络驱动口型的常驻 IP 小人(浮动/眨眼/点头/指向/抬手/欢迎)、暗底网格+辉光线稿的数据可视化(d3 平滑图表/迁移弧线/时间轴/象限等 10+ 种形式)、玻璃拟态词级字幕,渲染成 1080x1920 MP4。用户说「IP 小人视频 / 用我的声音出片 / interflow 风格文生视频 / bold-mono 出片」,或给一段中文文稿要做成带小人配音的竖屏视频时使用。 |
Interflow IP 小人口播视频
输入一段中文文稿 → 你的克隆音配音 + IP 小人讲解 + 数据可视化 → 竖屏 MP4。
底座 HyperFrames(faceless-explainer 管线脚本),设计系统 = Bold-Mono 暗底质感版
- v2 设计 DNA(guizang 秩序:8 档字阶/间距档位/图内文字纪律)+ 动效系统(Emil 决策树:EASE/DUR tokens + fadeUp/popIn helpers),都已进生成器与 gate。
依赖(首次先查;环境搭建步骤见 README.md)
npx hyperframes --version 可用(≥0.7.5x),ffmpeg/ffprobe 可用
- 管线 skill
faceless-explainer(HyperFrames 套件,提供 audio/captions/assemble/transitions 脚本)
- TTS Python 环境:任意 venv 装好
requests soundfile numpy faster-whisper edge-tts(建议再装 zhconv),
并 export TTS_PYTHON=<venv>/bin/python(未设则脚本用 python3)
- 声音(三档,详见 README「声音的三档」):第 0 档 edge-tts 免费声——零账号零凭证,走
scripts/tts_free.py,无 .env 时用这档,照常出完整片;第 1 档 火山标准音色 / 第 2 档
你自己的声音复刻——cp .env.example .env 填入你自己的 VOLC_APPID / VOLC_ACCESS_TOKEN /
VOLC_SPEAKER_ID(.env 已在 .gitignore,绝不提交/外传)
- 可选但建议:
scripts/voice_baseline.py 从你的真实录音提 voice_baseline.json 存 skill 根——
take 筛选与验收的语速项按它比;没有基准时这些检查自动跳过
- 个人层(可选):skill 根若存在
LOCAL.md(已在 .gitignore,永不入库),先读它——这台机器
主人的私人触发词与默认声音档位在里面,与本文件冲突时以 LOCAL.md 为准。
- 管线脚本路径:必须用 realpath
FE=$(cd ~/.claude/skills/faceless-explainer/scripts && pwd -P)。
坑:若 faceless-explainer 目录是 symlink,Node ESM 会 realpath 模块,
导致 captions.mjs 的自运行守卫 resolve(argv[1])===import.meta.url 不匹配 → 静默退出 0、不产字幕
(assemble 报 captions track2: no)。用 pwd -P 拿真实路径调所有 $FE/*.mjs 即可绕过。
工作流(复制此清单逐步走)
无人值守模式(服务端 / Agent Runner 跑法)
被服务端 Runner 调用、或任务说明"无人值守/产品出片"时,在标准工作流上叠加以下约定:
- 关闭新形式探索:只用 frame-recipes 选型表内已验证形式 + 变奏轴组合,「每集 ≥1 菜单外新形式」规则不适用(那是交互式出片时的复利机制)——无人值守的目标是质量方差最小,不是探索。
- 质检自动化:快照自查照跑(发现问题修复以一轮为限),结束前必须跑
scripts/gate_redlines.mjs --project . --render renders/video.mp4,以其退出码为最终成败判定。
- 产物约定:成片
renders/video.mp4 + 封面 qc/cover.png(开场帧 ~1s 处快照)。
- 失败约定:gate 不过 / 渲染失败重试一次仍败 → 打印
FAIL: <原因> 后退出,不交付半成品;audio_meta 相关失败必须整链重跑而不是带着漂移出片。
- 换机/镜像验证:部署新环境先跑
bash <SKILL_DIR>/checks/smoke.sh(3 镜零 LLM 全链路冒烟;无火山凭证的环境改跑 bash <SKILL_DIR>/checks/smoke_free.sh 免费声档版,零凭证零费用);改到素材层/媒体形式/gate 时加跑 bash <SKILL_DIR>/checks/smoke_media.sh(3 图+1 视频六镜:media 形式/贴纸/avatar 降级/注入/媒体红线),双绿再接真实任务。
红线(违反 = 返工)
- 素材红线(gate 查 slots.json):连续纯文字帧 ≤2;非纯文字帧占比 ≥40%;素材语义命中才配(无命中回退纸雕/图表,禁硬配);视频 B-roll 必须过 prep_media.sh(物理静音+裁 ≤4s);贴纸 ≤2/帧且不入字幕安全区(y≥1500);全片仅一个音色;avatar 只认 local-rig(heygen 自动降级,永不阻塞)。
- 每帧红色(#E63946)只出现一处,字幕永远零红。
- 底部对话排 y1500–1750(皮肤已锁死):IP 小人在左下(框 40–236, 1500–1750),字幕是带小尾巴的玻璃对话气泡,排在小人右侧(x264–1044)、垂直居中对齐——内容全部在 y≤1360,对话排不进内容。kicker ~y260 起,主体带 y280–1360,y1360–1500 留空当呼吸带。
- 每个
class="clip" 唯一 data-track-index(生成器自动自增,别手改)。
- 动效 seek-safe:无
repeat/yoyo/Math.random/Date.now;循环感一律用「时间 t 的确定性函数」在 onUpdate 里算。
- 定位容器内的标签用容器相对坐标,不是画布坐标(最常犯的坑,见 pitfalls.md)。
- 设计 DNA/动效红线(已进 gate):字号 ∉ 8 档字阶或帧内 >4 档、GSAP
*.in ease、scale(0) 入场 = GATE FAIL;图内标签 2–5 字 ≤5 个、一帧一隐喻、stagger 60–90ms 靠快照复核。
深入
- 环境搭建 / 首次使用 / 自定义(换小人、换品牌色、换语感):
README.md
- 可视化选型 + 质感/图表/动效规范:
references/frame-recipes.md
- 素材库(B-roll/贴纸/数字人):manifest schema / 合并 / 命中与回退 / 注入链路:
references/media-library.md
- 口语稿规范(书面语禁进 TTS:短句/标点停顿/……长停/语气词/个人语感层):
references/oral-script.md
- 真人语音基准(可选,不随包):
voice_baseline.json——用 scripts/voice_baseline.py 从你自己的真实录音提取(语速带/停顿分布/句长),声音层筛 take 和验收语速曲线都对它比;没有它相关检查自动跳过
- HyperFrames 隐藏契约与踩坑:
references/pitfalls.md
- 完整可跑的 12 镜生成器实例(作者一集已公开发布片源的实战原件:6 幕 / 骨架继承 / 点阵贯穿 / 气口留白):
assets/_generator-full-example.mjs
- 验收评估场景:
references/evals.md