bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證反推爆款带货短视频 → 即梦/Seedance 重生成 → 剪映草稿交付的 agent 流水线。单日 16 条实战验证。作者:汪自立,7 年抖音直播操盘手(生鲜/珠宝/烘焙,单场 GMV 306 万),踩坑与打法全部固化成可复用 skill。
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
反推爆款带货短视频 → 迁移到你的产品 → 即梦/Seedance 重新生成镜头 → 配音、拼接、评分 → 交付剪映草稿或烧字幕成品。 一个 agent 驱动的流水线(为 Claude Code 等 agent 设计),每步产物都是可人工审改的文件。 核心洞察:复刻带货视频"agent 不如手工"的根因不是生成模型,而是"反推→写提示词"的转换环节会丢细节、丢动作——反推明明抓到了"橙色草本水、一只手把海参掰开",写提示词时被概括没了。本项目所有设计都在守一条:把反推到的主体+动作+关键细节原样带进生成,再用完备性关卡、人审闸口、评委三道判断兜底。 分数越高越"能跑量"。跨类目(理解后重构)分最高——方法论指导的重构 > 机械复刻。剧情流原片按千川 rubric 打分天然偏低,看保真度即可。历史最高三看分 75/90(口播型忠实复刻)。 动作复刻·深度参考 男装穿搭展示(12s 一镜到底) → 新模特 + 烫钻卫衣(动作逐帧跟,脸/衣服全换) ▲ 深度图(动作)→ 素材(长相/衣服)→ 成片 · 点击播放 B 模式·跨类目迁移 竞品 551 万曝光的参类爆款结构 → 高小参鲜食海参(台词/包装/主播全换) ▲ 点击播放完整视频 B 模式·换品名轻复刻 椰奶西梅益生菌麦片爆款 → 西梅芭乐奇亚籽燕麦片(台词复用,配音克隆) ▲ 点击播放完整视频檢視完整 README ↗
反推爆款带货短视频 → 迁移到你的产品 → 即梦/Seedance 重新生成镜头 → 配音、拼接、评分 → 交付剪映草稿或烧字幕成品。 一个 agent 驱动的流水线(为 Claude Code 等 agent 设计),每步产物都是可人工审改的文件。
核心洞察:复刻带货视频"agent 不如手工"的根因不是生成模型,而是"反推→写提示词"的转换环节会丢细节、丢动作——反推明明抓到了"橙色草本水、一只手把海参掰开",写提示词时被概括没了。本项目所有设计都在守一条:把反推到的主体+动作+关键细节原样带进生成,再用完备性关卡、人审闸口、评委三道判断兜底。
| 模式 | 说明 | 实测评委分(三看漏斗90分制) |
|---|---|---|
| A 忠实复刻 | 原台词、原产品,原原本本复刻 | 54/90 |
| 产品迁移 | 目标视频结构 + 换成你的产品/包装 | 包装文字保真 |
| B 跨类目复刻 | 借别品类爆款结构 + 方法论本地化台词 | 69/90 |
| A 群戏情景剧 | 三角色办公室短剧复刻(多人锚定+原音对口型) | 保真度 63/100,产品还原 16/20 |
| A 量产模式 | 同产品全目录批量复刻(SOP 全自动) | 实测单日 16 条交付,后期稳定 40-60 分钟/条 |
| C 模板直生 | 不给原片:只给产品图+简单要求,例文卡当结构模板直生全新片 | 首跑 18s 一次过,包装字锚定清晰 |
| H3 音画同出(talking) | 台词写进提示词,H3 自己开口,不再 TTS + 对口型 | 逐字 3/3,SyncNet -0.04s,全 talking 片 6/6 段过验收闸 |
| 动作复刻(深度参考) | 原片动作逐帧跟、换人换衣服:原片转深度图当动作参考,长相只听人设图 | 12s 一镜到底穿搭片,动作 8/8 时间点对齐,脸/衣服零泄漏 |
分数越高越"能跑量"。跨类目(理解后重构)分最高——方法论指导的重构 > 机械复刻。剧情流原片按千川 rubric 打分天然偏低,看保真度即可。历史最高三看分 75/90(口播型忠实复刻)。
动作复刻怎么做到的(样例左栏就是喂给模型的动作参考,原片演员的长相在这一步已经被抹掉):原片在本机转成深度图视频(灰度只表示远近 —— 五官、衣服纹理、颜色、花字全没了, 站位/手势/转身/推近全在),当动作参考喂即梦;长相和衣服只听人设图与产品图。同段对照:直接拿彩色原片当参考, 动作也逐帧但脸变成原片演员;去色原片同样泄漏;只有深度图做到动作和换人兼得。代价:参考视频按秒计费,该段积分翻倍。 详见 SKILL.md「深度动作参考」。海参/西梅两条:H3 为主,少量形体特写镜走即梦(按镜头类型路由)。
0 体检(doctor) → 1 反推(seed_reverse) → [1b 双反推:k3_reverse + merge_reverse 证据合并裁决]
→ 1.5 ★资产清单(needed_assets:要哪些产品图/人物/场景,并分清【谁来准备】)
→ 1.6 ★演职表(cast_plan 聚角色 → **asset_board 本地审片台看图定夺** → apply_board 写回
→ make_cast_sheet 出 3:4 人设图入库)
→ 1.7 ★场景(scene_plan 收敛逐镜场景 → make_scene 出场景板)
→ 1.8 ★说话人标注(speaker_tag:逐句判 旁白/同期声 + 说话人 → 人审 → 写回 shotlist)
→ 2 规划(plan_segments,完备性关卡+人审 segments.md) → [群戏:patch_cast 多人锚定+人数硬约束]
→ [B模式:脚本本地化 localize_seed / localize_apply + 人审]
→ 3 配音(tts_segments,多说话人+读音修正 | 原音复用:cut_audio 切段+2秒闸+精确字幕轴)
→ 4 生成(gen_segments,即梦/火山/小云雀/海螺四后端;口播段可走即梦或海螺;
--concurrency 并发提交(仅对验证过的后端);口播时长自动对齐配音;TNS/网络抖动自动重试)
→ 5 装配(assemble) → [质检:qc_lipsync 帧级口型 / ★qc_cast 人物跨镜一致性+旁白镜口型]
→ 6 评委(judge,成片+原片真对比) → 7 字幕(export_subs → SRT+贴字清单)
→ 8 交付(deliver:★剪映草稿——五轨就位打开即剪 | 烧字幕+BGM 一步到位成品)
route.py 判片型决定走哪条反推 → 立项档案 → ★route.py 判片型
├─ 主说话人【出镜】(主播口播) → 原声/配音驱动(上面那条主流水线)
└─ 主说话人【不出镜】(画外拍摄者/旁白)
→ verify_dialogue 三源对账定台本 → 人工校对
→ script_first.py 剧本先行(台词进提示词)
→ gen_jimeng_par.py 并行生成
为什么要分:画外音没有对应的脸,原声驱动时模型只能把它派给出镜的人对口型 ——
这就是"说话人错乱"的机制。台词写进提示词让模型自己发声,归属不会错,因为是它自己决定谁说的。
实测(同一条片,双臂 n=3,统一网格):画外音窗口里出镜者张嘴的帧,
原声驱动 27%(极差 111,三卷崩一卷)→ 剧本先行 513%,六卷无一崩;全片台词 8/8 段逐字到位。
但主播出镜的片子不要用它:声音必须跟着这张脸,而且只有一个说话人、本就没有归属歧义 —— 收益不存在,代价(丢原声)照付。同一个改动在两种片上一个是解药一个是毒药,所以路由必须先于生成。
⚠ 两条腿的规矩正好相反,最容易搞混:即梦必须中文提示词(英文会在静默窗自编台词,
整批报废);h3 必须英文正文并按官方规范写 <d>台词</d> + (Sx) 说话人 ID + [audio reference]。
★走 h3 腿(mmh3/rh)时,规划后还有两步:h3_prompt.py 转六段式提示词并灌回 segments.json
(gen_segments 只读 plan,不读 prompts/ —— 不灌回就会拿旧提示词生成且全程不报错),
再过 director.py 的 12 条约束闸(含 prompts/ ⇄ plan 漂移检查)。
每一步只通过 JSON 文件/文件夹交接,可插拔——换反推 VLM、换视频模型、换 TTS,只改对应一个脚本(契约见 DESIGN.md)。
| 脚本 | 作用 |
|---|---|
project.py | 建项目文件夹:默认建在目标视频旁边(<视频名>_复刻/),也可指定位置;成片统一进 成片/。入口脚本有守卫,输出落进 skill 目录直接拒绝 |
doctor.py | 环境体检(依赖分级:轻依赖可自动装/凭证与重型依赖提示用户) |
seed_reverse.py | 反推:原生视频 → 结构化分镜表(硬切/台词/product_role/host_on_camera/关键颜色) |
k3_reverse.py | 双反推第二腿(Kimi K3,同 SCHEMA 同切点源):运镜时间轴强,实体描述必须帧验 |
merge_reverse.py | 双反推证据合并:逐镜并排 dossier + 分歧信号灯 + 分歧点自动抽帧 + 静音闸 |
cut_audio.py | 原音复用切段:按段边界切原片音频,内置即梦2秒上传下限闸,顺产镜级 timing.json 字幕轴 |
patch_cast.py | 群戏/多人补丁:按出镜角色挂锚图+逐角色声明+人数硬约束句(群戏生命线) |
qc_lipsync.py | 帧级口型质检:原片帧=谁张嘴的真值,AI 帧只答"谁在张嘴"——杜绝模型看片幻听转写 |
needed_assets.py | 反推后列出这条片要哪些资产,并分清谁来准备(产品=你;人物/场景=AI 生成你审;道具看情况)+ assets 骨架 |
cast_plan.py | 从 person 字段聚出角色候选(必须人过目);带【单主播片闸】(多日 vlog 的换装会被聚成假角色)和【人称名词闸】 |
depth_ref.py | 深度动作参考:原片 → 本机深度图视频(Depth-Anything-V2)当 @视频1,动作逐帧跟、外观零泄漏;附判据(连续镜内肢体动作)与否决条件 |
make_cast_sheet.py | AI 生成 3:4 人设图(上排三肖像+下排三全身,灰底影棚)并入资产库;规格由 A/B/C/C2 四版实测定 |
scene_plan.py | 把逐镜各写各的 scene 收敛成几个共用场景(实测 58 镜 43 种说法 → 2 个场景) |
make_scene.py | 每个场景生成一张场景板(不含人物),全片共用,治"每段各编一个地方" |
speaker_tag.py | VLM 一次看全片(带音轨) 判每句是 旁白/同期声 + 说话人 → 治"旁白镜里所有人对着画外音张嘴" |
asset_board.py | 资产审片台:生成自包含本地网页(图 base64 内嵌,双击即开不联网),人物卡把「原片截图×3 + 已生成人设图」并排,一眼判断是不是同一个人;改名/勾确认后导出决策 JSON |
apply_board.py | 把审片台的决策写回 cast.json + 资产库;标了"其实是别人"的不自动拆(猜错比不拆更糟) |
qc_cast.py | 人物跨镜一致性验收(段内逐镜横排比对) + (镜内多点采样看嘴有没有开合) |
整个仓库就是一个 skill,装法就是克隆到 agent 的 skills 目录。打开 Claude Code,发这句话:
把 https://github.com/wangcanyu/daihuo-fanpai 克隆到 ~/.claude/skills/daihuo-fanpai,
然后进目录跑 python3 doctor.py 体检,轻依赖直接帮我装好,凭证类告诉我怎么配
装完重开一个会话(skill 列表在会话启动时加载),之后说人话就能开工,agent 会自动触发 skill、按流水线跑、该人审的地方停下来等你过稿:
复刻这条带货视频:目标.mp4,原台词原产品 ← A 模式
把 目标.mp4 换成我的海参重做一条,台词按我的产品本地化 ← B 模式
等价的手动安装:
git clone https://github.com/wangcanyu/daihuo-fanpai.git ~/.claude/skills/daihuo-fanpai
cd ~/.claude/skills/daihuo-fanpai && python3 doctor.py
其他 agent 只要认 SKILL.md 约定,同样装法;不当 skill 用也行,直接按下面的命令手动跑。
python3 doctor.py # 0 体检:告诉你缺什么、怎么补
python3 project.py init 目标.mp4 # 建项目文件夹(默认在视频旁边 目标_复刻/),下面的 run/ 就是它
python3 seed_reverse.py 目标.mp4 --out run/shotlist.json
python3 needed_assets.py run/shotlist.json # 按清单准备产品图 → 填 assets.json
python3 plan_segments.py run/shotlist.json assets.json --out run/segments.json # ★人审 run/segments.md
python3 tts_segments.py run/segments.json --out-dir run/audio/seg
python3 gen_segments.py run/segments.json --clips run/clips --audio-dir run/audio/seg [--i2v-backend ark]
python3 assemble.py run/segments.json --clips run/clips --audio-dir run/audio/seg --out run/成片/FULL.mp4
python3 judge.py run/成片/FULL.mp4 --target 目标.mp4
python3 export_subs.py run/segments.json --shotlist run/shotlist.json --out run/成片/FULL
python3 deliver.py run/segments.json --mode both --clips run/clips --audio-dir run/audio/seg \
--shotlist run/shotlist.json --name 我的项目 # 剪映草稿箱直接出现,进去就能剪
config.py,全环境变量)| 项 | 用途 | 配置 |
|---|---|---|
| 即梦 Dreamina CLI | 视频生成(口播口型只能它;需 maestro VIP) | curl -fsSL https://jimeng.jianying.com/cli | bash 后 dreamina login |
| 火山方舟 Ark | 反推/评委(Seed 2.1 Pro)+ 可选生成(Seedance 2.0) | export ARK_API_KEY=...;模型默认公共名,ARK_SEED_MODEL 可换 |
| CosyVoice(可选) | 本机配音,缺则走降级(复用原音/云TTS/自备) | export COSYVOICE_HOME=...,默认 ~/CosyVoice |
| Seed-VC(可选) | 换声不换演(第三档配音) | 独立仓库+venv装 ~/seed-vc,DAIHUO_SEEDVC_HOME 可改;模型首跑自动下载(hf-mirror直连) |
| pyJianYingDraft(可选) | 剪映草稿交付,缺则降级 --mode final | 独立venv装;草稿目录设 DAIHUO_JY_DRAFTS 或 ~/.config/daihuo-fanpai/jy_drafts |
ffmpeg + Python requests | 切分/拼接/HTTP | — |
全链路国内直连,不需要任何代理。极个别网络下载 CDN 失败时才设
DAIHUO_DOWNLOAD_PROXY。
复刻里几乎所有"看着就假"的毛病 —— 产品被编、人物切镜变脸、场景每段一个样、说话人对不上 —— 是同一个病:画面里出现了某个东西,而它在提示词里没有任何图作为身份来源, 于是模型每次自己编一个,每次编得都不一样。
所以在"反推"和"生成"之间插了一层:先问清楚这条片需要哪些身份来源,谁来准备,再开始烧钱。
| 资产 | 谁准备 | 为什么 |
|---|---|---|
| 产品 | 你 | 三条理由,缺一不可:① AI 编不出你的真品 ② h3 画不对汉字,带印刷文字的包装只能用真图(改两轮措辞都压不住,参考图上有字它就要抄) ③ 真实照片自带尺寸和比例,文字描述给不了 —— 08-21 实撞:白底生成图上「直径约10厘米」是无效信息,10cm 和 25cm 的蛋糕在白底上一模一样;而用户随手给的真图里有手和纸托,尺寸一目了然 |
| 道具 | 看情况 | 带品牌/特定外观的(你的包装盒、印字物料)→ 你准备;通用道具(毛巾/水盆/镜子)→ 不做资产,模型本来就画得对 |
| 人物 | AI 生成,你审 | 铁律:一律生成新身份,绝不照搬原片出镜人的肖像——复刻别人视频时不该这么做。你只需过目角色表 |
| 场景 | AI 生成,你审 | 场景板只定空间关系和色调,不含人物 |
| 声音 | 复用原音 | 复刻场景直接按段切原片音频 |
needed_assets.py 会列出来,并标好【要你准备】)cast_plan)和说话人表(speaker_tag)其余全是机器的活。人审只在这两个点,之后不需要你再看一眼 —— 因为剩下的是"闸"不是"审":
目标.mp4 就在 run 目录里。director.py 12 条规则机械比对"提示词提到了 X" ⇄ "参考图里有没有 X",
以及单段参考图有没有超上限、prompts/ 和 plan 有没有漂移。不需要你看一眼。assets_lib/(DAIHUO_ASSETS_LIB 可覆盖):
assets_lib/
index.json 人物索引:name/desc/aliases/pronoun/sheet
cast/<id>/sheet.png 3:4 人设图(上排三肖像+下排三全身,灰底影棚,赤脚)
scene_index.json 场景索引
scene/<key>/plate.png 场景板(不含人物)
同一个"大哥"出现在两条片里,第二条直接命中库存,不用重出图。 ⚠别名宁窄勿宽:实测把"黑背心运动大哥"写进"黑短袖大哥"的别名,回原片抽帧发现是两个人 ——别名过宽 = 把错误的人设图绑到别人身上,比没有人设图更糟。
cast_plan 有闸会拦住并提示。{"host_anchor": "assets/host.jpg", // 主播锚定图(纯产品视频可空)
"host_desc": "齐肩黑发,米白色针织上衣", // ★钉进每个口播段,治跨段穿着漂移
"product_desc": "XX鲜蒸海参,深蓝金色包装", // 材质/颜色写死
"products": {"hero": "...", "礼盒": "...", "内包装": "...", "单根": "..."},
"forms": {"hero": ["精华","滴管"], "瓶身": ["玻璃瓶","泵头"]}, // ★形态别名,换品类必配
"product_verbs": ["涂抹","上脸","拍打"], // ★该品类操作动词,完备性关卡用
"host_is_sheet": false, // 主播锚图是 3:4 人设图时置 true(**换图必须同时换措辞**)
"exclude_forms": {"S13": ["盒装"]}, // ★逐段禁用某产品形态(治"h3 画不对包装汉字")
"extra_constraints": {"S9": "..."}} // 逐段追加约束(写这里,改提示词活不过下次重生成)
配套的两个 run 级文件(由 cast_plan / scene_plan 生成,人审后使用):
// cast.json —— 演职表
{"roles":[{"key":"yeshi_dage_hei","lib_id":"yeshi_dage_hei","name":"黑短袖大哥",
"desc":"35岁左右中国中年男性,短寸头,身穿纯黑色短袖T恤",
"pronoun":"m","aliases":["黑短袖大哥","黑色短袖大哥"]}]}
// scene.json —— 场景表(desc 填了才能生成场景板)
{"scenes":[{"key":"傍晚露天夜市","name":"傍晚露天夜市","desc":"...","shot_count":32}]}
品类特定知识(形态词/动词/多音字)全走配置,默认档案偏食品/生鲜(项目出身)。
生成模型是随机的,所以"我改了个东西,看起来好了"几乎总是错觉。这几条是翻车翻出来的:
director.py 报"8/8 段自相矛盾"是读提示词读出来的,
零方差、零成本、可复现。能在文本层解决的问题,一次生成都不该花。grid_off.py)。
各用各的时间点比出来的数字不可比,那是自己给自己制造噪声。no / not / never / without / do not,逐条问"有没有资产能修掉它"。route.py,才发现这条片一个真实切点都没检出。DESIGN.md §3):按硬切分段而非台词、真图 image2video 保质感与包装文字、thinking 关+流式快 17 倍、直连不代理……改之前先读。SKILL.md 坑索引。B 模式的台词本地化依赖 qianchuan/ 千川方法论弹药包(选题/句式/跨类目复制/诊断rubric/合规红线),蒸馏自付费课程,本仓库不含。可自备一套按 localize_seed.py 的 QC_FILES 约定放入;A 模式忠实复刻不需要它。
这套东西不是先有架构再实现的,是从"为什么 agent 复刻反而不如手工"这个疑问一步步逼出来的:翻旧管线找到病根(转换丢细节,不是模型不行)→ 单案例闭环验证 → 换产品迁移验证 → 跨类目重构验证 → 把每步固化成可插拔引擎,踩一个坑修一个固化一个。它不是"一句 prompt 一键出片",而是一个懂行的操作台 + 一本打法手册:把手工时脑子里的高频判断显式化、可复用、可审。
--bgm),能直接投的及格版。FULL.mp4 永远保持无字幕无 BGM——它是评委输入和回归基准,观感加工全在下游。单主播之外,三角色办公室短剧已实战验证:逐段按出镜角色挂多张人物锚定图 + 逐角色人设声明 + 人数硬约束(不加会幻觉多生成人物,patch_cast.py 已固化);产品未登场的段剥离产品图防剧透。口型错乱治理已有完整打法(实测错误率 28%→6%):帧级口型质检(qc_lipsync.py,原片帧当真值)定位脏段 → 抽卡循环(每段 1-2 抽、新旧择优)收敛随机错 → 同句两轮同错的粘性错误给时间码进剪映手修。教训:不要用视频模型看 AI 成片转写台词做质检——会整段幻听。复用原音时,字幕轴用分镜表镜级时间构造,精确对齐。
两个反推模型错误呈镜像:Seed 病在时序粗+贴字幻听进台词,K3 病在实体幻觉(把三角皂看成馒头、卸妆棉看成洗脸扑都真实发生过)。所以:时间轴/运镜细节可信 K3,实体一律 Seed 基底+原片帧终审,merge_reverse.py 出逐镜对照档案和分歧抽帧,裁决按字段不按整包。产品长相/道具/谁在场这类拍点,写提示词前必须抽帧验证——这是烧积分前最便宜的保险。
project.py init 目标.mp4:每条复刻一个文件夹,默认建在目标视频旁边,也可指定位置;成片统一放 成片/。qc_talking(逐字 + 口型闸)、
按实测语音尾裁剪、subs_karaoke 逐词字幕。合入时补了一处:多人物片的台词挂到具体说话人,原版恒写 "She"。
另外,没装 SyncNet 时口型一项改记"未测",原版会判 FAIL。depth_ref.py):同段四组对照 —— 文字/彩色原片/去色原片/深度图 —— 只有深度图做到"动作逐帧 + 脸是自己的人设"。
提示词里叫模型"别沿用视频里的长相"完全压不住,治法是把外观信息从参考里拿掉。plan_segments 逐段给建议(理由+翻倍积分),
默认不开,用户同意后 --motion-ref 开启。实测参考视频按秒计费、与输出同价(即梦/秘塔账单双证)。make_cast_sheet --ref 衣服.png 走图生图,衣服款式/刺绣不再靠文字编;顺带治好即梦"组图"让 CLI 永远等待的坑。dualtext、分镜唯一入口 shotlist.py、段状态账本 run_state.py、
唯一资产库 assets_lib.py、例文卡库 + C 模式、大模型唯一出口(套餐/按量自动)。一条街头挑战片(画外拍摄者说了全片 75% 的话)把"说话人错乱"逼到了墙角。 两天里病因被逐层剥开,每一层都推翻了上一层的结论:
| 以为的病因 | 实际 |
|---|---|
| 提示词写得不够强 | 是自相矛盾:一句"整段对口型"+ 一句"这 11.3 秒是画外的人在说",8/8 段全中 |
| 修掉矛盾就好了 | 全片重渲后定量测,片级没有改善(那次"治好了"是拿一卷倒霉的比一卷走运的,n=1) |
| 模型能力不行 | 台词写进提示词让模型自己发声,画外音窗口张嘴帧 27% → 5~13%,六卷无一崩 |
| 是提示词层的事 | 资产层才是底层:场景板是白天(原片傍晚)且自带一排路人、人设图全赤脚、产品图与描述互相打架 |
route.py 按【人物配置 × 主说话人出不出镜】判片型。
画外主说话人 → 剧本先行(script_first.py);主播出镜 → 原声驱动。
同一个改动在两种片上一个是解药一个是毒药,所以路由必须先于生成。gen_jimeng_par.py):此前"CLI 不能并行"是错的 —— --poll 900 是提交后阻塞,
--poll 0 才是提交即返回 submit_id。全提交→统一轮询,8 段从 40+ 分钟压到约 9 分钟。verify_dialogue.py)、四类缺陷定量抽帧(qc_defects.py)。grid_off.py 多卷同网格、voice_cmp.py 音色比对、is_speech.py 音轨粗筛。★这一轮最贵的四条(细节见 README 的【取证纪律】):
cuts=[14,28,42…] 是完美均匀的定长切片,
镜数/时长比 0.072(正常 0.5~1)。而"反推后必查这个比值"早就写在文档里,只是没有代码执行它。
在不存在切点处告诉模型"这里硬切" → 每次切镜三个人一起走路。completeness_check(这个 skill 本来就有一道闸专防"漏动作")。
后果:一段 14 秒的"大口吃蛋糕",提示词里一个"吃"字都没有,反而写着"嘴唇闭合"。一条夜市街采片暴露出:整个 schema 只有 host_anchor(单数),多个人物没有地方可以住
—— 17 段里 16 段送进模型的参考图一张人脸都没有,却按音频驱口型提交,等于让模型对着人声凭空编人。
切镜变脸是必然,不是模型能力问题(同批另外三条单主播片挂图率 8~13/15,观感就正常)。
<Subject N> + Cast constraint 钉确切人数;3:4 人设图规格由 A/B/C/C2 四版实测定★三条最贵的教训(全写在 HANDOFF.md):
prompts/ 曾是死产物 —— gen_segments 只读 segments.json,全仓没有代码读 prompts/。
h3_prompt 报成功、director 报全过、生成报出片,三个环节全绿,而用的是上一版旧提示词,
白烧一整轮 17 段才靠肉眼看出来。现已改为默认灌回 plan + 加漂移闸。按时间倒序。每条只写"这一版解决了什么问题",细节见对应 commit 与 SKILL.md 坑索引。
mmh3_gen.py(base_url 可换渠道,不把自己焊死在一家),RunningHub 退役。
→ 接任何新后端先问:这是渠道价还是模型价?有没有更靠近源头的通道?text2image --model_version 5.0 --resolution_type 2k,实测 0 积分(订阅权益"图片5.0Lite 2K限时免费"),1440×2560 比原先 ¥0.1/张的方案又免费又高一档。铁律不变:带品牌文字的产品图一律不生成,只用真图。plan_segments --by-leg 同段必须同腿并打 leg 标记(package_text→h3 / hero_real→即梦 / 其余→h3),内置临界点合并(拆细与最短时长对冲,mmh3 碎段短于 0.6 秒自动并回);gen_segments --auto-leg 按段派发,h3 段并发、即梦段串行。实测同一条片 ¥14.07→¥12.09 且每段同腿。seedance2.0_vip。另发现 VIP 与非VIP 各有一个独立并发槽。rh_gen.py(RunningHub 海螺 h3):即梦之外唯一能音频驱动口型的口播后端,--mm-backend rh 切换。实测 30.5s 带货片 10 段一次过审、零重试。gen_segments --concurrency N。RH 实测 3 段同时提交真并行(完成间隔 17-23 秒);即梦 CLI 通道账号级限流=1,多提必 ret=1310,换 --session 无效——已在代码里区分,只对验证过的后端开并发。| 通道 | ¥/秒 | 并发 | 时延 |
|---|---|---|---|
即梦 seedance2.0 非VIP慢速 | 0.424 | 1 | 60分钟+ |
| RH 海螺 h3 768P | 0.48 | ≥3 真并行 | ~3分钟 |
即梦 seedance2.0_vip | 0.742 | 1 | 几分钟 |
| RH 海螺 h3 2K | 0.77 | ≥3 | ~3分钟 |
即梦 seedance2.5 | 1.378 | 1 | ~2分钟 |
第二层是后端最短生成时长的浪费:h3 最短 5 秒,快切片每段真实跨度才 1~3 秒 → 曾有 39% 的钱花在被裁掉的画面上。新增 plan_segments --min-dur/--hard-max-cuts 填满模式,降到 28%。第三层是重抽率。 |
assemble --trim-to-plan(各后端产物都比规划跨度长,不裁则段尾空窗+全片撑长)、--master-audio(A 模式整条原音直铺)、--size(2K 素材别被压回 720p);deliver 同步这两个开关,否则视频轨与字幕轨对不上。seg_role 的"有台词即口播"兜底改为只对旧 shotlist 开放——画外音/吃播段被误判进口播会拿产品镜去对口型,钩子直接丢。judge 压缩小版上传后会看漏,差距清单必须逐条核实再采信。双反推腿入库(k3_reverse + merge_reverse)、帧级口型质检 qc_lipsync、群戏补丁 patch_cast 收编、原音切段 cut_audio(2 秒上传下限闸);提交退避重试 + 下载解码体检(坏字节流会骗过大小校验)。坑索引 +8 条。
deliver.py 出剪映草稿(五轨,打开即剪)与烧字幕成品;vc_segments.py 换声不换演(Seed-VC),配内置干净音色兜底;三角色情景剧群戏打法定型(人数硬约束是生命线)。
judge --target 改成成片+原片真双视频对比(旧版保真度是模型编的);代理全线退役;产品档案化(forms/product_verbs/host_desc 进 assets.json,换品类不改代码);配音超长自动加时;新增 export_subs.py。
A 模式忠实复刻 + B 模式跨类目迁移双管线跑通,发布到 GitHub。
汪自立,2012 年入行电商,从淘宝时代一路干到抖音时代;2019 年扎进抖音直播,至今 7 年。操盘过生鲜、珠宝玉石、烘焙甜品——品类够杂,但也因为杂,看懂了直播电商的底层逻辑:不管卖什么,系统永远把流量给最能转化的人。
微信 hornonthebus(交流带货视频复刻 / AI 短视频生产,加时备注来意);问题和改进欢迎提 Issue / PR
MIT · Copyright (c) 2026 wangcanyu
route.py | 判片型(人物配置 × 主说话人出不出镜)→ 决定走哪条路线、选哪条腿;内置反推质量闸(cuts 是定长切片/镜数比异常直接拦) |
script_first.py | 剧本先行提示词生成:台词写进提示词让模型自己发声(--leg jimeng 中文 / --leg h3 英文+官方规范) |
gen_jimeng_par.py | 即梦并行生成:全提交(--poll 0)→ 统一轮询,8 段从 40+ 分钟压到约 9 分钟;submit_id 逐段落盘可续取 |
verify_dialogue.py | 台词三源对账(字幕定时间 / ASR 定逐字 / 反推定归属),一致度<0.8 报出来人工裁决 |
qc_defects.py | 四类缺陷定量抽帧(说话人归属/产品形态/手数人数/切镜走路),事先写死问题+固定抽帧位 |
grid_off.py | 多卷同网格对照(不同版本比同一批时间点,否则数字不可比) |
voice_cmp.py | 音色比对(F0 + 长时平均谱余弦),判"跨段还是不是同一个人";只能可靠地说"明显不是",不能下"就是" |
is_speech.py | 音轨粗筛(音节调制/语音带占比/词间停顿)。只报数不下判定 —— 判错过两次,判定权归 ASR |
plan_segments.py | 分段/路由/写提示词(动作原样带全)+ 完备性关卡 + 人审稿;--min-dur/--hard-max-cuts 填满模式治后端最短时长的浪费 |
localize_seed.py | B模式脚本本地化初稿(喂方法论弹药包起草) |
localize_apply.py | 把改好的台词写回分镜表(自动同步口播提示词保口型) |
tts_segments.py | 配音:CosyVoice 多说话人 A/B + 多音字读音修正(可配置词表) |
gen_segments.py | 生成:即梦/火山/小云雀/海螺四后端(--i2v-backend 切 i2v 段、--mm-backend 切口播段);即梦默认走非 VIP 慢速排队档(比 VIP 便宜 43%,--jimeng-model 可切快速档/2.5);口播时长自动对齐配音;提交退避重试+下载解码体检(坏字节流自动重下) |
ark_gen.py | 火山 Ark Seedance 2.0 后端(按 token 计费,省 CLI 积分池;含人脸参考图会被政策拦截,只走纯产品 i2v) |
xyq_gen.py | 小云雀后端(独立 credits 池;参考重绘语义,只接无文字要求的氛围镜) |
mmh3_gen.py | MiniMax H3 官方规范后端(h3 首选):base_url 可换渠道(秘塔 768P ≈¥0.11/秒,官方直连/自部署同样可接);多锚图+音频驱动口型。用前读 references/h3/README.md |
rh_gen.py | RunningHub 海螺 h3(同模型但渠道价贵 4.4 倍,已退役,留作后路) |
assemble.py | 逐段归一化拼接 + 铺连续配音轨;--trim-to-plan 裁回规划跨度治段尾空窗,--master-audio A模式整条原音直铺,--size 输出画幅(2K素材别用默认720p) |
judge.py | 评委:三看漏斗 90 分打分;--target 时成片+原片一起上传做真保真度对比 |
export_subs.py | 导出句级 SRT 字幕 + 原片屏上贴字清单(剪映照抄) |
vc_segments.py | 换声不换演(Seed-VC):原片切段音频转目标音色,表演节奏逐帧保留;治"复用原音怕查重/TTS重配丢表演"两难(单主播片;群戏需说话人分离未实现) |
deliver.py | 交付(--trim-to-plan/--size 需与装配同口径):剪映草稿(视频/配音/字幕/贴字参考/空BGM 五轨,素材自包含,打开草稿箱即剪)或烧字幕+BGM 成品;字幕轴优先吃 TTS 句级真实时长 |
qc_talking.py | talking 段验收闸:clip 音轨转写后 DP 对账台词(逐字率,同音字平反)+ SyncNet 口型闸 + 产出词级字幕轴;FAIL 建议定向重抽 |
qc_sync_offset.py | SyncNet 音画偏移测量(±1 帧标定);口型漂移就是用它查出来的 |
subs_karaoke.py | 逐词卡拉OK字幕:词窗驱动逐词变色,同一时刻只显示当前句;deliver --subs auto 在 talking 片上自动启用 |
wav_placement.py | 查一段 wav 在 clip 内嵌音轨里的实际位置(互相关),排查音画偏移用 |
config.py | 密钥/模型/路径集中配置(全部环境变量可覆盖,无硬编码) |