AI hoodie logo mockup: put your logo on a blank hoodie photo

Show your logo on a real blank hoodie photo with one Sume image edit: the hoodie first, the logo second, and a prompt that keeps the folds and the color.

4 min readSume
All posts

The hoodie photo plus the logo file

Before ordering a run of printed hoodies, a small brand wants to see the logo on the garment. You have a photo of a blank hoodie and a logo file. Two references and one edit call produce a mockup you can share with a printer.

Send the hoodie photo first and the logo second in input_references. Name them in the prompt as image 1 and image 2 so the model knows which is the garment and which is the artwork.

Sume Image API docs list ChatGPT Image 2.5 as openai/gpt-image-2.5 (Flare) and openai/gpt-image-2.5-sunburst. OpenAI's guide says to choose Sunburst where editing precision matters most and Flare for fast everyday generation, so these edits use Sunburst.

Say where and how big

Give a position and a size in plain words: centered on the chest, about a hand-width wide, flat print. Tell the model to follow the fabric folds without changing the garment color or the background. If the logo has text, check it letter by letter in the result, because OpenAI's guide says its image model can still struggle with precise text placement and clarity.

import os
import requests

REFS = [
    "https://example.com/hoodie.jpg",
    "https://example.com/logo.png",
]
resp = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json={
        "model": "openai/gpt-image-2.5-sunburst",
        "prompt": "Image 1 is a blank black hoodie photo, image 2 is a logo. "
                  "Print image 2 centered on the chest, about a hand-width "
                  "wide, following the fabric folds. Keep the hoodie color "
                  "and background unchanged.",
        "aspect_ratio": "auto",
        "input_references": [
            {"type": "image_url", "image_url": {"url": u}} for u in REFS
        ],
    },
    timeout=60,
)
print(resp.status_code)
print(resp.json())

What to send and in what order

Sume's docs say ChatGPT Image 2.5 takes up to 16 references, so a hoodie photo, a logo and a few extra views all fit. Reference URLs must be public HTTPS.

Hoodie mockup request (Sume docs, read 2026-10-03)
FieldValue
modelopenai/gpt-image-2.5-sunburst
input_references[0]Blank hoodie photo
input_references[1]Logo file
aspect_ratioauto, so the result keeps the photo's shape

Treat it as a placement mockup

A render shows size and position, not print method. Ink behavior, embroidery thread and color matching are for the printer's proof. Keep the original logo file as the artwork of record and use the render to agree on placement with your customer.

What happens when a call runs long

Most image calls finish inside the 30-second wait that POST /v1/images holds open. When one does not, Sume answers 202 with a job envelope, and you poll GET /v1/jobs/{id}/status and read GET /v1/jobs/{id}/result. That result uses the standard job shape, not the image body, so check the status code first.

You only pay for a finished image. Failed and cancelled generations are not billed, and a request that ends early because the client disconnected is treated as a failed generation. The charged amount, provider list price times 1.25, comes back in usage.cost.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume