AI paper doll cutouts: transparent outfits that fit one body, via API

Make paper-doll dress-up pieces: one body pose as the anchor, each outfit as a transparent PNG using the body as a reference, then print them at a shared scale.

5 min readSume
All posts

For paper-doll cutouts, generate the doll body once in a neutral front-facing pose, then request each outfit as a separate transparent PNG using the body as an input_reference so the shoulders and hem line up. Use background: "transparent" on openai/gpt-image-2.5 for every piece.

Add small tabs to the garments in the prompt, and keep every piece at one image size so a single scale factor prints them all.

One outfit request

Name the garment, the body pose to match and the tab. Ask for the garment alone, not the doll wearing it.

{
  "model": "openai/gpt-image-2.5",
  "prompt": "The red raincoat only, drawn to fit the doll in the reference at the same size and position, with a small fold-over tab at each shoulder. Same flat cartoon style. Nothing behind it, no doll, no text.",
  "input_references": [
    {"type": "image_url", "image_url": {"url": "https://example.com/doll-body.png"}}
  ],
  "background": "transparent",
  "output_format": "png",
  "aspect_ratio": "2:3"
}

Print sizes (read 2026-10-04)

At 300 dpi, a 2:3 piece of 2336x3504 pixels (the largest 2:3 size in gpt-image-2.5's documented rule) prints about 7.8 x 11.7 inches. A doll of about 6 inches fits comfortably on a letter sheet.

2:3 piece at 300 dpi (read 2026-10-04)
PixelsInches at 300 dpiInches at 200 dpi
2336x35047.79 x 11.6811.68 x 17.52
1024x15363.41 x 5.125.12 x 7.68

Scale and tab check

This places the pieces on one sheet at a shared scale. It runs as is with placeholder rectangles.

from PIL import Image

pieces = [Image.new("RGBA", (1024, 1536), (200, 40 * i, 60, 255)) for i in range(1, 4)]
scale = 0.5
sheet = Image.new("RGBA", (3 * 540, 780), (255, 255, 255, 255))
for i, piece in enumerate(pieces):
    small = piece.resize((int(piece.width * scale), int(piece.height * scale)))
    sheet.paste(small, (i * 540 + 14, 6))
sheet.save("sheet.png")
print(sheet.size)

Consistency

Fit drifts when the body and outfit are sent with different framing. Reuse the same aspect ratio for the body and every outfit, and regenerate only the piece that misses.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume