Crop video size: the 0.05 minimum side in video-filter
A video-filter crop needs width and height of at least 0.05 and a rectangle inside the frame; anything else returns video_filter_crop_out_of_bounds.

To crop a video's size in Sume, send a crop op with fractions of the source frame. width and height must each be between 0.05 and 1, and the rectangle must stay inside the frame. A side under 0.05, or a rectangle that runs past the edge, is refused with video_filter_crop_out_of_bounds.
Rules are from the Video filter docs, read 2026-10-01. The Midjourney V8 edit model page describes changing regions of an image; a crop here is a plain rectangle on a clip, with no generation.
What does the 0.05 minimum mean?
A crop is written as four fractions of the source frame, so you never need the pixel size. The minimum applies to width and height only: they live in [0.05, 1], while x and y live in [0, 1]. A 0.04 wide strip is refused.
On top of the per-field ranges, x + width and y + height must both be at most 1.
Which rectangles are refused?
Each row below is checked against the documented rules, not measured.
| Rectangle (x, y, width, height) | Result |
|---|---|
0, 0, 1, 1 | Accepted: the whole frame |
0.25, 0, 0.5, 1 | Accepted: a centered half-width strip |
0.5, 0, 0.5, 1 | Accepted: right half, touches the edge |
0.6, 0, 0.5, 1 | Refused: x + width is 1.1 |
0, 0, 0.04, 1 | Refused: width is under 0.05 |
0, 0.9, 1, 0.2 | Refused: y + height is 1.1 |
Why is my output a pixel off the fraction?
The compiler even-rounds the crop for yuv420p, so the output width and height are even numbers. A fraction that lands on an odd pixel count is rounded to an even one.
How do I test a rectangle before paying?
Send the same body to POST /v1/video-filter/check. It runs the schema checks, creates no job and reserves no credits, and returns diagnostics instead of a 400.
For the full range rules and an aspect-ratio example, see Crop a video by fractions.
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, "y": 0, "width": 0.04, "height": 1 }]
}'Sources
Related posts
More in Developers
- FFmpeg darken video: why Sume refuses dim amount 0
A dim amount of 0 is refused: the range is above 0 up to 1, and 0 or above 1 returns video_filter_amount_out_of_range. Check the program free before you encode.
- ffmpeg filtergraph too long: video-filter's 2048 and 32 limits
A Sume video-filter filtergraph is capped at 2048 characters and 32 named filters. Past either, or with an unknown filter, you get invalid_filtergraph.
- ffmpeg filter_complex [0:v] in video-filter: refused, labels fine
Sume video-filter refuses stream specifiers like [0:v] in a filtergraph because the server wraps the input and output. Internal labels such as [a] are allowed.
- video_filter_too_many_ops: more than 8 ops, use filtergraph
Sume video-filter accepts at most 8 ops. A ninth returns video_filter_too_many_ops; move extra pixel work into the filtergraph, which has its own caps.
Written by Sume