Meta placement to aspect ratio map: three Sume renders cover it
Meta recommends 9:16 for Stories and Reels, 1:1 and 4:5 for Feed, 16:9 for in-stream. Submit Sume jobs at 9:16, 1:1 and 16:9; crop 4:5 only if needed.

Meta's aspect-ratio page maps Stories, Status and Reels to 9:16, Feed to 1:1 and 4:5, in-stream video to 16:9 and Audience Network to 9:16. Three Sume video jobs, one each at 9:16, 1:1 and 16:9 on a model that lists all three, cover every placement except native 4:5.
The map from Meta's page
Meta recommends 9:16 so a vertical video captures the whole screen in Stories, Status and Reels. For Feed placements, both 1:1 and 4:5 are supported for images and videos. For in-stream video, horizontal 16:9. For Meta Audience Network placements, vertical 9:16.
The page also describes an aspect ratios view in Ads Manager. If you do not supply all four variations, Meta fills the gaps with padding, media expansion, cropping and AI options, and it tells you to upload your own variations when possible for the most control.
| Placement | Meta recommends | Sume aspect_ratio | Route |
|---|---|---|---|
| Stories, Status, Reels | 9:16 | 9:16 | Native render |
| Feed | 1:1 and 4:5 | 1:1 (4:5 by crop of 3:4) | Native or crop |
| In-stream video | 16:9 | 16:9 | Native render |
| Audience Network | 9:16 | 9:16 | Reuse the vertical |
Submit three jobs
The prompt and the model stay identical, and only aspect_ratio changes. Each job reserves its own price at the list rate times 1.25, so three shapes cost three jobs. Use a model that the catalog says lists all three ratios (see the filter post) and give each submit a distinct Idempotency-Key so a retry cannot double-charge.
import json, os, urllib.request
def submit(ratio):
body = json.dumps({
"model": "seedance-2",
"prompt": "A ceramic mug on a wooden table, slow push in",
"duration": 5,
"resolution": "720p",
"aspect_ratio": ratio,
}).encode()
req = urllib.request.Request(
"https://api.sume.com/v1/videos", data=body,
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": "mug-" + ratio.replace(":", "x"),
})
with urllib.request.urlopen(req) as r:
return json.load(r)
for ratio in ("9:16", "1:1", "16:9"):
job = submit(ratio)
print(ratio, job["id"], job["status"])Then poll and upload
Each submit returns 202 with an id, a polling_url and a status. Poll GET /v1/videos/{job_id} until the status is completed, then read unsigned_urls. Upload the three files to Ads Manager, one per ratio, and look at each in the aspect ratios view before publishing.
When 4:5 matters
If Facebook Feed is your priority, Meta lists 4:5 for single-image ads to Facebook Feed. For video, a 1:1 render is accepted in Feed. Only add a 4:5 crop when you want to fill more of the phone screen, and follow the 3:4 route in the crop post.
Sources
Related posts
More in Use cases
- Meta rejects political ads with no AI disclosure: June 2026 detection
From June 1, 2026 Meta uses automated detection for AI in political ads. Non-disclosure means rejection and repeat penalties. What to keep for a review.
- Meta political ads: disclose photoreal AI video and realistic audio
Meta's rules for social issue, election and political ads require disclosing photorealistic AI images, video and realistic audio. What counts in a Sume clip.
- Meta text overlay rules: one CTA, contrast, safe zone, Sume captions
Meta's overlay advice is four lines: clean font, contrasting hue, one call to action, stay in the safe zone. How to meet each with a Sume caption job.
- Midjourney 100K-image history crash fixed; archive your files anyway
Midjourney's Oct 2 changelog fixes a crash opening images in 100K+ histories. Keep your own copy: download outputs and log prompts, settings and cost.
Written by Sume