Nova Canvas virtual try-on mergeStyle: BALANCED, SEAMLESS, DETAILED
Nova Canvas try-on has three mergeStyle values with different trade-offs. What each protects, and the closest Sume route with a pixel diff to check it.

Amazon Nova Canvas has a VIRTUAL_TRY_ON task type that puts a garment onto a person. Its mergeStyle setting decides how the garment is blended back into the photo. The three values trade the same two things against each other: untouched pixels and fine detail.
| mergeStyle | What it gives | The cost |
|---|---|---|
| BALANCED | Pixels outside the mask are protected | May show a ghost seam |
| SEAMLESS | No seam at the mask edge | Every pixel changes slightly; fine detail can fade |
| DETAILED | Logos and text inside small masks come out better | Can show a seam |
What that means for a shop
For a catalogue shot where the model's face and the background must stay the same, BALANCED is the safe pick and you accept the seam risk. For a loose, editorial look, SEAMLESS hides the join. For a garment with a printed logo, DETAILED is the one to try first.
The Sume route
Sume has no try-on task or mergeStyle field. The closest route is an edit call: the person photo goes first in input_references, the garment photo second, and the prompt says what to put on whom. Models with several reference slots, such as GPT Image 2.5 with up to 16, accept both images in one request. Sume's API rejects parameters that a model's catalog row does not list, so a mergeStyle field would return 400 unsupported_parameter.
You choose the trade-off yourself by measuring. Count how many pixels outside the garment area changed, and zoom in on the logo. The numpy check for an edit outside the mask does the first part.
Request shape
Send the person first and the garment second. Read usage.cost from the response.
import os, requests
r = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={
"model": "openai/gpt-image-2.5",
"prompt": "Dress the person in image 1 in the jacket from image 2. "
"Keep the face, pose and background of image 1 unchanged.",
"input_references": [
{"type": "image_url", "image_url": {"url": "https://example.com/person.jpg"}},
{"type": "image_url", "image_url": {"url": "https://example.com/jacket.jpg"}},
],
},
timeout=90,
)
print(r.status_code, r.json().get("usage"))Sources
Related posts
More in Comparisons
- Sora API ended: which Sume route replaces a talking presenter clip?
OpenAI's Sora API ended 2026-09-24. For a presenter who says exact words, the replacement is a still-plus-audio or avatar route, not a video model.
- Seedance 2, Omni or Wan 3.0 for 9:16 ads on Sume: how to choose
Three Sume video models side by side for vertical ads after Sora: clip length, resolutions, 9:16 in the docs, references, and the price of a 5 s clip.
- Sync.so $0.05 a second vs Sume H3 Max lip sync: rates side by side
Sync.so lists $0.05 to $0.04 a second on four plans; Sume H3 Max lip sync derives $0.0625, $0.10 and $0.20. What each rate buys.
- Synthesia Starter's 12 minutes vs twelve 60-second Sume avatar jobs
Synthesia lists $29 for about 12 minutes and $89 for about 60. How those minutes map to Sume avatar jobs capped at 60 seconds, and what each setup is for.
Written by Sume