AI low-poly and voxel icons: a transparent set with one style anchor

Generate low-poly or voxel icons as transparent PNGs with gpt-image-2.5: one anchor icon, then the rest as references, with a size check at 64 and 128 pixels.

5 min readSume
All posts

For a low-poly or voxel icon set, generate one anchor icon with openai/gpt-image-2.5, background: "transparent" and output_format: "png", then pass it as a reference for every other icon. Describe the style in the same words each time: flat shaded facets, a fixed light direction, one palette.

Faceted art holds up better at small sizes than fine illustration, but check each icon at the size you will ship before accepting it.

Style line to reuse

Paste the same sentence into every prompt and change only the subject.

{
  "model": "openai/gpt-image-2.5",
  "prompt": "Low-poly 3D icon, flat shaded triangular facets, light from the upper left, teal and orange palette, centred, nothing behind it, no text. Subject: a paper airplane.",
  "input_references": [
    {"type": "image_url", "image_url": {"url": "https://example.com/anchor-cube.png"}}
  ],
  "background": "transparent",
  "output_format": "png",
  "aspect_ratio": "1:1"
}

Shrink check (read 2026-10-04)

A 1024-pixel icon shown at 64 or 128 pixels loses facets. The table gives the reduction factor, computed from 1024.

Downscale from a 1024x1024 icon (read 2026-10-04)
Shipped sizeReductionPixels per facet edge if the icon has 8 facets across
3232x4
6416x8
1288x16
2564x32

Contact sheet

Render every icon at the real sizes on one sheet and look at it before approving the set. This script runs as is on placeholder squares.

from PIL import Image

icons = [Image.new("RGBA", (1024, 1024), (30 * i, 120, 160, 255)) for i in range(1, 5)]
sheet = Image.new("RGBA", (4 * 140, 140), (255, 255, 255, 255))
for i, icon in enumerate(icons):
    sheet.paste(icon.resize((128, 128), Image.LANCZOS), (i * 140 + 6, 6))
sheet.save("contact-sheet.png")
print(sheet.size)

When one drifts

If a single icon breaks the style, regenerate just that one with the anchor and the previous good icon as references. gpt-image-2.5 accepts up to 16 references, and a failed generation is not billed.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume