Video Composite Layer
The compositing layer node that does no work (until you want it to)
- video
- mask
- layer
VideoCompositeLayer is where you configure one layer of a multi-layer video composite: position, size, transparency, blend mode, and stacking order. And here's the part that confuses people at first - it doesn't actually render anything. It just packages up a configuration dictionary and hands it to VideoComposite, which does the real work. Think of it as a settings card you fill out, not a paint operation.
That's actually a feature. Because it only stores configuration, you can build up a scene of layers (even the same video wired into several layer nodes) and then tune the VideoComposite once at the end. No processing cost until the composite node fires.
What you set
video(VIDEO) - the clip this layer shows. Comes from Video Load Preview, ImageToVideo, or anything else in this pack that outputs VIDEO.x,y(FLOAT) - position as fractions of the canvas, 0–1 range.x: 0 = left, 0.5 = center, 1 = right.y: 0 = top, 0.5 = center, 1 = bottom. The range technically allows -2 to 2, which just shoves the layer off-canvas and crops it.scale(FLOAT) - 0.5 = half size, 1 = original, 2 = double. Default 1.opacity(FLOAT) - 0 to 1, default 1. 0 is fully transparent, 1 fully opaque.blend_mode(enum) -normal,add,multiply,screen,overlay. Defaultnormal. These are your standard Photoshop-ish blend modes, applied per pixel.order(INT) - stacking order, higher = on top. Default 0.mask(MASK, optional) - a per-pixel mask if you want the layer's alpha to vary across the frame.- Output:
layer(VIDEOCOMPOSITE_LAYER) - wire this into alayerNinput onVideoComposite.
The fiddly parts
The coordinates are normalized, not pixel-based - x=0.5, y=0.5 is always center, regardless of canvas size. That's convenient until you realize the layer's content doesn't get centered by position alone; the position is the top-left anchor in canvas-fraction terms, and the actual on-screen placement interacts with scale. Expect to nudge values. The blend modes are per-pixel math - add will blow out to white fast if you stack bright layers, overlay is the one people reach for when they want contrast interaction between layers.
Common issues
- The layer is only a config. If you connect
VideoCompositeLayer's output to anything other thanVideoComposite, nothing renders. Thelayertype is a new custom type, so it only plugs into its sibling node. - Order ties. If two layers have the same
order, sorting is not guaranteed to match what you visually intended. Give each layer a distinctordervalue. - Length mismatch is a downstream problem. The layer stores its video's length, but
VideoCompositedecides the output length from the first layer. Keep your layers the same frame count or you'll get surprises at the composite stage.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/guchendesigndog/comfyui-video-edit.git
pip install -r comfyui-video-edit/requirements.txt
Or search "ComfyUI-Video-Edit" in ComfyUI Manager and restart. Only real dependency: PyAV (av>=10.0.0), which needs FFmpeg. It's a small MIT-licensed pack from a solo author - don't expect a big community around it, but the composite pair (this node + VideoComposite) is the most capable thing in the pack.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| x | FLOAT | 0.00-2–2 | X position (0=left, 0.5=center, 1=right) |
| y | FLOAT | 0.00-2–2 | Y position (0=top, 0.5=center, 1=bottom) |
| scale | FLOAT | 1.000.1–10 | Scale: 0.5=half, 1=original, 2=double |
| opacity | FLOAT | 1.000–1 | — |
| blend_mode | COMBO | normal | 5 options: normal, add, multiply, screen, overlay |
| order | INT | 00–1000 | Higher = on top |
| maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| layer | VIDEOCOMPOSITE_LAYER | — |