When I started building an AI upscaling service, I thought I'd just wrap Real-ESRGAN and call it done. Wrong.
A model trained on photographs produces blurry edges on digital art. A model trained on anime smears skin textures in portraits. And video? Completely different challenge.
After testing dozens of models, I picked 6 that each excel at a specific image type:
| Model | Best for | Why |
|---|---|---|
| Flare | Photos | Natural textures, minimal artifacts |
| Prism | AI art | Preserves synthetic textures from SD/DALL-E |
| Lumen | Portraits | Skin tones, fine hair detail |
| Mirage | Illustrations | Clean edges, flat colors |
| Motion | Video | Frame interpolation, temporal consistency |
| Motion X | Video (enhanced) | Higher quality, slower |
UpRes runs on a single API endpoint. You submit a job with an image URL, pick a model and scale factor, and poll for the result:
curl -X POST https://api.upres.ai/v1/jobs \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"image_url":"https://example.com/photo.jpg","model":"flare","scale":4}'
The backend queues the job, runs it on GPU, and returns the output URL when done. Most jobs finish in 15-25 seconds.
Model selection matters more than scale factor. A 2x upscale with the right model beats a 4x with the wrong one.
Free tier converts. People who try the free tier and see good results upgrade. Watermarks kill conversion.
Video is 10x harder than images. Temporal consistency across frames is the hardest engineering problem. Motion X took 3 months to get right.
MCP is a sleeper feature. Being able to say "Claude, upscale this image" and have it just work is magical for developers.
npm install -g upres-cli
I'd love to hear what you're upscaling and which models work best for your use case.