空間編集に強いJoyAI Image Edit試してみた

空間編集に強いJoyAI Image Edit、ComfyUI v0.29で正式対応! AIラボ

ComfyUI v0.29では、JD.comが公開した画像編集モデル「JoyAI Image Edit」がネイティブ対応し、専用のカスタムノードを追加せずにComfyUI本体のノードと公式テンプレート(INT8 ConvRot)で実行できるようになりました。

JoyAI Image Editは、自然言語による一般的な画像編集に加え、カメラ位置の変更、オブジェクトの移動や回転といった空間編集を得意とするモデルで、16B(160億パラメータ)のMMDiT(画像生成・編集を担う拡散モデル)と、画像を読み取れるQwen3-VL 8B(80億パラメータ)ベースのテキストエンコーダーを組み合わせた大型構成です。

JoyAI Image Editとは

JoyAI Image Editは、JD.comのオープンソースチームが公開した指示ベースの画像編集モデルで、元画像の内容を読み取りながら自然文で指定された変更を反映します。

項目内容
開発元JD.com Open Source
主な編集機能背景・属性変更、視点変更、カメラ制御、オブジェクトの移動・回転
画像編集モデル160億パラメータのMMDiT
テキストエンコーダーJoyAI用に調整されたQwen3-VL 8B(80億パラメータ)
VAEWan 2.1 VAE
ライセンスApache 2.0
ComfyUI対応v0.29でネイティブ対応

画像の内容と編集指示を理解する80億パラメータのQwen3-VLと、実際の画像編集を担当する160億パラメータのMMDiTで構成され、視点変更、カメラ制御、オブジェクトの回転、位置を指定した編集などの空間理解を主な特徴としています。

テキストエンコーダーにはJoyAI Image Edit向けにファインチューニングされたQwen3-VL 8Bが必要で、VAEには通常のWan 2.1 VAEが採用されているため、同名のファイルを導入済みなら共用できます。

ComfyUI v0.29で追加されたネイティブ対応

ComfyUI v0.29.0は2026年7月29日に公開され、JoyAI Image Editのモデル検出、Qwen3-VLベースの専用エンコーダー、TextEncodeJoyImageEditノードが本体へ追加されたほか、JoyAI Imageモデルで使うRMS RoPEもcomfy_kitchenの最適化関数へ切り替えられました。

公式テンプレートはv0.29に同梱されたworkflow templates v0.11.15へ収録され、ComfyUIのテンプレート一覧からJoyAI Image Editを選ぶだけでワークフローを開けます。

ComfyUI公式テンプレートが採用しているのは1枚の元画像を編集する通常版で、最大6枚の参照画像に対応する「JoyAI Image Edit Plus」はJD公式の専用ワークフローで提供されています。

JoyAI Image Editの導入

公式テンプレートで必要になるファイルは3つです。

種類ファイル名配置先容量
Diffusion Modeljoyai_image_edit_int8_convrot.safetensorsComfyUI/models/diffusion_models/約16.43GB
Text Encoderqwen3vl_8b_joyimage_edit_int8_convrot.safetensorsComfyUI/models/text_encoders/約10.06GB
VAEwan_2.1_vae.safetensorsComfyUI/models/vae/約0.25GB

合計容量は約26.75GBで、ブラウザ経由では大容量のモデルやテキストエンコーダーのダウンロードが途中で切れる場合もあるため、必要な3ファイルをフォルダー構成ごと保存できるHugging Face CLIが便利です。

PowerShellでhf --helpが通る環境では、そのまま次のダウンロードコマンドへ進めます。hfコマンドが認識されない場合だけ、Hugging Face CLIを導入します。

pip install huggingface_hub

ComfyUIのルートフォルダーで、次のコマンドを実行します。

hf download Comfy-Org/JoyAI-Image-Edit diffusion_models/joyai_image_edit_int8_convrot.safetensors text_encoders/qwen3vl_8b_joyimage_edit_int8_convrot.safetensors vae/wan_2.1_vae.safetensors --local-dir "ComfyUI/models"

コマンドをComfyUIフォルダーの1つ上で実行する想定です。すでにComfyUIフォルダー内へ移動している場合は、末尾を--local-dir "models"へ変更してください。

Wan 2.1 VAEを導入済みなら、VAEを除いた2ファイルだけを取得できます。

hf download Comfy-Org/JoyAI-Image-Edit diffusion_models/joyai_image_edit_int8_convrot.safetensors text_encoders/qwen3vl_8b_joyimage_edit_int8_convrot.safetensors --local-dir "ComfyUI/models"

ダウンロード後にComfyUIを再起動し、各ローダーでファイル名が表示されれば導入完了です。

公式テンプレート

ComfyUIをv0.29以降へ更新し、メニューのテンプレート一覧からJoyAI Image Editを選択します。赤いノードや未検出のモデルが表示された場合は、ComfyUI本体のバージョンと3ファイルの配置先が主なチェック項目です。

公式テンプレートの外側は7ノードで構成され、モデルの読み込みからサンプリングまでの処理は「Image Edit (Joy Image Edit)」というサブグラフにまとめられています。

処理の流れは次の通りです。

  1. LoadImageで編集元の画像を読み込む
  2. ImageScaleToTotalPixelsで画像を1メガピクセルへ調整する
  3. GetImageSizeから編集後の幅と高さを取得する
  4. サブグラフへ画像、サイズ、編集指示を渡す
  5. ImageCompareで元画像と編集結果を比較する
  6. SaveImageAdvancedでPNGとして保存する

初期状態では、画像の拡大縮小にnearest-exact、総画素数に1MP、解像度の刻みに16が設定され、サンプルプロンプトのChange the background to a glacial scene.で香水瓶の背景を氷河の風景へ変更します。

サブグラフ内部の構成

「Image Edit (Joy Image Edit)」サブグラフには9ノードが入っています。

ノード役割
UNETLoaderINT8 ConvRot版の160億パラメータの画像編集モデルを読み込む
CLIPLoaderJoyAI専用Qwen3-VL 8Bエンコーダーをjoyimage形式で読み込む
VAELoaderWan 2.1 VAEを読み込む
TextEncodeJoyImageEdit ×2PositiveとNegativeの編集条件を作る
CFGNormDiffusersに合わせたCFG補正を適用する
EmptySD3LatentImage元画像と同じ幅・高さのLatentを作る
KSampler編集画像をサンプリングする
VAEDecodeLatentを画像へ戻す

Positive側とNegative側のTextEncodeJoyImageEditには同じ参照画像が接続され、テキストが空のNegative Conditioningも含めた状態が公式テンプレートの基本構成です。

KSamplerの設定はEuler/normal

添付の公式テンプレートで実際に設定されているKSampler値は次の通りです。

項目設定値
Seed42
Steps40
CFG4.0
Samplereuler
Schedulernormal
Denoise1.0

テンプレート内の説明(Note: Model Links)には以前の「Sampler: euler / simple」という記述が残っていますが、KSampler本体のeuler / normalが現在の公式設定です。

JD公式ワークフローは2026年7月17日の更新で、Schedulerをsimpleからnormalへ変更し、Diffusers側のCFGに合わせるためCFGNormを追加しました。

編集プロンプトの書き方

JoyAI Image Editは、タグの列挙よりも、変更する要素と維持する要素を自然文で指定するプロンプトに向いています。

背景だけを変更する例:

Change the background to a snowy mountain landscape while keeping the person and clothing unchanged.

オブジェクトを回転させる例:

Rotate the chair 90 degrees clockwise while preserving its design, color, and the rest of the room.

カメラ位置を変更する例:

Move the camera to a low-angle view from the left side while preserving the subject's identity and clothing.

Plus版は別ワークフロー

JoyAI Image Edit Plusは複数の参照画像による合成や一貫性維持を目的とする派生版で、JD公式ワークフローのメインノードにはimage1からimage6までの入力が用意されています。

サンプリング設定も異なり、ComfyUI公式テンプレートの通常版は40 steps、JD公式のPlus用ワークフローは30 stepsです。

ComfyUI公式テンプレートとこの記事で導入した3ファイルは通常版で、Plus版では専用のDiffusion Model、テキストエンコーダー、ワークフローを用意します。

蒸留版とTurbo版の公開状況

JoyAI-Image-Edit-Distilledは、通常版が公開された2026年4月から公式Model ZooにTo be releasedと記載されたままで、2026年8月時点も配布時期と想定ステップ数は未定です。

公式ラインアップ上で予告されている高速版はDistilledのみです。INT8 ConvRot、GGUF、INT4、NF4はモデル容量を削減する量子化版で、少ないステップ数で生成する蒸留版とは役割が異なり、現在の公式INT8 ConvRotテンプレートも40 stepsで生成します。

コミュニティ製の高速化LoRAや派生モデルは、ベースモデル、推奨ステップ数、対応ワークフローが導入時の判断材料になります。

通常版の公開から約1週間後には、Redditで「開発が止まったのか」「ComfyUI対応や新しいチェックポイントの予定はあるのか」というスレッドが立ちました。その後、6月23日にPlus版、7月17日にComfyUIネイティブ対応が公開されており、プロジェクト自体は更新が続いていますが、蒸留版は4月から公開待ちの状態が続いています。

Redditでの反応

Redditでは、カメラ制御やオブジェクト回転を評価する声があり、空間編集への期待に加えてApache 2.0ライセンスとComfyUIのネイティブ対応も好意的に受け止められています。

速度、モデル容量、元画像の構図維持については評価が分かれており、自然なインペイントや水面反射を評価する報告に対して、参照構図の維持、Flux系Kleinとの速度差、品質の安定性を課題に挙げる意見も出ています。160億パラメータの画像編集モデルと80億パラメータのテキストエンコーダーを組み合わせた構成のため、環境によってはシステムRAMへの退避が発生し、1枚あたりの処理時間も長くなります。

Redditの報告には古いカスタムノード版やコミュニティ量子化版の結果も含まれるため、現在のComfyUI公式INT8 ConvRotテンプレートは40 steps、CFG 4、Euler/normalを基準に、同じ入力画像とプロンプトで評価する必要があります。

現行の基準は公式INT8テンプレート

ComfyUI v0.29で本体対応と公式テンプレートが揃い、通常版のINT8 ConvRotモデル、JoyAI専用Qwen3-VL 8B、Wan 2.1 VAE、40 steps、CFG 4、Euler/normalが現在の基準構成です。

モデル一式は約26.75GBと計算負荷も大きい構成ですが、視点変更、カメラ制御、オブジェクト回転といった空間編集に特徴があり、複数の参照画像にはPlus版、生成速度には今後公開予定の蒸留版という展開も用意されています。

VRAM16GB環境で生成してみた

ComfyUI公式テンプレートの更新後の構成通り、40 steps、CFG 4、Euler/normal、CFGNorm 1.0・pre_cfgで生成しました。

Text to Image: 1376×768px

  • 2回目以降は90秒ほど
  • メモリ消費はVRAM14GB 共有23GB
Joy_Image_Edit_demo

2画像参照: 1024×1024px

JoyAI-Image-Edit-2image-demo
JoyAI-Image-Edit-2image-workflow
  • 2回目以降150~170秒
  • メモリ消費はVRAM14GB 共有23GB
  • ステップ30で120秒ほど
JoyAI-Image-Edit-demo-2image-workflow

サブグラフの中でPositiveとNegativeの両方へ接続する必要があります。