拾流 / 爆款带货复刻 · 创作技能

SHILIU · 创作资源

爆款带货复刻 · 创作技能

反推目标带货视频的分镜,用即梦重新生成镜头再拼成片:忠实复刻、跨类目迁移、无参考三种模式。

拾流编辑部 · 更新于 2026-10-29

这个技能解决什么问题

反推目标带货视频的分镜,用即梦重新生成镜头再拼成片:忠实复刻、跨类目迁移、无参考三种模式。

来源与使用

作者 wangcanyu;许可 MIT。已核对来源与包结构,未据此宣称完成运行实测。

查看原始来源

机器可读详情 · 读取 SKILL.md · 下载完整技能包

技能说明全文

---
name: daihuo-fanpai
description: 复刻/仿拍爆款带货短视频 —— 反推目标视频分镜,用即梦(Seedance)重新生成镜头,配音拼接成片。A模式(忠实复刻:原台词原产品) / B模式(跨类目迁移:换产品+千川本地化脚本) / C模式(没有目标视频:从例文卡库选模板直生)。触发:复刻带货视频、仿拍爆款、把这条视频用我的产品重做、抖音带货素材复刻、即梦复刻、穿搭/换装复刻、舞蹈/动作复刻、照着这条视频的动作换人重拍。
tags: [复刻, 仿拍, 带货视频, 短视频, 即梦, seedance, 视频生成, 千川, 剪映草稿, 群戏, 动作复刻, 深度图]
version: 2.0
status: verified
created: 2026-07-01
updated: 2026-07-13
---

# 带货短视频复刻 (daihuo-fanpai)

反推爆款 → 迁移到目标产品 → 即梦生成 → 配音拼接。核心洞察:**病在"反推→写提示词"的转换环节会丢细节/丢动作,不在模型**。本 skill 把验证过的管线固化,每步产物可审。

引擎在本目录(可插拔,换实现只改单个文件):
`seed_reverse.py` 反推 · `merge_reverse.py` 双反推合并 · **`route.py` 判片型(决定后续生成方式)** · `plan_segments.py` 规划 · `h3_prompt.py` 海螺提示词生成 · **`director.py` 约束维度检查(生成前最后一道闸)** · `seam_pick.py` 一镜到底续接挑缝 · `cut_audio.py` 原音切段(≥2s闸+timing.json) · `patch_cast.py` 群戏/多人补丁(人数硬约束) · `gen_segments.py` 生成 · `qc_assets.py` **资产入库闸(机械层+VLM层+图⇄文对账,提交前把参考图本身查一遍)** · `qc_lipsync.py` 帧级口型质检 · `qc_defects.py` 四类缺陷定量抽帧 · `grid_off.py` 多卷同网格对照 · `is_speech.py`/`voice_cmp.py` 音轨判据 · `tts_segments.py` 配音 · `assemble.py` 装配 · `deliver.py` 交付(剪映草稿/成品) · `doctor.py` 体检。
生成后端(可插拔,契约 `submit_*()->tid` / `wait_download(tid,dst)->(size,usage)`):即梦CLI(内置) · **`mmh3_gen.py` MiniMax H3 官方规范(秘塔渠道,h3 首选)** · `ark_gen.py` 火山 · `xyq_gen.py` 小云雀 · `rh_gen.py` RunningHub海螺h3(同模型贵4.4倍,已退役) · `rhdh_gen.py` RunningHub 数字人(**整条口播片直通**,单主播对镜口播片型用,跳过反推/规划/TTS;30 分钟片约 ¥95,钱包计费先征得用户同意)。

> **要改造/换引擎/接手本 skill?先读 `DESIGN.md`**(设计理由 + 数据契约 + 扩展点)。参考样例在 `references/`。

## 两种模式

- **A·忠实复刻**:目标=原原本本复刻(台词原样、产品同一个)。不改脚本、不接千川。本文件覆盖。
- **B·跨类目迁移**:换成用户产品 + 千川方法论本地化台词。B 在 A 基础上,于「规划」后、「配音」前插入**脚本本地化**一步,只改 `segments.json` 的 `dialogue` 字段(接口不变,A 的引擎一行不动)。
  - 方法论弹药包在 `qianchuan/`(蒸馏自4套千川课):`00-INDEX`导航 · `01-选题与卖点`(三级卖点S/A/B) · `02-跨类目复制与机制`(★纪律:结构不动只换产品/卖点/数字 + 买赠堆叠 + 信任前置) · `03-句式库`(锚定/伪机制/指令式) · `04-诊断rubric与红线`(三看漏斗90分 + 合规)。
  - 操作:按 `qianchuan/LOCALIZE.md` 流程 → 向用户收事实包(品牌/主卖点/活动/价格/赠品/产地/异议点)→ 逐段改 dialogue(**默认走纪律不自由发挥**)→ 存 edits.json → `python3 localize_apply.py segments.json edits.json`(自动同步口播段 prompt 的 台词{},并对字数偏差告警)→ 给用户过目 → 继续 tts。
  - **评委(可选)**:生成后拿成片抽帧 + `04` 三看漏斗打分,不足项给整改建议。

- **C·模板直生(没有目标视频)**:只有产品图 + 一句要求时,从例文卡库挑一张结构模板,让大模型直写全新 shotlist,
  之后走 A 的下游(plan_segments → tts → h3_prompt → gen → assemble → deliver)。
  ```
  python3 c_gen.py --assets run/assets.json --require "做一条15-20s的早餐场景带货片" --cat 食品饮料 --out run/shotlist.json
  ```
  - 选卡:同品类(归一类目 `cat`)硬加分 > 时长贴近 > 已验 > 结构丰富;判废卡和非带货卡不参选。`--card <id>` 可指定。
  - 时长只对用户目标校验(给了"15-20s"就只认它);台词里读法有歧义的地方模型会直接写 `<屏上|念法>`。
  - 旧品名/品牌/产地/机制数字黑名单,残留即打回重写。

## 例文卡库 + 资产库(10-09 从 Kimi 线适配)

**例文卡库**(`punch_cards/`,卡片 JSON 不入 git;唯一入口 `cards.py`):一张卡 = 一条爆款的逐拍结构
(beat_function / felt_intent / 台词 / 屏字 / 运镜 / 声音设计)。B 模式找参照、C 模式选模板都从这里取。
- 状态三态:`unverified` / `verified` / `rejected`。判废的卡永不被检索/选中。
- 类目看 `cat`(14 类归一词表),原 `category` 大半是整段商品标题,别拿它比。
  `cards.py rules --write` 关键词粗分(免费);`cards.py classify --recheck` 大模型精分(套餐可用时跑)。
- 检索:`card_find.py --beat 钩子 --cat 食品饮料 --hook-type 痛点供给`
- 抽检:`card_verify.py sample --batch <日期>` 随机抽 → 人对原片判 过/废 → `card_verify.py settle <单子>`
  (废的标 rejected;废数 ≤ 允许数才整批放行)。
- 收卡:自产 `card_harvest.py <run> --cat …`;外部批量 `batch_reverse.py <素材目录>`(要先 `beat_tag.py --apply`)。

**资产库**只有一个:`config.ASSETS_LIB`(默认 E:/jimeng/assets_lib),唯一入口 `assets_lib.py`。
`cast/`(人物,主播也是 cast 一员)· `scene/` · `products/`(形态 + 别名 + _916 竖版)· `clips/`(只收验收片)。
assets.json 里写引用不写路径,换机器不用改:
`"host_anchor": "@host:西梅主播"`、`"products": {"包装袋": "@product:西梅麦片/包装袋正面"}`。
登记:`assets_lib.py enroll-host …` / `assets_lib.py enroll-product …`;查看:`assets_lib.py list`。

**大模型出口只有一个**(`config.ark_endpoint`):套餐(agent-plan)/按量由 key 决定,每个进程第一次调用时
打印实际通道。`DAIHUO_ARK_PLAN=0` 显式退回按量(按 token 计费,先征得用户同意)。doctor 会真调一次探针。

## 第0步:体检(每次开跑前必做)

```bash
python3 <engine>/doctor.py
```
按性质分级处置依赖,**不要闷头自动装重型依赖**:
- **ffmpeg(轻)**:缺 → 可自动装 `apt/brew install ffmpeg`。
- **即梦CLI + Seed key(凭证)**:缺/失效 → **提示用户处理**(登录、提供key),agent 硬试无用。
- **CosyVoice(重型GPU,配音用)**:缺 → **不默认自动装**。给用户降级选项并让其选:
  1. A模式且台词没改 → **直接复用原片音频**(`ffmpeg` 从原视频抽,免TTS,最省)
  2. 接**云端TTS** API(无需本地GPU)
  3. 用户**自备配音**
  4. 用户决定装本地 CosyVoice(几GB+GPU,大投入,该用户拍板)

核心链路(反推+生成+装配)可跑即可开工;配音缺则走上面降级。

## 第0.5步:建项目文件夹(10-10,硬规则)

**每条复刻一个项目文件夹,所有中间产物都进去;skill 目录里一个字节都不许写。**
```bash
python3 <engine>/project.py init "G:\复刻测试\男装.mp4"          # 默认建在视频旁边:G:\复刻测试\男装_复刻\
python3 <engine>/project.py init 目标.mp4 --dir "用户指定的位置"   # 用户说了放哪就放哪
python3 <engine>/project.py init --dir "用户指定的位置" --name 西梅早餐   # C 模式没有视频:先问用户放哪
```
- 最后一行打印 `RUN=<项目路径>`。**下文所有 `run/` 都指这个路径**,cd 进去再跑。
- 项目里机器用的子目录沿用英文名(clips/ audio/seg/ prompts/ refs/ assets/ tmp/);**人只看 `成片/`**,
  FULL.mp4 / 成品 / 字幕 / 评委报告都输出到这里。跟用户报告时给 Windows 路径(`project.py` 已打印)。
- 目标视频会复制到 `src/target.mp4`,原片挪走或改名不影响项目。
- 14 个入口脚本带守卫:输出路径落进 skill 目录直接拒绝。**被拒了就去建项目,别绕守卫。**
- 临时文件(抽帧、测试切片)放 `run/tmp/`,不放 skill 目录,也不放系统 /tmp(用户找不到)。
- 老项目(`E:\jimeng\runs\*`)照旧能用,结构兼容;只是成片在 `output/` 而不是 `成片/`。

## 输入(问用户要)

1. **目标视频**(要复刻的爆款,路径)
2. **产品素材**:干净产品图,**目标视频里出现的每一种形态各一张**(裸品/剖面/礼盒/内包装/单根…),官方电商图最佳、别用视频截图。**具体要哪几张,第1.5步 `needed_assets.py` 反推后会给你精确清单**——按清单准备,别漏形态(漏了即梦会自由发挥编产品,实测坑)。填进 `assets.json`
3. **音色**:A模式默认复用原音;走"换声不换演"(vc_segments)时**建议用户提供干净的目标音色参考**(安静环境、无BGM无杂音、几秒即可,信噪比≥30dB——脏参考的底噪会被学进产物);用户不提供则用内置干净音色(voices/:女声古丽93dB·女声萍萍76dB·男声广智49dB,vc_segments 省略 --target 即用);TTS重配走 CosyVoice 音色库
4. 确认横竖屏/时长无异常(doctor 不管这个,ffprobe 一下)

`assets.json` 格式(前3个必填,后3个按需):
```json
{"host_anchor":"assets/host.jpg",
 "product_desc":"高小参鲜蒸海参,深蓝金色包装",
 "products":{"hero":"assets/单只正面.jpg","hero_alt":"assets/剖面.jpg",
             "礼盒":"assets/礼盒.png","内包装":"assets/内包装.png","单根":"assets/单根.png"},
 "host_desc":"齐肩黑发,白色圆领上衣,居家亲切感",
 "forms":{"hero":["精华","滴管","膏体"],"瓶身":["玻璃瓶","泵头"]},
 "product_verbs":["涂抹","上脸","拍打"]}
```
- **host_desc**(推荐):主播外形一句话,会钉进每个口播段提示词——治"跨段穿着漂移"(实测坑)
- **forms**:产品形态别名表——默认表偏海参/生鲜,**换品类必配**,否则锚图路由匹配不上
- **product_verbs**:该品类的产品操作动词——完备性关卡靠它查"漏动作",默认表偏食品
- **★★人物锚定图铁律:一律 text2image 生成【新身份】,绝不从原片抽帧**(06-30 定,08-11 违规一次)。
  抽原片帧照搬的是**出镜人的真实肖像**,复刻他人视频时这是拿别人的脸去生成内容,合规上不该做。
  即梦 `text2image --model_version 5.0 --resolution_type 2k` 生一张是**免费**的,没有任何理由省这一步。
  ⚠**别把"产品锚图可用原片抽帧"这条串到人物上**:那条的前提是【自己的素材、自己的产品做自复刻】
  (07-24 七子白),两个前提在"复刻他人视频"时都不成立。我 08-11 就是这么串错的——
  顺手把产品的做法套到主播头上,还套到了别人的片子上。纯产品无人视频可省 host_anchor。

## 管线(A模式)

```
1 反推  python3 seed_reverse.py <video> --out run/shotlist.json
        → Seed2.1Pro原生视频,一次出:硬切分镜+台词转写+对齐+product_role+key_colors
        → 场景检测默认0.15(0.3会漏同机位跳剪);台词硬规:无人声的字幕/花字只进onscreen_text
1b 双反推(可选,重要投放片推荐——反推多花的token省的是Seedance重抽的钱)
        python3 k3_reverse.py <video> --out run/shotlist_k3.json
        → Kimi K3 API腿(同SCHEMA同切点源,可与第1步并行后台跑;K3全程开思考,慢,必后台)
        python3 merge_reverse.py run/shotlist.json run/shotlist_k3.json --video <video> --outdir run/merge
        → 出 dossier.md(逐镜并排+性别/运镜分歧信号灯+静音闸警告)+frames/(分歧点自动抽帧)
          +merged_draft.json(Seed实体基底+__alt_*运镜候选)
        → agent按铁律裁决:实体/屏字信Seed·运镜时序信K3·互斥分歧看帧·静音区文字不进台词;
          裁决时吸收__alt_subcuts细切点与绕拍/侧机位时间线进camera/action,
          删净__alt_*字段后覆盖 run/shotlist.json(下游只认标准schema)
1.5 清单 python3 needed_assets.py run/shotlist.json
        → ★列出这条视频需要哪些产品形态图(礼盒/内包装/单根/裸品/剖面…)+ assets 骨架
        → 拿这份清单向用户要图(每个形态都要,漏了即梦会自由发挥编产品),填好 assets.json
2 规划  python3 plan_segments.py run/shotlist.json assets.json --out run/segments.json --min-dur 4 --hard-max-cuts 4 --by-leg
        → ★**--by-leg 按生成腿分段**(08-10 定的主力架构):同段必须同腿,并给每段打 `leg` 标记
          package_text 平面印刷图案 → **mmh3**(¥0.11/秒,logo毛笔字三列小字实测零错)
          hero_real   三维形体/质感 → **jimeng**(四方对照唯一锚得住的;一票否决,同段有它整段走即梦)
          dynamic/none 人物氛围空镜 → **mmh3**(无形体保真要求,取最便宜)
          物理动作难的镜 → 人审在 segments.md 里把 leg 改成 `jimeng25`(2.5的真正强项)
        → ★**顺带落一份段级分镜 `run/segments.shotlist.json`,下游全部自动改吃它**(09-10 修):
          >15s 长镜会被拆成子段,镜号变成 `2a/2b/2c`,**原始 shotlist 里没有这些号** ——
          h3_prompt/qc_defects 会 KeyError 崩,director/qc_cast 会静默跳过(审了个寂寞还报"全部通过")。
          拆子段时 action 也按【段内时间窗】裁剪:整段 25 秒的动作挂到 8.3 秒的子段上,
          模型会把 25 秒动作压进 8 秒(09-08 热敷披肩实撞)。动作切不出足够分句时会响亮报,
          让你回 shotlist 把 action 按时间顺序断成分句 —— **别只改 segments.json,
          h3_prompt 从 shotlist 读 action,重跑一次就把你的手改整个覆盖掉**。
        → ★内置**临界点合并**:拆细与最短时长是对冲的(单独拆按 min_dur 付费,并进邻段只按真实跨度付)。
          临界 = min_dur × 本腿单价 ÷ 邻段单价,mmh3 并进即梦段 = 4×0.11÷0.742 ≈ 0.6秒 →
          短于此的 mmh3 碎段自动并回(实测撞见 0.04 秒碎段却要付 4 秒的钱)。
          ⚠反向不并:hero_real 碎段再短也隔离——形体错整段废,且并进去会把整段拖成即梦价(贵7倍)。
        → 规划完会打印**成本估算**(按腿分列),烧钱前先看见钱花在哪
        → ★若打印了「深度动作参考建议」:原样转述给用户(理由+翻倍积分),同意后加 `--motion-ref` 重跑,见「深度动作参考」节
        → 自动拆超长镜/分段(≤12s≤3切)/路由(口播mm·hero/包装i2v)/写提示词(带全产品动作)
        → ★快切片必开【填满模式】:后端有最短生成时长(即梦4s/海螺h3 5s),每段跨度才1~3秒时
          等于白付下限的钱。`--min-dur <后端下限>` 让不够长的段继续并镜;**必须同时给
          `--hard-max-cuts`**(不设闸会把9个镜头塞一段,超即梦"硬切5崩"红线和h3已验的3刀)。
          本片实测:10段50s → 8段42s,浪费39%→28%。默认 --min-dur 0 = 旧行为不变。
        → ★人审 run/segments.md:看分镜卡片 + 完备性关卡的"漏动作"警告,微调提示词/锚图/台词
2.15 ★★判片型(08-23 新增,立项档案之后、规划之前)
        python3 route.py run/
        → 从 profile.json + shotlist.json 抽结构特征,查 references/film_types.json 判型,给出后续生成方式。
        ★为什么必须先判型再生成:同一个改动在不同片型上一个是解药一个是毒药。
          实测(榴莲千层 08-23,双臂 n=3,统一网格):
          【画外主说话人】的片子必须**剧本先行**(台词写进 prompt 让模型自己发声)——
          画外音窗口里出镜者张嘴的帧从 37%(极差1~11,三卷崩一卷)降到 5~13%(六卷无一崩);
          而【主播出镜口播】恰恰相反:只有一个说话人、没有归属歧义,剧本先行只有丢原声的代价。
        ★片型库的键是【结构特征】不是题材名。"街头挑战/开箱/探店"不决定生成方式,
          "主说话人出不出镜/段内换不换人说/产品有没有可读文字"才决定,而这些反推已经产出。
        ★没命中任何片型时**不要照着最近一条片硬套** —— 回 film_types.json 加一条,
          把这条片的结构特征和路由写清楚(与 director.py 的 RULES 同一个规矩:翻一次车加一行)。

2.2 ★★立项档案(所有片必做,反推之后第一件事)
        python3 film_profile.py run/目标.mp4 --shotlist run/shotlist.json --out run/profile.json
        → 回答"这是什么片型":机位形态(胸挂POV/手持自拍/旁观/固定)、**拍摄者是谁、出不出镜、
          说不说话**、结构化演员表、声音层次、叙事阶段。
        → ★**必须人过目**:它驱动路由、机位措辞、说话人归属和演员表,判错了下游全错。
        → 不做这步的后果(08-21 榴莲千层):那条片主播只露手却是主要说话人,
          管线里没有"拍摄者"这个概念 → 8段全路由错、他的话被派给路人对口型、
          第一视角拍成了旁观视角。**每个环节各自猜,猜错也没人知道。**

2.3 ★演职表与资产(群戏/街采片必做;单主播片跳过)
        python3 needed_assets.py run/shotlist.json        # 报"要哪些产品图 + 哪些人设图"
        python3 cast_plan.py run/shotlist.json --out run/cast.json   # 聚出角色候选
        → ★**人过目 cast.json**:聚类是关键词匹配,可能把两个人合成一个(别名宁窄勿宽,
          合错=两个不同的人共用一张脸,比没有人设图更糟)。拿不准就回原片抽帧看,一条 ffmpeg 定案。
        → 单主播口播/vlog 会被 cast_plan 的"单主播片闸"拦下并提示不要建演职表(多日换装会被聚成假角色)
        python3 make_cast_sheet.py --batch cast_todo.json  # 生成 3:4 人设图入资产库(即梦订阅内免费)
        → 规格是 08-13 A/B/C/C2 实测定的:3:4 上排三肖像+下排三全身,灰底影棚。
          单张正面锚图会出重影,横排六视角会把人画老画暗 —— 别自己改规格。

2.35 ★资产审片台(本地网页,把"看不见"的那一关变成看得见)
        python3 asset_board.py --run run/ --out board.html   # 自包含 HTML,双击即开,不联网
        → 三栏与 needed_assets 同口径:【要你准备】产品 /【AI生成·你审】人物、场景
        → 人物卡 = 原片截图×3 + 已生成的人设图【并排】,一眼判断"是不是同一个人"
          (08-15 差点把「黑短袖大哥」和「黑背心运动大哥」绑成同一张脸,就是这种判断)
        → 页面上改名/改描述/勾确认 → 点「导出决策 JSON」→ 放回 run 目录
        python3 apply_board.py --run run/                    # 写回 cast.json + 资产库
        → ★标了"其实是别人,拆开"的**不自动处理**:拆成谁和谁是语义判断,猜错比不拆更糟
        ★为什么是本地文件不是云端页面:用户网络不稳时 claude.ai 打不开(08-20 实撞:
          连 GitHub 直连都连不上,要靠代理)。本地 HTML 离线可用,是这个工具的主场。

2.4 ★说话人标注(有画外旁白的片必做)
        python3 speaker_tag.py run/目标.mp4 --shotlist run/shotlist.json --profile run/profile.json --cast run/cast.json
        → 出**带时间戳的说话轮次**(不是一镜一个说话人:长段里问答来回好几轮,一个标签没法执行)。\n        → speaker 三选一:`operator`(画外拍摄者→全员闭嘴)/ 在册角色 / none。\n          实测榴莲千层 48 轮里 29 轮是 operator —— 六成的话不该有人对口型。
        → ★人审那张对照表(带★的是信心非"高"的);归不上册的说话人会单独列出来交你定夺。
        → 确认后 --apply 写回 shotlist 的 speaker/voice_mode。
        → 不做这步的后果:旁白镜里所有人都在对着画外音张嘴(小禾家 44 个台词镜里 15 个是旁白)。

2.5 h3提示词(走 h3 腿时需要:mmh3 或 rh)
        python3 h3_prompt.py run/segments.json --shotlist run/shotlist.json --assets assets.json --out-dir run/prompts
        → plan 出的是【即梦风格中文提示词】,h3 吃不了 → 本步转成官方 Ref2VA 六段式:
          机械部分全自动(切点MM:SS.mmm换算/Picture编号与逐图声明/retention表/人数硬约束/
          ★台词自动剥离/说话或闭嘴指令/贴字指令过滤/每镜钉死环境防参考图带跑背景);
          中文动作用 Ark 一次批量译英(--no-translate 可关,留中文由 agent 润色)。
        → 敏感词**只报警不自动改**:h3 拒稿不计费,先按原样试,被拒再消毒
          (08-09 教训:预防性把"针管"改成"美妆工具柄",道具直接走形,钩子废了)
        → 产物 prompts/<seg>_h3.txt + images.json,**并自动灌回 segments.json**
          (★gen_segments 只读 plan 里的 prompt/images,从不读 prompts/ ——
           08-16 就因为没灌回,拿旧提示词白跑了一整轮 17 段而全程不报错)
        → 单段参考图自动限流到 3 张(RHTV 实证:参考越多一致性越弱),
          优先保住【有台词的说话人】的人设图 + 1 张产品图
2.8 ★约束闸  python3 director.py run/segments.json --shotlist run/shotlist.json [--prompts-dir run/prompts] [--strict]
        → **生成前的最后一道闸,别带着缺失去烧钱**。它检查的不是"提示词写得漂不漂亮",
          而是"某个必须的约束在不在"——统计全部翻车案例,**没有一条是表达问题,全是约束缺席**。
        → 9 条规则各自记着"是被哪次事故教出来的":人数硬约束/施术受术方(左右)/节拍时间分配/
          产品外观优先级归锚图/逐镜着装已剥离/贴字特效已剥离/第三方IP已剥离/状态参考图环境钉死/
          台词不进h3提示词。命中"该加而没加"就报警并给出可直接抄的修法。
        → ★**每翻一次车就往 director.py 的 RULES 加一行**——把"想到要加什么约束"固化下来,越用越可靠。
          08-11 回归验证:翻车那版提示词被精确抓出 2 处缺失(左右手/节拍),修正版全绿。
3 配音  python3 tts_segments.py run/segments.json --out-dir run/audio/seg
        (降级:复用原音时跳过此步,改用 cut_audio.py 按段切原片音频:
         python3 cut_audio.py run/segments.json --video 原片.mp4 --shotlist run/shotlist.json --out run/audio/seg
         ★内置即梦2秒上传下限闸(静音垫尾),并顺产镜级 timing.json 精确字幕轴;
         ★只垫到2s下限别垫满规划时长,垫满会触发gen误加时每段白烧1秒)
        (第三档·换声不换演:python3 vc_segments.py run/audio/seg --target 音色.wav —— Seed-VC把
         原片切段音频转成目标音色,表演节奏/语气逐帧保留,治"复用原音怕查重/重配丢表演"两难;
         ⚠️整段单音色,群戏需先说话人分离,未实现)
4 生成  python3 gen_segments.py run/segments.json --clips run/clips --audio-dir run/audio/seg --auto-leg --concurrency 3
        → ★**--auto-leg 按每段 leg 自动派发**(配合 --by-leg 使用):mmh3 段进并发池(实测真并行)、
          即梦段走串行(通道并发=1)。一条片子里两条腿各跑各的,成本和质量同时兼顾。
        → 串行(VIP并发=1),口播段双图对口型,hero/包装段动你真图。断点续跑,--dry-run先看
        → ★**即梦默认档=`seedance2.0` 非VIP慢速排队**(8积分/秒,比VIP便宜43%)。代价是真排队
          (实测18分钟起),轮询预算已自动放到60分钟;超时不代表失败,submit_id 在 meta.json 可补抓。
          急件/要1080p·4k → `--jimeng-model seedance2.0_vip`;长段不想切碎 → `seedance2.5`(26积分/秒,时长上限30s)。
        → **五条生成腿**:即梦CLI(季卡12320积分/月,产品形体锚定最准) | 火山Ark(--i2v-backend ark,按token,★含人脸参考图政策级拦截,只走纯产品i2v) | 小云雀(--i2v-backend xyq,独立credits池) | RunningHub海螺h3(--i2v-backend rh / --mm-backend rh,钱包≈¥0.48/秒)。CLI积分紧张时把i2v卸给Ark/小云雀省池子。
        → ★**口播mm段有两条腿**:即梦(默认,口型最稳)和海螺h3(--mm-backend rh,audioUrls驱动口型,08-07参阿婆46s片实证)。积分耗尽时口播不再卡死,但要花钱且首用须跑 qc_lipsync 验收。
        → ★走 h3 腿(mmh3/rh)前先跑 `h3_prompt.py`(下方 2.5 步)出六段式提示词,别拿即梦的中文提示词硬喂
        → ★用 h3 腿前先读 `references/h3/README.md`:**审查只审prompt文本不审图/音→台词一律不进prompt**、产物多送0.5s尾帧、结果URL只活24h、Ref2VA六段式提示词与 [Shot N] At MM:SS.mmm 段内调度。
        → ⚠小云雀腿 07-17 实测(mini_lite档):i2v 是**参考重绘语义**非首帧锚定——构图/质感优,但**品牌文字会绘错**且左上角烧死「AI生成」水印→**只接无文字要求的氛围/质感镜**,带包装文字的镜必须即梦。xyq_gen.submit_mm(带--audio口播)仍是实验性。
        → ★用小云雀腿前先读 `references/xyq_notes.md`:与即梦声音范式根本不同(台词/音效写进prompt模型自生语音 vs 即梦wav驱动口型)、prompt黄金公式、实测记录与分工定位。
5 装配  python3 assemble.py run/segments.json --clips run/clips --audio-dir run/audio/seg --out run/成片/FULL.mp4 [--trim-to-plan] [--master-audio 原片.mp4] [--size 1440x2560]
        → ★A模式复用原音的正解 = `--trim-to-plan --master-audio 原片.mp4`:先把每段画面裁回
          segments.json 的 end-start 跨度(但不短于本段配音),再整条原音直铺。
          不裁则全片被撑长(plan 的 duration=ceil(end-start) 本就多到1s,海螺还多送0.5s尾帧),
          段尾出现"音已停画还在演"的空窗;逐段拼音轨还会把误差累加成漂移。
          装配后会硬校验画面总长 vs 原音,差>0.3s 报警(有缺片时别用 --master-audio)。
6 评委  python3 judge.py run/成片/FULL.mp4 [--target 原片.mp4]
        → Seed2.1Pro 按三看漏斗90分制打分+整改建议;--target 时成片+原片一起上传做真保真度对比
        → 成片>35MB 自动压 360p 小版上传(base64 上限)
7 字幕  python3 export_subs.py run/segments.json --shotlist run/shotlist.json --out run/成片/FULL
        → FULL.srt(句级粗对齐字幕)+ FULL_贴字清单.md(原片屏上贴字的时间点+原文)——剪映照抄
8 交付  python3 deliver.py run/segments.json --mode draft|final|both --clips run/clips --audio-dir run/audio/seg --shotlist run/shotlist.json [--trim-to-plan --size 1440x2560]
        → ★装配开了 --trim-to-plan 的话交付也必须开,口径要一致:否则视频轨用未裁的原始clips
          而字幕轨是原片时间轴,两轨对不上(08-09实测草稿51.7s vs 成片30.4s)
        → draft:★剪映草稿(推荐)——视频轨逐段(段边界即切割点)+配音轨+字幕轨逐句+贴字参考轨+空BGM轨,
          素材copy进草稿目录自包含;打开剪映草稿箱直接精剪,不用再切拼好的片子
        → final:在 FULL.mp4 上烧字幕+可选 --bgm 混音,出"能直接投的及格版"(FULL.mp4 本身不动,它是judge输入)
        → 字幕轴优先吃 audio/seg/timing.json(tts产出,逐句真实时长);缺则按字数占比粗对齐
```
> 评委分低多半是"原片结构本就烂"(口播/多卖点/开箱)——忠实复刻分低正常;要高分走 B 模式方法论优化(单卖点+三倍画,见 qianchuan/04)。

**人审闸口(第2步后)是硬要求**——生成前必让用户过 `segments.md`,尤其看完备性警告和 hero 段锚图选得对不对。这是把"垃圾进垃圾出"挡在烧积分之前。

## 深度动作参考(10-09 男装片实证;`depth_ref.py`)

**一句话**:原片 → 本机深度图视频(只剩远近,没有脸/衣服纹理/颜色/花字)→ 当 `@视频1` 喂即梦 →
动作逐帧跟原片,长相/衣服只听人设图和产品图。

| 10-09 同段四组对照(12s 一镜到底穿搭展示) | 动作 | 脸 |
|---|---|---|
| 只有文字(现行) | 大致那几个动作 | ✓ 人设 |
| 彩色原片当参考 | ✓ 逐帧 | ✗ **原片演员**(连裤子都抄) |
| 去色原片当参考 | ✓ 逐帧 | ✗ **原片演员**(只是头发变黑) |
| **深度图当参考** | ✓ 逐帧 | ✓ 人设,衣服细节全对 |

**★是否使用,agent 不得自行决定。** 以 `plan_segments` 打印的「深度动作参考建议」为准,原样转述给用户
(理由 + 翻倍后的积分),**用户同意后**才开:
```
python3 plan_segments.py run/shotlist.json assets.json --out run/segments.json --motion-ref suggested   # 或 S1,S3 点名
python3 depth_ref.py run/segments.json --video 原片.mp4      # 出 run/refs/<seg>_depth.mp4,写回 video_ref
python3 gen_segments.py run/segments.json …                  # 即梦自动带 --video
```
- **建议**:单个连续镜头 ≥4s 且镜内 ≥3 个肢体动作(穿搭展示/舞蹈/表演)。按"镜内"算 —— 1 秒一切的快切片
  (张九九)每镜一个动作,文字就写得清,不该用。
- **可选**(要点名):长镜(≥8s)里手部操作 ≥4 处(削皮刀那种一镜到底演示)。
- **否决**:B 模式 + 手持产品 + 形状与原片不同 —— 深度图会带入原片产品的形状。
  在 assets.json 写 `"product_shape_same": true/false` 显式声明;穿在身上的(衣服/饰品)不受影响。
- **成本翻倍**:参考视频按秒计费、与输出同价(即梦 12s:168→336 积分;秘塔 H3 输入 122.4 + 输出 122.4,
  两边账单实证)。方舟 API 按官方公式含输入时长但单价降档,约 1.2×(未实测)。
- **腿**:即梦。H3 也读得懂深度图,但只按"有哪些动作"重演,节奏/景别不跟(10-09 实测),只适合便宜试稿。
- **提示词写分工句,不写否定句**:"@视频1 是动作/走位/运镜的唯一来源…外观只以图片为准"(plan 自动加)。
  "不要沿用@视频1里人物的长相"这类嘱咐**完全压不住**视觉信号 —— 要把信息从参考里拿掉,不是叫模型别看。
- 花字/字幕不用遮:平面文字在深度图里自动消失。参考要 `-an`(脚本已做)。
- 出完先抽帧看一眼:脸、衣服纹理应完全看不出。头发外轮廓会残留一点,发型可能轻微被带。

## H3 音画同出(talking)+ 内嵌音轨装配(Kimi 线 09-21 实证,10-10 合入)

**口型漂移的真相:病在装配簿记,不在模型。** SyncNet(±40ms 标定)批量测过:两条后端生成时音画都对齐(≤0.04s)。
模型开口有约 0.1-0.3s 的 lead-in,后端会把输入音频**按口型对齐后的位置**嵌回 clip;旧装配却拿原始 wav 铺在段首,
把 lead-in 又放了出来(C 海参 S1 实测 +0.275s)。**现在 `assemble` / `deliver` 草稿的段配音一律取 clip 内嵌音轨**
(该段喂过音频、或是 talking 段,且 clip 带音轨时),修复后 +0.04s。没喂音频的段照旧铺 wav 或静音。

**talking 模式 = 台词写进 H3 提示词,不给参考音频,让 H3 自己开口。** 同步和情绪是生成自带的,逐字 3/3、价格机制词一次过审。
和现行的 TTS 加音频驱动链**按片二选一**:要品牌声(TTS 克隆)走旧链,要同步和情绪走 talking。
```
# 段级 "talking": true(逐段),或 h3_prompt --talking(全片,段级标记优先)
python3 h3_prompt.py run/segments.json --shotlist … --assets … --talking
python3 gen_segments.py run/segments.json --clips run/clips --mm-backend mmh3   # talking 段自动不带音频、按字数估时长(3.4 字/秒)
python3 qc_talking.py run/segments.json --clips run/clips    # 逐字率 ≥85% + SyncNet ≤2 帧且 conf≥3;产出 qc_talking.json(含词级窗)
python3 assemble.py run/segments.json --clips run/clips --out FULL.mp4 --trim-to-plan   # talking 段按实测语音尾 +0.35s 裁
python3 deliver.py run/segments.json --clips run/clips --full FULL.mp4 --mode final --trim-to-plan   # 有词窗自动走逐词卡拉OK字幕
```
- **只走 H3(mmh3)**。即梦的口播段要音频驱动,不支持这个模式。
- **说话人**:有演职表时,台词按 speaker 标注挂到具体 `<Subject N>`,标注缺失时退回"画面中央"的启发式。
  旁白镜写成画外旁白说、画面里的人闭嘴;都判不出就用中性措辞,不猜性别。(Kimi 原版恒写 "She",10-10 合入时修)
- **语气**:`assets.json` 的 `tone_map`(镜号或段名)> 段级 `"tone"` > 缺省"直播带货高能量"。剧情片要自己写 tone,缺省语气不合适。
- talking 段带 `speech_turns` 时,口型时间轴会被丢弃并报警(时间轴的措辞全以 `<Audio 1>` 为前提)。
- **QC FAIL 定向重抽**:`DAIHUO_NO_REUSE` 在本地没有意义。本地片库从不自动复用,只在账本里提示。
- **SyncNet 是可选的**(`config.lip_python()` / `syncnet_home()`,见 `qc_sync_offset.py` 文件头)。没装时口型一项记"未测",只凭逐字率判,并报警请人眼抽看。
  Kimi 原版在没装时判 FAIL,会让逐字 100% 的段也 FAIL。
- 繁简表要逐次补:新声源可能转出新的繁体字(`帶/凍` 就是 talking 首跑补的),否则会出假 replacement。
- 实验脚本在 `experiments/`(路径是 Kimi 机器上的,只当证据和措辞参考)。

## 台本层 + 段状态账本(10-09 合 Kimi 线时立的两块地基)

**台词只写一份,下游只拿投影(`dualtext.py`)。** shotlist / segments 的 `dialogue` 是唯一源头:
字幕/贴字/草稿拿 `display()`,TTS 拿 `tts_text()`(发音 + 读音规则表),生成提示词的 `台词{}`、
剧本先行、对账拿 `speech()`。**不许在别处再解析标记**(Kimi 线就是只给了 TTS 和字幕,
plan 把原始标记灌进了即梦提示词)。语法(hypit Script 子集):

| 写法 | 屏上 | 念 | 用途 |
|---|---|---|---|
| `拍<2\|两>斤` | 拍2斤 | 拍两斤 | 数字/单位/多音字定读法 |
| `<¥59.9\|五十九块九>` | ¥59.9 | 五十九块九 | 价格口语读法 |
| `<组件化\|>` | 组件化 | 组件化 | 钉成不可拆词组 |
| `<\|嗯>` | (不显示) | 嗯 | 只念不上字幕 |
| `\|\|` | 断句 | — | 字幕在这里换下一条 |
| `@{价}…@{/价}` / `@{福利!}` | — | — | 语义区间/时刻点,`word_align` 解成帧窗,贴字绑锚跟着配音走 |

读音规则(参→身、QQ弹弹→谈谈…)只有 `dualtext.PRON_RULES` 一个家;项目特有的放 `pron_fix.json`。
分镜表一律经 `shotlist.read()`:视觉字段全角 `,;():` 归一成半角(剥词正则只认一套),
台词标记写错在读入时就炸。

**词级对齐(可选,零积分):** `word_align.py segments.json --audio-dir audio/seg --out anchors.json --report 对照表.md`
—— 对照表里的 replacement 是 TTS 读错/漏读的**证据**(同音异形 = 多音字读错,不是 ASR 噪声)。
`grid_words.py 目标.mp4 --around "一句台词"` 出带词标签的帧网格,反推/人审共用。

**段状态账本(`run_state.py`,clips/manifest.json):** 生成/下载/验收/复用全记账,**复用必须显式选择**。
```
python3 run_state.py run/clips status
python3 run_state.py run/clips reject S3 --note "手指粘连"   # 坏片挪进 rejected/,下次 gen 原样重摇
python3 run_state.py run/clips accept S1,S2,S4              # 验收 → 登记进片库(<资产库>/clips)
python3 run_state.py run/clips reuse S3 --key <key>         # 显式复用片库里已验收的同参数片
```
- **坏帧要重摇就 `reject`**:坏片留档进 rejected/、账本记下原因,以后能对比哪一卷是哪个问题。手删 mp4 也会重摇(已下载的段不会被打捞),只是丢了记录。
- gen 只打捞【提交了没下到】的段;片库命中只**提示**不自动用;片库只收 accepted。

**画外音占比高的片(街采/挑战类):抽 3 卷挑最好的,别死磕措辞。** 10-09 实测同一条提示词三卷
画外音时段张嘴率 9% / 17% / 55%;换 hypit 模板结构也没改善(均值 40% vs 27%,n=3)。
验收用 `qc_offmouth.py <dir>`(按实际说话窗抽帧 + 盲评网格),挑完 `run_state accept` 中选那卷、`reject` 其余。

## 关键规则(写提示词/生成时)

- **转换必带全「主体+动作」**:反推里"手把海参掰开"这类动作,写提示词时必须原样带上,别概括成"海参剖面"(否则怼静态内脏→诡异)。plan_segments 已结构性保证 + 完备性关卡兜底。
- **hero 食品镜**:优先最完整/有食欲的产品形态 + 轻运镜(切/掰有动作),**别推近怼进质感/剖面**。
- **真实质感/包装文字 → 动你的真图(image2video)**,别纯生成:海参质感、包装"高小参"字,image2video轻运镜能保住;text2video/重生成必糊。
- **口播台词与配音逐字一致**,否则口型提前结束(即梦坑)。
- **产品材质写死**(颜色+材质+形状),避审核敏感词(国货/治疗/液体接触皮肤)。
- **TNS消毒词表(洗护/身体类必查,07-24量产16条实测)**:吊带/浴裙/抹胸/裸露肩颈/腋下清洁/瞪大双眼张嘴/泡沫遮口鼻仅露眼 → 圆领家居服/展示颈部以上/惊讶表情/泡沫覆两颊。TNS失败**不扣积分**,先原样重试(人脸误拦是概率性,常一试就过),再消毒重试,三死出手动工单(网页版拖拽,官方QA:平台内引用的图不过真人脸检测,下载重传才概率拦)。
- **实体拍必抽帧终审(铁律,张九九3血案)**:凡"产品长相/道具/谁在场"类拍点,写提示词前必抽原片帧验证。K3实体幻觉惯犯(把三角皂看成馒头/把卸妆棉看成洗脸扑/把被窝看成冰箱);双反推裁决**按字段不按整包**——时间轴/运镜可信K3,实体一律帧证据说话,Seed实体基底地位不因K3连胜动摇。
- **旁白型视频的路由陷阱(08-09 已在 plan_segments 结构性修复,不必再手构)**:全片无台词时旧版 plan 会把人物表演镜误路由成 i2v 产品质感模板(钩子直接丢失)。现在 `seg_role` 认【显式 `host_on_camera=true`】即判口播,无台词也走 mm(拿得到主播锚图,提示词自动写"本段无台词,口型闭合");仅露手的 hero_real 镜(host_on_camera=false)不受影响仍走 i2v。旧 shotlist 无该字段则行为不变。两腿反推的"台词"互相打架且和贴字雷同=贴字幻听,dialogue 全清空按旁白处理,原音复用自带真VO不受影响。
- **品牌词剥离**:原片里的第三方品牌(包袋/粉扑/假货标)一律不进提示词;打假型的假货道具写"无标识粗糙皂"。**第三方 IP 同理**(电视里在放的动画/影视),`h3_prompt.py` 对《》书名号会报警,需人工从 shotlist 抹成泛称。
- **★★锚图的描述只准描述【这张图里有的东西】(08-09 美吉吉2 血案,治根)**:`assets.json` 的 `product_desc` 常常一句话同时描述多个形态("奶黄三角皂体…米粉色三棱锥纸盒印有李时珍logo…"),`h3_prompt` 早期把整句贴到每一个产品锚图的定义上 → 那张图里只有皂,文字却说"这张图还有个印着logo的纸盒",**等于主动指使模型去画一个它没有任何参考的东西**,结果凭空多出方盒子、「李时珍」写成「李迁新」、整面文字镜像反写。
  修法:`assets.json` 加 **`form_desc`**(逐形态描述,键同 products),`h3_prompt` 优先用它;缺省时退回保守句"只画 <Picture N> 里可见的,**不得添加图中不存在的包装/盒子/容器/配件**",并列出缺 form_desc 的形态提示补写。
  ⚠**注意这不是"漏传锚图"**,现有的「锚图缺失」报警(提示词提到某形态但 assets 无图)覆盖不到——assets 里明明有盒装图,病在描述泄漏。两者要分清:漏图→补图;描述串形态→拆描述,**别用"每段都挂上所有形态图"去掩盖**,那既贵又会让不该出现的东西进画面。
- **★逐镜着装描述必须剔除,服装归 host_desc + 锚图统一治理(08-09 定,治多日打卡 vlog)**:这类片的分镜表会逐镜写"换穿白色蕾丝吊带""穿蓝白边吊带背心",而主播锚图只有一套衣服 → 提示词一边说"必须与@图片1完全一致"一边说"她穿吊带",**自相矛盾,模型必漂**(07-22 七子白量产时只能整片手工统一穿着)。`h3_prompt.py` 已自动剥离(括号内着装注、纯着装从句),顺带躲开即梦 TNS 的吊带/抹胸类敏感词。
- **★后期特效指令要和贴字一起剔**:"画面叠加白色虚线圆圈圈住…""箭头指向""高亮"这些不是拍出来的,让模型画会画进实拍层。`h3_prompt.py` 的 POST_WORDS 已覆盖。
- **★敏感词报警要扫【产物】不扫原始分镜表**:着装/贴字/IP 都已在生成时剥离,再扫原文会满屏假警报——**假警报会让人对真警报脱敏,比不报更糟**(08-09 首版实犯)。中英文都要扫(译英后 camisole/syringe 这类中文扫不到)。

## 外部方法论:`seedance-20`(融合进来过,但一直没人用)

**副本在 `/mnt/e/jimeng/skills/seedance-20/`**(06-29 拉的 v6.1.0;上游 `Emily2040/seedance-2.0` 已到 **v6.7.0**,
`references/` 58→86)。09-05 核对发现:它的 15 个核心概念在本仓**零命中** —— 当初融合了,
但没在任何地方留下入口,等于没有。下面是核过一遍后**确实对得上我们病症**的四块,已摘进来;
要用全量(directing-engine / retake-protocol / multishot-grammar 等)再去读副本。
⚠它全部材料的证据等级是 **field-observed(实践观察)**,不是平台官方保证 —— 和我们自己的实验同级,
**不能拿它推翻我们的实测**,只当同方向的独立旁证。

### ① Authority Order —— 我们缺的正是"该删哪句"的判据表(v6.7.0)

本项目头号病是提示词自相矛盾,铁律是"**把打架的那句删掉**"。但删哪句?我们一直是一事一议。
它给了可复用的九层排序(高者胜,低层永远不许静默压过高层;牺牲了哪条要说出来):

| 层 | 内容 |
|---|---|
| 1 | 安全 / 版权 / 肖像 / 平台政策 —— 永不交易 |
| 2 | **接口已验证的硬限制** —— 接口会拒的东西不叫提示词 |
| 3 | 用户明确的必须项 |
| **4** | **Reference contracts —— 每个资产必须提供什么、必须保留什么、【绝不许迁移】什么** |
| 5 | 连续性(身份 / 空间 / 时间 / 道具归属 / 音频状态) |
| 6 | 物理因果与**动作可读性**(观众读不出来的拍点等于没发生) |
| 7 | 镜头与剪辑逻辑 |
| 8 | 风格 / 色调 / 氛围 / 装饰细节 |
| 9 | skill 自己的默认值 —— **第一个该让步的,不是最后一个** |

★**一条约束属于哪层,由它管什么决定,不由谁提出决定**(否则用户说的每句话都挤进第 3 层,排序就失效了)。
★同层内:已验证 > 推断,用户说的 > 我们假设的;再平就问,别猜。
★**拿它复核我们自己的结论,是对的**:09-04 `qc_assets` 报出"提示词禁止 hand,而 hand 就在挂给它的参考图里"
  —— 第 4 层 vs 第 7/8 层,**reference contract 赢 → 改图**。这和我们 08-25 自己摸出来的判据
  (「不要X」如果对应一个可以修的资产,它就不该存在)是同一个结论,但那是单点,这是排序。

### ② 口型:我们 8 月烧掉两周的那个问题,它 6 月底就写下来了(v6.3.0 `audio-guide`)

⚠**这批材料是 v6.3.0(2026-06-29)加的,而我们的副本时间戳是 Jun 29 18:11、版本 6.1.0 —— 差几小时错过。**

- **语音与口型是紧耦合的**:"asking for a moving mouth with no voice is unreliable,
  **and the model tends to voice the line anyway**" —— 别指望静音口型,要绕开它设计,不是用措辞压。
  ★这与我们 08-22 五臂实验的结论**一致**(动音频最狠的两臂最差),而且能**提前预测**它。
- **声学预算 ≠ 可靠同步预算**,后者低得多才是真限制。英语 ~16-20 词/15秒;
  **普通话同步最强**(按字/音节数不按词)。安全单位是"一句话≈一口气"(~1.5-2.5s,一个意思)。
  ★我们 08-25 的"密度假设"(7.3字/秒→判没生成语音)烧了 886 积分才证伪 —— 那两个是不同的东西
  (说不说得出来 vs 同不同得住),但手里有这张表会摆正得更快。
- **voice-reference 是个"lip-sync compiler"**:在支持语音参考的通道上,挂一段真实语音,
  模型会**同步到它而不是自己合成**,"the most reliable field-reported path for non-English dialogue"。
  ★这正是我们 08-23 路线B(TTS 分轨)独立重新发明的东西。仅限自己录的/已授权的声音。
- **音频参考与视频参考打架时,上传前把视频参考静音**(要音频控时序的话);
  必须保留视频声时就显式写优先级:`@Video1 只控运镜/运动;@Audio1 控节奏与能量`。
- ⚠**有一条与我们实测不符,别照抄**:它说即梦的 lip-sync 是"默认关闭的 toggle"。
  我们走 CLI / multimodal2video 的路径上口型是驱动得动的(08-23 路线C 实测),
  那条大概率只对 Dreamina 网页 UI 成立。**这正好是下面第③条要区分的东西。**

### ③ 能力要分四层验证,"支持"是个被压扁的词(v6.7.0 `capability-map`)

一句"支持"其实压着四个独立问题,它们**因不同原因失败**:

| 层 | 回答什么 | 什么样的证据才算数 |
|---|---|---|
| 模型能力 | 模型到底能不能做 | 模型级文档可以描述一种模态,却不说哪个产品暴露了它 |
| **平台可用** | **这个平台、这个操作**暴露了吗 | 可用性是**按操作**算的,同平台的兄弟操作证明不了什么 |
| 请求语法 | 在请求里怎么写 | 一个示例只证明一种写法存在,不证明它通用 |
| 返回遵从 | 输出到底照做了没有 | 只有实际跑出来的一条才回答得了,**而一条只是一次观察,不是保证** |

★这正是我们栽过的两次的通用形式:08-10「把渠道价当模型价」(RunningHub ¥0.48 → 误判 h3 比即梦贵,
  真实是 ¥0.09~0.11)是**平台层冒充模型层**;「h3 平面印刷强、三维形体弱」是**返回遵从层**的结论,
  不能推广成模型层。★接一条新腿时,四层各问一遍再下结论。

### ④ 位置比数量贵:提示词开头那一句最值钱(v6.7.0 `anti-slop-lexicon`)

注意力是预算,**同一个词放在开头比放在末尾贵**。"开头一个空洞的形容词,比约束尾巴里三个还糟。"
→ **开头必须给主体和它的动作**,不能给景别/机位这类元数据。
⚠**我们自己就在犯**:`plan_segments.build_kou_prompt` 的每个镜头从句是
  `{shot_size}{camera},{action}` —— 开头正是它点名的那个 inversion(上游 v6.7.0 还专门修了自己 README 里同款错)。
  ★**没改**:动生成侧行为,按纪律要先单段 A/B 再全量(范式变更先单段单摇,08-23 那 1568 积分的教训)。


## 已知坑索引(踩过的)

- **下载**:`dreamina query_result --download_dir` 会截断成坏文件(NAL错)→ 必须从 `video_url` 直接 urllib 下载(gen_segments 已内置)。
- **拼接**:异源 mp4 直接 concat 会 NAL 错 → 先逐段归一化(scale+pad720x1280+setsar)再 concat(assemble 已内置)。
- **口型/音轨**:段配音 pad 到该段视频时长、对齐段起点;别用 `-map` 覆盖乱时轴。
- **★成片被撑长/段尾空窗(08-07参阿婆片挖出,四条腿通病)**:`plan` 的 `duration=ceil(end-start)` 本身就比真跨度多到1秒,海螺 h3 还额外多送约0.5s尾帧 —— 46s 原片装出 49.4s,段尾"音已停画还在演"。**修法=`assemble.py --trim-to-plan`**(裁回 end-start,但不短于本段配音,B模式改词变长的段不会被切掉半句);A模式再叠 `--master-audio 原片.mp4` 整条原音直铺(句间停顿全是原片自带的,天然对齐,不靠逐段拼)。此前一直被 apad 静音垫住没人察觉,不是 RH 独有。
- **★画外音段被误判成口播(08-07实翻车,已在 plan_segments 结构性修复)**:`seg_role` 旧兜底"有台词即 kou"会把吃播/菜品/画外音空镜(`host_on_camera=false` 但有台词)路由进 mm 去对口型,产品钩子直接丢。现在该兜底**只对旧 shotlist(无 host_on_camera 布尔字段)开放**,显式 false 一律判 dynamic。老片行为不变。
- **★★对比演示片必加「施术/受术硬约束」+「节拍时间分配」(08-11 实翻车)**:功效对比片(搓手指变白、两条腿对比)的说服力全在"**被处理的对象前后对比**",一旦模型把对象搞混,整条片作废。实测:提示词只写"依次用皂搓一根手指、两根手指、整只手…最后展示"而**没写哪只手** → 模型左手搓右手,结尾却举起**左手**展示增白效果,前后矛盾,卖点归零。
  修法(和群戏的「人数硬约束」同一类——**模型不会自己维持这种约束,必须显式写死且反复重申**):
  ① **施术/受术方写死到左右**:"用【左手】持皂施力,被搓洗、被展示的【始终是右手】;每个阶段都是 左手拿皂→搓右手→右手变白;结尾举起展示的【必须是右手】,绝不能举左手;未被搓的左手保持原样作对比"。
  ② **一镜到底要给节拍时间分配**:一次生成 27 秒时模型不知道每个动作该占多久,只给顺序会平均用力(实测"搅拌咖啡杯"占了过长)。按 `0-6秒做A / 6-12秒做B / …` 逐段写死,并对该快的段标注"这一段要快,N秒内完成"。
- **★★★一镜到底 = 证据,不是拍摄手法(08-10 用户点透,决定能不能做)**:「功效对比」类带货片(搓手指变白、两条腿对比、只洗鼻子)**故意不剪辑**,因为"没剪辑"本身就是"效果没造假"的证据,有的还直接打字幕自证「全程只加速不剪辑」。
  → **复刻这类片子绝对不能拆段生成再拼**:一有接缝,说服力就废了。这和我们其它片子"切段生成再装配"的做法完全相反。
  → 于是卡在**单次生成时长上限**:即梦2.0/h3 都是 15 秒,**只有 seedance2.5 能到 30 秒**。所以 **2.5 的第二个定位诞生了:一镜到底且超过 15 秒的片子,它是唯一选项**(不是因为画质,是因为时长)。超过 30 秒的(如 52.9 秒那条)**现有模型做不了**,别硬上。
  → 这类片常还带**变速**("只加速不剪辑"),真实动作时长比片长更长,生成时要么演出快放感、要么正常速度生成再后期加速(后者更可控但要生成更长素材,成本再翻)。
- **★★切点两道闸(08-10 落地,治 ffmpeg 单阈值的两类错)**:旧架构是 ffmpeg 检切点 → 喂给 Seed 描述,**Seed 的镜数 100% 由 ffmpeg 决定**,它根本没参与判断。两类错都真实发生过:①**漏切**(叠化/软切,大明白测评 118s 只出 4 刀,实为 17) ②**假切**(固定机位+大动作+变速,耶耶大王 15.7s 报 5 刀,实为一镜到底)。
  **闸①粗判**:整段视频问 Seed"是不是一镜到底",判是则 cuts=[]。实测耶耶大王/锦鲤快快游都判对,还能读到画面上「全程只加速不剪辑」的自证贴字。
  **闸②裁决**:仅当 0.15 与 0.08 的切点数差 ≥2 倍时触发——低阈值出高召回候选,抽每个候选**前后各0.15秒的两帧**拼编号对照图,问 Seed"真剪辑还是快速动作/遮挡/变速"。
  ★**设计要点:把"时序定位"换成"两帧比对"**。实测让 Seed 自己在时间轴上找切点**不可行**——它按 ~1.07 秒的抽帧节奏报点,73% 的间隔卡在 1.0~1.1s 而真实剪辑只有 5%,±0.2s 命中率仅 21%(±1.0s 的 100% 是假象:真切点平均 1.15 秒一个,乱报也能蹭中)。**时间交给 ffmpeg(帧级精确),判断交给 VLM(语义),各干各的强项。**
  ★**原则:漏切比过切安全**。漏切只是让一段描述笼统些(plan 会按时长再拆);过切会**生成出原片没有的跳剪**——对"未剪辑即卖点"的片子是灾难,且每个假切点还要多付一份最短时长的钱。所以闸②宁保守勿激进。**别把"低阈值检出的都是真切点"当默认**——08-10 我就这么假设,把大明白测评切成 17 镜(真值约 2-3 刀),和锦鲤快快游切出 9 个假镜,是同一个错误犯了两次。
  防呆:候选 >40 不裁决(快剪片假阳影响小且拼图看不清)/两阈值差 <2 倍不跑闸②省调用/**闸①以 `cut_count` 为准不信 `is_single_take` 布尔位**(实测出现过"结论说有剪辑、依据说没剪辑"的自相矛盾)/任一闸失败降级回 ffmpeg 但响亮告警。`--no-cut-probe` 可关。
  ⚠Ark responses API 的图片格式:`{"type":"input_image","image_url":"<data URI 字符串>"}`——**image_url 是字符串不是对象**,写成对象直接 400。
- **★反推后必查三项,别直接往下走(08-10 定两项,09-04 补第③项)**:①**镜数/时长比**——正常带货片约 0.5~1 镜/秒;明显偏低(如 26.5 秒只出 1 镜)几乎一定是**同机位跳剪没检出**,不是真的一镜到底。复检法:`ffmpeg select='gt(scene,0.08)'` 看有没有切点,有就用 `--cuts` 显式传进去重反推(0.15 默认阈值对跳剪不够灵敏——坑索引原来只记了"0.3会漏",实测 0.15 同样会漏)。②**覆盖率**——`shots[-1].end` 对不上 `video_info.duration` 的 90% 就是输出被截断,长片要分段反推。
  ⚠即使降到 0.08,极淡的跳剪仍可能漏(实测某条前 15 秒仍被当成一镜,而它的 action 描述是复合的"先…随后…依次…"——**action 里出现多段式描述 = 这一镜其实是好几镜**,这是比阈值更可靠的人工判据)。
  ③**钩子镜(#1)必抽 2~3 帧核 `camera` / `host_on_camera` / `subject`**(09-04 另一台机器实撞):反推对第一镜报"固定机位+主播不出镜",抽帧却是"中景主播对镜头说话+连续推镜下移",**两个字段全错**,而 profile 还据此盖了个"全片三脚架固定"的全局判断,钩子整段被路由成无人口播段。**钩子镜信息密度最高、模型最容易概括错,这不是巧合是规律**;而且它是零成本零方差的抽帧证据,比任何生成侧实验都便宜。
  ⚠配套:`camera` 字段已改成**先出 `camera_evidence`(首尾构图差异)再定标签**。实测模型看得见运镜,被逼一步压缩成枚举词时才偷懒写"固定"——加判据、开 thinking 都救不了,**能救的是信息结构**(同 `probe_single_take` 那条"让它先数再判、只认那个数")。精度天花板是聚焦裸问("描述这段运镜"),钩子镜的 camera 值得再裸问复核一次。
  ⚠`host_on_camera` 判对错**是抽卡式的**(同一条片全片跑报 False、单独抽 6s 片段跑报 True),所以它属于"必须抽帧核"的字段,不能只信一次反推。
- **叠化转场让 ffmpeg 场景检测失效(08-07)**:转场几乎全是叠化的片子,0.15 阈值 16 刀只检出 3 刀,降到 0.08 全是噪点。→ 这类片**别信 ffmpeg 阈值切点,以反推模型的语义切点为准**(Seed/K3 看得出叠化边界);实在要人工兜底就抽帧核对,别调阈值硬碰。
- **★★★生图一律走即梦 `text2image --model_version 5.0 --resolution_type 2k`(08-10 实测:0积分,订阅内限时免费)**:即梦订阅权益页"图片5.0Lite 2K限时免费",CLI 里的 `5.0` 就是它;实测余额 88→88 纹丝不动。产出 1440×2560,比 RH 的全能图片G-2.0(¥0.1/张、1152×2048)**又免费又高一档**。
  `5.0Pro` = **8积分/张 ≈ ¥0.42**(不在免费清单),同题对比里它提示词还原最全、光线最自然——**要跨多段复用的主播锚图值得上 Pro,其余用免费的 5.0**。⚠"限时"免费,权益随时可能变,RH 的 key 留着当后路。
  ★铁律不变:**带品牌文字的产品图一律不生成,只用真图**(生图是重绘必改字;08-09 nano-banana-pro 把「李时珍」logo 糊掉、三列小字写成「植萃温初」)。生图只生"没有品牌文字的东西":主播锚图/场景空镜/道具。
  ★**09-04 补:如果还是有人拿生图洗产品图,要知道小字幻觉分两档,而且更像真的那档更危险**(另一台机器双模型实测):

  | 模型 | 大字(logo/品名/净含量) | 小字(配料表/日期/厂址) |
  |---|---|---|
  | 即梦 5.0 image2image | 全对 | **乱码档**——变乱码、日期 2026→2024、徽章上编出"深圳市",**肉眼一眼能看出不对** |
  | GPT-image2 | 全对 | **编造档**——排版完美但内容整段编错(「保质期」写成「净含量」、公司名"限责公司"、地址电话全编),**错得像真的** |

  → 判据:**密集小字(配料表/营养表/生产日期)永远不走生图,走真图裁剪**。真要用生图洗白底,产物必须挂 sidecar 记住真图来源,并拿产物对真图**逐字段**复检——只看"像不像"必然放过编造档。
  ⚠我们这边**不建 `prep_assets.py`(生图白底化)那条腿**:我们的痛点从来不是"图脏",是"图跟原片对不上 + 图里有不该有的东西(手/人/盘子)"(08-25 逐项对原片帧,几乎全错)。那个用**抠图/裁剪**解决更稳,不需要开这个必须再补一道闸才能收住的口子。
- **★★RunningHub 已退役(08-10)**:它的两个用途都被更便宜的替代——H3视频→秘塔(便宜4.4倍)、生图→即梦5.0Lite(免费)。`rh_gen.py` 保留可用(key 仍在配置里),但不再是默认。**教训:把渠道价当成模型价,会得出完全错误的选型结论**——我曾据 RH 的 ¥0.48/秒 判断"h3 比即梦贵",而 H3 的真实价格是 ¥0.09~0.11/秒,比即梦便宜 7 倍。
- **★★单价表(08-09 实测,即梦季卡口径:¥1959/3月、每月12320积分 → ¥0.053/积分)**:
  | 通道 | 积分/秒 | 折合¥/秒 | 定位 |
  |---|---|---|---|
  | 即梦 `seedance2.0`(非VIP慢速排队) | 8(5s=40分) | ¥0.424 | ❌**已判死,别用**:一枪5秒的任务排队**15小时40分钟**仍是 `Queueing`,且全程占死非VIP槽阻塞后续所有非VIP提交。省43%换"不知何时出片",有交付时间的活一律不能走 |
  | **MiniMax H3 秘塔渠道 768P** | — | **¥0.09~0.11** | ★**h3 首选**(`mmh3_gen.py`,base_url可换渠道)。原生 duration **4~15秒**(RH文档写的5~15是渠道自加的限制),按**实际产出时长**计费(含多送的尾帧),图片前5张免费、音频免费、视频参考按秒收 |
  | RH 海螺h3 768P | — | ¥0.48 | ❌同模型贵4.4倍,已退役 |
  | 即梦 `seedance2.0_vip`(快速) | 14 | ¥0.742 | ★**量产默认**。~5分钟出片;四方对照里**产品形体还原最准**的一条腿 |
  | RH 海螺h3 2K | — | ¥0.77 | 比即梦VIP还贵,只在确实要2K时用 |
  | 即梦 `seedance2.5` | **26**(5s=130分) | **¥1.378** | 最贵。换来 duration 4-**30秒**(2.0是4-15)、输入放宽到30图/10视频/10音频、支持纯音频输入;但只有480p/720p且VIP专属 |
  **算总账要算三层**:①单价 ②**后端最短时长的浪费**(见下条) ③重抽率。本片(30.5s/27刀)四条腿实付:即梦慢速¥17.8 < h3 768P¥20.2 < 即梦VIP¥31.2 < h3 2K¥38.5(实付) < 2.5整片一枪¥41.3。
  未测档:`seedance2.0fast` / `seedance2.0fast_vip` / `seedance2.0mini`。**CLI 要保持最新才看得到新模型**(`curl -fsSL https://jimeng.jianying.com/cli | bash`;07-22的b5ccc5d看不到2.5,升到a857341才有)。
- **★★慢速档的真实代价是【并发1 + 排队小时级】,不是"多等一会"(08-09 实测)**:非VIP `seedance2.0` 并发上限**同样是1**——队列里已有1条时再并发提交6段,**6段全弹 `ret=1310 ExceedConcurrencyLimit`**(好消息:失败**不扣积分**,积分纹丝不动)。而单段实测**排队57分钟仍 `queue_status: Queueing`**(日志ret=0干净,非僵尸单)。→ **并发换不来吞吐,N段片子就是N次串行排队**;8段片按此队长≈8小时。**省43%的钱=把30分钟拉成一整夜**。
  该条最终落定:**轮询满60分钟仍未出片**。⚠队长是晚间单次采样,可能有时段性,别当定律——开跑前先打一枪探当时队长再决定走哪档。
- **★即梦的并发槽:VIP 与非VIP 各一个,互不占用(08-10 实证)**:提交时序为证——18:27 一条非VIP 排入队列后,19:24 连提 6 条非VIP **全部** `ret=1310`、19:36 换 session 提非VIP 也拒,但 23:5x 提 **seedance2.5(VIP专属)通过**、00:14 再提非VIP 又拒。→ **一个 VIP + 一个非VIP 可以同时在跑**,批量时可以两条流水线并行(但每条内部仍是串行)。
  ⚠️同时暴露慢速档的真实上限:那条非VIP 任务**排到 15 小时 40 分钟仍是 `Queueing`**(过了一整夜),且全程占死非VIP 槽。**"慢速=多等一会"是严重低估,"过夜批量"也是——它是"不知何时"。已判死。**
- **★即梦的1并发绕不过去,别浪费时间试(08-09 已穷举)**:①换 `--session <另一个会话>` 提交 → 照样 `ret=1310`,**限流是账号/通道级不是会话级**(同档位内)(官方文档说所有生成命令都接受 --session,但它不分配并发槽);②网页版能同时排5条而 CLI 只给1条,原因是**两条不同的 API 通道**——CLI 生成走 `/dreamina/cli/v1/video_generate`,网页走 `/mweb/v1/...`,agent 通道被单独限流。唯一的绕法是用 BrowserSkill 驱动网页版拿槽位,**不建议**(拿稳定 API 换脆弱 UI 自动化)。
- **★★h3 是真并行(08-09 在 RH 实测,mmh3 同模型同理)**:3 段同时提交**全部接受、无并发限制**,完成于提交后 171/188/212 秒、**完成间隔仅 17-23 秒 = 真并行**(串行会相隔一个生成时长)。768P 实扣 **¥2.40/5秒 = ¥0.48/秒**,与推算吻合。
  → **8段片墙钟:h3 3路并发≈12分钟 vs 即梦慢速≈8小时**(慢速档已判死,见上)。
  **但排产要看池子状态,不是看单价**:即梦积分是**预付沉没成本**(季卡付完用不完也过期),
  ① **月池有余额** → 烧即梦,现金支出为零;此时"省"的是池子不是钱——慢速8积分/秒能让12320分产出1540秒素材,VIP 14积分/秒只有880秒,**同样一笔已付的钱多产75%**,愿意等就慢速、赶时间就VIP。
  ② **月池干了** → 走 **mmh3 秘塔 768P(¥0.11/秒 + 真并发)**,这才是花现金的时候;RH 同模型贵 4.4 倍不再用。
- **★★渠道价 ≠ 模型价(08-10 血证,选型时最容易犯的错)**:我曾据 RunningHub 的 ¥0.48/秒判断"h3 比即梦贵"并据此排产,而 H3 的真实价格是 **¥0.09~0.11/秒,比即梦便宜 7 倍**——差的全是渠道加价(RH 回执字段就叫 `thirdPartyConsumeMoney`,转手第三方 API)。**接任何新后端先问:这是渠道价还是模型价?有没有更靠近源头的通道?** 顺带:原以为要自部署才能到 ¥0.1/秒,结果现成的转售(秘塔)就是这个价,自部署这条路暂时不必折腾。
- **★★h3 的锚定是"平面印刷图案强、三维形体弱"(08-10 三方对照实证)**:同一天里 h3 把「李时珍」纸盒的 logo/毛笔字/三列小字**零错**锚住(生图模型在同一张盒子上却写出错字);但同样的锚图纪律下,**它把奶黄三角皂画成方形白皂**,而 seedance2.5 用同一张锚图画对了。且这是在提示词矛盾**已清干净**之后——不是提示词问题。
  **四方对照定论(同锚图/同音频/同内容,各抽一次卡)**:h3 768P ¥2.88 → ❌方形白皂;**即梦 seedance2.0_vip ¥4.45 → ✅三角形+橙色大理石纹完美还原,四者中最准**;seedance2.5 ¥8.27 → ✅正确。
  → **不是"2.5 独有优势",是即梦系整体锚得住三维形体,而且 2.0 就够、比 2.5 便宜一半。** 分工:**带包装文字/平面印刷图案的镜给 h3(便宜且零错);"产品本体形状要准"的镜给即梦 2.0;2.5 只留给物理规律/连续复杂动作难的镜**。⚠限制:各腿 n=1、无抽卡方差数据、测试段是 6 秒 4 镜的长段(段内镜头多可能加剧锚定衰减,短段未必)。
- **★h3 的画质在带货场景已可追平 seedance2.0**(08-09 用户看片结论)。所以选腿不再是"质量换价格",而是纯粹的成本与产能调度问题。
- **★后端最短生成时长是隐性成本大头(08-09 挖出)**:海螺h3 最短5秒、即梦最短4秒。快切片(李时珍片30.5s里27刀)每段真实跨度才1.6~4.8秒,**10段×5秒=50秒的账对着30.5秒的片,39%的钱花在被裁掉的画面上**。修法=`plan_segments.py --min-dur 5`(填满模式:段跨度不够就继续并镜)+ **必须同时给 `--hard-max-cuts`**(不设闸会把9个镜头塞进一段,远超即梦"内部硬切5崩"红线和h3已验的3刀)。本片 `--min-dur 5 --max-cuts 3 --hard-max-cuts 4` → 10段50秒压到8段42秒,浪费39%→28%;放宽到不限镜数是5段34秒(11%)但不安全。默认 `--min-dur 0` 行为与旧版逐字节一致。
- **★生图模型会改字,视频模型不会(08-09 同素材双向实证)**:同一个「李时珍七子白」纸盒,全能图片PRO(nano-banana-pro)图生图**把logo糊掉、三列小字写成错字**;海螺h3 拿同一张真图当参考图,**logo连®和直角框、毛笔字、三列小字全部零错**。原因=生图是"重绘"、i2v/mm的参考图是"锚定"。**所以"包装文字必须动真图"这条规律不是即梦专属,是 i2v/mm 这一类的共性;而生图模型永远不能用来合成带品牌文字的锚图**(可做构图/氛围/无字锚图)。
- **★状态参考图会连带迁移它的背景和光照(08-09 李时珍S8实翻车)**:挂了一张深棕影棚背景的"产品泡沫态"图当泡沫锚,产出的特写镜连背景一起变成深棕影棚,与浴室场景断裂(评委也点名"单独泡沫特写是杂镜")。修法=在该镜显式写死环境+把 retention 标成 partially_preserved 并写明"只借质感,不要它的背景和打光",重抽即修好。
- **judge 压缩小版会看漏(08-09,两条指控全假)**:成片>35MB自动压360p上传后,评委声称"复刻版全程在卫生间、未还原熬夜叙事"(实际卧室夜戏在片子里)、"硬切数远少于原片"(实测原片27刀 vs 成片26刀)。**judge 的差距清单必须逐条帧级/机器核实再采信**,别直接转述给用户。
- **h3 的脾性(mmh3/rh 两个渠道通用,08-07 参阿婆片 + 08-10 秘塔实证)**:①**内容安全审查只审 prompt 文本**——台词原文、价格词("大几十")、"内脏"类词写进 prompt 就拒(不计费但白等),**图片和音频不审**;故 mm 段台词一律不进 prompt,口型靠 audioUrls 自带。⚠这和即梦 TNS(审人脸审图)正相反,消毒策略不能互相套用。②结果 URL 只活24小时,拿到即落盘。③轮询 40×12s 对8s段不够(任务其实会 SUCCESS)→ rh_gen 已按段时长放大预算,超时凭 taskId `--fetch` 补抓不重复扣费。④段内多镜的身份保持弱于即梦(护目镜漂成细框眼镜、领夹麦消失),长段优先拆。⑤seedream4.5 文生图总像素须≥3,686,400(9:16 用 1440×2560)——A模式想换掉原片主播长相时,生新锚图比抽原片帧干净且避开肖像问题。⑥口型的实证证据是"产物音轨 vs 输入wav 的 RMS 包络相关0.976",**这只证明原音1:1零偏移复用,口型本身是肉眼判的**→新片首用先跑 qc_lipsync 帧级验收。
- **即梦**:必带 `--video_resolution`(1080p/4k 仅 `_vip` 档支持,非VIP只有720p);含真人脸 image2video 易拦(纯产品图安全);内部硬切 ≤3(5崩);VIP并发=1串行。**档位与价格见上面的单价表**;CLI 要常升级,否则看不到新模型(2.5 就是升级后才出现的)。
- **反推**:Seed2.1Pro 加 `thinking:disabled`+`stream`(快17倍不掉精度);Bash默认2分超时会掐长请求→后台跑。
- **反推模型脾性(07-19 K3对决,帧级实证)**:错误呈镜像——Seed病=静音字幕当口播(下游TTS会真配出这句)+运镜时序粗(漏侧机位/绕拍弱化);K3病=实体幻觉(员工性别人数看错/落地镜认成货架/1件彩虹T恤编成6~8件渐变陈列/花字"日常"抄成"日程")。故 merge_reverse 裁决分工=实体信Seed、运镜信K3;单模型跑时"开头台词"必过静音闸,外部反推的实体描述一律存疑。
  ★**没配 KIMI_API_KEY 时别把对账腿整条省掉 —— agent 自己就是活体对账腿**(09-04 另一台机器提出,08-07 有先例):你能直接读视频(ReadMediaFile 支持 mp4),亲自复核 Seed 的三个重灾区(camera 运镜 / host_on_camera / 实体长相),**重点复核钩子镜**。脚本缺 key 只是少了一条自动腿,不是"这一步做不了"。
- **代理**:★全管线(火山API/即梦CLI/即梦CDN下载)国内直连,**无需任何代理**——代理是 Gemini 反推时代的遗留,已随引擎更换退役。系统全局 http_proxy 已被脚本显式绕开;极个别网络下载 CDN 失败时才设 DAIHUO_DOWNLOAD_PROXY。
- **无 key 时的降级反推(08-07,备案不推荐)**:那台机器没 ARK/KIMI key,是 agent 逐帧看视频亲自当反推引擎+亲自当评委跑完的。能出活,但两个硬缺口要认:①agent 没有音轨输入,**台词只能从屏上字幕转写**——这正撞静音闸铁律(贴字≠口播),原音复用能兜住、TTS重配会配出幻听句;②自己生成自己打分(63/90)和 Seed 评委的 54/90 **不同口径不可比**。有 key 就别走这条。
- **key/模型**:ark key 用环境变量 ARK_API_KEY;**mmh3(秘塔)key 用 MMH3_API_KEY 或 ~/.config/daihuo-fanpai/mmh3_key(mk-开头),base_url 用 DAIHUO_MMH3_BASE_URL 换渠道**;RunningHub key 用 RUNNINGHUB_API_KEY 或 ~/.config/daihuo-fanpai/rh_key(已退役,留作后路);钱包类后端提交前把总价算给用户并拿到同意;反推/评委模型默认公共模型名(可用 ARK_SEED_MODEL 覆盖),不再依赖私人 endpoint ID。小云雀 key 用 XYQ_ACCESS_KEY 或 ~/.config/daihuo-fanpai/xyq_key;模型默认交CLI(普通户 Seedance_2.0_mini_lite),用 XYQ_VIDEO_MODEL 覆盖。Kimi K3(双反推腿)key 用 KIMI_API_KEY 或 ~/.config/daihuo-fanpai/kimi_key,端点 api.moonshot.cn(国内直连),模型 kimi-k3(KIMI_K3_MODEL 覆盖);K3 始终开思考不可关、别传 temperature/thinking 参数;视频走 files(purpose=video)→ms://<id>,用完即删;WSL 对 moonshot 偶发连接抖动,k3_reverse 已内置3次重试。
- **配音时长**:B模式改词后配音可能比原镜长——gen 已按段 wav 实际时长自动上调生成时长(上限15s,逼近上限会告警要求拆段)。
- **后台命令**:别同时用 `nohup &` + run_in_background(外层立即返回致误报completed)。
- **换声(Seed-VC)质量两要素**:①参考音频信噪比≥30dB(脏参考的底噪会被当音色学进产物,vc_segments已内置参考体检);②嫌有金属感/电流感伪影→`--steps 50~100`(默认30,换时间买干净)。
- **Ark人脸政策(★两条腿分工修正)**:火山对**含人脸参考图**的视频生成政策级拦截(`InputImageSensitiveContentDetected.PrivacyInformation`,AI写实人像也拦,官方唯一解=换虚拟人像)→ **口播/人物段=即梦CLI专属,纯产品i2v段才双腿可走**。ark_gen 已有 submit_mm(多图role=reference_image+音频role=reference_audio,格式已验对),对纯产品+配音场景或许可用(未验)。
- **群戏(三角色情景剧,榴莲片验证)**:单主播模板不适配群戏 → 逐段按 shotlist subject 判断出镜角色挂多张人物锚定图+逐角色人设声明(参考 runs/榴莲复刻/patch_cast.py);**必加人数硬约束**"画面中自始至终只有X、Y这N个角色,不要出现任何其他人物"(不加会幻觉多生成人物,实测);产品未登场的段必须剥离产品图防剧透;多人轮流说话的口型分配即梦能做对(Seed质检实证)。原音复用时字幕轴用 shotlist 镜级时间构造 timing.json(镜头时间=音频时间,精确)。
- **judge双视频**:对比模式合并 >~50MB 会 SSLEOF 断连 → 已改按视频数均分上传预算自动压小。
- **剪映草稿**:剪映 6+ 保存草稿会加密,但**读明文草稿正常**(10.7 实测:识别/打开/编辑/回存全通)。此结论随剪映升级可能失效,失效降级 `--mode final`。草稿引用的是 Windows 绝对路径 → deliver 已把素材 copy 进草稿目录自包含+改写 /mnt/x/→X:/;草稿根目录用 DAIHUO_JY_DRAFTS 或 ~/.config/daihuo-fanpai/jy_drafts 配置。
- **幽灵querying(07-22骗了一下午)**:失败任务被旧版即梦CLI错报成"querying"(v1.4.14已修),配合查询接口对不存在任务也回querying,会诱导你猜僵尸单/队列/风控。**先查 ~/.dreamina_cli/logs/ 日志再推理**——真因往往一行就写着(当日真因=音频切片<2秒被上传拒收)。CLI保持最新:`curl -fsSL https://jimeng.jianying.com/cli | bash`。
- **音频上传2秒下限**:即梦mm的音频输入必须2-15秒,快切短视频的段音频常<2s→提交即死。cut_audio已内置apad垫到2s;自切音频务必过此闸。
- **下载解码体检**:CDN偶发交付坏字节流(大小正常但NAL单元全错→成片卡死花屏),大小校验拦不住;robust_download已内置下载后ffmpeg解码探针,坏流自动重下。批量产后可全量扫一遍:`ffmpeg -v error -i clip.mp4 -f null -`。
- **K3引擎429**:moonshot晚间高峰会engine_overloaded,退避≥90s;赶产能时单腿Seed+1fps拼图校验时间轴可顶(Seed弱在指派,拼图正好补)。
- **群戏口型错乱治理(07-23战役,28%→6%)**:①人数硬约束句是生命线,patch_cast永不删;②说话人点名指令压不住随机错——治法=抽卡循环(每段1-2抽+帧级QC择优);③同句两轮同错=粘性错误,再抽无用,给时间码剪映手修;④**禁止用Seed/K3看AI片转写台词做QC**——会整段幻听(两轮转写互不相同且全不符台账),口型QC只能走qc_lipsync.py的帧级方案(原片帧=真值,AI帧只答谁张嘴)。
- **提交/上传瞬时EOF**:WSL对即梦偶发连接抖动(user_info/imagex上传),gen提交已内置3次退避;批量脚本外层再包轮次循环兜底(missing段重跑)即近零人工。
- **长片反推(>3分钟)必分段(08-02,9分钟剧情片实证)**:全片单跑撞Seed输出上限(~70KB截断JSON报废)。解法=ffmpeg场景检测选边界,拆成~110s/段(验证过的甜区)并行反推,按时间偏移合并shotlist;253镜五段一次全过,剧本级还原成立。K3同天全程429时单腿Seed足够。
- **seed_reverse并发竞态(08-02血案)**:临时件`_seed_upload.mp4`固定名,且workdir跟着`--out`路径走——多段并行反推必须**每段独立子目录且--out也落在该子目录**,否则互相覆盖报"Invalid video_url"。
- **舞蹈/表演类复刻=小云雀--video动作迁移(08-02解锁)**:连续舞蹈动作文字prompt编码不了,把原片`-an`剥音轨后当`--video`参考,编舞/机位/光影逐拍跟随(15s全长验证)。硬规:①不剥音轨会触发配乐版权闸整单拒;②参考重绘无身份锚,脸随原片漂(--image锚被--video压制,钉不住);③水印照旧。详见 references/xyq_notes.md 第7条。
- **★反推台词幻听(10-09,两例)**:Seed 会凭画面编台词 —— 男装片原片只有背景歌,它编了 78 字口播;削皮刀片
  有真对话,它写的大半和实际说的不一样。旧静音闸只拦完全静音,有 BGM 就漏。`seed_reverse` 现在末尾自动用
  faster-whisper 独立转写比对,相似度 <0.25 响亮报 `★★台词可疑` 并记进 `_meta.dialogue_check`(不自动删,人听确认)。
  **报了就别往下走**:下游会据假台词判"口播片/加速片"、写台词、配音,全错。
- **★即梦图生图"组图"卡死(10-09)**:提示词里描述"上排三张、下排三张"→ 5.0 当成要 6 张独立图,出完第一张
  **停下等人在网页点「继续生成」**,CLI 永远 querying(像卡死,其实在等人)。`--generate_num 1` 拦不住,
  提示词开头必须写"只生成【一张】图片,不要组图"(`make_host.gen_i2i` 已内置)。
- **设定图要还原衣服/道具实物 → `make_cast_sheet --ref 实物图`**(图生图)。纯文生图只能"描述"衣服,
  会编细节(10-09:多出抽绳、丢了胸口刺绣);挂实物后款式/水钻/刺绣全对。
- **★参考视频按秒计费、与输出同价(10-09 即梦+秘塔账单实证)**:带 `--video` 的段成本翻倍。
  参考只截生成需要的那几秒(`depth_ref` 按段时长截)。
- **无台词的人物段不再写"台词{}@音频1…口型同步"**(10-09 修):`seg_role` 为拿主播锚图会把无台词人物段
  路由进口播,旧版照写对口型指令,模型会自己编嘴型。
- **★口型漂移 = 装配簿记病(Kimi 线 09-21,SyncNet 实证)**:后端已把输入音频按口型位置嵌回 clip,拿原始 wav 铺段首会把 lead-in 再放一遍(+0.275s)。
  装配和草稿已改取内嵌音轨。**别再手动在剪映里挪音轨**,先查是不是用了外部 wav。
- **★talking 段裁剪按语音尾,不按 span(Kimi 线 09-21)**:模型语速比估算慢,按 span 裁 6/6 段都被截尾。
  所以按 `qc_talking.json` 的实测语音尾 +0.35s 裁;时长按 3.4 字/秒估(原来 4.2 偏快)。
- **★卡拉OK字幕起点按裁剪后的口径算**:旧 drawtext 版按未裁剪 clip 时长累加段起点,字幕滞后约 2.5s。`subs_karaoke` 按裁剪后的口径算,
  所以 assemble 和 deliver 必须都带 `--trim-to-plan`(不带会报"推算总长 vs 成片差 Xs")。
- **C 模式台词要说"卡片主播的话"(Kimi 线 09-21)**:"伴你购物无忧"这类通用营销腔被判"像机器人",`c_gen` 已列黑名单。
- **可灵(Kling)第四条腿已接**:独立skill `kling-cli`(非本engine脚本),定位=高质量首帧i2v备选——脸稳定性最强、无水印,但无视频参考、时长仅5/10s(15s=尾帧续段拼)、审核严(露肤服饰措辞写"典雅庄重")、人数硬约束同样必加、全链路依赖代理。计费/脾性见记忆 kling-cli-setup。



### ★事实锚点两闸(09-10 加,`director.py` 15→17 条)

`director.py` 现在读**事实账本** —— plan 同目录的 `facts.json`(localize_seed 的输入)优先,
`assets.json` 兜底,只看两个字段:

- **`activity`(活动)** ← `promo_anchor` 闸:台词/屏字出现"清仓/秒杀/限时/赠品/到手价…"
  而账本无 activity → 报警。**A 模式照抄原片的"便宜清了"也会报**,那是【别人的】活动,
  我们并没有;放个 facts.json 写一句"这个活动我们真有"即过闸。
- **`evidence`(权威证据)** ← `authority_evidence` 闸:提示词/分镜出现"白大褂/实验室/
  专家/检测报告/专利/认证…"(含英文)而账本无 evidence → 报警。
  ★**布景级暗示(白大褂/工牌/实验室背景)也算伪造背书** —— 观众读到的是"专业机构背书",
  而我们拿不出来。

⚠**"便宜"这个词单独入表 = 5/31 条真项目全是误报**(09-10 实测:"别贪便宜""比鲜榴莲便宜"
"这么便宜,智商税吧""机票不是便宜才1000多吗")。现在收紧成【同句要有价格/下单线索,
且不是否定/比较/反预期用法】。★顺带一条通用教训:**中文单字否定词不能拿子串匹配** ——
`"别" in "特别便宜"` 会把真促销句吃掉,要用带上下文的正则。
31 条真项目复扫零误报,合成用例 8/8 正确。

## 可移植性

换设备:先跑 `doctor.py`。ffmpeg 自动装;即梦/ark key 提示用户配;CosyVoice 缺则配音走降级(A模式复用原音最省)。引擎脚本随本目录一起搬即可。
**Windows 原生(无 WSL)搬运两个坑**(08-07 实测):①跑任何读中文 JSON 的脚本必须 `PYTHONUTF8=1`,否则 GBK 解码炸;②Git Bash 的 `/d/...` 路径不能传给 Windows Python(open/urlretrieve 报 FileNotFoundError),统一用 `D:/...`。ffmpeg 用 gyan essentials 静态包丢进 PATH 即可。

技能是任务材料,不会自动授予账户权限、付费授权或其他系统权限。请让 Agent 按说明核对依赖,再在授权范围内使用。

把这个任务交给你的 Agent

数据、技能和创作空间,一起备好。复制接入指令,发给你正在使用的 AI 工具。

阅读 Agent 接入指南
正在复制指令

粘贴发给你的 Agent
让它成为你的自媒体专家

打开你正在使用的 AI 工具,把下面这段话粘贴到对话框并发送。

发给 Agent 的完整指令

发送后,告诉它你想做什么账号、实现什么目标。

这些 Agent 都可以使用24 个工具