daihuo-fanpai · v2 · 2026-10-09 · sha256 99bde40276699645
daihuo-fanpai v2B
Immutable. This exact content never changes and is served at /api/v1/blob/99bde40276699645.
---
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,大投入,该用户拍板)
核心链路(反推+生成+装配)可跑即可开工;配音缺则走上面降级。
## 输入(问用户要)
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倍)。
→ 规划完会打印**成本估算**(按腿分列),烧钱前先看见钱花在哪
→ 自动拆超长镜/分段(≤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/output/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/output/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/output/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 合 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条。
- **可灵(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 即可。