TextEncodeQwenImageEditAlt
One image, one sentence, no mask — the Qwen-Image-Edit text encoder
- clip
- vae
- image
- CONDITIONING
"Change her dress to blue." "Remove the watermark." "Make this man lie down on an ice cave." That's the whole interface to Qwen-Image-Edit, and this node is how you get the sentence and the picture into the model. It's the plugin-API reimplementation of ComfyUI's built-in TextEncodeQwenImageEdit node - same job, written against the new comfy_api system. The name says "Alt," but the node itself isn't the weird part; the whole pack is a working example of the new plugin API, and this is its showpiece.
The model this feeds is the edit model that took the jobs masks, ControlNets, and IP-Adapters used to do. No API, no key, everything local - Apache 2.0, which is also why the NSFW fine-tunes exist openly. You point it at an image, describe the change in plain language, and it reasons about what belongs behind the thing you removed.
Here's the mechanism, because it explains everything about how you wire it. The node takes clip (from your Qwen-Image-Edit checkpoint) and a multiline prompt, plus two optional inputs that do very different jobs. image is optional - if you leave it empty you just get a text conditioning, which is fine for pure text-to-image on the base model but useless for editing. Feed it an image and the node resizes it to fit inside a megapixel (about 1024×1024, area downscale, aspect preserved) and hands it to the Qwen2.5-VL vision encoder for semantic understanding: what's in the frame, where, what the instruction should do to it. Then vae is where the appearance control comes from: it encodes that same reference into a latent and stamps reference_latents onto the conditioning, which is what tells the sampler "the output should still look like this image." That dual path - vision tokens for semantics, a reference latent for pixels - is literally the Qwen-Image-Edit architecture.
So the practical rule: connect the VAE. Skip it and you get the semantic signal without the appearance anchor, and your edits float free of the source. The output is a single CONDITIONING that goes into your sampler's CFGGuider or KSampler just like any text encoder.
The 20B weights are too heavy for most consumer cards at bf16, so grab a community GGUF quant of Qwen-Image-Edit (or 2511) and a Lightning step-reduction LoRA - that's how people actually run this model day to day. And the honest caveat the KB's community sources hammer on: the model re-emits the whole frame, so unedited pixels drift, and faces - especially ones the model hasn't seen - drift most. For pixel-exact work, crop and stitch around a mask instead of letting the whole frame go.
Installing: ComfyUI Manager → search comfyui-plugins, or git clone https://github.com/HDembinski/comfyui_plugins into ComfyUI/custom_nodes and restart. No Python deps beyond the pack, no model downloads - you bring the checkpoint yourself. Needs a current ComfyUI with the plugin API; on an older build the node simply won't register, so update ComfyUI before you blame the pack.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| prompt | STRING | — | |
| vaeopt | VAE | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |