Nodaro Docs
DocumentationNode ReferenceModelsAI Agents (MCP)DevelopersSelf-hostingResearch
Video

Video Overlay

Show up to 20 images over a video, each in its own time window, as a card, corner badge, full frame or custom box, with a live preview and the audio kept.

The Video Overlay node shows images on top of a video, each during its own time window. Use it for logos, product shots, screenshots and cards timed to a voice-over. The node draws your exact image files over the video, keeps the original audio, and shows a live preview on the node, all without an AI model.

When to use it

  • You make a UGC ad and want product cards, app screenshots or web pages to appear while the speaker mentions them.
  • You want a logo or a channel handle on screen for the whole video.
  • You want picture-in-picture stills, before-and-after images or reaction images.
  • You want price tags or "NEW" badges over product clips.

Quick start

Add the node

Press Tab on the canvas and choose Video › Titles, Graphics & Captions › Video Overlay.

Connect the video and the images

Connect the base video to the Video input. Connect each image to its own layer handle: Layer 1, Layer 2 and so on. The node starts with 4 layer handles.

Time and place each layer

Open the settings panel. For each layer, set Start (s) and End (s), then choose a Placement. Drag a layer on the node's preview to move it, or pull its corner handle to resize it.

Run it

Click Run. The node renders the video with every layer in its window. The preview label changes from Preview to Result.

videolayer 1layer 2videoUpload Video9:16 selfieUpload ImagePricing screenshotUpload ImageLogo PNGVideo OverlayCard + corner badgeAdd CaptionsTikTok Post
A screenshot pops up as a card and a logo stays in the corner; captions go on top, then the video is posted.

Inputs

InputAcceptsWhat it does
VideoVideo nodes, such as Upload Video and Generate VideoThe base video. Required.
Layer 1 to Layer 12Image nodes, such as Upload Image, Generate Image and Image OverlayOne image per layer. Layer 1 is the first handle, Layer 2 the second, and so on.

The output, Video, is the video with the layers drawn on it, as an MP4.

Use the + Layer and − Layer buttons in the settings panel to show between 1 and 12 layer handles. The count also grows by itself when you connect a higher handle.

The live preview

Once a base video is connected, the node shows a frame of it with the layers drawn where the render will put them.

  • Select a layer by clicking its bar in the Timeline of the settings panel. The preview jumps to the layer's start and shows only the layers visible at that moment.
  • Drag a layer to move it, and pull its corner handle to resize it. Every drag writes the new percentages into the layer's settings, so the preview and the run use the same numbers.
  • Result or Result (old). After a run, the node shows Result. When you change the settings afterward, for example move a layer or connect another image, the label reads Result (old) until you run again.

Layer settings

Each layer has its own card in the settings panel, headed Layer 1, Layer 2 and so on.

SettingWhat it does
Start (s)When the layer appears, in seconds from the start of the video. The default is 0.
End (s)When the layer disappears. It must be after Start (s). Leave it empty to show the layer until the video ends.
PlacementCard, Corner badge, Full frame or Custom. A connected layer you have not changed is a bottom-right corner badge for the whole video.
CornerFor Corner badge: Top left, Top right, Bottom left or Bottom right (the default).
Anchor, Offset X, Offset Y, Width, Height (% of frame, optional), Fit (when height is set)For Custom. See Custom boxes.
Layer order (z)From 0 to 100. A higher layer draws on top. Empty means the layer number, so Layer 1 is at the bottom. The preview's up and down buttons set it too.
OpacityFrom 0 to 100%. The default is 100%.
Animate in/outOn by default. The layer fades in while it grows from 96% to 100% of its size over 0.15 seconds, and does the reverse at its end.

Placements

Every position and size is a percentage of the output frame.

PlacementWhere the layer lands
CardCentered, 4% above the middle, fitted inside 78% × 60% of the frame. The image keeps its aspect ratio.
Corner badge18% of the frame width, 4% in from the chosen corner.
Full frameCovers the whole frame. The image is cropped to fill it.
CustomYour own box.

The Card sits over the middle of the frame, which is over the speaker's face on a 9:16 selfie video. That is on purpose: product cards pop up over the talking head. Put a logo or a badge that must not cover the subject in a corner badge or a custom box.

Custom boxes

  • Anchor is one of nine positions on the frame where the layer attaches.
  • Offset X and Offset Y move the layer from the anchor, from −100 to 100% of the frame width and height. A negative offset on a right or bottom anchor moves the layer inward.
  • Width is 1 to 100% of the frame width.
  • Height (% of frame, optional) is 1 to 100% of the frame height. Without it, the height follows the image's aspect ratio.
  • Fit (when height is set) decides how the image fills the box: Contain shows the whole image, centered. Cover fills the box and crops the image.

Setting any box field turns a preset layer into Custom. Dragging or resizing a preset layer on the preview does the same. A tall image whose height follows its aspect ratio is always fitted inside the frame: a 1:10 image at 60% width on a 1080×1920 video is drawn at 192×1920. Drawn sizes are rounded down to even pixels, and are at least 2×2.

Timing rules

  • Times are seconds from the start of the video, from 0 to 3,600. They keep the precision you type, and the render places them on the video's frame grid, so a layer can appear up to one frame early or late.
  • A layer whose End (s) is past the end of the video is clipped to the end.
  • A layer that starts at or after the end of the video is skipped, and its image is not downloaded.
  • A layer shorter than 0.3 seconds uses half its length for each fade.

The panel warns about clipped and skipped layers as you type, using the length the browser reads. That length can differ from the video's own by a few hundredths of a second, so the run's warnings are the final word.

Output settings

SettingWhat it does
Output aspectSame as video (the default), 16:9 (1920×1080), 9:16 (1080×1920), 1:1 (1080×1080) or 4:5 (1080×1350). With an output aspect, layer percentages are of that new frame.
Video fitWith an output aspect only. Cover (the default) fills the frame and crops the video. Contain shows the whole video and pads it.
Padding colourWith Contain only. The color of the padding. The default is black.

Without an output aspect, the result keeps the video's own display size and frame rate. A phone clip stored sideways renders upright, non-square pixels are corrected, and odd dimensions are rounded down to even numbers, so a 1079×1919 source renders at 1078×1918.

The result is an H.264 MP4 that starts playing before it has fully downloaded. Only the first audio track of the base video is kept, and a video without audio stays silent.

Limits

  • Layers: 1 to 20 per run. A node with more than 20 layers that have an image is refused before the run, and the Run button says so. Remove layers to get back to 20; the remaining layers keep their numbers. No layer is dropped silently, and nothing is charged.
  • Images: PNG, JPEG or WebP, up to 25 MB each and 100 MB together, up to 8,192 pixels on the longest edge and 400 megapixels together. Photo orientation from the camera is applied.
  • SVG is refused. Turn an SVG into a PNG with Image Overlay first.
  • Animated images such as animated WebP and APNG show their first frame.
  • The base must be a video. An audio file, an image, or a web page saved as .mp4 fails with "The base input is not a video".
  • Render time: a render stops after 10 minutes.
  • API rate: up to 30 requests a minute per user.

Warnings

A successful run can report warnings. The settings panel shows them in one Last run line.

WarningAPI codeMeaning
ClippedclippedThe layer's end was past the end of the video, so it was shown until the end.
SkippedskippedThe layer started at or after the end of the video, so it was not drawn.
Animated imageanimated_first_frameThe image was an animated WebP, so its first frame was used.
Audio re-encodedaudio_reencodedThe video's audio could not be copied into MP4 as it was, so it was re-encoded to AAC.

When every layer starts after the end of the video, the run fails instead, with the message "Every layer starts after the video ends". A layer image that cannot be downloaded also fails the run, for example "Layer 3: image could not be fetched".

Credits

Video Overlay costs 20 credits per run, whatever the number of layers or the length of the video. A failed run is not charged. On a self-hosted Community Edition install there are no credits, and the node runs without any API key.

Example: product cards over a talking head

A 9:16 selfie video with three images, each shown while the speaker mentions it:

LayerImageStart (s)End (s)Placement
1pricing-page.png1.22.6Card
2dashboard.png3.04.4Card
3logo.png0to endCorner badge, Top right

On a 1080×1920 video, each card's box is 842×1152 pixels at (119, 307). A screenshot with a 1:2 aspect ratio is drawn at 576×1152 pixels inside it, centered.

The same request through the API, POST /v1/video-overlay:

{
  "videoUrl": "https://example.com/selfie.mp4",
  "layers": [
    { "imageUrl": "https://example.com/pricing-page.png", "start": 1.2, "end": 2.6, "preset": "card" },
    { "imageUrl": "https://example.com/dashboard.png", "start": 3.0, "end": 4.4, "preset": "card" },
    { "imageUrl": "https://example.com/logo.png", "start": 0, "preset": "corner-badge", "corner": "top-right" }
  ]
}

AI assistants use the overlay_images MCP tool, where each layer takes a url or an asset_id. From the command line, use nodaro media video-overlay.

Tips

  • Keep cards short and separate. Show a card for a second or two, and do not let cards overlap in time, so one is on screen at a time.
  • Use corners for long-lived layers. A logo, a handle or a price that stays up for long belongs in a corner badge or a custom box, away from the speaker.
  • Use transparent PNGs for logos. An opaque JPEG is placed as a rectangle.
  • Keep the video's own frame. Set Output aspect only when you need a different frame than the source.
  • Cut first. Use Trim Video before Video Overlay to shorten the base video.
  • Caption after. Connect the result to Add Captions. The layers stay under the captions.
  • Style a badge first. Connect an Image Overlay result to a layer handle to put text, a QR code or a styled badge on the video.

Frequently asked questions

Last updated on

On this page