毎週Claude Codeに投稿してもらうブログ記事のカバー画像と部品紹介イラストを、ローカル GPU で自動生成する仕組みを作った。SDXL を素直に動かす段階から、IP-Adapter で実機写真に寄せる段階、img2img で手書き風イラストにする段階まで、生成画像が実際にどう変わるかを 6 枚の比較画像で全部書く。VRAM 6GB マシンで詰まったメモリ制約と、それを回避するために選んだアプローチも含む。
本記事の手順は全てClaude Codeに構築してもらい、記事の執筆も99% Claude Codeだが、試行錯誤の経緯は実話。
この記事でできること
- GTX 1660 SUPER(VRAM 6GB)+ メインメモリ 16GB の Linux PC で SDXL を回す全体像がわかる
- IP-Adapter で「実機の見た目に近い」AI 画像を作れる
- img2img + 高 denoise で「手書き風水彩イラスト」を作れる
- VRAM 6GB マシンで起こりがちなメモリ不足の回避策がわかる
使ったもの
- ComfyUI — ノードベースの SDXL 推論フレームワーク
- Juggernaut XL v9 — 写実系 SDXL チェックポイント(Hugging Face から DL、約 6.7GB)
- ComfyUI_IPAdapter_plus — 参照画像から見た目を寄せるカスタムノード
- IP-Adapter Plus SDXL モデル + CLIP-ViT-H Vision エンコーダ(合計 ~3GB)
- NVIDIA GeForce GTX 1660 SUPER グラフィックボード(VRAM 6GB、Amazonで確認)+ メインメモリ 16GB の Linux PC
なぜローカル生成にしたのか
毎週ブログ記事を 1 本書くペースだと、API 課金型の画像生成サービスは「試行錯誤の心理的コスト」が積み上がる。プロンプトを 5 回練り直すたびに少額が引かれていく感覚が、実験的な調整の手を止めてしまう。ローカル GPU で完結させれば、コストは電気代だけ。気が済むまで --seed を変えて回せる。
もうひとつの理由は依存関係を自分の管理下に置きたいこと。API は仕様変更や値上げ、サービス停止で動かなくなる。ローカル環境ならモデルファイルとコードを保存しておけば、5 年後でも同じ手順で動かせる。
Step 1: ComfyUI + SDXL を素のまま動かす
まず ComfyUI を 公式サイト の手順通りにインストールし、Juggernaut XL v9 を checkpoints/ に配置する。プロンプトに「watercolor illustration of XIAO ESP32-S3」と書いて txt2img を回した結果がこれ:
水彩のスタイル指定は通っているが、絵は架空のガジェット。SDXL のベースモデルは「具体的なボード名」までは学習していないため、それっぽい何かを出力してくる。
Step 2: 「実機の見た目」を出すには参照画像が要る
ブログで「この XIAO ESP32-S3 で温湿度モニタを作りました」と書きたいときに、絵が違うボードでは記事の信頼性が落ちる。AI が学習していない具体的なハードを正確に出すには、実物写真を参照画像として渡す仕組みが要る。それが IP-Adapter。
Step 3: IP-Adapter Plus を導入する
カスタムノード ComfyUI_IPAdapter_plus を custom_nodes/ に clone し、Hugging Face から:
ip-adapter-plus_sdxl_vit-h.safetensors(~700MB)→models/ipadapter/CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors(~2.5GB)→models/clip_vision/
を DL する。XIAO の公式商品写真を参照画像として渡し、weight 0.5 で生成すると:
実物の構造が忠実に再現される。USB-C コネクタ、シールドされた無線モジュール、QR コード状のチップマーキングまで「これは確かに XIAO ESP32-S3」と認識できる。が、よく見るとプロンプトに書いた watercolor illustration の指定は完全に消えて写実調になっている。
IP-Adapter Plus は「style transfer 型」で、参照写真の色・質感・スタイルが結果に強く転写される。これはカバー画像(実物に近づけたい)には強力だが、イラスト調にしたいときは邪魔になる。
Step 4: 「写真」と「イラスト」を使い分けたい
カバー画像は写実調で OK。だが本文中の「使ったもの」セクションで部品を紹介するときは、イラスト調にして視覚的なリズムを変えたい。同じ記事内で全部写実調だと単調になる。
Step 5: IP-Adapter weight を下げてみる(失敗)
素直な発想として、IP-Adapter の weight を下げれば写真感が薄まりプロンプトの指示が通るのでは、と試す。weight を 0.3 まで下げ、ネガティブプロンプトで (photorealistic:1.6) を強く指定した結果:
weight 0.3 でも写真スタイルが支配的。Plus 変種は 低 weight でも style が残る性質があるため、イラスト化用途には根本的に向いていないことがわかる。
Step 6: ControlNet を試したが封印
次に試したのが ControlNet (Canny)。参照写真から輪郭線だけを抽出し、色や質感はプロンプトに完全に任せる、というアプローチ。理屈の上ではイラスト化にぴったり。
動作はする。ただし VRAM 6GB + メインメモリ 16GB の構成で、SDXL + IP-Adapter + ControlNet を同時にロードすると長時間稼働後に他プロセスとのメモリ競合で詰まる事象が頻発した。短時間だけ動けば成功するが、稼働を続けるとプロセスが応答しなくなる。
ブログ更新は cron で毎週走らせたい。その間に詰まると記事が出ない。「動作はするが信頼性が足りない」機能は cron 運用には載せられないので、保守的に封印した。
Step 7: img2img + 高 denoise で解決
残された道は img2img + 高 denoise。仕組みはこうだ:
- 参照写真を VAE エンコードして初期 latent に変換する
- KSampler の
denoiseを高めに設定する(0.9 推奨) - KSampler は初期 latent からサンプリング過程を進めるが、denoise が高いほど「初期 latent の影響が薄れ、プロンプトの指示が支配的になる」
結果、構造(部品の輪郭・配置)はうっすら残るが、色・質感・スタイルはプロンプトが完全制御する。重要なのは:
- カスタムノード追加なし(ComfyUI の標準ノードだけで構成できる)
- 追加モデル DL なし
- メモリ消費は txt2img と同等
つまり ControlNet を回避しつつ「輪郭参照 + プロンプト主導のスタイル」を実現できる。VRAM 6GB マシンで安定して回せる。
Step 8: denoise の最適値を実測で探る
img2img の denoise をいくらにするかが品質を左右する。同じプロンプト・同じ seed・同じ参照画像で 0.8 / 0.85 / 0.9 を比較した。
denoise 0.8
まだ写真寄り。「水彩」のスタイル指定はうっすら効いているが、見た目は写実画像に水彩フィルタを軽くかけた程度。
denoise 0.85
0.05 上げても変化はわずか。やはり初期 latent の写真感が残る。
denoise 0.9
来た。水彩の柔らかさと、XIAO ESP32-S3 の特徴的な形(USB-C コネクタの位置、無線モジュールのシールド、castellated pin の並び)が両立している。denoise 0.9 が現状ベスト値。
0.95 まで上げると今度は構造が崩れて「水彩なんだけど何のボードか分からない」絵になりやすい。0.9 が「形のヒントは残し、スタイルはプロンプト主導」のバランス点だった。
Step 9: 完成したパイプラインを実際の記事にも適用
このパイプラインで、別記事用に Raspberry Pi Pico 2 W のイラストも作ってみた。参照画像は Raspberry Pi 公式 のプレス画像、denoise 0.9、生成時間は約 2 分:
緑色 PCB、castellated pin の金色、micro USB コネクタの位置、無線モジュールのシールド形状がそれぞれ識別できる。同じスクリプト、同じ denoise 0.9 で部品を入れ替えるだけでこの粒度の出力が再現できることが確認できた。
よくある質問
Q. GPU が VRAM 6GB しかなくても動きますか?
A. 動きます。SDXL を fp8 量子化(ComfyUI の起動オプションで --fp8_e4m3fn-unet を指定)で約 4GB に抑え、IP-Adapter を含めても VRAM 5.5GB 程度です。ただし ControlNet を同時にロードすると 6GB 上限に近づき不安定になります。
Q. 1 枚生成に何秒かかりますか?
A. GTX 1660 SUPER で 15 steps の txt2img なら約 90 秒、IP-Adapter 付きで約 120 秒、25 steps の img2img illustration なら約 120 秒です。クラウド GPU に比べると遅いですが、コストは電気代だけなので無制限に試行錯誤できます。
Q. denoise 0.9 が決め手とのことですが、なぜ 0.7 や 0.8 では効果が薄いのですか?
A. img2img では denoise が低いほど初期 latent(参照写真の構造)が結果に強く残ります。0.7-0.85 だと参照写真の写真感がうっすら残ってしまい、プロンプトのイラスト指定が押し負けます。0.9 で初期 latent の影響がほぼ「形のヒント」程度まで弱まり、スタイルはプロンプトが完全制御する状態になります。
Q. なぜ IP-Adapter Plus じゃなく素の IP-Adapter を試さないのですか?
A. 素の ip-adapter_sdxl_vit-h.safetensors は Plus に比べて style 転写が弱いと言われており、選択肢として残っています。ただし img2img + 高 denoise が「カスタムノード追加なし・追加モデル DL なし」という運用上のシンプルさで上回るので、現状はそちらを採用しています。
※本記事の手順は執筆時点(2026 年 5 月)で動作確認していますが、ComfyUI のバージョンや IP-Adapter のモデル更新によりそのままでは動かない場合があります。動かない場合は コメント欄でお知らせください。
まとめ
SDXL → IP-Adapter → img2img と機能を足すたびに、生成画像が「汎用ガジェット → 実機の写実 → 手書き風イラスト」と段階的に変化していく過程を、実際の生成画像 6 枚で見せてきた。
VRAM 6GB のマシンでは 「カスタムノード追加なし」「メモリ消費 txt2img 並み」のアプローチが結局シンプルで強かった。img2img + 高 denoise は新しい技術ではないが、IP-Adapter のスタイル転写問題を回避する手段として再評価する価値がある。
「機能を足せば足すほど良くなる」とは限らない。制約に合わせてアプローチを切り替える柔軟性が、ローカル環境での AI 画像生成では一番大事だった。
この記事が役に立ったら X(Twitter)でシェアしてもらえると喜びます。
関連記事
- ESP32-S3 + ESPHome で部屋のCO2モニタを自作する【2026年版・Home Assistant 連携】 — 本記事の参照画像に使った XIAO ESP32-S3 を使った IoT 記事
参考
※この記事は Claude Code を使った自動更新を試しています。
