ローカルの FLUX 3 Klein と Pillow で「似たロゴばかり」問題を解く:ロゴ設計スキルを作って公開した
はじめに
先日、壁紙サイトのロゴを作り直しました。ところが、最初に作った案は「角丸の H にグラデーション」の色違いばかりで、6 案並べても見分けがつきませんでした。
そこで 「1 つの案を磨く」のではなく「まったく違う案を一度に出して、比較シートで落とす」 という手順に変え、その手順をコーディングエージェント用の スキル(logo-design) としてまとめました。この記事では、その手順と、実際にハマったところを書きます。
- 環境:Mac(Apple silicon)、ローカルの ComfyUI、FLUX 3 Klein、Python(Pillow / numpy)
- 完成物:スキル一式(スクリプト 5 本 + 手順書 + 事例画像)
- 公開先:SkillPeek の logo-design ページ
!!! info
ロゴの「唯一性」はこのスキルでは保証できません。最終候補は必ず画像検索と商標検索で確認してください(後述)。
何が問題だったか
最初の反復は、色や角の丸みを変えただけの案でした。「角丸 H + グラデーション」「山の形の横棒つき H」…と並べても、別のロゴには見えません。
そこで考え方を変えました。
| やり方 | 結果 |
|---|---|
| 1 つの案の色や形を少しずつ変える | 6 案がほぼ同じに見える |
| 切り口そのものを変えて 6 案つくる | 比較する意味が出る |
切り口の例は次のとおりです。
- 文字どおりの物(色見本のカード)
- モノグラム(頭文字)
- 抽象図形
- 名前のメタファー(Hue = 色相、Walls = 壁)
- プロダクトの絵文字化(スマホ = 壁紙)
- 質感で見せるエンブレム
方針:AI と「コードで描く」の二本立て
得意なことが違うので、両方で案を出します。
| 目的 | 使うもの | 理由 |
|---|---|---|
| 質感・グラデーション・意外な発想 | ローカルの FLUX 3 Klein(ComfyUI 経由) | 手で描くより見栄えがする |
| 正確な形・対称・個数・特定の文字 | Pillow | 小さくてもシャープで、色の差し替えも簡単 |
logo-design/
├── SKILL.md 手順・経験則・限界
├── assets/
│ ├── flux3_klein_api.json ComfyUI のワークフロー(API 形式)
│ └── prompts.md FLUX 用プロンプトと結果の評価
└── scripts/
├── flux_concepts.py FLUX で案を出して保存
├── shapes.py コードで描く幾何ロゴ 6 種
├── contact_sheet.py 明暗 2 背景 + 64/32/16px の比較シート
└── export_kit.py 選んだ案から一式を書き出し
① コードで描く:supersampling で縁をきれいに
2048px で描いて 1024px に縮小するだけで、縁のギザギザがほとんど消えます。座標は 0〜100 のグリッドにそろえておくと、案の追加が楽です。
K = 2048
U = K / 100 # 0〜100 の座標を実ピクセルに換算
def phone_sun(ink, acc, **_):
"""スマホの輪郭と点が 1 つ。壁紙を示す最短の記号。"""
im, d = canvas()
d.rounded_rectangle([27*U, 8*U, 73*U, 92*U], radius=14*U,
outline=ink, width=int(6*U))
d.ellipse([40*U, 34*U, 60*U, 54*U], fill=acc)
return done(im) # 2048 -> 1024 に LANCZOS で縮小
2 つの円を重ねて乗算色にする案は numpy で作ります。重なり部分の色は ink * acc / 255 です。
a = (x - 38) ** 2 + (y - 50) ** 2 < 28 ** 2
b = (x - 62) ** 2 + (y - 50) ** 2 < 28 ** 2
o = np.zeros((K, K, 4), dtype="uint8")
o[a] = ink; o[b] = acc
o[a & b] = [*(np.array(ink[:3]) * np.array(acc[:3]) // 255), 255]
色は --ink 14141c --accent ff5c5c のように # なしの 16 進で渡します(理由は後述)。
python3 scripts/shapes.py --out marks/ --ink 14141c --accent ff5c5c
② FLUX で描く:ComfyUI の HTTP API を叩くだけ
ComfyUI を起動・再起動するコードは書きません。すでに動いている ComfyUI にプロンプトを投げて、結果を /view で取ってくる だけです。
HOST = os.environ.get("COMFY_URL", "http://127.0.0.1:8188")
p = json.loads(TEMPLATE.read_text()) # API 形式のワークフロー
p["18:17"]["inputs"]["value"] = text # プロンプト
p["18:6"]["inputs"].update(width=w, height=h) # 画像サイズ
p["18:7"]["inputs"].update(seed=seed, steps=30, cfg=3.5)
pid = call("/prompt", {"prompt": p, "client_id": "logo-design"})["prompt_id"]
# 完了後に /history を見て、/view で画像を保存
q = urllib.parse.urlencode({"filename": im["filename"],
"subfolder": im.get("subfolder", ""),
"type": im.get("type", "output")})
out.write_bytes(urllib.request.urlopen(HOST + "/view?" + q).read())
768×768、30 ステップで 1 枚あたり約 145 秒でした(M4 Max)。
プロンプトの型
毎回この共通部分から始め、最後に概念を 1 文だけ足します。
Professional brand logo mark design, a single centered emblem on a clean
plain background, flat vector style, bold simple shapes, highly memorable
and eye-catching, modern app icon quality, award-winning identity design,
no text, no letters, no mockup.
概念の例:Three rounded rectangular paint color swatch cards fanned out like a hand of cards, in coral red, golden yellow and turquoise, overlapping with soft rounded corners, on an off-white background.
③ 結果:FLUX は「質感」は強いが「数」と「枠」に弱い
6 案を並べた結果です(左上から順に、色見本のカード / レトロな夕日 / 色相の水滴 / カラータイルの壁 / オーロラ / めくれた壁紙)。
| 案 | 評価 |
|---|---|
| 色見本のカード | きれいで使える。2〜3 色のシンプルな物が得意 |
| レトロな夕日 | 良いが、よくあるシンセウェイブ調。類似ロゴの確認が必要 |
| 色相の水滴 | 6 案の中で質感は一番。光沢やグラデーションは AI が圧勝 |
| カラータイルの壁 | 失敗。「3×3 の 9 枚」のはずがタイルの数も並びも崩れた |
| オーロラ | 波は良いが、角丸の枠が左右非対称になった |
| めくれた壁紙 | 頼んでいない花が描き足された。比喩の多いプロンプトは余計な物を生む |
ここから得た経験則は次のとおりです。
- 1 つのプロンプトに 1 つの概念。2 つ入れると混ざる
- 色は「coral red」「turquoise」のような言葉で書く。16 進コードは書かない
- 個数・格子・左右対称はモデルに任せず、コードで描く
- 文字もモデルに任せない。ワードマークは後からコードで載せる
- 同じプロンプトでシードだけ変えても似た絵になる。6 回回すなら概念を 6 つ変える
- 出力はラスターなので、選んだ案はベクターで描き直す
④ 比較シート:16px で読めない案を早めに捨てる
contact_sheet.py は、フォルダ内の PNG を 明るい背景・暗い背景の 2 枚にして、64 / 32 / 16px の縮小プレビューを付けて並べます。
仕上げる前にここで落とすのが肝心です。
- 細い線・小さな点・ハーフトーン調は、favicon サイズで潰れる
- 濃い色だけの案は、暗い背景で消える(板を敷くか、暗い版を別に作る)
- 「きれい」より「名前に合っている」案のほうが、結局は評価が高かった(スマホ=壁紙、色見本のカード=Hue)
⑤ 一式書き出し
選んだ案(透過 PNG)から、1 コマンドで一式を作ります。
python3 scripts/export_kit.py marks/4_swatch_fan.png --name paletta --out kit/ --tile light
出力:mark.png / mark-black.png / mark-white.png(シルエット)、lockup-light.png / lockup-dark.png、favicon.ico(16/32/48)、apple-touch-icon.png、icon-512.png、og-1200x630.png、preview.png。
実際の広告バナーに載せた例です。ワードマークやコピーはコードで重ねているので、綴りは常に正しくなります。
⑥ スキルとして公開するときにハマったこと
スキルは「書いた」だけでは足りず、エージェントが実際に使って動くかを試す必要がありました。隔離フォルダにこのスキルだけを入れ、3 つのスクリプトだけを許可して claude -p で試用しました。
最初の 2 回は許可待ちで止まり、成果物が出ませんでした。
- 1 回目:実行しようとしたコマンドに、引用符つきの
"#14141c"が含まれていました。引用符内の#が権限チェックで引っかかるのではないかと疑い、色引数を#なし(14141c)に変えました。これが本当の原因かは確認できていません(変えたあと 2 回目は別の理由で止まったため)。 - 2 回目:エージェントが
--helpやmkdirまで許可待ちになりました。手順書にある相対パス(scripts/shapes.py)で実行しようとした可能性があると考え、**「スクリプトは出力フォルダを自分で作る」「インストール先のパスで実行する」**を手順書に追記しました(これも推測です)。 - 3 回目で成功し、試用の記録をそのまま「演示」として載せました。
試用の出力は、スキルを褒めるだけではありませんでした。
- 暗い背景で濃い色のロゴが消えることを、自分で指摘した
- 6 番目の案が「P」ではなく「H」で、このブランドには不適切だと指摘した
- 色見本のカードは 16px で 3 本の縞に潰れる、と正直に書いた
このあたりの記録を加工せず出す、というのがスキル公開時のルールでした。
ライセンスと限界
FLUX 3 Klein の重みは FLUX Kommunity License v1.0 です。公式ブログと Hugging Face の LICENSE.md を確認した範囲では、次のとおりです。
- 本人と関連会社を合わせた年間売上が 500 万米ドル未満なら、無料で商用利用できる
- 生成物の所有権は主張されないが、公開前に内容を確認するか、フィルターをかけることが求められる
- 法令で必要な場合は AI 生成であることを開示する
- 生成物を使って他の AI モデルを訓練・蒸留することは禁止
!!! warning
私が読んだのは要約ツール越しの内容で、逐語の全文ではありません。商用で使う前に、必ず原文を読んでください。
https://huggingface.co/black-forest-labs/flux-3-image-klein-base/blob/main/LICENSE.md
また、ローカルで使う量子化版(コミュニティ版)には別のライセンス表記がある場合があります。
このスキルにできないこともあります。
- ロゴの唯一性は証明できません。Google レンズ・TinEye での画像検索と、USPTO / EUIPO(TMview)/ WIPO の商標検索を、最終候補のマークと名前の両方で行ってください
- ラスター画像からベクター(SVG)は作りません。選んだ案は描き直すか、トレースしてください
- 試用で確認したのはコード描画の経路だけです。ComfyUI + FLUX の経路は、試用環境に ComfyUI がなく、作者が手元で別に動かしただけです
まとめ
- ロゴ作りは、**「磨く」前に「まったく違う案を広く出して、比較シートで落とす」**ほうがうまくいった
- 質感は AI、正確さはコード。個数・対称・文字はコードに任せる
- 小さいサイズ(16px)と明暗 2 つの背景での確認は、早い段階でやる
- スキルは書いたあとに、エージェントに実際に試用させると、手順書の穴が見つかる
付録:使い方
エージェントに次のように頼むだけで動きます。
Paletta という、カラーパレットを見てスマホの壁紙にできるアプリのロゴを作って。
ミニマルで親しみやすく、紫は使わない。6 つのまったく違う方向を出して、
明暗の背景と 16px で比較し、上位 2 案を理由つきで教えて。
手動で動かす場合は、次の 3 コマンドです。
python3 scripts/shapes.py --out marks/ --ink 14141c --accent ff5c5c
python3 scripts/contact_sheet.py marks/ --out sheet.png --name paletta
python3 scripts/export_kit.py marks/4_swatch_fan.png --name paletta --out kit/
- スキル本体(MIT):SkillPeek / logo-design
- 動作要件:Python 3.9 以上、Pillow、numpy。AI 案を出す場合は、FLUX 3 Klein を読み込んだ ComfyUI が必要です



