AI vintage travel poster via API: 3:4 art with the headline in code

Vintage travel poster art at 3:4 from any Sume row, then the place name set in code. From $0.025; Ideogram rows if the model draws the lettering.

5 min readSume
All posts

A vintage travel poster is flat color, bold shapes and a headline. On the Sume image API, 3:4 is listed by every catalog row, read 2026-10-03, so you are free to choose by price and by whether you need references. Two ways to handle the headline: let the model draw it (best on a row you have tested for lettering, like Ideogram V3 or 4.5) or leave a blank band and set it in code.

Setting it in code removes spelling risk and lets you change the place name for a series. Drawing it with the model is one step, but you must proofread each image.

Prompt skeleton

  • Style: "mid-century travel poster, flat shapes, limited palette of four colors, grain".
  • Scene: one landmark, one sun or moon shape, one layer of hills.
  • Layout: "empty band across the bottom third, no text" for the code route.
  • For the model-drawn route, quote the exact headline in double quotes and keep it to one to three words.

Which row

Options at 3:4, read 2026-10-03.
RouteRowPer image
Cheapest artQwen Image or Grok Imagine$0.025
Art plus references (your own sketch)Flux 2 Pro$0.0375
Model draws headlineIdeogram 4.5 (default medium) or V3$0.075

Generate and add the headline

Generate four options for four times the price, pick one, then add the text. A call that is still running after the 30-second wait returns 202 with a job envelope instead of 200, so check the status code before reading data; see Jobs and results.

import os
import requests

resp = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json={
        "model": "qwen/qwen-image",
        "prompt": "mid-century travel poster of a lighthouse on a cliff, flat shapes, four-color palette, grain, empty band across the bottom third, no text",
        "aspect_ratio": "3:4",
        "n": 4,
    },
    timeout=60,
)
resp.raise_for_status()
if resp.status_code == 202:
    print("still running:", resp.json()["data"]["status_url"])
else:
    for image in resp.json()["data"]:
        print(image["url"])

Then set the type

Draw the headline in the empty band with Pillow, as in the book-cover recipe. Keep the poster file name the same as the place so batches stay organized.

from PIL import Image, ImageDraw, ImageFont

img = Image.open("poster.png").convert("RGB")
d = ImageDraw.Draw(img)
font = ImageFont.load_default(size=img.width // 8)
w = d.textlength("PORTO", font=font)
d.text(((img.width - w) / 2, img.height * 0.78), "PORTO", font=font, fill="#f4e8c8")
img.save("poster-porto.png")

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume