Official CLI + SDK for upres.ai — AI image and video upscaling powered by Real-ESRGAN, SeedVR2, RunwayML, Bria, and more. One API, 17 state-of-the-art models, up to 8K output.
$ upres upscale photo.jpg --model wavespeed-ai/image-upscaler --resolution 4k
Submitting job... model=wavespeed-ai/image-upscaler
Job created: 550e8400-e29b-41d4-a716-446655440000 (status: pending)
Waiting for result.......
Downloading to photo_upscaled.jpg... done.
Result: photo_upscaled.jpg
- Topaz is $200/yr, desktop-only, no API, no automation
- Upscayl is great for one-offs but can't handle bulk exports or CI pipelines
- Every other SaaS upscaler either watermarks your output, caps resolution at 2K, or charges per image with no monthly plan
upres.ai gives you a clean REST API, 17 models including the latest SeedVR2 and RunwayML, batch processing, and predictable pricing starting at $49/mo.
npx upres-cli upscale photo.jpgOr install globally:
npm install -g upres-cli
upres upscale photo.jpg --model wavespeed-ai/image-upscaler --resolution 8k --output photo_8k.jpgpip install upres-ai
upres upscale photo.jpg --model wavespeed-ai/image-upscaler --resolution 4k- Sign up at upres.ai (free — 5 ops/month)
- Go to upres.ai/account/api-keys
- Generate a key — it's shown once
export UPRES_API_KEY=upres_yourkeyOr save permanently:
mkdir -p ~/.config/upres
echo '{"apiKey":"upres_yourkey"}' > ~/.config/upres/config.jsonKey resolution order: --api-key flag → UPRES_API_KEY env var → ~/.config/upres/config.json
# Upscale a single image (local file or URL)
upres upscale photo.jpg --model wavespeed-ai/image-upscaler --resolution 4k
upres upscale photo.jpg --model wavespeed-ai/real-esrgan --scale 4 --output out.jpg
upres upscale https://example.com/photo.jpg --resolution 8k
# Upscale video
upres upscale clip.mp4 --model wavespeed-ai/video-upscaler --resolution 4k
# Batch upscale a folder
upres batch ./photos/ --model wavespeed-ai/real-esrgan --output ./upscaled/ --concurrency 5
# List available models
upres models
# List recent jobs
upres jobs --limit 20 --status completed
# Account / quota info
upres accountimport { UpresClient } from "upres-cli";
const client = new UpresClient(); // reads UPRES_API_KEY from env
// Upscale a local file
const job = await client.createJobFromFile("photo.jpg", {
model: "wavespeed-ai/image-upscaler",
scale: 4,
});
// Wait for completion
const completed = await client.waitForJob(job.id);
// Download result
await client.downloadResult(completed, "photo_4k.jpg");
console.log("Done:", completed.result_url);Files over 50 MB are automatically uploaded via TUS resumable protocol.
from upres import UpresClient
with UpresClient() as client: # reads UPRES_API_KEY from env
job = client.create_job_from_file(
"photo.jpg",
model="wavespeed-ai/image-upscaler",
scale=4,
)
completed = client.wait_for_job(job["id"])
client.download_result(completed, "photo_4k.jpg")
print("Done:", completed["result_url"])The Python SDK uses httpx — async-ready, no heavy dependencies.
| Example | What it does |
|---|---|
| batch-upscale-folder.js | Upscale all images in a folder with configurable concurrency |
| restore-photo-folder.py | Restore old/scanned photos using Recraft Crisp Upscale |
| ecommerce-pipeline.js | Product image pipeline: raw shots → 4K → publish-ready |
| lightroom-export-hook.md | Auto-upscale Lightroom exports via post-processing hook |
| figma-plugin-stub.md | Figma plugin integration guide |
17 models across image upscale, image enhance, and video upscale.
| Category | Highlight |
|---|---|
| Image Upscale | Real-ESRGAN · SeedVR2 · Bria · Crystal · Ultimate |
| Image Enhance | Recraft Crisp/Creative · Phota · Z-Image Turbo |
| Video Upscale | SeedVR2 Video · RunwayML · ByteDance · Bria FiBO |
Full model list with params and pricing: docs/models.md · upres.ai/models
| Plan | Price | Ops/mo | API | Watermark |
|---|---|---|---|---|
| Free | $0 | 5 | — | Yes |
| Pro | $19/mo | 100 | — | No |
| Business | $49/mo | Unlimited | Yes | No |
Business tier unlocks the full API, batch processing, all 17 models, and no output watermark.
Compare plans → · vs. Topaz → · vs. Upscayl →
If you're building something open-source on top of the API, email support@upres.ai with your repo link. We offer 500 ops/month for qualifying OSS projects.
The SDK handles these errors automatically:
| Status | Behavior |
|---|---|
401 |
Prints API key error + link to key management, exits |
402 |
Prints quota exceeded + link to pricing, exits |
429 |
Prints rate limit message (60 req/min), exits |
5xx |
Throws UpresError with message |
In Python: raises AuthError, QuotaExceededError, or UpresError.
See CONTRIBUTING.md. Tests run with:
# Node
npm test
# Python
pip install -e ".[dev]"
pytest tests/test_client.py -vMIT — see LICENSE