A single FastAPI server + web UI that runs multiple state-of-the-art image and video diffusion model families (Qwen-Image family, FLUX.2, Z-Image-Turbo, LTX-2.3 video+audio, JoyAI-Edit-Plus) side by side, with automatic VRAM management, quantization, and a shared comparison UI — built to run comfortably on a single 48GB-class GPU.
(リポジトリ/ディレクトリ名: diffusers-server)
複数のモデルファミリー(Qwen-Image 系 / FLUX.2 / Z-Image-Turbo / LTX-2.3 動画+音声 / JoyAI-Edit-Plus)を単一の FastAPI サーバ + 単一の Web UI で動かす統合画像・動画生成サーバ。 VRAM に同時常駐できないモデル同士は自動でアンロード(排他制御)しながら切り替えるため、 1枚の GPU で複数系統のモデルを使い分けられる。
動画生成の最新版は
diffusers-movie-serverにあります(2026-08-26 方針決定)本サーバが持つ動画機能は LTX-2.3(
families/ltx2)です。 LTX-2.5 と MiniMax-H3(リップシンク)は本サーバには入っていません — これらは別リポジトリdiffusers-movie-server(gateway: ポート 8630)に集約しています。
このサーバ(8601) diffusers-movie-server(8630)画像系(T2I/I2I/Edit/ControlNet/Layered/Tポーズ 等) あり なし 動画 LTX-2.3 LTX-2.5 / MiniMax-H3 リップシンク(歌唱の口パク) なし あり(vocal_lock) 両方を追従して保守するのは手間に見合わないため、動画系の新規開発・追従は
diffusers-movie-server側のみで行います。本サーバの LTX-2.3 は現状維持 (動くものはそのまま残す)で、LTX-2.5 / H3 への更新予定はありません。アプリ側の使い分け: LTX-2.5 や H3(リップシンク)が必要な場合は、 アプリの接続先サーバを
diffusers-movie-server(8630)へ切り替えてください。 画像生成はこのサーバ(8601)、動画は 8630、という併用が想定構成です (実例:mv_studio_V3は画像 8620 / 動画 8630 の2サーバ構成で動いています)。
| 機能 | 目安ピークVRAM | 備考 |
|---|---|---|
| T2I / I2I(Qwen-Image, fp8-lightning) | 約35GB | Lightning LoRA fuse + fp8 layerwise casting |
| Edit(Qwen-Image-Edit-Plus, fp8-lightning) | 約35〜43GB | 解像度依存。1024²は text_encoder の一時 CPU 退避で対応 |
| ControlNet / Inpaint | 約42〜43GB | |
| Layered(RGBAレイヤー分解) | 約42GB | |
| FLUX.2-dev T2I/I2I | 約18〜34GB | オフロード設定依存 |
| Z-Image-Turbo(T2I/I2I/Inpaint) | 約22GB | 単一モデル参照共有、bf16全常駐 |
| LTX-2.3 動画生成(オフロード無し) | 約70〜75GB | 96GB級GPU向け |
| LTX-2.3 動画生成(48GB向けgroupオフロード) | 約35〜43GB | transformer のみ block-level group offload。長尺(15秒級)も対応 |
| JoyAI-Edit-Plus(複数参照編集) | 約33〜34GB | transformer⇔text_encoder 相互オフロードで48GB専有でも動作 |
JoyAI-Edit-Plus(GGUF量子化、DS_JOYAI_QUANT=gguf-q4_k_m) | 約20.8GB | 24GB実機カードで実測(2026-08-18、CLAUDE.md 68番)。品質はbf16と実質同一 |
実際の値は解像度・ステップ数・オフロード設定によって変動します。詳細な実測値は
API_SPEC.md および各エンドポイントのレスポンスに含まれる peak_vram_gb を参照してください。
注意: レスポンスの
peak_vram_gbは 生成フェーズの PyTorch アロケート量であり、 モデルロード中の一時ピークは含みません。ロード時のほうが大きくなるモデルがあるため (LTX-2.3 は生成 17.7GB に対しロード時 約29GB)、必要 VRAM の見積もりにはpeak_vram_gbだけを使わないでください。
48GB 未満の GPU でも、一部の機能は group offload(transformer をブロック単位で GPU⇔ホストRAM に流す方式)を使えば動作します。以下は実機検証の結果です (RTX 4000 SFF Ada Generation 20GB 実機、および 16GB / 24GB は同一機で GPU メモリを バラスト確保して空き容量を制限して再現。2026-08-03 実測)。
要点は text_encoder(Qwen2.5-VL 7B、bf16 で約16GB)をどう扱うかです。
DS_QWEN_TE_QUANT=fp8 を指定すると 15.45GB → 8.74GB に圧縮され(実測)、
16GB カードでも Qwen-Image の T2I / I2I / Edit / ControlNet / Inpaint が動きます。
| 機能 | 16GB | 20GB | 24GB | 実測値 |
|---|---|---|---|---|
| Z-Image-Turbo T2I / I2I / Inpaint | ✅ | ✅ | ✅ | 1024²・8steps: 生成 32.6s / 実使用 12.7GB(16GB 環境でも 31.2s・約12.4GB で成功) |
| Qwen-Image T2I / I2I(TE fp8) | ✅ | ✅ | ✅ | 1024²・8steps: 生成 117.8s / ピーク 9.1GB |
| Qwen-Image Edit(TE fp8) | ✅ | ✅ | ✅ | 1024²・4steps: 生成 99.6s / ピーク 9.2GB |
ControlNet / Inpaint(TE fp8 + group_lowvram) | ✅ | ✅ | ✅ | 1024²・8steps: 生成 241.3s / ピーク 13.1GB |
| Qwen-Image T2I / I2I(TE bf16) | ✗ | ✅ | ✅ | 1024²・8steps: 生成 119.4s / ピーク 15.8GB(初回ロード 36.7s) |
| Qwen-Image Edit(TE bf16) | ✗ | ✅ | ✅ | 640²・4steps: 生成 74.7s / ピーク 15.9GB |
ControlNet / Inpaint(TE bf16 + group) | ✗ | ✗ | ✅ | 1024²・8steps: 生成 102.4s / ピーク 21.7GB(20GB は 19.1GB で OOM) |
Qwen-Image 2512 / fp8-lightning 方式 | ✗ | ✗ | ✗ | bf16 transformer(約40GB)を GPU 上で fuse するため |
Qwen-Image 2512 / GGUF量子化(DS_QUANT=gguf-q4_k_m + DS_T2I_MODEL=2512) | ? | ? | ✅ | 1024²・4steps: 生成10.9s / ピーク 20.49GB(実カード、2026-08-17実測、CLAUDE.md 66番)。16/20GBはmodel_cpu層が本タスクでは未実装のため未検証 |
| キャラシート / Tポーズ / シーンアングル | ✗ | ✗ | ✗ | edit_angles 系は bf16 transformer 約38GB が必要 |
| LTX-2.3(動画) | ✗ | ✗ | ✗ | group + TE nf4 でもロード中に約29GB を要求して OOM |
| Layered / FLUX.2-dev | ✗ | ✗ | ? | 48GB 環境で 33〜42GB。未検証 |
JoyAI-Edit-Plus(GGUF、DS_JOYAI_QUANT=gguf-q4_k_m) | ? | ? | ✅ | 1024²・30steps: 生成266.9s(初回ロード込み) / ピーク 20.81GB(実カード、2026-08-18実測、CLAUDE.md 68番)。品質はbf16と実質同一(平均差0.77/255)。16/20GBは未検証(自動tier判定は本タスクでは未実装) |
✅ = 実機で生成成功を確認 / ✗ = OOM を実機確認、または構成上明らかに不足 / ? = 未検証
16GB / 20GB(Qwen-Image の T2I / I2I / Edit)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group DS_QWEN_TE_QUANT=fp8 \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
16GB / 20GB で ControlNet / Inpaint / アウトペイントも使う場合(group_lowvram に変更)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group_lowvram DS_QWEN_TE_QUANT=fp8 \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
24GB(TE を bf16 のままにでき、group で速度も稼げる)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
Z-Image-Turbo だけを使うなら DS_OFFLOAD=group のみで動きます(text_encoder が bf16 約8GB
と小さく、transformer 11.5GB を group offload できるため 16GB に収まります)。
DS_T2I_MODEL=qwen-image — 既定の 2512 は fp8-lightning 方式専用で、bf16 transformer
(約40GB)を GPU 上で fuse するため 48GB 未満では不可DS_QUANT=none — 同上(fp8-lightning は選べない)DS_OFFLOAD=group — transformer のみブロック単位でオフロード。Lightning LoRA は
この構成でも有効(4steps / 8steps とも利用可)DS_QWEN_TE_QUANT=fp8 — 共有 text_encoder を fp8_e4m3fn ストレージ + bf16 compute の
layerwise casting で圧縮(15.45GB → 8.74GB 実測)。GPU へ載せる前に CPU 上で圧縮するため、
bf16 の16GBが GPU 上に一度も存在しません。同一 seed の bf16 出力と比較して構図・陰影は
ほぼ一致(PSNR 32.3dB、目視で差はごくわずか)。既定は none なので 48GB 運用は無変更ですDS_OFFLOAD=group_lowvram — group に加えて denoise 中は text_encoder も CPU へ退避。
ControlNet / Inpaint のように denoise 側が重い処理で効きます(Inpaint 1024²:
TE fp8 + group は 15.3GB で OOM → group_lowvram なら 13.1GB で成功)。
ただし GPU⇔CPU 往復のぶん遅くなります(同条件で 102.4s → 241.3s)| VRAM | 推奨設定 | 使えるもの |
|---|---|---|
| 16GB | group_lowvram + TE fp8 | Z-Image、Qwen T2I/I2I/Edit、ControlNet/Inpaint |
| 20GB | 同上(T2I/Edit だけなら group のほうが速い) | 同上 |
| 24GB | group(TE は bf16 のままで可) | 同上。TE fp8 を併用すればさらに余裕 |
いずれの場合も 2512 / fp8-lightning、キャラシート系、LTX-2.3(動画)は使えません。
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
重要: diffusers は PyPI のリリース版ではなく git 版が必要です(本リポジトリは
0.40.0.dev0 で動作確認済み)。理由: Z-Image / LTX-2.3 / Layered など一部パイプラインが
リリース版にまだ含まれていない実装に依存しているため。
pip install "git+https://github.com/huggingface/diffusers"
git 版は日々更新されるため、動作確認済みのコミットと異なる場合があります。問題が
発生した場合は requirements.txt に記載のバージョンや、diffusers のコミット履歴から
近い時期のコミットを試してください。
transformers は 5.x 系列を使用します(AutoProcessor が一部モデルで正しく解決できない
既知の問題があるため、Qwen2VLProcessor 等クラスを明示指定するコードになっています)。
CUDA 対応の PyTorch(cu128 系でビルド済みのものを推奨)を GPU 環境に合わせて別途 インストールしてください:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
一部の付随機能は追加パッケージを必要とします(本体の生成機能には不要です。開発環境では ComfyUI 側の site-packages を継承していたため長らく明示されていませんでした):
pip install timm spandrel # timm: 背景除去 BiRefNet HR Matting の remote code が import する
# spandrel: Tポーズの2048アップスケール(Real-ESRGAN x2)
モデルの重みは本リポジトリに含まれません。初回リクエスト時に Hugging Face Hub から
自動ダウンロードされ、通常の HF キャッシュ(~/.cache/huggingface)に保存されます。
既に ComfyUI 環境をお持ちの場合、
DS_COMFYUI_DIR 環境変数(既定 ~/ComfyUI)配下の models/diffusion_models/ や
models/loras/ 等を優先的に参照し、無ければ Hugging Face Hub からダウンロードします。
LTX-2.3(動画生成)は ComfyUI 形式のチェックポイントを前提とするため、
DS_LTX2_CKPT_PATH 等でファイルパスを指定する必要があります(詳細は環境変数表参照)。
Mage-Flow(Microsoft、軽量4.1B T2I/Edit、MIT)は torch 2.13 / transformers 5.5 /
flash-attn 2.8.3 を要求し、本体venvとバージョン衝突するため完全隔離の専用venvで
動かします(--system-site-packages は使わない。comfy-env にもインストールしない)。
# 1) Mage リポジトリの取得
mkdir -p third_party && git clone --depth 1 https://github.com/microsoft/Mage.git third_party/Mage
# 2) 専用venv(完全隔離)
python3.12 -m venv venv-mageflow
# 3) torch は cu130 系(sm_120/Blackwell のカーネルは cu129 以降にしか入っていない。
# cu126/cu128 wheel は sm_120 非対応なので不可)
venv-mageflow/bin/pip install --index-url https://download.pytorch.org/whl/cu130 \
torch==2.13.0 torchvision==0.28.0
# 4) 残りの依存 + ラッパーサービス用パッケージ
venv-mageflow/bin/pip install diffusers==0.38.0 transformers==5.5.0 \
"accelerate>=1.0.0" "safetensors>=0.8.0" einops pydantic pillow loguru \
fastapi uvicorn python-multipart requests ninja
# 5) flash-attn 2.8.3 をソースビルド(必須。varlen packing が唯一のattention経路)。
# nvcc は torch の CUDA メジャーと一致させる(cu130 → /usr/local/cuda-13.0)。
# ★並列数を必ず制限すること(無制限だと 20並列nvcc がホストRAMを食い潰し
# システム全体を巻き込むOOMになった実績あり。CLAUDE.md 50番)
systemd-run --user --scope -p MemoryMax=45G -p MemorySwapMax=0 \
env PATH=/usr/local/cuda-13.0/bin:$PATH CUDA_HOME=/usr/local/cuda-13.0 \
MAX_JOBS=4 NVCC_THREADS=2 TORCH_CUDA_ARCH_LIST="12.0" \
venv-mageflow/bin/pip install --no-build-isolation flash-attn==2.8.3
# 6) mage_flow パッケージ(依存は上で導入済みなので --no-deps)
venv-mageflow/bin/pip install -e third_party/Mage/mage_flow --no-deps
モデル(HF Hub、各リポジトリ自己完結型 diffusers-style)は初回リクエスト時に自動
ダウンロードされます(T2I/Edit 各 base/rl/turbo の6リポジトリ。既定の rl は
microsoft/Mage-Flow + microsoft/Mage-Flow-Edit)。
python -m uvicorn app:app --host 0.0.0.0 --port 8601
起動後、ブラウザで http://localhost:8601/ を開くと Web UI が表示されます。
Mage-Flow を使う場合はラッパーサービスも起動します(別プロセス、既定ポート8602):
./run_mageflow.sh # ポートは DS_MAGEFLOW_PORT で変更可
# 本体側はラッパーへ DS_MAGEFLOW_URL(既定 http://127.0.0.1:8602)で接続する。
# ポートを変えた場合は本体起動時に DS_MAGEFLOW_URL を合わせること。
タブ構成: T2I / I2I / Edit / ControlNet / Inpaint / Layered / 背景削除 / キャラシート / シーンアングル / Tポーズ4ビュー / 動画(LTX-2.3)/ Mage-Flow。
各生成結果パネル・比較ギャラリーカードには、ダウンロードボタンとインスタント背景削除 ボタンが付いています。
主要なエンドポイント:
| エンドポイント | 内容 |
|---|---|
POST /api/t2i / /api/i2i | Qwen-Image系 T2I / I2I(model パラメータでモデル切替。任意 quant パラメータで bf16/fp8-lightning ⇔ GGUF をリクエスト単位で切替可能、2026-08-18追加、CLAUDE.md 69番) |
POST /api/edit | Qwen-Image-Edit-Plus によるマルチ参照画像編集(images は任意・0〜3枚。0枚時は参照画像なしのテキストのみ生成=T2I相当、レスポンスに text_to_image を含む。2026-08-17追加)。任意 strength(0〜1)指定時は Edit(2511)transformer を参照共有した I2I モードになる(画像はちょうど1枚必須、レスポンスに edit_i2i: true を含む。追加VRAMなし、2026-08-17追加)。任意 quant パラメータで bf16/fp8-lightning ⇔ GGUF を切替可能(2026-08-18追加) |
POST /api/controlnet / /api/inpaint | ControlNet(Canny等)/ Inpainting |
POST /api/layered | RGBAレイヤー分解生成 |
POST /api/remove_bg | 背景除去(method で rembg / anime-segmentation / BiRefNet HR Mattingを選択) |
POST /api/flux2/t2i / /api/flux2/i2i | FLUX.2-dev |
POST /api/zimage/t2i / /api/zimage/i2i / /api/zimage/inpaint | Z-Image-Turbo |
POST /api/ltx2/t2v / /i2v / /flf / /ia2v / /keyframes / /v2a / /iclora | LTX-2.3 動画生成(各種条件付け・音声・編集モード) |
POST /api/joyai/edit | JoyAI-Edit-Plus によるマルチ参照画像編集(任意 quant パラメータで bf16 ⇔ GGUF を切替可能、2026-08-18追加) |
POST /api/mageflow/t2i / /api/mageflow/edit | Mage-Flow T2I / Edit(別プロセスへのプロキシ、exclusive で排他選択) |
GET /api/mageflow/status / POST /api/mageflow/unload | Mage-Flow ラッパーの状態確認 / 解放 |
POST /api/charsheet/generate 他 | キャラクターシート生成ジョブ(8方向) |
POST /api/scene_angles/generate 他 | シーンアングル生成ジョブ(1枚のシーン画像→カメラ8アングル、charsheetと同一パイプライン。2026-07-24追加) |
POST /api/tpose/generate 他 | Tポーズ4ビュー生成ジョブ(1枚の画像→正面/背面/左右。T/A/入力ポーズ維持を選択可。ビュー個別DL/ZIP・背景透過版・透過版の白残り補正に対応)。派生: POST /api/tpose/jobs/{id}/edit(生成後の追加編集)/ /undo(1世代の取り消し)/ /upscale(Real-ESRGAN x2 による2048化)/ /refine-alpha(透過版の白残り補正) |
POST /api/outpaint | アウトペイント(画角拡張。既存インペイント流用、中央部は元画像ピクセル保証。2026-07-24追加) |
POST /api/prompt/enhance / /api/prompt/translate | LLM プロンプト支援(要別途LLMサーバ) |
GET /api/status | 全ファミリーのロード状態・VRAM |
POST /api/unload | モデルの明示的アンロード |
生成系エンドポイントは GPU を同時1件のみ使用するグローバルロックで排他され、実行中は
409 を返します。レスポンスには所要時間・ピークVRAM・使用パラメータ・seed 等の統一
メタデータが含まれます。
詳細なパラメータ・レスポンス例・curl サンプルは API_SPEC.md を参照してください。
環境変数名は DS_* に統一されています(主要なもののみ抜粋。全項目は API_SPEC.md /
core/config.py 参照)。
| 変数名 | 既定値 | 説明 |
|---|---|---|
DS_COMFYUI_DIR | ~/ComfyUI | モデル重みの優先探索先(ComfyUI モデルディレクトリ) |
DS_OFFLOAD | ファミリーごとに異なる(auto/none等) | none(全GPU常駐)/ model(model_cpu_offload)/ group(block-level group offload)/ group_lowvram |
DS_ATTN | default | attention backend(default(SDPA)/ xformers 等)。Blackwell(sm_120)では sage 系は非対応 |
DS_COMPILE | 0 | 1 で torch.compile を有効化 |
DS_QUANT | fp8-lightning | Qwen系の量子化方式。fp8-lightning / gguf-q4_k_m 等 / none(bf16) |
DS_T2I_MODEL | 2512 | T2I既定モデル(2512 / qwen-image) |
DS_QWEN_TILED_VAE | 1(2026-07-24追加) | Qwen-Image系の共有VAE(t2i/i2i/edit/edit_angles系/controlnet/controlnet_inpaint)のencode/decodeを常時tiled化。/api/outpaint(1280×720キャンバス等)の大きな画像をVAEエンコードする際のOOM対策(CLAUDE.md 56番)。0で旧動作。Layered VAEは専用チェックポイント(8番)のため対象外 |
DS_QWEN_TE_QUANT | none(2026-08-03追加) | Qwen-Image系の共有 text_encoder(Qwen2.5-VL 7B)の量子化。fp8 で fp8_e4m3fn ストレージ + bf16 compute の layerwise casting を適用し 15.45GB → 8.74GB(実測)に圧縮します。GPU へ載せる前に CPU 上で圧縮するため、bf16 の16GBが GPU 上に一度も存在しません。16GB / 20GB カードで Qwen-Image を動かすための設定です(「16GB / 24GB VRAM 環境での動作」参照)。既定 none は従来どおり bf16 |
DS_VRAM_FREE_THRESHOLD_GB / DS_VRAM_LOW_THRESHOLD_GB | GPU の空きVRAMに応じて調整 | オフロードモードの自動判定しきい値。お使いのGPUのVRAM容量に合わせて調整してください |
DS_FLUX2_PRECISION | bnb-4bit | FLUX.2 の量子化精度(bnb-4bit / bf16) |
DS_ZIMAGE_PRECISION | bf16 | Z-Image の精度(bf16 / bnb-4bit) |
DS_EDIT_TE_OFFLOAD | auto | Edit系の text_encoder CPU退避(高解像度時のOOM対策) |
DS_JOYAI_QUANT | none(2026-08-18追加) | JoyAI-Edit-Plus の transformer GGUF量子化。none(既定、bf16)/ gguf-q4_k_m 等(vantagewithai/JoyAI-Image-Edit-Plus-ComfyUI-GGUF)。24GB実機カードでQ4_K_M実測20.81GB(CLAUDE.md 68番) |
DS_JOYAI_TE_OFFLOAD | auto | JoyAI-Edit-Plus の text_encoder(Qwen3-VL 8B)CPU退避。48GB専有を想定し実質常時有効(CLAUDE.md 47番) |
DS_LLM_URL | http://127.0.0.1:64652 | プロンプト支援機能が呼ぶ、OpenAI互換 /v1/chat/completions を持つローカルLLMサーバのURL(任意機能、無くても他機能に影響なし) |
DS_CHARSHEET_METHOD | bf16-group | キャラクターシート生成の実装方式切替 |
DS_LTX2_CKPT_PATH / DS_LTX2_GEMMA_PATH | ComfyUIモデルディレクトリ配下 | LTX-2.3 のチェックポイント・text_encoderパス |
DS_LTX2_OFFLOAD | group(2026-07-22変更) | LTX-2.3 のオフロードモード(none / group / auto)。autoは空きVRAMの瞬間値で判定するため他ファミリー切替直後にOOMしやすく非推奨(CLAUDE.md 49番)。従来noneモードは長尺(241f超)や768×448級でVAEデコードOOMがあったが、tiled化(下記DS_LTX2_TILED_DECODE)により解消: noneで361f(15秒)・upscaleとも生成可、短尺はgroup比10倍超高速(96GB専有時の選択肢。既定はgroupのまま) |
DS_LTX2_TE_QUANT | fp8(2026-07-22変更) | LTX-2.3 text_encoder の量子化(none / fp8 / nf4)。nf4はGoogle製QAT版の別チェックポイントで品質A/B未確定のため既定に非採用(CLAUDE.md 49番) |
DS_LTX2_TILED_DECODE | 1(2026-07-23追加) | LTX-2.3 の全VAEデコード経路(全モード、upscale有無問わず)を常時tiled化。noneモード長尺OOMの正体だった一括VAEデコード(23.8GiB単発要求)を解消(CLAUDE.md 52番)。0で旧動作 |
DS_BIREFNET_DEVICE | cuda(2026-08-02追加) | 背景除去 birefnet_hr_matting の実行デバイス(cuda / cpu)。既定は GPU 実行(fp16)で、推論中は生成系と同じグローバルロックを取得するため生成リクエストと直列化されます。GPU を生成専用にしたい場合は cpu を指定してください(初回に約444MBのモデルを HF Hub から取得) |
DS_ANIME_SEG_PROVIDER / DS_ANIME_SEG_ONNX | cpu / (HFキャッシュ) | 背景除去 anime(anime-segmentation ISNet)の実行プロバイダ(cpu / cuda)と ONNX ファイルのローカルパス上書き |
DS_UPSCALE_MODEL | (HFキャッシュ) | Tポーズの2048アップスケールが使う Real-ESRGAN x2 重み(ai-forever/Real-ESRGAN の RealESRGAN_x2.pth、64MB)のローカルパス上書き |
DS_MAGEFLOW_URL | http://127.0.0.1:8602 | 本体サーバが Mage-Flow ラッパーサービスへ接続するURL(ポートはハードコードしない。ラッパー未起動時は /api/mageflow/* 生成系が502) |
DS_MAGEFLOW_PORT / DS_MAGEFLOW_HOST | 8602 / 127.0.0.1 | run_mageflow.sh がラッパーサービスを起動するポート/ホスト |
DS_TERMINAL_PROGRESS | 0(2026-07-24追加) | 1 でサーバ起動ターミナル(stderr)へ生成中の進捗バーを表示(\r上書き、完了時は確定行)。charsheet/scene_angles は「direction i/n」も表示。ON時、diffusers パイプライン自前の tqdm(denoiseの25%|██▌|表示)は set_progress_bar_config(disable=True) で抑制(HFダウンロードのtqdmは対象外)。uvicornログとの行混在あり。詳細は CLAUDE.md 55番参照 |
VRAM しきい値はお使いの GPU の空き VRAM に合わせて調整してください。値を大きくしすぎると 本来オフロード不要な構成までオフロードされ低速になり、小さくしすぎると OOM のリスクが 上がります。
LTX-2.3 group オフロードのホスト RAM ガードについて: group モード(既定)は
transformer(bf16 約35.4GB)を一時的にホスト RAM 上に構築してから GPU への block-level
転送に登録する設計のため、パイプラインの初回ロード時(サーバ起動後の最初のLTX-2.3
生成リクエスト、または /api/unload や他ファミリーへの切替でLTX-2.3が一度アンロード
された後の次回ロード時)に、空きホスト RAM(/proc/meminfo の MemAvailable)が
DS_LTX2_GROUP_OFFLOAD_MIN_RAM_GB(既定 40.0GB)を下回っていると、システムフリーズを
避けるためロード自体を明確なエラーメッセージ付きで中止します(旧実装がこのガードを
持たず実際にフリーズ・強制終了を招いた経緯は CLAUDE.md 17番参照)。このガードは
動画の解像度・フレーム数・アップスケール有無とは無関係です(一度ロードされた
パイプラインはそれ以降のリクエストで再チェックされません)。ブラウザ・IDE 等
他アプリのメモリ使用量が大きいマシンでは、LTX-2.3 生成の最初の1回目がこのエラーで
失敗することがあります。その場合は他アプリを閉じるかホストRAMの空きを確保してから
再試行してください(free -h の available 列で確認可能)。閾値を下げる
(DS_LTX2_GROUP_OFFLOAD_MIN_RAM_GB)ことも可能ですが、フリーズのリスクとのトレード
オフのため推奨しません。
モデルの重みは本リポジトリに含まれません。 各モデルは初回利用時に Hugging Face Hub 等から取得され、それぞれ配布元が定めるライセンス・利用規約に従います。以下は本サーバが 呼び出すモデルの一覧です。正確な最新のライセンス条項は必ず各モデルカードを参照して ください(下表は本ドキュメント作成時点の確認結果であり、将来変更される可能性があります)。
| モデル | 配布元 | ライセンス(要各モデルカード確認) |
|---|---|---|
| Qwen-Image | Qwen/Qwen-Image | Apache License 2.0 |
| Qwen-Image-2512 | Qwen/Qwen-Image-2512 | Apache License 2.0 |
| Qwen-Image-Edit-Plus(2511) | Qwen/Qwen-Image-Edit-2511 系 | Apache License 2.0(各モデルカードを参照) |
| Qwen-Image-Lightning LoRA | lightx2v/Qwen-Image-Lightning、lightx2v/Qwen-Image-2512-Lightning | Apache License 2.0 |
| Qwen-Image GGUF量子化(T2I/Edit) | unsloth/Qwen-Image-GGUF、unsloth/Qwen-Image-2512-GGUF、unsloth/Qwen-Image-Edit-2511-GGUF | Apache License 2.0(要モデルカード確認) |
| Qwen-Image-ControlNet-Union | InstantX/Qwen-Image-ControlNet-Union | Apache License 2.0 |
| FLUX.2-dev | black-forest-labs/FLUX.2-dev | FLUX Non-Commercial License(Black Forest Labs。商用利用不可、要モデルカード確認・利用規約への同意が必要) |
| Z-Image-Turbo | Tongyi-MAI/Z-Image-Turbo | Apache License 2.0 |
| LTX-2.3 | Lightricks/LTX-2 | LTX-2 Community License Agreement(要モデルカード確認、独自ライセンス) |
| Gemma 3(LTX-2.3 の text encoder) | Gemma 利用規約(要モデルカード確認) | |
| JoyAI-Image-Edit-Plus | jdopensource/JoyAI-Image-Edit-Plus-Diffusers | Apache License 2.0 |
| MergeGreen IC-LoRA(LTX-2.3用) | siraxe/MergeGreen_IC-lora_ltx2.3 | Apache License 2.0 |
| Mage-Flow(T2I: Base/RL/Turbo) | microsoft/Mage-Flow-Base / microsoft/Mage-Flow / microsoft/Mage-Flow-Turbo | MIT(コード・重みとも。要モデルカード確認) |
| Mage-Flow-Edit(Base/RL/Turbo) | microsoft/Mage-Flow-Edit-Base / microsoft/Mage-Flow-Edit / microsoft/Mage-Flow-Edit-Turbo | MIT(同上) |
本リポジトリ自体(コード)は Apache License 2.0 で公開していますが、上記モデルの 重みを利用して生成したコンテンツやモデルの再配布については、各モデルのライセンス条項が 別途適用されます。特に FLUX.2-dev は非商用ライセンスである点にご注意ください。 商用利用を検討する場合は、Qwen-Image 系・Z-Image-Turbo・JoyAI-Edit-Plus 等の Apache 2.0 モデルの使用を推奨します。
load_lora_adapter())経由で利用できます。 旧来の
pipe.load_lora_weights() 経路は GGUFLinear をPEFTが認識できず失敗しますが、
Edit(2026-08-16、CLAUDE.md 59番・62番)に続き T2I/I2I(2026-08-17、CLAUDE.md 66番)
も同方式に統一したため、GGUF 量子化のまま Lightning 4steps が使えます(8steps用の
Lightning LoRA は無印/2512とも配布されていないため4stepsのみ対応。8steps要求時は
30steps/cfg4.0へ自動フォールバックします)。DS_QUANT=gguf-q4_k_m 等)は空きVRAMに応じて自動的に3段階
(48GB級: 全常駐 / 24GB級: text_encoderのみ量子化(既定nf4) / 20GB未満:
enable_model_cpu_offload())に分かれます。2026-08-16に48GB級・24GB級(fp8)も
実機検証済みで、1024²・目視で破綻なく完走することを確認しました(48GB級ピークVRAM
29.94GB / 24GB級(fp8)23.27GB、いずれもLightning 4steps/cfg1.0込み)。ただし24GB級を
fp8のまま使うと境界値付近(空きVRAMが閾値ちょうど)で1024²のVAE decodeでOOMする
ことがある(実測: 空き23.7GBでOOM)ため、24GB級のtext_encoder量子化は既定を
nf4(bnb 4bit)に変更しました(DS_EDIT_GGUF_MID_TE_QUANT、既定nf4)。
nf4はロード常駐が5.54GiBまで縮む(fp8は8.74GiB)ため、実24GBカード相当
(空き~23.5GB、旧fp8構成のOOM条件より厳しい設定)でも1024²が200 OKで完走し
(ピークVRAM 20.62GB)、full tierとの画素比較でも実質同一(平均絶対差<1/255)を
実機確認しました。fp8構成(26GB以上の空きがある環境向けの逃げ道)を使いたい場合は
DS_EDIT_GGUF_MID_TE_QUANT=fp8 を明示指定してください。詳細は CLAUDE.md 59番参照。
20GB未満の構成(enable_model_cpu_offload()使用時)も動作・品質とも問題ありません:
当初「解像度依存で出力が破綻する」と記録していましたが、2026-08-16の再調査で
model_cpu と全常駐(full)の出力がピクセル完全一致**することを確認し、観測された
劣化の正体は Lightning の scheduler shift × 入力条件による品質限界(quant/offload
方式に一切依存せず、既定の fp8-lightning 構成でも同条件で再現)と確定しました。
高解像度 Edit でプロンプト追従が悪い場合は lightning=false(30steps/cfg4.0)を
試してください。詳細は CLAUDE.md 59番の訂正ブロック参照。
品質を上げたい場合の quant 選択目安(2026-08-17 実測、CLAUDE.md 62番):
Q4_K_M / Q5_K_M / Q8_0 の出力品質は 30steps/cfg4.0 で実質同等(粒状感の差なし)の
ため、品質目的で高精度 quant を選ぶ意味はありません。24GBカードの 1024² 実用上限は
Q4_K_M(Q5_K_M はテキストのみ生成限定・Q8_0 はロード不可)、96GB級で速度優先なら
Q8_0(30steps が Q4 比約26%高速)が目安です。なお GGUF Edit の Lightning 4steps が
生成時に効かないバグ(粒状感の真因)は 2026-08-17 に修正済みです(CLAUDE.md 62番。
修正後は Q4_K_M + Lightning 4steps で fp8-lightning と同水準のシャープさになります)。DS_EDIT_TE_OFFLOAD=auto
の text_encoder CPU⇔GPU退避が無駄なオーバーヘッドだったため(実測 gen 14.4-14.9s →
9.1-9.4s、約38%高速化)、full tier では auto モード時に退避を自動的に無効化するよう
修正しました。24GB級(te_fp8 tier、nf4 既定)は元々このオーバーヘッドが無く同等の速度
(gen 9.14s)です。48GB環境で明示的に24GB級構成(DS_OFFLOAD=gguf_te_fp8)を選ぶ実益は
ピークVRAMを更に抑えたい場合(20.62GB vs 29.94GB)のみで、速度面のメリットはありません。unsloth/Qwen-Image-2512-GGUF)でロードできるように
なりました(2026-08-17追加、CLAUDE.md 66番)。 従来 2512 は fp8-lightning fuse方式
(bf16 transformer 約40GBをGPU上でfuse)のみで48GB未満では利用不可でしたが、GGUF量子化
(DS_QUANT=gguf-q4_k_m 等)なら24GB/20GB級カードでも使えます。Edit の3段階構成
(59番)を簡略化した2段階(full/gguf_te_fp8。model_cpu層は本タスクでは未実装、
20GB級カードでの動作は未検証)を Edit と同じ環境変数(DS_EDIT_GGUF_FULL_VRAM_ FREE_THRESHOLD_GB / DS_EDIT_GGUF_MID_VRAM_FREE_THRESHOLD_GB /
DS_EDIT_GGUF_MID_TE_QUANT)で共有します。実機検証(RTX PRO 4000 Blackwell 24GB、
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m DS_T2I_MODEL=2512、空きVRAM 23.2GB):
/api/t2i(1024²・4steps・lightning)が gguf_te_fp8(nf4 TE)tierへ正しく振り分けられ、
ピークVRAM 20.49GB・生成10.9秒でHTTP 200、/api/i2i(同モデル、strength=0.5)も
ピークVRAM 20.50GB・6.9秒で成功。同サーバで /api/edit(Edit-2511 GGUF)へ切替→
T2I(2512)へ戻す往復もOOMなく動作(下記の家族内相互排他バグ修正が必要だった、後述)。
96GB機(空き92.4GB)では full tierへ正しく振り分けられ、ピークVRAM 35.34GB・
生成2.96秒で完走。品質はfp8-lightning版と目視・ラプラシアン分散比較で同等(GGUF側が
むしろシャープ、725.9 vs 498.4)。無印T2IのGGUF経路(DS_T2I_MODEL=qwen-image)も
回帰確認済み(96GB機、quant=Q4_K_M・full tier・HTTP 200・目視で異常なし)。
本タスクで発見・修正した既存バグ: families/qwen_image/family.py の
Edit切替ロジックは従来 DS_QUANT=fp8-lightning のときのみT2Iグループを事前解放
していましたが、T2IがGGUFで常駐可能になったことで「T2I GGUF(~20GB)+ 共有
(~15.7GB)常駐のままEdit GGUFをロード」という新しい組み合わせが発生し、24GB級
カードで実機OOM(Tried to allocate 30.00 MiB、空き2.69MiB)を確認しました。
GGUF量子化時もT2I事前解放の対象に含めるよう修正し、往復切替が正常動作することを
実機確認済みです。/api/edit は参照画像なし(0枚)でも生成できます(2026-08-17追加、テキストのみ
生成、T2I相当)。 diffusers 本体は無改変で、families/qwen_image/edit_text_only.py
が QwenImageEditPlusPipeline.__call__ のソースをランタイムパッチする方式です
(画像ありの通常経路は完全に無変更)。レスポンスに text_to_image: true/false が
含まれます。24GB実機カード(RTX PRO 4000 Blackwell、DS_QUANT=gguf-q4_k_m)で
gguf_te_fp8(nf4)tier・1024²・200 OK・ピークVRAM 20.34GBを確認済みで、これは
59番・60番で「未検証」としていた「実24GBカードでの gguf_te_fp8(nf4)tier」の
初めての実カード検証も兼ねています(従来はダミーVRAM確保によるバラスト模擬のみ)。
詳細は CLAUDE.md 61番参照。/api/edit に strength(0〜1)パラメータで I2I モードを追加しました
(2026-08-17追加)。 Edit(2511)transformer を参照共有した QwenImageImg2ImgPipeline
を構築するため追加VRAMはゼロです。画像はちょうど1枚必須(0枚・2枚以上・範囲外の
strengthは400)。レスポンスに edit_i2i: true が含まれます。事前A/B(1画像1seedの
限定検証)では無印 Qwen-Image I2I と同等のstrength応答カーブ・同等品質で、被写体保持は
むしろ優位な場面もありました。GGUF Edit(3段階構成)・fp8-lightning既定構成のどちらでも
動作し、実測(24GB実機カード/96GB機とも)で通常I2I相当の生成時間(~3〜9秒)でした。
詳細は CLAUDE.md 64番参照。DS_JOYAI_QUANT=gguf-q4_k_m 等)でロードできます
(2026-08-18追加、CLAUDE.md 68番)。 従来は bf16 のみ(~33GB常駐)でしたが、GGUF
量子化なら実24GBカードでも使えます(実測ピーク20.81GB、Q4_K_M)。品質はbf16と
実質同一(平均差0.77/255)であることを確認済みです。JoyImageEditPlusTransformer3DModel
は from_single_file() 未対応のため手動ロード方式(init_empty_weights() +
DiffusersAutoQuantizer + load_gguf_checkpoint())を使っています。空きVRAM閾値
ベースの自動tier判定(qwen_image Editの59番のような3段階自動選択)は未実装で、
quant はユーザーが明示指定する方式のみです。16GB/20GBカードでの動作は未検証です。/api/t2i /
/api/i2i / /api/edit / /api/joyai/edit の任意 quant パラメータ、および
UI のモデルセレクタ(-gguf 付き選択肢)から選べるようにしました(2026-08-18追加、
CLAUDE.md 69番)。 24番(T2Iモデル切替)と同じパターンで、要求された quant が
現在アクティブな量子化方式と異なれば該当グループを自動 unload → 再ロードします。
quant 未指定/"default"は現状維持(完全後方互換)。fp8-lightning(bf16 40GB
transformerの直接fuse)への切替は、空きVRAMが DS_VRAM_FREE_THRESHOLD_GB
(既定44.0GB)未満だとロード前に400を返します(OOMさせずに明確なエラーメッセージで
拒否)。実機検証(96GB機・24GB実機カード)で t2i/edit/joyai の往復切替・24GBカードでの
400ガード発火・GGUF単体動作を確認済みです(unloadリークなし)。DS_OFFLOAD=group_lowvram(text_encoder も denoise 中は CPU へ退避する設定)は、
denoise 側が重い処理(ControlNet / Inpaint)では効果が大きい一方、T2I のように
プロンプトのエンコード時がピークになる処理ではピークがほとんど下がりません。詳細は
「16GB / 24GB VRAM 環境での動作」を参照。DS_QWEN_TE_QUANT=fp8 の品質影響は T2I 1024²(同一 seed)での比較しか行っていません
(PSNR 32.3dB、目視で差はごくわずか)。長文プロンプトや多言語プロンプトでの追従性は
未検証です。既定は none(bf16)のままなので、48GB 環境の挙動は変わりません。API_SPEC.md — 全エンドポイントの詳細なパラメータ・レスポンス例・curl サンプルLICENSE — 本リポジトリのライセンス(Apache License 2.0)20 commits
1 commits
Python
81.0%
JavaScript
10.3%
HTML
6.2%
CSS
2.4%
A single FastAPI server + web UI that runs multiple state-of-the-art image and video diffusion model families (Qwen-Image family, FLUX.2, Z-Image-Turbo, LTX-2.3 video+audio, JoyAI-Edit-Plus) side by side, with automatic VRAM management, quantization, and a shared comparison UI — built to run comfortably on a single 48GB-class GPU.
(リポジトリ/ディレクトリ名: diffusers-server)
複数のモデルファミリー(Qwen-Image 系 / FLUX.2 / Z-Image-Turbo / LTX-2.3 動画+音声 / JoyAI-Edit-Plus)を単一の FastAPI サーバ + 単一の Web UI で動かす統合画像・動画生成サーバ。 VRAM に同時常駐できないモデル同士は自動でアンロード(排他制御)しながら切り替えるため、 1枚の GPU で複数系統のモデルを使い分けられる。
動画生成の最新版は
diffusers-movie-serverにあります(2026-08-26 方針決定)本サーバが持つ動画機能は LTX-2.3(
families/ltx2)です。 LTX-2.5 と MiniMax-H3(リップシンク)は本サーバには入っていません — これらは別リポジトリdiffusers-movie-server(gateway: ポート 8630)に集約しています。
このサーバ(8601) diffusers-movie-server(8630)画像系(T2I/I2I/Edit/ControlNet/Layered/Tポーズ 等) あり なし 動画 LTX-2.3 LTX-2.5 / MiniMax-H3 リップシンク(歌唱の口パク) なし あり(vocal_lock) 両方を追従して保守するのは手間に見合わないため、動画系の新規開発・追従は
diffusers-movie-server側のみで行います。本サーバの LTX-2.3 は現状維持 (動くものはそのまま残す)で、LTX-2.5 / H3 への更新予定はありません。アプリ側の使い分け: LTX-2.5 や H3(リップシンク)が必要な場合は、 アプリの接続先サーバを
diffusers-movie-server(8630)へ切り替えてください。 画像生成はこのサーバ(8601)、動画は 8630、という併用が想定構成です (実例:mv_studio_V3は画像 8620 / 動画 8630 の2サーバ構成で動いています)。
| 機能 | 目安ピークVRAM | 備考 |
|---|---|---|
| T2I / I2I(Qwen-Image, fp8-lightning) | 約35GB | Lightning LoRA fuse + fp8 layerwise casting |
| Edit(Qwen-Image-Edit-Plus, fp8-lightning) | 約35〜43GB | 解像度依存。1024²は text_encoder の一時 CPU 退避で対応 |
| ControlNet / Inpaint | 約42〜43GB | |
| Layered(RGBAレイヤー分解) | 約42GB | |
| FLUX.2-dev T2I/I2I | 約18〜34GB | オフロード設定依存 |
| Z-Image-Turbo(T2I/I2I/Inpaint) | 約22GB | 単一モデル参照共有、bf16全常駐 |
| LTX-2.3 動画生成(オフロード無し) | 約70〜75GB | 96GB級GPU向け |
| LTX-2.3 動画生成(48GB向けgroupオフロード) | 約35〜43GB | transformer のみ block-level group offload。長尺(15秒級)も対応 |
| JoyAI-Edit-Plus(複数参照編集) | 約33〜34GB | transformer⇔text_encoder 相互オフロードで48GB専有でも動作 |
JoyAI-Edit-Plus(GGUF量子化、DS_JOYAI_QUANT=gguf-q4_k_m) | 約20.8GB | 24GB実機カードで実測(2026-08-18、CLAUDE.md 68番)。品質はbf16と実質同一 |
実際の値は解像度・ステップ数・オフロード設定によって変動します。詳細な実測値は
API_SPEC.md および各エンドポイントのレスポンスに含まれる peak_vram_gb を参照してください。
注意: レスポンスの
peak_vram_gbは 生成フェーズの PyTorch アロケート量であり、 モデルロード中の一時ピークは含みません。ロード時のほうが大きくなるモデルがあるため (LTX-2.3 は生成 17.7GB に対しロード時 約29GB)、必要 VRAM の見積もりにはpeak_vram_gbだけを使わないでください。
48GB 未満の GPU でも、一部の機能は group offload(transformer をブロック単位で GPU⇔ホストRAM に流す方式)を使えば動作します。以下は実機検証の結果です (RTX 4000 SFF Ada Generation 20GB 実機、および 16GB / 24GB は同一機で GPU メモリを バラスト確保して空き容量を制限して再現。2026-08-03 実測)。
要点は text_encoder(Qwen2.5-VL 7B、bf16 で約16GB)をどう扱うかです。
DS_QWEN_TE_QUANT=fp8 を指定すると 15.45GB → 8.74GB に圧縮され(実測)、
16GB カードでも Qwen-Image の T2I / I2I / Edit / ControlNet / Inpaint が動きます。
| 機能 | 16GB | 20GB | 24GB | 実測値 |
|---|---|---|---|---|
| Z-Image-Turbo T2I / I2I / Inpaint | ✅ | ✅ | ✅ | 1024²・8steps: 生成 32.6s / 実使用 12.7GB(16GB 環境でも 31.2s・約12.4GB で成功) |
| Qwen-Image T2I / I2I(TE fp8) | ✅ | ✅ | ✅ | 1024²・8steps: 生成 117.8s / ピーク 9.1GB |
| Qwen-Image Edit(TE fp8) | ✅ | ✅ | ✅ | 1024²・4steps: 生成 99.6s / ピーク 9.2GB |
ControlNet / Inpaint(TE fp8 + group_lowvram) | ✅ | ✅ | ✅ | 1024²・8steps: 生成 241.3s / ピーク 13.1GB |
| Qwen-Image T2I / I2I(TE bf16) | ✗ | ✅ | ✅ | 1024²・8steps: 生成 119.4s / ピーク 15.8GB(初回ロード 36.7s) |
| Qwen-Image Edit(TE bf16) | ✗ | ✅ | ✅ | 640²・4steps: 生成 74.7s / ピーク 15.9GB |
ControlNet / Inpaint(TE bf16 + group) | ✗ | ✗ | ✅ | 1024²・8steps: 生成 102.4s / ピーク 21.7GB(20GB は 19.1GB で OOM) |
Qwen-Image 2512 / fp8-lightning 方式 | ✗ | ✗ | ✗ | bf16 transformer(約40GB)を GPU 上で fuse するため |
Qwen-Image 2512 / GGUF量子化(DS_QUANT=gguf-q4_k_m + DS_T2I_MODEL=2512) | ? | ? | ✅ | 1024²・4steps: 生成10.9s / ピーク 20.49GB(実カード、2026-08-17実測、CLAUDE.md 66番)。16/20GBはmodel_cpu層が本タスクでは未実装のため未検証 |
| キャラシート / Tポーズ / シーンアングル | ✗ | ✗ | ✗ | edit_angles 系は bf16 transformer 約38GB が必要 |
| LTX-2.3(動画) | ✗ | ✗ | ✗ | group + TE nf4 でもロード中に約29GB を要求して OOM |
| Layered / FLUX.2-dev | ✗ | ✗ | ? | 48GB 環境で 33〜42GB。未検証 |
JoyAI-Edit-Plus(GGUF、DS_JOYAI_QUANT=gguf-q4_k_m) | ? | ? | ✅ | 1024²・30steps: 生成266.9s(初回ロード込み) / ピーク 20.81GB(実カード、2026-08-18実測、CLAUDE.md 68番)。品質はbf16と実質同一(平均差0.77/255)。16/20GBは未検証(自動tier判定は本タスクでは未実装) |
✅ = 実機で生成成功を確認 / ✗ = OOM を実機確認、または構成上明らかに不足 / ? = 未検証
16GB / 20GB(Qwen-Image の T2I / I2I / Edit)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group DS_QWEN_TE_QUANT=fp8 \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
16GB / 20GB で ControlNet / Inpaint / アウトペイントも使う場合(group_lowvram に変更)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group_lowvram DS_QWEN_TE_QUANT=fp8 \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
24GB(TE を bf16 のままにでき、group で速度も稼げる)
DS_T2I_MODEL=qwen-image DS_QUANT=none DS_OFFLOAD=group \
venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8601
Z-Image-Turbo だけを使うなら DS_OFFLOAD=group のみで動きます(text_encoder が bf16 約8GB
と小さく、transformer 11.5GB を group offload できるため 16GB に収まります)。
DS_T2I_MODEL=qwen-image — 既定の 2512 は fp8-lightning 方式専用で、bf16 transformer
(約40GB)を GPU 上で fuse するため 48GB 未満では不可DS_QUANT=none — 同上(fp8-lightning は選べない)DS_OFFLOAD=group — transformer のみブロック単位でオフロード。Lightning LoRA は
この構成でも有効(4steps / 8steps とも利用可)DS_QWEN_TE_QUANT=fp8 — 共有 text_encoder を fp8_e4m3fn ストレージ + bf16 compute の
layerwise casting で圧縮(15.45GB → 8.74GB 実測)。GPU へ載せる前に CPU 上で圧縮するため、
bf16 の16GBが GPU 上に一度も存在しません。同一 seed の bf16 出力と比較して構図・陰影は
ほぼ一致(PSNR 32.3dB、目視で差はごくわずか)。既定は none なので 48GB 運用は無変更ですDS_OFFLOAD=group_lowvram — group に加えて denoise 中は text_encoder も CPU へ退避。
ControlNet / Inpaint のように denoise 側が重い処理で効きます(Inpaint 1024²:
TE fp8 + group は 15.3GB で OOM → group_lowvram なら 13.1GB で成功)。
ただし GPU⇔CPU 往復のぶん遅くなります(同条件で 102.4s → 241.3s)| VRAM | 推奨設定 | 使えるもの |
|---|---|---|
| 16GB | group_lowvram + TE fp8 | Z-Image、Qwen T2I/I2I/Edit、ControlNet/Inpaint |
| 20GB | 同上(T2I/Edit だけなら group のほうが速い) | 同上 |
| 24GB | group(TE は bf16 のままで可) | 同上。TE fp8 を併用すればさらに余裕 |
いずれの場合も 2512 / fp8-lightning、キャラシート系、LTX-2.3(動画)は使えません。
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
重要: diffusers は PyPI のリリース版ではなく git 版が必要です(本リポジトリは
0.40.0.dev0 で動作確認済み)。理由: Z-Image / LTX-2.3 / Layered など一部パイプラインが
リリース版にまだ含まれていない実装に依存しているため。
pip install "git+https://github.com/huggingface/diffusers"
git 版は日々更新されるため、動作確認済みのコミットと異なる場合があります。問題が
発生した場合は requirements.txt に記載のバージョンや、diffusers のコミット履歴から
近い時期のコミットを試してください。
transformers は 5.x 系列を使用します(AutoProcessor が一部モデルで正しく解決できない
既知の問題があるため、Qwen2VLProcessor 等クラスを明示指定するコードになっています)。
CUDA 対応の PyTorch(cu128 系でビルド済みのものを推奨)を GPU 環境に合わせて別途 インストールしてください:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
一部の付随機能は追加パッケージを必要とします(本体の生成機能には不要です。開発環境では ComfyUI 側の site-packages を継承していたため長らく明示されていませんでした):
pip install timm spandrel # timm: 背景除去 BiRefNet HR Matting の remote code が import する
# spandrel: Tポーズの2048アップスケール(Real-ESRGAN x2)
モデルの重みは本リポジトリに含まれません。初回リクエスト時に Hugging Face Hub から
自動ダウンロードされ、通常の HF キャッシュ(~/.cache/huggingface)に保存されます。
既に ComfyUI 環境をお持ちの場合、
DS_COMFYUI_DIR 環境変数(既定 ~/ComfyUI)配下の models/diffusion_models/ や
models/loras/ 等を優先的に参照し、無ければ Hugging Face Hub からダウンロードします。
LTX-2.3(動画生成)は ComfyUI 形式のチェックポイントを前提とするため、
DS_LTX2_CKPT_PATH 等でファイルパスを指定する必要があります(詳細は環境変数表参照)。
Mage-Flow(Microsoft、軽量4.1B T2I/Edit、MIT)は torch 2.13 / transformers 5.5 /
flash-attn 2.8.3 を要求し、本体venvとバージョン衝突するため完全隔離の専用venvで
動かします(--system-site-packages は使わない。comfy-env にもインストールしない)。
# 1) Mage リポジトリの取得
mkdir -p third_party && git clone --depth 1 https://github.com/microsoft/Mage.git third_party/Mage
# 2) 専用venv(完全隔離)
python3.12 -m venv venv-mageflow
# 3) torch は cu130 系(sm_120/Blackwell のカーネルは cu129 以降にしか入っていない。
# cu126/cu128 wheel は sm_120 非対応なので不可)
venv-mageflow/bin/pip install --index-url https://download.pytorch.org/whl/cu130 \
torch==2.13.0 torchvision==0.28.0
# 4) 残りの依存 + ラッパーサービス用パッケージ
venv-mageflow/bin/pip install diffusers==0.38.0 transformers==5.5.0 \
"accelerate>=1.0.0" "safetensors>=0.8.0" einops pydantic pillow loguru \
fastapi uvicorn python-multipart requests ninja
# 5) flash-attn 2.8.3 をソースビルド(必須。varlen packing が唯一のattention経路)。
# nvcc は torch の CUDA メジャーと一致させる(cu130 → /usr/local/cuda-13.0)。
# ★並列数を必ず制限すること(無制限だと 20並列nvcc がホストRAMを食い潰し
# システム全体を巻き込むOOMになった実績あり。CLAUDE.md 50番)
systemd-run --user --scope -p MemoryMax=45G -p MemorySwapMax=0 \
env PATH=/usr/local/cuda-13.0/bin:$PATH CUDA_HOME=/usr/local/cuda-13.0 \
MAX_JOBS=4 NVCC_THREADS=2 TORCH_CUDA_ARCH_LIST="12.0" \
venv-mageflow/bin/pip install --no-build-isolation flash-attn==2.8.3
# 6) mage_flow パッケージ(依存は上で導入済みなので --no-deps)
venv-mageflow/bin/pip install -e third_party/Mage/mage_flow --no-deps
モデル(HF Hub、各リポジトリ自己完結型 diffusers-style)は初回リクエスト時に自動
ダウンロードされます(T2I/Edit 各 base/rl/turbo の6リポジトリ。既定の rl は
microsoft/Mage-Flow + microsoft/Mage-Flow-Edit)。
python -m uvicorn app:app --host 0.0.0.0 --port 8601
起動後、ブラウザで http://localhost:8601/ を開くと Web UI が表示されます。
Mage-Flow を使う場合はラッパーサービスも起動します(別プロセス、既定ポート8602):
./run_mageflow.sh # ポートは DS_MAGEFLOW_PORT で変更可
# 本体側はラッパーへ DS_MAGEFLOW_URL(既定 http://127.0.0.1:8602)で接続する。
# ポートを変えた場合は本体起動時に DS_MAGEFLOW_URL を合わせること。
タブ構成: T2I / I2I / Edit / ControlNet / Inpaint / Layered / 背景削除 / キャラシート / シーンアングル / Tポーズ4ビュー / 動画(LTX-2.3)/ Mage-Flow。
各生成結果パネル・比較ギャラリーカードには、ダウンロードボタンとインスタント背景削除 ボタンが付いています。
主要なエンドポイント:
| エンドポイント | 内容 |
|---|---|
POST /api/t2i / /api/i2i | Qwen-Image系 T2I / I2I(model パラメータでモデル切替。任意 quant パラメータで bf16/fp8-lightning ⇔ GGUF をリクエスト単位で切替可能、2026-08-18追加、CLAUDE.md 69番) |
POST /api/edit | Qwen-Image-Edit-Plus によるマルチ参照画像編集(images は任意・0〜3枚。0枚時は参照画像なしのテキストのみ生成=T2I相当、レスポンスに text_to_image を含む。2026-08-17追加)。任意 strength(0〜1)指定時は Edit(2511)transformer を参照共有した I2I モードになる(画像はちょうど1枚必須、レスポンスに edit_i2i: true を含む。追加VRAMなし、2026-08-17追加)。任意 quant パラメータで bf16/fp8-lightning ⇔ GGUF を切替可能(2026-08-18追加) |
POST /api/controlnet / /api/inpaint | ControlNet(Canny等)/ Inpainting |
POST /api/layered | RGBAレイヤー分解生成 |
POST /api/remove_bg | 背景除去(method で rembg / anime-segmentation / BiRefNet HR Mattingを選択) |
POST /api/flux2/t2i / /api/flux2/i2i | FLUX.2-dev |
POST /api/zimage/t2i / /api/zimage/i2i / /api/zimage/inpaint | Z-Image-Turbo |
POST /api/ltx2/t2v / /i2v / /flf / /ia2v / /keyframes / /v2a / /iclora | LTX-2.3 動画生成(各種条件付け・音声・編集モード) |
POST /api/joyai/edit | JoyAI-Edit-Plus によるマルチ参照画像編集(任意 quant パラメータで bf16 ⇔ GGUF を切替可能、2026-08-18追加) |
POST /api/mageflow/t2i / /api/mageflow/edit | Mage-Flow T2I / Edit(別プロセスへのプロキシ、exclusive で排他選択) |
GET /api/mageflow/status / POST /api/mageflow/unload | Mage-Flow ラッパーの状態確認 / 解放 |
POST /api/charsheet/generate 他 | キャラクターシート生成ジョブ(8方向) |
POST /api/scene_angles/generate 他 | シーンアングル生成ジョブ(1枚のシーン画像→カメラ8アングル、charsheetと同一パイプライン。2026-07-24追加) |
POST /api/tpose/generate 他 | Tポーズ4ビュー生成ジョブ(1枚の画像→正面/背面/左右。T/A/入力ポーズ維持を選択可。ビュー個別DL/ZIP・背景透過版・透過版の白残り補正に対応)。派生: POST /api/tpose/jobs/{id}/edit(生成後の追加編集)/ /undo(1世代の取り消し)/ /upscale(Real-ESRGAN x2 による2048化)/ /refine-alpha(透過版の白残り補正) |
POST /api/outpaint | アウトペイント(画角拡張。既存インペイント流用、中央部は元画像ピクセル保証。2026-07-24追加) |
POST /api/prompt/enhance / /api/prompt/translate | LLM プロンプト支援(要別途LLMサーバ) |
GET /api/status | 全ファミリーのロード状態・VRAM |
POST /api/unload | モデルの明示的アンロード |
生成系エンドポイントは GPU を同時1件のみ使用するグローバルロックで排他され、実行中は
409 を返します。レスポンスには所要時間・ピークVRAM・使用パラメータ・seed 等の統一
メタデータが含まれます。
詳細なパラメータ・レスポンス例・curl サンプルは API_SPEC.md を参照してください。
環境変数名は DS_* に統一されています(主要なもののみ抜粋。全項目は API_SPEC.md /
core/config.py 参照)。
| 変数名 | 既定値 | 説明 |
|---|---|---|
DS_COMFYUI_DIR | ~/ComfyUI | モデル重みの優先探索先(ComfyUI モデルディレクトリ) |
DS_OFFLOAD | ファミリーごとに異なる(auto/none等) | none(全GPU常駐)/ model(model_cpu_offload)/ group(block-level group offload)/ group_lowvram |
DS_ATTN | default | attention backend(default(SDPA)/ xformers 等)。Blackwell(sm_120)では sage 系は非対応 |
DS_COMPILE | 0 | 1 で torch.compile を有効化 |
DS_QUANT | fp8-lightning | Qwen系の量子化方式。fp8-lightning / gguf-q4_k_m 等 / none(bf16) |
DS_T2I_MODEL | 2512 | T2I既定モデル(2512 / qwen-image) |
DS_QWEN_TILED_VAE | 1(2026-07-24追加) | Qwen-Image系の共有VAE(t2i/i2i/edit/edit_angles系/controlnet/controlnet_inpaint)のencode/decodeを常時tiled化。/api/outpaint(1280×720キャンバス等)の大きな画像をVAEエンコードする際のOOM対策(CLAUDE.md 56番)。0で旧動作。Layered VAEは専用チェックポイント(8番)のため対象外 |
DS_QWEN_TE_QUANT | none(2026-08-03追加) | Qwen-Image系の共有 text_encoder(Qwen2.5-VL 7B)の量子化。fp8 で fp8_e4m3fn ストレージ + bf16 compute の layerwise casting を適用し 15.45GB → 8.74GB(実測)に圧縮します。GPU へ載せる前に CPU 上で圧縮するため、bf16 の16GBが GPU 上に一度も存在しません。16GB / 20GB カードで Qwen-Image を動かすための設定です(「16GB / 24GB VRAM 環境での動作」参照)。既定 none は従来どおり bf16 |
DS_VRAM_FREE_THRESHOLD_GB / DS_VRAM_LOW_THRESHOLD_GB | GPU の空きVRAMに応じて調整 | オフロードモードの自動判定しきい値。お使いのGPUのVRAM容量に合わせて調整してください |
DS_FLUX2_PRECISION | bnb-4bit | FLUX.2 の量子化精度(bnb-4bit / bf16) |
DS_ZIMAGE_PRECISION | bf16 | Z-Image の精度(bf16 / bnb-4bit) |
DS_EDIT_TE_OFFLOAD | auto | Edit系の text_encoder CPU退避(高解像度時のOOM対策) |
DS_JOYAI_QUANT | none(2026-08-18追加) | JoyAI-Edit-Plus の transformer GGUF量子化。none(既定、bf16)/ gguf-q4_k_m 等(vantagewithai/JoyAI-Image-Edit-Plus-ComfyUI-GGUF)。24GB実機カードでQ4_K_M実測20.81GB(CLAUDE.md 68番) |
DS_JOYAI_TE_OFFLOAD | auto | JoyAI-Edit-Plus の text_encoder(Qwen3-VL 8B)CPU退避。48GB専有を想定し実質常時有効(CLAUDE.md 47番) |
DS_LLM_URL | http://127.0.0.1:64652 | プロンプト支援機能が呼ぶ、OpenAI互換 /v1/chat/completions を持つローカルLLMサーバのURL(任意機能、無くても他機能に影響なし) |
DS_CHARSHEET_METHOD | bf16-group | キャラクターシート生成の実装方式切替 |
DS_LTX2_CKPT_PATH / DS_LTX2_GEMMA_PATH | ComfyUIモデルディレクトリ配下 | LTX-2.3 のチェックポイント・text_encoderパス |
DS_LTX2_OFFLOAD | group(2026-07-22変更) | LTX-2.3 のオフロードモード(none / group / auto)。autoは空きVRAMの瞬間値で判定するため他ファミリー切替直後にOOMしやすく非推奨(CLAUDE.md 49番)。従来noneモードは長尺(241f超)や768×448級でVAEデコードOOMがあったが、tiled化(下記DS_LTX2_TILED_DECODE)により解消: noneで361f(15秒)・upscaleとも生成可、短尺はgroup比10倍超高速(96GB専有時の選択肢。既定はgroupのまま) |
DS_LTX2_TE_QUANT | fp8(2026-07-22変更) | LTX-2.3 text_encoder の量子化(none / fp8 / nf4)。nf4はGoogle製QAT版の別チェックポイントで品質A/B未確定のため既定に非採用(CLAUDE.md 49番) |
DS_LTX2_TILED_DECODE | 1(2026-07-23追加) | LTX-2.3 の全VAEデコード経路(全モード、upscale有無問わず)を常時tiled化。noneモード長尺OOMの正体だった一括VAEデコード(23.8GiB単発要求)を解消(CLAUDE.md 52番)。0で旧動作 |
DS_BIREFNET_DEVICE | cuda(2026-08-02追加) | 背景除去 birefnet_hr_matting の実行デバイス(cuda / cpu)。既定は GPU 実行(fp16)で、推論中は生成系と同じグローバルロックを取得するため生成リクエストと直列化されます。GPU を生成専用にしたい場合は cpu を指定してください(初回に約444MBのモデルを HF Hub から取得) |
DS_ANIME_SEG_PROVIDER / DS_ANIME_SEG_ONNX | cpu / (HFキャッシュ) | 背景除去 anime(anime-segmentation ISNet)の実行プロバイダ(cpu / cuda)と ONNX ファイルのローカルパス上書き |
DS_UPSCALE_MODEL | (HFキャッシュ) | Tポーズの2048アップスケールが使う Real-ESRGAN x2 重み(ai-forever/Real-ESRGAN の RealESRGAN_x2.pth、64MB)のローカルパス上書き |
DS_MAGEFLOW_URL | http://127.0.0.1:8602 | 本体サーバが Mage-Flow ラッパーサービスへ接続するURL(ポートはハードコードしない。ラッパー未起動時は /api/mageflow/* 生成系が502) |
DS_MAGEFLOW_PORT / DS_MAGEFLOW_HOST | 8602 / 127.0.0.1 | run_mageflow.sh がラッパーサービスを起動するポート/ホスト |
DS_TERMINAL_PROGRESS | 0(2026-07-24追加) | 1 でサーバ起動ターミナル(stderr)へ生成中の進捗バーを表示(\r上書き、完了時は確定行)。charsheet/scene_angles は「direction i/n」も表示。ON時、diffusers パイプライン自前の tqdm(denoiseの25%|██▌|表示)は set_progress_bar_config(disable=True) で抑制(HFダウンロードのtqdmは対象外)。uvicornログとの行混在あり。詳細は CLAUDE.md 55番参照 |
VRAM しきい値はお使いの GPU の空き VRAM に合わせて調整してください。値を大きくしすぎると 本来オフロード不要な構成までオフロードされ低速になり、小さくしすぎると OOM のリスクが 上がります。
LTX-2.3 group オフロードのホスト RAM ガードについて: group モード(既定)は
transformer(bf16 約35.4GB)を一時的にホスト RAM 上に構築してから GPU への block-level
転送に登録する設計のため、パイプラインの初回ロード時(サーバ起動後の最初のLTX-2.3
生成リクエスト、または /api/unload や他ファミリーへの切替でLTX-2.3が一度アンロード
された後の次回ロード時)に、空きホスト RAM(/proc/meminfo の MemAvailable)が
DS_LTX2_GROUP_OFFLOAD_MIN_RAM_GB(既定 40.0GB)を下回っていると、システムフリーズを
避けるためロード自体を明確なエラーメッセージ付きで中止します(旧実装がこのガードを
持たず実際にフリーズ・強制終了を招いた経緯は CLAUDE.md 17番参照)。このガードは
動画の解像度・フレーム数・アップスケール有無とは無関係です(一度ロードされた
パイプラインはそれ以降のリクエストで再チェックされません)。ブラウザ・IDE 等
他アプリのメモリ使用量が大きいマシンでは、LTX-2.3 生成の最初の1回目がこのエラーで
失敗することがあります。その場合は他アプリを閉じるかホストRAMの空きを確保してから
再試行してください(free -h の available 列で確認可能)。閾値を下げる
(DS_LTX2_GROUP_OFFLOAD_MIN_RAM_GB)ことも可能ですが、フリーズのリスクとのトレード
オフのため推奨しません。
モデルの重みは本リポジトリに含まれません。 各モデルは初回利用時に Hugging Face Hub 等から取得され、それぞれ配布元が定めるライセンス・利用規約に従います。以下は本サーバが 呼び出すモデルの一覧です。正確な最新のライセンス条項は必ず各モデルカードを参照して ください(下表は本ドキュメント作成時点の確認結果であり、将来変更される可能性があります)。
| モデル | 配布元 | ライセンス(要各モデルカード確認) |
|---|---|---|
| Qwen-Image | Qwen/Qwen-Image | Apache License 2.0 |
| Qwen-Image-2512 | Qwen/Qwen-Image-2512 | Apache License 2.0 |
| Qwen-Image-Edit-Plus(2511) | Qwen/Qwen-Image-Edit-2511 系 | Apache License 2.0(各モデルカードを参照) |
| Qwen-Image-Lightning LoRA | lightx2v/Qwen-Image-Lightning、lightx2v/Qwen-Image-2512-Lightning | Apache License 2.0 |
| Qwen-Image GGUF量子化(T2I/Edit) | unsloth/Qwen-Image-GGUF、unsloth/Qwen-Image-2512-GGUF、unsloth/Qwen-Image-Edit-2511-GGUF | Apache License 2.0(要モデルカード確認) |
| Qwen-Image-ControlNet-Union | InstantX/Qwen-Image-ControlNet-Union | Apache License 2.0 |
| FLUX.2-dev | black-forest-labs/FLUX.2-dev | FLUX Non-Commercial License(Black Forest Labs。商用利用不可、要モデルカード確認・利用規約への同意が必要) |
| Z-Image-Turbo | Tongyi-MAI/Z-Image-Turbo | Apache License 2.0 |
| LTX-2.3 | Lightricks/LTX-2 | LTX-2 Community License Agreement(要モデルカード確認、独自ライセンス) |
| Gemma 3(LTX-2.3 の text encoder) | Gemma 利用規約(要モデルカード確認) | |
| JoyAI-Image-Edit-Plus | jdopensource/JoyAI-Image-Edit-Plus-Diffusers | Apache License 2.0 |
| MergeGreen IC-LoRA(LTX-2.3用) | siraxe/MergeGreen_IC-lora_ltx2.3 | Apache License 2.0 |
| Mage-Flow(T2I: Base/RL/Turbo) | microsoft/Mage-Flow-Base / microsoft/Mage-Flow / microsoft/Mage-Flow-Turbo | MIT(コード・重みとも。要モデルカード確認) |
| Mage-Flow-Edit(Base/RL/Turbo) | microsoft/Mage-Flow-Edit-Base / microsoft/Mage-Flow-Edit / microsoft/Mage-Flow-Edit-Turbo | MIT(同上) |
本リポジトリ自体(コード)は Apache License 2.0 で公開していますが、上記モデルの 重みを利用して生成したコンテンツやモデルの再配布については、各モデルのライセンス条項が 別途適用されます。特に FLUX.2-dev は非商用ライセンスである点にご注意ください。 商用利用を検討する場合は、Qwen-Image 系・Z-Image-Turbo・JoyAI-Edit-Plus 等の Apache 2.0 モデルの使用を推奨します。
load_lora_adapter())経由で利用できます。 旧来の
pipe.load_lora_weights() 経路は GGUFLinear をPEFTが認識できず失敗しますが、
Edit(2026-08-16、CLAUDE.md 59番・62番)に続き T2I/I2I(2026-08-17、CLAUDE.md 66番)
も同方式に統一したため、GGUF 量子化のまま Lightning 4steps が使えます(8steps用の
Lightning LoRA は無印/2512とも配布されていないため4stepsのみ対応。8steps要求時は
30steps/cfg4.0へ自動フォールバックします)。DS_QUANT=gguf-q4_k_m 等)は空きVRAMに応じて自動的に3段階
(48GB級: 全常駐 / 24GB級: text_encoderのみ量子化(既定nf4) / 20GB未満:
enable_model_cpu_offload())に分かれます。2026-08-16に48GB級・24GB級(fp8)も
実機検証済みで、1024²・目視で破綻なく完走することを確認しました(48GB級ピークVRAM
29.94GB / 24GB級(fp8)23.27GB、いずれもLightning 4steps/cfg1.0込み)。ただし24GB級を
fp8のまま使うと境界値付近(空きVRAMが閾値ちょうど)で1024²のVAE decodeでOOMする
ことがある(実測: 空き23.7GBでOOM)ため、24GB級のtext_encoder量子化は既定を
nf4(bnb 4bit)に変更しました(DS_EDIT_GGUF_MID_TE_QUANT、既定nf4)。
nf4はロード常駐が5.54GiBまで縮む(fp8は8.74GiB)ため、実24GBカード相当
(空き~23.5GB、旧fp8構成のOOM条件より厳しい設定)でも1024²が200 OKで完走し
(ピークVRAM 20.62GB)、full tierとの画素比較でも実質同一(平均絶対差<1/255)を
実機確認しました。fp8構成(26GB以上の空きがある環境向けの逃げ道)を使いたい場合は
DS_EDIT_GGUF_MID_TE_QUANT=fp8 を明示指定してください。詳細は CLAUDE.md 59番参照。
20GB未満の構成(enable_model_cpu_offload()使用時)も動作・品質とも問題ありません:
当初「解像度依存で出力が破綻する」と記録していましたが、2026-08-16の再調査で
model_cpu と全常駐(full)の出力がピクセル完全一致**することを確認し、観測された
劣化の正体は Lightning の scheduler shift × 入力条件による品質限界(quant/offload
方式に一切依存せず、既定の fp8-lightning 構成でも同条件で再現)と確定しました。
高解像度 Edit でプロンプト追従が悪い場合は lightning=false(30steps/cfg4.0)を
試してください。詳細は CLAUDE.md 59番の訂正ブロック参照。
品質を上げたい場合の quant 選択目安(2026-08-17 実測、CLAUDE.md 62番):
Q4_K_M / Q5_K_M / Q8_0 の出力品質は 30steps/cfg4.0 で実質同等(粒状感の差なし)の
ため、品質目的で高精度 quant を選ぶ意味はありません。24GBカードの 1024² 実用上限は
Q4_K_M(Q5_K_M はテキストのみ生成限定・Q8_0 はロード不可)、96GB級で速度優先なら
Q8_0(30steps が Q4 比約26%高速)が目安です。なお GGUF Edit の Lightning 4steps が
生成時に効かないバグ(粒状感の真因)は 2026-08-17 に修正済みです(CLAUDE.md 62番。
修正後は Q4_K_M + Lightning 4steps で fp8-lightning と同水準のシャープさになります)。DS_EDIT_TE_OFFLOAD=auto
の text_encoder CPU⇔GPU退避が無駄なオーバーヘッドだったため(実測 gen 14.4-14.9s →
9.1-9.4s、約38%高速化)、full tier では auto モード時に退避を自動的に無効化するよう
修正しました。24GB級(te_fp8 tier、nf4 既定)は元々このオーバーヘッドが無く同等の速度
(gen 9.14s)です。48GB環境で明示的に24GB級構成(DS_OFFLOAD=gguf_te_fp8)を選ぶ実益は
ピークVRAMを更に抑えたい場合(20.62GB vs 29.94GB)のみで、速度面のメリットはありません。unsloth/Qwen-Image-2512-GGUF)でロードできるように
なりました(2026-08-17追加、CLAUDE.md 66番)。 従来 2512 は fp8-lightning fuse方式
(bf16 transformer 約40GBをGPU上でfuse)のみで48GB未満では利用不可でしたが、GGUF量子化
(DS_QUANT=gguf-q4_k_m 等)なら24GB/20GB級カードでも使えます。Edit の3段階構成
(59番)を簡略化した2段階(full/gguf_te_fp8。model_cpu層は本タスクでは未実装、
20GB級カードでの動作は未検証)を Edit と同じ環境変数(DS_EDIT_GGUF_FULL_VRAM_ FREE_THRESHOLD_GB / DS_EDIT_GGUF_MID_VRAM_FREE_THRESHOLD_GB /
DS_EDIT_GGUF_MID_TE_QUANT)で共有します。実機検証(RTX PRO 4000 Blackwell 24GB、
CUDA_VISIBLE_DEVICES=1 DS_QUANT=gguf-q4_k_m DS_T2I_MODEL=2512、空きVRAM 23.2GB):
/api/t2i(1024²・4steps・lightning)が gguf_te_fp8(nf4 TE)tierへ正しく振り分けられ、
ピークVRAM 20.49GB・生成10.9秒でHTTP 200、/api/i2i(同モデル、strength=0.5)も
ピークVRAM 20.50GB・6.9秒で成功。同サーバで /api/edit(Edit-2511 GGUF)へ切替→
T2I(2512)へ戻す往復もOOMなく動作(下記の家族内相互排他バグ修正が必要だった、後述)。
96GB機(空き92.4GB)では full tierへ正しく振り分けられ、ピークVRAM 35.34GB・
生成2.96秒で完走。品質はfp8-lightning版と目視・ラプラシアン分散比較で同等(GGUF側が
むしろシャープ、725.9 vs 498.4)。無印T2IのGGUF経路(DS_T2I_MODEL=qwen-image)も
回帰確認済み(96GB機、quant=Q4_K_M・full tier・HTTP 200・目視で異常なし)。
本タスクで発見・修正した既存バグ: families/qwen_image/family.py の
Edit切替ロジックは従来 DS_QUANT=fp8-lightning のときのみT2Iグループを事前解放
していましたが、T2IがGGUFで常駐可能になったことで「T2I GGUF(~20GB)+ 共有
(~15.7GB)常駐のままEdit GGUFをロード」という新しい組み合わせが発生し、24GB級
カードで実機OOM(Tried to allocate 30.00 MiB、空き2.69MiB)を確認しました。
GGUF量子化時もT2I事前解放の対象に含めるよう修正し、往復切替が正常動作することを
実機確認済みです。/api/edit は参照画像なし(0枚)でも生成できます(2026-08-17追加、テキストのみ
生成、T2I相当)。 diffusers 本体は無改変で、families/qwen_image/edit_text_only.py
が QwenImageEditPlusPipeline.__call__ のソースをランタイムパッチする方式です
(画像ありの通常経路は完全に無変更)。レスポンスに text_to_image: true/false が
含まれます。24GB実機カード(RTX PRO 4000 Blackwell、DS_QUANT=gguf-q4_k_m)で
gguf_te_fp8(nf4)tier・1024²・200 OK・ピークVRAM 20.34GBを確認済みで、これは
59番・60番で「未検証」としていた「実24GBカードでの gguf_te_fp8(nf4)tier」の
初めての実カード検証も兼ねています(従来はダミーVRAM確保によるバラスト模擬のみ)。
詳細は CLAUDE.md 61番参照。/api/edit に strength(0〜1)パラメータで I2I モードを追加しました
(2026-08-17追加)。 Edit(2511)transformer を参照共有した QwenImageImg2ImgPipeline
を構築するため追加VRAMはゼロです。画像はちょうど1枚必須(0枚・2枚以上・範囲外の
strengthは400)。レスポンスに edit_i2i: true が含まれます。事前A/B(1画像1seedの
限定検証)では無印 Qwen-Image I2I と同等のstrength応答カーブ・同等品質で、被写体保持は
むしろ優位な場面もありました。GGUF Edit(3段階構成)・fp8-lightning既定構成のどちらでも
動作し、実測(24GB実機カード/96GB機とも)で通常I2I相当の生成時間(~3〜9秒)でした。
詳細は CLAUDE.md 64番参照。DS_JOYAI_QUANT=gguf-q4_k_m 等)でロードできます
(2026-08-18追加、CLAUDE.md 68番)。 従来は bf16 のみ(~33GB常駐)でしたが、GGUF
量子化なら実24GBカードでも使えます(実測ピーク20.81GB、Q4_K_M)。品質はbf16と
実質同一(平均差0.77/255)であることを確認済みです。JoyImageEditPlusTransformer3DModel
は from_single_file() 未対応のため手動ロード方式(init_empty_weights() +
DiffusersAutoQuantizer + load_gguf_checkpoint())を使っています。空きVRAM閾値
ベースの自動tier判定(qwen_image Editの59番のような3段階自動選択)は未実装で、
quant はユーザーが明示指定する方式のみです。16GB/20GBカードでの動作は未検証です。/api/t2i /
/api/i2i / /api/edit / /api/joyai/edit の任意 quant パラメータ、および
UI のモデルセレクタ(-gguf 付き選択肢)から選べるようにしました(2026-08-18追加、
CLAUDE.md 69番)。 24番(T2Iモデル切替)と同じパターンで、要求された quant が
現在アクティブな量子化方式と異なれば該当グループを自動 unload → 再ロードします。
quant 未指定/"default"は現状維持(完全後方互換)。fp8-lightning(bf16 40GB
transformerの直接fuse)への切替は、空きVRAMが DS_VRAM_FREE_THRESHOLD_GB
(既定44.0GB)未満だとロード前に400を返します(OOMさせずに明確なエラーメッセージで
拒否)。実機検証(96GB機・24GB実機カード)で t2i/edit/joyai の往復切替・24GBカードでの
400ガード発火・GGUF単体動作を確認済みです(unloadリークなし)。DS_OFFLOAD=group_lowvram(text_encoder も denoise 中は CPU へ退避する設定)は、
denoise 側が重い処理(ControlNet / Inpaint)では効果が大きい一方、T2I のように
プロンプトのエンコード時がピークになる処理ではピークがほとんど下がりません。詳細は
「16GB / 24GB VRAM 環境での動作」を参照。DS_QWEN_TE_QUANT=fp8 の品質影響は T2I 1024²(同一 seed)での比較しか行っていません
(PSNR 32.3dB、目視で差はごくわずか)。長文プロンプトや多言語プロンプトでの追従性は
未検証です。既定は none(bf16)のままなので、48GB 環境の挙動は変わりません。API_SPEC.md — 全エンドポイントの詳細なパラメータ・レスポンス例・curl サンプルLICENSE — 本リポジトリのライセンス(Apache License 2.0)20 commits
1 commits
Python
81.0%
JavaScript
10.3%
HTML
6.2%
CSS
2.4%