Nodes/FxAi(凤希全能节点)/凤希AI - 千问2.1图片编辑
ComfyUI Node

凤希AI - 千问2.1图片编辑

Qwen-Image 2.1 editing in one node — including the empty latent you forgot

By fxai666·Created 5 months ago·Updated about 13 hours ago· 42
凤希AI - 千问2.1图片编辑
  • clip
  • vae
  • 图片列表
  • 正向条件
  • 负向条件
  • 潜空间
正向提示词
宽度1024
高度1024
负向提示词

Reach for this when you're doing instruction editing on a Qwen-Image 2.1 checkpoint and you'd rather not assemble four nodes to get there. It replaces the encode half of the graph - prompt, references, negative, empty latent - and hands KSampler everything it needs in three outputs. It loads no models and isn't an API wrapper. (千问 in the display name is just Chinese for Qwen.)

ComfyUI's stock Text Encode Qwen Image Edit gives one conditioning output and leaves the empty latent and the negative to you. This bundles all three, and takes your references as one batch instead of three sockets.

What's actually going on inside

Two mechanisms, both worth understanding because they explain most of the weird behaviour.

References. Every image you wire into 图片列表 gets resized so its area is about 宽度 × 宽度 - aspect ratio preserved, dimensions rounded to multiples of 32 - then VAE-encoded and stapled onto both conditionings as reference_latents. That's the same mechanism the stock Qwen edit encoders use: the sampler feeds those latents to the DiT alongside the empty latent, which is why the model can see your input image without a ControlNet or IP-Adapter. The same resized copies go to the text encoder as vision input, so <image1> in a prompt means something. Each reference keeps its own aspect ratio - it isn't squashed into your output shape.

The latent. The 潜空间 output isn't the generic empty-latent tensor - it's 64 channels at one sixteenth of the pixel grid, which is the packed (2×2 patchified) layout these 2.1 checkpoints sample from. That's why you don't add an Empty Latent node. It also means this node is paired to its checkpoint: if you're running the older 2509/2511 edit weights, use ComfyUI's own encode node instead of mixing and matching.

The negative. Leave 负向提示词 unwired and you inherit a long Chinese negative list - worst quality, JPEG artifacts, bad hands, extra fingers, watermark, flat tiling. Useful. Just know the author's own graphs run CFG 1, where the negative pass is skipped entirely; raise it into the 2.5–4 range if you want the negative to do anything.

The inputs you'll actually touch

正向提示词 and 负向提示词 are forceInput - they render as sockets, not text boxes. That's the number one "where do I type?" moment with this pack. Wire a multiline string node or a primitive string into them.

图片列表 is the optional input you can't skip for editing: it takes a batch and splits it into individual references, so three images means a three-image batch, not three wires. Feeding it a bare LoadImage gives you exactly one reference. 宽度 and 高度 set both the output size and that reference-resizing area (1024×1024 by default), so they're not cosmetic.

Outputs are 正向条件 → KSampler positive, 负向条件 → KSampler negative, 潜空间 → KSampler latent. Then KSampler → VAEDecode → a save or preview node. Leave 图片列表 empty and the node degrades gracefully into a plain prompt encoder plus empty latent, i.e. text-to-image on the same checkpoint.

The author's sample graph (千问2.1图片处理.json in the repo, plus a note with his own cloud-drive model links) loads qwen_image_2.1_bf16.safetensors through UNETLoader, qwen_image_2.1_vae_bf16.safetensors through VAELoader, and a Qwen3-VL-8B text encoder through CLIPLoader with type qwen_image - 25 steps, euler, CFG 1.

Install

ComfyUI Manager → search "fxai" or "凤希" and install FxAi(凤希全能节点), or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxai666/fxai-toolkit

Restart ComfyUI. There's no requirements.txt: the pack's __init__.py pip-installs soundfile and psutil itself on startup, so watch the console and restart again if it fetched them. It's a big pack - over a hundred nodes covering long-video, audio and prompt automation - so you're cloning the whole thing for one node. The models are not included and are not small: the checkpoint goes in models/unet (or diffusion_models), the VAE in models/vae, the text encoder in models/text_encoders. The English-language community barely mentions a "Qwen-Image 2.1" local release at all - the corpus has a handful of threads about the 2.0 paper, everyone else is still on 2509/2511 - so expect to pull these weights from the author's own repack links rather than a mainstream download, and check the file names match your loaders.

Where people get burned

The obvious one: this is a 20B-class stack at bf16. If you're on 12–16GB, run a quantized checkpoint and a step-reduction LoRA, or you'll be watching it swap. The KB says it plainly for the family - quantization is the deployment, not an optional extra.

Then the model-level stuff that isn't the node's fault: Qwen-Image-Edit re-emits the whole frame, so pixels you never asked about move and drift compounds over a chain of edits - 2509 was specifically complained about for offset and distorted proportions. Keep edits single-hop where you can.

And one that is node-level: references arrive as a batch resized to about a megapixel each, so a 4K head shot is fine and a wide group shot loses facial detail. Crop tight when identity matters.

Category凤希AI/图片

Inputs (7)

NameTypeDefaultDescription
clipCLIP
vaeVAE
正向提示词STRING
宽度INT1024512–4096
高度INT1024512–4096
负向提示词optSTRING
图片列表optIMAGE

Outputs (3)

NameTypeDescription
正向条件CONDITIONING
负向条件CONDITIONING
潜空间LATENT