Facebook Page photos: 320x320 profile, 16:9 and 2.4:1 cover

Facebook recommends a 320 x 320 Page profile picture cropped to a circle and a cover that shows 16:9 on computer, 2.4:1 on mobile. Make one safe-zone cover.

4 min readSume
All posts

Facebook recommends a Page profile picture of 320 x 320 pixels, shown at 176 x 176 on computer and 196 x 196 on smartphones and cropped to a circle. The cover photo shows at 16:9 on computer and 2.4:1 on mobile, at least 400 x 150 pixels. So make one 16:9 cover with the important content in the centre band that survives both crops. Sume's Image API gives you the 16:9 frame directly.

The figures are from Facebook's help page, read on 2026-10-02.

What are Facebook's numbers?

The page splits profile and cover rules.

Facebook Page photo sizes, from Facebook Help, read 2026-10-02.
ItemWhat the page says
Profile picture recommended320 x 320 px
Profile display176 x 176 on computer, 196 x 196 on smartphone, cropped to a circle
Cover photo shape16:9 on computer, 2.4:1 on mobile
Cover minimum400 px wide and 150 px tall
Fastest-loading coversRGB JPG, 851 x 315 px, under 100 KB
Logos or textUse PNG

How do I design for two crops?

A 16:9 image is taller than a 2.4:1 one, so the mobile crop removes the top and bottom. Keep the logo, face or product in the middle third vertically and let the edges carry background only.

Request a 16:9 cover from Sume

Use aspect_ratio 16:9 and ask for open space at the top and bottom. For the profile picture use your real logo as a 1:1 PNG, because a logo should not be regenerated.

import os, requests

r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json={
        "model": "sume/auto",
        "prompt": "Wide cover image of this shop interior, the counter centred, empty space above and below, no text in the image",
        "input_references": [
            {"type": "image_url", "image_url": {"url": "https://example.com/shop/interior.jpg"}}
        ],
        "aspect_ratio": "16:9",
    },
    timeout=60,
)
body = r.json()
if r.status_code == 200:
    print(body["data"][0]["url"])
else:  # 202: poll the job
    print(body["data"]["status_url"])

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume