Linktree video background 9:16 or 16:9: make both from one clip
Linktree's page pairs 9:16 with landscape and 16:9 with portrait. Cut both ratios from one Sume clip with video filter crop fractions: 0.3164 wide, x 0.3418.

Make both and test them, because the Linktree page is ambiguous. It recommends a video background with an aspect ratio of 9:16 (landscape) or 16:9 (portrait). Those labels are the reverse of how most people name the two shapes, since 9:16 is tall and 16:9 is wide. The page also gives 50MB as the size limit and says the video loops with the sound muted. Sume video filter can cut a 9:16 crop out of a 16:9 clip, and the reverse, so one source gives you both.
The rest of this post gives the math, a function that computes the crop for any ratio, and a test plan.
The crop fractions
The rule for a centered crop is a ratio of ratios. To get a 9:16 frame out of a 16:9 source, keep the full height and take a width of (9/16) divided by (16/9), which is 81/256, or 0.3164. To center it, x is half of what is left, 0.3418. To get a 16:9 frame from a 9:16 source, swap the roles: keep the full width, take a height of 0.3164, and center it at y 0.3418.
The math is the same one that any centered crop uses. It is worth checking by hand once: 9 divided by 16 is 0.5625, and 16 divided by 9 is 1.7778. Dividing the first by the second gives 0.3164. Half of the rest, which is 0.6836 divided by 2, gives 0.3418.
| Source | Target | Crop x | Crop y | Width | Height |
|---|---|---|---|---|---|
| 16:9 | 9:16 | 0.3418 | 0 | 0.3164 | 1 |
| 9:16 | 16:9 | 0 | 0.3418 | 1 | 0.3164 |
What the filter does
The video filter docs define crop as fractions of the source frame. The x and y values are between 0 and 1, width and height between 0.05 and 1, and the sums x plus width and y plus height must not exceed 1. The compiler rounds to even values for yuv420p. The source limit on this tool is 300 seconds, which is far more than a loop needs.
A 1920 by 1080 source at width 0.3164 is about 607 pixels, which rounds to an even value. A frame that narrow is small for a full-screen phone background, so expect softness. If sharpness matters, start from a taller source, such as a clip that was generated vertically in the first place.
Compute the ops for any ratio
The function below computes the fractions for any source and target ratio and prints the ops array you would send. It does no network call. The check endpoint of the filter API is free and validates the program before you pay for an encode.
import json
def center_crop(src_w, src_h, target_w, target_h):
src = src_w / src_h
target = target_w / target_h
if target < src:
width, height = target / src, 1.0
else:
width, height = 1.0, src / target
x = round((1 - width) / 2, 4)
y = round((1 - height) / 2, 4)
return {"op": "crop", "x": x, "y": y,
"width": round(width, 4), "height": round(height, 4)}
print(json.dumps([center_crop(1920, 1080, 9, 16)]))
print(json.dumps([center_crop(1080, 1920, 16, 9)]))Test before you commit
Upload both versions to a test page and see how they fill a phone screen. The page does not describe what happens when the ratio does not match the viewport, such as whether it crops or letterboxes, and a test is the only way to learn it.
Each filter encode is $0.02 at the public rate, and the check is free. After each result, probe the size, since the 50 MB cap applies to either version.
If both versions look right on the page, keep both and note which one the editor shows for which device. If only one works, you have learned how the site handles the ratio, which the page does not say.
Off-center subjects
One caution on faces. A centered crop cuts the left and right thirds off a wide shot, so a subject that sits off center will be cut. Shift x to follow the subject, and keep x plus width at or below 1.
The filter has a second option for loops that need a polish. Its dim operation multiplies the luma of the clip by an amount between 0 and 1, and an amount of 0.45 makes the clip darker. A darker background helps link buttons stand out, and that is a one-line addition to the ops array before the crop.
Sources
Related posts
More in Integrations
- Can a MAI-Voice-2.1 WAV join a Sume timeline? Hosted audio only
Sume timeline audio joins only Sume-hosted files, and the import route takes TikTok or Instagram URLs, so a MAI-Voice-2.1 file stays outside. What to do.
- Make webhook 429 at 300 requests per 10 seconds and Sume retries
Make returns 429 above 300 webhook requests per 10 s. Sume retries a non-2xx up to 10 times, 30 s apart, so a short burst clears; your own replay loop does not.
- Make's webhook queue holds 667 items per 10,000 credits: plan for Sume
A Make webhook queue holds 667 items per 10,000 licensed credits, capped at 10,000, and answers 400 when full. Sume retries 10 times, so size the queue first.
- Make 'Process data in order' with Sume job events: what stays ordered
Make's Process data in order runs one execution at a time. Sume sends only terminal job events with no ordering promise, so dedupe on job_id.
Written by Sume