π§ Compose Watermark
Brand your video with a corner logo that stays proportional at any resolution
- overlays
- overlays
MF_ComposeWatermark is the "put my logo on this video" preset, and it's the node you'll want for 90% of branding jobs: pick a corner, a relative size, an opacity, done. It's a convenience wrapper around the same overlay mechanism as MF_ComposeOverlayImage, but it does the fiddly math for you - and crucially, sizing is relative to the frame, so the watermark stays proportional whether your source is 1080p, 4K, or a phone portrait clip.
The honest comparison: MF_ComposeOverlayImage gives you absolute pixel position and scale, which is what you want for a one-off graphic. This node trades that control for sensible presets - six placements, relative scaling, per-side margins, opacity, and a visibility window. If your problem is "I want my logo in the corner of every video at the same visual weight," this is the one you reach for, and the one that keeps you from re-figuring positions every time the resolution changes.
How it works
It appends a watermark op to the MF_COMPOSE_OPS overlay chain; MF_ComposeVideo compiles the chain into the single encode. The relative_scale value is resolved against the frame width (specifically ComposeVideo.target_width, or the probed source width if that's 0), so the logo ends up the same fraction of the frame no matter the resolution. Opacity is applied via colorchannelmixer alpha, which means the PNG's own alpha channel is preserved - a transparent PNG logo keeps its soft edges instead of getting a flat transparency slapped over it.
The tile placement is worth a mention: it auto-computes rows and columns from the image's aspect ratio and tiles the whole frame, which is the "wallpaper your video so nobody reuploads it" move.
The inputs that matter
image_path- your logo. PNG with alpha strongly recommended.placement-top_left/top_right/bottom_left/bottom_right/center/tile.relative_scale- logo width as a fraction of frame width (0.05β0.5).0.12is a tasteful corner bug;0.3+ starts competing with content.opacity-0.7default.0.6β0.8is the readable-but-subtle band.margin_top/right/bottom/left- per-side pixel margins from the frame edge.visible_start_sec/visible_end_sec- show it for part of the video only; both0= always visible.
Optional overlays chains upstream; output overlays feeds the next overlay or MF_ComposeVideo.
Install
Part of MediaForge:
cd ComfyUI/custom_nodes
git clone https://github.com/leon80148/comfyui_MediaForge.git
# restart ComfyUI
Or ComfyUI Manager β "MediaForge".
Common issues
The classic failure is a non-transparent image: a JPG or a PNG with no alpha renders as a solid rectangle on the frame - the node can't invent transparency. Export the logo with alpha. And if the watermark looks huge or tiny, remember relative_scale is relative to the frame: if you've set a ComposeVideo.target_width that's far from the source, the watermark resolves against that target instead. Paths with filter-special characters are auto-escaped by the pack, so if a weird-path logo breaks, test a plain path first.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image_path | STRING | input/watermark.png | β |
| placement | COMBO | bottom_right | 6 options: top_left, top_right, bottom_left, bottom_right, center, tile |
| relative_scale | FLOAT | 0.150.05β0.5 | β |
| opacity | FLOAT | 0.700β1 | β |
| margin_top | INT | 200β1000 | β |
| margin_right | INT | 200β1000 | β |
| margin_bottom | INT | 200β1000 | β |
| margin_left | INT | 200β1000 | β |
| visible_start_sec | FLOAT | 0.00β36000 | β |
| visible_end_sec | FLOAT | 0.00β36000 | β |
| overlaysopt | MF_COMPOSE_OPS | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| overlays | MF_COMPOSE_OPS | β |