Community画像github.com

fluxpediawork/blob-portrait

写真(自撮り、ポートレート、商品写真など)を、ランダムノイズから勾配降下法で学習した数万個のソフトカラーブロブで再現します。ペインティング、写真vsコード比較、ズーム証明、ノイズ→画像GIFを出力します。画像を「コードで再構築」「勾配降下」したい、または「どちらが写真?」リールを求められたときに使用します。

blob-portrait とは?

Blob Portrait は、与えられた写真を数万個の2Dガウシアンブロブで描き出すAIエージェントスキルです。このスキルは、画像生成モデルを使用せず、勾配降下法(Adamオプティマイザ)によってブロブの位置、スケール、角度、色、透明度を最適化し、L1損失とSSIM損失を最小化することで、ピクセル単位で写真を再現します。主に Claude Code、Cursor、Codex などのコーディングエージェント向けに設計されており、ユーザーが「写真をコードで再現して」「勾配降下で画像を描いて」と依頼したときに活用できます。特徴として、エラーの高い領域に新しい小さなブロブが自動追加されるため、顔など詳細部分に集中して学習が進みます。出力は完成画像、比較画像、拡大証明、学習過程GIF、全ブロブデータなど多岐にわたり、PSNRによる品質評価も可能です。CPUでも動作しますが、GPU推奨で高品質な結果を得られます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fluxpediawork/blob-portrait/tree/HEAD

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

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

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

ドキュメント

ブロブポートレート:写真の勾配降下

写真を2Dガウシアンブロブで描画します。1500個のランダムブロブから始め、各ステップでそれらをレンダリングし、写真との誤差(L1 + SSIM)を測定し、各ブロブを少しずつ移動させて誤差を減らします(Adam)。誤差が最も大きい場所には新しい小さなブロブが出現します。画像生成器は関与せず、画像は学習されます。

手順

  1. 写真を入手する。 添付ファイルを使用します。--focus(最も密な学習を行う領域、通常は顔)を設定できるよう、被写体の位置を確認します。

  2. インストール。 Python 3.10+。

    pip install -r requirements.txt   # torch, numpy, pillow
    

    PyTorchインデックスがブロックされている場合は、PyPIから単純に pip install torch で動作します。

  3. プリセットを選ぶ。 利用可能なハードウェアと時間に基づいて選択します。

    プリセットステップ数最大ブロブ数2コアCPUGPU
    quick30015,000~8分~1分
    default1,60045,000~35分~5分
    full6,000100,000時間単位~20-40分

    CPUの場合は、defaultをバックグラウンドで実行し、ログを確認します。処理中はブロックしないでください。

  4. 実行。

    python scripts/blobfit.py photo.jpg --out result/ --preset default \
        --aspect 4:5 --focus 0.5,0.4,0.45,0.5
    
    • --aspect は中央を中心に w:h にクロップします(none で写真の元の形状を保持)。
    • --focus cx,cy,w,h はクロップ後の画像の0-1範囲です。中央の自撮りでは 0.5,0.4,0.45,0.5 で顔をカバーします。
    • --steps / --blobs でプリセットを上書きできます。
    • デバイスは自動選択:CUDA → Apple MPS → CPU。
  5. 結果を確認してから納品する。 compare.jpg と zoom.jpg を開いて確認します。stats.json にPSNRが記録されています:約28-30dBでソフトな類似度(quick)、38dB以上で通常サイズでは区別がつきにくくなります。顔がソフトな場合は、ステップ数を増やすか --focus を顔に合わせて再実行します。

  6. 納品。 compare.jpg、render.png、training.gif を送ります。ブロブ数とステップ数、PSNR、そして生成ではなく学習で作成されたことを伝えます。

出力

ファイル説明
render.png最適化されたサイズでのブロブペインティング
compare.jpg実際の写真とコード版の比較
zoom.jpg目周辺の拡大証明
training.gifノイズから画像へ、マイルストーン毎のフレーム
blobs.npzすべてのブロブ:位置、スケール、角度、色、強度(再レンダリングやアニメーション用)
stats.jsonステップ数、ブロブ数、PSNR、経過秒数、デバイス

正直な限界

  • 1枚の写真を複製します。新しい視点や新しい顔を生成することはできません。
  • 品質はステップ数に依存します:短いCPU実行ではソフトな仕上がりになり、細かい肌の質感には full プリセットが必要です。
  • 背景色は写真の端から取得されるため、ブロブはそれと異なる部分のみを描画すればよいです。

関連スキル