Communitygithub.com

YouTubeサムネイル

小さなサイズでも生き残るサムネイルとカバー:タイトルとオプションの顔写真、@ハンドル、ブランドカラー、またはユーザー自身の動画のフレームから、YouTubeサムネイル(16:9)、Shorts、Reels、TikTokカバー(9:16)、ポッドキャストやコースカバー(1:1)を生成します。テキストはGPT Image 2.5でベイクイン、顔は参照編集で固定します。使用場面:「動画のサムネイルを作って」「顔入りのYouTubeサムネイル」「Shortsカバー」「ポッドキャストカバーアート」「このフレームからサムネイル」「サムネイルのテキストだけ変えて」「videoma thumbnail yap」「kapak görseli hazırla」「küçük resimdeki yazıyı değiştir」。チェーン:`character`から@ハンドル、`image`や`video`から静止画やフレームを消費し、サイズ指定のPNGとJPEGを出力します。対象外:ポスター、写真編集(`image`を使用);ロゴ(`brandkit`を使用);リンクカード、OG画像(`launch-graphics`を使用);広告クリエイティブ(`ads`を使用);動画(`video`、`short-video`を使用);新しいキャラクター(`character`を使用);バッチ(`pipelines`を使用);モデル選択(`models`を使用);セットアップ問題(`setup`を使用)。

YouTubeサムネイル とは?

このスキルは、開発者やAIエージェントユーザー向けに設計された、高品質なサムネイルとカバー画像を生成するためのものです。ユーザーが入力したタイトルやトピック、顔写真、ブランドカラー、動画フレームなどの情報をもとに、GPT Image 2.5などのモデルを活用して、視認性が高く、クリックを誘うサムネイルを作成します。特に、フィード上で約160ピクセル幅で表示される実際のサイズで評価されるように設計されており、テキストはモデルによって直接画像にベイクインされるため、フォントの互換性問題がありません。Claude Code、Cursor、Codexなどの主要な開発プラットフォームで動作し、16:9のYouTubeサムネイル、9:16のShortsやReels、1:1のポッドキャストカバーなど、さまざまなフォーマットに対応しています。ワークフローは、プロジェクトの状態管理、発見ガードレールによるモデルルーティング、コストゲートによる予算管理、そして最大3ラウンドのドラフトと修正をサポートしており、効率的かつ堅牢なサムネイル制作プロセスを実現します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/funi-ai/claude-plugins/tree/main/plugins/genmedia-skills/skills/youtube-thumbnail

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

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

ドキュメント

YouTubeサムネイル は何をしますか?

実際に人々が見るサイズ(フィードで約160ピクセル幅)で評価されるサムネイルとカバー。1つのタイトルから3つの異なるコンセプトを生成し、ユーザーが選択、1つの最終版、限定的な修正、正確な配信サイズのファイルを出力します。クラフト(コンセプトフレームワーク、プロンプト設計図、テキストルール、小ささのゲート)はここにあり、メカニクスは references/cli-contract.md と references/platform.md にあります。

ステップ0 — 事前準備

セッションごとに1回:

command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" tools
  • blockers が空でない、CLIがない、または0.7.0より古い → /genmedia-skills:setup。キーがない → ユーザーが genmedia setup を実行するか、自分で FAL_KEY をエクスポートするのを待つ。絶対にキーを読み取ったり、印刷したり、要求したり、入力したりしないでください。
  • config.announce_above_usd と config.confirm_above_usd(デフォルトは0.50と2)を保持します:これらはコストゲートのしきい値です。
  • thumbcheck.py tools は、preview、sheet、fit、frame のうちどれがここで実行できるか(ローカルのffmpegまたはmacOSの sips が必要)、および lockup が実行できるか(Chromium系ブラウザが必要)を示します。どちらもない場合 → ワークフローステップ6の機能低下ゲート。drawtext、Pillow、ImageMagickを決して計画しないでください:テキストはモデルによってレンダリングされます。
  • まず再開:このリクエストに一致する .genmedia/projects/<slug>/thumbnail.md がある場合 → それを読み、最初の未完了ステップから続行します。元帳エントリがあるプロジェクトを決して再開しないでください。

UXルール

  1. ユーザーの言語で返信します(トルコ語入力 → トルコ語出力)。モデルのプロンプトは英語で記述します;画像上のテキストは、公開される言語と正確なスペルを維持します。エンドポイントID、フィールド名、パスはそのまま維持します。
  2. チャット内でJSON、リクエストID、プロンプト、ツールの説明を表示しないでください。静かに待ちます;バッチごとに最大1行のステータスのみ。
  3. 質問予算:2つ、一度に1つ、ラベル付きオプションとして、答えが不足している場合のみ:
    • Q1 フックワード:タイトルもトピックもない → タイトルを尋ねます。タイトルが既知 → 尋ねないでください;自分で2〜4つのフックワードを書きます(コンセプト間で3つの異なるもの)。
    • Q2 顔ありかなしか:それを決定するものがない場合のみ尋ねます。写真、@handle、「私 / 私の顔 / ben」→ 顔あり。「顔なし」、製品、画面録画、風景 → 顔なし。 ユーザーが1つのサムネイルだけを要求するか、コンセプトを指定する場合 → 3つではなく1つのドラフト;選択ははい/いいえになります。それ以外はすべて、配信行で述べるデフォルトです:フォーマット16:9;テキスト言語 = タイトルの言語;パレット = 指定されたブランドカラー、それ以外はコンセプトごとに選択;フォトリアルなポスタールック;3つのコンセプト;最終マスター2560x1440、1920x1080と1280x720で配信。カウントされないもの:同意確認、選択、コスト確認。
  4. 選択はハードストップです。 比較シートを表示して待ちます。沈黙、成功したジョブ、またはあなた自身の好みは決して選択ではありません。1つを推奨することは許可されます;選択することはできません。
  5. 真実性。 サムネイルはドラマチックに表現することはできますが、誤解を招くことは決してありません。表示または記述されるすべてのものは、動画内に存在するか、それに正直に従っている必要があります:架空の数字、結果、反応、製品、ゲストは禁止;実際のプラットフォームの偽のUIは禁止;ユーザーが所有していないロゴやキャラクターは禁止。動画が何を提供するかわからない場合 → 約束する前に尋ねます(これはQ1またはQ2を置き換え、質問を追加するものではありません)。
  6. 顔。 実在の人物の写真(ユーザーを含む)→ その人物の同意を得ていることの1回の確認と、アップロードが公開URL上にあることの1行。ユーザーではない有名人や公人は絶対に不可;「<有名人>に似ている」は拒否され、架空の顔または顔なしのコンセプトを提案します。架空の顔は代役です:実在の名前のある人物、顧客、専門家、ゲストとして決して提示せず、配信時にその顔がAI生成であることを述べます。
  7. コスト:最初の有料呼び出し(ワークフローステップ4)の前にリクエスト全体を見積もり、事前確認からのしきい値でゲートを適用します:announce_above_usd 未満 → 実行;confirm_above_usd まで → 見積もりとともに1行、その後実行;それ以上 → 見積もりを表示し、明示的な「はい」を待ちます(references/platform.md セクション8)。承認は表示された計画をカバーします;より大きな計画には新しい承認が必要です。記憶から価格を引用しないでください;お金を節約するためにユーザーが指定したモデルを交換しないでください。
  8. 制限付き:最大3ラウンドのドラフトと3ラウンドの修正;各試行は何かを変更します;コンテンツポリシー拒否は変更せずに再送信されません;リクエストIDを持つジョブは再開され、再送信されることはありません。

発見ガードレール

以下のルーティングは日付入りキャッシュです(references/routing-image.md、2026-09-19検証済み)。セッション内でエンドポイントへの最初の有料呼び出しの前:

genmedia models --endpoint_id <endpoint_id> --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
  • status は active である必要があります。アクティブでないか404 → references/routing-image.md で同じタスクの次の階層、それ以外は genmedia models "<name>" --no-classify --limit 10 --json、最新のアクティブな一致、そしてどのモデルが実行されたかを述べます。
  • フィールド名、列挙型、制限はスキーマから取得し、決して記憶から取得しません。ユーザーがモデルを指定した場合 → 疑う前に検索します;新しいリリースはベンダーネームスペース(openai/、bytedance/、google/、alibaba/)にあり、fal-ai/ ではありません。
  • エンドポイントIDなしで genmedia run を決して実行しないでください(スマートルーティングは古いデフォルトを解決します)。

ルーティング

ステップエンドポイント理由
ドラフト、参照なしopenai/gpt-image-2.5/flare/text-to-image、quality: "medium"タイポグラフィリーダー;ターゲットファミリーのみがテキストをプレビューでき、安価なドラフトモデルはできません
顔写真、@handle参照、製品ショット、動画フレームのあるドラフトopenai/gpt-image-2.5/flare/edit、quality: "medium"参照は image_urls(最大16)に入ります;最終版と同じファミリー
最終版openai/gpt-image-2.5/sunburst/edit、quality: "high"精密階層;選択されたドラフトが画像1になるため、最終版はその構成であり、新しいロールではありません
修正(テキスト、表情、背景、色)openai/gpt-image-2.5/sunburst/edit、quality: "high"現在の最終版が画像1;ラウンドごとに1つのスコープ
テキストなしプレート、フォトリアル(代替パス)bytedance/seedream/v5/pro/text-to-imageアリーナ#1フォトリアル;テキストは後でGPT Image 2.5編集で追加されます
顔がずれた場合のアイデンティティプレートfal-ai/nano-banana-2/editアイデンティティ一貫性のある画像のルーティングデフォルト;テキストは後で追加
実際のフレームや写真の拡大fal-ai/seedvr/upscale/image;顔またはテキストがある場合:topaz/upscale/image/precision忠実;Topazには Faces と Text Refine モデルがあります
ユーザーの動画のフレームthumbcheck.py frame(ローカルffmpeg)正確なタイムスタンプ;ffmpegなし → ユーザーにスクリーンショットを依頼します
ユーザー自身のロゴをテキストなしプレートにthumbcheck.py lockup(ローカルブラウザ)マークはユーザーのファイルから配置されます;モデルはそれを再描画します

タイブレーカー:

  1. 画像上のテキスト → GPT Image 2.5、フォトリアルコンセプトでも。テキストなし(ユーザーがそう言った)→ ドラフトは bytedance/seedream/v5/pro/text-to-image またはその /edit で実行される可能性があります;フローの残りは変更されません。Seedreamは1280x720を拒否します(最小面積は1024x1024)quality フィールドはありません:image_size 1920x1080(9:16 → 1080x1920、1:1 → 1536x1536)を送信し、ルーティング行から画像ごとに価格を設定します(2026-09-19時点で約0.07米ドル:3つのドラフトは約0.20米ドル、合計を再計算します)。
  2. デフォルトのテキスト戦略は ワンパスでベイクイン です。プレートパス(テキストなしプレート、次に「このテキストのみ追加」編集)は、以下の場合に使用します:同じプレートに複数の言語またはA/B表現が必要な場合;ダイアクリティカルマークが2回失敗した場合;プレートが実際のフレームまたは写真の場合。詳細:references/text-and-readability.md。
  3. @handle → .genmedia/characters/<handle>/character.json を読み取ります(アンカー description;refs[] で role: "face" かつ active: true)、refの cdn_url がある場合はそれを再利用し、それ以外はそのファイルをアップロードします;アンカーをそのまま使用します。real_person: true → UXルール6が適用されます;記録された consent_confirmed_at が確認です。不明なハンドル → そう伝え、/genmedia-skills:character を提供します;決して代用しないでください。
  4. ユーザーがモデルを指定した → ライブチェック後にそれを使用します;デフォルトを1行で提供します。
  5. デザインがプレートとユーザー自身のロゴ(ブランドチャンネル、アプリのストアプレビュー動画)である場合 → プレートパス、その後 thumbcheck.py lockup がロゴファイルを幅の割合で中央に配置します(references/text-and-readability.md セクション2b)。プレートがすでに存在する場合(launch-graphics プレート、ユーザーの写真)→ 有料呼び出しなし:lockup、ゲート、ステップ10。ロゴファイルがない場合 → それを要求します;決してモデルにマークを描かせないでください。

トラップ:

  • 自動サイズトラップ。 編集エンドポイントは image_size のデフォルトを auto にしており、これは入力画像に従います:縦長の顔写真は縦長のサムネイルになります。常に {width,height} を送信します。
  • デフォルト品質トラップ。 quality のデフォルトは high で、ファミリーはトークン単位で課金されます。すべての呼び出しで設定します:medium ドラフト、high 最終版;xhigh または max は、ユーザーが価格に同意した後にのみ使用します。
  • 16の倍数トラップ。 1920x1080は有効なGPT Imageサイズではありません。1280x720、2560x1440、または3840x2160をレンダリングし、thumbcheck.py fit で1920x1080を生成させます。
  • 添付画像トラップ。 テキストから画像へのエンドポイントには画像フィールドがありません;写真を無視し、とにかく課金します。参照がある場合は /edit エンドポイントを使用します。
  • 新しいロールトラップ。 高品質でプロンプトを再実行すると、別の画像になります(このファミリーには seed がありません)。最終版は選択されたものの編集です。
  • 大文字トラップ。 モデルにトルコ語を大文字にさせないでください:最終文字列は自分で書き(thumbcheck.py text)、引用符で囲み、一字一句確認します。

ワークフロー

  1. インプット。 タイトルまたはトピック、フォーマット(デフォルト16:9)、顔ありかなしか、ブランドカラー、参照。HEIC、AVIF、TIFF、または非常に大きな写真を最初に:thumbcheck.py fit <file> --max-side 2048 --out .genmedia/tmp/<name>.jpg;そのコピーを読み取り、アップロードします。計画を立てる前に、すべてのローカル画像をReadツールで開きます(その中に誰が何がいるかがコンセプトを決定します)。ユーザーの動画からのフレーム:python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame <video> --at <seconds or m:ss>、次にそれをReadします。質問予算はUXルール3で許可されている場合にのみ使用します。
  2. 状態カード。 短いASCII <slug>(eksi-maya)を選びます:これはバッチ label、元帳フィルター、出力フォルダー、プロジェクトフォルダーです。自然言語ラベルも機能します;ヘルパーは "Ekşi maya" を Eksi-maya に変換し、その変換された形式がフォルダー名になります。Writeツールで .genmedia/projects/<slug>/thumbnail.md を書き、各ステップの後に更新します:
    # <title> — thumbnail
    promise: <one line: what the video really delivers>
    format: 16:9 | text language: <code> | face: <none | photo path | @handle> (consent: <yes, date | n/a>) | palette: <colours>
    [ ] concepts  [ ] drafts-1  [ ] gate  [ ] pick: -  [ ] final  [ ] revisions 0/3  [ ] delivered
    log:
    - <date> drafts-1: 1 <framework> "<TEXT>", 2 <framework> "<TEXT>", 3 <framework> "<TEXT>"
    
  3. 3つの異なるコンセプト。 references/frameworks.md を読みます。少なくとも5つを非公開でブレインストーミングし、異なるフレームワークを使用する最も強い3つを保持します(1つのアイデアの3つの配色ではありません)、それぞれに独自の2〜4つのフックワードを付けます。すべてのフックをテキストチェックにかけ、その upper 文字列をそのまま使用します:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" text "şimdi izle" --lang tr
    
    フックワードと画像は、ユーザーが述べた(タイトル、概要、ファイル)数字、結果、引用、製品、ゲストのみを使用できます;タイトルだけではそれらが得られない場合 → 質問、制約のないフック、テキストなしコンセプトを使用するか、尋ねます(UXルール5)。真実性ルールに違反するコンセプトは拒否します。顔ありと選択された場合 → 3つのコンセプトのうち少なくとも2つでそれを表示します。タイトルがすでにフックを含んでいる場合 → 1つのコンセプトはテキストなしでも構いません。
  4. 検証と価格設定。 各エンドポイントの発見ガードレール、その後:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" price openai/gpt-image-2.5/flare/edit,openai/gpt-image-2.5/sunburst/edit
    
    GPT Image 2.5は 1 units と応答しますが、これは価格ではありません。このスキルのドル:ジョブ数 x サイズ別、品質別の行(リストにないサイズ → 次の大きい行)の references/routing-image.md のGPT Image 2.5テーブル(t2i-typography 注記;編集行はすでに1つの入力画像を含む)+ 追加の参照画像ごとの references/platform.md §7 の参照許容量。日付入りヒント(2026-09-19):ドラフト1280x720 medium 約0.01米ドル;最終版または修正2560x1440 high 約0.055米ドル;3840x2160 high 約0.10米ドル。典型的なジョブ全体(3ドラフト + 最終版 + 3修正):参照なしで約0.25米ドル、1つの顔参照ありで約0.45米ドル → デフォルトの通知しきい値未満のため、実行し、見積もりを配信行に記載します。2ラウンド目のドラフト、より多くの参照、xhigh、max、4K、または1リクエスト内の複数の動画(動画ごとに1つのスラッグと状態カード;見積もりは合計)→ 最初に再計算し、ゲートを適用します。
  5. 1バッチでのドラフト。 参照を一度アップロードし、urls を保持します(引数の順序);アップロードは公開URLです。プライベートマテリアルについては一度そう述べます:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload ./me.jpg
    
    各プロンプトは references/prompt-blueprint.md から構築します。Writeツールで .genmedia/projects/<slug>/drafts-1.json に計画を書き込みます:
    {"label": "<slug>", "max_parallel": 3, "jobs": [
      {"id": "draft-a", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02,
       "input": {"prompt": "<concept A>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-b", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02,
       "input": {"prompt": "<concept B>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-c", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02,
       "input": {"prompt": "<concept C>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}
    ]}
    
    実行:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" run .genmedia/projects/<slug>/drafts-1.json
    
  6. 確認と選択。 下書きが戻ったらすぐに比較シートを生成し(thumbcheck.py sheet またはプレビュー thumbcheck.py preview)、ユーザーに表示します(Readツール)。UXルール4:待ちます。選択されたら、状態カードを更新し、最終版の image_urls[0] に選ばれた画像のURLを設定します。下書きラウンドが終了する前にユーザーが気に入ったものを選んだ場合 → 残りのジョブをキャンセルします。
  7. 最終版(高品質)。 選択されたドラフトで sunburst/edit を使用、quality: "high"、image_size は2560x1440(16:9の場合、他のフォーマットは比例幅)。同じプロンプト構成、image_urls[0] が選択されたドラフトのURL。
  8. 配信。 最終版の画像を適切なサイズに変換します(thumbcheck.py fit)。ユーザーにファイルを表示します。チェック:小さなサイズでのテキストの可読性。配信サイズを状態カードに記録し、ジョブを完了としてマークします。
  9. 修正(必要な場合)。 ユーザーが変更を要求 → 状態カードの修正カウンターを確認します(0/3未満)。1つのスコープ(「テキストを大きく」「色を青に」「笑顔を追加」)。現在の最終版を image_urls[0] として、sunburst/edit、quality: "high"、同じ image_size を使用。プロンプトは変更内容を正確に記述します。新しい画像を表示し、状態カードを更新します。
  10. 機能低下ケース。 利用可能なツールがない場合(thumbcheck.py のみ)、モデルのみのワークフローにフォールバックします:最終出力を適切なサイズに調整するための追加の編集ステップを使用します。

参照

  • references/cli-contract.md:完全なCLI契約
  • references/platform.md:プラットフォームの詳細とルール
  • references/frameworks.md:コンセプトフレームワーク
  • references/prompt-blueprint.md:プロンプト設計図
  • references/text-and-readability.md:テキストと可読性のルール
  • references/routing-image.md:画像モデルのルーティング

重要な注意

  • このスキルは genmedia ツールセットに依存しています。
  • すべての画像生成はコストがかかります。ワークフローは予期しない課金を防ぐためにコストゲートを実装しています。
  • テキストの可読性は小さなサムネイルサイズで最も重要です。
  • 顔の参照は一貫性を必要とし、許可が必要です。
  • ワークフローの状態はプロジェクトファイルを通じて維持されます。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

funi-ai/ads

Ads from the user's REAL product: UGC and polished ad videos (presenter, unboxing, showcase, testimonial, TV spot) and static ads with copy. Physical products: keyframes locked to the product photo, Seedance clips or TTS + OmniHuman, GPT Image 2.5 copy. Apps and SaaS: real captures and recordings, composited, never regenerated. Use when: "make a UGC ad for this product", "15 second TikTok ad", "static ad with this headline", "app install ad from my screen recording", "A/B ad variants", "bu ürün için reklam videosu yap", "uygulamam için reklam hazırla", "indirim görseli hazırla". Chain: consumes `product-photoshoot` stills, `character` @handles, `launch-graphics` pages; produces ads and a manifest. NOT for: text-free product photos (use `product-photoshoot`); posters (use `image`); listing cards (use `marketplace-cards`); store screenshots, OG cards (use `launch-graphics`); one clip (use `video`); organic shorts (use `short-video`); product demos (use `demo-video`); thumbnails (use `youtube-thumbnail`).

funi-ai/demo-video

Product demos, store previews, App Store header/search videos and loops cut from the user's REAL screen recording: trimmed, sped, zoomed, framed, captioned, voiced with local ffmpeg. Models add only what is not the product: narration (Eleven v3, Gemini TTS for Turkish), music and UI sound. Use when: "make a demo video of my app", "App Store preview video", "App Store header video", "Google Play promo video", "turn this screen recording into a demo", "GIF loop for my changelog", "Product Hunt launch video", "ekran kaydımdan tanıtım videosu yap", "changelog için GIF döngüsü". Chain: takes recordings, device frames (`layers`) and end cards from `launch-graphics`; produces MP4, WebM, GIF, SRT/VTT and posters. NOT for: generated b-roll shorts (use `short-video`); explainers with generated pictures (use `video-explainer`); paid ads (use `ads`); store screenshots, link cards (use `launch-graphics`); one generated clip (use `video`); voice or music alone (use `audio`); joining finished files (use `pipelines`).

関連スキル