Community画像github.com

バナーコンポジター

実際の写真、静止画、ポスター、ロゴを1枚のストリップに合成し、ソフトな継ぎ目でつなぎ、ロゴやタイトルワードマークはそのまま保持して、幅広ヘッダー画像やバナー画像(サブレディット、Discord、YouTubeチャンネル、フォーラム、Wiki、ファンサイト、イベントページ、チームページなど)を作成します。

バナーコンポジター とは?

このスキルは、コミュニティバナーなどでよく求められる、複数の実在画像(写真、ポスター、ロゴ)を横並びに合成する際に、AI画像生成では再現が難しい**タイトルロゴの正確なレタリング**や**実在人物の顔**をそのまま保持することを重視します。画像生成AIではロゴが似て非なるものになり、顔も別人のように描き直されるため、ファンコミュニティでは不適切です。このスキルは主にClaude CodeやCodexなどのエージェント環境で動作し、JSONレイアウト仕様に基づいてPythonスクリプト(`compose_banner.py`、`cutout_logo.py`、`contact_sheet.py`)を実行し、公式アセットのみを使用してバナーを構築します。ユーザーが「画像AI用のプロンプト」を求めてきた場合でも、このスキルは合成を提案し、どうしても生成が必要な場合は背景プレートのみに制限するよう促します。また、バナーのサイズやプラットフォームのルールに従い、フェードで顔が切れないようにするなど、細かいレイアウト判断を行います。完成後は上書きを避け、仕様ファイルとアセットを保存して、後から画像を差し替えて再構築できるようにします。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sivarajd/banner-compositor/tree/HEAD

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

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

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

ドキュメント

バナーコンポジター(Banner compositor)

実際の画像を横に並べてバナーを構築し、継ぎ目をブレンドし、ロゴを上部に配置します。何も描き直されません。顔は写真のままで、タイトルはデザインされたままです。

なぜ合成であって生成ではないのか

この作業のために画像AIのプロンプトを求める人がよくいます。生成では、コミュニティバナーが正しく表現しなければならない以下の2点で正確に失敗します。

  • タイトルのワードマーク。 ジェネレーターはロゴを書き直します。近いですが間違ったものになり、ファンはすぐに気づきます。
  • 実在の人物。 ジェネレーターは顔を描き直します。結果は似ているだけで、多くのコミュニティでは加工コンテンツとして禁止されており、人物を誤って表現します。

そのため、生成プロンプトを求められた場合は、これを2、3文で説明し、合成を提案してください。ユーザーがそれでもジェネレーターを使いたい場合は、テキストや人物のない背景プレートに限定し、実際のアセットはこのスキルで上部に配置します。

ワークフロー

1. 概要を確定する

何かを尋ねる前に、リクエストとファイルから以下を決定します。

  • サイズ。 プラットフォームはバナーサイズを変更するため、最も新しい証拠を、以下の順序で使用します。ユーザーがプラットフォームのアップロードダイアログから指定したサイズ、プラットフォームの現在のヘルプページ、references/platform-sizes.md(日付とソース付き)、既存のバナーのピクセルサイズ(変更前の可能性あり)。使用したサイズとその出典をユーザーに伝えてください。一部のプラットフォームでは、デスクトップ用とモバイル用で別々のバナーが必要です。以下の「複数のサイズ」を参照してください。
  • 被写体とその順序。 左から右に何を配置するか、特定の被写体により多くのスペースを割り当てるかどうか。
  • 手持ちのアセット。 フォルダを一覧表示します。すべての画像を自分で開いて確認してください。ファイル名やキャプションだけでは、画像の内容、鮮明さ、埋め込まれたテキストがわかりません。
  • ハウスルール。 加工画像に関するコミュニティルールと、トーンに関してユーザーが述べたこと。プロジェクト内にあれば読んでください。

この方法で確定できないこと(不足している被写体リストなど)だけを尋ねてください。

2. 不足を補う

各被写体について、ロゴまたはワードマークと1つ以上の画像が必要です。不足しているものがあれば、公式資料を探します。権利者の公式投稿やチャンネル、プレスキット、公式アートワークを転載しているニュースサイトなどです。references/asset-sourcing.mdに検索戦術、サブエージェントへの検索委任の概要、ソースファイルの形式が記載されています。ユーザーがサブエージェントを要求した場合、または環境がそれを推奨する場合は委任し、それ以外の場合はインラインで検索します。

検索方法に関わらず、3つのルールが適用されます。

  • 公式のみ、そしてその根拠を伝えること。 ファン編集やAIレンダリングはあふれています。各ファイルの入手元を記録してください。「公式」が元の投稿ではなくキャプションに基づいている場合は、最終報告書でその旨を明記してください。
  • アセットを決して捏造しないこと。 ロゴが存在しない場合、バナーにはロゴを入れないか、後述するポスターのトリミングを使用します。代わりのデザインを考案しないでください。
  • ユーザーを外部リクエストに巻き込まないこと。 URL、ヘッダー、検索クエリに名前、プロジェクト名、メールアドレスを含めないでください。

ダウンロードは作業フォルダに保存し、信頼する前に各ファイルを確認してください。scripts/contact_sheet.pyは多数の候補を1枚のシートにまとめ、1つずつ開くよりも迅速です。

3. ロゴを入手する(最も忠実な方法から)

  1. ユーザーが提供した透明ロゴファイル。 それを使用します。背景に色付きのフリンジが見える場合は、cutout_logo.py --key alpha --defringe 2を実行します。
  2. タイトルがそのまま残っているポスター。 デザイナーが配置した位置にタイトルが来るようにポスターをトリミングします。何も切り抜かれていないため、スタイルは正確です。唯一のソースが小さい場合に最適な方法です。
  3. キーアートからの切り抜き。 scripts/cutout_logo.pyを使用して、ロゴを背景からキーアウトします。ロゴと背景を分けるもの(暖色の文字と寒色の背景のチャンネル差 r-b、暗い背景の明るい文字の luma、明るい背景の暗い文字の inv-luma、フラットな背景色の bg)に基づいてキーを選択します。常に --test-sheet を渡し、明るい背景と暗い背景での結果を確認します。

切り抜きは最も忠実でない方法です。ロゴの暗い部分や影の部分は、背景色に近いと消えてしまいます。ロゴを元の背景のような地の上に配置するか、レイアウト仕様で backing(塗りつぶされたシルエットとソフトシャドウ)を指定し、ロゴが切り抜きであることをユーザーに伝えてください。

ワードマークを描き直して「クリーニングアップ」したり、レタリング、スタイル、色を変更したりしないでください。

4. 仕様ファイルでレイアウトする

レイアウトをJSONとして記述し、scripts/compose_banner.pyでビルドします。仕様は保持すべきものです。後でより良い画像が見つかった場合、パスを1つ変更して再ビルドします。references/spec-format.mdに全フィールドが記載されており、assets/example-spec.jsonが出発点となります。

モデルはタイル(各スロットに合わせて拡大縮小およびトリミングされ、左隣のタイルにフェードインする写真)の行と、その上にオーバーレイ(ロゴ、フェードで消えないように最後に描画)です。スクリプトでは判断できないレイアウト上の判断事項:

  • 顔をフェード範囲から避ける。 最初以外の各タイルの左 feather ピクセルは半透明です。そこに顔があると、隣の被写体にゴーストのように重なります。クロップを移動するか、スロットを拡大してください。
  • ロゴは、自身の被写体のタイルの中で静かな領域(ピントの合っていない背景、空、暗い壁など)の上に配置する。 次の被写体のタイルに食い込まないようにします。
  • 被写体のバランスを取る。 類似したロゴの幅と類似した顔のサイズは、1つのバナーとして読み取れます。1つのロゴを大幅に小さくしなければならない場合は、理由をユーザーに伝えてください。
  • 変更可能な情報は切り取る。 ユーザーが希望しない限り、ポスターに焼き付けられたリリース日、価格、「近日公開」の行はトリミングで除去します。バナーのテキストは後で編集できません。
  • 拡大縮小とトリミングのみ。 レタッチ、顔編集、透かしやクレジットの削除は行いません。唯一のコピーに第三者の透かしが入っている場合は、別のコピーを見つけるか、使用しないでください。
  • プラットフォームのUI要素に注意する。 多くのサイトはアバターやタイトルをコーナーに重ね、スマートフォンではサイドをトリミングします。それらのゾーンがわかっている場合は、顔やロゴをそこに配置しないでください。

複数のサイズ。 プラットフォームが複数のバナー(デスクトップ用とモバイル用、または2つのサイト用)を必要とする場合、サイズごとに1つの仕様を作成し、アセットを再利用します。完成したバナーを異なる形状にリサイズしないでください。あるアスペクト比で機能するクロップとロゴ位置が、別のアスペクト比では顔を切り落とします。サイズが数ピクセルしか違わない場合は、仕様をコピーして最後のタイルを調整します。

非常に細いストリップ。 およそ8:1(例:1072x128)の場合、高さ一杯に収まる顔の幅はわずか約100ピクセルになるため、より多くの被写体を配置できますが、それぞれの表示領域は小さくなります。顔にタイトにクロップし、背の高いバナーよりも被写体あたりの画像数を少なくすることを想定し、各ロゴがその高さでも判読可能か確認してください。2行積みのワードマークやタグラインは小さすぎて読めない可能性があります。その旨を伝え、ユーザーにどうするか決定してもらいます。

5. ビルド、確認、修正

python scripts/compose_banner.py layout.json --preview preview/

このスクリプトは、証明可能な問題(ファイルの欠落、空の帯を残すクロップ、タイル間の隙間、オーバーラップより広いフェード)があると停止します。また、大きなアップスケールなど、よりソフトな問題については警告します。

次に結果を確認します。必ずフルサイズで確認してください。 幅広のバナーをビューアに合わせて縮小すると、ゴースト状の継ぎ目や壊れたロゴのエッジが隠れます。--previewはこのためにフル解像度のセグメントと、継ぎ目とオーバーレイボックスを描画した guides.png を作成します。各セグメントで以下を確認します。

  • 継ぎ目で切れていたり、隣にゴーストのように重なっている顔
  • ロゴのエッジ:穴、ハロ、フリンジ、このサイズで読めないもの
  • 空の帯、引き伸ばされた人物、目に見えるタイルの端
  • 意図していないテキスト

仕様を修正して再ビルドします。一度の確認で見つけた問題はすべて修正してから、再度確認してください。

6. 保存と報告

  • ユーザーの既存のバナーを決して上書きしないでください。 新しいファイル名で保存します。スクリプトは --force が指定されない限り上書きを拒否します。これは自分自身のドラフト専用です。
  • 仕様、使用したアセット、SOURCES.md を、セッションを超えて存続するフォルダにまとめて保存します。テンポラリフォルダにダウンロードを置くと失われ、バナーを再構築できなくなります。
  • アップロードや公開は行いません。それはユーザーが行います。

報告は次の順序で行います。ファイルの場所とサイズ、内容(左から右へ)、弱点(信頼性の低いソース、切り抜きロゴ、読めないタグライン、貼り付けたように見えるタイル)、そして見つけた各アセットが公式である確実性。確認しなかったこと(例えば、サイトがスマートフォンでバナーをどのようにトリミングするか)を明白に述べてください。

スクリプト

スクリプト用途
scripts/compose_banner.pyJSON仕様からバナーをビルド。--preview DIR で検査用セグメントとガイドを生成。
scripts/cutout_logo.pyキーアートからロゴをキーアウト、または既存の透明ロゴのフリンジを除去。--test-sheet で3種類の地の上での表示を確認。
scripts/contact_sheet.py候補画像を1枚のラベル付きシートにタイル表示し、素早く視覚確認。

各スクリプトは --help でオプションを表示できます。

権利とフェアディーリング

静止画、ポスター、ロゴはその所有者に帰属します。公式アートワークを改変せずに使用するファンやコミュニティのバナーは一般的な慣行ですが、その使用が許容されるかどうかはユーザーが決定します。そのため、ウェブからアセットを入手する際に一度その旨を伝えてください。そのページを権利者の公式アカウントであるかのように装うバナーは作成しないでください。

関連スキル