Watch or bracelet try-on from a wrist photo: two references, one call
Show a watch or bracelet on a shopper's own wrist with Sume's image API: wrist photo plus product photo as two references. Request shape, checks and cost notes.

ChatGPT Try On launched on 1 October 2026 for clothing and accessories, running on ChatGPT Images 2.5, and the user supplies a selfie or full-body photo (TechCrunch, read 2026-10-04). A store selling watches or bracelets wants the same thing inside its own product page, with a wrist instead of a body.
Sume's Image API serves openai/gpt-image-2.5, which takes up to 16 input references. A wrist try-on needs only two: the shopper's wrist photo and one clean product shot.
The call
Both images must be public HTTPS URLs; Sume rejects localhost, private-network and non-HTTPS addresses before submission. Say in the prompt which image is which, and what must not change: the strap, the dial, the clasp, the skin tone and the sleeve.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
resp = requests.post("https://api.sume.com/v1/images", headers=H, timeout=90, json={
"model": "openai/gpt-image-2.5",
"prompt": "Image 1 is the shopper's wrist. Image 2 is the watch. Put the watch on the wrist in image 1, worn the way a watch sits on the wrist. Keep the dial, strap and clasp exactly as in image 2. Keep skin, sleeve and background from image 1.",
"input_references": [
{"type": "image_url", "image_url": {"url": "https://example.com/wrist.jpg"}},
{"type": "image_url", "image_url": {"url": "https://example.com/watch.jpg"}}
],
"aspect_ratio": "auto",
})
resp.raise_for_status()
if resp.status_code == 202:
raise SystemExit("job envelope: poll data.status_url")
body = resp.json()
print([d["url"] for d in body["data"]], body.get("usage"))What to check before showing it
- Dial and hands: ask for the same time as the product photo and compare them side by side.
- Scale: a 44 mm case on a thin wrist looks different from a 36 mm one, so state the case size in the prompt.
- Clasp and strap holes: a bracelet that shows no clasp at all is a rejection, not a style choice.
- Skin and lighting: the wrist photo is the base layer, so its edges should look unchanged.
Cost and limits
Each call returns usage.cost with the billed amount, so log it per shopper session. Quality defaults to high; Sume's docs list auto, low, medium, high, xhigh and max, and a lower tier is the cheaper way to preview before the shopper commits to a full render.
Treat the result as a visual preview, not a size guide. Say so in the page copy, and keep the shopper's upload only as long as your privacy policy states; ChatGPT's own feature saves the photo to the user's library, per the TechCrunch report.
Sources
Related posts
More in Use cases
- Watch product photography with AI: dial, glass reflections, case size
Watches need exact dials. Make lifestyle watch photos with Sume's image API from one reference, and check hands, markers, crown and glare before publishing.
- Avatar script CTA: no click the green button, WCAG 1.3.3
An avatar that says click the green button on the right fails WCAG 1.3.3 for some viewers. How to write the spoken call to action so it still works.
- Autoplay avatar welcome video with sound: WCAG 1.4.2 rule
Can an AI avatar welcome video autoplay with sound? WCAG 1.4.2 allows it only with a pause or volume control once audio runs past 3 seconds.
- Looping avatar video on a page: WCAG 2.2.2 pause rule
A looping avatar clip beside other content must be pausable under WCAG 2.2.2 once it moves for more than 5 seconds. How to meet it with a Sume MP4.
Written by Sume