Reddit carousel ad specs: 2 to 6 images, 4:5 at 1200x1500

Reddit carousel ads take 2 to 6 JPG, PNG or GIF cards, 4:5 at 1200x1500 is the cross-device size. Limits for headline, caption, URLs, plus a Sume batch.

5 min readSume
All posts

A Reddit carousel ad takes 2 to 6 image cards, each a JPG, PNG or GIF, with one headline and a destination URL for every card. The cross-device size Reddit lists first is 4:5 portrait at 1200 x 1500 px, and Reddit strongly recommends one aspect ratio across all cards.

Everything below comes from Reddit's Carousel Ad Specifications page, read on 2026-10-03. The single-image and video specs live in separate posts: Reddit ad image size and Reddit video ad specs. This one is only about the carousel.

What are the text and file limits for a Reddit carousel?

The page splits limits into text, image and thumbnail. Per-card fields (destination URL, caption, display URL) repeat once per image, so a six-card carousel needs six destination URLs.

Reddit carousel ad limits, from Reddit's carousel spec page (read 2026-10-03)
FieldLimitNotes
Cards (images)2 to 6Required files: 2 to 6
Card file typeJPG, PNG or GIFVideo is not on the list
Card file size20 MB; GIF 3 MBRecommended GIF length 3 to 10 seconds
Headline300 charactersRecommended 100 or fewer, safer 80 or fewer; 1 per ad, required
Destination URL268 characters1 per image, required
Caption50 characters1 per image, optional
Display URL100 charactersMust match the destination URL's domain
Call to actionChoose from options

Which carousel image sizes does Reddit list?

Reddit lists recommended resolutions by where the ad shows, and says any aspect ratio can be used but may cause formatting discrepancies such as letterboxing. Square 1:1 at 1200 x 1200 px and portrait 3:4 at 900 x 1200 px are listed as acceptable ratios for the cross-device case.

  • Use the highest resolution that meets the ratio, and keep every card on the same ratio.
  • The compact-view thumbnail is generated from the first image. You can replace it with an upload: JPG, PNG or GIF, up to 3 MB, recommended 4:3 at 400 x 300 px, with 1:1 at 300 x 300 px acceptable.
  • Combine feed and conversation placements: the page says carousel images show in both.
Reddit carousel recommended image sizes by device (read 2026-10-03)
RatioResolutionCross-deviceMobileDesktop
Portrait 4:51200 x 1500 pxYesYesYes
Landscape 4:31440 x 1080 pxYesYesYes
Landscape 16:91920 x 1080 pxYesYesYes
Square 1:11200 x 1200 pxAcceptableYesNot listed
Portrait 3:4900 x 1200 pxAcceptableYesNot listed

How do I make a matching set of carousel cards with Sume?

The 4:5 portrait ratio is the one size that is listed for cross-device, mobile and desktop at once, so build the set at 4:5 and crop only if a placement needs it. Sume's Image API takes aspect_ratio values that include 4:5, but a model only accepts what its catalog descriptors list, and a request with an unlisted parameter is rejected with 400 unsupported_parameter. So read the catalog first, then pick a model that advertises 4:5.

The docs also note that for some models exact pixel sizes at 4:5 are a documented post-step, not what the model returns, so check the delivered pixels against Reddit's 1200 x 1500 before you upload. Generate one card per request with a shared style sentence in the prompt, so all cards read as one set. Reddit's page does not mention AI disclosure for carousel cards, so this post makes no claim about it.

import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
models = requests.get("https://api.sume.com/v1/images/models", headers=H).json()["data"]
ok = [m["id"] for m in models
      if "4:5" in m["supported_parameters"].get("aspect_ratio", {}).get("values", [])]
assert ok, "no catalog model lists 4:5"
style = "Flat studio product photo, soft daylight, warm grey backdrop. "
cards = ["A canvas tote bag, front view", "The same tote bag, open to show the lining"]
for i, subject in enumerate(cards):
    r = requests.post("https://api.sume.com/v1/images",
        headers={**H, "Content-Type": "application/json"},
        json={"model": ok[0], "prompt": style + subject, "aspect_ratio": "4:5"})
    print(i, r.status_code, r.json().get("data"))

What to check before you upload

A status of 200 returns the image in data[].url; a 202 means the job outran the 30-second blocking budget and you read the result from the job endpoints instead. Check the status code, not the body shape.

Then walk the list: 2 to 6 cards, one ratio, each file under 20 MB (3 MB for a GIF), a destination URL of 268 characters or fewer per card, a caption of 50 characters or fewer, and a headline you would be happy to see cut at 80 characters. If you also run catalog-driven ads, Reddit's Dynamic Product Ads page describes a carousel type whose cards come from the catalog rather than from files you upload.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume