Punch-in zoom on video by API: crop or zoompan, no keyframes
Sume has no auto zoom switch. Use a crop op for a fixed punch-in or the allowlisted zoompan filter in a video-filter graph; there are no keyframes.

Sume does not detect moments and zoom on them. What POST /v1/video-filter offers is a fixed punch-in through a crop op, or a zoompan filter you write yourself in a filtergraph. There is no keyframed zoom parameter.
Submagic's create-project docs list a magicZooms boolean that is set per project. Sume's side, from Video filter and the compiler's filter allowlist, read 2026-10-01, is lower level.
How do I get a static punch-in?
Use a crop op. It takes fractions of the source frame: x, y in 0 to 1, width, height from 0.05 to 1, and each edge must stay inside the frame. Cropping to 0.8 by 0.8 centered is a 1.25x punch-in. The output is the smaller cropped frame, so add a scale step in the graph if you need the original size. Cut the range first with video trim if only seconds 4 to 6 should zoom.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"ops": [{ "op": "crop", "x": 0.1, "y": 0.1, "width": 0.8, "height": 0.8 }]
}'Can I animate the zoom?
zoompan is in VIDEO_FILTER_GRAPH_ALLOWED_FILTERS, so a graph may name it, and it is ffmpeg's own zoom-and-pan filter. The program contract has no keyframe list, though: any motion has to be an ffmpeg expression inside the string. The docs say a program that passes /check can still fail on the worker for a bad expression, memory or time, so test on a short trimmed clip.
What are the limits?
| Item | Limit |
|---|---|
ops[] | Max 8, applied before the filtergraph |
| Filtergraph | 2048 chars, 32 named filters, filters only |
| Source length | 300 seconds |
| Price | $0.02 per encode job; /check is free |
| Not allowed | trim, setpts, drawtext, lut3d, anything reading a file |
Where do the zoom moments come from?
You choose them. Find timestamps with video_inspect stills or a transcript, then split the clip around them with trim and apply the crop to those pieces. The filter allowlist post lists what else a graph can do.
Sources
Related posts
More in Developers
- Qwen Image 2.1: when you must show Built with Qwen
The Qwen Research License requires Built with Qwen or Improved using Qwen when outputs train a distributed model, and bars Qwen as a derivative's main name.
- QwenImage21Pipeline in diffusers vs an HTTP image request on Sume
QwenImage21Pipeline runs Qwen-Image-2.1 locally on a GPU. Sume has no 2.1 id: a hosted call is one POST /v1/images with a listed model. Side-by-side.
- Qwen Image 2.1 LoRA redistribution: notice file and Hangzhou courts
Sharing Qwen-Image-2.1 weights or a LoRA needs the license copy, modified-file notices and a Notice file; disputes go to the Hangzhou courts. Clause summary.
- remove.bg API rate limit: 500 per minute, weighted by megapixels
remove.bg allows 500 images per minute at about 1 MP, less for larger inputs. Sume limits requests per minute per key and sends retry-after on 429.
Written by Sume