技術 約4分で読めます

M1 Max 64GBでQwen Image Edit(NSFW版)をローカル実行する

前回の記事ではRunPodでQwen Image Editを動かしたが、今回はM1 Max 64GBのローカル環境で動かしてみた。

SD1.5 + IP-Adapterの限界

最初はComfyUI + SD1.5 + IP-Adapterでキャラのポーズ変更を試みた。

元画像

結果は散々だった。IP-Adapterのweightを0.95まで上げても「似た雰囲気のキャラ」しか出ない。

SD1.5 + IP-Adapterの結果1

SD1.5 + IP-Adapterの結果2

特定のキャラを維持したままポーズを変えるという用途には向いていない。

LoRAを作る選択肢もあるが、以前SeaArtで試したLoRA学習も失敗している。特にサイドポニーのような特徴的な髪型の再現が難しい。

Qwen Image Editに切り替え

RunPodで試した時、Qwen Image Editはキャラ維持能力が高かった。ローカルでも動くか試してみる。

使用モデル

Phr00t/Qwen-Image-Edit-Rapid-AIO の v16 を使用。v18はキャラが変わりやすいのでv16を選択。

  • モデルサイズ: 28.4GB
  • M1 Max 64GBなら余裕で載る

ダウンロード

ブラウザで直接ダウンロードするのが確実:

https://huggingface.co/Phr00t/Qwen-Image-Edit-Rapid-AIO/tree/main/v16

Qwen-Rapid-AIO-NSFW-v16.safetensors をダウンロードして配置:

mkdir -p ~/ComfyUI/models/checkpoints/v16
mv ~/Downloads/Qwen-Rapid-AIO-NSFW-v16.safetensors ~/ComfyUI/models/checkpoints/v16/

カスタムノード

Phr00t修正版のテキストエンコードノードが必要:

cd ~/ComfyUI/comfy_extras
curl -L -O https://huggingface.co/Phr00t/Qwen-Image-Edit-Rapid-AIO/resolve/main/fixed-textencode-node/nodes_qwen.py

ワークフロー

公式ワークフローをダウンロード:

https://huggingface.co/Phr00t/Qwen-Image-Edit-Rapid-AIO/blob/main/Qwen-Rapid-AIO.json

macOSでの注意点

macOSではシステムPythonに直接 pip install できない。ComfyUIはvenv(仮想環境)内で動かす必要がある。

cd ~/ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

以降、ComfyUIを起動するときは必ず source venv/bin/activate してから実行する。

また、Python 3.14は新しすぎて一部のパッケージが対応していない。Python 3.12を推奨。Homebrewで入れる場合:

brew install python@3.12
/opt/homebrew/opt/python@3.12/bin/python3.12 -m venv venv

M1 Maxでの起動

ここが重要。普通に起動すると真っ黒な画像しか出ない。

真っ黒な画像

cd ~/ComfyUI
source venv/bin/activate
python main.py --fp16-vae

--fp16-vae オプションが必須。

原因

デフォルトだとVAEが torch.bfloat16 で動作するが、Apple SiliconのMPSバックエンドと相性が悪い。VAEの出力がNaN(非数)になり、真っ黒な画像になる。

--fp16-vae でVAEをfp16に強制することで回避できる。

使い方

入力画像は1枚だけ

ワークフローには2枚の画像入力があるが、1枚だけ使う

2枚入れるとキメラ合成になって使い物にならない。2枚目のLoadImageノードは削除するか、接続を外す。

プロンプト

自然言語でポーズを指示する:

The girl is stretching with arms raised above her head, warming up exercise pose, same character, same outfit

SD系のタグ羅列ではなく、文章で書く。Qwenは言語理解が強いのでプロンプトが効きやすい。

設定

項目
steps4
cfg1.0
samplereuler_ancestral

結果

キャラの造形が維持されたままポーズが変わる。SD1.5 + IP-Adapterとは全然違う。服装・体型・顔がほぼそのまま。

Qwen Image Editの結果

生成速度

約80秒/枚。4ステップでこれなので重い。

環境速度
M1 Max 64GB約80秒/枚
RTX 5090 (RunPod)数秒/枚

ローカルは確認・微調整用、大量生成はRunPodという使い分けが現実的。

未解決の問題

サイドポニーの髪型が安定しない。ネガティブプロンプトで対称髪型を除外したり、プロンプトで細かく指定しても完全には再現できない。

髪が長くなってしまう例

twintails, double ponytail, center ponytail, symmetrical hair, pigtails

これはQwenの問題というより、学習データにサイドポニーが少ないのだと思う。

次のステップ

Qwen用のControlNet Union(InstantX/Qwen-Image-ControlNet-Union)を使えば、ポーズをより細かく制御できるらしい。DWPoseでポーズを検出して、ControlNetでポーズを指定する方式。

Phr00t AIO版との互換性は未確認だが、試してみる価値はある。次回はこれを検証する。

参考