Why one model isn’t enough
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, slowerThe architecture
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}'
Enter fullscreen mode Exit fullscreen mode
The backend queues the job, runs it on GPU, and returns the output URL when done. Most jobs finish in 15-25 seconds.
What I learned
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.
Try it
- Web: https://upres.ai (5 free images, no card)
- CLI:
npm install -g upres-cli - API docs: https://upres.ai/api-playground
- GitHub: https://github.com/auroracapital/upres-cli
I’d love to hear what you’re upscaling and which models work best for your use case.