animede/diffusers-image-server

Python

0

9 commits

updated Oct 14, 2026

See the code

README

diffusers-image-server

diffusers-server(port 8601)から Edit 系機能だけを 独立させた軽量画像サーバ(port 8620)。venv とモデル実体(ComfyUI ディレクトリ + HF キャッシュ)は元サーバと共有する。

起動

cd /home/animede/diffusers-image-server
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# LLMプロンプト支援を使う場合
DS_LLM_URL=http://127.0.0.1:64650 venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# 24GB級カードで GGUF 既定にする場合
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# 20GB級カードで参照画像ありEditを使う場合
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m DS_OFFLOAD=model_cpu venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620

UI: http://localhost:8620/ (タブ: 画像生成/編集(Edit統合)・Inpaint・アウトペイント・キャラシート)

API 一覧

エンドポイント内容
POST /api/editQwen-Image-Edit-2511。images 0枚=テキストのみ生成、1〜3枚=指示編集、strength 指定+1枚=Edit-I2I。quant でリクエスト単位切替
POST /api/t2iT2I(model=2512(既定)/qwen-image、quant 切替可)
POST /api/i2iI2I(同上)
POST /api/joyai/editJoyAI-Image-Edit-Plus(マルチ参照 1〜3枚、quant 切替可)
POST /api/iris/t2iIris-3B Turbo T2I(JSON: prompt / width / height / seed / auto_size。4 steps 固定、negative・cfg なし)
POST /generate/Momo Song v5 互換(multipart form → PNG 本体)。Iris-3B で、要求の縦横比のまま約1MPで生成
POST /api/inpaintControlNet Inpainting(image + mask_image、白=再生成領域)
POST /api/outpaint画角拡張(Inpaint 流用。実行前に全モデル解放するため毎回 ~50s のロードコスト)
POST /api/remove_bg背景除去(rembg / anime、CPU)
POST /api/charsheet/generate ほか /api/charsheet/*キャラシート多方向(ジョブ式。views CSV省略時8方向、size省略時1024、256〜2048pxで指定可。refine/undo/remove_bg/split/sheet/zip)
POST /api/prompt/enhance /api/prompt/translateLLMプロンプト支援(DS_LLM_URL)
GET /api/status GET /api/progress POST /api/unload運用系(unload target: t2i/edit/controlnet/joyai/iris/all)

quant の値: 未指定/default=現状維持、gguf-q4_k_m 等、fp8-lightning、none(bf16)。 fp8-lightning への切替は空きVRAM < 44GB なら 400 を返す(GGUF を案内)。

キャラシート(新方式)

元サーバの edit_angles 系3方式は持たず、Edit グループ + fal 2511 Multiple-Angles LoRA の transformer-level アダプタで8方向を生成する(通常 Edit とモデル共有、 切替はアダプタトグルのみで再ロード無し)。プロンプトは構造化タグ <sks> [azimuth] eye-level shot medium shot 8種。size<=768の小画像生成時は、 全身の切り取りを防ぐためLoRA既定語彙のwide shotへ自動的に切り替える。

VRAM 目安(実測)

構成常駐/ピーク
Edit fp8-lightning(既定、48GB級以上)ピーク ~35GB(1024²、TE退避込み)
Edit GGUF Q4_K_M full tier(空き>=30GB)ピーク ~30GB
Edit GGUF Q4_K_M gguf_te_fp8 tier(24GB級、TE nf4)ピーク ~20.6GB
Edit GGUF Q4_K_M model_cpu tier(20GB級)ピーク 17.30GB(参照画像3枚、512²、4 steps)
charsheet(Edit GGUF + lightning+angles アダプタ、96GB機)ピーク ~38.8GB(probe実測、bf16 TE 常駐)
JoyAI bf16ピーク ~33GB
JoyAI GGUF Q4_K_Mピーク ~20.8GB
T2I 2512 fp8-lightningピーク ~35GB
Inpaint / アウトペイント(tiled VAE 既定)ピーク ~39GB(1280×720)
Iris-3B Turbo int8(既定)常駐 ~7.2GB / ピーク ~7.8GB(1344×768、約1.0s/枚、RTX PRO 5000)

Iris-3B Turbo(T2I)

Iris-3B(VAEなしの画素空間DiT 3B、テキストエンコーダ Qwen3-VL-4B-Instruct)に 4-step Turbo LoRA をロード時にマージして生成する。diffusers のパイプラインではないため、推論コード iris-3b-turbo のチェックアウトを sys.path に足して使う (共有 venv へは pip install しない。本 venv の torch 2.9 / transformers 5.1 で動作確認済み)。

git clone https://github.com/pentaCoxian/iris-3b-turbo ~/iris-3b-turbo
環境変数既定値意味
DS_IRIS_CODE_DIR~/iris-3b-turbo推論コードのチェックアウト
DS_IRIS_CHECKPOINTsperidlabs/iris-3bHF ID(T2I本体の model.safetensors と config.yaml だけ取得)またはディレクトリ
DS_IRIS_LORApentacoxian-dev/iris-3b-turbo-loraTurbo LoRA。owner/repo[:name] またはローカル .safetensors
DS_IRIS_QUANTint8int8(DiT幹+テキストエンコーダを重みint8、常駐 ~7.2GB)/ none(bf16、~13GB)
  • Qwen 系・JoyAI とは同時常駐しない(排他グループ)。切替時は registry が相手を自動 unload する (Iris の再ロードは約10秒)。
  • UI: 「画像生成/編集」タブのモデル選択で「Iris-3B Turbo」。参照画像・ネガティブプロンプト・steps・cfg は 使わない。英語の説明文プロンプトが最もよく効く。
  • Momo Song v5 から使う: Momo Song の .env を IMAGE_BACKEND=remote、 IMAGE_API_URL=http://127.0.0.1:8620、IMAGE_ENGINE=iris にすると、背景画像を本サーバの POST /generate/ で生成する(896×512 の要求は 1344×768 で返る)。GPU 使用中は他 API と同じく 409 を返し、 Momo Song 側は選択中の初期背景を維持する。

20GB級カードでのQ4_K_M model_cpu運用

RTX 4000 SFF Ada 20GBで参照画像ありEditを使う場合は、Q4_K_M transformerと DS_OFFLOAD=model_cpuを使用する。Q3_K_M全常駐では参照画像1枚・768²のみ成功したが、 896²および参照画像3枚・512²でOOMしたため、汎用運用には採用しない。model_cpu tierは transformerと共有コンポーネントを使用段階に応じてCPU/GPU間で移動するため低速になるが、 全常駐用に量子化精度をQ3へ下げる必要がなく、Q4_K_Mの品質を維持できる。 参照画像3枚・512²・4 stepsは実機で生成に成功(77.90s、ピーク17.30GB)。

20GB級の空きVRAMは自動tier判定の既定閾値21.5GBを下回るため、transformerをGPU常駐させる にはDS_OFFLOAD=gguf_te_fp8を明示すること。Inpaint / アウトペイントはQ3_K_L Edit経路を 使用せず、実測ピーク約39GBのControlNet構成をロードするため、20GBカードでは利用不可。

注意

  • コア(core/ families/ apps/charsheet のジョブ機構)は diffusers-server からのコピー。 コア修正は両リポジトリへ反映すること(CLAUDE.md「二重管理注意」参照)。
  • venv へ pip install しないこと(共有 venv)。
  • 詳細な運用知見は本リポジトリ CLAUDE.md と元リポジトリ CLAUDE.md(1〜69番)を参照。

ライセンス

このリポジトリで独自に実装したアプリケーションコードは Apache License 2.0 で提供します。

[!IMPORTANT] Apache License 2.0 は Qwen-Image / Qwen-Image-Edit 系モデルの重み、派生 LoRA・チェックポイント、その他の第三者製コンポーネントには適用されません。各モデルのライセンス(Qwen-Image 系は Apache 2.0、fal の Multiple-Angles LoRA は Apache 2.0、Iris-3B・Iris-3B Turbo LoRA・Qwen3-VL-4B-Instruct は Apache 2.0 等)を個別に確認してください。

diffusers
fastapi
image-editing
image-generation
pytorch
quantization
qwen
text-to-image

animede/diffusers-image-server

Python

0

9 commits

updated Oct 14, 2026

See the code

README

diffusers-image-server

diffusers-server(port 8601)から Edit 系機能だけを 独立させた軽量画像サーバ(port 8620)。venv とモデル実体(ComfyUI ディレクトリ + HF キャッシュ)は元サーバと共有する。

起動

cd /home/animede/diffusers-image-server
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# LLMプロンプト支援を使う場合
DS_LLM_URL=http://127.0.0.1:64650 venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# 24GB級カードで GGUF 既定にする場合
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620
# 20GB級カードで参照画像ありEditを使う場合
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m DS_OFFLOAD=model_cpu venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8620

UI: http://localhost:8620/ (タブ: 画像生成/編集(Edit統合)・Inpaint・アウトペイント・キャラシート)

API 一覧

エンドポイント内容
POST /api/editQwen-Image-Edit-2511。images 0枚=テキストのみ生成、1〜3枚=指示編集、strength 指定+1枚=Edit-I2I。quant でリクエスト単位切替
POST /api/t2iT2I(model=2512(既定)/qwen-image、quant 切替可)
POST /api/i2iI2I(同上)
POST /api/joyai/editJoyAI-Image-Edit-Plus(マルチ参照 1〜3枚、quant 切替可)
POST /api/iris/t2iIris-3B Turbo T2I(JSON: prompt / width / height / seed / auto_size。4 steps 固定、negative・cfg なし)
POST /generate/Momo Song v5 互換(multipart form → PNG 本体)。Iris-3B で、要求の縦横比のまま約1MPで生成
POST /api/inpaintControlNet Inpainting(image + mask_image、白=再生成領域)
POST /api/outpaint画角拡張(Inpaint 流用。実行前に全モデル解放するため毎回 ~50s のロードコスト)
POST /api/remove_bg背景除去(rembg / anime、CPU)
POST /api/charsheet/generate ほか /api/charsheet/*キャラシート多方向(ジョブ式。views CSV省略時8方向、size省略時1024、256〜2048pxで指定可。refine/undo/remove_bg/split/sheet/zip)
POST /api/prompt/enhance /api/prompt/translateLLMプロンプト支援(DS_LLM_URL)
GET /api/status GET /api/progress POST /api/unload運用系(unload target: t2i/edit/controlnet/joyai/iris/all)

quant の値: 未指定/default=現状維持、gguf-q4_k_m 等、fp8-lightning、none(bf16)。 fp8-lightning への切替は空きVRAM < 44GB なら 400 を返す(GGUF を案内)。

キャラシート(新方式)

元サーバの edit_angles 系3方式は持たず、Edit グループ + fal 2511 Multiple-Angles LoRA の transformer-level アダプタで8方向を生成する(通常 Edit とモデル共有、 切替はアダプタトグルのみで再ロード無し)。プロンプトは構造化タグ <sks> [azimuth] eye-level shot medium shot 8種。size<=768の小画像生成時は、 全身の切り取りを防ぐためLoRA既定語彙のwide shotへ自動的に切り替える。

VRAM 目安(実測)

構成常駐/ピーク
Edit fp8-lightning(既定、48GB級以上)ピーク ~35GB(1024²、TE退避込み)
Edit GGUF Q4_K_M full tier(空き>=30GB)ピーク ~30GB
Edit GGUF Q4_K_M gguf_te_fp8 tier(24GB級、TE nf4)ピーク ~20.6GB
Edit GGUF Q4_K_M model_cpu tier(20GB級)ピーク 17.30GB(参照画像3枚、512²、4 steps)
charsheet(Edit GGUF + lightning+angles アダプタ、96GB機)ピーク ~38.8GB(probe実測、bf16 TE 常駐)
JoyAI bf16ピーク ~33GB
JoyAI GGUF Q4_K_Mピーク ~20.8GB
T2I 2512 fp8-lightningピーク ~35GB
Inpaint / アウトペイント(tiled VAE 既定)ピーク ~39GB(1280×720)
Iris-3B Turbo int8(既定)常駐 ~7.2GB / ピーク ~7.8GB(1344×768、約1.0s/枚、RTX PRO 5000)

Iris-3B Turbo(T2I)

Iris-3B(VAEなしの画素空間DiT 3B、テキストエンコーダ Qwen3-VL-4B-Instruct)に 4-step Turbo LoRA をロード時にマージして生成する。diffusers のパイプラインではないため、推論コード iris-3b-turbo のチェックアウトを sys.path に足して使う (共有 venv へは pip install しない。本 venv の torch 2.9 / transformers 5.1 で動作確認済み)。

git clone https://github.com/pentaCoxian/iris-3b-turbo ~/iris-3b-turbo
環境変数既定値意味
DS_IRIS_CODE_DIR~/iris-3b-turbo推論コードのチェックアウト
DS_IRIS_CHECKPOINTsperidlabs/iris-3bHF ID(T2I本体の model.safetensors と config.yaml だけ取得)またはディレクトリ
DS_IRIS_LORApentacoxian-dev/iris-3b-turbo-loraTurbo LoRA。owner/repo[:name] またはローカル .safetensors
DS_IRIS_QUANTint8int8(DiT幹+テキストエンコーダを重みint8、常駐 ~7.2GB)/ none(bf16、~13GB)
  • Qwen 系・JoyAI とは同時常駐しない(排他グループ)。切替時は registry が相手を自動 unload する (Iris の再ロードは約10秒)。
  • UI: 「画像生成/編集」タブのモデル選択で「Iris-3B Turbo」。参照画像・ネガティブプロンプト・steps・cfg は 使わない。英語の説明文プロンプトが最もよく効く。
  • Momo Song v5 から使う: Momo Song の .env を IMAGE_BACKEND=remote、 IMAGE_API_URL=http://127.0.0.1:8620、IMAGE_ENGINE=iris にすると、背景画像を本サーバの POST /generate/ で生成する(896×512 の要求は 1344×768 で返る)。GPU 使用中は他 API と同じく 409 を返し、 Momo Song 側は選択中の初期背景を維持する。

20GB級カードでのQ4_K_M model_cpu運用

RTX 4000 SFF Ada 20GBで参照画像ありEditを使う場合は、Q4_K_M transformerと DS_OFFLOAD=model_cpuを使用する。Q3_K_M全常駐では参照画像1枚・768²のみ成功したが、 896²および参照画像3枚・512²でOOMしたため、汎用運用には採用しない。model_cpu tierは transformerと共有コンポーネントを使用段階に応じてCPU/GPU間で移動するため低速になるが、 全常駐用に量子化精度をQ3へ下げる必要がなく、Q4_K_Mの品質を維持できる。 参照画像3枚・512²・4 stepsは実機で生成に成功(77.90s、ピーク17.30GB)。

20GB級の空きVRAMは自動tier判定の既定閾値21.5GBを下回るため、transformerをGPU常駐させる にはDS_OFFLOAD=gguf_te_fp8を明示すること。Inpaint / アウトペイントはQ3_K_L Edit経路を 使用せず、実測ピーク約39GBのControlNet構成をロードするため、20GBカードでは利用不可。

注意

  • コア(core/ families/ apps/charsheet のジョブ機構)は diffusers-server からのコピー。 コア修正は両リポジトリへ反映すること(CLAUDE.md「二重管理注意」参照)。
  • venv へ pip install しないこと(共有 venv)。
  • 詳細な運用知見は本リポジトリ CLAUDE.md と元リポジトリ CLAUDE.md(1〜69番)を参照。

ライセンス

このリポジトリで独自に実装したアプリケーションコードは Apache License 2.0 で提供します。

[!IMPORTANT] Apache License 2.0 は Qwen-Image / Qwen-Image-Edit 系モデルの重み、派生 LoRA・チェックポイント、その他の第三者製コンポーネントには適用されません。各モデルのライセンス(Qwen-Image 系は Apache 2.0、fal の Multiple-Angles LoRA は Apache 2.0、Iris-3B・Iris-3B Turbo LoRA・Qwen3-VL-4B-Instruct は Apache 2.0 等)を個別に確認してください。

diffusers
fastapi
image-editing
image-generation
pytorch
quantization
qwen
text-to-image