Titan vs Nova Canvas image masks: which colour is edited
Titan says mask value 0 (black) is regenerated and bans alpha. Nova Canvas inpainting edits black too. Build one mask check and test any mask on Sume.

Mask conventions are where image APIs disagree, and a flipped mask edits everything except the area you wanted. Amazon's two image models on Bedrock give the same answer for inpainting, but the two pages describe different file rules.
| Rule | Titan Image Generator | Nova Canvas |
|---|---|---|
| Edited area | Mask value 0 (black) is regenerated | Inpainting: pure black is edited, pure white is kept |
| Allowed values | Only black (0) and white (255) | Only pure black and pure white |
| Size | Same height and width as the input | Same size as the input |
| Alpha | Not supported; RGB only | PNG input must have no transparent pixels |
| Encoding | maskImage is a base64 string | JPEG mask must be saved at 100% quality |
A mask checker
This script flags the three mistakes that cause most failures: wrong size, gray pixels and an alpha channel. It does not tell you which colour a given service edits; that is the table above.
from PIL import Image
import numpy as np
def check_mask(src_path: str, mask_path: str) -> list[str]:
src, mask = Image.open(src_path), Image.open(mask_path)
problems = []
if src.size != mask.size:
problems.append(f"size {mask.size} != {src.size}")
if "A" in mask.getbands():
problems.append("mask has an alpha channel")
px = np.asarray(mask.convert("L"))
gray = int(((px != 0) & (px != 255)).sum())
if gray:
problems.append(f"{gray} gray pixels")
return problems
print(check_mask("photo.png", "mask.png") or "mask ok")On Sume
Only the two ChatGPT Image 2.5 variants take mask_url. The Sume docs do not state the colour convention for it, and the earlier post on the mask alpha channel covers what to send. Treat the first call as a test: make a mask with a clear left half, send it, and see which half changed, then diff with the numpy check.
Sources
Related posts
More in Comparisons
- TTS latency vs quality: Sume has async jobs, no streaming tier
Sume TTS is an async file job on Sonic models at one price. There is no streaming or latency tier, so you trade by script size and wait mode, not model.
- Unreal Speech TTS plans in dollars per million characters vs Sume
Unreal Speech's plans work out from $16.33 to $8.00 per million characters. Sume lists $47.50 with no plan. Break-even by monthly volume.
- Vadoo cost per video: $0.20 to $0.95 a plan vs Sume per clip
Vadoo plans work out to $0.20 to $0.95 per video included, billed monthly or yearly. Sume prices each AI video clip by model and length instead.
- Veo 3.1 Lite 1080p at 8 cents a second vs Sume 1080p models
Google lists Veo 3.1 Lite 1080p at $0.08 a second. Here is the same 10-second 1080p clip priced on Veo tiers and on Sume models, with the gaps stated plainly.
Written by Sume