クリーンサムネイル
たった一つのルール
本物の画像が雰囲気を運び、タイポグラフィは静かに添える。 すべてのサムネイルは、固定された役割を持ついくつかの実画像と、2つのテキスト要素のみで構成されます。輪郭線、光彩、矢印、ステッカー、色被せ、画像生成モデルで作成されたシーンは一切使用しません。
画像の役割
ユーザーの発言や提示された画像から、各画像の役割を決定します。役割は以下の4つだけです。
| 役割 | フラグ | 使用用途 |
|---|---|---|
| 背景 | the capture (位置指定) | ほぼすべて:1フレーム、写真、キーアート |
| パネル | --panel A --panel B (2-3枚), --panel-label 各パネル | 比較:バージョン、設定、ビフォー/アフター |
| 被写体 | --subject cutout.png (繰り返し可能) | 背景の前に配置する人物、キャラクター、製品 |
| インセット | --inset img --inset-box x0,y0,x1,y1 | 背景内部に表示する画像:モニター上のゲーム、電話のクリップ |
パネルは背景を置き換えます。被写体とインセットは背景の上に重なります。被写体はテキストとは反対側に配置し、背後にある写真とマッチさせます(色かぶり、トーン、シャープネス、粒状感)。背景は被写体の背後でソフトに処理されます(--push、デフォルト0.5)。被写体ファイルには透明な背景が必要です。透明背景がない場合、rembgがインストールされていればスクリプトがそれを使用し、そうでなければカットアウトを要求します。インセットボックスは背景画像に対する割合で指定します。背景を見て、画面やフレームの位置を推定してください。
サムネイルか、投稿か?
これを最初に決定します。これにより、ユーザーの言葉の扱いが変わります。
- サムネイル: 画像は動画のタイトル(YouTube動画、リール、ショートのカバー)の隣に配置されます。タイトルがメッセージを伝えるため、画像には数語のみ、タイプルールに従って選択します。
- 投稿: 画像自体がメッセージです:FacebookやInstagramの投稿、告知、イベント、オファー、採用情報、プロモーション。
--mode postでレンダリングし、ユーザーの言葉をそのまま保持します。コアメッセージは--title、残りは--body、日時、場所、価格、行動喚起は--detailsに配置します(タイプルール:投稿参照)。スペルと大文字小文字のみ修正します。ユーザーが依頼しない限り、メッセージを削ったり、投稿のキャプションに移動したりしないでください。スクリプトがフィードサイズでテキストが読めないと警告した場合は、自分が行うであろうカットをユーザーに提示し、承諾を待ってください。 投稿は、写真がごちゃごちゃしている場合やメッセージが長い場合、--backdrop solidが最適な場合が多いです。サムネイルは通常、デフォルトのfadeを維持します。 - 不明な場合: 一度だけ尋ねてください:「これは動画のサムネイルですか、それとも投稿画像ですか?」
ワークフロー
-
画像を入手する。 最適な背景は生のキャプチャです:フォトモード、HUDオフ、1440pまたは4K、被写体は片側に、反対側にテキストのスペースを確保します。公式プレスキットのアートは機能します。キーアートは中央に被写体があることが多く、
--subject-boxと--cropで対応します(ステップ5)。ファンアートはアーティストの許可とクレジットが必要です。画像がファンアートに見える場合はその旨を伝えてください。画像生成モデルでシーンを生成したり再描画したりしないでください。 -
テキストを作成する references/type-rules.md に従って。サムネイル:大きなテキストはこの動画を他と差別化するもので、ラベルはコンテキストです。必要な場合を除き、キッカーは使用しません。ユーザーにテキストと、タイトルから削除したものを表示します。投稿:ユーザーのメッセージを見出し、本文、詳細に分割し、単語を削除せずに、どのように分割したかをユーザーに示します。
-
タイトルの見た目を選ぶ references/fonts.md に従い、以下の優先順位で:ユーザーが公式ロゴを持っている場合(
--logo、プレスキットや公式サイトで公開されています)。そうでない場合、バンドルされているフォントの中で、ゲーム、映画、ブランドの独自の文字に最も近いもの(--title-font cinzel、--list-fontsを参照)。バンドルされているもので合うものがない場合は、無理に使用せず、チャンネルに保存されているtitle_font、それもなければセリフ体かサンセリフ体のデフォルトを使用し、合致するものがないことを伝えてください。ラベルボックスは常にチャンネルフォントを維持します。どの見た目を使用したか、その理由をユーザーに伝え、マッチしたフォントは精神的な近さであり、実際の文字ではないことを伝えてください。ロゴのウェイトや字間にも形状を合わせてください:細くて間隔の広いロゴ(Death Strandingなど)には、カタログの太字デフォルトではなく、ライトウェイトで広めのトラッキングを設定します(--title-font outfit@Light --title-tracking 0.12)。フォントが幅広い場合は、長い単語を2行に分割します(DAWN\nWALKER)。スクリプトはテキストが小さくなりすぎると警告します。 色: デフォルトは白。画像に1つの強い特徴的な色(夕日、ネオン、日食、チームカラーなど)がある場合は、--title-color autoを使用します。スクリプトは画像からその色を取得し、暗い側で読める程度に明るくします(画像に鮮やかな色がない場合は白のまま)。または、ブランドカラーを指定します(--title-color "#f2b84b")。大きなテキスト または ラベルボックス(--accent)に色を付けますが、両方を異なる色にすることは絶対にしないでください。スクリプトはそのような場合に警告します。チャンネルカラーをclean-thumbnail.jsonのtitle_colorまたはaccentとして保存します。 -
チャンネル設定とフォーマットを確認する。 作業フォルダに
clean-thumbnail.jsonがある場合、スクリプトはそれを読み込みます(スタイル、フォント、色、リード、サイズ、アスペクトなど。フラグで上書き可能)。- フォーマット、一度だけ尋ねる。 保存された
aspectがなく、リクエストがプラットフォームを指定していない場合、ユーザーがどのプラットフォームに投稿するかを一度だけ尋ねます:YouTube(16:9)、FacebookまたはInstagramフィード(4:5)、リール、ショート、ストーリー(9:16)。答えをclean-thumbnail.jsonに"aspect"として保存します(存在しない場合は references/channel.example.json から作成します。例:"aspect": "16:9,4:5")。保存した場所を伝え、再度尋ねないでください。 - その後は、 保存されたフォーマットを尋ねずに使用します。リクエストがプラットフォームを指定した場合(「リール用」「Facebook用のも」)、そのリクエストにのみ
--aspectを渡します。保存された値を変更するのは、ユーザーが明示的に指示した場合のみです(「今後は」「常に」)。 - ユーザーが最初のサムネイルを承認した後、他の選択肢(スタイル、フォント、
title_color、accent)も同じ方法で保存することを提案します。色を保存するのは、ユーザーがすべての動画でその色を使用したい場合のみです。autoは画像ごとに決定されるため、ユーザーが依頼しない限り保存しないでください。
- フォーマット、一度だけ尋ねる。 保存された
-
レンダリング このスキルのフォルダにある
scripts/thumb.pyを使用して実行します(フルパスを使用):python <skill-dir>/scripts/thumb.py CAPTURE --title "SIMON" --label "No hit · Parry only" -o out/simonデフォルトの
--lead abでは、2つのバリエーション(_A(タイトル大)と_B(ラベル大))が生成されます。それぞれ、画像がサポートする最大の標準サイズ(アップスケーリングなし、最大3840x2160、デスクトップアップロード用)のマスター.jpg、2 MB未満の1280x720の_phone.jpg(電話アップロード用)、および_preview.png(フィードサイズ、再生時間バッジ付き、88 px通知、スクイントテスト用)が生成されます。フォーマット:
--aspect 16:9(デフォルト、YouTube)、4:5(FacebookおよびInstagramフィード、1080x1350)、9:16(リール、ショート、ストーリー、1080x1920)、カンマ区切りリスト、またはall。縦長フォーマットは、--focusが指定されていない限り、画像の最も賑やかな部分(被写体)にクロップされ、タイプは画像下部のバンド、被写体がある場合は画像上部、または積み重ねられたパネルの継ぎ目に配置されます。9:16では、タイプはリール/ショートのセーフゾーン内(上部14%、下部35%、右側15%を避ける)に留まります。各縦長ファイルには、マスターがそれより大きい場合に_1080.jpgコピーが作成され、Facebookフィードカードまたはリールオーバーレイ(プロフィールグリッドクロップ付き)の下でのプレビューが作成されます。すべてのフォーマットで同じテキストを使用します。被写体をマークする。 キャプチャに人物、キャラクター、製品が写っている場合、それを見て、顔(または製品名やラベル)の周りに
--subject-box x0,y0,x1,y1を渡します。値は画像全体に対する割合で、--inset-boxと同じように推定します。顔の場合は、眉からあごまでの範囲をボックスで囲みます。髪や全身は含めません。胴体にタイプがかかるのは問題ありませんが、顔にタイプや影がかかるのは問題です。スクリプトは、16:9のタイプをボックスがクリアされる側に配置し、4:5と9:16のクロップをボックスに中心合わせし、9:16のタイプバンドを、顔への影が少なくなる場合は上部に移動し、ボックスがタイプや影の下、またはフレーム外になる場合に警告します。各バリエーションはsubject box:行を出力します(フレーム内、可視、影の下、タイプの下)。--panelまたは--subject(カットアウトには独自の重なりチェックがあります)では使用しません。4:5や9:16には別の画像を使う と良い場合が多いです。9:16のタイプはフレーム中央(リールセーフゾーン)に配置されるため、被写体の顔が上部3分の1にあり、その下が落ち着いたフレームが必要です。顔が中央にある場合、
--subject-boxは、それがクリアされる場合にバンドを上部に移動し、できない場合は警告します。ボックスがない場合、バンドは下部に留まり、顔を覆います。ワイドキャプチャが適さない場合、ユーザーに適したキャプチャを依頼するか(またはユーザーのキャプチャから選択し)、--aspect 4:5,9:16で2回目の実行でレンダリングします(同じ-oで問題ありません。縦長ファイルには_4x5と_9x16のサフィックスが付くため、16:9ファイルはそのまま残ります)。縦長クロップは--subject-boxに中心合わせされます。ボックスがない場合、フレームの最も賑やかな部分に従います。これは風景の場合もあります。その場合は、ボックスまたは--focusを渡します。被写体が中央? 16:9のサムネイルでは、タイプとその影はどちら側に配置されても被写体にかかります。
--focusは役に立ちません(16:9より広いキャプチャでの16:9クロップの位置を移動するだけです)。--subject-boxを使用すると、警告がそれをクリアするクロップを提案します。例:try --crop 0.11,0,0.96,1 --text-side right。それを指定して再実行し、同じ--subject-boxを維持します(両方とも元の画像に対する割合であるため、ボックスの再計算は不要です)。手動で:画像のより狭い部分を--crop x0,y0,x1,y1(元の画像に対する割合)で保持します。幅の約75〜80%で、被写体はタイプとは反対側に向けます。16:9より狭い場合、アートは遠い側に移動し、暗い側にフェードします。クロップはすべてのフォーマットに適用されます。バーはトリミングされます。クロップは、ボックスが認識しない2番目の要素を視野内に維持することもできます(クリエイターデモでは、この方法でカメラフォンを視野内に保持しています)。その他のフラグ:
--backdrop fade|solid(タイプの背後に配置されるもの。fadeは写真を暗くして影にし、solidは写真をクリーンに保ち、タイプを無地の--bgパネルに配置)、--style serif|sans(デフォルトのタイトルの見た目)、--kicker TEXT/--subtitle TEXT(大きなタイプの上または下の小さな行。タイプルールを参照)、--feather 0..1(狭いまたはクロップされたアートのフェード長。フェードが顔に達する場合は短くする)、--shade 0..1および--bg #hex(タイプ側の暗さと色)、--subject-box x0,y0,x1,y1、--band auto|top|bottom(4:5および9:16のタイプバンド)、--text-side left|right、--focus 0..1(ワイドキャプチャのクロップ位置)、--logo logo.png --logo-white(タイトルとしてのロゴ)、--title-font NAME|FILE/--label-font、--list-fonts、--system-fonts(バンドルされたデフォルトの代わりにインストールされたフォント。見た目はマシンによって異なります)、--title-tracking 0..0.5(大きなタイプの文字間隔(em単位))、--title-color white|auto|#hex(大きなタイプ)/--accent white|auto|#hex(ラベルボックス)、--size 720p|1080p|1440p|4k、--feed DIR(両方のバリエーションを他のサムネイルの中に配置)。各バリエーションはtitle type: ...とcolors: ...を出力するため、ユーザーに何が使用されたかを伝えることができます。 -
確認 手渡す前に:
- すべての
warning:行を読み、原因を修正します(サイドの切り替え、クロップまたはインセットボックスの移動、テキストの短縮、大きなカットアウトの使用、再キャプチャ)。開いている警告があるサムネイルを、その旨を伝えずに手渡さないでください。 - 各プレビューを開きます:大きなタイプは168 pxで読める必要があります。読めない場合は短くします。
- スクイントタイルでは、大きなタイプと被写体が生き残る2つの要素である必要があります。明るい部分がその両方を上回る場合は、クロップ、サイド、または画像を変更します。細いまたは詳細なロゴは、ここで大きなタイプが保持されている間にしばしばフェードアウトします。その旨を伝えてください。それがバリアントBの目的です。
- すべてのバリエーションの
subject box:行を読みます。16:9でボックスが影またはタイプの下にある場合、タイプを縮小する代わりに、警告が提案する--crop(ステップ5)で再実行します。9:16では、タイプはリールのセーフゾーン内に留まる必要があるため、スクリプトはバンドを上部または下部にしか移動できません(自動的に移動し、もう一方のバンドが顔をクリアする場合に--bandを警告として出力します)。顔がまだ影になっている場合は、ボックスが眉からあごまで正しく設定されているか確認し、テキストを短くするか、縦長フォーマットには別のフレームを使用し(ステップ5)、9:16の顔が影のままであることをユーザーに伝えます。 - ボックスがない場合(人物や製品がいない場合)、4:5と9:16のプレビューでクロップが重要なものを保持しているか確認します。風景をフレーミングしている場合は、
--focusを渡します。 autoカラーの場合、colors:行とプレビューを確認します。色は画像で知られている色である必要があります。脇の色(青いシーンの中の赤い看板など)を拾った場合は、正しい色の16進コードを指定するか、白に戻します。- 被写体がある場合、背景と一緒に撮影されたように見えるか確認します。ハロー、色やシャープネスの不一致がないか確認します。スクリプトは一致させた内容を出力します。
- ユーザーがそのトピックに関する現在のトップサムネイルのスクリーンショットを持っている場合、
--feed DIRでそれらを渡し、_feed.pngを確認します。ユーザーのサムネイルが目立つ必要があります。
- すべての
-
手渡す。 サムネイルの場合:両方のバリエーション(マスターと電話コピー)、プレビュー、使用したテキスト、タイトルの見た目と色(
title type:およびcolors:行から)。このペアはYouTubeのテスト&比較用で、これは動画ごとに最大3つのサムネイルを受け付け、クリック率ではなく視聴時間シェアで勝者を選びます。明確に異なるサムネイルはより早く完了します。テストに選ばせてください。あなたが選んだり、3つ目のバリエーションを約束したりしないでください。投稿の場合:画像とそのプレビュー、および配置された通りのテキスト(post text:行からのサイズ付き)。これは1つの画像であり、A/Bペアではありません。
固定仕様
マスターは最大3840x2160(YouTubeはデスクトップから最大50 MBを受け付けます)。電話コピーは1280x720、2 MB未満。4:5マスターは最大2160x2700、コピーは1080x1350。9:16は最大2160x3840、コピーは1080x1920。タイプは右下隅(再生時間バッジが配置される場所。168pxのバッジにサイズ調整)の外、9:16ではリール/ショートのセーフゾーン内に配置されます。
...
[truncated for translation]