Nodes/ComfyUI-SA-Nodes-QQ/Image Blend_GPU_advanced (QQ)
ComfyUI Node

Image Blend_GPU_advanced (QQ)

Blend a logo across 81 frames, or stitch two references onto one canvas

By siraxe·Created 12 months ago·Updated 6 days ago· 74
Image Blend_GPU_advanced (QQ)
  • background_image
  • layer_image
  • layer_mask
  • enable_grid
  • image
  • mask
  • image_low
  • mask_low
◄blend_mode▾►
◄blend_cornernone►
◄opacity100►
◄resize_to_32false►
◄scale_methodlanczos►
◄fill_blackfalse►
◄mask_inner_erode0►
◄high_MP0.00►
◄low_MP0.00►

What it actually is

You found a node called "Image Blend_GPU_advanced (QQ)" with an underscore in the middle of a word, and the honest answer is that the weird name is packaging, not function. The pack auto-appends " (QQ)" to every node it registers, and this is the souped-up sibling of the plain ImageBlend_GPU node in the same pack - itself a GPU-side rewrite of the chop_image blend that WAS Node Suite popularised.

Over ComfyUI's core Image Blend it buys you three things, all about video. It's batch-aware, it can place your layer beside the background instead of on top of it, and it hands back a second, downscaled copy of the result - which is why it shows up in Wan workflows, where a low-res and a full-res pass want the same composition and building it twice is annoying.

Reach for it when you're watermarking a clip, compositing a subject onto a plate, or - the interesting case - assembling a reference layout. The 2026 answer to "keep this character consistent" is less "train an adapter" and more "put the reference in the model's context", which means somebody has to lay two images out on one canvas. Usually this node.

How it works

Everything is torch, on whatever device the tensors already sit on - no per-pixel Python loops. The nine blend modes are each a one-liner, then composited as background * (1 - mask) + blended * mask.

Frame counts are reconciled by repeating the last frame of whichever input is shorter. Hand it a 1-frame image and an 81-frame clip and you get 81 frames. The mask output tells you where the layer ended up - 1 where it landed, 0 elsewhere - which is exactly what you want to feed a later inpaint or regional prompt.

blend_corner changes the geometry:

  • none - the classic behaviour: bilinear-resize the layer to cover the whole background, blend it in.
  • top_left … bottom_right - the layer keeps its own resolution, gets center-cropped if it's bigger than the background, and is composited only inside that corner region. Perfect for logos and PiP.
  • concat_left / concat_right / concat_up / concat_down - no blending at all. The layer is resized to match the background on one axis (aspect preserved) and stitched on, side by side or stacked. Two images become one wide or tall frame.

The inputs you'll actually set

background_image and layer_image, obviously. Then blend_mode, blend_corner, and opacity (0–100, folded into the mask, so 50% opacity is a half-strength composite).

resize_to_32 center-crops the output so both dimensions divide by 32. Boring until your sampler refuses the canvas.

low_MP is the interesting one. Above 0, the output is scaled to roughly that many megapixels and returned on image_low (with mask_low alongside). At 0, the low outputs are pass-throughs of image and mask, so they never error out.

layer_mask (optional, MASK) limits where the layer applies. Unlike the plain ImageBlend_GPU node in this pack, the advanced version has no invert_mask toggle - invert upstream if you need the negative.

Installing it

The repo was renamed. Current pack name is ComfyUI-SA-Nodes-QQ, the GitHub URL still says ComfyUI-WanVideoWrapper_QQ, and the nodes still file themselves under the old WanVideoWrapper_QQ category - that's why the node you clicked on is filed somewhere unexpected.

In ComfyUI Manager, search ComfyUI-SA-Nodes-QQ. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git

Then restart. If you still have the old wanwrapper_qq folder in custom_nodes, delete it - stale workflows can drag the dead pack back in. requirements.txt is empty, so nothing pip-installs for you; the code does import cv2 and scipy, which stock ComfyUI already ships, so only a stripped-down container trips on that. This node needs no models and no kijai's WanVideoWrapper - it's tensor maths on any IMAGE.

Where people get burned

Concat mode ignores opacity and your mask for the pixels. In concat_* the layer is stitched in at full strength; the mask only shows up on the mask output. If you wanted a faded half-image pasted beside the background, that's not this mode.

Batch mismatch is silent. The shorter input just repeats its last frame. Two stills give you one still; a still plus a clip gives you a still overlay for the whole clip. Sometimes that's what you wanted, sometimes you've just appended 80 identical frames to a render.

Alpha gets dropped. A 4-channel background prints a warning and loses its alpha. Composite before this node, not through it.

CategoryWanVideoWrapper_QQ/image

Inputs (13)

NameTypeDefaultDescription
background_imageIMAGE—
blend_modeCOMBO9 options: normal, multiply, screen, overlay, add, subtract, +3
blend_cornerCOMBOnone9 options: none, top_left, top_right, bottom_left, bottom_right, concat_left, +3
opacityINT1000–100—
resize_to_32BOOLEANfalse—
scale_methodCOMBOlanczos7 options: lanczos, nearest, bilinear, bilinear_aa, bicubic, bicubic_aa, +1
fill_blackBOOLEANfalse—
mask_inner_erodeINT00–1024—
high_MPFLOAT0.000–100—
low_MPFLOAT0.000–100—
layer_imageoptIMAGE—
layer_maskoptMASK—
enable_gridoptGRID_CONFIG—

Outputs (4)

NameTypeDescription
imageIMAGE—
maskMASK—
image_lowIMAGE—
mask_lowMASK—