FilmForge 帧质检 是做什么的?
成片中没有一幅画是靠缩略图通过的。每幅画作须以全尺寸对照其设定表,通过工具测量、评分,并给出三种裁决之一。裁决总会说明下一步操作及其成本:通过(免费)、在代码中修复(免费,附带精确调用)、或重绘(2.75 积分,附带修正后的提示)。
路径:下面的 scripts/、templates/ 和 config/ 是本技能内的文件夹(加载时显示的基准目录),由 ./install.sh 放置。如果从仓库克隆工作,则它们位于仓库根目录下的 tools/、templates/ 和 config/。
流程
- 接触页 批次,以便将其视为序列(相邻画作能否剪辑在一起?):
python3 scripts/contact_sheet.py build art/film --shotlist shotlist.yaml --out out/contact_sheet.jpg - 全视图 每幅画作(读取图像本身,而非缩略图)。
- 100% 局部放大 关键区域:面部、手部、比例关键主体、任何小物体。
python3 scripts/contact_sheet.py zoom art/film/s03_x.png --out-dir out/zoom --grid 2x2或--box x0,y0,x1,y1。 图像阅读器会缩小大图像;局部放大显示真实像素。 - 测量 色彩规则、调色板和曝光:
python3 scripts/ledger.py palette continuity.yaml --paintings art/film --shotlist shotlist.yaml它会报告每幅画作的调色板、与场景色彩脚本的色差(delta E)、每个禁止色彩规则在画面中的占比,以及同一场景相邻镜头之间的曝光跳变(以档为单位)。 - 评分 准则(见下文):九项标准,0 到 2 分。
- 裁决 按照以下规则。
- 写入
qa.yaml中的条目(格式如下),然后用--qa qa.yaml重建接触页以显示徽章。 - 报告:裁决计数、每项修复和重绘各用一行说明、重绘所需的积分。
评分准则(templates/qa-rubric.md 包含评分锚点)
| 准则 | 检查内容 |
|---|---|
| 身份 | 面部与服装标记与设定表对比 |
| 解剖 | 焦点主体上的手、眼、肢体 |
| 比例 | 每项比例锁定和计数(在局部放大图中测量像素) |
| 风格 | 视觉锁定:媒介、线条、色彩、纹理 |
| 色彩 | 色彩脚本和禁止规则(来自 ledger.py palette)以及与相邻镜头的曝光 |
| 连续性 | 台账为该镜头列出的每个道具和状态,且不超出其范围 |
| 故事 | 节拍在两秒内可读 |
| 构图 | 划定的构图,视线落在主体上,文字区域平静 |
| 整洁 | 无手绘文字、水印、污迹或多余人物 |
测量比例: 在局部放大图中,测量主体及其参照物的像素,并与比例锁定值比较。引擎示例:蛾在 60 像素手指上占 20 像素,而比例锁定要求一整只张开的手(该构图下 120 像素或以上):其尺寸的六分之一,比例 0 分,重绘。
裁决规则
- 通过:无任何准则得 0 分,总分 15/18 或以上,无测量违规。
- 修复:每项故障都有代码修复(下表),且身份、比例或故事准则未得 0 分。
- 重绘:身份、比例或故事得 0 分;焦点主体解剖得 0 分;风格得 0 分;或存在三项或以上故障。
在积分消耗前通过代码修复(painted-film-pipeline 模块)
| 故障 | 模块和调用 |
|---|---|
| 某个物体色相错误(例如围巾让配角被误认为主角) | grade.py IN OUT recolor:x0:y0:x1:y1:lo:hi:new_hue:sat |
| 禁止色彩泄漏(例如蓝色在结局前出现) | grade.py IN OUT blue:0.3(将该色带拉向银色;keep=0.3)或使用 recolor 改为允许的色相 |
| 空白区域出现多余人物 | 从偏移的干净区域修补(fix_s22.py 模式) |
| 不佳构图、切线、头部空间不当 | 镜头的 crop: [x0, y0, x1, y1](以源像素为单位) |
| 曝光或对比度与相邻镜头不匹配 | 自动处理:匹配校色将每个图版的 0.5% 和 99.5% 百分位亮度映射到共同目标 |
| 细节模糊 | 自动处理:仅对边缘进行 Lanczos 4K 放大和锐化 |
| 画面缺乏活力 | 通过代码添加运动(forge-motion),绝不重绘 |
每项修复会写入一个新文件(_g),重新测量,只有当测量通过时才会标记 done: true。
详情和参数含义:参见 references/code-fixes.md。
重绘:诊断,然后修正
将原因命名为提示槽位或参考项:“比例锁定从插槽 4 中缺失”、“设定表顺序错误”、“视觉描述被转述”。完整写出修正后的提示,检查预算,然后交给 forge-painter。如果原因会影响其他镜头(例如台账中缺少锁定),请说明:这是引擎变更,而非一次重绘。
qa.yaml 条目格式
- shot: s02
file: art/film/s02_last_match.png
checked: [full frame, zoom 2x2 at 100%, ledger palette]
scores: {identity: 1, anatomy: 2, scale: 2, style: 2, colour: 0, continuity: 2, story: 2, composition: 2, clean: 2}
total: 15
max: 18
measured: {no_gold_pct: 4.4, script_dE: 5}
verdict: fix
notes: 火柴的金色光辉覆盖了 4.4% 的画面(规则在 s05 之前允许 2%),并使兜帽染色。
fix:
problem: 金色光辉,色相 38 至 58
module: painted-film-pipeline pipeline/grade.py (recolor)
call: python grade.py s02_last_match.png s02_last_match_g.png recolor:250:250:700:650:38:58:22:0.8
params: {box: [250, 250, 700, 650], hue_band: [38, 58], new_hue: 22, sat: 0.8}
why_not_repaint: 仅一个框内的单个色带
verify: ledger.py palette 显示 _g 文件上 no-gold 低于 2.0%;兜帽显示 100% 红色
done: false
重绘条目应包含 repaint: {cause, prompt_changes, credits, corrected_prompt} 而不是 fix。
真实制作中的实际发现
- 比例(重绘): 五帧 Simorgh 画面中,戴胜鸟在女孩旁边画得太小(s21、s25、s33、s36、s39)。代码无法令人信服地放大已绘制的对象;这些画面被安排以其真实大小重绘,原因(提示或设定表中缺少比例比)成为了一个引擎规则。
- 色彩(修复): 蓝色在结局前渗入画面;通过将色带拉向银色在代码中修复。
- 通过色彩识别身份(修复): 配角的围巾与主角颜色相同,导致他被误认为主角;通过在一个框内进行色相重新着色将其改变。
- 多余人物(修复): 一帧安静画面中多出的绘制人物通过从偏移的干净区域进行修补被移除。
- 图画书的门: 面部与参考匹配;正确的视觉风格和色彩脚本颜色;文字区域非常平静;页面的母题存在;它让你感受到它所在文本行的情绪。一项失败,则重做。
绝不要
- 仅凭缩略图或接触页就通过。
- 重绘代码能修复的内容,或通过代码“修复”会破坏故事的内容。
- 放过一幅测量规则失败的作品,即使它看起来没问题。
门控清单(针对批次)
- 每幅画作全尺寸读取,并对面部、手部和比例关键主体进行局部放大
-
ledger.py palette已运行;每项错误都在裁决中解释 - 每幅画作在 qa.yaml 中都有包含分数、裁决和下一步操作的条目
- 接触页已重建并显示徽章且已检查
参考
references/code-fixes.md:每项修复的参数、如何选择以及如何验证