Community画像github.com

Clean Thumbnail:実写素材で作る編集部品質のYouTubeサムネ

光る文字や矢印、AIっぽさではなく、実際のフレーム、写真、切り抜きから、出版社風の抑えたYouTubeサムネイルを作ります。タイトルをブランド自身の書体で短い文字にし、最大4KのA/Bペアと2MBのスマホ用コピーを書き出し、Facebook 4:5とReels/Shorts 9:16版も作成。コントラスト、再生時間バッジの角、セーフゾーンもチェックします。

Clean Thumbnail:実写素材で作る編集部品質のYouTubeサムネ とは?

「ポッドキャストをYouTube動画に」レシピのステップ3(クリックされるサムネイル)。出典は RZ-Logic/clean-thumbnail-skill(コードはMIT、SIL OFLフォント16種同梱、デモ画像とスマホプレビュー付き)。唯一のルールは「実写が雰囲気を担い、文字は静かに」。縁取り、グロー、矢印、ステッカー、カラーウォッシュ、モデル生成の背景は使いません。各画像の役割は4つだけ:背景(1フレーム、写真、キービジュアル)、比較やビフォーアフター用のラベル付きパネル2〜3枚、色味を合わせて文字の反対側に置き背景をぼかす被写体の切り抜き(あなた自身や製品)、モニターやスマホの中に表示するインセット。最初にサムネイルか投稿かを判断します:サムネイルはタイトルが情報を担うので文字ルールで選んだ数語だけ、投稿(--mode post)はユーザーのメッセージ全体をタイトル・本文・詳細として残します。ローカルのPythonレンダラー(numpyとPillow、rembgは任意)が最大3840×2160のA/Bペアと2MB未満のスマホ用コピー、4:5フィードと9:16のReels・Shorts・Stories版を出力し、コントラスト、再生時間バッジ、Reelsのセーフゾーン、フィードサイズを確認。同じコマンドならどのOSでも同じ書体になります。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RZ-Logic/clean-thumbnail-skill/tree/HEAD/skill/clean-thumbnail

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

クリーンサムネイル

たった一つのルール

本物の画像が雰囲気を運び、タイポグラフィは静かに添える。 すべてのサムネイルは、固定された役割を持ついくつかの実画像と、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 を維持します。
  • 不明な場合: 一度だけ尋ねてください:「これは動画のサムネイルですか、それとも投稿画像ですか?」

ワークフロー

  1. 画像を入手する。 最適な背景は生のキャプチャです:フォトモード、HUDオフ、1440pまたは4K、被写体は片側に、反対側にテキストのスペースを確保します。公式プレスキットのアートは機能します。キーアートは中央に被写体があることが多く、--subject-box と --crop で対応します(ステップ5)。ファンアートはアーティストの許可とクレジットが必要です。画像がファンアートに見える場合はその旨を伝えてください。画像生成モデルでシーンを生成したり再描画したりしないでください。

  2. テキストを作成する references/type-rules.md に従って。サムネイル:大きなテキストはこの動画を他と差別化するもので、ラベルはコンテキストです。必要な場合を除き、キッカーは使用しません。ユーザーにテキストと、タイトルから削除したものを表示します。投稿:ユーザーのメッセージを見出し、本文、詳細に分割し、単語を削除せずに、どのように分割したかをユーザーに示します。

  3. タイトルの見た目を選ぶ 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 として保存します。

  4. チャンネル設定とフォーマットを確認する。 作業フォルダに 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 は画像ごとに決定されるため、ユーザーが依頼しない限り保存しないでください。
  5. レンダリング このスキルのフォルダにある 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: ... を出力するため、ユーザーに何が使用されたかを伝えることができます。

  6. 確認 手渡す前に:

    • すべての 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 を確認します。ユーザーのサムネイルが目立つ必要があります。
  7. 手渡す。 サムネイルの場合:両方のバリエーション(マスターと電話コピー)、プレビュー、使用したテキスト、タイトルの見た目と色(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]

関連スキル