Skip to content
Back to skills

Workrally Brand Film Pipeline

ASecurity

通过 WorkRally MCP 端到端制作广告、品牌片、产品片、漫剧、短剧、短片、电影与剧集;输入可以是剧本、故事概要或故事简介,题材与画风覆盖国风、仙侠、写实、2D、3D。广告自动路由agency-ad-preproduction使用用户广告包做前期创意、文案、Designer设计方案与文字分镜,设计岗位不接管原资产链路;剧集可选short-drama-script-authoring生成剧本,已有剧本不自动重写。文字分镜Markdown先保存展示,资产生成前按剧本从 asset-style-selector 的四个风格分支做匹配分析并由用户四选一确认风格,按已确认SC事实建立layout空间计划与组内状态,再按原A0资产模型、G1视频模型、G2原生分辨率确认,生成CHAR(含crowd群像)/PROP/纯环境SC与视频;layout只供空间文字,不参与最终风格;声音模式默认由视频直接生成原生音效与逐字原台词、配乐仍后期,用户明确要求时才切换为无声画面+全部声音后期,两种模式都必须先通过校验。再剪辑包装,交付MP4、最终分镜及按阶段整理的全素材/完整提示词无限画布。保留单条≤...

  • 45 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 24, 2026
testingpythongoshellbashnodeexpressapi

Works with

  • cli
  • api
  • mcp

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 24, 2026

npx -y skills add ahang1598/doubao-workbuddy-qwenwork-skills --skill workrally-brand-film-pipeline --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Workrally Brand Film Pipeline?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Workrally Brand Film Pipeline
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ahang1598-workrally-brand-film-pipeline/badge)](https://www.skillsdirectory.com/skills/ahang1598-workrally-brand-film-pipeline)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: workrally-brand-film-pipeline
description: 通过 WorkRally MCP 端到端制作广告、品牌片、产品片、漫剧、短剧、短片、电影与剧集;输入可以是剧本、故事概要或故事简介,题材与画风覆盖国风、仙侠、写实、2D、3D。广告自动路由agency-ad-preproduction使用用户广告包做前期创意、文案、Designer设计方案与文字分镜,设计岗位不接管原资产链路;剧集可选short-drama-script-authoring生成剧本,已有剧本不自动重写。文字分镜Markdown先保存展示,资产生成前按剧本从 asset-style-selector 的四个风格分支做匹配分析并由用户四选一确认风格,按已确认SC事实建立layout空间计划与组内状态,再按原A0资产模型、G1视频模型、G2原生分辨率确认,生成CHAR(含crowd群像)/PROP/纯环境SC与视频;layout只供空间文字,不参与最终风格;声音模式默认由视频直接生成原生音效与逐字原台词、配乐仍后期,用户明确要求时才切换为无声画面+全部声音后期,两种模式都必须先通过校验。再剪辑包装,交付MP4、最终分镜及按阶段整理的全素材/完整提示词无限画布。保留单条≤30秒一次请求count=1规则,不因文字镜头数增任务。
description_zh: WorkRally 品牌片端到端出片
description_en: WorkRally brand film pipeline
disable: false
agent_created: true
metadata:
  version: "2026.09.22.1"
---

# workrally-brand-film-pipeline

用 WorkRally MCP 把「自然语言 → 广告/剧集前期路由 → 文字分镜Markdown与已确认SC事实 → §0F按剧本推荐并确认风格 → §0D空间计划与组内状态 → 资产模型选择 → 视频G1/G2 → **§3a 提交前资产核对(强制)** → 人物CHAR(含crowd)/道具PROP/纯环境SC资产 → 视频(声音默认原生音效+原词对白,用户明确要求时改无声)→ 对白验收与后期配乐/音效 → 剪辑合片 → 片内包装图形层 → MP4与最终分镜」跑通。当前规则版本 `2026.09.22.1`。

**资产风格推荐规则**:生成资产前按§0F从同插件的 `asset-style-selector` skill 读取真实风格文本,结合剧本在其固定四分支中做匹配分析,用户按四选一菜单选定后适配CHAR/PROP/SC。已有有效风格确认不重复问、不自动换风格;不安装或改写该skill,规则变更本身不重做媒体。

**最终交付优先规则**:全部项目素材及对应完整可复制提示词必须按 §9a 归入项目无限画布,分区整理、版本分离、关联可追溯;仅媒资入库/本地文件/成片卡片不等于完整归档。本次仅更新标准,不上传、不调整现有画布、不重制媒体。§9a为画布交付唯一活动规则源。

**字幕优先规则**:正式双语字幕按 §6a-2,参考图2中上英下、中文较大、各一行底部居中,以词级语音证据拆短句同步切换。禁止整段挂屏、设计时码回退和检出数冒充同步;仅改标准不自动重做旧媒体。正文规则覆盖旧示例,历史CHANGELOG保留。

**台词保真与声音模式的优先规则**:台词文本是否保留、对白由谁生成、配乐由谁生成是三个独立决策。用户要求提示词保留台词时,完整逐字保留在各生成单元中,按镜号/说话人绑定,不能因默认后期配音而移除、概述或改词。仅说“保留台词”不自动开启原生声音;先澄清。用户选择视频直接生成原台词对白后,适用 `audio_policy=native_verbatim_dialogue_post_music`,该项目的新生成覆盖下文所有“仅画面/静音/台词仅后期/统一-an”默认;原生对白音轨需保留并逐句验收,配乐后期。**声音默认:默认声音方案=「原生音效+原词对白」,§4c-0 为默认分支,§4c 全部后期降为非默认分支、仅用户明确要求时启用**;本段其余判定(台词保真、三项决策相互独立、原生音轨须逐句验收)不变,不必因该默认重做任何历史媒体。历史成片与 CHANGELOG 仅供追溯,历史记录不覆盖现行规则,也不能代替当次能力核验;其中旧资产分类与音频经验以当前正文修正规则为准。

## 0D. 高优先规则:群演资产与 layout 空间隔离

本节是群演及 layout 接入的唯一活动规则源,优先于下文旧的“所有人物三视图”等泛化表述;`style-cinematic-realism` 只引用本节,不另建一套空间规则。原 CHAR / PROP / SC 三类不被替换,只新增 **CHAR:crowd** 子类,layout 不是第四类资产,也不是新增生图环节。

### 0D-1. 适用范围与证据边界

- **规则修订不等于媒体生成授权**:只更新skill/文字时在文档处结束;后续用户明确要求生成时,按当次范围及A0/G1/G2执行,不把一次项目的暂停状态固化为永久禁用。具体项目的模型、未完成项和生成许可保存在项目记录,不能当作其他项目默认。季宝-2与季宝2.5为不同选择,不互相替代;保留当前有效确认的原作用范围。
- 本节只适配用户提供layout文档中的空间方法,不安装或修改来源文件、不执行其脚本、不调用当前未提供的 `canvas_cmd_*` 接口。首次来源单文档的人工审查结论仅适用于当时版本,不能代替以后安装、导入新包或执行代码时的安全审查;不将人工阅读称为工具扫描。
- **未决不等于返生成授权**:旧正文/历史示例的固定尺寸、时长、自动返工、ASR豁免或声音链经验均不能覆盖本轮确认和动态能力。发现其他冲突先标待核、说明影响,不大规模重构、不自动重提或返生成。完成状态须有真实 task_id 与 asset_id 关联及可验证产物;同名命中、99%进度、本地状态或计划表均不足以证明完成。
- 声音默认走 §4c-0 原生音效+原词对白,仅用户明确要求全部后期时才走 §4c;下文无声、`-an`、纯后期母版示例只适用于全部后期分支,不删除已确认原生对白。原文语言随脚本保留,英文不改中文;ASR归一化/拼音/能量仅作辅助,未知差异标待人工听检且不能豁免,旧三分类报告须另列待核数,未听清不强行归类。历史增益与滤镜选择不作通用结论,最终编码实测优先。

### 0D-2. 顺序与 scene_spatial_plan

**分镜与已确认 SC 事实 → layout `scene_spatial_plan` 固定坐标/锚点 → 组内 `start/events/end` 及每个在场者四字段 → 人物与群演资产(原 PROP/SC 链路保留)→ 视频。** A0/G1/G2及授权关卡仍在实际生成前完成,空间计划不替代这些关卡。

首轮若已有机器 `scene_desc`,先读其真实内容与来源,再逐项同对应 SC 图片对齐;记录一致项、冲突和未知项。缺少机器描述时,可用已确认分镜、SC图及其可靠事实编制文字空间计划,但不得冒充已取得画布数据或已读scene_desc。缺少机器描述不自动阻塞文字编制,也不自动代表空间已通过。严格区分 `confirmed`(有来源的事实)、`proposed`(新设计待确认)、`unknown`(无证据);影响站位/移动的未知项确认前不得送视频生成。新SC成图后再核对,不以计划倒推图片事实。

纯单人/纯道具/群演群像等独立资产请求不为此强加剧情layout;只有涉及场景走位与多主体空间关系时进入本节。SC负责固定空间结构;可移动道具与汽车及座舱仍归PROP,可在layout登记其位置/朝向,但不能把它们改为SC固定设施。涉车使用车辆坐标并核对真实内饰、驾驶位与车门/通路;不凭地区或通用模板擅定左右舵,也不假设前后排可直接穿行。

每个场景的 `scene_spatial_plan` 固定世界坐标系、原点/轴向定义、已确认锚点及其来源,关联逻辑 SC 编号;实际尺寸未知可记已确认的相对关系,不能伪造精确米数或方位。**世界坐标不因反打或机位切换翻转**,屏幕左右与世界方位分开记录。门、通路和固定结构按 SC 事实保留,不为模板搬门;不强制四向各有不同类别锚点,不为填槽编造窗、门、柱等。未知方位标“待核”,矛盾回到来源确认。

### 0D-3. 组内状态与跨组连续性

组指分镜中的连续空间段,不等于新增视频任务。每组记录 `start`(起始快照)、`events`(按时间排序的移动/转身/进出场)、`end`(结束快照),使用稳定主体ID。起止快照覆盖**每个仍在场者**,包括未说话、未入镜者;每个事件更新受影响者并保留其余在场者状态,不能凭镜头未提及就让人消失。

| 每个在场者的字段 | 含义与填写规则 |
|---|---|
| `position` | 固定世界坐标或有来源的锚点相对位置,必要时含高度关系;未知部分待核 |
| `facing` | 身体朝向的世界方向或明确目标ID;视线与身体朝向不同则由原分镜另记,不能猜成面对面 |
| `front` | 相对该主体当前朝向,其前方的主体/锚点ID与空间关系;已确认空可写空,未知写待核 |
| `behind` | 相对该主体当前朝向,其后方的主体/锚点ID与空间关系;不是无条件的摄影背景 |

跨组默认继承上组结束时的位置、朝向和**全体仍在场成员**,除非脚本明确切换场景/时间或有可追溯进出场。移动、转身、间距变化及遮挡必须写明事件,不能瞬移或随反打重排。尊重背对、并肩、跪/站等明确表演,不强制面对面、对称排布或坐站平衡;姿态与表演仍来自原分镜,不从 layout 图自行发明。

群体同向同区域变化可用组ID;发生分裂、不同移动或朝向时,建立子组ID(如 `CROWD-01-A`)或个体ID(如 `CROWD-01-P01`),再逐子组/个体维护四字段。不能把同一角色脸复制成多人。机位、景别、镜头运动由摄影分镜独立决定,不能由 `behind` 自动推导摄影背景。

**事件与成员必须能逐步重放,不只检查起止相等:**

1. 每个事件记录唯一 `event_id`、源镜号/局部时间或明确顺序、受影响主体与状态增量。同镜内的“靠近→接触→退回”拆为有序子事件,即使终点等于起点也不能用空更新冒充完成;真正无空间变化的动作只引用原分镜表演,不虚造位移。计划时间与实测时间分开。
2. 从完整start顺序应用进入、移动、转向、拆分/合并、退出,逐事件核对在场主体集合与四字段,结果必须等于end。目标人物移动或离场时,连带复核其他人的facing/front/behind:固定朝向不得悄悄变成跟随目标;保持面向移动目标需要明确跟转事件。头部转向/视线与身体朝向不同,由原表演来源另记,不把“回头看”强行改成全身转向。
3. 成员关系也有时间状态:记录 `members_start`、事件中的 `membership_changes` 与 `members_end`(或等价逐事件快照)。**任何时点,一个个体只能属于一个活动空间容器**,人物不得同时计入母组和子组;母组总名册可作历史索引但不计活动人数。拆分前仍属母组,拆分发生时原子地转移到子组;合并反向转移。不用整组最终member_map倒推起始成员。人数变化必须对应有依据的进出场,拆分/合并本身人数守恒。
4. 校验站位占用与通路:群体坐标表示区域/中心,不是所有成员同一点;独立人物、押送者与被押者有可区分落脚位。未获依据不能把两人重叠在同一站位;拥抱、搏斗等接触依原分镜显式标注,不以简单坐标不同保证无穿模。靠近、包围、让路须保留空间和通道,无法判断标待核,不伪造精确安全距离。
5. 身份ID与服装/资产版本分开维护:同一人物换装不变成另一角色;`CHAR-xxA/B`等按具体镜头的剧情状态绑定,不能一律按集号或单元前缀推定,换装发生在单元中须显式记录。不凭群像里第几列位置推定剧情方位。
6. 跨组在同场连续时间下同时继承空间快照及成员快照;场景/时间切换需标明重置依据。每组对外展开全部在场主体四字段,不只写“同上”;机器内部可用增量存储,但交付必须可解析为完整状态。状态可重放只证明数据内部一致,不证明场景物理事实或成片画面已经验收。

### 0D-4. CHAR:crowd 群演资产例外

- 逻辑编号 **`CROWD-xx`**,本地登记 `type=CHAR`、`subtype=crowd`;原演员/有台词角色仍用 `CHAR-xx` 单人三视图(§2a),不因同镜多人改成群像。群演不是 SC、PROP 或独立顶级类型;子组/个体ID只为连续性追踪,不自动增加图片。
- 每组直接生成**单张16:9多人同框正面全身群像,count=1**:所有人头、手、脚完整可见,纯中性灰底、柔和均匀光,不互相遮断关键身体;每人是可区分的不同个体。**不套主演正面裁头、背面、侧脸特写三视图,不把一人复制多遍。** 此处只规定资产形式,提交仍须有当次生成授权及能力核验。
- 人数按具体项目与分镜确认,不默认所有项目9人;服装和身份按故事,不复制参考示例警服。参考照片只借用群像资产呈现方式,不推定故事职业、角色脸或最终站位。无剧情环境、手持道具预演、动作库或表情库;可分离剧情物件仍独立 PROP。
- 每组一图仍只对应一个真实 asset_id、占一个参考输入;**图内人数不是输入数**。按稳定成员ID映射外观识别;实际使用子组不自动裁图/增图,确需新增图片须另获授权并重验上限、图序与提示词绑定。每张群演图继续原样追加 §2d 固定去噪后缀一次。

### 0D-5. layout 导出白名单与风格隔离

只从 layout 提取**主体ID、空间位置、朝向、间距、通路、遮挡、移动**及其必要的空间关系文字,按已确认 `start/events/end` 顺序供视频引用;采用白名单重建,不透传整份 scene_desc、layout prompt 或嵌套元数据。`lighting/style/color/material/render` 等字段及其自然语言同义描述、情绪/氛围媒体、色卡/情绪板、镜头渲染效果一律不随 layout 导出。

图片形式 layout **默认不作为视频参考上传或绑定**,只提取空间文字;不安装来源工具或额外生成 layout 图。SC 中确认的结构位置可用;最终画风、光照、色彩、材质及摄影仍来自原独立风格配置、原 SC 职责与分镜,不从 layout 继承。layout 图的灰模、线框、灰底,以及群演资产的合影队形都不得进入成片;群演最终站位服从空间计划而非参考群像排版。

本地记录 `scope=spatial_only`、`style_influence=none`,连同来源、版本、待核项、成员映射与导出核验结果留痕;这些是工作流字段,**不是 API 参数**,也不是技术上完全防止图像风格泄漏的保证。用户若另要求上传 layout 图片,须单独说明风格泄漏可能并确认,动态复核能力及新增输入数量/图序;不得据这两个字段宣称可以完全隔绝影响。规则更新本身不触发任何上传或生成。

### 0D-6. 提示词适配与分阶段验收

- 分开记录文字状态、空间校验、资产生成/质检与提交就绪状态。建议本地字段 `text_status`、`spatial_validation`、`asset_status`、`submission_ready`;这是工作流字段,不传给未支持它们的API。图片未生成则真实task_id/asset_id为空并注明待生成;文字准备完成不等于资产补齐,更不等于可提交视频。
- 新增群演后只修新版本的资产绑定与视觉说明:移除“全体群演复制同一有台词角色/由某主演模板脸扩散”等冲突描述。有台词的功能角色保留独立身份,CROWD负责不同群演外观;群像排版不成为剧情队形。按真实输入重排图序并重新核验数量、范围与当前模式能力,未生成图只留逻辑编号,不冒充真实参考URL。
- layout导出只含已确认的空间关系、事件顺序和必要成员ID;资产外观、风格、光线与摄影分别从其各自来源组装。使用白名单重建而非只删几个英文字段,嵌套内容与“暖光、阴郁、灰模质感”等自然语言也要排除。空间中的遮挡不等于曝光阴影,朝向不等于主光方向。
- 对白、说话人、数值、顺序与当前声音策略不因layout接入而改变。明确本轮比对基准及版本:只与旧视频prompt一致不能声称与剧本全文一致;已存在差异单列,不擅改词或补句。历史实际提交prompt与task关联不覆盖,新稿另存版本。
- 提交前至少通过:空间事实/未知项检查、逐事件重放、逐时点成员唯一与守恒、落脚位/通路检查、身份及服装绑定、空间白名单和旧复制脸指令冲突扫描、对白差异检查、真实资产与输入上限检查。失败或未核验项保持待核,不能只凭脚本运行成功、文件存在或起止相等判全部通过。

## 0E. 高优先规则:屏上可读文本与多层素材

剧本含屏幕录制、系统界面、数据可视化、字幕卡、时间卡、代码滚动或任何**帧内可读文字**时适用本节。

### 0E-1. 帧内可读文本走程序化图形层

- **判据是文本是否承载叙事**:人名、机构名、数据标签、列表条目、代码、报表——错一个字整段可信度即塌,一律本地生成(帧序列 → 合成/叠加),不交视频模型直出。仅作纹理的文本(远处模糊招牌、背景书本)可留给模型。
- 图形层同时拿到三件事:文字 100% 准确、节奏可精确控制(逐条浮现、闪烁、红警边框)、**不消耗生成额度**。
- 与 AI 画面的结合二选一:**纯图形层整段**,或**叠印**(AI 底 + 图形层叠字幕/光标/告警框)。叠印须核对透视、色温与颗粒一致,避免"贴纸感";叠印层单独记录,便于回溯。
- 图形层脚本、叠印参数与帧序列是项目产物,须逐帧目视核验:字形缺字、中英文混排字体回退、遮挡、安全边距。**不以脚本运行成功代替目视验收。**

### 0E-2. 多层素材分层建立基准

- 访谈录制/档案素材/重演/系统生成/监控等不同来源的素材,其画质、色彩、颗粒、锐度**各有基准,不互相拉平**。风格技能统一的是摄影语言与调色逻辑,不是把所有层修成同一质感。
- 档案与监控层的"不完美"(噪点、色散、过曝、低分辨率)是叙事资产,不因风格统一而清除;反之,不把访谈层做成灰底柔光。
- 每层分别登记基准与适用单元,避免跨层误用。

### 0E-3. 真实作品引用处理

- **不生成受版权保护的画面**。片名、书名、曲名等事实性标题可用**文字层**呈现。
- 需要"经典作品"的视觉功能时,用抽象光影、氛围与数据叠加替代,并在交付说明中写明处理方式。
- 处理方式属当次用户裁决项,不由本流程默认决定;裁决结果记入项目文档。

### 0E-4. 与既有规则的关系

- 本节不替代 A0/G1/G2、声音分支、CHAR/PROP/SC 分类与资产去噪规则。图形层段落不进入资产链,也不需要 A0 选型。
- 屏幕内容作为"画内元素"(如 `[AUDIO MISSING]`、唇读字幕)与正式字幕轨分开登记,不混入字幕文件。
- 帧内文字的语言若与成片字幕语言不同(如英文屏显 + 中文字幕),两者独立制作,不互相推导。

## 0F. 资产生成前按剧本推荐风格(唯一活动规则源)

**读取剧本及本次有效视觉约束 → 从 `asset-style-selector` 四分支筛选 → 展示四选一菜单与匹配差异 → 用户选定 → 分类适配 → 原A0/G1/G2与资产链。** 风格推荐在资产生成之前完成;可以与前期设计协同,不新增媒体生成阶段,不替代Designer,也不改写已有剧本。纯资产任务没有剧本时依据用户的角色/物件/环境用途说明,信息不足只补问关键内容,不擅编故事。

### 0F-1. 来源与只读使用

- **指定来源是同插件内的 `asset-style-selector` skill**,入口 `skills/asset-style-selector/SKILL.md`,版本 V01 / v1.0.0。不从桌面压缩包或任何外部 ZIP 取风格。
- 候选范围就是该 skill 映射表里的**四个分支,没有第五项**:`hard-scifi` 硬科幻·纪实写实(`references/01-hard-scifi.md`)、`wasteland-3d` 硬核废土3D(`references/02-wasteland-3d.md`)、`cinematic-realism` 电影写实·剧情片质感(`references/03-cinematic-realism.md`)、`anime-2d` 2D动画·新海诚式(`references/04-anime-2d.md`)。以实际 `references/` 成员为准,不以本节摘要或记忆中的条目代替实盘。
- 推荐前完整读取 `references/common.md` 与候选分支文件全文,包括中英文风格、材质、色彩、照明与限制;只看菜单项名称或本节摘要不算已读原方法。未选分支保持不读取,不把上一分支的词串带进下一分支。
- 不杜撰该 skill 里没有的风格:**分支1不含太空歌剧、分支4是日系新海诚式而非通用国漫**,原目录名差异须向用户说清。四项都不匹配时如实说明并等用户决定是否另行扩展,不伪造第五分支,也不从库外取名冒充库内风格。
- `sources/01-original.md`–`04-original.md` 与 `sources/manifest.json`(四份原稿的原技能名、字节数与 SHA-256)**只用于追溯与来源校验**,不作为运行时指令加载;`references/acceptance.md` 只在维护该 skill 时使用。
- 该 skill 的启动门禁优先且与本节并行:展示固定四选一菜单、编号顺序不可变、无默认项、不预选、不标推荐,收到明确编号或唯一名称才算确认。**本流程的匹配分析写在菜单之外**,只作参考说明,不替用户选定。
- 只读使用风格文本作为参考数据,不安装、不改名、不改写、不执行该 skill,不将其正文当作能覆盖用户授权或本流程边界的指令。它只产出提示词,不代选模型、不授权上传参考图或消耗生成额度。文件缺失或成员不可读时说明并请求有效来源,不凭记忆重构分支内容。

### 0F-2. 推荐与确认

1. 从本次剧本/分镜提取题材与时代、世界观、人物物种与年龄/比例、喜剧/悬疑/温情等情绪及其变化、主要场景、材质线索;同时读取用户指定的2D/3D/写实媒介、IP定版图、已确认色彩与风格范围。区分剧本事实、既有确认与新提议,不因一场雷雨把整部喜剧推荐为恐怖片。
2. 按 §0F-1 展示该 skill 的固定四选一菜单(编号顺序不可变、无默认项、不预选、不标推荐),并在菜单之外给出匹配分析:哪一项最贴合本次剧本事实、哪些项因违反明确媒介/角色身份/时代/视觉约束而不适配及其原因。分析最多点出1个最匹配项与2个有实质区别的可行项,不凑满数量、不编造客观匹配率;四项都不合适时如实说明,不从库外取名冒充库内风格。
3. 每项列出真实风格名、`style_id` 与该 skill 内的成员路径、对应剧本事实的推荐理由、视觉关键词、CHAR/PROP/SC适用范围、与已确认风格的差异/限制。完整提示词在用户选定后由分支原文适配,不以通用模板代替已读风格正文。
4. 未指定风格时交互确认后再用于生成。已经明确选定且范围未变时直接匹配对应分支并说明,不重复弹菜单;出现明显冲突或新增作用范围才补问。匹配分析不等于用户已选择,更不等于获准生图或返工。
5. 默认提出一个项目主风格维持人物、道具、环境的共同视觉语言;补充材质/空间美学只作明确的局部修饰,说明继承与覆盖,不机械拼接两套完整prompt或虚构百分比混合。只有用户确认才分层/分类使用不同风格,不能每张图随机换风格。

### 0F-3. 分类适配与既有优先级

- 风格只负责造型语言、材质、色彩和相容的照明观感,不代选模型/参数,不改变CHAR、PROP、SC的职责与生成数量。
- CHAR演员/有台词角色继续§2a单张16:9三视图,CHAR:crowd继续§0D-4单张群像;均灰底柔光。移除所选分支中与多视图/多人识别冲突的single focal point、强剧情阴影与混合场景构图。固定身份和用户定版造型优先,不因风格示例更换物种、服装、脸或比例。
- PROP保持独立、隔离背景与结构可读;不带人物/手/剧情环境,不套人物裁头三视图,不因分支示例增视图。SC保持无人无道具及其残留,保留剧本所需固定结构;只使用相容的空间材质/色彩,照明服从剧情时间天气,不带入人物棚拍灰底。
- 分支与 `common.md` 的统一质感尾缀中的柔焦、晕光、单焦点、smooth surfaces及高频毛发/精细纹样等不是跨类别必选常量;逐项消解冲突,不糊掉身份、轮廓或道具几何。公共尾缀按该skill规则只追加一次,所有资产最终仍以§2d两句固定英文去噪原文收尾且仅一次,不能用公共尾缀代替;去掉冲突的颗粒/高频细节要求,不宣称文字指令保证成图达标。
- 写实类仍先加载§1a的style-cinematic-realism作已有写实基底。**分支3 `cinematic-realism` 与该基底同源**(`sources/manifest.json` 记为 `style-cinematic-realism`):选中分支3时按同一套写实语言执行,不叠加两份完整prompt;选中其余三个分支时在其确认范围内适配覆盖并记录与写实基底的差异。非写实不强套写实摄影;现有视频摄影、声音模式、layout空间白名单、A0/G1/G2和逐图质检保持,不因推荐环节更换或绕过。
- **风格/氛围示例图只用于观察并转成文字,默认不作为input_images或视频reference_assets。** 不能让示例中的人物、灯架、器物污染纯环境。角色身份图、PROP结构图、SC结构图仍可按原流程核验后使用;layout继续仅空间文字。用户以后另要求图片风格输入时须说明泄漏风险、确认作用范围并复核,不靠否定词承诺隔绝内容。
- 广告Designer的视觉方向作为有效输入;已确认设计与推荐相符时复用,冲突先列差异并确认,不绕过设计岗位或新增情绪板/合成参考图/分镜图。

### 0F-4. 记录、既有项目与边界

- 后续实际项目记录`style_library_source`(=`asset-style-selector`)、`style_skill_version`、`style_candidates`、`selected_style_id`、`selected_style_name`、`selected_style_member`、`style_confirmation_source`、`style_scope`及分类适配差异;分支原文、适配草稿、真实提交prompt分开,不用新稿覆盖历史任务。以上仅本地工作流字段,不是API参数。
- 既有项目在旧来源下已确认的风格、用户定版角色与已确认场景氛围继续有效,不因来源切换而失效、不自动改判为四分支之一。这类既有确认落在当前候选范围之外时如实说明,要换到四分支须另行确认;单个项目的历史选择不成为其他剧本的默认风格。
- 恢复既有项目仍保留原确认,不将来源切换当作重做授权;仅文字请求在文字完成后停止。

## When to use

- 用户要「生成一条广告 / 品牌片 / 概念短片 / 分镜成片 / 生成剧集或短剧」;按§0前期路由,不因剧集请求自动写整季
- 用户给了一张人物或产品参考图,要求扩展成多镜头视频
- 已有 `shotlist.json`(含 timecode / duration / subjects / prompt_zh)需要落地成 mp4
- 需要跨镜头保持人脸/产品一致性

不适用:单张概念图(直接用 `canvas_generate_image`);纯剪辑已有素材(用 ffmpeg 即可)。

## 前置

进入对应生成阶段前取到动态下发的能力清单,**不要硬编码模型 ID**。前期文字创作不为此启动媒体查询或生成。声音默认按 §4c-0「原生音效+原词对白」执行,仅用户明确要求时才走 §4c 全部后期:原生对白能力在视频提交前核验,独立后期音频能力在对应声音阶段查询;不将静音写成默认路径,也不把历史原生音轨当作未核验的默认:

| 需要什么 | 调用 |
|---|---|
| 短番项目 ID(素材必须关联) | `project_list` → 找「默认项目」 |
| 生图模型 | `canvas_image_model_list` |
| 视频模型 + 各模式参数 | `canvas_video_provider_config` |
| 音乐模型 | `canvas_audio_model_list` → `music_models` |
| 配音模型 + 音色表 | `canvas_audio_model_list` → `audio_models` |

**视频任务停在 99% 可能处于收尾,不能单靠进度判断原因或完成状态**:历史曾停留后成功,但不能据此断言正在编码、上传或必会成功,也不套固定等待时长。按工具约定查询原 task_id,结合真实状态、错误信息和与该任务关联的 asset_id/可验证产物核对;同名素材不算关联证据。状态不明标待核,不重复提交、不自动换模型;明确失败先诊断并报告,重试另获用户确认。多任务分别跟踪,不用提交先后推定完成顺序。

2026-09 本环境历史实测值(仅供追溯,人物CHAR/道具PROP/纯环境SC及视频的模型规格均须当次动态核验,不作默认参数):

- 生图:季宝2.5 `g26a0h6skn`(16 张参考图 / 4K / quality `low|medium|max`)
- 视频:历史曾使用 seedance-2.0 `qa3zsyxzc8`、seedance-2.5 `hur68xij1s`、梦宝2.5 OS `eubk54vl4o`、seedance-2.0 Mini `73z6gomtng`。此处仅供识别历史任务,不能作为当前候选、分辨率、时长、参考数量或价格依据;G1/G2 必须使用当次动态能力。
- 音乐:MiniMax-music3.0 `jtj5xffx6s`

## Steps

### 0. 自然语言先转文字分镜,并落盘 Markdown

**完整路径(§0D优先)**:

```text
自然语言需求 → 判断实际内容意图
  ├─ 广告:自动调用 agency-ad-preproduction
  │          用户广告包:AE需求 → 策略 → 创意 → 文案 + Designer设计
  │                      用户确认 → 整合复核 → 逐镜文字分镜/设计交接
  ├─ 剧集:已有剧本 → 保留原稿并分析
  │        无剧本/需创作 → 用户可选 short-drama-script-authoring
  │                        标签/骨架确认 → 授权范围剧本 → 逐镜文字分镜
  └─ 其他:原需求整理 / 脚本分析 → 逐镜文字分镜
                                 ↓
        保存并展示《项目名_文字分镜.md》 + 已确认SC事实
                                 ↓
        §0F:按剧本匹配 asset-style-selector 四分支 → 四选一确认(有效确认直接复用)
                                 ↓
        §0D:已有scene_desc先读并对图;缺失/冲突标待核
                                 ↓
        scene_spatial_plan(固定世界坐标/锚点)
                                 ↓
        组内start/events/end + 全体在场者四字段与跨组连续性
                                 ↓
        原A0:CHAR(含crowd)/ PROP / SC模型选择
                                 ↓
        原G1:视频模型/模式 → 原G2:原生分辨率确认
                                 ↓
        原资产链:演员三视图 / 群演单张群像 / 独立PROP / 纯环境SC
        (新SC成图后再对齐空间计划,不伪造已有SC事实)
                                 ↓
        layout只导出空间文字 + 合规资产绑定 → 视频提示词
                                 ↓
        ├─ §4c-0 原生音效+原词对白【默认】:有声视频 → 逐句验收、保留对白 + 后期配乐
        └─ §4c 全部后期【仅明确要求】:无声视频 → 后期独立声音
                                 ↓
        逐镜质检与按分镜剪辑 → 按确认声音方案混音
                                 ↓
        原包装:最终MP4 + 更新后的文字分镜
                                 ↓
        §9a:全部素材与完整提示词上无限画布,按阶段/版本整理
                                 ↓
        覆盖与可访问性验收 → 画布入口 + MP4 + 最终分镜 + 归档清单
```

仅文字任务及本轮规则修订在文字准备处停止,不因流程图而执行模型查询、资产/视频生成或后期制作。

**入口路由是硬规则**:广告制作自动加载 `agency-ad-preproduction`,使用本次用户提供广告包的真实岗位方法,不只提及名称或用通用分镜替代;剧集提供 `short-drama-script-authoring` 作为生成剧本选项,用户未选不自动启用。已有剧本不擅自重写,广告已有材料继承有效确认。意图为分析/翻译/下载不触发制作;广告式剧集等混合需求先澄清。不自动生成整季。**广告包继续调度Designer设计环节,不改原资产链路**:Designer产出视觉方向、画面描述、KV brief、构图/色彩/字体/材质、已要求包装物料的规范与设计prompt草案,经用户确认后交原流程执行;设计角色不得自行生图、代选模型、绕过A0/G1/G2或新增资产生成环节。原包模型适配说明只作参考,不作为当前模型能力或用户授权。

两个入口位于 `~/.workbuddy/skills/` 各自目录。工具列表未刷新时可直接读取准确 `SKILL.md` 路径及其适配参考文件,不退回凭常识替代。广告入口在文案与设计确认、整合复核并展示统一分镜后,先按§0D完成空间文字计划,再交回§0A,不再路由一次;剧本入口完成已确认剧本后交回本节转统一文字分镜,不直接跳到资产。仅文字任务在本节结束。

项目记录新增 `preproduction_route`、`preproduction_skill/version`、源包哈希、选用/方向/剧本确认来源、剧集 `episode_scope`、按 §4c/§4c-0 确认的 `audio_policy` 与 `post_audio_plan`;空间计划、组内状态及 CHAR:crowd 成员映射按 §0D 记录。广告另记录 `design_brief`、`design_prompt_drafts`、`design_to_asset_map` 与设计确认来源,可作为分镜附录。仅为本地字段,不添加未经支持的API参数。原A0/G1/G2、三类资产(CHAR新增crowd子类)、默认摄影、固定去噪末句及sd2.5单条规则均不变。

设计交接时将人物设定映射到CHAR、独立物件及汽车内饰映射到PROP、地点空间映射到SC,动作/组合构图交给视频分镜,字标/排版/封面交给已确认后期包装。整体KV组合描述不得直接当作混合资产生成;最终资产提示词仍按原§2适配,保留演员/有台词角色单张16:9三视图与 §0D 的群演单张群像例外、灰底柔光、PROP隔离背景、SC无人无道具及固定去噪后缀。不增情绪板、人物场景合成参考图、分镜图或无关特写;发现设计与原规范冲突,列差异交用户确认,不以设计确认代替模型/生成授权。

先提取内容目标、用途、时长、主体、风格、声音、画幅与已有素材;必要信息不足先澄清。不编造品牌、卖点或用户选择。没有脚本时根据自然语言编写逐镜文字分镜;已有脚本时保留原意,分析后转为可执行的文字分镜。不能只交故事梗概、八个节拍概述或 JSON 来代替 Markdown 分镜,也不能从自然语言直接跳到生图。

**文字分镜在付费生成前落盘并给用户查看**,文件名建议《项目名_文字分镜.md》,包含需求摘要、版本、目标时长/画幅、故事线、逐镜表和资产需求。逐镜表至少包含:镜号、计划时间码、时长、景别、机位/运镜、主体与动作、场景/时间/光线、对白/旁白/音效/环境声/音乐计划(按 §4c/§4c-0 标明原生或后期来源,不擅改原文语言)、与下一镜的剪辑关系、人物CHAR(含CROWD-xx)/道具PROP/纯环境SC逻辑编号(按镜头需要列出,不强制三类齐备),并关联 §0D 的空间计划及组内状态。镜号唯一,计划时间线无空隙或重叠,时长之和符合目标;转场重叠须显式计入总时长。生成前可用 CHAR-01/PROP-01/SC-01 等逻辑编号,真实媒资 ID 待生成后登记,不虚构。

“不要分镜图”只禁止分镜图片,**不取消文字分镜 Markdown**。本次另明确仅要故事梗概、不要文字分镜或只分析时,按本次范围交付,不强加制作环节。仅文字任务在此结束,不进入 A0/G1/G2 或任何媒体生成。完整制作则先展示分镜,再收集参数;不能只声称文件已写好却未向用户展示内容或可访问文件。

### 0A. A0:交互选择资产模型

资产模型可选**贝宝PRO(平台名贝宝-Pro)或季宝系列的实际版本**,适用于人物CHAR、道具PROP与纯环境SC,替代旧“场景只用贝宝PRO、人物固定季宝”的路由。可明确为三类统一选一个模型,也可分别选择;必须记录各自的选择作用范围。**已有确认只在原作用范围内有效,不自动把人物/场景确认扩大到新增道具PROP**;新增道具未获模型确认时单独补齐,不重问仍有效的人物/场景选择。

生图前查询动态模型清单,展示准确名称、版本与该模型支持的分辨率/画幅/参考数量/count/quality,并核对各类资产的确认方案。只说“季宝”而存在多个版本时,先列出版本让用户选,不擅自等同季宝2.5;只有唯一明确匹配也要展示精确名称。贝宝-1、贝宝-2不是贝宝PRO,不能静默替代。不可用或不支持目标参数时说明并等待用户决定。

未指定资产模型则交互询问;本次已明确选定且核验通过时记录来源、不重复问。**本条是选择能力,不是为新项目预选模型**。不因新规则重生成旧资产。人物CHAR/道具PROP/纯环境SC分别保存 type、model_label/model_id、确认来源、作用范围与用途,逐张记录实际模型与规格;不照搬历史4K或另一模型的quality,不默认道具4K、三视图、count或额外特写数量。资产模型选择不替代 G1 视频模型或 G2 视频原生分辨率;完整视频项目在下列视频两关也通过后才提交资产生成。

### 0a. G1:交互确认视频模型

- 按脚本与素材需求动态查询视频模型/驱动模式,展示真实名称/版本、支持时长、参考输入、音效和分辨率范围,说明有依据的适配理由。可以推荐,不可代选;没有可靠价目不编造成本或速度。
- 使用交互式提问让用户选择,**等待回复**;本次任务已明确指定模型且能力验证通过则记录来源,不重复询问。历史默认、示例 ID 或助手推荐不算本次确认,同名不同渠道/版本要澄清。
- 不得为了验证候选模型自行生成测试视频。模型选择完成后才进入 G2,不先按默认分辨率提交。

### 0b. G2:交互确认原生生成分辨率

- 从 G1 选定模型/驱动模式的动态 `resolution_options` 取 `label/value`,核对时长、画幅及参考输入组合约束,只展示真实支持的档位,不使用全平台并集。
- 单独让用户选择并**等待回复**;本次任务已明确指定且验证通过则记录,不重复询问。只支持一个档位时,用户尚未授权也要展示并确认。“高清”不代表 1080p,16:9 是画幅,不代表分辨率。
- 不默认选首项、1080p 或最高档;能力不清楚先查明,仍未知则暂停。不支持用户目标时暂停让用户选择,不静默降档或换模型。不将后期超分、导出像素或参考图尺寸冒充原生生成分辨率。
- 生成接口支持分辨率参数时显式传入确认值。若接口无该参数且输出明确固定,展示并确认固定档位、记录原因,不臆造字段。
- **档位 ≠ 像素:宽画幅下要重新算一遍实际像素**(2026-09-19 实测)。同一档位在不同 `aspect_ratio` 下产出不同像素(Seedance-2.5 按固定像素预算出图,720p 在 16:9 为 1280×720、在 21:9 仅 1470×630)。选定画幅后,把「档位 × 画幅」的实际像素与成片目标画布比一遍;明显低于目标画布时要向用户说明这是降级并给出更高档位选项,**不拿提交回执的 `dimensions`(画布占位值)充当已达标证据**。详见 §4b 的实测条款。

### 0c. 确认完整才进入执行

- 必须具备已展示的文字分镜Markdown、§0F风格选择(或本次有效既有确认)、A0资产模型选择、G1视频模型确认、G2原生分辨率确认及当前参数组合校验。任一缺失,不提交该完整项目的资产/视频生成;之前可做文字工作和只读素材检索。纯资产请求不强行进入视频G1/G2。
- 用户本次已明确指定的参数顺序核验即可,不重复提问。未明确选项的“继续”不算授权;同意已列清楚的完整方案可记录为确认来源。
- 换模型/模式后重新核验并确认受影响的参数;素材/时长/画幅变化重验组合,未变化且仍有效的确认可复用。资产模型变更不自动更改视频模型和分辨率。
- 本地记录保存 storyboard_path/storyboard_revision、§0D的scene_spatial_plan/组内start-events-end/在场成员四字段/待核项/空间白名单导出记录、人物CHAR/道具PROP/纯环境SC各自的type/model_label/model_id/确认来源/作用范围/用途/实际规格、CHAR:crowd的subtype及CROWD-xx成员映射、逻辑编号与真实asset_id映射、道具parent_prop_id/view_id、视频模型名称/ID/模式、分辨率标签/value、G1/G2来源、目标时长/画幅/数量、镜号到生成单元的映射、各段参考图数量/顺序与组合校验结果。未生成的真实字段标为待生成,不伪造;这些是工作流记录,不是新增API参数。
- 提交前展示参数摘要;A0/G1/G2已通过且参数不变则直接执行,不额外重复审批。以下代码示例、历史实测或试片流程均不得绕过本节。

### 1. 分开管理文字镜头、生成单元和剪辑时间线

**优先规则**:使用 Seedance-2.5(sd2.5),单条目标视频时长 `0 < T <= 30` 秒(含 30 秒)时,只提交一次视频生成请求,显式 `count=1`、`duration=T`。整条文字分镜适配为一条提示词,不按镜头或节拍拆任务,不自动增加测试片/候选版本。先核对时长支持,不支持则说明并确认。此时镜头由模型在一条视频内组织,后期可按需求裁剪/混音,但不为“剪辑成片”再拆成多个付费生成任务。详见 §4b。

**一条视频不等于一镜到底,文字镜头数也不等于生成请求数。** 文字分镜Markdown默认始终提供;本次明确不要文字分镜的例外按§0执行。选型后把每个镜号映射到实际生成单元。多段方案需明确段长、数量与镜号范围,每段至少记录 id/timecode/duration/shot_ids/prompt;JSON可辅助执行,但不能替代Markdown。按最终时间线核验总长,转场重叠须计入。

关键设计原则:**人物身份与穿着服装由人物CHAR承载,道具外观、结构比例、材质颜色及部件状态由独立道具PROP承载,地点与空间由无人无道具的纯环境SC承载,动作和运镜在文字提示词中编排**。可分离且剧情使用的物件归PROP,不在人物图中手持预演。图序、ID 与引用须明确匹配,不能用“第一张图片”省略资产职责。每镜按需引用三类,不强制全部挂载;替换或新增资产后仍须复核提示词、绑定、参考上限和主体一致性,不承诺只换图即可免检。

### 1a. 写实风格固定加载用户指定技能

**所有写实生成先加载 `style-cinematic-realism`**,入口为 `~/.workbuddy/skills/style-cinematic-realism/SKILL.md`,来源是用户提供的 `01-cinematic-realism.zip`。涵盖写实人物CHAR、道具PROP、纯环境SC及视频视觉风格;不再用本文旧示例的Alexa 65/Cooke等组合代替该技能。技能不可用时说明并读取安装入口,不凭历史记忆重构;仍无法读取则暂停风格适配。本次明确另指定风格时遵从本次要求,非写实任务不强套。

风格技能仅提供风格模块,不代选模型或分辨率。按类别规范适配:演员单人三视图、群演 §0D 单张正面全身群像及灰底柔光优先于剧情窗光/单焦点;layout只导出空间文字,风格隔离与跨组连续性以 §0D 为唯一规则源;道具按 §2e 隔离背景、清晰展示结构,不套人物裁头三视图模板;纯环境SC保持无人无道具,时间、地点和环境光来自文字分镜。三类分别按A0有效作用范围内选定的贝宝PRO或季宝具体版本生成;所有资产图去掉相冲突的颗粒/高频细节描述,最后原样追加 §2d 两句英文一次。原文4K不是生成规格授权,不把所有题材改成现代都市。视频采用该技能的风格模块,但不带入三栏灰底、隔离背景、纯环境无人无道具限制或图片去噪末句,成片可按脚本人车同框。任务记录保存实际style_skill及版本,原始包内容可追溯,不自动修改已交付媒体。

### 2. 分离生成人物CHAR、独立道具PROP与纯环境SC资产

**资产范围**:按文字分镜建立人物CHAR、必要独立道具PROP(汽车、手机、包等)与无人无道具的纯环境SC,替代旧的仅人物/场景限制。不增加动作姿态参考图、人物与环境合成示意图、分镜图、首尾关键帧图或无关道具/特写。穿着的服装与鞋留在人物资产;可分离且剧情使用的物件归独立道具,不在人物图中手持预演。这里的“不出参考图”是取消通用参考画面这一生产环节,不是禁止把合规CHAR/PROP/SC资产作为视频接口的参考输入。

先按 §0D 将分镜与已确认SC事实整理为空间计划、组内状态和全体在场成员表,再按 §0c 补齐适用确认,依当前生图能力设置模型、画幅、分辨率、count与可选质量,关联实际项目。资产图分辨率独立于 G2 视频分辨率,不硬套历史 4K 或最高质量。**演员/有台词角色的三视图直接生成在一张 16:9 横图内,显式 aspect_ratio="16:9"、count=1;不再分三张生成后拼接,不自动追加身份锚点图或候选图。群演只走 §0D-4 的 CHAR:crowd 单张群像例外。** 道具的背景、视图数量、画幅、分辨率与count按用户确认方案及动态能力设置,不默认4K、三视图、count或额外特写数量;场景画幅按项目方案,两者均不因人物横图而强制改变。模型不支持时先说明并确认,不静默改画幅或拆图。

#### 2a. 演员/有台词角色单人三视图固定提示词

本模板仅用于非crowd的单人角色;群演改按 §0D-4,不套本节裁头或三视图。以下常量与角色身份、体型、发型、服装设定组合使用。左/中/右是同一人物的不同视图,不是三个角色;不夹带故事场景、动作表演或电影气氛光:

```text
生成一张16:9横向人物三视图资产图,在同一张图片内从左到右清晰排列:正面全身、背面全身、四分之三侧面脸部特写。
左侧正面全身视图区通过独立取景裁切使头部位于该视图区画面外,完整展示肩部以下身体、服装、双手与双脚;这是照片取景裁切,不是无头人体,不呈现伤口或断面。
中间背面全身视图区保留完整头部、发型、躯干、双手与双脚。
右侧脸部特写固定为四分之三侧面角度,清晰展示五官、脸型和下颌轮廓,不替换为正脸或正侧脸。
三类视图呈现同一个人物,保持相同身份、体型比例、肤色、发型及同一套服装与鞋;各视图分区清楚、互不遮挡,不添加文字、标签或水印。
背景为纯中性灰色,光线柔和均匀,不得出现强烈的阴影或高光。
Remove the noise and high-frequency details from the image. Keep all the lines, colors, and brightness unchanged.
```

用户在额外表情选择中回复“不用”:**不新增表情图、不强制露齿微笑,不将脸部特写扩展为表情库**。仅有中性表情不能证明微笑牙齿和下颌已经锁定;成片出现微笑时仍须检查,不为此自动补图或声称一致性保证。

同角色的视图须共享身份依据。有用户素材或既有合规角色图时可作为输入;没有时从完整身份设定直接生成三视图单图,不能只凭裁头身体图推断脸部,也不先额外生成脸部锚点图。

#### 2b. 纯环境SC资产:无人、无道具

**纯环境SC模型按 §0A 的用户选择执行:贝宝PRO(贝宝-Pro)或季宝具体版本**,不再强制贝宝PRO。人物CHAR、道具PROP与纯环境SC可以统一或分别选模型,未明确范围先确认;不因另一类已选某模型就自动替SC决定,也不把既有人物/场景确认扩展给新增PROP。

场景画幅、分辨率、输入图上限与可选quality按所选模型当次配置核验,不套其他模型参数或全平台并集;infer_quality_options为空则不传quality。不把模型选择当作4K授权,保留已确定且兼容的场景规格。每张SC记录type、实际模型名称/ID/参数、用户确认来源/作用范围和用途,逐张核对;不可用、歧义或参数冲突暂停,不静默替换。不改变既定视频G1/G2,不重生成旧场景。

只提取脚本中的地点、空间结构、时间、天气、材质和环境光。画面不得出现人物或道具,包括人体局部、剪影、人物/道具的倒影、投影或残留局部;不在场景中预演人物或道具动作。**汽车即使静止、无人也属于PROP,不能放入SC;汽车座舱是同一汽车PROP的内饰视图,不能改称SC来绕过道具分离。**

无道具不等于无建筑:保留分镜所需的建筑、道路、桥梁、墙地面和固定空间设施,以及晨光、雨水等环境特征,不把纯环境改成空白空间。人物资产的灰底柔光规则只适用于人物,不把SC改成灰色摄影棚。每张SC同样追加 §2d 的固定英文后缀。

#### 2c. 提交与验收

三类资产独立登记 type(CHAR/PROP/SC,工作流分类)、model_label/model_id、用户确认来源/作用范围、用途、规格及真实asset_id;CHAR群演另记subtype=crowd、CROWD-xx与成员映射,道具另记parent_prop_id与各视图view_id,真实字段待生成时不得伪造。工作流type不替代视频接口的媒体类型type:"image"。

提交前检查演员/有台词角色每人一张16:9三视图、群演每组一张16:9正面全身群像,均count=1且使用各自规范;道具规格/背景/视图数量符合确认方案,每条资产图片提示词都带有 §2d 的原文后缀。下载后核验CHAR演员的实际宽高比、三分区内容、裁切、身份服装、灰底与柔光;CHAR:crowd按 §0D-4逐人核对数量、不同个体、正面全身与头手脚完整、灰底柔光,不按三分区验收;PROP核验外观结构、比例、材质颜色、部件状态及跨视图一致性,背景隔离且无人物/手/剧情街景;SC核验无人无道具、无其倒影/投影/残留局部,必要建筑设施与空间结构色彩仍保留。按项目要求对每张资产检查logo/字样,并检查去噪是否过度抹除身份轮廓或关键几何。参数或提示词正确不等于产出必然合格。

单张演员三视图或单张群演群像各只登记一个资产 ID,作为一张图计入 reference_assets;群像图内人数不是输入数。演员视频提示词区分“第一张图片的左/中/右视图区”,不得把图内三个视图当成第一/第二/第三张输入;群演引用对应CROWD-xx及成员ID,不混成同一张脸,站位以 §0D 空间计划为准。每镜按需引用CHAR/PROP/SC,不强制所有镜头三类全挂;PROP实际输入图数同样计入参考上限,各段均重验数量、顺序与提示词对应关系。超限或不支持时暂停调整并确认方案,不默默丢弃道具、不把道具塞回SC。明确每个人物输入的身份和正常单画面视频;不把三栏排版、灰底、棚拍光线或道具隔离背景带入成片。纯环境无人无道具约束仅适用于SC资产,成片按脚本可以人车同框。

规范更新本身不授权重生成,也不改写已完成媒体、历史回执或已完成项目的历史记录。后续经授权启动新生成或恢复未完成项目时,旧不合规素材保留但停用,仅清空活动绑定并重写依赖提示词;重验含PROP在内的各段资产数量、顺序与当前模型支持组合,不沿用旧参考数量。已确认且未变化的模型与分辨率仅在原作用范围内复用、不重问不降级;新增道具的模型/规格确认按 §0A 与 §2e 补齐。

任务必须收到成功提交回执和非空任务 ID 后才写为 submitted;发现 submitted 但 task_id 为空时标记待核实,先阻止重复提交,不能把本地状态当成平台已受理的证明。

#### 2d. 所有资产图片的固定后缀

所有资产图片的生成提示词末尾必须原样追加一次以下英文,不翻译、不改写、不漏掉第二句。覆盖人物CHAR单人三视图、CHAR:crowd每张群像、独立道具PROP的每张视图与每张纯环境SC;不因此增加无关道具、视图或特写。

```text
Remove the noise and high-frequency details from the image. Keep all the lines, colors, and brightness unchanged.
```

最终提示词 = 资产内容与风格设定 + 类别规范 + 上述后缀。人物模板已包含后缀,不重复添加;提示词优化后再检查后缀仍完整且位于末尾。资产图不额外添加胶片颗粒、噪点、高频毛孔细节或锐化要求;视频摄影风格另行配置,该后缀不自动加入视频/音乐提示词。该语句是生成约束,不是已完成去噪的证明;纯文生图的“保持不变”不能作像素级承诺,图生图须对照输入验收,不能仅凭提示词宣称线条、颜色、亮度完全未变。

#### 2e. 独立道具PROP资产

按分镜建立必要独立道具,汽车、手机、包等可分离且剧情使用的物件归PROP;穿着的服装与鞋仍归CHAR。**PROP负责外观、结构比例、材质、颜色及部件状态**,动作与人车同框在视频中按脚本组织,不在人物资产里手持预演,也不把道具放进SC。

道具图采用隔离背景、清晰展示结构,不含人物、手或剧情街景。背景方案与视图数量由用户确认,模型按A0为PROP有效的选择执行,画幅、分辨率、count、参考上限与quality按当次能力核验;不默认道具4K、三视图、count或额外特写数量,不把人物裁头三视图模板套给道具。只生成分镜所需且方案已确认的视图,不额外扩张轮毂、车灯或内饰特写。

汽车外观与必要座舱视图用同一个逻辑 parent_prop_id(如PROP-01)管理为同一主体,不分成互不关联的汽车,也不将座舱登记为SC。每个视图分别登记逻辑view_id、平台asset_id及用途;view_id可在规划时命名,平台asset_id未生成或未取得回执时标为待生成,不伪造,不把逻辑编号当作平台真实ID。跨视图核验外观比例、轮毂、车灯、内饰与部件状态保持一致、不漂移;发现差异先披露,不自动补图或重生成。这些关联字段用于工作流记录,不臆造生成API参数。

若项目要求无logo/字样,对每张PROP逐图检查车标、格栅、方向盘、屏幕、设备铭牌等细节;SC与成片另按同一项目要求验收,不能仅靠视频负面提示词。每张PROP提示词也须原样追加 §2d 固定英文去噪后缀一次。

#### 2f. 角部伪文字水印审计与"图库原型召回"返工

**必做环节:四角 100% 原尺寸裁切目检。** AI 生图在命中图库原型时会召回 stock-photo 式的角部伪文字与圆形徽标,**缩略联络图与常规整图目检看不出来**。流程:对每张资产取四角 100% 原尺寸裁切独立目检(建议横排拼版:四角一张、底部/顶部分开各一张),发现伪文字即判不合格并返工。该审计覆盖 CHAR / CROWD / SC / PROP 全部类别,不因"这张看起来没问题"跳过。

**伪文字来源判定:必须先排除平台水印,再判定为生成式残留。** 做法是把**同一位置(尤其右下角)跨多张资产做 100% 横排比对**:若只有个别图有、其余干净,则是生成式残留(图库素材水印幻觉);若所有图都有,才是平台层水印。此判定直接决定"返工一张"还是"全部重出",不可跳过、不可凭印象下结论。

**根因:语义吸铁石(图库原型召回)。** 当场景提示词含 `监控室 / 控制室 / 观察室 / 屏幕墙 / 操作台 / 摄像头 / 传感器 / 安防` 这类高饱和图库题材词时,模型会被拉向训练数据里的"深蓝机房"套路图,而该类图自带(a)标识与设备、(b)挂钟/墙面地图/文件柜、(c)**角标水印**。此时**负面提示压不住**——负面词只能抑制显式描述,压不住原型召回。表现为:反复加"不出现任何文字/标识/水印"仍连续失败,且每次都换一批新问题。

**修复顺序(改结构,不改措辞)**:
1. **换语义场,而不是加负面词**:整段删除图库诱因词,命名为"空旷无人的内部空间"而非"监控室"。
2. **改成低密度平面描述**:用"画面只由 N 种平面构成"限定构图(如:平整哑光墙 + 关闭状态深色无反光矩形面 + 不透视深色镀膜玻璃),把设备/家具/标识的生成空间压到最小。
3. **加反水印条款**:「画面四个角落必须绝对干净,不得出现任何图库素材式的标记或伪文字残留」+「画面应像一部电影的一格剧照,而不是图库素材或产品效果图」。
4. **玻璃必须写明不透视**:写成"只呈现均匀的暗色反光与隐约的模糊倒影,完全不透视,不映出任何可辨认的物体轮廓";反之模型会透视出相邻空间的设备与告示纸。

**参照系**:抽象虚拟空间类场景(无明确墙地交界与建筑构件)之所以常常一次通过,正因为其提示词**天然不含图库诱因词**。遇到难缠的实景题材,可借用同一手法降密度。

**验收口径**:提示词达标 ≠ 成图达标;回执尺寸 ≠ 实际尺寸(一律 `sips` 实测);未取回 `state=4` 回执的不写为已生成。残留瑕疵须显式记录并给出"接受/不接受"判定理由,不静默放过。

### 3. 拿参考图的可用 URL

`canvas_generate_image` 生成的素材**自动入库到媒资**,用 `asset_detail(asset_ids=[...])` 取 `asset_details.url` 即得 CDN URL。

> ⚠️ **不要走 `upload_file`** —— 本机 MCP server 在隔离环境运行,看不到宿主文件系统,传任何本地路径都返回「文件不存在」。需要把本地文件入库时改用 `get_upload_token` + COS SDK 直传。

拿到 URL 后**立即下载落盘**(`asset_details.download_url` 更稳),因为它是有时效的签名地址。

> ⚠️ **不能把 `canvas_get_task` 返回的 `output_assets[].url` 直接塞回 `reference_assets`** —— 实测(2026-09-17,本环境)该短链在提交视频时报「input_images[0] 是一个非法或已过期的媒资短链」。凡是要回喂给视频生成的参考图,URL 一律从 `asset_detail` 的 `asset_details.url` 取,不要复用任务回执里的 url。

### 3a. 提交前资产核对闸门(**强制**)

> 用户原话:「**每次生成视频一定要检查资产,这次生成丢资产了**」。
> 本例事故:17 个生成单元里有 **16 个**实际提交的参考图**少于镜头表自己声明的资产**,累计丢 33 个参考位次;13 个单元出现「有台词的角色 / 关键道具特写 / 主场景」完全没有参考锚定的**断锚**。而 33 张被丢的图**全部早已上传可用** —— 这是纯粹的**规划期漏检**,不是模型问题、不是资产缺失。

**任何 `canvas_generate_video` / `shotlist_generate_video` 提交之前,必须过这道闸门;不通过不提交。**

**第一步:定基准(唯一合法基准)**

以**分镜 / 镜头表的「资产」列**为准,逐镜抽出该生成单元实际出场的全部资产 ID,取并集得到「**应有资产集合**」。

- ❌ **禁止**用「已生成的提交清单」「上一版参考图清单」自证自己。
- ❌ **禁止**因为「这一版只改配时/只改台词」就跳过核对 —— 重排单元、拆分单元、改时长的版本**最容易掉资产**。
- ⚠️ 拆分单元时,**新单元继承原单元该时段内出场资产的并集**;子单元缺了主角、缺了说话人,就是断锚。

**第二步:拿实际值**

从组装好的 `reference_assets` 数组读出「**实传资产集合**」。

**第三步:对差(差集必须为空)**

```
应有 - 实传 = 空  → 通过,可提交
应有 - 实传 ≠ 空  → 停,补齐后重新核对,不得带缺提交
实传 - 应有 ≠ 空  → 警告:多余参考图会稀释权重,逐张确认是否真需要
```

**第四步:核上限(上限必须实测,不得引用未经核实的历史值)**

参考图数量上限**只能**取自**当轮** `canvas_video_provider_config` 返回的 `max_image_count`(读的是本次实际要用的那个 provider 在本次要用的那个 mode 下的值)。

- ❌ **禁止**把某个模型的上限套到另一个模型头上。本环境发生过:**Kling-O3 的 `max_image_count=4` 被误当成 Seedance-2.5 的上限**,导致整批单元被硬裁到 4 张。
- ❌ **禁止**在文档里写下「N 张为平台上限(实测)」却拿不出当轮的查询证据。
- 只有当**真的触限**时,才启用裁剪阶梯:**主角 CHAR → 说话角色 CHAR → CROWD 群像 → 主场景 SC → 关键 PROP → 次要 PROP**。裁剪结果必须逐单元写明「裁了什么、为什么」。

**第五步:核顺序**

数组下标 = 提示词【参考绑定】里的「第 N 张」。排序=权重,统一 **CHAR → CROWD → SC → PROP**;主角 `CHAR-01` 恒排第 1 位。下标错位等于内容全错。

**第六步:写回台账**

核对结果(应有 / 实传 / 差集 / 上限来源 / 排序)写入项目台账的核对章节,作为可追溯凭据。缺项未清不得进入 §5 下载与质检。

**参考实现(可直接跑)**

```python
# 基准:镜头表资产列 → 应有集合;提交参数 → 实传集合
need, have = [], []          # 按镜头表抽并集 / 按 reference_assets 抽
miss = [a for a in need if a not in have]
extra = [a for a in have if a not in need]
assert not miss, f"❌ 断锚:{miss}"          # 差集非空 = 硬阻断
if extra: print(f"⚠️ 多余参考图(稀释权重):{extra}")
print(f"上限来源:canvas_video_provider_config · {MODEL_ID} · {MODE} · max_image_count={MAX}")
assert len(have) <= MAX, "❌ 触限,需按裁剪阶梯处理"
```

### 4. 按确认配置生成视频

先核对 §0 的脚本结果、§0D空间计划/组内状态与白名单导出、三类资产所需的A0作用范围、G1 与 G2,以及 §2c 的资产验收和各段参考数量/顺序,**并通过 §3a 资产核对闸门(差集必须为空)后**,才调用 `canvas_generate_video`;影响站位/运动的待核事实须先确认,不能编造补齐;§0D-6各项核验通过且具备当次授权才可提交,纯文字/规则修订任务不调用。每镜按需绑定人物CHAR(含crowd)/道具PROP/纯环境SC,每张实际图片均计入参考上限,不强制三类全挂;新增群像或其他图必须重新校验数量和图序,layout图片默认不绑定。以下为参数模板,不是默认值;使用前必须用实际已确认值替换并按 schema 组装:

```
mode=<所选驱动模式>
model=<G1确认模型的动态ID>
duration=<当前生成单元确认秒数>
resolution=<G2确认档位的动态value>
aspect_ratio=<目标画幅>
enable_sound=<默认 true(原生音效+对白);仅用户明确要求全部后期时才 false>  # 仅当schema支持;能力核验见§4c/§4c-0,不臆造字段
count=1
reference_assets=[{url, type:"image", asset_id, name}, ...]
short_series_project_id=<实际短番项目ID>
```

本节示例参考素材仅适用于支持 `reference_assets` 的模式。改用纯文/首尾帧/视频编辑等模式时按动态 schema 组装,不能照搬不支持的参数;分辨率不可用时回到 G2,不静默回退至 1080p 或首个选项。

**参考图与提示词的对应关系**:`reference_assets` 的**数组下标**对应提示词里的「第一张图片 / 第二张图片」。顺序错了内容全错,提交前逐个核。

### 4a. 视频提示词默认使用Seedance 2.5格式

此处是本工作流面向Seedance 2.5的自然语言提示词组织约定,不声称存在官方强制JSON或标签语法;不套旧Seedance 2.0的固定15秒窗口。提示词格式选择不等于G1生成模型选择,不自动将已确认的梦宝2.5 OS或其他渠道替换为Seedance-2.5,不取消G1/G2。

每个已确认生成单元提供一条完整可复制提示词,按以下顺序组织;按实际剧情填充,不固定镜头数或均分时长:

```text
【生成单元】单元编号、目标时长、画幅(均取本次已确认方案)。
【参考绑定】实际输入图序 → CHAR演员身份与CHAR:crowd群演成员 / PROP道具外观及必要内饰 / SC纯环境;说明各自职责,图内视图或人数不冒充额外输入,layout图片默认不绑定。
【空间连续性】引用§0D白名单空间文字:固定世界坐标/锚点、组内start/events/end、每个在场者position/facing/front/behind;继承上组仍在场成员,移动转身明确,不透传layout风格/光照/材质/渲染或情绪媒体。机位由摄影另定。
【整体叙事】本段目标、主体关系、起始状态与结束状态。
【时间轴镜头】[局部起始秒–结束秒] 镜号;景别与机位;主体动作的起因→过程→结果;运镜;环境光;衔接方式。
按剧情重复时间轴行,覆盖整个生成单元,连续动作与多镜头均可;镜头时间是编排目标,不保证模型帧级命中。
【对白原文】当脚本有台词且用户要求保留时,按镜号/说话人列出完整原句,保留措辞、称谓、数值和标点;台词与表演说明分开,不用“说了一句/陈述条件”等概述代替。跨镜续句只说一次,无台词镜头不新增台词。
【声音方案】默认填 B;仅当用户明确要求全部后期时才填 A。以下二选一,不同时混用:
A.【非默认·仅明确要求】全部后期:视频静音。保留的台词仅作语义、表演及口型参考,不要求产生声音;全部声音后期制作。
B.【默认】原生原词对白、配乐后期:视频直接用脚本指定语言生成上述原台词对白,按说话人顺序完整说出,各句一次;原生英文保留英文,不翻译成中文。不得删改、即兴补词、吞字或异常加速;编号和表演说明不朗读。不生成配乐;环境声/独立音效来自画面内可见声源、同期生成,画面无声源时按本次另行确认范围处理。画面无可见文字不等于禁止有声台词;无台词单元仍生成环境与动作音效,不静音。
【一致性与限制】身份/道具结构/空间连续性,项目规定的无字标要求;不把三栏、灰底、道具隔离背景或SC无人无道具约束带入成片。
【默认摄影】原样插入style-cinematic-realism“视频默认摄影常量”一次。
```

**默认摄影常量的唯一活动源在style-cinematic-realism的视频专用节**。每条独立视频提示词都须原样包含用户整句一次,优化/翻译/拆分单元后检查不丢失、不重复。英文辅助稿可另附译文,不替换中文默认常量。后续用户明确覆盖当次风格时按当次要求,不能仍叠加相冲突的默认。

**视频风格冲突按新指令消解**:默认摄影优先于原风格基底中冲突的Alexa LF、不加颗粒等视频描述;不将整段旧style_dna与新常量机械叠加。保留兼容的写实材质、柔和边缘、场景事实与主体设定。自然光照须与分镜时间地点相容,夜景不改成白昼;以合理环境光和画内实际光源表现自然可信的照明。ARRI与快门是生成观感描述,不是真实拍摄证明;提示词24fps不等于输出帧率验收,也不构成自行补帧或变速许可,API有相应受支持参数才按确认值传入,输出仍须实测。

动作、运镜、防文字等属于任务层按需添加,不能反向改变人物CHAR排版、道具PROP隔离背景与纯环境SC无人无道具规范。轻微胶片颗粒只在视频默认中启用,三类资产图仍不加颗粒且保留固定英文去噪末句;该去噪末句不复制到视频。仅更新提示词默认不重写已完成任务的实际提交记录,也不自动重生成媒体。

**不自动增加付费试片**:只按已确认的生成单元提交,不用风险验证为由额外生成镜头或候选版本。若确需试片须另获用户明确授权;Seedance-2.5 单条不超过 30 秒仍受 §4b 的一次请求规则约束。

### 4b. 单条直出模式(Seedance-2.5,不超过 30 秒)

**硬约束:Seedance-2.5 单条目标视频 `0 < T <= 30` 秒(含 30 秒),只提交一次视频生成请求,显式 `count=1`、`duration=T`。** 不得拆成 2×15 秒、3×10 秒等片段再拼接。步骤 4 的逐镜批量生成及额外试片闸门不适用于此分支。

提交前动态获取模型 ID 和所选模式的能力。T 必须是当前模式支持的时长;不支持时说明并向用户确认处理方式,不擅自改时长、补帧、循环、拆段或更换模型。参考图数量、音效与分辨率亦按实际配置和用户需求选择,不能套用历史参数。15 秒就提交 duration=15,20 秒就提交 duration=20,不统一拉满 30 秒。

**一条视频不等于一镜到底**:多个镜头、节拍和转场可以写在同一条 prompt 内。仅用户明确要求连续长镜头时才加入一镜到底约束。时间码是内容编排目标,不保证模型严格命中;不固定四拍或均分四段。

内容组织按§4a的Seedance 2.5格式:参考绑定 → §0D空间连续性文字 → 整体叙事 → 按需编排局部时间轴动作/镜头变化 → 按§4c/§4c-0确认的声音方案及一致性约束 → 原样加入视频默认摄影常量一次。全部内容只提交一次;文字分镜Markdown照常提供,“不要分镜图”不取消文字分镜,仅本次明确不要文字分镜时例外。

提交后记录任务 ID,只查询原任务,不能因排队、进度停留或状态未知重复提交。失败先诊断并报告,经用户确认后才重试。成功后下载、质检并交付一条视频,**跳过步骤 6 的拼接**;单文件混音、裁剪或格式转换按用户需求进行。

超过 30 秒另按确认的分段方案执行。例如 60 秒且用户要求每段 30 秒时,使用两个独立的 30 秒生成单元;每段内部不再逐镜拆任务。

历史实测记录(2026-09-16/17,本环境,非恒定能力保证):30 秒 / 1080p 两段均返回 HEVC + AAC / 24fps;单条约 4–5 分钟,进度曾在 99% 停留后成功。编码与进度行为须以当次结果为准。**HEVC 本身不禁止无损拼接**;仅多段分支需要检查流参数与时间戳兼容性,详见步骤 6。

**99% 停留可能与生成收尾或素材入库有关,不能仅凭进度判定原因**(2026-09-17 两段曾停留后成功)。可按准确素材名搜索辅助核对,但必须匹配原 task_id/asset_id,不能仅同名命中就判完成;没有匹配产物则报告仍未完成,按工具约定查询原任务,不长时间阻塞等待或自动重提。明确失败后先诊断,重试仍需用户确认。

**批量提交全数返回同一泛化错误时的隔离诊断矩阵**(2026-09-19 实测有效,一次全败不要急着换模型或改提示词):方侧错误信息常为「请求时遇到了一些问题 / 请联系支持同学」,字面毫无指向性,必须逐维隔离,每次只变一个变量、用最小成本样本(4 秒纯文生视频):① **无参考图 + 模型不变** —— 排除参考图体积/数量/短链问题;② **去掉 `resolution`(走模型默认档)** —— 排除分辨率档位被拒;③ **换同环境另一可用模型** —— 判定是「该模型不可用」还是「链路整体故障」;④ 提示词只用一句通用描述 —— 排除本片长提示词问题。四步里 ① ② ④ 均复现失败而 ③ 成功,即可判定**该 model ID 当前不可用**,结论是换型而非改稿。诊断结论、每次样本的模型/模式/参考图数/分辨率/结果要逐条写入交付文档的提交记录章节,并把 A1 失败表与 A2 重提表并列保存,不得覆盖。

**换型前先跑一条门控再批量**:换型后**先提交 1 条**(建议取参考图最多的单元,风险最高者)并轮询到 RUNNING 且进度确实在走,再批量提交其余单元。换型须按 G2 重新核验分辨率档位是否仍可用,不可用则回到 G2 由用户裁决,**不静默降到下一档**。换型只改 `model`,提示词与参考绑定**逐字复用原稿**,不改写措辞。

**Seedance-2.5 的「固定像素预算」与画幅/分辨率的关系(2026-09-19 实测,必读)**:

- **提交回执里的 `dimensions` 是项目画布占位值,不可信**。传 `aspect_ratio="21:9"` 时回执恒写 `2560×1080`(=项目 `canvas_size_value`),但实际产出的 `output_assets.width/height` 完全不同。**判断真实像素只看 `output_assets` 的 width/height,或下载后 `ffprobe` 实测**,不得用回执或媒资 `media_info` 元数据代替(后者还恒带一条字段全空的 `Audio` 占位,无法据此判断有无音轨)。
- **模型按固定像素面积出图,与宽高比无关**:720p 档在 16:9 出 1280×720(0.922 MP)、在 21:9 出 1470×630(0.926 MP);两者像素面积几乎相同,宽度变宽只是把同样的像素预算摊平。同理 **1080p 档 @21:9 ≈ 2206×946(2.09 MP)**,与实测历史媒资吻合。
- **推论与选档规则**:要拿到 ≥2 MP 的宽银幕素材必须走 `resolution=4`(1080p);`resolution=3`(720p)在 21:9 下只有约 0.93 MP,若成片画布是 2560×1080 就等于降级约 1.7 倍。**提交前把「目标画布像素」与「档位×画幅的实际像素」算一遍**,不要把「回执写了 2560×1080」当作已达标。
- **`aspect_ratio` 不在动态配置的字段列表里,但实际生效**:`canvas_video_provider_config` 只列 duration/resolution 档,不列 aspect_ratio;不能据此判定不支持,也不能不经验证就写进交付文档。验证方式就是提交一条并核对 `output_assets` 的宽高比。
- **参数回执与真实产物不一致时,以产物为准**,并把「本次档位→实际像素」写入提交记录,供后续单元统一规格比对。

**主体一致性按 §2 的人物CHAR/独立道具PROP/纯环境SC规范执行**,不先做人物与场景混合的主参考图,不生成跑姿图或无关轮毂/鞋面特写。人物同一身份依据、同一parent_prop_id下的道具视图需分别复核一致性,不承诺仅凭共用依据就完全一致。每镜按需引用三类,不要求所有输入图都有同一个人,也不强制所有镜头三类全挂;人物输入明确各自身份,汽车及必要座舱只绑定PROP,SC无人无道具且无其倒影/投影/残留局部。纯环境约束仅适用于资产,成片按脚本可人车同框。PROP实际图数计入参考上限,逐生成单元重验数量、顺序与当前模型/模式支持组合;超限先调整并确认,不默默丢道具、不把道具塞回SC,实际数量以已确认方案为准。

### 4c-0. 台词原文锁定及原生音效+原词对白分支(**默认分支**)

1. 用户剧本全文是台词校验的优先源;单独保存来源,不把助手整理的台词表或压缩摘要当成已独立核验的原稿。只有转写表时,能证明逐字对应该表,不能宣称原始全文无遗漏。说话人不明、缺句、混入舞台说明时保留原记录并请求核对,不猜词或自行派给角色。
2. 按生成单元、镜号和说话人提取台词,分开记录占位、跨镜续句、无词抽气与真实台词。记录数不等于台词数;含多段台词的混排记录可只拆分结构,逐字校验提取前后,不读“随后/极低”等指令。检查台词顺序、重复和遗漏。
3. 校验台词是否能落入计划时窗。镜头时码连续、总和等于30秒,只能证明时间表算术闭合,不能证明长句可自然说完。**按单镜算台词密度**(该镜净字数 ÷ 该镜时长;净字数剔除标点与省略号),参照档位:≤4.0 舒适|4.0–4.5 合格|5.0–5.99 偏快|≥6.0 过快(模型必然压缩语速)|≥8.0 严重。数字读法、停顿和表演会影响实长,字数/秒作风险筛查而非实长证明;不得未经授权用付费试音验证,也不以删词、截句或不自然加速解决。
   - **冲突时的处置阶梯**(依次尝试,不可跳级):
     ① **不改词重排时长**——把长句所在镜延长,同时压缩同单元内的留白镜,使单元总长仍 ≤ 模型上限;
     ② **拆单元**——单元已顶到模型时长上限(如 Seedance-2.5 的 30 秒)仍装不下时必须执行。**这是唯一出路,也是用户提「台词太快/要增加镜头和全片时长」时的正解**:把台词过载的单元按自然断点(正反打切换、视线转换、场景切换)拆成两个单元,每句台词获得独立镜时;
     ③ **跨镜切分长台词**——切点只放在自然停顿处,**原文一字不改**,仅编号拆分(如 D-24 → D-24a / D-24b),文字总量不变;
     ④ 拆出的新单元时长**取整**(模型多按整数秒逐档)。
   - **诊断要一次覆盖全片**,不要只查用户点名的镜头:按单元统计台词总字数 ÷ 单元时长、以及单镜密度峰值,输出超标清单与档位分布,再据用户确认的范围(全部超标/含偏快/只救最狠的)执行。涉及段数/段长/幕落点变化须确认后再生成;用户已确认范围与目标语速后可直接执行,不必二次确认。
4. **默认走本分支**:提交前查询所选模型/模式的动态声音能力及 schema,支持时**显式传** `enable_sound=true`(不依赖「不传即 true」的隐含默认,也不臆造字段);无台词单元仍要求生成画面内可见声源的环境与动作音效,**不静音**。仅当用户明确要求全部后期时才改走 §4c。`support_audio`仅说明一般音频能力,不保证脚本指定语言的逐字对白或口型同步;不能支持或能力未验证则披露并暂停,不擅自换模型或降档。
5. 删除新有声prompt内相冲突的全局静音与“不生成对白”限制,但保留不生成音乐等确认约束。配音文本进入最终提交prompt,而非仅藏在后期清单。不得让优化环节重写台词。
6. 旧媒体、任务ID和实际提交参数保留;把旧prompt另存不可变快照,新修订稿与旧任务分开关联。修改声音策略不是重新生成已完成段的授权。明确留存每段generation_revision/audio_policy。
7. 原生对白产物需听检/逐句转写比对,并检查说话人、漏词、替换词、完整句尾、口型;抽帧和存在AAC音轨均不能证明台词正确。转写工具也可能误识,重要差异需人工听检。未验证标待复核,返生成另获授权。
8. 原生对白通过验收后保留音轨,与后期配乐按真实剪辑时点混音,不应用下文默认 `-an` 或“仅映射独立后期母版”删除已确认对白。最终对白完整性、总长与响度另行验收。

### 4c. 全部声音后期添加(**非默认分支**;仅在用户明确要求时启用;audio_policy=all_post_production)

**视频生成只负责无声画面。旁白、对白、音效、环境声与音乐全部后期独立制作/添加。** 本条**不是默认**:只有当用户在交互中明确选择“全部声音后期添加”时,才对本次明确覆盖的范围生效(不是“仅音乐后期”,也不自动作用于所有后续新生成)。未获明确选择时一律走 §4c-0 原生分支,**不得默认启用本条**。切换分支不改写或重做历史媒体。若当次用户明确另改声音方案,先记录覆盖范围再核验,不用旧模板默默恢复原生音轨。

1. 前期剧本/文字分镜保留完整后期声音表:镜号、说话人、台词、语气、计划时点、音效/环境声触点、音乐意图。后期按真实剪辑映射定位,不把计划时间冒充实测;未要求旁白或音乐不强加。
2. 仅本全部后期分支:移出要求生成配乐、环境声、音效或旁白等发声指令,明确静音。用户要求保留的台词正文仍按§4a逐字保留,仅标为语义、表演和口型依据,不删除或概述。用户选原生对白时不执行本条,改走§4c-0;不得用本条再次移除台词或关闭已确认的原生对白。
3. 当前API支持 `enable_sound` 时显式false。其他关闭方式只按当次schema填写,不编造 `audio=false` 等字段;原生固定无声模式记录证据。不能关闭且输出必带声音或能力未知时暂停说明,请用户选择支持静音的已核验模式/模型,或明确授权“保留原片、后期剥离模型音轨”;不自动换模型,不把后期去音冒充原生静音。受影响的G1/G2重新确认,仍有效参数不重问。
4. 下载后独立核对声音开关与实际音轨:无音轨可判结构静音;有音轨不等于有声,应检测是否静音并说明。若模型生成了非静音音轨,保留原始回执/素材并披露,不混入成片、不自动重提付费任务。按获授权方案剥离,画面剪辑默认禁用模型音轨。
5. 后期按已确认声音方案独立取得配音、对白、环境声/音效及音乐;动态核验实际可用音频能力与声音素材授权,缺失音色/台词/必要授权先确认,工具没有音效能力时不冒充已生成。只有用户明确要求时才额外产生付费测试音频。
6. 后期音频映射到最终画面时间线,不从视频素材取所谓“原生环境声”作为默认主轨。若要求精确口型匹配,先核验后期口型/表演方案,不能靠开启原生声音绕过;仅配音不代表口型已经同步。
7. 最终成片可带后期声音;“无声”只约束视频生成产物与画面工作轨,不是要求最终交付静音。按§6与§7对后期独立音轨混音,并实测最终编码响度与真峰值。

### 5. 下载与质检

**必须串行下载**(见 Pitfalls 2),每个文件下载后校验 PNG/MP4 完整性。

抽帧质检先检查目标时间是否在源片局部时长内,再按真实剪辑映射将成片时间换算为源片位置,不能直接把成片时间当源片时间。恒定帧率素材可按 `fps × 源片局部秒数` 定位帧号;超界会少输出甚至零帧,不能先归因于 `-ss` 或关键帧(SEG-B示例见Pitfall 20)。

```bash
# 逐镜各抽 2 帧拼网格
ffmpeg -y -i clips/S01.mp4 -vf "select='eq(n\,30)+eq(n\,160)',scale=420:-1" \
       -fps_mode passthrough "q_S01_%d.jpg"
# 拼版(多 chain 必须显式 -map)
ffmpeg -y -i a.jpg -i b.jpg -filter_complex "[0][1]hstack=inputs=2[out]" -map "[out]" -frames:v 1 grid.jpg
```

### 5a. 原生音效与对白验收(**默认声音方案** `audio_policy=native_verbatim_dialogue_post_music` 必做)

「音轨存在」「有语音活动」「抽帧合格」**都不等于台词正确**。原生对白必须逐句转写比对,流程固定为四步(坑点见 Pitfall 38–41):

1. **工具链**:本机 Python 3.13 上 `mlx-whisper` **装不上**(依赖 `torch` + `numba`,后者在 3.13 无预编译 wheel 需源码编译,实测 8 分钟无进展)。改用 `faster-whisper`(`pip install -i https://pypi.tuna.tsinghua.edu.cn/simple faster-whisper`,**41 秒装完,全为预编译 wheel**);模型 `large-v3` 走镜像 `HF_ENDPOINT=https://hf-mirror.com`,`download_root` 指到项目内 `qc_v3/_models`(约 2.9 GB)。CPU `compute_type=int8` 可用。
   - **2026-09-19 起本机已就绪,先查缓存再谈下载**:`~/.workbuddy/binaries/python/envs/default/bin/python` 内已装 `faster-whisper 1.2.1`,模型缓存于 `~/.cache/huggingface/hub`(`Systran/faster-whisper-large-v3` / `small` / `tiny` 三档全部就位),直接 `WhisperModel("large-v3", device="cpu", compute_type="int8")` 即可**离线加载**,不必再配 `HF_ENDPOINT` / `download_root`,也不受代理影响。性能参考:large-v3 CPU/int8 转写 30 s 音频约 20–25 s(10 段全片转写实测 2 m 33 s)。
2. **按镜头窗口切片转写**(关键,不可省):每个 VO 切一个独立音频片段(窗口前后各留 0.45 / 0.55 s),逐句转写。整段转写会漏句(Pitfall 38)。**转写不带 `initial_prompt`**(Pitfall 39)。
3. **拼音级比对**:`pypinyin` 转拼音 → `difflib.SequenceMatcher` 编辑操作 → 分级为「同音/近音误识」与「真实增删改」(Pitfall 40)。同时统计「实听起止 vs 设计窗口」的偏移。
4. **时间轴回填**:用实测语音时间戳重建字幕轴,加可靠性过滤(Pitfall 41),并回写 `dialogue_fidelity_verified` 与该句的实测起止。
   - **字幕轴用「首尾关键词锚定」重建,不要用词数比例**——转写词数相对原稿总有偏差,按比例分配会造成整段错行。两个必踩的坑:① **归一化务必去掉撇号**,whisper 对 `don't`/`dont`、`Kael`/`Kale`、`goddess's`/`goddess'` 的写法极不稳定,保留撇号会让锚定大面积失败(本轮初次实现即因此漏掉 9 句);② whisper 会给出**过宽边界**,本轮某句被标成 15.73–25.90(10.17 s),`word_timestamps=True` 复核后实为 24.80–25.86(1.06 s)——段级边界不可直接采信,须逐词核对。这些首尾锚点仅作父级对白定位,不能直接把整段作为一个字幕cue。正式字幕须按 §6a-2 的词级证据拆成短句;不再统一强制1.20s停留或0.08s空隙,保留 `raw_start` / `raw_end` 与最终帧级边界备查,听不清/对齐失败不回退计划时码。
   - **字幕文字取已核验实际说出的原稿对应词,不照抄ASR错字**:保留原稿拼写与专名;真实增删改或重复单列差异,未说出的词不得为了原稿覆盖率上屏。短句中文译文与当前英文cue语义一一对应,时间按 §6a-2,不按整段译文挂屏。

```bash
# 切片(示例:SEG-08 的某句,窗口 25.5-28.0)
ffmpeg -hide_banner -loglevel error -ss 25.05 -to 28.55 -i videos_v3/SEG-08.mp4 \
  -vn -ac 1 -ar 16000 -c:a pcm_s16le -y qc_v3/_slice/VO-030.wav
```

**验收结论必须写成「N 条台词,其中逐字一致 X 条 / 同音误识 Y 条 / 真实差异 Z 条」**,并列出 Z 的原文与实听;不得只报一个「通过」。若确实存在真实差异,先披露再做重生成决策,不自动重跑。

**模型档位的选择(2026-09-18 实测补充)**:`small` 档足够承担「台词是否到位」的比对——19 条台词的检查在本机 CPU `int8` 上单段 4–5 秒(模型首次下载约 460 MB),无需每次拉 `large-v3` 的 2.9 GB。`small` 的输出会带更多同音误识(知/志、她/他、读/毒、熟/说、谎/好),这些必须在报告里归到「同音误识」而不是「真实差异」;只有当同音误识掩盖了真实增删改时,才升级到 `large-v3` 复核该句。安装可直接 `pip install faster-whisper`(实测 1 秒完成,全为预编译 wheel),镜像仅在网络受限时使用。

**单音节/超短台词要单独兜底(Pitfall 43)**:经 `vad_filter=True` 的转写会整条吞掉独立成句的单字台词——实测「读。」(D-08)在该窗口内完全未输出(零段),而同句在无 VAD 定点复听时能落到 `t≈2.0–2.7`。凡剧本里有独立单字/双字台词(「读。」「说。」「滚。」),必须对其窗口再跑一次 `vad_filter=False, condition_on_previous_text=False` 的定点转写,才判定「未检出」;不得凭主转写结果直接写成缺失。

**非语音声音也可能触发ASR幻觉,不只静音(历史个案)**:历史尾部片段包含笑声、挣扎声或动作声,却转出 `Oh, my God.` / `Thanks for watching!` / `Thank you.` 等词。以下只用于定位疑点,不能自动豁免:① 不同模型输出不一致;② 命中常见幻觉短语;③ 片段原计划为音效/群体声/无台词。真实语音也可能被不同模型识别成不同文本,典型短语也可能被真实说出,计划无台词不证明实际无语音。

即使三项同时满足或对照句被两模型一致识别,也须回到原音定点听检,按Pitfall48保留来源、时间窗及复核结论;无法听清保持待人工听检,不能凭能量、模型一致性或计划窗口判无词/豁免。历史记录保留,不据本条自动重跑项目。

**带期望原文的 `initial_prompt` 不能用于自证一致性或时间戳准确**(与Pitfall39同源):此类输出只作候选对齐线索,词边界仍须按 §6a-2 核对真实发声;对白一致性采用中立转写结合原音复核。分别记录提示依赖、原音依据及待核项,不把ASR结果当独立证据。

### 6. 按文字分镜剪辑成片

**完整视频制作必须交付一条剪辑完成的MP4,不能只交分镜Markdown、资产或散落片段。** 多个生成单元按分镜镜号和情绪/动作关系排序,选择实际可用的入点/出点,处理衔接、节奏与声音后合片;不是按文件名机械拼接。Seedance-2.5不超过30秒仍仅一次生成,可在同一源片上按需裁剪、混音、封装,不为剪辑额外拆分生成请求。单条内切换已经满足分镜时可保持原剪辑,不强加转场。

维护镜号 → 生成单元 → 源文件 → 实际source_in/source_out → 成片timeline_in/timeline_out的映射,写入分镜Markdown的“最终剪辑对应表”;实际镜头缺失、顺序变化或时长偏差须如实标注,不把计划时间码冒充实测。必要的返生成先说明并取得确认,不能为补齐分镜擅自增加付费任务。

素材应按同一帧级时间线裁剪/设置PTS,声音按§4c/§4c-0确认分支对齐(默认§4c-0)。全部后期分支只取画面,后期声音按真实镜头映射定位;原生对白分支保留已验收对白,与画面同步裁剪并纳入后期混音,不用统一-an删除。下方仅画面拼接及独立后期母版命令是全部后期分支示例;原生分支须显式保留/映射对白轨,不能原样照抄。复用旧音轨仍须单独记录授权来源和范围。转场重叠、末段裁剪计入总时长;字幕、品牌标识、变速、超分和明显的首尾淡入淡出按已确认方案,不自动加“惯例加工”。音乐与环境声按实际素材混音,不只凭波形声称听感合格。最终核验目标总时长、像素、帧率、音画同步及最终编码后的响度/真峰值。

**仅多段分支需要拼接;单源成片跳过多文件concat。** 拼接前检查编码参数、分辨率、像素格式、时基、音轨参数与时间戳兼容性;同模型、同分辨率和同codec不足以保证无损拼接。兼容且不需要精确重裁剪时可用concat demuxer + `-c copy`:

先使用文件写入工具生成只含已确认源片路径的concat列表,再执行(不是shell通配符搜集片段):

```bash
ffmpeg -y -f concat -safe 0 -i list.txt -map 0:v:0 -an -c:v copy out/film_picture_only.mp4
```

**音频流时长偏差必须逐段对齐后再拼接(有损音频整包 padding 坑)。** AAC 及多数有损音频以固定样本数整包编码(AAC 为 1024 样本;32kHz 下即 32ms/包),每段音频被编码器 padding 到整包,普遍**比视频流长 14–38ms**。段数一多偏差线性累积:26 段 × ~32ms ≈ **+0.84s 音画漂移**,片尾口型与声音明显错位,而逐段单独播放时看不出来。

处置:拼接前逐段 `ffprobe` 比对视频流与音频流时长,用**误差反馈裁剪**——对每段在 `floor/ceil` 两个整包候选数中选使「累计差」绝对值最小的那个,用 `-t <包数 × 包时长>` 裁音频,视频保持 `-c copy` 不重编码。目标把累计差压到 **±1 包(≤32ms)** 以内。不要统一用 `-shortest`,也不要对每段套同一个裁剪值(两者都会留下几百毫秒的残余累积)。

```bash
# 1) 逐段探测两流时长(注意 -select_streams 分别取 v:0 与 a:0)
ffprobe -v error -select_streams v:0 -show_entries stream=duration -of csv=p=0 clip.mp4
ffprobe -v error -select_streams a:0 -show_entries stream=duration -of csv=p=0 clip.mp4
# 2) 按选定整包时长裁音频(包时长 = 1024 / 采样率;此处 32kHz → 0.032s,包数 939)
ffmpeg -y -v error -i clip.mp4 -c copy -t 30.048 -movflags +faststart clip_aligned.mp4
# 3) 用对齐后的片段做 concat
```

实际下载的片段可能是 HEVC 或 H.264,以当次探测为准。需要重编时按真实入出点分别trim/setpts后仅拼画面,不使用 `[0:a]`、`[1:a]`。例如已确认两段各取30秒且帧率24fps时(数值不是默认):

```bash
ffmpeg -y -i clipA.mp4 -i clipB.mp4 -filter_complex \
"[0:v]trim=duration=30,setpts=PTS-STARTPTS[a];\
 [1:v]trim=duration=30,setpts=PTS-STARTPTS[b];\
 [a][b]concat=n=2:v=1:a=0[v]" \
-map "[v]" -an -c:v libx264 -preset slow -crf 18 -pix_fmt yuv420p -r 24 \
-movflags +faststart out/film_picture_only.mp4
```

后期将配音、音效/环境声、音乐分别定位到同一时间线,先建立浮点预混母版,再按交付目标处理;最终只映射这份独立声音母版:

```bash
ffmpeg -y -i out/film_picture_only.mp4 -i audio/post_mix_master.wav \
-map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k -ar 48000 \
-movflags +faststart out/film_post_master.mp4
```

上述母版时长须先与画面核对,不能用shortest静默截短;独立音轨处理和响度目标按本次素材,不自动套历史数值。

要点:
- 旁白/对白、SFX/环境声、BGM均来自独立后期素材,分别裁剪、定位并试听增益。手动控制电平时显式 `amix normalize=0` 并留足峰值余量;normalize 对输入施加共同缩放,本身不改变两路响度比。
- 后期音轨响度每次不同,不能套用旧案例mean/peak。先检测并试听再决定是否压低音乐;RMS/样本峰值不等于LUFS/真峰值。中间混音用 `-c:a pcm_f32le` 保留峰值余量。
- 集成响度与峰值目标按交付规格设置;`I=-14` 只是本项目网络版本目标,不将 `I=-19` 当作通用影视规范。使用 EBU R128 检测实际结果,不把滤镜目标当成测量值。
- **带人声演唱的 MV 以歌曲为主、环境声为垫层**,增益按实际素材和试听设置,不硬套 `1.35` 或 `0.5`。两段环境声若交叉淡化,会缩短音轨并让后段提前;须按视频切点对齐并核对时间戳,可做局部淡入淡出,不能直接 acrossfade 后以补静音掩盖音画错位。
- **限幅器与真峰值需分开核验**:本机 `alimiter` 的 `level` 默认 true(自动补偿电平),`limit=0.95` 并不表示最终固定留出峰值余量;可按需求显式 `level=false`。AAC 编码也可能改变峰值。按交付目标使用 loudnorm 等处理后,必须对最终编码的 MP4/AAC 运行 `ebur128=peak=true` 读取集成响度和真峰值,不能用编码前 WAV 结果代替最终验收。
- **ffmpeg 不允许读写同一路径**:把重做的音轨封装回已有成片会直接报 `Output ... same as Input`。先写 `out/_final_tmp.mp4`,再 `mv` 覆盖正式文件名。
- **AAC编码后的真峰值须实测**:余量随素材和编码配置而变,不把某次0.5–1.0dB当定律。真峰值用dBTP表述,对最终编码再解码的MP4核验,不能以WAV结果代替。
- **`alimiter`自动补偿可关闭,不应一律禁用**:若采用它须核验支持的 `level=false`,避免默认自动增益影响目标。压缩/限幅和loudnorm均按素材选择,再实测最终编码;某次响度抬升不能推导固定+1.1dB或“只能调整TP”。
- **两遍loudnorm先测再传入measured_*,不等于运行两次动态滤镜**:PLR=TP−I,线性增益可能无法兼顾目标响度和峰值上限,可比较合理动态处理方案;不宣称只能某一种模式或LRA必然压到固定值。LRA低于目标值本身不是失败,但2–3LU也不是所有广告的通用合格标准,需按交付要求与试听判断。
- **后期独立音效/环境声的段间电平按实际内容调整**:先检测并试听,不因平均响度差就自动等量补偿,避免抹去有意的强弱变化。处理仍服从统一剪辑时间线;历史原生音轨补偿数值不复用为新项目默认。

### 6a. 片内包装图形层(本机 ffmpeg 无 freetype 时的实现路径)

**"要有包装"通常指两层:片内图形层(品牌板/参数条/片尾 Slogan)+ 交付物料(封面海报)。开工前先问清是哪一层,不要默认其一。**

历史本机ffmpeg构建缺少drawtext/subtitles/ass。每次分别核验实际滤镜能力;仅未发现drawtext不能证明其余滤镜或所有字体库均缺失。不可用时不要自行改动系统ffmpeg,可走「隔离环境Pillow渲染透明PNG → ffmpeg overlay叠加 → fade控制进出」。

前置与要点:

- Pillow 装在隔离环境:`~/.workbuddy/binaries/python/envs/default/bin/pip install Pillow`
- 字体走系统字体文件:`/System/Library/Fonts/Helvetica.ttc`(英文);中文用 `/System/Library/Fonts/Hiragino Sans GB.ttc`,**index 实测映射为 0=Hiragino Sans GB W3、1=.Hiragino Sans GB Interface W3、2=Hiragino Sans GB W6**,常规正文取 index=0、加粗取 index=2;标题可用 `~/Library/Fonts/TencentSans W7.ttf`(TencentSans W7 粗黑)。
- 历史本机 `/System/Library/Fonts/PingFang.ttc` 不存在,当前应先验证字体路径,不照抄网上路径。**`ImageFont.truetype()` 对无效路径会抛错;此前脚本的`try/except`吞掉错误并调用`load_default()`才造成看似静默回退**,不是Pillow自动回退。中文需选确实包含字形的字体,加载失败应显式报错;对候选`(path,index)`运行`truetype()`、`getname()`并实际渲染中文后看图,不凭文件生成判成功。
- **混排字符串不要用拉丁字体渲染(2026-09-18 实测,缺字方块)**:同一行里含中文与数字时,若把整串交给 Helvetica 之类的拉丁字体(本项目 `进度 0` 用了 `HelveticaNeue.ttc`),中文会渲染成缺字方块(tofu `▯▯`),且**不报错、文件照常生成**。要么整串走 CJK 字体,要么中英拆成两次 `draw.text` 各用各的字体。所有含中文的图形层定稿前必须抽帧看图确认无方块。
- **`-loop 1 …` 参数串存进 shell 变量时必须用 `${=VAR}` 展开(zsh)**:把 `LOOP="-loop 1 -framerate 24 -t 120.276"` 后写 `$LOOP -i x.png`,zsh 不做词分割,整串被当成一个选项,ffmpeg 报 `Unrecognized option 'loop 1 -framerate 24 -t 120.276'`。改 ` ${=LOOP} -i x.png`(或直接内联展开)。`bash` 下无此问题,但本项目默认 shell 是 zsh。
- 板件按成片实际像素比例设计;2560×1080并非严格21:9,1470×630才是。overlay前核验同一宽高比,再等比缩放或按确认方案留边,不能把比例差写成无损贴合
- **透明 PNG 必须变成视频流**,否则单帧流上 `fade` 的 `st` 无法在指定时间点生效(单帧输入的时间轴只有 t=0)。两种做法:① 全片长度的流(`-loop 1 -t <片长>`)靠 `fade` 的绝对 `st` 控制进出,适合板件很少时;② **每图层只取自身时长**(`-loop 1 -framerate 24 -t <图层时长>`)+ `setpts=PTS-STARTPTS+<start>/TB` 把流平移到目标时间,`fade` 用**相对** `st=0`。图层多(本项目 5 卡片 + 35 字幕 = 40 层)时用②,避免把每层都撑成全片长度。
- **多层叠加的时间定位只能用 `setpts`,不能用 `-itsoffset`**:`-itsoffset <t> -loop 1 -t <d> -i layer.png` + `overlay` 实测**叠加层完全不出现**(整帧仍是原图且无报错)。用②的写法,并配 `overlay=0:0:eof_action=pass:shortest=0`,40 层链一次编码通过(720×1280/317 s 实测约 65 秒,8 核并行)。详见 Pitfall 42。
- 所有板件 `overlay=0:y` 叠同一位置,靠各自的 `fade alpha` 控制进出,一个滤镜链串完
- **同屏多图层不要互相排斥,改位置错开**:对白字幕固定在底部(竖屏基线约在画面高度 79%),片尾卡/短信卡/悬念字幕放中部,两者可长时间共存;若把尾卡安排成「字幕消失后才出现」,30 秒段落往往没有空档可放(本项目 SEG-10 对白占满全段)。

```bash
ffmpeg -y -i clipA.mp4 -i clipB.mp4 \
 -loop 1 -t 60 -i plate_head.png -loop 1 -t 60 -i callout_01.png -loop 1 -t 60 -i plate_tail.png \
 -filter_complex "\
[0:v][1:v]concat=n=2:v=1:a=0,trim=0:60,setpts=PTS-STARTPTS,fps=24[base];\
[2:v]scale=1470:-1,format=rgba,fade=t=in:st=0:d=0.8:alpha=1,fade=t=out:st=2.4:d=0.6:alpha=1[h];\
[3:v]scale=1470:-1,format=rgba,fade=t=in:st=13.5:d=0.4:alpha=1,fade=t=out:st=16.1:d=0.4:alpha=1[c1];\
[4:v]scale=1470:-1,format=rgba,fade=t=in:st=57:d=0.9:alpha=1[tl];\
[base][h]overlay=0:5[b1];[b1][c1]overlay=0:5[b2];[b2][tl]overlay=0:5,format=yuv420p[vout]" \
 -map "[vout]" -an -c:v libx264 -crf 20 -preset veryfast -r 24 -t 60 out/_viz_test.mp4
```

- **片尾品牌板不要淡出**。淡出会让末帧回到空镜,广告收尾应定格在品牌上;淡入后保持到最后一帧。
- 参数标注条的时间码必须落在能承载它的镜头上(某次两条分别压在两段的座舱镜头内),先抽帧核对再定稿,不要只按分镜的秒数硬贴。
- 抽帧核对四个状态(淡入中 / 全显 / 淡出中 / 已消失)确认进出窗口正确;视觉版可先用 `-preset veryfast -crf 20` 快速验证,定稿再压正式版。
- **源片是 21:9 时图形板必须等比贴合**:`scale=1470:-1` 后按 `(H-h)/2` 垂直居中,不要拉伸填满导致标识变形。

**Pillow 叠加的致命坑**:在 `RGBA` 图上直接用半透明色 `draw`(如 `fill=(5,9,15,a)`)**不会做 alpha 混合**,而是把该像素写成 (5,9,15) 并附上 alpha;紧接着 `convert("RGB")` 又会**丢弃 alpha 通道**,于是半透明压暗层变成**纯黑块**。必须画在独立图层上再合成:

```python
layer = Image.new("RGBA", (W, H), (0, 0, 0, 0))
d = ImageDraw.Draw(layer)
# ... 压暗带、渐变、文字、logo 全部画在 layer 上 ...
img = Image.alpha_composite(base.convert("RGBA"), layer).convert("RGB")
```

判定方法:抽一帧与未叠加的原帧比较同区域平均亮度(`signalstats` 的 `YAVG`)。若叠加后半透明区域亮度贴近 0 而原帧是上百,即是此 bug。某次实测原帧底部 `YAVG=120`,叠加后只剩 `12.96`;修复后回升到 `101`(仅按设计压暗约 16%)。

#### 6a-1. 图形层合成与技术验收

先按 §6a-2 形成语音短句字幕,不能把一整段对白渲染成一个多行图层。涉及前置片头、正片、片尾时,先统一三段的实际时间线,再按成片时码叠字幕;也可先在正片上叠字,但须使用正片局部时码。两条实现路径均须实测,不宣称某一条普遍更可靠。

```text
不可变无字幕母版 + 已确认片头/片尾
  → 核对画面、音轨、时基、源入出点
  → 得到成片时间线
  → 将词级语音时间经真实剪辑映射换算为成片时间(偏移只加一次)
  → 逐条叠加短句字幕(中文一行 + 英文一行)
  → 编码后按 §6a-2 逐条核对显示内容及语音起落点
```

- `overlay` 的 `enable` 中 `t` 对应其底片输入流的时间戳,不自动等于成片时间。历史项目曾把带 +8 s 片头偏移的窗口用于正片局部流而整体晚 8 s;这是时码域混用,不是 concat 前叠字必然错误。拼接输入应按需要统一起点和时基,图层实际输入索引从当前输入清单取得,不照抄旧示例数字。
- 字幕窗口采用帧级半开区间 `[start_frame, end_frame)`,相邻短句不在边界帧同时出现。纯静态字幕与带 alpha 动画的图层实现分别核验;不把单帧 PNG 的保持能力等同于它具有可运行 fade 的完整时长。
- 片头/片尾是否淡至黑场或定格,沿用该项目明确方案;不得由广告/剧集类别自行推导。规则更新不授权重新渲染片头、片尾或视频。
- **检出像素差只说明画面发生变化,不证明字幕文本正确、短句划分正确或与语音同步。** 重编码、缩放和色彩转换也会产生差异。中点截图仅用于字形与位置检查;完整同步验收见 §6a-2。
- 历史 `max|diff|>5`、`|diff|>60` 像素占比和 0.3% 等值仅为该素材的排查线索,不能作为通用通过阈值。需要对照时先精确对帧,以字幕图层 alpha 掩膜及局部差值检查文字形状,并核对同编码设置的无字对照;疑点保留待复核。
- 不为保险给底片添加 RGB/YUV 往返。按实际滤镜构建显式核验像素格式,不能把 `format=auto` 说成 overlay 的通用默认。单帧特定链路的 PSNR=inf 不代表有损编码后整条成片无损;历史约54 dB也不是固定损失。
- 缩略图疑似中文重影,应读原尺寸裁切再定性,不能预先认定都是降采样问题。
- 容器和码流色彩标签以实际探测为准;`unknown` 表示缺少标记,不单独证明像素转换错误或具体播放器行为。确需补标记时先确认素材的真实色彩规格,优先测试不重编码的重封装,保留输入、复核输出。未指定流复制的解码 MD5 相同只证明被测解码数据相同,不能称压缩码流逐比特相同;若主张码流一致,需另比对压缩流数据。

#### 6a-2. 中英短句字幕标准(唯一活动源)

**用户选择「仅更新标准」「完全按图2」:中上英下,中文较大、英文较小,各一行,底部居中;按实际语音短句切换。** 本节覆盖旧的英上中下、中文小一号、底边距57px和整段长句挂屏规则。仅约束已要求的字幕,不自动为无字幕项目添加字幕。调用字幕专用流程时明确传递本节标准;第三方包的默认字号、顺序、强制大写、整段桥接或安全区不能静默覆盖用户选择。

**范围边界**:本次不转写、不生图、不重烧字幕、不剪辑、不改音轨或口型、不执行项目脚本。既有MP4、SRT、JSON、图层和历史回执保持原样;新版标准不是旧成片已合规的证明。后续重做须另获授权,从无字幕母版开始,另存新版本。

**版式**:
- 参考用户图2的有效影像区,不把截图上下黑边、播放器边框、平台角标作为成片设计。只借用字幕的视觉比例与位置,不添加黑边、不改画幅。
- 中文在上,英文在下,两行水平居中;中文较大,英文约为中文字号的70%–80%,白色常规或中等字重、细黑描边/轻微阴影、无底板,英文自然大小写。
- 几何起点按有效影像区高度 `Ha` 缩放:中文名义字号约 `0.053×Ha`、英文约 `0.039×Ha`;文字可见包围盒底缘距有效影像区底部约 `0.03×Ha`,两行可见字形间隙约 `0.008×Ha`。1280×720无黑边时的调试起点:中文38px、英文28px、底距22px、行间空隙6px、描边约2px。以上为截图估算及实现起点,**不是精确测得的参考图字体参数或本片已渲染通过值**;需用字体真实bbox及正常播放尺寸校准。
- 字幕总块控制为两行,不用三行英文加两行中文。每行不超过有效宽度80%,短句自然居中,不拉伸字距填宽;平台UI确实遮挡时记录冲突并确认调整,不机械套旧竖屏安全区。

**分句与文字**:
- 一条字幕对应一个当下正在说的短语/短分句,不能一条对应整段独白或整个生成单元。先按语义和真实停顿分句,再按宽度细分,**不是把旧长字幕简单缩小或折成更多行**。
- 通常每条英文2–5词、约32字符内,中文约8–16字内,均为拆分起点而非硬砍词规则。专名与固定词组尽量完整,过长时结合真实词级边界继续分句,不省略原词,也不把全片统一字号随长句任意缩小。
- 中文按对应英文短句重新做语义配对,两语共享同一cue的起止,不能机械等字数切译文、提前揭示后句,或英文已换句而中文仍挂整段。
- 英文取已核验实际说出的原稿对应词,保持拼写与专名;若原音真实漏词、增词、重复或改词,与剧本差异另列,不把未说出的原稿强行挂上屏,也不偷偷删音改词。待裁决差异保持待核。

**语音驱动时间轴**:
1. 读取与最终剪辑一一对应的声音素材。采用词级语音时间戳/音频强制对齐并核对原声;缓存须能追溯源音、剪辑版本、词序及时间基准。18条对白只是父级记录,拆分后字幕数按实际语音产生,不固定为18条。
2. 每条短句的raw起点取第一个实际词的发声位置,raw终点取最后一个词的结束;优先按停顿、呼吸、语义和换人处分段。禁止按词数/字数/整段时长平均分配,禁止用分镜计划时间填充缺失词级时间戳。缺失/异常项定点重对齐或待听检,不伪造精确同步。
3. 显示起点跟随短句开口,按帧取整而非机械提前。末尾允许极短阅读余量(建议0–0.12s),不得跨越下一短句或说话人起点,不跨明显停顿。取消统一强制最短1.20s及固定0.08s空隙;短促台词按实际发声处理,连续话语可无空隙切换。可读性不足先优化短句边界,不提前展示后面的台词、不延长遮盖下一句。
4. 语音时间通过真实source_in/timeline_in、片头时长与变速关系换算,仅加一次偏移;记录raw和最终帧级显示边界,禁止累积舍入导致漂移。
5. 用词级时间戳实现的是**短句字幕与语音同步**,不是逐字跳动、卡拉OK或自动修嘴型。可见人物说话时用连续播放辅助核对;旁白、画外音仍按音轨,不强求画面上有嘴。原音与原嘴型若本来不一致,单列问题,不移字幕去伪装音画同步。

**验收门槛**:
- 逐条核对短句起止、说话人、两语语义、文字遗漏/重复、重叠和停顿清屏;每个cue可追溯父对白ID和起止词ID。拼回英文应与已核验的实际对白对应,无静默增删词。
- 字幕起点相对核验发声起点的偏差建议控制在约0.12s内,尾点不得截掉未说完的词,额外停留建议不超过0.12s且不跨下一cue。这是制作目标,不是声称ASR必然达到;超出或听不清须列待核,不假报同步通过。
- **必须连续带声回放**检查长独白、密集交替、停顿、换人及首尾;短句边界逐项复核。静态截图、词级数据生成成功、层数匹配、像素差和PSNR都不能单独证明同步。无法实际听检/回放时明确标记待人工复核。
- 至少保存短句台账字段:cue_id、parent_dialogue_id、speaker、en、zh、first_word_id、last_word_id、raw_start、raw_end、film_start、film_end、review_status。字形/字号/位置用原尺寸抽帧检查;音轨与口型问题独立记录。
- 报告分列「版式核验」「文字覆盖」「短句语音同步」「原片音画/口型待核」,不再把“18/18有字”写成“字幕已同步”。


#### 6a-3. 海报与其他信息板(不作为对白字幕默认)

本节仅供已确认的海报/信息板使用,不能用下方压暗带示例覆盖§6a-2的无底板字幕版式。

**海报/图形层的可读性优先靠文字描边,而不是把背景压黑**:

```python
d.text((x, y), ch, font=fnt, fill=fill, stroke_width=2, stroke_fill=(3, 7, 12, 185))
```

压暗带过重会让画面出现可见硬边,看起来像渲染故障而不是设计。合理量级参考:底部压暗带高度约占画幅 20–26%、最大 alpha 70–90、曲线指数 1.5–1.7,配 2px 描边即可让白字在中灰雪原上清晰可读。

**封面海报**:从成片抽帧再叠信息带。选帧时避开主体与文字区冲突的画面——某次三个候选里,侧跟镜头虽展示车体最好,但车占据右侧导致右下角 Slogan 压在车头上;最终改用"车头正面冲入冰河"帧,文字落在干净水面上。信息带左右分栏(左品牌 / 右 Slogan)时,中文与英文两行的行距要显式留够(中文 31px 与英文 14px 之间需 ≥8px 间隙),否则会重叠。


### 7. 后期独立声音制作(配音、音效、环境声、音乐)

本节在对应声音分支的视频验收及剪辑定位后执行。全部后期分支按§4c清单取得独立素材,不把发声需求放回视频prompt;默认原生分支按§4c-0保留已验收对白与音效,只制作已确认的后期声部,不重新配音覆盖原词。后期旁白/对白先核对台词与音色,音效/环境声核对触点、长度及授权,音乐核对用途与有无演唱。未要求的声部不强加;音频工具缺失某能力时先说明与确认,不伪造已完成。各音轨保留可追溯文件/任务ID、实际时长和剪辑入出点。

音乐分支:按声音需求选择 `canvas_generate_audio` 的歌词模式:纯器乐用 `mode="music"` + `lyrics_mode="none"`;人声演唱用当前模型支持的歌词输入模式和用户确认的歌词。生成曲长以实际结果为准,需裁剪时结合歌曲结构与试听;频谱谐波或能量包络不能证明含有人声、歌词正确或演唱完整,无法试听须明确标为待人工复核。

**先做能量分析再决定切哪段**:

```bash
ffmpeg -hide_banner -nostats -ss <秒> -t 8 -i bgm.mp3 -af volumedetect -f null - 2>&1 | grep -E "mean|max"
```

选弧线完整的一段(轻起 → 抬升 → 峰值 → 收束),别机械取开头。

**打完整包络再选段**(10 秒一段遍历全长,比只看几个点可靠):

```bash
for seg in $(seq 0 10 130); do
  v=$(ffmpeg -hide_banner -nostats -ss $seg -t 10 -i bgm.mp3 -af volumedetect -f null - 2>&1 \
      | grep mean_volume | sed 's/.*: //;s/ dB//')
  printf "%4ss %7s\n" "$seg" "$v"
done
```

实测某次 133s 曲子的包络:`0s -19.4 / 20s -18.4 / 30s -13.9 / 60s -13.5 / 90s -12.0(峰) / 100s -15.3 / 130s -19.3`。取 **22–82s** 得到「安静开场 → 一路爬升 → 品牌定格时落在最高点」,比取 0–60s(结尾音乐还在往上走,收不住)明显更合广告结构。

后期不要用“只映射BGM”的封装命令覆盖已经制作好的旁白与音效。先按真实时间线将所有已要求声部混为 `audio/post_mix_master.wav`,核对时长、可懂度和声画触点,再按§6显式映射该母版与画面。只有用户明确仅要配乐时,才允许音乐作为唯一音轨;歌曲和环境声比例按试听而非只凭包络判定。

### 8. 交付版压制

只读取§6本次记录且已验收的 `out/film_post_master.mp4`,它的音轨来自确认的最终混音母版:全部后期分支用独立后期声部,原生对白分支包含已验收并保留的原生对白。输入缺失即停止,不回退到目录里的旧film.mp4或测试版;输入输出路径必须不同。已满足交付规格时直接复用,不为套示例再有损重压。

确需压制时显式映射已确认画面与后期音轨,编码规格按本次目标核验。以下为示例,不把High/4.1硬套所有分辨率帧率:

```bash
ffmpeg -y -i out/film_post_master.mp4 -map 0:v:0 -map 0:a:0 \
  -c:v libx264 -preset slow -crf 19 -pix_fmt yuv420p \
  -c:a aac -b:a 192k -movflags +faststart out/film_delivery.mp4
```

最终交付文件再次测量响度、真峰值、总时长及音画同步;原声轨未获授权不得通过默认映射回流。用户明确最终也要静音的例外用 `-an` 并记录,不自动删掉已要求的后期声音。

顺带出一张 contact sheet 供快速审片(每 N 秒一帧拼 5×4 网格)。抽帧网格是后期审片结果,不是预生成分镜图片。

### 9. 最终交付、无限画布归档与Markdown回写

完整制作至少交付《项目名_成片.mp4》《项目名_文字分镜.md》与**已整理并验收的项目无限画布**。分镜Markdown保留已展示的计划版本,并补上实际剪辑映射、偏差、确认配置及验收记录。**全部项目素材、完整提示词和剪辑清单必须按 §9a 上画布,不再“按需附带”,也不能只交本地文件或只上传最终MP4。** 本地原件与可下载交付仍保留,画布不替代文件备份。仅文字任务只归档其已授权产物,不为凑齐分区生成媒体;仅规则修订不上传或调整现有画布。

生成中镜号/资产ID未知时标为待生成,不伪造。交付前将真实完成状态、task_id/asset_id、文件路径及画布映射回写项目配置;媒体完成、画布归档完成分别记录,不能把仍pending的项目当作归档已完成。

### 9a. 全素材与完整提示词上无限画布(唯一活动源)

**最终交付硬要求:项目内全部素材与对应完整提示词都在项目无限画布中可定位、可查看、可追溯,并按制作阶段整理。** 覆盖已制作、已使用及需要追溯的未采用版本,不是只放缩略图、成片或一张链接总表。用户本次选择“仅更新交付标准”:本轮不查写云端、不上传、不移动现有节点、不运行项目脚本、不生成/重烧媒体;未来实际归档须有对应项目的执行授权与真实目标画布。

#### 9a-1. 归档范围与分区

| 区域 | 必须归档的已有内容 |
|---|---|
| 00 项目导航 | 项目名、版本、目录、分区定位、采用版本、完成状态、缺项/待确认清单及使用说明 |
| 01 前期文字 | 需求、原始剧本、创意/设计方案(如有)、文字分镜、空间文字计划、确认记录;草案与定稿分开 |
| 02 人物CHAR | 主演/有台词角色三视图、CHAR:crowd群像、逻辑ID与成员映射、对应完整提示词与实际规格 |
| 03 道具PROP | 全部独立道具及已有视图,同一parent_prop_id下关联外观/内饰等;对应完整提示词 |
| 04 场景SC | 全部纯环境资产、逻辑SC编号、对应完整提示词;不混入人物或道具分类 |
| 05 视频单元 | 全部源片与已有版本,按集/SEG/镜号排序;完整实际提交prompt、参考输入图序、生成参数、任务与产物关联 |
| 06 声音 | 已有配音/对白、音乐、环境声/音效、混音母版,及实际使用的文案/提示词与时点;仅内嵌原生轨标明所在源片,不冒充独立音频文件 |
| 07 字幕与包装 | 已有字幕轴/词级对齐台账、译文、图层、片头片尾/封面、包装设计文字;脚本/参数、完整帧序列及清单可追溯 |
| 08 成片与验收 | 当前成片、无字幕母版、最终文字分镜、实际剪辑对应表、验收报告/图及待核项 |
| 09 历史与未采用 | 旧稿、被替换素材、已存在的测试素材和失败任务记录,与其prompt/来源关联并标“未采用”;不删除,不混入当前采用区 |

“全部”指该项目的生产与交付素材,不包含账号凭据、令牌、环境变量、软件依赖、模型缓存或无关个人文件;不借归档扫描其他个人目录。未制作的声部/媒体标未制作或不适用,不为归档新增生成任务。失败任务无产物就只保留实际提交记录,不伪造素材。

#### 9a-2. 素材与提示词一一对应

- 媒体与其prompt文字卡成组或相邻摆放,用逻辑ID、版本、状态与互相指向的标识明确对应;同一prompt有多个实际产物时保留一对多真实映射。不把名称相同当同一版本。节点命名建议“类别/逻辑ID|名称|版本|采用状态”,视频同时标SEG/镜号范围。
- 提示词必须是**完整、可复制的文字**,不能用截图、摘要或“见本地文件”代替。保留实际提交原文,包括实际使用的中英文稿、负面限制、参考绑定与摄影等内容;未提交的新稿单列“草案/未执行”,不得用当前规范改写旧任务prompt来冒充历史提交。
- 长prompt按内容顺序分成编号文字卡,能无缺漏拼回原文,并保留原文附件/内容哈希供校验;不因画布卡片长度限制截断。设计草案、资产prompt、视频prompt和声音prompt按来源区分,不互相替代。
- 每项至少登记逻辑ID、类别、名称、版本、采用状态、来源文件/来源记录、画布ID/节点ID(仅实际取得时)、真实task_id/asset_id(适用时)、实际模型及参数、参考资产顺序、关联镜号/生成单元、prompt来源/版本、验收状态。不适用用N/A,缺失用待核,不能倒推或补造历史prompt/模型参数。
- 本地程序化包装、字幕、人工编辑、用户提供文件可能没有生成prompt:如实标“非模型生成”,附真实文案、脚本/参数及来源,不杜撰。新字幕标准与未重制的旧SRT/成片分别标识,不能让归档状态冒充字幕同步已通过。

#### 9a-3. 整理与实现边界

先建立项目范围内本地清单,再对照实际目标画布及已登记节点;优先复用原项目画布和已有资产,补齐缺项,不另建无关联的重复画布。发现多个候选目标或无法确认归属先询问,不猜ID。只用当次可用且已核验的操作能力,不假设可创建文字节点、连线、分组或自动布局;不解码/改写不透明画布草稿,不通过重新生成把已有素材放回画布。

图片/视频/音频优先使用可预览/播放节点,文字使用可读可复制节点;长文、SRT/JSON、脚本及帧序列如无法原生承载,须明确限制,采用**画布中可访问的完整文件附件或归档包 + 清单/预览卡**,必要时先确认替代承载方式。全部源帧须在可取回的归档内,不只给精选帧;程序化预览/联系表不等于新增模型生成。附件承载与原生节点分别记录,不能声称每项均可原生编辑。若连可访问附件/文字都不支持,则报告阻塞及待补项,不以本地路径、失效短链或仅媒资库入库冒充已上画布。

沿固定阅读方向按阶段排布,分区有可见标题,媒体/文字卡留足间距、不遮挡,视频按实际单元顺序;提示词邻接或有清楚可追随的关联,版本状态可辨。分组/连线不可用时使用已支持的标题、位置及ID关联,仍需真实视觉检查,不能凭命名或保存回执认定已整理。

不删除旧节点、不覆盖历史提交记录、不移动/删除本地原件;本地归档包另存,若实际操作涉及个人目录整理,先按文件安全规则只读清单并另获授权。临时签名URL不当永久索引,以真实资产/节点ID和可刷新入口关联;交付前验证当前访问可用,不承诺永久有效。

#### 9a-4. 最终验收与交付

1. 以本次真实项目清单为分母,逐项核对素材、prompt、原文附件和节点映射;分别报告“原生节点已核验 / 附件已核验 / 待核或阻塞”,计数可解释,不靠缩略图张数判全量。
2. 复核完整prompt可复制,抽查长文本拼接无截断;任务/参考图序/素材/版本关联一致;当前采用与历史版本分离。归档完成不代表媒体质量已通过。
3. 实际打开画布核对排布与文字可读性,并按类型核对图片预览、视频/音频播放及附件下载。无法查看/播放/取回的项保持待核,不因上传回执或保存成功判完成。
4. 交付可访问的画布入口、分区说明、素材与提示词覆盖数、缺项/限制、当前采用版本,并同时交付本地MP4/最终文字分镜及归档清单。任一必需项未入画布或未验证,明确“画布归档未完成”,不能只说全部完成。
5. 本地归档台账建议保存canvas_id、section、logical_id、source_path、content_hash、asset_id/task_id(适用时)、node_id(真实取得时)、prompt_revision、storage_mode、sync_status、verified_at。这些是工作流记录字段,**不是对平台API字段或能力的承诺**。

## Pitfalls

1. **`upload_file` 在本机不可用** —— MCP server 隔离运行,传任何本地路径(含 ASCII 名、含 `/tmp`)都返回「文件不存在」。替代:`asset_detail` 取生成素材的 URL;需要主动入库时用 `get_upload_token` + COS SDK。

2. **并行 curl 下载大文件会静默截断** —— `curl ... &` + `wait` 拿到的文件**文件头合法**,但 IDAT 解压报 `incomplete or truncated stream`,后续所有解码器都失败且报错信息误导。**必须串行下载**,且下载后校验完整性:

   ```python
   import struct, zlib, sys
   d = open(f, 'rb').read(); pos = 8; idat = b''
   while pos < len(d):
       (ln,) = struct.unpack('>I', d[pos:pos+4]); t = d[pos+4:pos+8]
       if t == b'IDAT': idat += d[pos+8:pos+8+ln]
       pos += 12 + ln
   zlib.decompress(idat)   # 不抛异常才算下载完整
   ```

3. **PNG 里的 C2PA chunk(`caBX`,约 22KB)会让 ffmpeg 解码失败**,报 `chunk too big`。**解法:用 macOS `sips -s format jpeg` 转成 JPEG 再喂 ffmpeg**(sips 忽略该 chunk)。不要手工剥 chunk —— 实测剥离后 ffmpeg 反而报 `0 bytes left`。

4. **历史ffmpeg曾缺字幕/叠字滤镜** —— 当次逐项核验实际可用性,不把历史构建当恒定环境。不擅自安装/替换系统ffmpeg;缺失时优先按§6a使用Pillow透明图层与overlay,必要的环境更改另行确认。

5. **`hstack` / `vstack` 多 chain 时必须显式 `-map "[out]"`**,否则报 `Output file does not contain any stream`。`vstack=4` 写法无效,要用 `vstack=inputs=4`。

6. **zsh 下 `$args` 不会做 word splitting** —— 拼 ffmpeg 多输入参数要用数组 `args+=(-i f.jpg)` + `"${args[@]}"`;写 `$args` 会把整串当成一个输入名。

7. **抽帧 `select='eq(n,N)'` 的 N 要按实际帧号算**,超出总帧数会静默少输出,导致后续 `hstack` 找不到文件。文件名里的 shell 变量必须写 `${var}` —— `$var_%d` 会被解析成未定义变量 `$var_`,多个视频的抽帧会互相覆盖。

8. **`canvas_generate_image` 提交后宿主会打开结果卡自轮询** —— 不要再对同一 task 调 `canvas_show_image`。视频同理。

9. **价格不要编造** —— WorkRally 仓库 `references/` 下无 pricing 文档,MCP 通道没有公开价目。只说消耗了「几次图生成 + 几次视频生成 + 几次音频生成」,让用户去账户看扣费。

10. **`canvas_manage(action="get")` 返回的画布草稿是压缩编码串**(`draft_v1` 是 base64 protobuf),**不要试图解析它来找历史任务的 asset_id / 提示词**。想复用历史素材,正确路径是 `asset_search`(可带 `channel=["toolbox_canvas"]` / `canvas_project_id` / `begin_time`+`end_time` 过滤)。历史曾遇到 `asset_search` 时间与排序过滤未按预期生效,须以本次返回为准;优先使用已记录的任务/资产 ID 和精确项目查询。检索失败不是自动重新生图的授权,尤其不能为省事生成被 §2 禁止的参考画面。单页结果很大时先保存再按需提取,避免整包占据上下文。

11. **分辨率档位、实际像素和参考输入能力分别核验**:同一“4K”档不同模型/画幅可能返回不同像素,不将resolution=6恒等于3840×2160。下载后实测宽高,记录与回执差异;视频能否接收该图片取决于当前模式的尺寸、体积和数量限制,不把历史max_file_count=50或某次4K输入成功当作通用保证。


12. **不能把单条视频误解为一镜到底**:Seedance-2.5 不超过 30 秒的规则限制的是生成任务数与产物数,不是内部镜头数。不能先逐镜生成再拼成一个文件假装符合要求,也不能擅自增加试片。

13. **接口默认不等于用户确认**:CLI 不传分辨率可能自动选模型首项,历史模板也可能写死 1080p;即使接口接受请求,也不代表 G2 已通过。只凭模型查询结果自行打勾不是交互选择。必须核对用户选择、动态 label/value、实际提交/场次配置三者一致。

14. **三类独立资产不等于动作参考图或分镜图**:按分镜准备人物CHAR、必要道具PROP与纯环境SC,不为某个视频节拍先画运动员外景姿态图、手持道具预演图或人物环境合成图;动作和摄影留在视频提示词。演员/有台词角色保持单张灰底三视图,头部裁切只针对正面身体视图区,不能用于背面或脸部特写,更不能套给PROP或CHAR:crowd;群演按§0D-4单张完整全身群像。道具背景/视图数量按确认方案,SC无人无道具;不额外增加无关道具/特写,用户拒绝额外表情图后不继续追加。

15. **本地 submitted 不能代替回执**:无非空任务 ID 或成功提交证据时,不得认定任务已提交,更不能直接自动重提;先核实并记录真实状态。

16. **图内视图数不等于参考输入数**:人物左/中/右三个视图属于一张16:9资产、一个资产ID,不是三个人或三张输入;提示词引用必须随之更新。PROP每张实际输入图同样占用参考数量,不能因共享parent_prop_id就合算一张;各段数量/顺序均需重验。人物模板中已有固定去噪后缀时不要重复追加,每张PROP与纯环境SC也不能漏加。

17. **纯环境无人无道具不等于没有建筑**:2026-09-17纯自然登顶案例里,“终点”曾引入拱门/旗帜/围栏;该类场景应按分镜排除无关人工物,不能泛化为拆除所有空间设施。都市、室内、赛场等SC保留分镜所需建筑、道路、桥梁、墙地面和固定空间设施,但不得出现人物、道具及其倒影/投影/残留局部。汽车静止或无人也归PROP,座舱归同一汽车PROP的内饰视图,不属于SC。参数正确不等于内容合格,需成图复核。

18. **头颈裁切与配饰需成图复核**:左侧正面视图可明确“独立取景裁切线位于颈部中段,画面内无下巴、嘴唇、鼻子、眼睛等头部结构”,保留双手双脚;不是无头人体。背面保留头部,右侧为3/4脸特写,配饰固定同一侧。历史修正提示词成功不代表每次保证达标。

19. **按实测格式、尺寸和编码登记**:扩展名或回执标签可能与字节格式不符,JPEG应存为.jpg,PNG存为.png;先检查文件头再命名,不将“.jpg与JPEG”误写为格式冲突。同模型不同批次可能改编码/采样率,混音前实测;贝宝-Pro某次4K档返回5504×3072,是历史个例而非尺寸常量,实际比例偏差须披露。

20. **最终编码实测优先**:loudnorm目标不是实际结果;AAC峰值变化随素材和编码配置变化,不把某次过冲数值当普适定律。按最终MP4的ebur128测量调整峰值余量;如需两遍归一化,区分“先测量再传measured_*”与连续运行两次动态滤镜,不能混称。中间混音使用浮点PCM保留余量;真峰值略高于0dBTP本身不证明源文件已削波,需检查样本和解码后信号。当前处理方案未同时达标时如实披露结果与可选调整,不宣称所有路径都无法达标。

   **TP−I是峰值-响度比PLR,不是基于RMS的峰值因数**:以同一素材和测量口径计算真峰值TP与集成响度I之差,不能混同峰值/RMS意义的峰值因数。恒定增益不会改变PLR;仅恒定增益路径可能无法同时满足指定响度与真峰值上限,并不意味着两个目标本身不能兼顾。压缩、限幅等动态处理可改变PLR,不必然抹平安静开场或整体弧线;结合分段测量与试听决定处理,不无证据承诺LRA固定变化,也不把PLR与LRA混为一谈。

   参数与信号路径检查:

   - **`alimiter` 的 `level` 是布尔参数**,关闭自动电平补偿显式使用受支持的 `level=false`;是否达到峰值目标仍需测量,不能仅凭limit数值认定留足真峰值余量。
   - **保留浮点中间文件以防整型过载削波**:超过整型PCM可表示范围的样本在量化时可能削波,后续降低增益也不能恢复已损坏波形。中间混音/增益处理输出使用 `-c:a pcm_f32le` 保留余量;浮点格式不能修复上游已经发生的削波,也不能把真峰值过零直接等同整型样本过载。
   - **限幅不等于必然削波或平顶**:波形取决于算法与参数,不能把限幅器等同硬截幅。AAC编码后的过冲受信号、编码与测量路径等因素影响,不能凭几次扫描断言单一根因,也不把个案的峰值削减量、响度损失或压缩优势写成普适数字。按实际素材比较处理前后测量与听感,再选择压缩、限幅及余量。

   总线处理链示例(数值仅为示例,不是默认参数或达标保证,须按素材与试听调整):

   ```bash
   # 预母版 -> 总增益 -> 压缩 -> 限幅(余量按最终编码实测调整)
   ffmpeg -y -i mix_premaster.wav -af \
     "volume=<+g>dB,acompressor=threshold=-6dB:ratio=12:attack=0.5:release=50,\
      alimiter=limit=0.72:level=false:attack=5:release=80" -c:a pcm_f32le mix_master.wav
   ```

   验收前必须对**最终编码再解码后**的信号测真峰值(如 `ebur128=peak=true` 或 `loudnorm=print_format=json` 的 `input_tp`),不是只测 WAV 母版。局部扫描与全片扫描须核对输入、时间范围及测量口径,不能由不一致的结果直接推断编码根因。

   **抽帧零帧先查源片局部时间是否越界**:SEG-B源片若为30秒,不能直接按总片36/38/39秒在该源片提取。先从成片目标时间减去真实SEG-B在成片中的起点,再在源片定位;起点取实际剪辑映射,不默认都是30.000秒。若源片有裁入点、变速或转场,再按source_in与真实时间映射换算并检查是否落在可用范围内。确认范围有效后才检查时间戳、解码或定位方式,不能把音频取样或视频抽帧零帧笼统归因于前置 `-ss` 的视频关键帧。

21. **音频转场服从统一剪辑时间线**:acrossfade默认重叠会缩短音轨,不能直接用它再补静音掩盖音画错位。硬切画面可用切点局部afade+concat;需要交叉淡化时按统一时间线显式补偿、对齐或同步设计画面转场。入出点按实际帧率/源片时长计算,不固定0.18秒,也不固定把两段均视为30.08秒。

22. **文字分镜、资产图与生成单元是不同产物**:文字分镜Markdown先交付且最终更新;禁止分镜图不取消文字分镜。资产模型A0不替代视频G1/G2;多个文字镜头可以对应一次生成。最终按镜号映射剪辑为一条成片,不止于散片或JSON。旧分镜技能的默认模型/15秒/先图后分镜若与本流程冲突,不套用;第三方非自建技能不越权改写。

23. **历史错误案例:汽车混入SC且带字标;当前须独立PROP、纯环境SC并做资产/成片两层检查** —— 2026-09-17 纯电轿跑广告中,分镜要求「片内不出现任何文字、字母、数字、logo(含车标)」,历史参考素材却登记为 `SC-02`(车头正视图自带 Audi 四环格栅)与 `SC-03`(Audi 座舱含四环方向盘),最终成片也出现了可辨识车标。这些旧分类与结果仅为错误案例,不是允许含车场景先去标再送视频的现行流程;不改写旧媒体、历史ID或回执。

   - 当前汽车外观及必要座舱视图必须归独立PROP,以同一parent_prop_id管理,分别登记各视图逻辑view_id与平台回执中的真实asset_id;纯环境SC仅保留建筑、道路等空间,不含汽车、其他道具及其倒影/投影/残留局部。
   - **资产层逐图检查**:项目要求无logo/字样时,核查CHAR、PROP、SC各自内容;PROP检查格栅、车灯、轮毂、方向盘、屏幕和铭牌等,SC检查建筑招牌、霓虹和固定设施字样。道具去标后也不能塞回SC;负面提示词不能保证消除参考图已有特征。
   - **成片层独立检查**:按脚本允许人车同框,但无字标要求仍有效;逐帧检查车头、座舱等相关镜头与场景招牌,不能仅凭资产合格或联络表就判成片通过。
   - 发现后如实披露并给选项(按新分类修正资产后重跑相关段 / 后期修补 / 接受),**默认不擅自重生成**;只有获得对应授权才执行,不将本规范当作重跑旧项目的许可。

24. **视频回执的 `dimensions` 不是交付规格,必须实测** —— 2026-09-17 KYROS S9 90 秒片中,梦宝2.5 OS(`eubk54vl4o`)在 G2 选定「21:9 + 720p」档,提交回执与任务详情均显示 `2560×1080`,实际落盘素材却是 **1470×630**。回执字段只反映请求侧参数组合,不等于编码器真实输出。**规则**:每段视频落盘后立刻用 `ffprobe` 读实际 `width×height`/`fps`/`duration`,把实测值写回项目配置的 `actual_spec`;成片交付规格以实测为准。需要原生高分辨率时,应改用 1080p 档重新生成三段,而不是把低分辨率结果插值放大后冒充原生规格(插值放大必须在交付说明中披露倍数)。

25. **`canvas_generate_video` 显式关闭声音后,输出 mp4 仍带 AAC 音轨** —— 本项目 `audio_policy=all_post_production`,提交时 `enable_sound=false`(或等价参数),但三段素材 `ffprobe` 均检出 AAC 48 kHz 立体声音轨。若直接 concat 会与后期混音叠加、并在段间产生音频接缝。**规则**:合片前对每一段源片跑一次 `ffprobe -show_streams`,只要有音频流,剪辑链路统一加 `-an`;不要假设「关了声就是真静音」。

26. **`canvas_get_task` 的状态会长期停在 RUNNING / 99%,而产物早已落盘** —— 90 秒项目三段视频各自耗时 3 / 10 / 12 分钟,期间任务状态长时间不动,`asset_search` 却能查到已完成的 asset。**规则**:判断一段视频是否完成,以 `asset_search` 能否查到对应 asset(并可用 `ffprobe` 验证时长)为准,任务状态只作辅助;两者不一致时以素材侧为准。

27. **连续提交多个长视频任务,单段耗时可差 3–4 倍,未交叉验证前不得判定卡死重提** —— 本次三段耗时 3 / 10 / 12 分钟,最短与最长相差 4 倍,属正常排队波动。当时因误判 SEG-A 卡死而重提,产生了冗余任务(`2k98aynciha8`),最终原任务 `2k96zunudtds` 自己成功了。**规则**:先用 `asset_search` 交叉验证,必要时等待或查看产物目录;确认无产物再重提,并把冗余 task_id 记入项目配置的 `redundant_tasks`,明确「不予采用」,避免后续误认素材来源。

28. **MiniMax-2.8-HD 的 `audio_format` 只接受 mp3,传 wav 会报「输入的生成参数无效」** —— 该模型 `audio_field_values.audio_format` 的可选值仅 `mp3`(如另传 `audio_sample_rate` 也可能一并触发校验失败)。本次旁白 4 句首轮全部失败,误以为带空格括号的 voice key(`Chinese (Mandarin)_Reliable_Executive`)不可用;实测该 voice key 本身完全可用。**规则**:TTS 失败先做最小参数重试(换回默认音色、去掉可选参数)分段定位;确认是格式枚举问题后,只去掉不支持的字段,音色保持不变;输出 mp3 后续统一转 wav 再进混音链。

29. **seed-audio-1.0 的输出时长不稳定,可能远短于请求** —— 山地环境声首次只出 **8.064 秒**,远低于 30 秒目标,其余两条同参数请求均正常出 30 秒左右。**规则**:每条环境声/音效落盘后必须 `ffprobe` 核对时长,短于目标即重写提示词(如明确「一段持续三十秒……」)重生成,不靠后期循环补齐到不可控长度;重生成命名带 `_v2` 保留对照。

30. **Pillow 在同一 `ImageDraw` 层上连续画多个半透明形状是「覆盖」而非 alpha 合成** —— 本次先在整屏画暗场 `(8,10,14,198)`,再在同一层画半透明椭圆,结果椭圆位置被替换为纯色,成片出现「中心椭圆透明洞」。**规则**:多层半透明必须各自 `Image.new('RGBA')` 独立绘制,再用 `Image.alpha_composite()` 依次合成(封面海报的右侧 scrim 与底部 scrim 同样必须分图层)。浅色背景上的文字可读性优先靠**实心 scrim 条 + 左侧白色竖规**解决,不要依赖全屏暗场;质检用同区域 `YAVG` 对比未叠加原帧做数值验证。

31. **macOS 自带 BSD grep 不支持 `\s`,解析 ffmpeg 输出会静默返回空值** —— 用 `grep -oP '\s+I:\s*\K...'` 类写法拿响度读数在 BSD grep 下必然失败(还可能因 `-P` 不支持直接报错),导致误以为「测量没跑出来」。**规则**:解析 `ebur128`/`loudnorm` 输出统一用 `awk`。注意 `Summary:` 块里 `True peak:` 只是**分节标题**,真峰值数值在紧随其后的 `Peak:` 行,取错字段会得到空值:
    ```bash
    ffmpeg -hide_banner -nostats -i in.mp4 -af ebur128=peak=true -f null - 2>&1 | \
      awk '/Summary:/{f=1} f&&/^ +I:/&&!i{i=$2} f&&/^ +LRA:/&&!l{l=$2} f&&/^ +Peak:/&&!p{p=$2} \
           END{print "I =",i,"LUFS | LRA =",l,"LU | TruePeak =",p,"dBFS"}'
    ```
    无滤镜时该块不会出现,`/Summary:/{f=1}` 标志位能避免误取逐帧日志里的中间值。

32. **loudnorm目标不等于实测结果,不从单个素材推导通用处理链** —— 历史目标−14 LUFS、实测−14.83 LUFS,属于比目标低0.83 LU,而不是“在目标之上”。应测量同一输入、明确单遍动态与两遍归一化的区别,再按素材比较增益、压缩、限幅等方案;不能断言高动态素材必须绕过loudnorm。TP−I是PLR,不是基于RMS的crest factor;`alimiter`不等同真峰值限制器,关闭其自动电平补偿使用经核验的布尔`level=false`,不用`disabled/auto`冒充布尔枚举。最终AAC/MP4实测响度和真峰值,以dBTP记录真峰值,不套历史固定增益或编码过冲量。

33. **字体异常被脚本吞掉并回退到缺字字体,可能使中文变方框;不是Pillow自动回退** —— 2026-09-18《赘婿会长》项目渲染片内包装时按常见资料写了 `/System/Library/Fonts/PingFang.ttc`,**该文件在本机并不存在**,`ImageFont.truetype()` 抛错后被 `try/except` 回退到 `load_default()`(无中文字形),结果五张字幕卡的中文**全部渲染成方框(豆腐块)**,脚本无任何报错、文件也正常写出。**规则**:① 中文不要用 PingFang 路径;本机实测可用为 `Hiragino Sans GB.ttc`(index 0=W3 / 2=W6)与 `~/Library/Fonts/TencentSans W7.ttf`(标题粗黑)。② 渲染后必须**实际看图**确认中文正常,不能只看「文件已生成 / 体积正常」就判定成功。③ 探测字体用「逐个 `truetype()` + `getname()` + 真画一行中文」三步,不要凭文件名猜 index。

34. **参考URL可能刷新,提交前重取;链接变化不证明旧链已过期** —— 同一asset_id多次查询可能得到不同短链,仅凭不同不能认定旧地址失效,也不能推导具体有效期;此前记录的“约6小时/12:02”时点不自洽,不作为证据。为减少失效风险,视频参考使用提交前`asset_detail.asset_details.url`,下载使用当次`download_url`;短链有效性以实际接口/访问结果为准。项目历史URL只作留痕,不将任务回执URL冒充已验证的参考输入。

35. **台词保真不能被静音模板或30秒时间表吞掉** —— 《赘婿会长》旧提示词只保留“说一句/陈述条件”等动作概述,没有原句,用户随后明确要求保留原词并选择视频直出对白。修正按§4a/§4c-0执行:恢复原台词、说话人、镜号;区分动作占位、抽气与真实台词;混排条目留存来源后拆结构,不改词;先核对时长与原稿缺句,不能仅因80镜时间码闭合就宣称可拍/可说完。已生成旧段不重写历史提示词或自动重跑;有声版对白验收后保留,不套统一-an。

36. **`duration` 只接受整数秒,台词算出的自然时长必须先取整再回填时码** —— 按语速反推出的“本段需要 25.3 秒”不能直接提交,`duration` 只允许 4–30 的整数。同项目还叠加了「单条上限 30 秒」:第一幕台词需约 47 秒,既不能塞进 30 秒、也不能一次提交 47 秒,**唯一解是拆成两条**(实取 25s + 22s = 47s)。**规则**:先按整数时长切段,再让镜头时码在该整数内严格闭合;不要先排时码再指望接口接受小数。

37. **逐条「台词 vs 镜头窗口」自检必须用健壮配对解析,朴素正则会给假通过** —— 同一份分镜里存在三种会让正则漏配的写法:镜头区间 `SH-05-01~02`、带尾注的镜号 `SH-10-08(旧表定位,待核对)`、拆分条目 `VO-036-A` / `VO-036-B`。用 `^(VO-\d+)|(SH-\d+-\d+)|` 这类模式做检查时,这些行会被**整体跳过**,输出「全部装得下 ✓」的假结论——本项目第一次自检就漏掉了 SEG-08 与 SEG-10 两处真实缺口,改用「区间解析 + `VO-\d+(?:-[A-B])?` + 同镜号累计需求」后才查出全部 8 处超窗口。**规则**:① 自检脚本必须能处理区间、尾注、拆分条目,并把同一镜号上的多条台词需求**累加**后再与窗口比较;② 自检报告要打印「解析到的台词条数」,若与预期总数(本项目 35 条)不符即视为自检失败,而不是通过。

38. **整段 ASR 转写会在长音频上漏句,不能据整段结果判「台词缺失」** —— 《赘婿会长》SEG-08 整段转写给出汉字级 CER 25%、判定「缺失 VO-029 与 VO-030」,但**按镜头窗口切片重转后两句都完整说出**(实测 18.6–21.4 s / 25.0–28.0 s),是**假阴性**:whisper 把 12.96–25.91 s 这 13 秒密集对白压成了一句「林沫」。**规则**:① 原生对白验收必须**按镜头窗口切片转写**(每句一个切片,前后各留 0.45/0.55 s),不能只看整段结果;② 整段转写报出的「缺失/漏词」一律先切片复核再定性,不得直接据此要求重生成;③ 切片会越界带入相邻句,高 CER 多数由此产生,需人工判读而非自动判错。

39. **对白校验禁止用 `initial_prompt` 传入期望文本(那是自我实现预言)** —— 校验「台词是否逐字说全」时若把该句原文作为 `initial_prompt`,whisper 会倾向按提示输出,得到过于乐观的结论。**规则**:验收一律用中立转写(不传 `initial_prompt`、`condition_on_previous_text=False`);需要人名先验时只提供「已知人名表」,不给整句。

40. **汉字级 CER 会把同音误识误判成改词,须做拼音级比对** —— 「岚岚→兰兰/琳琳/妍妍/严严」「默→沫」「由→有」「退出→推出」在汉字级全是「错误」,实际听感一致。**规则**:用 `pypinyin` 把 ref 与 ASR 都转拼音后跑 `SequenceMatcher` 编辑操作,分级输出「同音/近音误识(不计错)」与「真实增删改(必须报)」。本项目汉字级加权 CER 7.4%、拼音级 5.9%,**真实硬差异 0 条**。另:数字读法差异(`35%` 读作「百分之三十五」)属自然读法,不算改词。

41. **ASR段级边界可能被静音拉长,不能以计划窗口代替真实字幕时间** —— 历史「赵总」两字被分配到6.12–14.52s,属于需要复核的异常。偏移和秒/字只能用于筛查,不能以通过某个阈值证明准确。按 §6a-2 查词级发声边界、定点重对齐或待人工听检;证据不足时不得回退提示词设计窗口、不得均分时长。长对白必须进一步拆短句,实际停顿/下一cue约束优先于固定阅读延时或空隙。

42. **本机 ffmpeg 无 libass/drawtext 时,多层 alpha 叠加的时间定位必须用 `setpts`;`-itsoffset` 配 `-loop 1` 不生效** —— 实测 `-itsoffset 1 -loop 1 -t 1 -i layer.png` + `overlay` 的结果是**叠加层完全不出现**(整帧仍是原图,无任何报错)。可用写法(已在 40 层链上验证):
    ```bash
    ffmpeg -i master.mp4 \
      -loop 1 -framerate 24 -t <dur> -i layer.png ... \
      -filter_complex "[1:v]format=rgba,\
        fade=t=in:st=0:d=<f>:alpha=1,fade=t=out:st=<dur-f>:d=<f>:alpha=1,\
        setpts=PTS-STARTPTS+<start>/TB[l1];\
        [0:v][l1]overlay=0:0:eof_action=pass:shortest=0[v1]; ..." \
      -map "[vN]" -map 0:a -c:v libx264 -crf 17 -c:a copy out.mp4
    ```
    另:**`colorchannelmixer` 没有 `eval` 选项**,`aa` 表达式里用 `t` / `n` 会报 `Undefined constant or missing '('`——alpha 无法用时间表达式控制,只能靠 `fade(alpha=1)`。图层 PNG 先缩放到目标分辨率,避免每帧重复 scale。同屏多图层(片尾卡 + 对白字幕)应**位置错开**而非互斥替换。

43. **单音节/超短台词在 `vad_filter=True` 下会被整条吞掉** —— 详见 §5a(判定「未检出」前必须用 `vad_filter=False, condition_on_previous_text=False` 对窗口定点复听)。本条为编号占位与交叉引用,规则正文在 §5a,不在此重复。

44. **英文短剧的「篇幅」口径是 `wc -w` 总词数,不是"台词词数";120 秒集的正确目标不是"凑 320 而是顶到 390-448"** —— 原包 `formats/english-short-drama.md` 第 34–46 行写明:篇幅 = **`wc -w` 全篇词数(含动作描写、场景头、以及 `ANKHU:` 这类角色名前缀,`—` 单独成 token 也计入)**;`1 分钟 ≈ 195-224 词,2 分钟 ≈ 390-448 词`,正片目标值 320 只对应 1 分钟档。英文/海外项目上:

    - **先按时长反推区间,再定目标**。5 集 × 120 秒(=2 分钟/集)→ 目标应是 **390-448 的上沿**,写 320 词等于只写了 1 分钟的量,会把成片拖成"节奏正常但内容空"。**"高密度(信息拉满)"在上沿才成立。**
    - **压缩顺序:① 砍动作行 → ② 砍场景头与 `(parenthetical)` → ③ 砍动作修饰词 → ④ 台词最后动。** 按这个顺序压,词数下降与台词占比上升**同向**——本项目首版 449/481/521/571/445 五集全部超限或触限;三轮压缩后 448/442/444/447/436 全部落区间,**台词占比同时从 43% 抬到 58%**(台词 +26% 且总词数 −15%)。
    - **反向操作(先删台词保动作)会让词数下降但密度更差**,与"高密度"目标背道而驰,是错误方向。
    - **自检必须逐集打表**(集 / 总词 / 台词 / 动作 / 场景 / 判定),不要只看总数;也别用"中文字数"口径核对英文稿。
    - 剧本正文的**中文字符、`CUT TO`/`FADE OUT`/`END OF EPISODE` 类转场词、心理旁白(`she felt`/`he realized`)、委婉词(`Perhaps`/`Maybe`)、内部骨架标注(`起/承/转/合`、`压/放`、`Beat:`、`Plot Unit`)**任一命中即不合格**,一票否决,写完必须机械扫描一遍再看。

45. **图像模型「名字相近」是彼此独立的不同模型,禁止归并;且生图回执里的 `params_summary.dimensions` 不是真实输出尺寸** —— `canvas_image_model_list` 同时存在 **季宝-2 `dhjz9kzjnw`** / 季宝2.5 `g26a0h6skn` / 季宝2.5-极速版 `tc8agh7y6n`,三者画幅与 quality 档都不同(季宝-2 的 quality 只有 high/medium/low,2.5 有 high/xhigh/max)。用户说「季宝2」时**取字面匹配的 `季宝-2`**,不得默认归并到 2.5,也不得反向把 2.5 当成 2;同理 `贝宝-1/-2/-Pro`、`美宝-6.1/8.1/8.2`、`Seedream-4/5 Pro/5 Lite`、`Qwen-Image-3.0/-Pro` 都是独立模型,**一律回 `canvas_image_model_list` 按 `name` 精确匹配**,匹配到多个或没有精确匹配时先问。
    另:回执 `params_summary.dimensions` 是**占位口径**,季宝-2 4K 下报 1920×1080 / 2048×2048 / 1080×1920,而**真实落盘是 3840×2160 / 2880×2880 / 2160×3840**。**一律 `sips -g pixelWidth -g pixelHeight` 实测后再写资产台账**,不采信回执。
    另:`quality` **只在该模型 `infer_quality_options` 非空时才传**——贝宝-Pro 该数组为空,传了是无效字段。

46. **纯环境(SC)提示词只写「无道具」模型会自己补一个;必须点名排除本场景最可能出现的具体道具** —— 本项目只说「不出现任何可移动器物与道具」,成图仍在书吏房补进卷轴、在门前补进火盆。**规则**:把排除句写成带括号的点名清单,逐个写出本场景相关的道具(例:「不出现卷轴、告示纸、供盘、木凳、陶桶等,也不出现它们的倒影、投影或局部残留」;「不出现火盆本体、卷轴、供物、石块等」)。
    同一空间元素可跨类归属时(门前「火盆座坑」属环境 SC、「火盆本体」属道具 PROP),**两边都要显式写「空的 / 不出现」**,否则会互相串图。
    同时:SC 里**必须保留固定空间设施**(石阶的固定木桩与绳圈、闩槽、座坑),并写明「属固定空间设施,不是可搬动道具」,否则会被一起删掉。

47. **模型漏掉「细节差异」时,堆形容词没用——要三件套:第一优先声明 + 成对对比 + 点名排除** —— 本项目 PROP-04 需要「第四行被后世凿改」,初版只写「第四行凿痕更新、边缘更锐」→ 四行完全无差别、该特征丢失;强化版改成 ① 抬头写「**本图的第一优先视觉信息(必须一眼看出)**」,② 给**成对对比**(上三行旧:风化磨圆、槽底积满深色尘垢 / 第四行新:凿口发白偏浅、几乎无积垢),③ 补上可辨认的**回填区**(左端一块被铲平后重新补刻、旧字被磨掉)→ 一次通过。SC-04 同理:初版柱式偏希腊罗马、地面像抛光大理石,强化版**点名排除**「希腊凹槽柱身/涡卷/科林斯柱头/罗马平滑圆柱/现代抛光大理石瓷砖」并**点名要求**埃及纸莎草束柱身与莲花柱头 → 一次通过。
    **批量资产的质检不可以只抽样**:27~30 张必须用 PIL 拼**联络图**(CHAR 3×3、PROP 4×3、SC 1×6,角上烤编号)逐格看完,再列返工清单;返工后单独出 **AB 对照图**留档,初版文件不删。

48. **差异先复核证据,不把能量当词语证明;证据不足保留待人工听检** —— 历史整段ASR曾将 `What did you say?` 转成 `Did you say?`,将 `That is the king's name.` 转成不完整句,说明转写可能漏识,不能仅靠再转写一次判通过,也不能反向认定原音必有词。
    ① **定向重转写**:按原音定位该句及相邻停顿,切窗复核,不传期望句作为 `initial_prompt`,使用中立解码并记录参数。恢复完整句只能作为ASR漏识线索,不是独立的逐词实听证据;词级时间戳也须核对是否落在真实发声处。
    ② **能量仅作定位辅助**:`volumedetect` 的较高mean/max只能说明窗口存在声音,可能是配乐、噪声、音效或其他发声,**不能证明是语音,更不能证明某个特定词**。历史缺口窗口mean −17.4 dB、停顿参照 −41.1 dB不能推出原词已完整说出;低能量或空转写也不能单独证明吞字。
    ③ **回听决定词语结论**:结合原始音频切片、中立转写与人工听检,确认实际说出的词及说话人,再分为ASR漏识、专名误拼或真实增删改/吞字。高能量下也可能有真实漏词,不能用“只有安静才真吞字”的二分法。无法听清、无法试听或证据互相矛盾时标 **待人工听检**,不得豁免、计入通过或自动返生成。
    每项确认的ASR豁免须保留可核验证据(`qc_waivers.json`:原句、实际听到的内容、时间窗、源task/asset关联、切片/转写记录及人工复核结论);证据不足项单列待核清单而非豁免清单。真实差异先披露,返工另获授权。本条纠正旧推断,不重新认定历史项目已通过。

49. **英文对白比对前必须做三层归一,否则误报满天** —— ① 同音/异体(`burnt/burned`、`it's/it is`、`don't/do not`);② **数词**:ASR 会把 `eighty-four` 写成 `84`,必须把口语数词按 `tens+units` 合并成阿拉伯数字再比,否则必假阳性(本项目 U5-2 首轮就因此报错);③ **专名变体表**:同一专名的稳定误拼要归一到规范形(本项目 `archivist` 被转成 `archerot`/`Architis`/`archivest`,`Memphis`→`mapica`,`Amun`→`Amon`/`I'm on`)。归一之后仍不符才计差异。

50. **重做片段要「改一处、连三处」:换源片的同时,时间轴取数与字幕取数必须一起换** —— 本项目 EP4 第 1 段返工为 `U4-1b` 后,字幕/包装层的时间轴脚本若仍按旧单元号读 `U4-1_qc.json`,会把**缺陷版的时间戳**套在新片上(本项目确实踩到:`build_srt.py` 起初仍读 U4-1 的 QC)。**规则**:在取数层加一张「交付槽位 → 实际源片」映射(`SRC_OF` / `QC_SRC`),让 ① 读 QC 数据、② 找源片烧字幕、③ 合片排序 **三处都走同一张表**;排序键要能容纳 `U4-1b` 这类变体(用 `^U(\d)-(\d)([a-z]?)` 正则,**不要** `int(stem.split("-")[1])`,会直接抛异常)。旧片保留在源目录但**不参与合片**,交付文档里单列「备查:被取代的段落」。

51. **单条 ≤30 秒不等于 20 条正好 600 秒——实际会超** —— 本项目每段源片实测 30.04–30.08 s(24 fps 帧对齐),20 段直接拼接是 **601.39 s(10:01.39)**,不是 600.00 s。分镜可以按 30.00 s 步进规划,但**交付文档必须写实测值**并说明差额来源;若要严格 600.00 s 得裁掉尾段约 1.39 s,属取舍、需明示,**不静默裁**。

52. **留白与对白的混音处理按素材选择,不一律禁用单遍 `loudnorm`** —— 单遍动态处理是否抬噪或产生泵动需比较实测与试听,不能从个案推成必然;两遍方案须先测量再传 `measured_*`,不是连续运行两次动态滤镜。固定增益、压缩、限幅或loudnorm均可按交付目标选择,不能把历史固定增益方案当通用规则。
    历史曾用配乐床固定增益+4 dB与 `amix normalize=0` 处理,这只是当时选择;BASE_GAIN与后续增益分别记录,当前按实际素材重定,不照抄数值。若使用 `alimiter` 并需关闭自动补偿,写经能力核验的 **`level=false`**;`limit` 控制及固定增益**不是真峰值兜底保证**,不能冒充真峰值限制器或保证AAC编码后不过峰。
    验收需同时覆盖:① 对最终AAC/MP4编码再解码后测集成响度(LUFS)、LRA(LU)与真峰值(**dBTP**),不能用编码前WAV或滤镜目标代替;② 对照留白段、对白段和全片的动态与听感,mean变化小不是通用合格标准;③ 检查混音后对白可懂度,疑似漏词按Pitfall 48回听,ASR命中不单独证明通过。
    `volumedetect` 的 `mean_volume` 是电平辅助读数,**不等于LUFS**;max也不等于最终编码真峰值。报告保留测量口径、处理参数和试听/待核结果,不靠平均电平差推算可懂度或风格保持。

53. **段落末尾的孤立短台词有概率被整句吞掉——要在提示词里点名保护** —— 本项目 U4-1 收尾萨布的单句 `"Hold."` 完全缺失(转写显示 25.45 s 后静默,相似度 0.0)。返工版在【声音方案】之后加一段**硬性要求**:点名是哪一句、要求真实发出/清晰可辨/音量压过全场、给出大致时间位置(约 26–29 s)、逐条列出「不得省略 / 不得只做口型而无声 / 不得以静默收尾 / 不得把它并入上一句」,并补一句「宁可语速稍快,也要把最后这一声发出来」→ 一次通过(6/6 逐字命中,相似度 1.0)。
    **规律**:凡是单元**收尾处**的单句短台词(短句、单字、喊停、点题句),都要在提示词里单独点名保护;不要指望它和前面的长句一起被念出来。

54. **群演不是把主演三视图复制多人** —— 只按 §0D-4 使用 CHAR:crowd 单张正面全身群像;不裁头、不复制脸,不从示例推定人数/警服。图内人数不是参考输入数,子组ID不是额外图片授权;原演员与独立PROP/SC不被替换。

55. **layout关系不能被反打翻转或当作风格输入** —— 世界坐标、四字段、全体仍在场成员与群体分裂按 §0D-2/3维护;behind不是摄影背景。导出只走§0D-5白名单,默认不上传layout图片,spatial_only/none不是API参数或防泄漏保证;缺scene_desc和空间未知项不得冒充画布事实。

56. **起止相等不代表中间走位正确,最终成员表不能覆盖整个镜头组** —— 靠近后返回必须保留中间事件;群体拆分在实际事件时转移成员,不能从start提前扣人,也不能母组/子组双计。按§0D-3逐事件重放并核对成员、四字段、落脚位及目标关系;头部转向不自动等同身体转向。按§0D-6区分文字完成、空间已核、资产已生成与可提交,不用0张成图的准备稿冒充补图完成。

57. **屏上可读文本不要交给视频模型** —— 剧本把屏幕内容写到词级精度(姓名、机构名、数据标签、列表条目、代码)时,AI 直出必然错字或变形,且错字不可事后修补(字形与运动已烘焙进画面)。这类镜头按§0E走程序化图形层;只有纯纹理文字才可留给模型。反向陷阱同样成立:图形层叠印若不核对透视与色温,会变成明显的"贴纸",比错字更出戏。

58. **场景越像图库题材,越容易召回图库水印与标识;此时加负面词无效,必须换语义场**(详见 §2f)—— 本项目 SC-03(实验室观察室)连续 4 次不合格,且**每次失败模式都不一样**:①玻璃上有标签字样/可见实验室设备/壁挂电话;②**右下角出现生成式水印伪文字+圆形徽标**;③墙面有开关插座面板、玻璃后仍可见设备与白色告示纸;④**再次出现水印伪文字**,且整个场景跑成满配控制室(挂钟/墙面地图/文件柜/办公桌/座椅/盆栽),违反"场景无人无道具"。这说明是**图库原型召回**而不是提示词不够狠。**解法**:删除 `监控室/控制室/观察室/屏幕墙/操作台/摄像头/传感器/安防` 等诱因词,改用"画面只由 N 种平面构成"的低密度极简描述,加四角反水印条款与"应像电影剧照而非图库素材"的定性要求 → 一次通过。
   - **判水印来源必须先做跨图对照**:把各图**同一位置**(尤其右下角)100% 横排比对。本项目只有 SC-03b/SC-03d 有伪文字、其余 4 张 SC 全干净 → 确认为**生成式残留**。不比对就误判为平台水印,会得出"全部重出"的错误结论。
   - **缩略联络图看不出角部伪文字**,必须原尺寸 100% 裁切四角单独目检;墙面/玻璃/金属等无文字表面的"疑似文字"也要追到 100% 原尺寸再裁决——低分辨率下极易把材质噪点误判成文字,或反向漏判。
   - **玻璃必须写明"完全不透视"**:写成"只呈现均匀的暗色反光与隐约的模糊倒影,不映出任何可辨认的物体轮廓";只写"不透视"模型仍会透出相邻空间的设备与告示纸。
   - **连续 3 次以上返工且失败模式各不相同 → 停止改措辞,改结构**;继续加负面词只会持续消耗额度。

59. **从分镜 Markdown 抽台词基准时,必须对每条结果做"污染扫描"** —— 本项目 `expected_dialogue.json` 的 `D12-2` 曾被静默损坏:`speaker` 字段吞掉了 U14 整节 Markdown(表头、表格行、`**粗体**`、屏上文本清单),`text` 字段则被该节的唇读行占据,而**真正的台词原文丢失**。根因是分镜里那一行用了「反引号 + 全角竖线 + 全角冒号」的混排写法,抽取脚本按行截断时没命中真正的行尾。危险之处在于:条目数仍是 64、JSON 仍能解析、字面看"数量对得上",**只有拿它去比对提示词时才会暴露**。
   - **强制检查**:抽取完成后立刻扫一遍全部条目,凡 `text` 或 `speaker` 含**换行、`|`、`**`、`#`** 等 Markdown 残留的一律视为污染,逐条人工回读修正。
   - **反向校验**:不要只验"提示词 ⊆ 基准",还要验"基准 ⊆ 提示词"——列出**未被任何 prompt 覆盖的基准 ID**并逐个解释其缺席是否有意(本项目 1 条缺席=U14 唇读字幕,属画内文本非台词,正确缺席)。只做单向比对时会漏掉"基准自身被污染"这类错误。
   - **画内文本单列**:屏上字幕卡、唇读字幕、界面标签等**不是台词**,应归档到独立的 `onscreen_text`,不得混进对白基准,否则会虚高台词条数并污染逐字比对。
   - 修数据前先备份(`*.json.bak`),并在文件里留一条 `fixed_YYYY_MM_DD` 说明,保留可追溯的修正记录。

60. **平台回执里的分辨率不是产出分辨率;21:9 下"1080p 档"是按像素总量重排画幅,短边必然低于 1080** —— 本项目 U2 提交时 `params_summary.dimensions` 明确回执 `2560×1080`,落盘实测是 **`2206×946`**。机理:`2206×946 = 2,086,876` 像素,与 `1920×1080 = 2,073,600` 仅差 0.6% —— 平台在非 16:9 画幅下**保持总像素预算、重排长宽**,所以短边随画幅变宽而下降。本项目用的梦宝2.5 OS `resolution_options` 只有 480p/720p/1080p,**没有 2K/4K**,946 就是该模型在 21:9 下的天花板;换有 2K 档的模型(MiniMax-H3-OS)就会丢 `support_audio=false` 的原生对白。**做法**:①提交后立刻 `ffprobe` 实测宽高/时长/帧率/音轨,**回执只用于定位问题,不作为验收依据**;②在交付文档里把实测值写清,并说明短边差额的来源;③若交付硬要求 1080 行母版,只能**后期升采样**,该动作必须单独确认,**不得默认执行也不得静默降档**;④不要为了凑 1080 行去改 16:9 再裁 21:9——那会得到约 1920×823,**更差**。

61. **逐句台词验收的分母必须是"基准句长度",不是"两者最大值"** —— 用 `LCS / max(len(基准句), len(转写全文))` 会把**属于其他句子的词**算成本句失配。本项目 U2 因此被误报覆盖率 0.28 / 0.42 / 0.26(近乎"完全没念对"),而实际转写逐字正确、覆盖率应为 1.00。正确公式:`cover(needle, haystack) = LCS(needle, haystack) / len(needle),`阈值取 0.95。**判定逻辑**:`cover` 低 = 这句话没被完整念出;反向的"转写中有多少词不在剧本内"(`unmatched_words`)才是用来抓**即兴补词/念错内容**的,两个方向缺一不可,不能合并成一个分数。

62. **台词顺序检查不能用 N 段滑动窗口定位** —— 用「第 i 段起连续 3 段」这类滑窗去找每句的落点,只要窗口跨度覆盖了多句,**每一句都会在窗口起点得到满分**,于是全部句子的落点都指向同一段,单调性检查**静默通过**——检查形同虚设,而且完全不报错。正确做法:从第 0 段开始**累积**文本,取「累积覆盖首次达到 0.95」的段号作为该句落点,再检查段号序列单调不减。同一段内包含两句时两个落点相同是正常结果,不应判为跳序。

63. **ASR 会在静音尾部"幻觉"出一句台词,必须剔除后再判定"是否有剧本外内容"** —— 本项目 U2 音轨在 30.00–30.04 s 处转写出 `Thank you.`,`no_speech_prob=0.93`、时长仅 0.04 s:这是转写器在静音上的补白,**不是生成内容**。若不剔除,"反向比对"会报出一个剧本外单词并把合格产出判成"疑即兴补词"。**剔除规则**:`no_speech_prob > 0.70 且 段时长 < 1.0 s`,并在报告里显式列出被剔除的段与理由,让读者能自行判断。反向边界同样要守住:**无对白单元(如本项目 U14/U19)必须做"未检出语音"的反向验收**,而不是"没听到就算了"。

64. **口型同步用"逐像素亮度时序 × 音频 RMS 包络"的相关性做代理,不要手工框一个"口部区域"** —— 手工框极易框到躯干/椅背:本项目首版框 `(0.35,0.42,0.65,0.62)` 得到**负相关 −0.25**、滞后曲线全平(−0.256…−0.234),完全无信息。改为**数据驱动**:把视频降采样成灰度帧序列,对**每一个像素**算亮度时间序列与音频 RMS 包络的皮尔逊相关,扫描 lag 取最大。判定三件套:①峰值位置应落在人物面部(可用相对坐标区间粗判);②**背景对照区(画面左右各 12%)的相关应接近 0 或为负**,用于证明信号局部化在人物上而不是全局曝光漂移;③**最佳 lag 应接近 0**。本项目 U2:峰值 **0.548** 落在相对 (0.544, 0.343) 的口鼻颌区,背景对照 **−0.119**,差值 0.667,最佳 lag **−2 帧(−83 ms)**、剖面 −2…+1 基本持平 → 判"有明确口部驱动、略滞后 1–2 帧"。**必须写明这是代理指标**,它证明"说话时嘴在动且跟着语音能量走",**不证明音素级口型正确**;1 fps 抽帧截图根本不足以判断同步,不要拿抽帧当口型证据。
   - **转写成本要提前算**:`faster-whisper large-v3` 权重约 3.09 GB,若本地只有 `config.json` 缓存会**联网下载**(本项目实测卡在这一步近 6 分钟);30 s 音频 CPU int8 转写约 5 分钟,且进程在受限环境可能被 SIGTERM。做法:转写结果落 `*.asr.json` 并写入源文件 `mtime` 做缓存校验,重复 `verify` 走缓存(本项目首测后加缓存,避免每次改判定逻辑都重跑 5 分钟);耗时命令放后台跑并写日志文件,不要在会话里前台阻塞。

65. **混用正片局部时码与成片时码会产生整体偏移** —— 叠字在concat前后均可正确实现,关键是overlay底片的实际PTS与cue时间处于同一时码域,片头偏移只加一次。缺失色彩标签亦须实测,不能由编码参数推定落盘;解码MD5相同不等于压缩码流逐比特相同。详见 §6a-1。

66. **整段有字不等于短句跟声:旧18条对白不能直接等于18条字幕** —— 用户指出旧版把整段台词提前铺成多行,与当前发声的小句不对应。按 §6a-2 先取词级证据、语义短句与真实停顿,再生成中上英下各一行的cue;中英文同窗切换。检出数、像素差、中点截图不能证明起落点或口型同步,须连续带声核对。仅更新标准时不得自动重做现有媒体。

67. **「改时长/重排/拆单元」的版本最容易掉资产,必须重过 §3a 闸门** —— 2026-09-20《呼噜噜的夏日》v3.0 语速校正批次:17 个重制单元里 **16 个**提交的参考图**少于镜头表自己声明的资产**,累计丢 **33 个参考位次**,13 个单元出现「有台词的角色 / 关键道具特写 / 主场景」完全没有参考锚定的**断锚**(最刺眼三处:结局画册特写 PROP-01 未传、整单元主场景 SC-07 竹林未传、主角 CHAR-01 在某单元完全未传)。根因是在修订稿里写下了一条**不存在的平台限制**「每单元 ≤4 张为 Platform 上限(实测)」,把每单元硬裁到 4 张 —— 而本环境 **Seedance-2.5 的 `max_image_count` 是 30**,本片上一批自己就用过 6–9 张并全部成功;那个「4」的真身是**另一个模型 Kling-O3 的上限**,被张冠李戴。**规则**:① 参考上限只能取自**当轮** `canvas_video_provider_config`,禁止把 A 模型的上限套到 B 模型;② 核对基准**只能是镜头表的资产列**,不能用提交清单自证提交清单;③ 拆分子单元继承原单元该时段的出场资产并集,缺主角/缺说话人即断锚;④ 差集非空**硬阻断提交**。方法见 §3a。

68. **改参考图数组=必须同步重写提示词的「第 N 张」编号,否则改对了资产也白改** —— 2026-09-20《呼噜噜的夏日》v3.1 补资产重制:参考图从 4 张补到 5–7 张后,数组顺序与提示词里逐张声明的「第 1 张是 X…第 N 张是 Y」**必须重排到一一对应**;只改 `reference_assets` 而留着旧编号,会让画面把 A 造型按 B 的描述去用,比缺图更难查。**规则**:① 任何参考图增删/重排,都重写整段【参考绑定】而不是打补丁;② 顺序固定 CHAR → CROWD → SC → PROP,主角 CHAR-01 恒在第 1 位;③ 提交前用脚本抽出提示词中所有「第 N 张」的 N,断言它等于 `range(1, len(reference_assets)+1)`,并对同一句约束做重复检测(合句补写极易写出「熊爸…;熊爸…」这种重复);④ 补传某件道具时,顺手在【一致性与限制】补该物件的肯定式约束(如「玉佩是素面青玉、无刻字」)。
69. **否定式约束在生成模型上不可靠,尤其招牌/水幕/书页这类「本该没字」的表面** —— 同一项目两次重出 SEG-05B,提示词都写了「水幕上不出现可辨识的字形 / 画面保持干净,无可读文字」,产出仍稳定渲染出结构完整的**类汉字伪字形**(无字义但肉眼像中文,如「王煐子」)。这类表面在训练分布里天然带字,写「不要字」等于把注意力引向字。**规则**:改**肯定式**描述该表面的实际内容(如「水幕上只有流动的竖向光带与光点,从上往下依次亮起又熄灭」),把「名单/榜文」的语义交给音画与剧情承担;产出口必须**原尺寸裁切目检**,不能靠 1 fps 抽帧或整帧缩放判断有没有伪文字。

70. **做字幕前必须用「双 ASR 交叉 + 定点复核 + 能量实测」建时间轴,单一模型/单一整片切片必漏句;`initial_prompt` 会污染输出,不能用它确认缺失句** —— 2026-09-20《呼噜噜的夏日》v3.1 字幕:若只用整片 `small` 转写,会漏掉 D-10 前半(20 字)、D-29 前半、D-73 整句;若只信逐单元 `medium`,又漏掉 SEG-10 的 D-42/D-43。两个模型**各有盲区、盲区不重叠**,只用其一会让字幕凭空少句,而且**不报错**。**规则**:① 建轴证据链=整片 small + 逐单元 medium 并列比对,取并集后对每个争议点**定点重跑**(截 5–10 s 片段单独转写);② 争议仍未决时用 `volumedetect` **实测能量**裁决(本项目 SEG-10 D-42:397–403 s 持续 −20.8~−29.0 dB,证实确实说了,medium 漏识,采用 small 时间);③ **禁止用 `initial_prompt` 补漏**——把剧本原句当 prompt 喂进去,模型会把 prompt 内容**直接塞进输出**(本项目产出 D-32 污染混合文本),因此 initial_prompt 的结果**不能作为「这句确实说了」的证据**;④ **中文频道幻觉特征**:6–20 字挤在 20–40 ms 内(>80 字/秒)且在**不同音频的同一位置**重复出现(本项目「请不吝点赞 订阅 转发 打赏支持明镜与点点栏目」「字幕by索兰娅」)—— 全部剔除;⑤ **medium 可能输出繁体**(SEG-06B 整段),匹配前做繁简归一,否则会误判成「台词没念对」;⑥ `faster-whisper` 的 word-alignment 在静音段会抛 `IndexError`,**必须包 try/except 回退到无词级重跑**并配 `CACHE` 增量写盘(断点续跑),但无词级的结果**只可用到段级时间**——某段无词级回退后可能出现整段循环幻觉(本项目 SEG-13A 26 段循环),该段应弃用 medium,改 small 段级时间 + 定点复核。
   - **版式基线必须按字体真实 bbox / 名义升部反推,不能用 capHeight** —— 用 capHeight 算基线时,忽略了英文升部字母(b/d/f/h/k/l)与 3 px 描边的外扩,会得到**行隙只有 4 px、英文底距只有 25 px**(目标 8 px / 28 px),看起来「字号对了但挤在一起」。正确做法:取字体**名义升部/降部**(本项目 Hiragino Sans GB W3 英文 asc 30/desc 11、中文下伸 8)**含描边外扩**反推基线,得到 `BASE_EN=907 / BASE_CN=861`(Ha=946)。校验方式:渲一条 cue → **原尺寸裁切 + 亮底对照**目检字与字、行与行的实际间隙,**不要用 9 帧缩略图**(看不出伪文字与行隙)。另:拆分后的短 cue 英文**首字母必须大写**,否则屏幕上像半句。

71. **烧制字幕要用「多输入 overlay + 半开区间 + 交叠截断」,验收要用「字芯掩膜法」;整带差分与长 select 表达式都是坑** —— 2026-09-20《呼噜噜的夏日》v3.2 实烧 134 条中英字幕,四条实证:
   - **① 多输入 overlay 可行且不慢**:134 张 RGBA PNG 各作一个 `-i`,filtergraph 链式 `overlay=0:0:enable='...'`,**用 `-filter_complex_script` 传文件**(别塞命令行,规避 shell 转义)。2206×946 全片 17690 帧、libx265 `-crf 17 -preset medium`,**18m43s / 16–19 fps**,与「无字幕」编码耗时同量级 —— 不必为了省 filter 层去拼透明视频流。
   - **② 必须用半开区间 + 截断交叠**:`enable` 写成 `gte(t,S)*lt(t,E)`(半开),若用闭区间(如 `between`),相邻 cue 在 `t=E` 那一帧会**双命中**;换人处后一条起得早于前一条落时(本项目 C072/C110/C124 交叠 0.23–0.55 s),**必须把前一条终点截到后一条起点**,否则两条字幕在同一位置叠印糊成一块。截断与半开区间两个动作**缺一不可**。
   - **③ 验收用「字芯掩膜法」,不要用整带差分**:从 cue 图形层取 **`alpha == 255` 的像素=纯白字芯**(本项目描边 alpha 只有 205,天然不混入;实测掩膜 97–98% 纯白、0% 深色),在成片帧同位置测「亮像素占比」,并**把同一掩膜套在无字幕母版上作阴性对照**。本项目:成片**中位数 1.000** / 母版同位置**中位数 0.001**,134/134 条全部检出;43 个间隙 × 前后掩膜 86 次检验**零残留**。**反例**:先用「母版↔成片整带差分均值」快检 —— **完全不可靠**,运动画面的重编码噪声会淹没字幕信号,本项目某些**无字间隙的差分均值反而高于有字 cue**(37.9 vs 24.9 中位数)。低分 cue(0.667–0.883)要**原尺寸目检定性**再判,其成因通常是「短 cue 字芯像素少 + 重编码令笔画边缘柔化」,不是漏烧。
   - **④ ffmpeg `select` 表达式不能太长**:用 `select='eq(n,A)+eq(n,B)+…'` 一次抽上百帧会 **`Error while parsing expression`/`Cannot allocate memory`**(本项目 196 项、1661 字符即失败)。替代:① 分批(表达式控制在几十项以内)+ `-ss` 快进;② 或改用 `fps=N` 整段抽带(一次解码)后再在 Python 里挑帧 —— 后者一次通过、更适合批量核对。

## Verification

- [ ] 逐生成单元的「应有资产集合」以**镜头表资产列**为准抽出,与 `reference_assets` 实传集合逐项对差;**差集为空**才算通过,带缺未提交。拆分子单元继承了原单元该时段的出场资产并集,无缺主角/缺说话人/缺主场景。
- [ ] 参考图数量上限取自**当轮** `canvas_video_provider_config` 的 `max_image_count`(记录 provider+mode+值);文档里未出现无当轮证据的「N 张上限」;未把某模型上限套用到另一模型。
- [ ] 参考图顺序=CHAR→CROWD→SC→PROP,主角 CHAR-01 在第 1 位;数组下标与提示词「第 N 张」逐一对应已复核(脚本断言:提示词中「第 N 张」集合 == `1..len(reference_assets)`,且无重复句)。
- [ ] 补传道具时【一致性与限制】已补该物件的肯定式约束;「本该没字」的表面(招牌/水幕/书页/榜单)改肯定式描述,产出口已**原尺寸裁切**目检无伪文字。
- [ ] 核对结果(应有/实传/差集/上限来源/排序)已写回项目台账;缺项未清未进入 §5。

- [ ] 资产生成前按§0F读取本次剧本/需求与已确认视觉约束,从 `asset-style-selector` 的实际 `references/` 成员建立候选并展示固定四选一菜单;`common.md` 与候选分支全文已读,匹配分析写在菜单之外、理由有剧本依据,不预选、不编造匹配率或库内条目。
- [ ] 风格有用户确认或原范围内有效既有确认;主风格与局部修饰范围清楚,CHAR/PROP/SC适配不改变身份、格式、隔离规则、模型/规格与固定去噪末句。
- [ ] 分支与 `common.md` 的单焦点/剧情布光/高频毛发/统一尾缀已按资产职责消解冲突,公共尾缀只追加一次,风格示例图未直接混入生成参考;layout仍只导出空间文字。
- [ ] 只读来源记录与实际安装/执行安全审查分开;未安装、改写或执行该 skill,未上传、修改项目历史或重做媒体。`sources/` 原稿只用于追溯。

- [ ] 最终画布按 §9a 覆盖项目全部已有素材、完整可复制prompt、源文件/帧序列附件和版本记录;以真实清单为分母逐项核对,未仅上传成片或用本地路径/媒资入库冒充上画布。
- [ ] 画布分区可见、顺序明确、卡片不遮挡,媒体与prompt/参考图序/实际任务关联可追溯;采用、未采用、待核分开,历史prompt未被新稿覆盖,非模型素材未伪造prompt。
- [ ] 目标画布与当前支持能力经核验,原生节点与附件承载分别说明;画布排布、文字复制、预览/播放与附件可取回均有实际检查,缺项/失败/未验证不计通过,交付真实入口和覆盖清单。
- [ ] 仅规范修订未上传、未调整节点或执行媒体脚本;实际归档不擅自重生成、重烧字幕、删除旧节点或改动本地原件。既有字幕不因归档而认定符合新标准。

- [ ] §0D为群演/layout唯一活动规则;模型/暂停状态来自当前项目记录而非历史“本轮”描述。规则更新未自动生成媒体或更改旧绑定,原layout与source-skill保留。
- [ ] start按有序events重放后等于end;往返动作含中间状态,涉及位移/转向的事件未用空更新蒙混;目标移动/退出后的依赖关系已复核,头部/视线与身体朝向未混同。
- [ ] members_start、membership_changes、members_end逐时点唯一且人数守恒;拆分前未提前扣人、拆分后未双计,真实进出场有来源,跨组成员与空间均继承。
- [ ] 群体区域不当成全员同一点;独立人物落脚位与通路已核,接触动作依据明确,不伪造距离或碰撞检测通过。换装按具体镜头绑定而非集号推定。
- [ ] 文字、空间、资产与submission_ready分别记录;未生成图无虚构ID/URL,旧复制脸视觉指令已检查,新稿对白与声明基准逐字比对,未更改声音策略或覆盖历史prompt。
- [ ] 帧内可读文本按§0E走程序化图形层(或叠印),未交视频模型直出;纯纹理文字可留给模型的判断已说明。图形层段落未进入资产链、未占用 A0 选型。
- [ ] 图形层帧序列已逐帧目视核验(字形缺字、中英混排字体回退、遮挡、安全边距),未以脚本运行成功代替验收;叠印层已核对透视与色温,无贴纸感。
- [ ] 字幕按 §6a-2 中上英下、中文较大、各一行、底部居中,参考有效影像区,不复制黑边/角标;字号与bbox经实际预览核对。整段对白已按词级发声与语义拆为短句,两语同窗,未提前铺出后句。
- [ ] 字幕时间轴由**双 ASR 交叉**(整片 small + 逐单元 medium)建立并取并集,争议点已定点重跑或 `volumedetect` 能量实测裁决;`initial_prompt` 结果未被用作「确有此句」的证据。
- [ ] 中文频道幻觉(20–40 ms 内挤 6–20 字、跨音频同一位置重复)已剔除;繁体输出已归一;无词级回退段只用于段级时间且已定点复核,未采用整段循环幻觉结果。
- [ ] 版式基线按字体**名义升部/降部含描边外扩**反推(非 capHeight),行隙达目标(约 8 px);已**原尺寸裁切 + 亮底对照**目检,未以缩略图代替;拆分后短 cue 英文首字母已大写。
- [ ] 字幕对照表(中英逐条)先出**待审**版本交用户确认,**确认前未生成图形层、未烧制**;本机无 drawtext/subtitles 时走 Pillow 透明 PNG + overlay,且 RGBA 半透明绘制用独立图层 `alpha_composite`(避免 `convert("RGB")` 出黑块)。
- [ ] 烧制用多输入 overlay+`-filter_complex_script`;`enable` 为**半开区间** `gte(t,S)*lt(t,E)`;**交叠 cue 已把前一条终点截到后一条起点**(截断与半开缺一不可)。成片音频 `-c:a copy` 未重编;帧数与母版**精确守恒**。
- [ ] 烧制后已用**字芯掩膜法**验收:cue 图形层 `alpha==255` 掩膜 → 成片亮占比(每 cue 检出),并**套在无字幕母版上作阴性对照**;间隙帧零残留。未用「整带差分均值」代替(该法受重编码运动噪声污染,不可靠)。低分 cue 已**原尺寸目检**定性而非直接判失败。
- [ ] 字幕成片画质已与母版做 SSIM/PSNR 对比并记录;文件体积变化已解释为编码收益而非画质降级。
- [ ] 每个cue的起落点、词ID与父对白ID可追溯;已带声连续回放核对语音短句同步,停顿/换人不挂旧字;无法听检项标待核。像素变化、中点截图及“18/18”未冒充同步或口型通过。
- [ ] 容器/码流色彩标签及PTS以实测为准;差值图只辅助排查,未把经验像素阈值当通用验收,也未把解码MD5当码流一致证明。
- [ ] 多层素材(访谈/档案/重演/系统生成/监控)各自登记基准与适用单元,未互相拉平;档案与监控层的不完美质感保留。
- [ ] 真实作品引用未生成受保护画面;事实性标题走文字层;处理方式为当次用户裁决并已记入交付说明。画内元素(如 [AUDIO MISSING]、唇读字幕)与正式字幕轨分开登记。
- [ ] 分镜与已确认SC事实先形成scene_spatial_plan,再形成组内start/events/end及每个在场者position/facing/front/behind,之后才进入获授权资产和视频;A0/G1/G2未被替换。
- [ ] 首轮有scene_desc先读真实来源并与SC图对齐;缺描述如实记录,confirmed/proposed/unknown分开,无已取画布/已对齐的虚假声明;独立资产请求未强加剧情layout,涉车按真实PROP及车辆坐标核对。
- [ ] 世界坐标/锚点固定且有来源,反打未翻转世界,不强制搬门、四向不同类锚点或虚构精确尺寸;背对/并肩/跪站等表演保留,未强制面对面或坐站平衡。
- [ ] 每组起止及事件状态覆盖全体仍在场者,跨组继承位置/朝向/成员;移动、转身、进出场明确,群体分裂有不重复的子组/个体ID与成员映射,behind未当无条件摄影背景。
- [ ] CHAR:crowd逻辑CROWD-xx,每组单张16:9多人正面全身群像、count=1,头手脚完整、灰底柔光、不同个体;人数/服装身份按项目,未默认9人/警服、复制脸或套主演裁头三视图。
- [ ] 群演未增加剧情环境、道具预演、动作/表情库;PROP独立、SC纯环境与所有资产固定去噪后缀不变;每图参考计1而非按人数,新增图重验上限、图序和绑定。
- [ ] layout导出白名单仅主体ID及位置/朝向/间距/通路/遮挡/移动,含自然语言与嵌套内容的lighting/style/color/material/render及情绪媒体均未透传;图片默认未作视频参考上传。
- [ ] SC结构位置可用,最终风格仍原独立配置;layout灰模/线框/灰底和群像合影队形未带入成片。scope=spatial_only、style_influence=none仅本地记录,未冒充API或完全防泄漏保证。
- [ ] 99%只作为进度信息,未断言编码/上传/成功;完成依据真实task/asset关联及可验证产物,未知不重复提交。其他旧冲突按§0D标待核,不自动返生成;历史CHANGELOG保持原文。

- [ ] 广告制作自动加载agency-ad-preproduction并读原包资料;剧集仅在用户选用时进入short-drama-script-authoring,已有剧本未擅自重写、未自动写整季
- [ ] 广告已调度Designer并确认设计输出,整合成可执行文字分镜与设计交接;返回点正确无循环,设计岗位未接管原资产/视频生成、代选模型或增加图片生成环节
- [ ] 用户要求保留台词时最终prompt含完整原句、镜号和说话人;逐字核对来源、数量、顺序、续句与占位,按脚本指定语言保留,原生英文未被改中文;未以概述替代,来源有缺失/歧义不猜补
- [ ] 声音模式按**默认分支**(原生音效+原词对白)执行:核验能力后**显式传** `enable_sound=true`、保留逐字对白且不生成音乐;无台词单元仍要求画面内声源音效、不静音;仅用户明确要求时才走全后期分支并关闭声音;未混用静音常量
- [ ] 原生对白需逐句听检/转写比对和口型核查;音轨存在或抽帧合格不等于台词正确。后期混音未用-an删除已确认的原生对白
- [ ] 时码闭合与台词可说完分别检查;未因赶时长改词或异常加速,时长重排/返生成经过确认,旧媒体与原提交记录保留
- [ ] 来源包脚本未运行、风险模板未回退加载,包内默认参数未覆盖A0/G1/G2及资产规范;历史任务/媒体未改写

- [ ] 视频提示词按§4a的Seedance 2.5格式组织,参考绑定对应实际输入,时间轴覆盖本单元;未套旧2.0固定15秒窗口或冒充官方强制语法
- [ ] 每条视频prompt原样包含style-cinematic-realism“视频默认摄影常量”一次,未叠加冲突的Alexa LF/禁止颗粒视频模块;优化后仍完整
- [ ] 视频轻微胶片颗粒未污染资产图;资产固定英文去噪末句未复制到视频;提示词24fps/快门观感未冒充实际输出或API参数
- [ ] 格式更新未自动更换G1模型、G2分辨率、已提交任务记录或已有媒体

- [ ] 自然语言已转逐镜文字分镜,生成前保存并展示Markdown,未仅提供梗概/节拍/JSON;“不要分镜图”未误解为不要文字分镜
- [ ] 英文/海外剧本篇幅按`wc -w`全篇词数核对(含动作行、场景头、角色名前缀),先按时长反推区间再定目标;120秒集落在390-448上沿而非凑320
- [ ] 剧本压缩按「砍动作→砍场景头与括注→砍动作修饰→台词最后动」顺序执行,词数下降与台词占比上升同向;未先删台词保动作
- [ ] 剧本正文已机械扫描:无中文字符、无转场词、无心理旁白、无委婉词、无内部骨架标注(起承转合/压放/Beat/Plot Unit)
- [ ] 分镜含镜号、计划时码/时长、景别、机位运镜、主体动作、场景光线、声音、剪辑关系和CHAR/PROP/SC逻辑编号(按需列出);唯一镜号、时间线闭合、总长正确
- [ ] A0记录人物CHAR/道具PROP/纯环境SC统一或分别选定的贝宝PRO/季宝具体版本,动态匹配模型;已有确认只在原作用范围有效,未自动把人物/场景确认扩大到新增道具
- [ ] 三类资产独立登记type、model_label/model_id、确认来源/作用范围、用途、实际规格与真实asset_id;待生成字段未伪造,工作流分类未混同接口媒体type
- [ ] 每张资产按所选模型当次能力核验画幅、分辨率、count、参考上限与quality;PROP背景/视图数量按用户确认方案,未默认4K、三视图、count或额外特写数量
- [ ] 写实项目加载style-cinematic-realism并记录版本;风格未改变有效模型选择、人物三视图、道具隔离背景或SC无人无道具规范
- [ ] 演员/有台词角色每人一张16:9三视图、count=1;左正面独立裁头、中背面含头、右3/4脸;配饰同侧、手脚完整。CHAR:crowd仅按§0D群像例外验收,不套本条裁头
- [ ] 演员三视图同人同穿着服装,群演群像为不同个体且服装按故事;均纯中性灰底柔光。可分离剧情物件归PROP,不在人物图手持预演;未追加身份锚点图、表情图、姿态图、人物环境合成图、分镜图或首尾帧
- [ ] 必要PROP外观结构/比例/材质/颜色/部件状态已验收,背景隔离且无人/手/剧情街景;未套人物裁头三视图模板,未增加无关道具或特写
- [ ] 汽车外观与必要座舱视图由同一逻辑parent_prop_id管理,各视图view_id/asset_id真实或标为待生成;轮毂、车灯、内饰一致,座舱未登记为SC
- [ ] CHAR、每张PROP视图与每张SC提示词末尾含固定英文去噪原文一次,无冲突颗粒/高频细节;实际关键轮廓与内容已质检
- [ ] SC无人无道具及其倒影/投影/残留局部,静止或无人汽车也未放入SC;分镜所需建筑、道路、桥梁、墙地面和固定空间设施仍保留,不套人物灰底
- [ ] 项目要求无logo/车标/文字时,CHAR/PROP/SC资产层逐图查字标,成片层独立逐帧核查车头/座舱及招牌等;历史含车SC未当作当前可沿用流程
- [ ] 每张演员三视图/群演群像仅一个asset_id/一个输入,分别引用视图区/成员ID;PROP每张实际图同样计入上限。新增图后各段数量/顺序及组合重验,未把图内人数当输入数、默默丢道具或塞回SC
- [ ] 每镜按需引用CHAR/PROP/SC,不强制三类全挂;三栏灰底/隔离背景未带入视频,纯环境无人无道具仅约束SC资产,成片按脚本可人车同框
- [ ] 批量资产已用PIL拼联络图(CHAR 3×3 / PROP 4×3 / SC 1×6,角上烤编号)逐格目检,未只抽样;逐格看完后才列返工清单
- [ ] 返工项用「第一优先声明+成对对比+点名排除」三件套重写提示词;返工后单独出AB对照图留档,初版文件未删除
- [ ] 换图像模型重生成时,旧模型产出移位留档到`_A0对照_<模型>/`目录而非覆盖,可作AB对照
- [ ] G1/G2有本次有效确认与动态组合核验;未以默认/推荐代选,不支持则暂停,换模型重验分辨率
- [ ] A0/G1/G2不全时未提交完整项目生成;仅文字任务未启动媒体生成
- [ ] 视频提交参数与确认一致,分辨率显式传入或记录合法固定输出例外;原生与后期尺寸未混淆
- [ ] sd2.5单条目标≤30秒只有一次生成请求、count=1、duration=T;内部文字镜头未拆成额外任务,无自动试片
- [ ] 不强制一镜到底;多段方案有镜号到生成单元映射,不固定每段四拍
- [ ] submitted有真实回执/task_id,未知不重复提交,失败先诊断并经用户确认重试
- [ ] 输出扩展名与字节格式相符;像素/帧率/编码/采样率/时长按实测记录,下载完整可解码
- [ ] 按分镜逐镜核对内容、顺序、人物身份、道具一致性与动作;抽帧未覆盖的运动/声音问题明确待人工复核
- [ ] 抽帧先查源片局部时间是否越界;30秒SEG-B未直接按总片36/38/39秒提取,已按真实SEG-B成片起点及源入点/变速映射定位,未默认起点30.000秒或将零帧笼统归因于音频-ss/视频关键帧
- [ ] 规则更新未自动授权重生成;经授权恢复项目才调整不合规活动绑定,旧已完成媒体与历史回执未改写,原范围外新增PROP已另获适用确认
- [ ] 完整任务交付一条剪辑后的MP4,而非只有散片;镜头入出点、顺序、节奏与声音按分镜处理
- [ ] 最终分镜Markdown含镜号/生成单元/源文件/源入出点/成片时码,计划与实际分开且偏差如实记录
- [ ] 画面与声音裁剪/PTS一致,转场重叠计入总长,无acrossfade缩短后补静音掩盖错位
- [ ] 成片时长、音画同步与最终编码响度/真峰值实测;额外字幕、品牌叠字、变速、超分或明显首尾淡化均有依据
- [ ] 「要有包装」的范围已澄清(片内图形层 / 交付物料两层),未默认其一
- [ ] 片内包装图形层(品牌板、参数条、片尾Slogan板)的时间窗经抽帧核验四种状态(淡入中/全显/淡出中/已消失),参数条落在能承载它的镜头上,片尾品牌板淡入后保持至末帧未淡出
- [ ] 本机无freetype时字幕后走「Pillow渲染透明PNG → overlay叠加」路径,未改动系统ffmpeg;透明PNG已用-loop 1 -t变成视频流,fade的st按预期生效
- [ ] 海报/图形层的半透明压暗层走独立图层alpha_composite,未因在RGBA图上直接绘制并丢弃alpha而变成纯黑块;已用同区域YAVG与未叠加原帧对比核验,压暗量级合理
- [ ] 海报/图形层文字可读性由描边保证而非重度压暗;信息带无可见硬边;左右/上下分栏文字无重叠;选帧未让主体与文字区冲突
- [ ] TP−I记为峰值-响度比PLR,未混同基于RMS的峰值因数;恒定增益不改变PLR,仅该路径可能不能同时达标,未否定动态处理改变PLR的可能或无证据承诺开场/LRA变化
- [ ] 关闭alimiter自动电平补偿使用受支持的布尔level=false;保留浮点中间文件防整型过载削波,未把限幅等同平顶,未凭几次AAC扫描断言单一根因或套用普适过冲/响度损失数字
- [ ] alimiter若使用已核验自动补偿设置及最终编码结果,未将个案增益/编码过冲写成定律,未把某种处理一律禁用;真峰值按dBTP记录
- [ ] 每段视频落盘后已用ffprobe实测width×height/fps/duration并回写actual_spec;交付规格以实测为准,接口回执的dimensions未直接当作输出规格,插值放大已披露倍数
- [ ] 合片前已逐段ffprobe确认音频流并按声音分支处理:全后期分支依授权剥离非静音模型轨;**默认原生分支**保留已验收对白与音效,不套统一-an;仅存在AAC不证明发声或台词正确
- [ ] 判段完成已核对真实task_id与asset_id关联及可验证产物,不凭同名asset_search命中或RUNNING/99%判完成/失败;未知不重提,明确失败经诊断与授权才重试,已有冗余task_id记入redundant_tasks且标明不予采用
- [ ] TTS/音效音频落盘后已ffprobe核时长; MiniMax-2.8-HD未传audio_format=wav等不支持枚举,失败先最小参数重试定位再保留原音色;环境声短于目标已重写提示词重生成
- [ ] 多图层半透明合成走独立图层+alpha_composite(含封面海报scrim);BSD环境下解析ffmpeg测量输出用awk,未依赖grep的\s或-P
- [ ] 最终编码响度/真峰值按ebur128对成片实测;未用滤镜目标冒充结果,不把历史增益/限幅方案当通用答案;alimiter如需关闭自动电平补偿,使用经核验的level=false,真峰值以dBTP记录
- [ ] 生成与交付文件状态、真实task_id/asset_id/本地路径已回写,最终MP4及分镜Markdown可直接访问
- [ ] 每段duration为整数且在单条上限内;台词自然时长超出上限时已按整数时长拆条,未以压缩、删词、改词或少说解决
- [ ] 台词与镜头窗口自检使用健壮解析(镜头区间/带尾注镜号/拆分条目),同一镜号的台词需求已累加;自检报告打印的解析条数与预期台词总数一致,不一致按自检失败处理
- [ ] 原生对白逐句验收按**镜头窗口切片转写**,未据整段转写结果直接判「台词缺失」;转写未用 `initial_prompt` 传入期望文本
- [ ] 对白比对分「同音/近音误识」与「真实增删改」两级(拼音级),结论写成「N 条中逐字一致 X / 同音误识 Y / 真实差异 Z」并列出 Z,未只报一个「通过」
- [ ] 字幕轴仅依据可靠的实际语音/词级对齐;异常项定点复核或待听检,未回退设计窗口、未按字数/词数均分;按 §6a-2 分短句,边界不重叠,未强拉1.20s停留或固定空隙
- [ ] 原生对白母版保留各段音轨(未统一 `-an`);未做后期混音的母版已实测并记录 I/LRA/真峰值,响度归一化留到混音阶段
- [ ] 多层透明图层叠加用 `-loop 1 -t <图层时长>` + `setpts=PTS-STARTPTS+<start>/TB` + `overlay=eof_action=pass:shortest=0`;未使用无效的 `-itsoffset` 组合
- [ ] 包装后已抽帧核验四种状态与多图层共存位置(字幕与卡片未互相遮挡)
- [ ] 每处对白差异按Pitfall 48复核原音/中立转写/人工听检;volumedetect高能量只说明有声音,不证明语音或特定词,低能量也不单独定吞字。证据不足单列待人工听检、未豁免/计入通过;确认的ASR豁免有可核验证据写入qc_waivers.json,真实差异返工另获授权
- [ ] 英文对白比对已做三层归一(同音异体 / 口语数词→阿拉伯数字 / 专名变体表)后才计差异
- [ ] 存在返工片段时,取 QC 数据、找源片烧字幕、合片排序三处走的是同一张「交付槽位→实际源片」映射;排序键能容纳 `U4-1b` 类变体;被取代的旧片未参与合片但保留留档
- [ ] 成片时长写**实测值**(不是 20×30=600 的推算值),并说明与规划值的差额来源;未静默裁剪内容凑整
- [ ] 混音按素材选择单遍/两遍loudnorm、增益或动态处理,未一律禁用单遍、未把历史固定增益当默认或真峰兜底;alimiter关闭自动补偿使用level=false。最终AAC/MP4实测LUFS/LRA/dBTP,mean_volume未混同LUFS;留白动态与对白可懂度经试听/证据核对,未凭ASR命中或mean变化小判通过
- [ ] 单元收尾处的单句短台词(短句/单字/喊停/点题句)已在提示词里单独点名保护(必须发声、给时间位置、列出四种禁止)
- [ ] 每张资产已做**四角 100% 原尺寸裁切目检**(不只看联络图),并已把各图同一位置(尤其右下角)横排对照以判定伪文字来源:只有个别图有 → 生成式残留并按 §2f 换语义场返工;全部图都有 → 平台水印另议
- [ ] 高图库题材场景(监控/控制室/实验室/机房类)已按 §2f 换语义场,未依赖叠加负面词;玻璃等反射面已写明"完全不透视"
- [ ] 连续 3 次以上返工且失败模式各不相同时已停止改措辞、改结构;残留瑕疵已显式记录并给出接受/不接受理由
- [ ] 台词基准已做**污染扫描**(无换行/`|`/`**`/`#` 残留),并对基准做了**反向比对**——未被任何 prompt 覆盖的 ID 已逐个解释缺席原因;画内文本(字幕卡/唇读/界面标签)已单列 `onscreen_text`,未混入对白基准
- [ ] 视频提示词侧已做结构自检:**默认摄影常量的出现条数=生成单元数**(不缺不重)、`text` 代码块数=单元数、每单元「参考绑定」与 `reference_assets` 下标逐条对齐、无 layout 图片参与绑定
- [ ] 视频落盘后已用 `ffprobe` **实测**宽高/时长/帧率/音轨,**未采信提交回执的 `dimensions`**(本项目回执 2560×1080 vs 实测 2206×946);非 16:9 画幅的短边差额已在交付文档写明来源与取舍
- [ ] 逐句台词验收用的是 `cover = LCS / len(基准句)`(**不是** `max(len(a),len(b))`),阈值 0.95;并已**双向**检查(本句覆盖率 + 剧本外词清单)
- [ ] 台词顺序检查用的是**累积覆盖首次达 0.95 的段号**单调性,不是 N 段滑窗(滑窗会让所有句子落点相同、检查静默失效)
- [ ] ASR 静音幻觉段(`no_speech_prob>0.70` 且 `段长<1.0s`)已剔除并在报告显式列出;**无对白单元已做"未检出语音"反向验收**
- [ ] 口型同步证据来自**逐像素相关**(峰值在面部 + 背景对照近 0/负 + 最佳 lag≈0),**未用 1fps 抽帧当口型证据**;报告中已声明这是代理指标而非音素级验收
- [ ] ASR 结果已缓存(含源文件 mtime 校验),重跑 `verify` 不重复支付约 5 分钟的转写成本

## CHANGELOG

### 2026.09.22.1

- **§0F 风格库来源改为同插件的 `asset-style-selector` skill**(入口 `skills/asset-style-selector/SKILL.md`,V01 / v1.0.0),不再使用桌面 ZIP。候选范围固定为四个分支:`hard-scifi` / `wasteland-3d` / `cinematic-realism` / `anime-2d`;`references/common.md` 与选中分支须读全文,`sources/` 原稿只作追溯。
- §0F-2 与该 skill 的启动门禁对齐:展示固定四选一菜单(编号不可变、无默认、不预选、不标推荐),匹配分析写在菜单之外,不替用户选定;分支1不含太空歌剧、分支4为日系新海诚式而非通用国漫,命名差异须说清,不伪造第五分支。
- §0F-3 明确分支3 `cinematic-realism` 与 §1a 的写实基底同源,选中时不叠加两份完整prompt;公共尾缀只追加一次,§2d 固定去噪末句不可被其替代。
- §0F-4 记录字段改为 `style_skill_version` / `selected_style_id`;旧来源下的既有项目确认继续有效,落在四分支之外时如实说明,不自动改判。
- 正文删除「用户+日期指定/确认」一类归属标注(规则条文、实测结论与 Pitfalls 案例保留),CHANGELOG 作为变更历史不变。

### 2026.09.20.6

- **Pitfalls 新增 71 条(字幕烧制与验收)**:① 多输入 overlay(134 层)+ `-filter_complex_script` 实测可行、耗时可接受(2206×946 · 17690 帧 · libx265 crf17 medium = 18m43s),不必为省 filter 层去拼透明流;② **必须用半开区间 `gte(t,S)*lt(t,E)` + 截断交叠**(否则 t=E 双命中 / 换人处叠字糊成一块);③ 验收用**字芯掩膜法**(图形层 `alpha==255` 掩膜 + 无字幕母版阴性对照),**「整带差分均值」不可靠**(运动重编码噪声会淹没字幕信号,本项目无字间隙差分反高于有字 cue);④ ffmpeg `select` 表达式过长会解析失败(196 项即挂),改用分批或 `fps=N` 整段抽带。
- **Verification 新增 3 条**:烧制参数(半开区间/交叠截断/`-c:a copy`/帧数守恒)、掩膜法验收与间隙零残留、与母版 SSIM 对比记录。
- 落地依据:项目《呼噜噜的夏日》v3.2 中英字幕烧制(用户选「全部上屏 134 条」)——成片 365.7 MB / 17690 帧 / 737.088 s;SSIM 0.9962;134/134 条检出(成片亮占比中位数 1.000 vs 母版 0.001)、43 个间隙零残留。

### 2026.09.20.5

- **Pitfalls 新增 70 条(字幕时间轴与版式落地)**:① 字幕时间轴必须**双 ASR 交叉**(整片 small + 逐单元 medium 取并集)+ 争议点**定点重跑**或 `volumedetect` **能量实测**裁决 —— 单一模型必漏句且不报错(本项目 small 漏 D-10 前半/D-29 前半/D-73,medium 漏 D-42/D-43);② **禁止用 `initial_prompt` 确认缺失句**(会把 prompt 内容塞进输出,产出污染文本);③ 中文频道幻觉特征(20–40 ms 挤 6–20 字、跨音频同一位置重复)须剔除,medium 繁体须归一,无词级回退段只用到段级时间(否则整段循环幻觉);④ **版式基线须按字体真实 bbox / 名义升部含描边外扩反推**,用 capHeight 会得到 4 px 行隙(目标 8 px);校验必须**原尺寸裁切 + 亮底对照**。
- **Verification 新增 4 条**:双 ASR 交叉与能量裁决、幻觉/繁体/无词级回退处理、基线反推与行隙目检、对照表先审后烧(含 Pillow 独立图层 `alpha_composite` 防黑块)。
- 落地依据:项目《呼噜噜的夏日》v3.1「剪辑包装」——v3.1 母版重拼成片(26 段 concat -c copy,737.088 s / 17690 帧,音视频流与 v3.0 逐项相同),并产出 134 条中英对白字幕**对照表(待审,未烧制)**。

### 2026.09.20.4

- **Pitfalls 新增 68 条**:改参考图数组必须**同步重写整段【参考绑定】**并断言「第 N 张」编号 == `1..len(reference_assets)`;补传道具时顺手补该物件的肯定式约束。
- **Pitfalls 新增 69 条**:否定式约束(「不出现可读文字」)在**水幕/招牌/书页**这类表面失效,改**肯定式**描述;产出口必须**原尺寸裁切**目检,不能靠抽帧或缩放判断。
- **Verification 新增 2 条**对应核对项。
- 落地依据:项目《呼噜噜的夏日》v3.1 补资产重制(用户选「只重出 TOP3」)。SEG-05B/SEG-10/SEG-19 参考图 4→7 / 4→6 / 4→5,**丢资产全部补回**(目检落位:家长群像、青玉佩特写、竹林、结局画册);帧数 601·721·721 精确守恒、无黑帧、语速与上一版持平(4.04–4.89 字/秒)。仍遗留 SEG-05B 水幕伪文字。

### 2026.09.20.3

- **新增 §3a「提交前资产核对闸门」(强制)**:任何生视频提交前,以**镜头表资产列**为唯一基准抽出「应有资产集合」,与 `reference_assets` 实传集合逐项对差,**差集非空=硬阻断**;附可直接跑的对差脚本骨架与六步流程(定基准 → 拿实际值 → 对差 → 核上限 → 核顺序 → 写回台账)。
- **新增规则:参考上限只能实测取得** —— 只能取当轮 `canvas_video_provider_config` 的 `max_image_count`(记录 provider+mode+值);**禁止把 A 模型的上限套到 B 模型**;文档里不得出现无当轮证据的「N 张上限」。
- §4 入口加挂闸门(「并通过 §3a 资产核对闸门(差集必须为空)后」);Pitfalls 新增 67 条;Verification 新增 4 条核对项。
- 落地依据:项目《呼噜噜的夏日》v3.0 语速校正批次。17 个重制单元中 **16 个**实传参考图**少于镜头表自己声明的资产**,累计丢 **33 个参考位次**,13 个单元出现断锚(有台词角色 / 关键道具特写 / 主场景 无参考);根因是修订稿里写了**不存在的平台限制**「每单元 ≤4 张为 Platform 上限(实测)」——而本环境 **Seedance-2.5 `hur68xij1s` · SubjectToVideo 实测 `max_image_count = 30`**,本片上一批自己就用过 6–9 张并全部成功;那个「4」的真身是**本环境 Kling-O3 `7cmqdq935y` 的上限**,被张冠李戴。33 张被丢的图**全部早已上传可用**——纯规划期漏检,非模型问题、非资产缺失。

### 2026.09.20.2

- **§6 新增「音频流时长偏差必须逐段对齐后再拼接」**:来自本项目 26 单元合片实测——AAC 按 1024 样本整包编码(32kHz → 32ms/包),每段音频被 padding 到整包、比视频流长 14–38ms,26 段累积 **+837ms 音画漂移**,片尾口型明显错位而单段播放看不出。给出误差反馈裁剪法(floor/ceil 选包 + `-t` 裁音频 + 视频 `-c copy`),把累计差压到 **+4.7ms**;并明确禁止用统一 `-shortest` 或套用同一裁剪值。

### 2026.09.20.1

- §4c-0 第 3 条升级为**可执行的台词密度判据**:明确「净字数 ÷ 镜时长」的算法与五档阈值(≤4.0 舒适|4.0–4.5 合格|5.0–5.99 偏快|≥6.0 过快|≥8.0 严重),并给出冲突处置阶梯——不改词重排时长 → **拆单元**(模型时长上限满档时的唯一出路)→ 跨镜切分长台词(一字不改、仅拆编号)→ 新单元时长取整。
- 新增「诊断要一次覆盖全片」要求:按单元统计总密度与单镜峰值,输出超标清单与档位分布,再据用户确认范围执行;用户确认范围与目标语速后可直接开跑,不必二次确认。
- 落地依据:项目《呼噜噜的夏日》v3.0 语速校正。v2.0 实测单镜密度峰值 **10.40 字/秒**(52 字塞进 5 秒镜头),19 个单元中 12 个镜头 ≥6 字/秒;7 个满档单元拆为 14 个新单元、3 个单元在 30s 内重排,全片 19 → 26 单元、555s → 736s(9:15 → 12:16)、镜头 107 → 152,重制后单镜峰值降至 4.00。

### 2026.09.19.23

- 用户确认长期规则改定:**声音方案默认由「全部声音后期添加」改为「原生音效+原词对白」**。§4c-0 升为默认分支,§4c(全后期)降为非默认分支、仅在用户明确要求时启用;frontmatter 描述、入口说明、流程图、§0D-1、§4b 参数模板、§4a【声音方案】、§5a 标题、§0D 与交付 Verification 同步改口径。
- §4b 参数模板:`enable_sound` 默认值改为 **true**,且要求**显式传**而不依赖「不传即 true」的隐含默认;只有用户明确要求全部后期时才传 false。
- 无台词单元不再默认静音:仍须生成画面内可见声源的环境与动作音效;旧「视频只出无声画面、prompt 只含静音约束」的表述限定为仅适用于全后期分支。
- 历史媒体、历史提交参数与历史 CHANGELOG(含 2026.09.18.1 的“全部声音后期添加”选择记录)保持不变,仅作追溯,不据此重做或重生成既有媒体;本项目《呼噜噜的夏日》已是该默认的首个落地项目(19 单元全片 `enable_sound=true` / 1080p / 21:9)。

### 2026.09.19.21

- 资产生成前根据剧本从外部风格库推荐风格,新增§0F作为唯一活动源;入口、流程图、生成前确认与Verification同步。(该来源已于 2026.09.22.1 改为 `asset-style-selector`)
- 来源只读核验并记录版本标识;索引只作导航、候选须读原文,不安装整库或执行其中代码。
- 推荐1个首选及最多2个备选,说明剧本依据、三类资产适用范围及差异;用户确认后适配,有效既有确认不重复问、不自动换风格。真实源文、适配稿和历史提交记录分开。
- 明确来源风格的单焦点、剧情布光、高频毛发与统一柔焦尾缀不能覆盖三视图/群像、隔离资产与固定去噪规则;示例风格图只转文字,避免人物/道具污染场景。
- 仅更新既有流程,不安装或修改来源、不调整现有项目配置/提示词/画布,不生成媒体;原A0/G1/G2、声音、字幕、摄影及历史CHANGELOG保持。

### 2026.09.19.20

- 用户确认“最终所有素材包含提示词都要放到无限画布上并整理”,本次选择“仅更新交付标准”。新增§9a为唯一活动源,§9、入口说明、流程图与Verification同步;完整制作的交付不再仅MP4/分镜或按需附带源素材。
- 明确00–09分区,覆盖前期、CHAR/crowd、PROP、SC、视频、声音、字幕包装、成片验收和历史版本;完整prompt须可复制并与实际提交任务/参数/参考图序/产物对应,未提交稿与旧稿不混淆。
- 明确原生预览节点与受限格式的完整附件/归档包分别登记、真实清单逐项核对、能力未知/缺项保持待核;不解码不透明草稿、不以媒资入库或本地路径冒充已上画布,不虚构节点ID或能力。
- 反思修正§5a的过强证据表述:多模型分歧、典型幻觉短语、无台词计划只是线索;带期望原文的ASR不能自证词语或时间戳准确,仍须核原声。历史CHANGELOG与项目验收记录不覆盖。
- 仅修改标准及记录,无新可执行代码、无云端查写/上传/节点移动、无媒体生成/转写/重烧;原模型确认、资产链、声音分支、字幕标准保持。

### 2026.09.19.19

- 用户确认「仅更新标准」「完全按图2」。新增 §6a-2 为正式双语字幕唯一活动源:中上英下、中文较大,各一行底部居中,按有效影像区匹配视觉比例;截图估算的720p调试起点与已验证参数明确区分。
- 父级对白拆成语音短句cue,词级时间戳/音频对齐为依据;中文按对应短句翻译,同窗切换。禁止整段挂屏、按字/词均分、计划时码回退、强制1.20s停留和固定间隙。正文§5a、Pitfall41和Verification同步。
- 修正验收证据等级:层数/像素差/中点截图不证明同步,需逐短句起落点及连续带声回放;嘴型问题独立记录。新增Pitfall66,历史18/18仅属出现性记录,旧成片不据此重新判为同步合格。
- §6a-1移除混合shell/Python且输入索引不完整的伪可执行示例,改为文字数据流;修正像素阈值、overlay默认格式、PSNR、片尾处理及解码MD5的过度泛化。未新增/运行可执行脚本或网络调用。
- 本次仅修改标准与记录,未重做MP4、SRT、JSON、图层或音轨,未重转写、生成或修口型;原A0/G1/G2、资产链、摄影、声音分支保持不变。旧CHANGELOG保留为历史,不作为现行标准。

### 2026.09.19.18

《The Alpha's Unwanted Mate》追加「片头 8 s + 双语硬字幕 + 片尾字卡 3 s → 311 s 成片」后,把**合片与烧制阶段**的实测经验补入 §6a-1(新增子节)、Pitfall 65 与 1 条 Verification,未改动任何既有规则:

- **新增 §6a-1「片头 + 正片 + 片尾字卡的合片变体」**:给出「三段各编成视频流先 `concat`,字幕在 `concat` 之后用 `overlay` + `enable` 按**成片时码**逐条开关」的完整滤镜链写法,并说明它与 §6a「几十层 fade 链」的适用分野。
- **新增关键陷阱:`overlay` 的 `enable` 里 `t` 是该 overlay **输入底片流**的时码,不是全片时码**。字幕叠在 `concat` 之前而窗口按成片时码填(+8 s 片头)→ 全片字幕整体晚 8 s,**不报错**,某次 18 条只检出 8 条才暴露。附「叠在 concat 之后」与「叠在正片上但窗口先减片头时长」两种正确写法,禁止混用。
- **新增「容器色彩标记必须实测」**:命令行写 `-color_trc bt709 -color_primaries bt709` 后 muxer 仍可能不落盘(`ffprobe` 读到 `unknown`,仅 `color_space`/`color_range` 生效),播放端会按默认矩阵猜色;补救用 `-c copy` 重封装补写,**前后码流 md5 逐比特一致,不必重编码**。
- **新增字幕验收三件套**:① **逐条出现性**(每条取中间帧与同帧源片比像素差,`max|diff|>5` 判已叠上,检出数应=字幕层数);② **洁净度「文本级像素占比」判据**(`|diff|>60` 占比 >0.3% 为真实叠字、≈0% 为无字、0.3–0.6% 且差异呈"轮廓描边状均匀分布全帧"为**重编码轮廓振铃**;判不准则导出「成片/源片/差值图」三格堆叠看字幕带有无文字形残留);③ **底片无损性**(`overlay` 默认 `format=auto` 时非叠字区 PSNR=inf;给底片加 `format=rgba` 会掉到 ~54 dB,不要为"保险"加)。
- **新增中英混排字幕折行方法**:CJK 无空格须逐字成单元,用 DP 同时优化行宽均衡与断点落在标点处;双语取**英上中下、中文小一号**,16:9 底边距约 57 px(7.9%)。
- **反向记录**:片尾字卡应按「黑场→内容→黑场」淡尽,与 §6a「片尾品牌板不要淡出」相反(剧集片尾字卡 vs 广告品牌板),两者按交付形态选择,不要互相套用。缩略图里中文"重影"须先出全分辨率 NEAREST 裁切再判,多为降采样锯齿而非渲染缺陷。
- **新增 Pitfall 65**:把上述时码与容器元数据两条合并成通则——**凡"时码"或"容器元数据",一律以被测流的实测值为准,不以命令参数或设计意图为准**。
- 本轮为规则增补,未生成媒体、未改动历史记录与旧版本 CHANGELOG。

### 2026.09.19.17

《The Alpha's Unwanted Mate》5 分钟横版短剧(10 段 × 30 s / 18 句原生英文对白)端到端出片后,把**成片验收阶段**的三条实测经验补入 §5a(工具链已就绪、转写幻觉识别、字幕轴锚定),未改动任何既有规则:

- **§5a 第 1 步新增「先查缓存」**:本机 managed venv 已装 `faster-whisper 1.2.1`,`~/.cache/huggingface/hub` 已缓存 `large-v3` / `small` / `tiny` 三档,可**离线直接加载**,不必再配 `HF_ENDPOINT` / `download_root`,也不受代理影响;性能参考 large-v3 CPU/int8 约 0.7× 实时。
- **新增「转写器会在有声音但不是人话的地方幻觉」判定**(与静音幻觉区分开):5 段尾部余量(人群笑声 / 挣扎声 / 动作音效,峰值 >25% 并非静音)被 large-v3 转出 `Oh, my God.` / `Thanks for watching!` / `Thank you.`。给出三条须同时成立的判据(**双模型交叉完全不一致** + 命中典型幻觉短语 + 落在设计为纯音效的镜头内),并强调**同批真实台词被两模型一致识别**是反向对照。缺一即导出片段留待人工听检,不得直接豁免或直接判模型漏词。
- **§5a 第 4 步补全字幕轴重建方法**:用「首尾关键词锚定」而非词数比例(词数偏差会错行);两个必踩坑——① **归一化必须去掉撇号**(whisper 对 `don't`/`dont`、`Kael`/`Kale`、`goddess's`/`goddess'` 极不稳定,保留撇号导致初次实现漏掉 9 句);② whisper 段级边界过宽(某句标 15.73–25.90 共 10.17 s,`word_timestamps=True` 复核实为 24.80–25.86),须逐词核对。另补 SRT 最短停留 1.20 s + 0.08 s 防重叠、原始实测值另存 `raw_*`、以及**字幕文本取原稿而非转写文本**。
- **强化 `initial_prompt` 的适用边界**(与 Pitfall 39 同源):为取词级时间戳而传入期望原文时,该次结果**只能证明时间戳,不能自证逐字无误**;一致性结论必须来自无初提示的中立转写,两者在报告中分列、不互相引用。
- 本轮为规则增补,未生成媒体、未改动历史记录与旧版本 CHANGELOG。

### 2026.09.18.16
- Pitfall 60:**平台回执尺寸不可信;21:9 下"1080p 档"是按像素总量重排画幅**。U2 回执 2560×1080 → 实测 2206×946(2.087 MP ≈ 1920×1080)。梦宝2.5 OS 无 2K/4K 档、2K 档模型无原生音频 → 946 是三重约束下的必然结果,非档位选错。含四个方案的取舍与"不默认升采样、不静默降档"的动作边界。
- Pitfall 61:**逐句台词验收的分母必须是基准句长度**。用 `max(len(a),len(b))` 会把别句的词算成本句失配,U2 被误报 0.28/0.42/0.26(实际 1.00)。给出 `cover()` 正确公式与"覆盖率 + 剧本外词"双向判定。
- Pitfall 62:**台词顺序检查不能用 N 段滑动窗口定位**。滑窗跨度覆盖多句时每句都在窗口起点得满分,落点全部塌到同一段,单调性检查**静默通过而形同虚设**。改用累积覆盖首次达 0.95 的段号。
- Pitfall 63:**ASR 静音尾部幻觉段必须剔除**(U2 30.00–30.04s 的 `Thank you.`,`no_speech_prob=0.93`),否则反向比对会把合格产出误判为"即兴补词";并要求无对白单元做"未检出语音"反向验收。
- Pitfall 64:**口型同步用逐像素「亮度时序 × 音频 RMS 包络」相关做代理**。手工框口部区域会框到躯干(首版得 −0.25 且滞后曲线全平、无信息);改为数据驱动后 U2 得峰值 0.548/落在口鼻颌区/背景对照 −0.119/最佳 lag −2 帧。含三条判据与"这是代理指标、不等于音素级正确、抽帧不能当口型证据"的边界;并记录 `large-v3` 权重 3.09 GB 联网下载与 5 分钟 CPU 转写的成本、缓存方案。
- Verification 新增 7 条(ffprobe 实测、双向台词比对、累积覆盖定位、幻听剔除与无对白反向验收、逐像素口型证据、ASR 缓存、非 16:9 短边差额入档)。
- 本轮落地工具(项目侧):`extract_video_payloads.py`、`video_qc.py`(fetch/probe/verify/plan)、`lipsync_probe.py`。

### 2026.09.18.15

- 新增 **Pitfall 59**:从分镜 Markdown 抽台词基准时的"污染扫描"与**双向比对**(既要验"提示词 ⊆ 基准",也要验"基准 ⊆ 提示词"并解释每条缺席是否有意),以及"画内文本(字幕卡/唇读字幕/界面标签)必须单列、不得混入对白基准"。本项目实测到 `D12-2` 被静默损坏但条目数与 JSON 解析均正常,只有反向比对才暴露。
- 新增 Verification 两条:台词基准污染扫描;视频提示词侧的常量与结构完整性自检(摄影常量条数=单元数、text 块数=单元数)。
- 本次为规则增补,未生成媒体、未改动历史记录与旧版本 CHANGELOG。

### 2026.09.18.14

- 新增 **§2f 角部伪文字水印审计与「图库原型召回」返工**:确立四角 100% 原尺寸裁切目检为资产质检必做环节(缩略联络图看不出角部伪文字);确立"判水印来源必须先做跨图同位置对照"(只有个别图有 → 生成式残留;全部图都有 → 平台水印),避免误判成"全部重出"。
- 记录根因:提示词含 `监控室/控制室/观察室/屏幕墙/操作台/摄像头/传感器/安防` 等高饱和图库题材词时会触发**图库原型召回**(自带标识、设备、挂钟地图、角标水印),**负面提示压不住**;修复顺序为 ①换语义场(删诱因词)②改低密度平面描述("画面只由 N 种平面构成")③加四角反水印条款与"应像电影剧照而非图库素材"定性 ④玻璃必须写明"完全不透视"。
- 新增 **Pitfall 58**(含 4 条子项):连续 3 次以上返工且失败模式各不相同 → 停止改措辞、改结构;并补充"玻璃只写不透视仍会透出相邻空间"的实测教训。
- 本次为规则增补,未生成媒体、未改动历史记录与旧版本 CHANGELOG。

### 2026.09.18.13

- 新增§0E:帧内可读文本(屏幕录制/系统界面/数据可视化/字幕卡/代码)一律走程序化图形层,判据为文本是否承载叙事;仅作纹理的文本可留给模型。图形层同时获得文字准确、节奏可控、不消耗生成额度三项收益。
- 新增多层素材分层基准(访谈/档案/重演/系统生成/监控各有画质色彩基准,不互相拉平;档案与监控的"不完美"是叙事资产),以及真实作品引用的版权处理原则(不生成受保护画面,事实性标题走文字层,处理方式属当次用户裁决)。
- 明确§0E不替代 A0/G1/G2、声音分支与 CHAR/PROP/SC 分类;图形层段落不进资产链;画内元素(如 [AUDIO MISSING]、唇读字幕)与正式字幕轨分开登记。
- 新增 Pitfall 57 与 4 条 Verification。本次为规则增补,未生成媒体、未改动历史记录与旧版本 CHANGELOG。

### 2026.09.18.12

- 固化群演单张16:9正面全身群像与layout空间白名单,保留CHAR:crowd与原CHAR/PROP/SC链路;风格技能只引用§0D,不新建重复layout技能。
- 将上版的项目暂停/模型/无scene_desc状态改为条件规则,具体状态留项目记录;纯独立资产请求不强加剧情layout。源文件不修改或安装,新增前置信息、车辆空间与事实/提案/未知的证据边界。
- 补全逐事件重放、往返中间状态、按时点成员拆分/合并与人数守恒、落脚位及通路、朝向依赖更新、头部/身体朝向分离、按具体镜头换装绑定;新增Pitfall56及对应验收项。
- 新增§0D-6:文字完成不冒充图片完成或提交就绪;新增群演需清理旧复制脸视觉指令并重验真实输入,对白及当前声音策略保留,历史prompt不覆盖。
- 本次仅修订既有技能并静态校验,不运行项目构建脚本、不重写项目准备稿、不生成任何媒体;旧版本CHANGELOG原文保留。

### 2026.09.18.11

- 新增首部高优先§0D作为群演/layout唯一活动规则:分镜与已确认SC事实→固定世界坐标/锚点→组内start/events/end及全体在场者四字段→原资产链→视频。保留未知、跨组成员与明确表演,不因反打翻转世界、不搬门凑锚点,群体分裂用子组/个体ID。
- CHAR新增crowd子类、逻辑CROWD-xx;每组单张16:9多人正面全身群像、头手脚完整、灰底柔光、不同个体,人数/服装按项目。演员三视图、独立PROP、纯环境SC、固定去噪后缀及A0/G1/G2保持;每图计一个参考,新增图重验数量与图序。
- layout仅导出空间白名单文字,隔离lighting/style/color/material/render与情绪媒体;图片默认不上传,不把灰模/线框/灰底或合影队形带入成片。spatial_only/none为本地记录而非API或防泄漏保证,缺scene_desc不虚报画布数据。
- 修正首部99%必为编码上传的推断,完成以真实task/asset关联及产物核验为据;状态未知不重提。主流程和声音前置按§4c/§4c-0分支,§4a对白用脚本指定语言,英文不改中文。
- 修正Pitfall48及Verification:能量不能证明语音/特定词,证据不足待人工听检、不得豁免;修正Pitfall52及Verification:不一律禁用单遍loudnorm,固定增益仅历史选择,level=false、最终AAC实测dBTP,mean不等于LUFS。
- 同步主流程、资产/提示词入口、Pitfalls54–55与Verification;旧冲突按优先规则标待核,不自动返生成。用户本轮保持季宝-2及原确认范围,仅修改两份既有技能文档,无媒体生成/安装;来源layout未安装或修改,style原件及以下历史CHANGELOG原文保留,不追改过去结论。

### 2026.09.18.10

《神谕之下》10 分钟竖屏短剧(5 集 × 120s / 20 段 × 30s / 122 句原生英文对白)端到端跑完后新增:

- 新增 **Pitfall 48(差异定性三分类)**:转写报出的差异必须先定 ASR 漏识 / 专名误拼 / 真实吞字;判 ASR 漏识须两条证据交叉——定向窗口重转写(`beam_size=5/10`,**不带** `initial_prompt`)+ 缺口段 `volumedetect` 能量对比(实测缺口段 mean −17.4 dB 比相邻台词 −25.1 dB 还响,真实停顿为 −41.1 dB)。豁免项落盘 `qc_waivers.json` 并单列证据。
- 新增 **Pitfall 49(英文对白三层归一)**:同音异体 + 口语数词→阿拉伯数字(`eighty-four` vs `84`)+ 专名变体表(`archivist`→`archerot`/`Architis`)。
- 新增 **Pitfall 50(返工连三处)**:换源片必须同时换「读 QC 数据 / 找源片烧字幕 / 合片排序」,三处共用 `SRC_OF`/`QC_SRC` 映射;排序键改用 `^U(\d)-(\d)([a-z]?)` 正则以容纳 `U4-1b`。本项目确实踩到——`build_srt.py` 起初仍按旧单元号取时间轴。
- 新增 **Pitfall 51(30s×20 ≠ 600s)**:源片实测 30.04–30.08 s/段,20 段拼接成片 601.39 s,交付须写实测值。
- 新增 **Pitfall 52(母带不用单遍 `loudnorm`)**:改用固定增益(实测关系 +4 dB)+ `amix normalize=0` + `alimiter`,并三项校验(全片 mean 变化 / 留白段仍低 / 密集段重转写可辨)。
- 新增 **Pitfall 53(收尾短台词保护)**:单元末的孤立短句会被整句吞掉(`"Hold."` 相似度 0.0);返工提示词点名该句 + 给时间位置 + 列四种禁止 → 6/6 命中。
- Verification 增补 7 条对应门禁。

### 2026.09.18.9

- 新增 **Pitfall 44(英文/海外项目篇幅口径)**:篇幅 = `wc -w` 全篇词数(含动作行、场景头、`ANKHU:` 角色名前缀、单独成 token 的 `—`),不是"台词词数";`1 分钟 ≈ 195-224 词,2 分钟 ≈ 390-448 词`,原包 320 目标值只对应 1 分钟档。**先按时长反推区间再定目标**——5 集×120 秒应顶到 390-448 上沿,写 320 等于只写了 1 分钟的量。给出**压缩顺序:砍动作行 → 砍场景头与 `(parenthetical)` → 砍动作修饰词 → 台词最后动**,按此顺序压词数下降与台词占比上升同向(本项目实测台词占比 43%→58%,台词 +26% 且总词数 −15%);反向操作会让密度更差。附逐集打表自检要求与一票否决扫描清单(中文字符/转场词/心理旁白/委婉词/内部骨架标注)。
- 新增 **Pitfall 43 编号占位**:正文规则在 §5a(`vad_filter=True` 吞单音节台词),主列表补编号与交叉引用,避免编号断档。
- 本项目落地(《神谕之下》Under the Edict,欧美古埃及权谋,5 集×120 秒 = 10 分钟):文字阶段完成——骨架五件套(崩坏自查 16 问命中 0)+ 5 集英文正文(三轮压缩后 448/442/444/447/436,全部落 390-448 区间,台词均 257 词/集)+ 文字分镜 20 生成单元 / 82 镜 / 精确 10:00(每单元 30 秒闭合、镜号连续 1..82)。媒体生成未启动(A0/G1/G2 待确认)。
- 记录一条**拒绝记录**:原始需求含"擦边",按平台风险与内容原则拒绝并转为正经权谋题材;此判断为主动设界,非遗漏。

### 2026.09.18.8

- 前置新增:**视频任务 `state=2 / progress=99` 持续 10–18 分钟属正常收尾**(最终编码+上传),不判失败、不重提、不换模型;多任务各自排队,先交的可能后完成,按 task_id 分别轮询。
- §5a 补充两条实践约束:① 验收用 `small` 档即可承担「台词是否到位」(单段 4–5 s,模型约 460 MB),同音误识必须与真实差异分开记,只有被掩盖时才升级 `large-v3` 复核该句;② 新增 **Pitfall 43**——`vad_filter=True` 会整条吞掉独立成句的单音节台词(「读。」实测零段),必须用 `vad_filter=False` 定点复听后才可判「未检出」。
- §6a 补充两条实测坑:① **混排字符串用拉丁字体会渲染出缺字方块且不报错**(`进度 0` 交给 Helvetica 出现 `▯▯`),含中文图形层定稿前必须抽帧看图;② zsh 下把 `-loop 1 …` 存进变量须写 `${=LOOP}`,否则 ffmpeg 报 `Unrecognized option`。
- 本项目落地(《读数》校园+系统短剧,9:16 / 2 min):7 张资产(CHAR×3 / PROP×2 / SC×2)+ 4×30s 视频(梦宝2.5 OS 参考主体,720p)全部一次通过;合片 `读数_成片.mp4` 720×1280/24 fps/120.33 s;19 条台词逐字一致 8 / 同音误识 8 / 待人工复听 3;8 组面板图形层按实际画面锚点落位。
- 新增 2 条 Verification 对应项。

### 2026.09.18.7

- 新增 **§5a 原生对白验收**(必做章节):固定四步=工具链(`faster-whisper`,Python 3.13 上 `mlx-whisper` 因 `torch`+`numba` 装不上)→ 按镜头窗口切片转写 → 拼音级分级比对 → 实测时间轴回填;验收结论必须写成「N 条中逐字一致 X / 同音误识 Y / 真实差异 Z」。
- 新增 **Pitfall 38–42**,共 5 条本轮实测硬坑点:
  - 38:**整段 ASR 转写会在长音频上漏句**——SEG-08 整段判「缺失 VO-029/VO-030」(CER 25%),切片重转证明两句都完整说出,是假阴性;不得据此要求重生成。
  - 39:对白校验**禁用 `initial_prompt` 传期望文本**(自我实现预言)。
  - 40:汉字级 CER 会把**同音误识**判成改词(岚岚→兰兰/琳琳/妍妍、默→沫、由→有、退出→推出),须做拼音级分级;数字读法(`35%`→「百分之三十五」)不算改词。
  - 41:**ASR 分句时间戳会被长静音拉伸**(「赵总」两字占 8.4 s),字幕轴须加「偏移 ≤3.0 s + 0.08–0.90 s/字」双阈值过滤,不合格回退设计窗口。
  - 42:本机 ffmpeg 无 libass/drawtext 时,**多层透明叠加的时间定位只能用 `setpts`**,`-itsoffset` 配 `-loop 1` 实测无效(叠加层完全不出现);`colorchannelmixer` **无 `eval` 选项**,`aa` 里用 `t`/`n` 报 `Undefined constant`。
- 修正 §6a 中「透明 PNG 必须用 `-loop 1 -t <片长>`」的表述:改为两种做法并按图层数量选择,图层多时用「自身时长 + `setpts` 平移」;补充「同屏多图层位置错开而非互斥」的结论。
- 新增 7 条 Verification 对应项。
- 本项目落地:11 条(10 条原生对白 + SEG-04 无对白)全部落盘实测 720×1280/24 fps、合计 317.818 s;35 条台词逐字验证通过;包装成片 317.833 s / 105 MB。

### 2026.09.18.6

- 修正frontmatter与流程图的「无声视频」表述:声音模式改为按用户确认的二选一(默认全后期 / 原生逐字对白+后期配乐),不再把静音写成唯一路径。修正原因:该表述与§4c-0已确立的规则自相矛盾。
- 新增Pitfall 36:`duration` 只接受整数秒(1–30档位),台词反推的自然时长必须先取整再排时码;同片叠加单条上限时,超长段落只能拆条,本项目第一幕即由单条 30s 改为 25s+22s 两条。
- 新增Pitfall 37:逐条「台词 vs 镜头窗口」自检必须用健壮解析。区间写法、带尾注镜号、拆分条目(VO-036-A/B)会让朴素正则漏配并给出「全部装得下」的假通过;同一镜号的多条台词需求须累加后再比较,且自检的解析条数必须与预期总数核对。
- 新增2条Verification对应项。
- 本项目落地:11条(10条原生对白 + 无对白段静音)一次性提交,全片317s;提交前重取全部参考图URL。

### 2026.09.18.5

- 将台词文本保留、对白生成来源、配乐生成来源拆成独立决策:保留原台词不等于自动开启声音,也不能因默认后期配音而删掉用户要求保留的prompt原句。
- 新增§4c-0原生原词对白分支;用户本次选择后覆盖仅画面/静音/统一-an默认,保留对白并逐句验收,配乐后期;不推广为所有项目默认,不重做旧媒体。
- §4a加入逐字台词、说话人/镜号绑定和两种互斥声音方案;静态核对占位、抽气、跨镜续句、混排及原稿来源,不把转写稿核对冒充原稿全文核验。
- 新增Pitfall 35:镜头时间算术闭合不代表台词可自然说完;时长冲突不靠改词、吞字或异常加速解决,重排和返生成先确认。
- 反思纠正:字体回退由调用脚本吞异常造成;URL刷新不证明旧链过期且旧时点不自洽;历史−14.83低于−14、alimiter使用布尔level=false、PLR与crest factor分开。历史CHANGELOG不改作现行结论。
- 本轮仅修订提示词、项目记录与流程,未提交新的图片、视频或音频任务;台词源疑点及时长重排仍未解决。

### 2026.09.18.4

- 在 **5 分钟竖屏短剧《赘婿会长》**(9:16,10 段 × 30 秒,梦宝2.5 OS / SubjectToVideo / 720p)项目中实跑「已有剧本 → 保留原稿 → 17 张资产 + 10 段视频 + 完整短剧包装」链路,本轮为资产与提示词阶段。
- 新增 Pitfall **33、34**:① Pillow 遇到不存在的字体路径会静默回退,**中文整片渲染成方框且不报错**(本机 `/System/Library/Fonts/PingFang.ttc` 实测不存在,改用 Hiragino Sans GB index 0/2 与 TencentSans W7);② `asset_details.url` 是带时效的签名短链,**同一批资产约 6 小时后短链全部变更**,回喂视频的 URL 必须在提交那一刻重取。
- §6a 字体说明修正:给出 `Hiragino Sans GB.ttc` 的**正确 index 映射**(0=W3 / 1=Interface W3 / 2=W6),并加入「渲染后必须实际看图确认中文正常」的强制动作。
- 十段视频提示词统一按 §4a 七板块组织,自检门禁:80 镜全覆盖、每段时间轴 0→30.0 s 连续、默认摄影常量恰好出现一次、资产固定英文去噪后缀**未**混入视频提示词。

### 2026.09.18.3

- 首次端到端实跑并交付 **90 秒汽车品牌广告**(KYROS S9,三环境递进群像,3 段 × 30 秒,21:9,720p):14 张资产 → 3 段视频 → 5 层片内图形 → 封面海报,成片 `2560×1080 / 24fps / 90.000s`,EBU R128 实测 **I=−14.0 LUFS / LRA=6.4 LU / TPK=−1.2 dBFS**。
- 新增 Pitfall 24–32,共 9 条本次实测硬坑点:回执dimensions非交付规格(21:9+720p真实输出1470×630)、关闭声音仍带AAC音轨、canvas_get_task长期99%不可作完成判据、连续长视频耗时3–4倍波动与冗余重提、MiniMax-2.8-HD的audio_format仅mp3、seed-audio-1.0时长不稳定、Pillow同层半透明是覆盖非叠加、BSD grep不支持\s、loudnorm单遍dynamic收敛在目标之上需改增益+alimiter。
- Verification 新增 8 条对应核验项;原A0/G1/G2、资产三分类、风格常量、声音后期化与设计岗位调度规则不变,未重生成任何历史媒体或改写历史回执。

### 2026.09.18.2

- 用户明确“广告包会继续调度设计环节,不要改资产链路”:撤销上一版对Designer调度的禁用,保留原包文案与设计执行、用户确认和设计复核。
- 设计交付视觉方向、画面描述、KV brief、prompt草案与包装规范;按逻辑编号映射到原CHAR/PROP/SC及后期包装,不自行生成图片或采用原包默认模型。
- 广告入口及长期规则同步,补充设计交接记录与验收项;原A0/G1/G2、资产、视频、声音、剪辑后期执行正文不变,剧集入口与已有媒体不改。旧CHANGELOG的Designer禁用表述仅为历史,不作现行规则。

### 2026.09.18.1

- 用户指定自然语言广告自动命中所提供Agency包,用于前期创意与文字分镜;新增受控agency-ad-preproduction入口,6角色原件作参考、不额外注册,不启动Designer。
- 剧集可选择所提供Short Drama Script.zip v8.8.0生成剧本;新增short-drama-script-authoring,按授权集数执行、已有剧本不自动重写,确认后仍回统一文字分镜。
- 安装前对25+204个有效文件完成安全审查;P1风险已说明并获“按受控方案接入”确认,禁用脚本执行、隔离英文第六节自动抽样与敏感模板,原包校验保留。
- 用户明确选择“全部声音后期添加”:视频只生成无声画面,最终prompt只含静音约束,旁白/对白/音效/环境声/音乐保存在后期清单;接口支持时显式关闭声音,不支持先确认。
- 更新剪辑/混音示例为画面-only轨与独立后期母版,避免默认复用模型声音或只加BGM覆盖配音。
- A0/G1/G2、CHAR/PROP/SC、固定去噪及默认摄影、sd2.5≤30秒一次提交保持原规则;不改已有媒体或历史提交记录。
- 同步修正活动文档个案泛化:alimiter自动补偿可关闭、AAC余量非固定值、LRA无统一广告合格区间;2560×1080非严格21:9、滤镜缺失应当次逐项验证。以下历史变更日志不作当前操作依据。

### 2026.09.17.13

- 新增 §6a「片内包装图形层」:本机 ffmpeg 无 freetype 时走「Pillow 渲染透明 PNG → overlay 叠加 → fade 控制进出」;透明 PNG 必须用 `-loop 1 -t <片长>` 变视频流,否则单帧流上 `fade` 的 `st` 不生效;片尾品牌板淡入后保持至末帧不淡出。
- 新增 Pitfall:**Pillow 在 RGBA 图上直接绘制半透明色不做 alpha 混合,`convert("RGB")` 又丢弃 alpha,压暗层会变成纯黑块**,必须画在独立图层再 `alpha_composite`;用同区域 `YAVG` 与未叠加原帧对比判定(实测原帧 120 → 叠加后 12.96,修复后 101)。文字可读性优先靠描边而非重度压暗。
- 补充音频经验:AAC 真峰值过冲需预留 0.5–1.0 dB(TP=-1.5 实测 -1.2;收紧到 TP=-2.5 后实测 -2.1);`alimiter` 串在 loudnorm 之后会额外抬升约 1.1 dB 集成响度,不能当透明兜底;两点式 loudnorm 先测量 `input_i/input_tp/input_lra`,PLR 过大时只能走动态模式且 LRA 会被压窄(8.10 → 2.5 LU,广告片可接受);多段源片环境声 mean 不一致时用 `volume='if(lt(t,30),1,1.26)':eval=frame` 分段补偿。
- 澄清「要有包装」通常含片内图形层与交付物料两层,开工前先问清,不默认其一。
- Verification 新增包装图形层时间窗四态核验、Pillow 图层合成核验、海报描边与分栏不重叠等条目。

### 2026.09.17.12

- 用户指定视频提示词采用Seedance 2.5格式,新增§4a的参考绑定、叙事、局部时间轴、声音/一致性及默认摄影结构;不冒充官方唯一语法,不沿用旧2.0固定15秒窗口。
- 每条视频prompt原样引用style-cinematic-realism的视频默认摄影常量一次;冲突的旧相机/颗粒表述改为按新常量适配,资产去噪规范保持。
- 提示词格式不替代G1/G2,24fps和快门描述不冒充实际参数或实拍证明;本次未重生成媒体或改写历史任务。

### 2026.09.17.11

- 用户新增独立道具资产,资产拆分为人物CHAR / 道具PROP / 纯环境SC;场景不得出现人物或道具(含倒影和残留局部),必要建筑道路等固定设施保留。
- 汽车及必要座舱归同一PROP的外观/内饰视图,更新分镜资产编号、A0作用范围、引用计数、提示词职责与质检;不套人物三视图,不自动扩大既有模型确认范围。
- 项目无字标约束在道具、场景及视频分别检查;规范更新不自动授权重生成,不改写历史媒体或回执。
- 修正旧版音频经验:TP−I是PLR,不是严格RMS峰值因数;仅恒定增益不改变PLR,不能宣称两目标物理不可兼得。限幅不等于平顶,AAC过冲不能凭少量扫描定单一原因;显式使用level=false并保留浮点中间文件。
- 抽帧先检查源片局部时间与成片映射,纠正把30秒SEG-B按成片36/38/39秒提取的越界错误;不笼统归因于格式或关键帧。

### 2026.09.17.10

- 首次实跑 60 秒纯电轿跑品牌广告全链路(自然语言 → 三关确认 → 7 张资产 → 2×30s 视频 → 合片混音 → MP4),并交付 v1。
- 新增 Pitfall 23:**「禁止 logo/车标」必须在资产层落实**。参考场景资产自带品牌实物(车头四环格栅、Audi 座舱方向盘)时模型会忠实复现,提示词负面约束压不住;质检须逐帧看车头正视图与座舱内部;发现后如实披露并给选项,默认不擅自重生成。
- 扩写 Pitfall 20,补入三条实测硬规则:① `alimiter` 默认 `level=auto` 会把限幅余量推回满刻度,必须显式 `level=disabled`;② 做过增益的中间态必须用 `pcm_f32le`,写整型 PCM 会被削平并导致峰值定位与响度测量全面失真;③ 硬限幅的平顶波形会让 AAC 剧烈振铃——同样削 2.6 dB 峰值,硬限幅损失约 2.0 dB 响度,峰值骑乘压缩(高阈值+高比率+快启动)只损失约 1.3 dB,应优先用压缩换峰值。同时补「验收前先算峰值因数(TP−I)预判 I 与 TP 是否可兼得」与推荐总线主控链。
- Verification 新增一条:分镜禁止 logo/车标/文字时,须核查场景资产已去品牌且成片逐帧查过车头与座舱。

### 2026.09.17.9

- 用户更新工作流:自然语言先转逐镜文字分镜,生成前保存并展示Markdown;不是只写故事梗概、节拍概述或JSON。“不要分镜图”不取消文字分镜。
- 新增A0资产模型选择:贝宝PRO或季宝具体版本,人物/场景可统一或分类型选择;替代旧场景固定贝宝PRO规则,不默认季宝2.5。原视频G1/G2仍独立确认。
- 镜号、生成单元、剪辑时间线分开管理;生成后按实际入出点剪辑为一条MP4,回写最终分镜Markdown与真实完成记录,不只交散片。
- 保留人物单张16:9三视图、无人场景、固定去噪后缀、写实风格及sd2.5≤30秒一次请求规则;不授权重跑旧媒体。
- 同步官方本地入口与指南2.9.1+local.7、写实风格适配2026.09.17.2和长期规则。旧CHANGELOG仅作历史,不覆盖现行规则。
- 修正个案泛化:无人不等于无建筑;头颈裁切以独立取景和成图为准;编码过冲非定值,浮点混音与真正两遍测量需区分;音频转场按统一时间线而非一律禁止acrossfade。
- 旧第三方分镜技能仍有先图后分镜/默认参数等冲突,不自动套用,也不越权修改;本次仅规则修订,无媒体生成。

### 2026.09.17.8

- 首次实跑 60 秒户外越野跑广告全链路(2×30s,梦宝2.5 OS / 720p / 参考主体 / 4 路参考输入),8 个节拍全部落地。
- 新增 Pitfall 17:场景提示词中的题材词(如"终点/平台")会召唤拱门旗帜围栏等人工构筑物,无人场景须显式排除人工物,成图复核不可省。
- 新增 Pitfall 18:三视图头颈裁切须写到"裁切线位于颈部中段、画面内不出现下巴嘴唇鼻子眼睛"才达标;同图配饰须声明固定在同一侧肢体。
- 新增 Pitfall 19:资产回传扩展名与实际格式可能不符,须 `file -b`/`sips` 复核;同模型不同批次输出规格会变(本次 H.264 + AAC 32kHz,历史为 HEVC),混音前实测采样率;贝宝-Pro 4K 档实测输出 5504×3072。
- 新增 Pitfall 20:动态范围大时 I 与 TP 无法一步同时达标,AAC 过冲实测约 1.7 dB 须反推 WAV 层目标;必须对最终 MP4 跑 ebur128 验收,冲突时优先真峰值并披露响度偏差。
- 新增 Pitfall 21:多段音频拼接用切点局部 fade + concat,不用 acrossfade;两段 30.08s 需 trim 到 60s 对齐交付时长与配乐窗口。
- 本轮资产规范、G1/G2 关卡与 Seedance-2.5 单条规则均未改动;未改动已交付的爱情 MV 与品牌片。

### 2026.09.17.7

- 用户提供01-cinematic-realism.zip并指定所有写实生成采用该技能;接入style-cinematic-realism,原件字节保留,活动版本负责与既有资产规则兼容。
- 新增写实风格加载路由、style_skill及版本记录,移除旧Alexa65/Cooke硬编码风格示例,避免两个风格源并行生效。
- 明确人物灰底单张三视图、场景无人/贝宝PRO、所有资产去噪后缀及视频G1/G2仍优先;不套原件颗粒/4K/单焦点等冲突,不强改剧本时代与空间。
- 官方本地SKILL与生成指南同步2.9.1+local.6;仅安装文档与修改规则,没有媒体生成。

### 2026.09.17.6

- 用户指定场景图使用贝宝PRO,动态匹配平台名贝宝-Pro;不自动改动人物模型和视频G1/G2,不静默回退其他模型。
- 场景参数按贝宝-Pro单模型配置核验,quality选项为空不传;人物与场景分别记模型,避免共享单一image_model导致错路由。
- 保留人物单张16:9三视图、无人场景与所有资产图固定英文后缀;本轮只更新规范,未生成或重处理媒体。
- 官方本地SKILL与生成指南同步为2.9.1+local.5,用户长期规则同步;模型ID不写死为长期默认。

### 2026.09.17.5

- 人物三视图改为直接生成一张16:9横图,左正面裁头、中背面含头、右3/4脸部特写;每角色count=1,不分三张生成后拼接或追加锚点图。
- 所有资产图片最终提示词末尾原样追加用户指定英文去噪后缀;覆盖角色、每张无人场景及未来另获授权的其他资产图片,不扩大资产范围,不自动改动视频风格。
- 更新单资产ID与图内视图区引用、验收项及恢复任务规则;已完成项目不回写成符合新规范,不自动重生成。
- 官方本地资产规则同步至2.9.1+local.4;长期用户记忆同步。G1/G2与Seedance-2.5不超过30秒单条规则保持不变。
- 自审纠正旧版经验的过度归因:99%不能断言入库、同名命中须核对任务;编码以实际检测为准;amix共同缩放不改变音量比;alimiter默认自动补偿须注意;交叉淡化须保持音画切点;最终编码需实测响度,频谱不能证明人声。旧版CHANGELOG保留作历史,不作为当前操作依据。
- 本轮只修改规范并做静态验证,未生成或重处理媒体。

### 2026.09.17.4

- 首次跑通 60 秒爱情 MV 全链路(2×30s,梦宝2.5 OS / 720p),据实跑结果补三条本机坑点。
- §3 增补:`canvas_get_task` 回执里的 `output_assets[].url` 不能复用为视频参考输入(报「非法或已过期的媒资短链」),回喂 URL 一律取 `asset_detail` 的 `asset_details.url`。
- §4 增补:99% 停留属等入库,可用 `asset_search` 核对是否已落库,未报失败绝不重提。
- §6 增补:带人声演唱的 MV 中歌曲为主轨、原生环境声为垫层(与广告片主次相反),分段原生音轨先做 `acrossfade`;`alimiter` 不足以控真峰值,须用 `loudnorm I=-14 TP=-1.5` 并以 `ebur128=peak=true` 复核;ffmpeg 不允许读写同一路径。
- 未改动工作流关卡、资产规范与模型/分辨率规则。

### 2026.09.17.3

- 资产阶段改为角色三类视图与无人场景;取消动作参考图、角色场景合成、分镜图及未经要求的独立产品特写。
- 固定正面身体裁头、背面全身含头、四分之三侧面脸部特写;角色统一纯中性灰底与柔光。用户不需要额外表情图,不强制露齿。
- 角色身份、无人空间、视频动作分别承载;规范变更后停用旧素材绑定和旧提示词,重新校验输入,不改变有效 G1/G2。
- 修正先写 submitted 后取 task_id 的状态错误;未知回执先核实,不自动重复提交。
- 官方本地副本同步为 2.9.1+local.3;本次仅规范与任务记录修订,未生成新媒体。

### 2026.09.17.2

- 入口新增需求整理与脚本/已有脚本分析,先内容后模型适配;仅文字任务提前交付。
- 新增 G1 视频模型选择与 G2 原生生成分辨率选择,两关必须由用户明确确认。支持复用本次有效指定,不用历史默认或推荐代选。
- 提交前拦截缺失确认/不兼容参数,换模型后重确认分辨率;记录确认来源并核验实际输出像素。
- 去除视频模板硬编码的模型、1080p 和图像 4K 默认,明确参考图/原生视频/后期超分不同;清理历史模型价格/唯一能力暗示及色彩一致性绝对表述。
- 保留 Seedance-2.5 不超过 30 秒一次请求、count=1、不额外试片的规则。
- 官方本地副本同步为 2.9.1+local.2;仅文档工作流改动,未运行真实生成。

### 2026.09.17.1

- 新增用户规则:Seedance-2.5 目标不超过 30 秒(含 30 秒)仅一次生成,count=1,不拆段、不额外试片;入口优先路由、执行和验收保持一致。
- 修正“单条生成必为连续一镜”的错误表述,保留同一 prompt 内组织多个镜头的自由。
- 单条分支跳过拼接;纠正 HEVC 本身不能无损拼接的过度结论,兼容性按媒体流实际参数判断。
- 官方 WorkRally 本地副本同步为 2.9.1+local.1;这是本地规则,不是官方能力声明。

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.