FilmForge フレーム QA
サムネイルだけでフィルムに採用されることはありません。すべての絵画はフルサイズでシートと照合され、ツールで測定され、スコア付けされ、次の3つの判定のいずれかが下されます。判定は常に次に何が起こり、そのコストがいくらかを示します:承認(無料)、コード修正(無料、正確な呼び出し付き)、再描画(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これにより、各絵画のパレット、シーンのカラースクリプトからの距離(デルタE)、各禁止色ルールがフレームに占める割合、および同一シーン内の隣接フレーム間の露出ジャンプ(ストップ単位)が報告されます。 - スコアリング ルーブリック(下記参照):9つの基準、0~2点。
- 判定 下記のルールに従って判定。
- 書き込み
qa.yamlにエントリを記述(下記形式)、その後、バッジ表示のために--qa qa.yamlを付けてコンタクトシートを再構築。 - 報告:判定の件数、各修正と再描画を1行で、再描画にかかるクレジット数。
ルーブリック(templates/qa-rubric.md にスコア基準あり)
| 基準 | 確認内容 |
|---|---|
| identity | シートとの比較による顔と衣装のマーカー |
| anatomy | 焦点被写体の手、目、手足 |
| scale | すべてのスケールロックとカウント(クロップ内のピクセルを測定) |
| style | ルックロック:媒体、線、色、テクスチャ |
| colour | カラースクリプトと禁止ルール(ledger.py palette から)、および隣接フレームとの露出比較 |
| continuity | 台帳にこのショット用にリストされているすべての小道具と状態、およびその範囲外のものがないこと |
| story | ビートが2秒で読み取れること |
| composition | リスト通りのフレーミング、視線が被写体に留まり、テキスト領域が静かであること |
| clean | 描かれたテキスト、透かし、スミア、余分な人物がないこと |
スケールの測定:クロップ内で、被写体とそのリファレンスをピクセル単位で測定し、スケールロックと比率を比較します。エンジンの例:蛾の大きさが指60pxに対して20pxで、スケールロックでは開いた手全体(そのフレーミングで120px以上)とされている場合:サイズは6分の1、スケール0、再描画。
判定ルール
- 承認:どの基準も0点でなく、合計が18点中15点以上、かつ測定違反なし。
- 修正:すべての欠点にコード修正があり(下表)、identity、scale、storyのいずれも0点でないこと。
- 再描画:identity、scale、storyのいずれかが0点;焦点被写体のanatomyが0点;styleが0点;または3つ以上の欠点がある場合。
クレジット消費前のコード修正(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に渡します。原因が他のショットにも影響する場合(台帳からロックが欠落しているなど)、その旨を伝えます:それはエンジンの変更であり、1回の再描画ではありません。
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: A gold glow from the match covers 4.4% of the frame (the rule allows 2% before s05) and tints the hood.
fix:
problem: gold glow, hue 38 to 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: one hue band in one box
verify: ledger.py palette shows no-gold under 2.0% on the _g file; the hood reads red at 100%
done: false
再描画エントリには、fix の代わりに repaint: {cause, prompt_changes, credits, corrected_prompt} が含まれます。
実際の作品からの作業実績
- スケール(再描画):5つのSimorghフレームで、ヤツガシラが少女の隣で小さすぎました(s21、s25、s33、s36、s39)。コードで描かれた被写体を説得力を持って拡大することはできません。実際のサイズで再描画するようにスケジュールされ、原因(プロンプトやシートにスケール比がないこと)はエンジンのルールとなりました。
- 色(修正):エンディング前に青がフレームに紛れ込みました。帯域をシルバーに引き寄せる修正でコード内で修正されました。
- 色による識別(修正):サイドキャラクターのスカーフが主人公の色と一致していたため、主人公として読めてしまいました。ボックス内の色相帯域の recolour で修正されました。
- 余分な人物(修正):静かなフレームに描かれた余分な人物が、ずらしたクリーン領域からのパッチで除去されました。
- 絵本の門:顔はリファレンスと一致。正しいルックとカラースクリプトの色。テキスト領域は非常に静か。ページのモチーフが存在。それが配置されているテキスト行の雰囲気を感じさせる。1つの失敗はやり直し。
絶対にしないこと
- サムネイルやコンタクトシートだけで承認しない。
- コードで修正できるものを再描画しない、またはストーリーを間違えるものをコードで「修正」しない。
- 測定ルールに違反している絵画を、見た目が良くても通過させない。
ゲートチェックリスト(バッチ全体)
- すべての絵画をフルサイズで読み込み、顔、手、スケールが重要な被写体のクロップを含む
-
ledger.py paletteを実行し、すべてのエラーを判定で説明 - すべての絵画にスコア、判定、次のアクションを含む qa.yaml エントリがある
- バッジ付きでコンタクトシートを再構築し、確認済み
参考文献
references/code-fixes.md:各修正のパラメータ、その選び方、検証方法