AI Polaroid or VHS photo look on your own photo: an edit call

Give a photo the Polaroid or VHS look with one reference edit instead of a filter, then draw the date stamp or caption in code so the digits are exact.

5 min readSume
All posts

To give a photo a Polaroid or VHS look with an AI image model, send the photo as an input_references entry with model: "openai/gpt-image-2.5", describe the look in the prompt, and set aspect_ratio: "auto" so the result keeps the photo's shape. Add the date stamp, the REC counter or the handwritten caption in code afterwards.

This is a restyle, not a filter: the model redraws the picture, so people and small details can shift. Say what must stay (faces, the sign in the background) and compare against the original.

Two prompts to start from

Describe the physical artefact rather than the adjective. For a Polaroid, name the white frame with the thicker bottom edge, the slightly faded colour and the soft flash. For VHS, name tracking lines, soft chroma bleed and a 4:3 frame.

Look recipes for the Image API edit (read 2026-10-04)
LookPrompt carriesAspect ratioAdd in code
PolaroidWhite instant-film frame, thick bottom border, faded warm colourauto (or 4:5 if you want the frame to fill a portrait post)Handwritten caption in the bottom border
VHSScan lines, tracking glitch, soft colour bleed, camcorder frame4:3 is in the Sume aspect listPLAY and REC overlay, date and time
Disposable cameraHard flash, red-eye-free, slight grain, light leak at one edgeautoOrange date stamp in the corner

The date stamp in code

Digits are the first thing a viewer reads on a retro frame, so draw them. This script runs as is: it makes a placeholder frame, draws a stamp and saves a PNG; point it at your generated image instead.

from PIL import Image, ImageDraw, ImageFont

image = Image.new("RGB", (1024, 768), (40, 40, 48))  # replace with Image.open("generated.png")
draw = ImageDraw.Draw(image)
font = ImageFont.load_default()
draw.text((image.width - 220, image.height - 40), "'98  10 04", fill=(255, 140, 0), font=font)
draw.text((24, 24), "PLAY", fill=(255, 255, 255), font=font)
image.save("stamped.png")
print(image.size)

The edit request

Reference URLs must be public HTTPS. If the call takes longer than the 30-second blocking budget you get 202 and a job to poll; slow configurations are the usual cause.

{
  "model": "openai/gpt-image-2.5",
  "prompt": "Restyle the photo as a faded instant-film Polaroid with a white frame and thicker bottom border. Keep every person and the storefront sign exactly as in the reference. Leave the bottom border blank.",
  "input_references": [
    {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
  ],
  "aspect_ratio": "auto"
}

Keep the original

Store the untouched photo next to the stylised result. A look you dislike can be regenerated from the original, and a sent reference is only needed while the job runs.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume