AI jigsaw puzzle image via API: 4:3 art and quality checks on Sume

Puzzle art needs detail everywhere. Generate at 4:3 on Sume, ask for dense scenes, check resolution and upscale before printing. From $0.025.

5 min readSume
All posts

A jigsaw puzzle image should be busy: lots of distinct small areas, no large flat sky, and a common landscape ratio such as 4:3, which every catalog row lists, read 2026-10-03. Generate with the Sume image API, pick a draw, then upscale it before you send it to a printer. Nano Banana 2 and Pro list a 4K tier, and Sume also has an image upscale API.

Print sizes and piece counts are the printer's call; ask the printer for its minimum resolution, and do not assume a number.

Prompt for density

  • Name 8 to 12 distinct objects in the scene (a market stall, kites, a bicycle, a cat) so no region is empty.
  • Ask for varied color across the frame to avoid large regions of a single hue.
  • Avoid text and thin straight lines, which make pieces hard to tell apart.

Resolution routes

Ways to reach a high-resolution source on Sume, read 2026-10-03.
RouteHowPer image
Native 4K tierNano Banana Pro, resolution: "4K"$0.1875 at 1K; 4K costs more
Native 4K tier, cheaperNano Banana 2, resolution: "4K"$0.10 at 1K; 4K costs more
Draft cheap, then upscaleQwen Image then the upscale API$0.025 plus the upscale price

A 4:3 request

Request four options and choose. 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": "google/nano-banana-pro",
        "prompt": "crowded seaside market scene, many distinct objects, vibrant varied colors, no text",
        "aspect_ratio": "4:3",
        "resolution": "2K",
        "n": 2,
    },
    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"])

Before you print

Zoom to 100 percent and look for smeared small objects, since fine detail is where generated art breaks. Check the pixel dimensions against the printer's requirement and upscale if short. Keep the original generation and the final file together.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume