Community画像github.com

image-riff — 借りたビジュアル言語でオリジナルアートを生成

1つ以上の参照画像から、その参照画像独自のビジュアル言語を使ったオリジナルアートを作成し、目的の表面に合わせてカットします。「この画像をベースにして」「この画像からアートを生成して」「クリエイティブなアイデア出しをして」といった指示に対応します。

image-riff — 借りたビジュアル言語でオリジナルアートを生成 とは?

このスキルは、参照画像のビジュアルスタイル(レンダリング言語)を抽出し、そのスタイルを維持したまま全く新しい被写体のアートを生成するための手法を提供します。`make-art` スキルをエンジンとして使用し、プロンプトを STEM(スタイル記述)、SUBJECT(被写体)、TAIL(幾何学と否定条件)の3部構成で組み立てます。生成後は、ランク付け、クロップ、出力フォルダへの整理を自動化し、YouTubeバナーやInstagramアバターなど、特定のプラットフォーム向けに正確なサイズで納品します。特にアイコンやアバター向けには、実際の表示サイズでの可読性テスト(小サイズテスト)を重視し、視認性を確保します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/image-riff

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

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

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

ドキュメント

image-riff — 借りたビジュアル言語でオリジナルアートを生成 は何をしますか?

エンジン、そのAPIキー、フラグ、および注意点はすべて make-art スキルにあります。 まずそちらをお読みください。このスキルは方法です。参照画像を実際の選択肢のセットに変え、それを本来の用途に合わせて仕上げる方法です。

完了とは、美しい画像が4枚あることではありません。完了とは、N枚のプレートが生成され、すべてのフレームが確認され、正直な批評に基づいてランク付けされ、目的に合わせたクロップがカットされ、以下のソースフォルダに成果物が収められることです。「ここに4つの画像があります」で終わる実行は、最後の2つの作業をユーザーに残します。

成果物の保存場所

art/<source-slug>/
  README.md                 日付入りのタイトル、ブリーフ、ランク -> プレートの表、そしてなぜそのピックが勝ったのか
  1-<slug>.jpg ...          最終選考、フル解像度マスター、ランク順に番号付け
  upload-1024/              実際の配信サイズの成果物(表面が特定のサイズを必要とする場合)
  small-size-test.png       サイズにおける可読性が判断を決めた場合の証拠
  prompts/                  最終選考のプロンプトをそのまま保存
  candidates/<round>/       敗退したラウンド、それぞれに独自の prompts/

<source-slug> は日付ではなく作品の本体です。同じ階層にフォルダが既に存在する場合は、その命名規則に従ってください。

  • READMEは必須です。 フォルダは後日、冷めた状態でレビューされます。READMEがないと、番号付きJPEGのフォルダは、どの画像が採用され、どれが却下され、その理由がわかりません。
  • 敗退ラウンドも保持してください。 candidates/ には再利用可能な知識があります。
  • プロンプトはそのまま保持してください。 これらは再現の手順であり、来歴です。
  • 最終選考には生成順ではなくランク順に番号を付けてください。 ファイル名は、会話が消えた後もランキングを残す場所です。
  • 生成されたアートは、依頼されない限り個人のフォトライブラリに入れないでください。実際の写真と混ざります。

2つの質問をしてから、リソースを使う

4K画像1枚あたり約$0.24で、4枚のプレートで約$1です。2つの質問だけで済ませるには十分安く、質問ゼロは無駄になるほど高価です。両方の答えはプレートごとに変わるため、推測はできません。

  1. 何のためのものか? アスペクト比と、テキスト用の余白を残すかどうかを決定します。
  2. ベースからどれだけ離れるか? 忠実な再現 <-> 自由な再解釈。

主観的な軸については質問し、技術的な軸については自分で判断してください。

プロンプトは3つのパートからなり、変化するのはそのうちの1つだけ

コードで構築し、被写体ごとに1ファイル作成します。

STEM    (すべてのプレートで同一) — 画像から読み取ったレンダリング言語
SUBJECT (唯一の変数)              — 1段落、1つの構図
TAIL    (すべてのプレートで同一) — 幾何学 + 否定条件

STEMテンプレート(単語ではなく動きとして):

添付の画像をスタイルとカラーのアンカーとして厳密に使用してください。その正確なレンダリング言語を再現してください:<時代 + メディア>、<色の置き方>、<線の動作>、<テクスチャ / シェーディング技法>、<名前付き顔料、最大2~3、さらに小さなアクセント>、<光の挙動>。添付画像の被写体をコピーしないでください。新しいものを構成してください。

SUBJECT:

そしてTAIL:

<アスペクト比>の構図、フルブリードで端から端まで。枠なし、フレームなし、紙のテクスチャなし、白マージンなし。テキストなし、レタリングなし、サインなし、ロゴなし。

写真ベースの場合はより難しいケースです。スプレッドにコストをかける前に、2Kでプローブしてください。「レンダリング言語を再現し、被写体を変更する」は、スタイライズされたベース(コミックパネル、版画)からは確実にアートを生成します。写真からは、完璧に実行されてもがっかりすることがあります。ベースが写真の場合は3つ目の質問をしてください — 最終的に写真のように見えるべきか、それとも別のもののように見えるべきか? — そして、4枚の4Kプレートの前に、1~2枚の2Kプレートで試してください。

ベースが写真の場合、STEMのスロットは変わりますが、その役割は変わりません。 マークメイキングのスロットを、カメラが決定する6つの項目に置き換えてください:<ストック + フォーマット>、<シャドウの応答>、<光の質と角度>、<パレット、3~4の名前付きカラーと1つのアクセント>、<グレイン / ハレーション / ビネット>、<これではないもの>。最後のスロットが最も重要です。なぜなら、写真プロンプトに対するエンジンのデフォルトは現代のデジタル写真だからです:HDRなし、影の持ち上げなし、デジタル鮮明化なし、シネマティックなティールアンドオレンジグレードなしと指定してください。「影のディテールをまったく保持しない、深くつぶれた黒」のような句は、プロンプトの中で最も負荷のかかる行になり得ます。

また、ベースからその暗示された被写体も読み取ってください(例:誰もいない、上から見下ろしたプライベートな場所)。SUBJECTを書く前に、一文で名前を付けてください。フレーム内に人物を表示しない のような不変条件はTAILに入れてください。

なぜこのように構築するのか:

  • 画像がスタイルを運び、STEMは目に見えるものだけを名前で呼びます。 見えるマークメイキングを説明してください — 太さの異なるハードな黒の輪郭線、見えるベンデイドットのハーフトーンシェーディング、エアブラシによる機械的なブレンドのみ、写真のような光はなし。技法を名前で指定することで、モデルがそれを現代化するのを防ぎます。
  • 「被写体をコピーしないで...新しいものを構成してください」は負荷がかかっています。 これがないと、ベースのバリエーションが生成されます。これがあると、ベースの言語でのオリジナル構図が得られ、その中の最高のものはベースを繰り返すのではなく引用します。
  • 顔料を名前で指定し、アクセントを制限してください。 アクセントについて特に「小さく」と言わないと、アクセントがフレームを支配します。
  • 否定条件は単なる定型文ではありません。 エンジンは独自の判断でペーパー/リソボーダーを追加します。TAILに4つの否定条件を入れることはコストゼロです。
  • 同一のSTEM + TAILにより、セットが比較可能になります。 プレート間のすべての違いは、あなたが指定したものです。

被写体は「視点」でなければならず、飾りであってはならない

最も重要なクリエイティブな決定です。カメラの位置が異なる4つの被写体:

プレート視点例
spire垂直軸を真上に見上げる雲海からそびえる塔、遠近法で細くなる
wreck何もない平原を横切って見る半分埋まった難破船、そこへ歩いていく小さな人影
descent雲を急降下して見下ろす皿のような海から湾曲した地平線へ、一人の人物が落ちていく
mandala純粋なパターンを、地平線なしで見る対称的なロゼット、隅から隅まで

プレートはその視点のために出荷されます:垂直のコラムはレターボックスバナーのクロップに耐え、空に対する単一のシルエットは正方形のアバタークロップに耐えます。家具が異なるだけの4枚のプレートはすべて同じようにクロップされます — つまり、4つのコスチュームを着た1つのオプションにすぎません。各プレートに1つのアイデアを。

ブリーフに照らしてランク付け — そして、各「表面」がどのプレートを望むかを述べる

2つの異なる順序付け。ベースに対して正直にランク付けし、逸脱したプレートを挙げてください。次に、宛先の表面ごとに、その表面がどのプレートを望み、なぜクロップがそうさせるのかを1行追加してください。忠実度で最下位にランクしたプレートが、適切なバナーになることがあります。低いランクは拒否ではなく、一つの軸です。

クロップをカットする。すべての表面には幾何学がある。

ソースプレートではなく、宛先に合わせたサイズのファイルを納品します。

YouTubeチャンネルバナー — 16:9で1アップロード;YouTubeはデバイスごとに異なるスライスを配信します。

  • 保存 / TV:2560x1441。
  • デスクトップストリップ:2560x424、垂直方向の中央約29.4%(上35.3% -> 下64.7%)。表示される必要があるものはすべてその帯域に収めます。
  • 縦長の9:16プレートは、16:9クロップに必要な高さの約3倍あります:帯域を選択し、デフォルトで中央を受け入れないでください。

チャンネルアバター — 正方形、900x900から88x88まで配信。88pxで判断します。

チャンネルが実際に何を配信しているかを読み取るには:

UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36"
curl -sL -A "$UA" "https://www.youtube.com/@<channel>" | grep -o '"banner".\{0,400\}'
# fcrop64の16進数は、0xffffに対する4つの16ビット分数:左、上、右、下
python3 -c "h='00005a57ffffa5a8'; print([round(int(h[i:i+4],16)/0xffff,4) for i in range(0,16,4)])"

他の表面については、クロップする前に実際の配信アセットを測定してください。記憶している仕様シートを信頼しないでください。

メカニクス

  • 貼り付けられたベース画像はディスク上にありません。 セッションのトランスクリプトからbase64を抽出し(make-art にスニペットがあります)、4K生成にコストをかける前に確認してください。
  • スプレッドは並行して生成し、プレートごとに1つのシェルコールを実行します。4枚の4Kプレートは約2分で生成されます。
  • --out foo.png はJPEGを書き込む可能性があります。 出力されたMIMEタイプを確認し、必要に応じてリネームしてください。
  • ユーザーより先に自分で全てのフレームを確認し、ペーパーボーダーを目視ではなくプローブで確認してください:非対称なほぼ白のエッジのラインは、空や雲が塗り足しに当たっているものであり、フレームではありません。

ベース画像がない場合

同じ3部構成のプロンプトはアンカーなしでも機能します。STEMはあなたが定義するハウススタイルになります。ユーザー自身の素材(名言集、ムードボード)からテーマ別アンカーを与え、汎用的にならないようにしてください。

アイコンとアバター:小サイズテストが唯一のテスト

ランキングはフルサイズと実サイズで逆転することがあります。意見を持つ前にコンタクトシートを作成してください:実際のレンダリングサイズにダウンスケールし、アプリのようにサークルクロップし、最近傍補間でアップスケールして何が残るかを確認します。

from PIL import Image, ImageDraw
for s in (110, 44, 32):                      # IG: プロフィール / DM行 / フィード+ストーリーリング
    small = Image.open(f"{n}.jpg").convert("RGB").resize((s, s), Image.LANCZOS)
    mask = Image.new("L", (s*4, s*4), 0)
    ImageDraw.Draw(mask).ellipse((0, 0, s*4-1, s*4-1), fill=255)
    out = Image.new("RGB", (s, s), (245, 245, 247))
    out.paste(small, (0, 0), mask.resize((s, s), Image.LANCZOS))
    out.resize((s*5, s*5), Image.NEAREST).save(f"{n}_{s}.png")   # NEAREST = ピクセルを見る

110pxで美しいプレートが、44pxでは読み取れないスミアになることがあります。Instagramの幾何学: 正方形でアップロード(1024x1024で問題ありません)、円形でレンダリング、プロフィールで約110px、DM行で44px、フィードまたはストーリーリングで32px。32pxで判断してください。

フルサイズでは見えない、違いを生む4つの制約:

  1. 3つのフラットカラー、それ以上は不可。 追加の色はすべて中間調であり、中間調は混ざります。
  2. フレームの1/40より細いものはなし。 数値としてプロンプトに記述してください。
  3. エンブレムは幅の85%以上を占める必要があります。 大文字で記載してください;そうしないと、エンジンは控えめなマークを多くの空き地の中央に配置します。
  4. ホットカラーはグリントではなく、GROUNDに属します。 スペキュラーハイライトは32pxでは無意味です。ホットカラーの全面フラットフィールドがサムネイルを止めます。メタリックシーンの指示は縮小すると泥のように見えます。

エンジンが独自に追加する2つのもの

  • プロンプトで円形クロップについて決して言及しないでください。 エンジンが円を描いてしまいます。代わりに、*「平らで途切れのないグラウンドが正方形の4辺すべてに達している;エンブレムは中央の4分の3以内に十分収まっている」*と述べ、TAILにno circle, no ring, no roundel, no enclosing shapeを入れてください。
  • 禁止しない限り、放射状ビネットを追加します。 「すべての塗りつぶしは完全にフラット — グラデーションなし、ビネットなし、角や端の放射状暗化なし。」 を要求してください。

スタイルの説明からベース画像をクレジットしないでください

あなたが書いたスタイルフレーズ(「メビウスの伝統で」)は帰属表示ではありません。それが後段でクレジットにならないようにしてください。クレジットが公開される場合は、実際のアーティストを尋ねてください。実際のアーティストに対する間違ったクレジットは、空白よりも悪いです。

複数のベース画像

--image は繰り返し可能なので、複数のアンカーも可能ですが、テストは十分ではありません。プロンプトでどの画像が何を提供するかを指定し(「画像1は色と線の言語、画像2は構造」)、最初のスプレッドをプローブとして扱ってください。

関連項目

brand-direction-plates(逆のスプレッド:1つの被写体に対して複数の言語)· make-art(エンジン、フラグ、ペースト抽出、ボーダープローブ)。

Individual skills in this repo

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

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

関連スキル