Bulk add a watermark to videos: same logo, every file
To bulk add a watermark to videos, run one overlay job per video with the same logo and layout. How to keep it identical by API, and what it costs.

To bulk add a watermark to videos, apply one fixed overlay (the same logo image, size, and position) to every video in the set, one output file per video. By API that is a loop: one overlay job per video with identical settings, and a new watermarked file back for each.
On Sume the overlay job is Timeline compose with operation: "overlay". The facts below come from the Timeline compose docs, read on 2026-09-29. For one video and the full list of layout keys, see How to add a logo or watermark to a video.
How do I watermark many videos in one run?
Fix the logo and the layout once, then loop over the videos. Each call sends the same image.url and layout, the video's own video.url, and an Idempotency-Key derived from that video, so a retried request never makes a second job. Both URLs must be files in your Sume workspace on media.sume.com, such as earlier Sume outputs; off-host URLs are rejected.
import os, requests
API = "https://api.sume.com/v1/timeline-1.0/compose"
KEY = os.environ["SUME_API_KEY"]
LOGO = "https://media.sume.com/artifacts/artf_demo/logo.png"
LAYOUT = {"position": "bottom", "width_ratio": 0.2, "margin_ratio": 0.04}
videos = { # your id -> (Sume-hosted video, its width, its height)
"ep-01": ("https://media.sume.com/artifacts/artf_demo/ep01.mp4", 1080, 1920),
"ep-02": ("https://media.sume.com/artifacts/artf_demo/ep02.mp4", 1920, 1080),
}
for vid, (url, w, h) in videos.items():
r = requests.post(API, json={
"operation": "overlay",
"image": {"url": LOGO},
"video": {"url": url},
"layout": LAYOUT,
"output": {"width": w, "height": h},
"webhook_url": "https://example.com/hooks/sume",
}, headers={"Authorization": f"Bearer {KEY}",
"Idempotency-Key": f"watermark-v1-{vid}"})
r.raise_for_status()How do I keep the watermark identical across videos?
Keep image.url and layout constant, and watch the frame size. width_ratio is a share of the frame's width (0.05 to 1), so the same ratio draws a smaller logo on a portrait frame than on a landscape one. margin_ratio (0 to 0.45) is a share of the height. If your set mixes shapes, batch each shape with its own ratio.
- Set
output.widthandoutput.heightto each video's size. The default output is 1080×1920, so a landscape video left on the default is reframed to portrait. - Render one video, check it, then run the rest. Change the key prefix (
watermark-v2-…) when you change the layout, because one key belongs to one exact request.
How much does it cost to watermark videos in bulk?
One compose job per video reserves up to $0.02 per job and captures its own compute, never above that, so the total scales with the number of videos, not their length. Add the 5.5% agent fee by default.
Large batches queue: jobs past your workspace's concurrency limit wait as queued, and a submit past the queue capacity gets 429 queue_full. Batch video processing covers pacing the loop.
| Videos | Compose jobs | Most it reserves |
|---|---|---|
| 10 | 10 | $0.20 |
| 100 | 100 | $2.00 |
| 1,000 | 1,000 | $20.00 |
What can't a bulk watermark do?
- Show the logo for only part of a video, or move it: the still covers the whole clip in one place.
- Watermark a video longer than 300 seconds in one job: that is the compose ceiling. Each output is as long as its video and keeps the video's sound; the one-video guide covers length, sound, and placement.
- Take your own files, the logo included, from a computer or a public URL: compose reads only Sume-hosted media.
- Stamp two marks in one job: one job takes one still, so a second mark is a second compose on the first result.
Sources
Related posts
More in Media tools
- Captions vs subtitles: what's the difference?
Captions write down what is heard, sound cues included, for viewers who can't hear. Subtitles translate the dialogue for viewers who don't speak it.
- Change one lyric in an AI song without regenerating it
Suno says v6 can update a single lyric in an existing song. Sume's music docs list generation only, so a changed lyric means a new track.
- How to combine audio files without gaps using an API
Join audio files into one gapless file with Sume's Timeline audio concat: up to 20 parts, sample-domain, with segment offsets returned for re-basing.
- DaVinci Resolve AI video plugin: Runway's, and an API route
Runway put a paid plugin in DaVinci Resolve on Sep 23, 2026. Sume has none; its API hands an editor separate clips or one assembled MP4.
Written by Sume