Instagram 4:5 feed video from a 3:4 Sume render: the crop fractions

Sume models list 3:4 but not 4:5. Render 3:4, then crop 3.125% off the top and bottom with video-filter. Check the program free before the $0.02 encode.

4 min readSume
All posts

Render the clip at 3:4, then crop it to 4:5 with Sume's video-filter crop op: keep the full width and 93.75% of the height, starting 3.125% down. It is a crop of the 3:4 frame, not a new generation, so the encode is a $0.02 pass and the check beforehand is free.

Why a crop and not a 4:5 request

Meta's aspect-ratio page lists 4:5 as a supported vertical ratio, and says 1:1 and 4:5 both work for video in Feed placements. Sume's catalog is the constraint. The video docs list the ratios the API knows, and each model advertises its own subset in supported_aspect_ratios. The seedance-2 example in the docs advertises 21:9, 16:9, 4:3, 1:1, 3:4 and 9:16. There is no 4:5 in that list.

A value outside a model's list returns a 400 unsupported_capability, so asking for 4:5 fails before anything is billed. The closest ratio on the list is 3:4, which is a little taller than 4:5, so a trim of the top and bottom edges gets you there.

The arithmetic

Let the 3:4 frame be 3 units wide and 4 tall. A 4:5 frame of the same width is 3 wide and 3 x 5/4 = 3.75 tall. The kept height is 3.75 / 4 = 0.9375 of the frame, so 0.0625 is removed, split evenly: y = 0.03125 at the top and the same at the bottom. The numbers are fractions, so they hold at any pixel size. At 1080x1440 the result is 1080x1350 (1440 x 0.9375 = 1350).

Sume's crop op takes x, y, width and height as fractions of the source frame, with width and height between 0.05 and 1, and the compiler rounds to even pixel values for yuv420p. Even values keep the result clean at 1080x1350.

Crop from 3:4 to 4:5, computed (Meta lists both ratios as Feed-supported) (read 2026-10-05)
SourceTargetCrop x, yCrop width, heightPixels
3:4 (1080x1440)4:50, 0.031251, 0.93751080x1350
3:4 (810x1080)4:50, 0.031251, 0.9375810x1012 (rounded even)

Check, then encode

Send the program to POST /v1/video-filter/check first. It runs the schema, op whitelist and source preflight, creates no job and costs nothing. It returns diagnostics instead of a 400. A valid program also returns an estimate and a next_action of submit_video_filter.

Then send the same body to POST /v1/video-filter with an Idempotency-Key. The source must be a media.sume.com artifact or asset of your workspace. The result is a new MP4 and the source is untouched.

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/portrait.mp4",
    "ops": [{ "op": "crop", "x": 0, "y": 0.03125,
              "width": 1, "height": 0.9375 }]
  }'

What you lose and how to plan for it

You lose 3.125% of the height at each edge. Keep the product and any burned-in text away from the outer edges of the 3:4 render. In the prompt, ask for the subject centered with margin, and add captions after the crop so they land inside the final frame.

Meta says Instagram Feed ads that are not 9:16 should keep the bottom and side edges free of key elements, so leave extra margin there as well.

Confirm the size

Pull one still from the cropped file with POST /v1/video-inspect and read the width and height of the frame. If it reads 1080x1350 the file is the 4:5 Meta lists. If the source render was smaller, the same fractions give a proportionally smaller 4:5.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume