AI tattoo flash sheet: 12 designs in one Ideogram V3 image, sliced

One Ideogram V3 image holds a 3x4 sheet of 12 flash designs for $0.075 billed; slice it into 12 files in Pillow instead of paying for 12 calls ($0.90).

5 min readSume
All posts

To make a tattoo flash sheet, generate one 3:4 sheet on ideogram/ideogram-v3 showing a 3-by-4 grid of small designs, then cut it into 12 files with Pillow. Sume lists Ideogram V3 at $0.06 per image, billed at list times 1.25 as $0.075, so the whole sheet costs $0.075 against $0.90 for twelve separate calls.

A flash sheet is a page of separate small designs an artist can choose from, which is what makes the one-image-then-slice approach work. Prices and parameters are from Sume's Image API page and the catalog source, read on 2026-10-05. Treat the designs as concepts for an artist to redraw; they are not stencils.

What does Ideogram V3 offer for a sheet?

Ideogram V3 lists 15 aspect ratios, including 3:4, 4:5 and the tall 1:3, and a public quality of low, medium or high that Sume maps to the provider's speed setting. The catalog row is edit-capable, so a chosen design can be sent back as a reference.

Flash sheet cost on Ideogram V3 (read 2026-10-05)
ApproachCallsBilled cost
One sheet of 12 designs, then slice1$0.075
Twelve single-design calls12$0.90
Three sheets for variety3$0.225
Model idideogram/ideogram-v3Image API page

How do I generate and cut the sheet?

Ask for a plain white background and clear gaps between designs, then cut by an even 3-by-4 grid. If the model's spacing is uneven, cut with a margin. The script reads the first result URL and crops 12 tiles.

import os, requests
from io import BytesIO
from PIL import Image

r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json={"model": "ideogram/ideogram-v3", "aspect_ratio": "3:4", "quality": "high",
          "prompt": "Tattoo flash sheet, a 3 by 4 grid of 12 small separate black-ink designs: "
                    "dagger, rose, moth, swallow, anchor, key, snake, lantern, moon, "
                    "compass, sparrow, hand. White background, wide gaps, no text."},
    timeout=60,
)
if r.status_code != 200:
    raise SystemExit(f"{r.status_code}: {r.text}")
url = r.json()["data"][0]["url"]
sheet = Image.open(BytesIO(requests.get(url, timeout=60).content))
w, h = sheet.size
for i in range(12):
    col, row = i % 3, i // 3
    box = (col * w // 3, row * h // 4, (col + 1) * w // 3, (row + 1) * h // 4)
    sheet.crop(box).save(f"flash-{i + 1:02d}.png")

What can go wrong with a sliced sheet?

If the call takes more than 30 seconds it returns 202 and the body has no image list; the script above stops on anything but 200, and a production pipeline should poll the job instead. See the Jobs and results page for the result route.

  • Count the designs; a sheet can come back with 11 or 13, and you must cut by what you got.
  • Do not present generated designs as an artist's original flash without saying so.
  • Ask the client for their own style reference if they need one; send it as an image reference.
  • Pillow is not part of Sume; install it with pip install pillow requests.

Sources

Related posts

More in Models

All Models posts

Written by Sume