Extensions/ComfyUI JoyAI
ComfyUI Extension

ComfyUI JoyAI

JoyAI-Image-Edit (16B MMDiT + Qwen3-VL-8B) instruction image editing for ComfyUI.

By Nynxz·Created about a month ago·Updated about a month ago· 4
Nynxz/ComfyUI-JoyAI
Nodes2
On cloudLocal install
Categoryadvanced/conditioning
Stars4
Updatedabout a month ago
Readme

ComfyUI-JoyAI

Run JoyAI-Image-Edit and JoyAI-Image-Edit-Plus in ComfyUI — JD's 16B Multimodal Diffusion Transformer + 8B Qwen3-VL MLLM for instruction image editing from one reference (Edit) or up to five (Edit Plus).

It installs like any other diffusion model — auto-detected and loaded through ComfyUI's normal Load Diffusion Model / Load CLIP / Load VAE / KSampler path. No patching of ComfyUI's source, and no extra Python packages.

Edit Plus workflow

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-JoyAI

Restart ComfyUI.

Download the models

JoyAI reuses stock components — the Wan 2.1 VAE and the Qwen3-VL-8B text encoder — so only the transformer differs between Edit and Edit Plus. Everything is pre-packed and ready to load:

| File | Folder | From | | --- | --- | --- | | Edit (single ref) transformer | ComfyUI/models/diffusion_models/ | jdopensource/JoyAI-Image-Edit-ComfyUI | | Edit Plus (1–5) transformer (bf16) | ComfyUI/models/diffusion_models/ | nynxz/JoyAI | | Qwen3-VL-8B text encoder | ComfyUI/models/text_encoders/ | jdopensource/JoyAI-Image-Edit-ComfyUI | | Wan 2.1 VAE | ComfyUI/models/vae/ | jdopensource/JoyAI-Image-Edit-ComfyUI |

The Edit Plus file is tagged so the stock Load Diffusion Model node auto-routes it. Load the encoder with Load CLIP → type joyimage.

Use it

JoyAI is an edit model: every conditioning (positive and negative) must carry the reference image(s). Drag a ready-made graph onto the canvas to start: single-reference · Edit Plus (1–5) (shown above).

Single-reference workflow

  1. Load Diffusion Model → the JoyImage transformer (auto-detected; a plus file routes to Edit Plus automatically).
  2. Load CLIP → Qwen3-VL-8B, type joyimage. Load VAE → Wan 2.1.
  3. Text Encode JoyImage Edit ×2 — one positive, one negative; wire the same image + vae into both (an empty negative prompt still needs them).
  4. Size the sampling latent to the edit: take the positive node's image output → VAE Encode → KSampler latent_image with denoise = 1.0.
  5. KSamplerVAE DecodeSave Image.

The model installs its own required CFG guidance-rescale at sample time — don't add a CFGNorm/sampler_cfg_function node (it'll be rejected rather than silently override the model's rescale).

Edit Plus (1–5 references)

Same graph, but use Text Encode JoyImage Edit Plus. It has a single auto-growing image input — connect image1 and an image2 socket appears, up to five. The order is semantic (image1…image5 map to the reference sequence), and each reference is bucketed independently, so they can be different sizes. Wire the same references into the positive and negative nodes. The node's target_image output (the last reference, bucketed) → VAE Encode → KSampler latent_image.

Don't connect ControlNet or a custom sampler CFG function to either variant.

Credits

JoyAI-Image-Edit by JD (jd-opensource) (Apache 2.0). The base integration is vendored from Comfy-Org/ComfyUI#14428; Edit Plus is reconstructed against the official Diffusers reference.