TikTok ad creatives prohibit watermarks: sample corner stills first
TikTok's reservation spec prohibits watermarks, TikTok's own included. Pull stills with video-inspect and crop the four corners before a reused clip goes up.

Before a reservation upload, look at the four corners of three or four frames. TikTok's reservation in-feed page says watermarks are prohibited, TikTok's own branding included (read 2026-10-07). Sume does not detect watermarks; what it gives you is cheap stills at chosen times so you can look.
The more useful decision is upstream: if a corner mark is baked into the file, do not crop it out with a Sume video-filter. Go back to the clean master.
What to sample
A mark can fade in late or sit only on a stock insert. Sample the start, the middle, and just before the end, plus any shot you imported from another source. frames.at[] takes 1-24 explicit timestamps, each at or after 0, and max_edge between 64 and 2160 (the default is 768). For corner checks use the source edge, as the docs advise for restaging.
| Rule | Value on the page |
|---|---|
| Watermarks | prohibited, including TikTok's own branding |
| Duration | 5-60 s |
| Max file size | 500 MB |
| Formats | .mp4, .mov, .mpeg, .3gp |
Request stills at explicit times
Probe-only calls are free of cost in the OpenAPI text; stills are unbilled too, and only transcription is billed. The clip must be hosted on media.sume.com, so import it first per Media inputs.
curl -X POST https://api.sume.com/v1/video-inspect \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: corner-check-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/ad.mp4",
"frames": { "at": [0.5, 6, 11.5], "max_edge": 1920 }
}'Cut the corner boxes locally
Each returned frame has a durable url, width, and height. Crop 20 percent squares from each corner and view them side by side. The helper below only computes the boxes, so it runs anywhere; feed them to Pillow's Image.crop or your viewer.
def corner_boxes(w, h, frac=0.2):
cw, ch = int(w * frac), int(h * frac)
return {
"top_left": (0, 0, cw, ch),
"top_right": (w - cw, 0, w, ch),
"bottom_left": (0, h - ch, cw, h),
"bottom_right": (w - cw, h - ch, w, h),
}
for name, box in corner_boxes(1080, 1920).items():
print(name, box)If you find a mark
Re-render from a clean source. Cropping or covering someone else's mark is a different question that the video filter docs do not endorse and this post does not recommend; see the linked watermark-law post for context. If the mark is your own logo burned in by an earlier export, rebuild the timeline without it.
A review habit that scales
For a batch, sample the same three times on every file and keep the stills with the job record. Two minutes of looking at 12 corner crops catches the stock-footage logo that a render log never will.
Sume returns durable media.sume.com image URLs for each still, so the review set can be shared as links. The stills are evidence of what you checked, not proof that TikTok will accept the file; the platform's own preview tool, which the page recommends, remains the last step.
Sources
Related posts
More in Media tools
- TikTok horizontal ad minimum is 960x540: which 16:9 sizes clear it
TikTok's in-feed page lists 960 x 540 as the minimum for 16:9. Sume Timeline accepts 960x540, 1280x720 and 1920x1080, all at $0.10 per output minute.
- TikTok non-Spark ad captions: no links, @ or hashtags, lint first
TikTok's auction page says non-Spark captions allow no links, @ symbols, or hashtags; Spark Ads take 4 caption lines. Lint the text in Python before upload.
- White backgrounds hide TikTok's ad UI: dim the clip, check for free
TikTok's reservation page warns that white or transparent backgrounds can hide the nickname and captions. Dim with video-filter ops, check first, then re-probe.
- TikTok reservation ads need 2,500 kbps: compute it from the probe
TikTok's auction page asks for 516 kbps, its reservation and TopView pages for 2,500 kbps. Compute the average from video-inspect size and duration first.
Written by Sume