Reel safe zones: set compose margin_ratio to keep text clear

Instagram Edits shows safe zones in the editor. For a plate added in code, Sume compose overlay margin_ratio (0 to 0.45) sets the distance from the edge.

4 min readSume
All posts

Instagram's Edits guide to editing iPhone videos mentions safe zones in the editor (read 2026-10-03), the regions where the app's own interface can cover your text. When you add a text plate in code instead of in the app, Sume's timeline compose overlay controls the plate's distance from the edge with margin_ratio, a value from 0 to 0.45 of the frame height, and its size with width_ratio from 0.05 to 1 of the width. I could not retrieve the exact safe-zone dimensions from Instagram, so this post does not give any; it shows how to make the placement a number you can change once you have them.

Overlay layout fields

Overlay places one still over a clip. The layout keys that apply are position (top, center or bottom), width_ratio (default 0.9) and margin_ratio (default 0.05), with the plate keeping its own aspect. Stack-only keys such as split and ratio are refused for overlay, with compose_overlay_takes_no_stack_layout. The still is held for the whole clip, so a plate is on screen from the first frame to the last.

Compose overlay layout fields, read 2026-10-03
FieldRangeDefault
positiontop, center, bottomNot stated; set it explicitly
width_ratio0.05 to 1 of width0.9
margin_ratio0 to 0.45 of height0.05
output width and height256 to 2160, evenSource geometry

Place a plate with a larger margin

The default margin of 0.05 puts a bottom plate close to the lower edge, which is where Reel controls and captions often sit. Raising margin_ratio moves the plate inward. Try a larger value, look at a still from the result, and compare it with Instagram's current guidance for the 9:16 frame. The call below uses a vertical 1080 by 1920 output and a margin_ratio you can change.

import json, os, urllib.request

req = urllib.request.Request(
    "https://api.sume.com/v1/timeline-1.0/compose",
    data=json.dumps({
        "operation": "overlay",
        "image": {"url": os.environ["SUME_PLATE_URL"]},
        "video": {"url": os.environ["SUME_CLIP_URL"]},
        "layout": {"position": "bottom", "width_ratio": 0.8, "margin_ratio": 0.2},
        "output": {"width": 1080, "height": 1920, "fps": 30},
    }).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
        "Content-Type": "application/json",
        "Idempotency-Key": "safe-zone-plate-v1",
    },
    method="POST",
)
with urllib.request.urlopen(req) as res:
    job = json.load(res)
print(job["request_id"])

Check it like a viewer

Pull a still with video frames from the finished clip and view it at phone size. Look for the plate near the bottom and the top, because the interface covers both. Test on a real phone, since a computer preview shows no overlay at all.

Plates are static, so one margin has to work for the whole clip. If your captions are burned in with video captions, place them first and then set the plate so the two do not collide. A plate at the top of the frame and captions at the bottom is the simplest arrangement. Keep the numbers in one place in your script so that a change in Instagram's layout means editing one value.

Compose is flat-priced at $0.02 per job for clips up to 300 seconds, so trying three margins costs six cents. That makes it cheap to compare, and pick the one that stays clear on your phone.

One plate per Reel versus per scene

Keep a record of the margin you settle on, along with the output size and the date, because Instagram can change how its interface sits over a Reel and you will want to know which value you tested against. A plate that was clear last month may need a larger margin after an interface change, and a recorded value turns that into a one-line edit and a rerun at two cents. Do the same for the width ratio: a plate at 0.8 of the width leaves a tenth of the frame on each side, which is a reasonable starting point for a short line of text but too wide for a long one.

Compose gives one still for the whole clip, so a plate that must change partway through needs separate clips. Split the Reel with video trim, compose each piece with its own plate, and join the pieces in Timeline. That is more jobs, but each is two cents, and the plate in each section can sit in its own position.

If the plate is a logo rather than text, the same margin logic applies, but there is less to lose if it is partly covered. Text is the case to test carefully, because a covered word changes the meaning of the line.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume