LinkedIn Lead Gen Form image 552x200: make it from a 3:1 render

LinkedIn recommends a 552px by 200px form image. Sume has no 552:200 ratio, so ask Ideogram for 3:1, center-crop about 8% of the width, and resize.

5 min readSume
All posts

LinkedIn's Lead Gen Form specifications say the recommended form image size is 552px by 200px, which is 2.76:1. Sume's Image API takes a named aspect_ratio per model and has no 2.76:1 value, so generate at 3:1 with an Ideogram model, center-crop about 8% of the width, and resize to 552x200.

The LinkedIn page is a recommendation, not a hard limit, and the text I read gives no file type or file-size rule for this image. Check Campaign Manager's own upload message before you build a batch around it.

Which Sume ratio is closest to 552x200?

The cheapest crop is the ratio nearest 2.76. The ratio lists come from Sume's image catalog, so confirm them with GET /v1/images/models for the model you pick, because every model publishes its own aspect_ratio values.

Target ratio from LinkedIn's Lead Gen Form specifications; Sume ratios from the image catalog (read 2026-10-05)
Sume ratioWidth / heightCrop needed to reach 2.76:1Listed for
3:13.00About 8% of the widthIdeogram V3 and Ideogram 4.5
4:14.00About 31% of the widthNano Banana 2
2:12.00About 28% of the heightIdeogram models and Grok image
21:92.33About 15% of the heightNano Banana 2 and Nano Banana Pro

Render at 3:1, then crop to 552x200

The request below uses the documented POST /v1/images body. On this route the default mode is sync with a 30-second wait, so a slow job returns 202 instead of 200; the script stops in that case and you read the finished job from the jobs result endpoint. The crop is computed from the returned size, so it works at 1K or 2K.

import io, os, requests
from PIL import Image

API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
body = {"model": "ideogram/ideogram-v4.5", "aspect_ratio": "3:1", "quality": "low",
        "prompt": "Clean wide banner, a laptop on a desk, soft daylight, subject centered"}
r = requests.post(f"{API}/v1/images", headers=H, json=body, timeout=60)
r.raise_for_status()
if r.status_code != 200:
    raise SystemExit("202: job still running, read /v1/jobs/{id}/result")
url = r.json()["data"][0]["url"]
img = Image.open(io.BytesIO(requests.get(url, timeout=60).content)).convert("RGB")
w, h = img.size
new_w = round(h * 552 / 200)
left = (w - new_w) // 2
img.crop((left, 0, left + new_w, h)).resize((552, 200), Image.LANCZOS).save("form-image.png")
print(w, h, "->", 552, 200)

What to check before you upload

Ideogram 4.5 sets its price by quality, and the Image API docs list $0.03, $0.06 and $0.22 per image at low, medium and high before Sume's pricing, so low is a sensible draft setting. Read the billed amount from usage.cost on the response.

  • Keep logos and any words in the middle 90% of the frame, because the crop removes the outer edges.
  • Look at the 552x200 result at its real size; a wide banner shrunk this far hides small text.
  • Generate a few drafts with n before you spend on high; the per-model n cap is in the catalog.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume