Generated reference · ComfyUI workflow · heavy-image

Qwen-Image-Edit 2511

Edit a source image by instruction with Qwen-Image-Edit 2511 (20B, bf16), optionally reading a second and third image, SFW only. Renders on the RunPod VIDEO endpoint and bills the video ledger while returning a still (heavy-image …

heavy-image17nodesGPU H100out image~283sv1.0.0

On this page

Edit a source image by instruction with Qwen-Image-Edit 2511 (20B, bf16), optionally reading a second and third image, SFW only. Renders on the RunPod VIDEO endpoint and bills the video ledger while returning a still (heavy-image, A.02.05): the bf16 transformer is 40.86 GB and the shared Qwen2.5-VL 7B encoder 16.58 GB. Translated from Comfy-Org/workflow_templates@aaac56dd templates/image_qwen_image_edit_2511.json with its Enable 4steps LoRA switch off (the template's default): image 1 goes through FluxKontextImageScale and VAEEncode into the latent the output is sized from; TextEncodeQwenImageEditPlus encodes the prompt and the empty negative with the VAE, scaled image 1 and unscaled images 2 and 3; FluxKontextMultiReferenceLatentMethod index_timestep_zero on both; UNETLoader, ModelSamplingAuraFlow 3.1 and CFGNorm strength 1 feed a KSampler at euler/simple, 40 steps, CFG 4 (the switch-off primitives; the KSampler's own widget CFG 3 is overridden by the link). Three images are the most TextEncodeQwenImageEditPlus accepts. The template loads the fp8mixed transformer and fp8_scaled encoder; this catalog loads the bf16 files on the volume. The Lightning 4-step LoRA has no manifest row and is not offered.

17Graph nodes
13Node classes
9Inputs
3Models

Tags: heavy-imagerunpod-serverlessvolume-backedimage-to-imageimage-editmulti-referenceqwen-image

Inputs (9)#

The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.

promptstringrequireddefault Change the furniture leather difference in image 1 to the fur material in image 2.
The edit instruction in natural prose; name the images as the template's example does ("image 1", "image 2"). The default is the upstream template's, which reads two images.
negative_promptstringdefault
Negative prompt, encoded with the same images and honoured at CFG above 1 (the upstream template leaves it empty).
stepsintegerdefault 40min 1max 60
Sampling steps (40 is the upstream template's value with its 4-step LoRA off; its note gives 40 as Qwen's figure and 20 as Comfy's; the per-job cap is 60).
cfgfloatdefault 4.0min 1.0max 10.0
Classifier-free guidance (4 is the upstream template's value with its 4-step LoRA off).
seedintegerdefault -1
Random seed (-1 = random)
source_imageimagerequired
Image 1, the image being edited. It is scaled by FluxKontextImageScale (to the nearest Kontext training resolution, about 1 MP) and the output takes that size.
referencesenumdefault two
How many images the edit reads: one = source_image only; two = source_image and reference_image_2 (the template's shipped example); three = all three, the most TextEncodeQwenImageEditPlus accepts. Each image the choice names must be supplied, and a job missing one is refused when the graph is rendered, before submission.
options: onetwothree
reference_image_2image
Image 2 for references two or three (for example a material or colour to apply). Encoded unscaled, as the template does. Not read with references one.
reference_image_3image
Image 3 for references three. Encoded unscaled, as the template does. Not read otherwise.

ComfyUI node graph (17)#

The executable ComfyUI prompt graph: 17 nodes across 13 distinct node classes, wired by 24 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.

flowchart TD n0["1: UNETLoader"] n1["2: CLIPLoader"] n2["3: VAELoader"] n3["4: ModelSamplingAuraFlow"] n4["5: CFGNorm"] n5["6: LoadImage"] n6["7: FluxKontextImageScale"] n7["8: LoadImage"] n8["9: LoadImage"] n9["10: TextEncodeQwenImageEditPlus"] n10["11: TextEncodeQwenImageEditPlus"] n11["12: FluxKontextMultiReferenceLatentMethod"] n12["13: FluxKontextMultiReferenceLatentMethod"] n13["14: VAEEncode"] n14["15: KSampler"] n15["16: VAEDecode"] n16["17: SaveImage"] n0 -->|model| n3 n3 -->|model| n4 n5 -->|image| n6 n1 -->|clip| n9 n2 -->|vae| n9 n6 -->|image1| n9 n7 -->|image2| n9 n8 -->|image3| n9 n1 -->|clip| n10 n2 -->|vae| n10 n6 -->|image1| n10 n7 -->|image2| n10 n8 -->|image3| n10 n9 -->|conditioning| n11 n10 -->|conditioning| n12 n6 -->|pixels| n13 n2 -->|vae| n13 n4 -->|model| n14 n11 -->|positive| n14 n12 -->|negative| n14 n13 -->|latent_image| n14 n14 -->|samples| n15 n2 -->|vae| n15 n15 -->|images| n16
Data-flow DAG — scroll to zoom, drag to pan.

Nodes (17)#

1UNETLoadercore
unet_name = qwen_image_edit_2511_bf16.safetensorsweight_dtype = default
outputs: MODEL
2CLIPLoadercore
clip_name = qwen_2.5_vl_7b.safetensorstype = qwen_imagedevice = default
outputs: CLIP
3VAELoadercore
vae_name = qwen_image_vae.safetensors
outputs: VAE
4ModelSamplingAuraFlowcore
model = ◂ node 1 · out[0]shift = 3.1
outputs: MODEL
5CFGNormcore
model = ◂ node 4 · out[0]strength = 1.0pre_cfg = false
outputs: MODEL
6LoadImagecore
image = {{source_image}} tmpl
outputs: IMAGEMASK
7FluxKontextImageScalecore
image = ◂ node 6 · out[0]
outputs: IMAGE
8LoadImagecore
image = {{reference_image_2}} tmpl
outputs: IMAGEMASK
9LoadImagecore
image = {{reference_image_3}} tmpl
outputs: IMAGEMASK
10TextEncodeQwenImageEditPluscore
clip = ◂ node 2 · out[0]prompt = {{constructed_prompt}} tmplvae = ◂ node 3 · out[0]image1 = ◂ node 7 · out[0]image2 = ◂ node 8 · out[0]image3 = ◂ node 9 · out[0]
outputs: CONDITIONING
11TextEncodeQwenImageEditPluscore
clip = ◂ node 2 · out[0]prompt = {{negative_prompt}} tmplvae = ◂ node 3 · out[0]image1 = ◂ node 7 · out[0]image2 = ◂ node 8 · out[0]image3 = ◂ node 9 · out[0]
outputs: CONDITIONING
12FluxKontextMultiReferenceLatentMethodcore
conditioning = ◂ node 10 · out[0]reference_latents_method = index_timestep_zero
outputs: CONDITIONING
13FluxKontextMultiReferenceLatentMethodcore
conditioning = ◂ node 11 · out[0]reference_latents_method = index_timestep_zero
outputs: CONDITIONING
14VAEEncodecore
pixels = ◂ node 7 · out[0]vae = ◂ node 3 · out[0]
outputs: LATENT
15KSamplercore
model = ◂ node 5 · out[0]seed = {{seed}} tmplsteps = {{steps}} tmplcfg = {{cfg}} tmplsampler_name = eulerscheduler = simplepositive = ◂ node 12 · out[0]negative = ◂ node 13 · out[0]latent_image = ◂ node 14 · out[0]denoise = 1.0
outputs: LATENT
16VAEDecodecore
samples = ◂ node 15 · out[0]vae = ◂ node 3 · out[0]
outputs: IMAGE
17SaveImagecore
images = ◂ node 16 · out[0]filename_prefix = isis/qwen-edit

Prompt construction#

template
{base_prompt}

Variables (1)#

base_prompt
{{prompt}} tmpl

Parameter banks (1)#

The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.

requires_families (1)#

qwen-image-edit

Models & dependencies#

Models required (3)#

qwen_image_edit_2511_bf16.safetensors
qwen_2.5_vl_7b.safetensors
qwen_image_vae.safetensors

Output contract#

What a successful run of this workflow returns.

type
image
format
png

Taxonomy & routing#

How the control plane classifies this workflow — from the committed workflow-taxonomy-registry.json. It drives the consistency / control surface the agentic director can exercise over the workflow.

assetFamily
portrait-hero-image-bundle
outputPackageProfile
image-single-profile
controlModalities
model-locksampler-scheduler-lockseed-locklatent-reuse
consistencyDimensions
identitylightingenvironment
notes
Qwen-Image-Edit 2511 instruction edit reading up to three images, a still rendered on the RunPod video endpoint (heavy-image), SFW only.