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.

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.
| Field | Range | Default |
|---|---|---|
| position | top, center, bottom | Not stated; set it explicitly |
| width_ratio | 0.05 to 1 of width | 0.9 |
| margin_ratio | 0 to 0.45 of height | 0.05 |
| output width and height | 256 to 2160, even | Source 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
- Klaviyo email video: Video block or a GIF under 5 MB?
Klaviyo does not support embedded video in emails. Its Video block links a thumbnail to a hosted clip; a GIF must stay under 5 MB. Make the poster with Sume.
- Kwanzaa 2026 seven-day video series: one principle per day
Kwanzaa runs December 26 to January 1 with seven principles. Make a 28-second summary video for about $0.66 on Sume, or seven daily posts for about $2.46.
- Label an AI cold open on screen with a two-second caption card
Metricool: 3 billion+ AI-labelled TikTok videos. Burn your own disclosure card onto a silent AI clip with /v1/video-captions cues, $0.20 for up to 60 seconds.
- Lantern Festival 2027 riddle video: five riddles, one 35-second cut
The Lantern Festival is 20 February 2027. Make a lantern-riddle video from five stills, one motion clip and caption cues for about $1.22 in Sume costs.
Written by Sume