Changelog
New

image.upscale: rebuild detail, not just pixels

Increase an image's resolution on a one-step diffusion restoration model. Ask for a factor or a target height, keep transparency, and get back exactly the size you asked for.

API SDK Dashboard

image.upscale takes an image and gives it back larger. Ask for a factor, or a target height and let the width follow the source aspect ratio. It runs on SeedVR2, a one-step diffusion restoration model we host under Apache-2.0, so there is no third-party upscaling API in the path.

A 300 by 156 pixel heavily compressed image of a glass cube, soft and blockyThe same image reconstructed at 1200 by 624 pixels with sharp edges and visible wood grain
Left: a 300x156 source at 11 KB. Right: the same file through image.upscale at factor: 4, reconstructed to 1200x624. Both shown at the same width, so the difference is the reconstruction rather than the display size.

Reconstruction, not sharpening

This one reconstructs detail rather than only sharpening what is already in the frame. A compressed or soft photo comes back rebuilt. That is a different job from a faithful resize, and it is the reason a phone snapshot survives the trip to print resolution. Downscaling a result back to its source size and comparing gives 24 to 29 dB against 58 dB for a plain resample, which is the measurement behind that claim.

A Lanczos resample of the same source, with soft mushy edges and no surface textureThe image.upscale result at the same crop, with a sharp specular edge, defined facets, and visible wood grain
The same 356x356 region of both 4x results, shown at actual pixel size. Left: the 300x156 source resampled with Lanczos. Right: the same source through image.upscale. Both encoded identically, so the difference is the reconstruction and not the compression. The whole-image view above cannot show this, because fitting a 1200 pixel result into a text column discards the detail that was added.

Transparency and exact sizing

Two things we got wrong in earlier upscalers and fixed here. Transparency survives: alpha is upscaled alongside the colour channels instead of being flattened, so a logo keeps its edge. And the output lands on exactly the size you asked for, including odd numbers, rather than a pixel or two short.

Size limits

There is no product cap on output size. The bound is what the GPU can physically hold, and a request past it is refused before any rendering starts, with the numbers and the largest factor that would have worked. You are not charged for a render that never ran.

Defaults are tuned for photographs. inputNoise and inputScale are there if you want to push it, and passes runs the model repeatedly for a harder rebuild. Full reference in the image.upscale docs.

How tiers and pinned model ids work across the generation jobs is covered in the generation guide.

Share