ケースファイル解説スキル
調査を証拠として語る:誰が、どこで、いつ、記録に何と書いてあるか。赤いアクセントは常に「これが証拠である」ことを示します。緊張感は、穏やかな抑制から生まれます。誇張した言葉はなく、高速カットもありません。代わりに、決して止まらないカメラ、決して無音にならないスコア、そしてナレーターの言葉にぴたりと合わせて提示される事実があります。
このスキルは、cstack animated-videoスキル(まずはそちらを読んでください)の内部で実行し、その承認停止、フル品質出力、4つの独立したQA状態(技術的、事実的正確性、クリエイティブ、オーナー承認)を維持してください。このスキルは、アートディレクション、ショット構成、オーディオレシピ、実装キットを追加します。
- コピー元となる実例:
template/(30秒のxzバックドアデモ:src/kit/casefile.tsx= キット、src/scenes/*= ショットタイプごとのシーン、audio/score.py= スコア)。スクリーンショット:../../docs/case-file-explainer/。
毎回新しいストーリーに合わせてデザインしてください。xzフィルムのショットではなく、メソッドとキットをコピーしてください。
明確さが最優先です。 2作目のケースファイル(PHPリモートコード実行のストーリー)は見た目は洗練されていましたが、理解するのが困難でした。仕組みを説明する動画については、decode-explainerスキル(概念の段階的提示、最初にトイモデル、画面上の凡例、1画面1アイデア、専門用語は定義してから使用、タイプスケール44px以上)で計画し、このスキルは証拠資料室のルックと調査の流れにのみ使用してください。
1. ストーリー:調査の背骨
調査ストーリーは、利害関係が現実であり、すべての主張に情報源がある場合にのみ機能します。
- フック(0〜3秒): 異常を数字付きの事実として述べます(「彼のログインは半秒遅かった」)。フレーム0はカバー:セリフ見出しと証拠オブジェクト。決して黒にしません。
- トレース(中盤): 場所と人を通じて証拠をたどります。1ビートあたり2〜4秒:日付スタンプ、人物カード、地図上のルート、見つかったオブジェクト。
- リビール: ドロップアウトの瞬間。音楽が消え、一つの赤いものが燃え上がります。
- 記録: 実際の一次情報源(メール、証言、レポート)を引用した証言カード。著者と日付を下に、脚注番号を添えます。引用を決して捏造せず、再構成は「再構成」と明記します。
- エンディング: フックを評決として言い直すセリフタイトル(「半秒。」)、赤い罫線、ケース番号。ホールドした後、意図的にフェードアウトします。クリエイターが望む場合のみ、音声のコメントCTAを追加します。CTAがある場合は、完全に音声で読み上げます。
- 短尺: 30〜45秒、4〜6ショット。長尺(YouTube): 「第I章」セリフタイトルカードで章立てします。
- すべての事実を、画面に表示する前に
NOTES.mdに情報源と検証状態を記録します。事実がフィルムのゲートになります。
教育的バリエーション(セキュリティインシデント):この形式のデフォルト
教育的にします:人々がそれが何であるか、なぜ起こったか、どう身を守るかを理解できるようにします。背骨(約55〜60秒、6ショット):
- カバー/フック: 日付スタンプ、セリフのインシデント名、深刻度スタンプ、CVEタグ。すべてフレーム0で表示。
- 規模: なぜ重要なのか(ウェブのどの程度、または何人のユーザーに影響するか)、情報源のある統計と脚注を添えて。
- 何か: バグが存在する場所のパイプライン図(インターネット、ウェブサーバー、エンジン、アプリ)。リクエストは赤い経路を伝って移動し、壊れた段階が赤くなり、結果が表示されます(例:見知らぬ人のシェルプロンプト)。専門用語を画面上で定義します(「シェル = サーバー上のコマンドライン」)。
- なぜ起こったか: 白い粘土の3Dメタファーによる根本原因(ブロックとしてのメモリ:半分構築されたスタック、生存ポインタを持つ解放されたゴーストブロック)、および3行の無害なコードカード(
malloc/free)。 - タイムライン + 現実確認: 日付付きピン(最も古い影響を受けたコード、最初の攻撃、リーク、パッチ)、その後、リスクを適切な大きさに保つ一次情報源からの証言カード。
- 保護: 「確認方法」ターミナル(
php -vと修正バージョン)、VOに合わせた番号付きチェックリスト、エッジケースのフッター(EOLバージョン、暫定対策としてのWAF)。 - 評決 + CTA: 2行のセリフ評決と保存/フォローCTA。
教育的配慮:攻撃クラスを概念的に説明します。ペイロード、リクエストボディ、オフセット、ステップバイステップの悪用方法は決して表示しません。修正方法とその確認方法を記述します。
2. ルック(アートバイブル)
| 要素 | ルール |
|---|---|
| グラウンド | 木炭色 #0d0d0e、ソフトな放射状のリフト付き。常にビネットと微細グレインをオン |
| アクセント | 一つの赤 #ff2d2a、常にグロー(トリプルテキストシャドウ + ブルーム)。赤 = 証拠:ルート、異常、容疑者、キーワード。それ以外は色をつけない |
| コンテンツ | モノクロ:オフホワイト #f2f0ea、薄暗い #8d8b86。アーカイブ写真は白黒 |
| タイポグラフィ | セリフタイトル(Source Serif 4 700)。タイプライター調ボディ/ラベル(Courier Prime 700)。データ/日付スタンプ(IBM Plex Mono 700、文字間隔を広げた大文字) |
| 写真カード | 白黒写真、白い縁(わずかに破れたエッジ)、白いグロー。役割行を大文字モノで。黒いネームタグ(破れた白い縁)。人物不明 = ぼかしたカードに「既知の写真はありません」 |
| システムマップ | 細いグレーの線の暗い道路地図、数本の太い幹線道路と曲線高速道路、巨大な文字間隔セリフの地区透かし(「D E B I A N」)。経路は発光する赤で描かれ、白いヘッド。ピンはポインター付きネームタグ |
| ジオラマ | 白い粘土3Dモデル(three.js):明るいグレーの地面の上のマットな白いブロック、ソフトシャドウ、フォグ。唯一の赤いオブジェクトは、発火時に周囲を照らす |
| 引用カード | 大きなセリフ引用符、白い罫線、モノでタイプされたテキスト、キーワードは赤、情報源行と日付を下に |
| 日付スタンプ | 赤く光る時計 + 「2024年3月29日金曜日」 + 一行のコンテキスト |
| 脚注 | 情報源のある主張が画面上にあるときは常に、右上に薄暗いモノで [n] |
9:16のセーフゾーン:コンテンツは x 60〜960、y 240〜1440 に収めます。キャプションは y 約1470に、モノのダークタグにキーワードを赤で表示します。顔の上に配置しないでください。
3. モーション
- ハードカットは最小限に。 このテイストの長編ドキュメンタリーでは、10分間に数回しかカットしません。ショットはコンテンツを通じてリンクします:赤いスタンプにダイブすると、それが地図の開始ノードになります。地図の赤いノードにダイブすると、それが赤い3Dブロックになります。
- カメラは決して止まらない: ゆっくりとした押し込み(ショットあたり5〜8%)、引きでコンテキストを明らかにする、ルートに沿ったパン。すべての動きにイーズイン/アウト。ズームは対数空間で。
- カードは減衰バネでポップ(スケール0.82から1)。タグは18px落下して所定の位置に。テキストはタイプオン。
- 赤いルートはナレーターのペースで描画されます:ヘッドは各ノードに該当する単語のタイミングで到達します。
- 1.5〜3秒ごとに何かを変更し、各ヒットをその単語の2フレーム以内に着地させます。
4. オーディオレシピ
- スコアは決して止まらない。 最初の5分間は-45dB以下の無音はありません。短調のダークアンビエントドローン/パッド。音楽のみのコールドオープン(長尺では約12秒、Reelsでは約0秒)。
- ナレーションが最上位、音楽はその約10dB下。 VOエンベロープからダッキング(サイドチェイン風)。VOの0.6秒以上の隙間で音楽を盛り上げ、リビールワードの直前にドロップアウト。
- 長尺目標:約-16 LUFS統合、LRA約6 LU。穏やかで密、ダイナミックではない。Reelsは -14 LUFS / -1.5 dBTP で納品。
- SFXはまばらで物理的なもの: タイプされるテキストのタイピング音、カードやタグが着地するときの柔らかなドスッという音、ルート描画中のデータチャター、リビールでのサブドロップ、評決時のガラスのピンやチャイム。
- 声: 穏やかで低く、落ち着いたナレーター。短い平叙文、事実の後に間を置く。クリエイター自身の録音を最優先。音声クローンは費用承認が必要。TTS代用はドラフトのみで、ラベルを付ける必要があります。
- 例の
audio/score.pyは、ワードタイミングからスコア全体とミックスを構築します。
5. パイプライン
- 事実と情報源を
NOTES.mdに記録。スクリプトとビートシートを承認取得(animated-video 停止1)。 - VO、次に
words.json(WhisperまたはTTSのワード境界)。audio/fix_words.pyでトークンの分割を修正。 src/lib.tsでcue()からアクトを定義。同じキューを使用してaudio/score.pyでスコアを構築。src/kit/casefile.tsxとシーンパターンをコピー。snap.shでキーフレームボードをレンダリング(停止2:スタイルフレーム/キーフレーム)。--scale=1.3333333333333333(1440x2560)でレンダリング後、2パスのloudnormで-14 LUFS、H.264 High、CRF 14、maxrate 24M、yuv420p limited range、BT.709タグ、faststart。- QA:フルデコード、blackdetect、ラウドネス、コンタクトシート、すべてのトランジション周辺の高密度フレーム、VOに対するWhisper。4つのQA状態を個別にレポート。
最初の制作で見つかった問題点
- スクリプト全体のedge-tts実行はペースが遅い(180ワードで88秒)。
scripts/tts_lines.py(1行ごとに1回のTTS呼び出し、制御されたギャップ、「|」でセクション開始)を使用し、その後scripts/squeeze.py(0.45秒以上のポーズを短縮し、ワードタイミングを再マッピング):68.6秒が58.5秒に。 cue("Before")、cue("PHP")などの繰り返し単語はエラーを起こします。2語のフレーズを使用するか、nthを渡します。- 3Dワイドショットで、ブロックが1行だけだとフレームが空になります。奥行きのために後方の行(z = -1.6、-3.2、-4.8)を追加します。
- 次のビートの約6フレーム前まで、バグのスロットにカメラを留めます。早く動かすと、被写体が文の途中でフレームから押し出されます。
- オーバーレイカードは少なくとも1.5秒間画面に表示する必要があります。最後の単語ではなく、前の単語で開始します。
- 共有ブラウザを介して、ナビゲーションは現在のタブ(ユーザーの自分のタブを含む)に移動する可能性があります。最初に自分のタブを選択してください。
- edge-ttsは「March 2024」を一つのワード境界として返します。
chunk()の前に分割するか、キャプションがエラーになります。 cue("It")などの繰り返し単語にはnthか、より長いフレーズ(cue("It had"))が必要です。- 発光する赤いキューブにブルームフィニッシュを加えると、オレンジ/黄色に飛びます。emissiveを0.5以下、ベースカラーを暗く(
#b8120c)、シーンブルームを0.5に保ちます。 - ポートレート3Dでは、タワーはカードバンド(y 300〜750)とキャプション(y 1470)の間に収まる必要があります。6単位の高さのモデルには、カメラを約23単位後ろに引きます。
- ターミナルのHTMLズームは約1.12倍を超えるとエッジを切り取ります。隅ではなく、読み取り部分にズームします。
- マップノードのラベルが約300pxを超えると、フレームからはみ出します。ノードの下に中央揃えします。