upres-cli

Star this repo if UpRes helps you.

Official CLI + SDK for upres.ai โ image, video, and speech restoration. One API, 14 public aliases, up to 8K output.
$ upres upscale photo.jpg --model flare --scale 4
Submitting job... model=flare
Job created: 550e8400-e29b-41d4-a716-446655440000 (status: pending)
Waiting for result.......
Downloading to photo_upscaled.jpg... done.
Result: photo_upscaled.jpg
Why we built this
- 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, 14 public aliases, batch processing, and predictable pricing starting at $9/mo on the Creator launch deal.
Quickstart
Node.js
npx upres-cli upscale photo.jpg
Or install globally:
npm install -g upres-cli
upres upscale photo.jpg --model lumen --scale 8 --output photo_8k.jpg
Python
pip install upres-ai
upres upscale photo.jpg --model flare --scale 4
Authentication
- Sign up at upres.ai (free โ 5 upscales/month)
- Go to upres.ai/account/api-keys
- Generate a key โ it's shown once
export UPRES_API_KEY=upres_yourkey
Or save permanently:
mkdir -p ~/.config/upres
echo '{"apiKey":"upres_yourkey"}' > ~/.config/upres/config.json
Key resolution order: --api-key flag โ UPRES_API_KEY env var โ ~/.config/upres/config.json
Commands
upres upscale photo.jpg --model flare --scale 4
upres upscale photo.jpg --model lumen --scale 8 --output out.jpg
upres upscale https://example.com/photo.jpg --model prism
upres upscale clip.mp4 --model motion --scale 4
upres batch ./photos/ --model flare --output ./upscaled/ --concurrency 5
upres models
upres jobs --limit 20 --status completed
upres account
Node.js SDK
import { UpresClient } from "upres-cli";
const client = new UpresClient();
const job = await client.createJobFromFile("photo.jpg", {
model: "flare",
scale: 4,
});
const completed = await client.waitForJob(job.id);
await client.downloadResult(completed, "photo_4k.jpg");
console.log("Done:", completed.result_url);
Files over 50 MB are automatically uploaded via TUS resumable protocol.
Python SDK
from upres import UpresClient
with UpresClient() as client:
job = client.create_job_from_file(
"photo.jpg",
model="flare",
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.
Examples
Models
14 public aliases across image, video, and speech. Each one tells you up front whether it invents detail or leaves your file alone. Aliases that do not enlarge ignore --scale.
| Alias | Kind | Best for |
|---|
flare | Image | Everyday photos, fastest default |
prism | Image | Text, logos, product shots โ keeps edges true |
lumen | Image | Maximum detail recovery for print, up to 8x |
mirage | Image | Invents new detail โ art and hero images |
hush | Image | Faithful denoise, same size as the source |
keen | Image | Deblur and sharpen, same size |
visage | Image | Faces only, does not enlarge |
atelier | Image | Hush, Visage if a portrait, then Lumen |
motion | Video | Fast 4K finish for AI video |
motion-x | Video | Cinema-grade, for film and commercials |
still | Video | Temporal denoise, resolution stays put |
cadence | Video | Frame interpolation, does not enlarge |
atelier-x | Video | Still, then Motion X |
voice | Speech | Speech denoise to 48 kHz. Not for music |
Full model catalogue: upres.ai/models ยท Live spec: api.upres.ai/v1/openapi.json
Pricing
| Plan | Price | Includes | API | Watermark |
|---|
| Free | $0 | 5 upscales/mo | โ | Yes |
| Creator | $9/mo | 50 stills + 20 min 4K video/mo | โ | No |
| Studio | $39/mo | 250 stills + 90 min 4K video/mo | Yes | No |
Studio tier unlocks the full API, batch processing, and no output watermark.
Compare plans โ ยท vs. Topaz โ ยท vs. Upscayl โ
MCP (Claude, Cursor, Hermes)
claude mcp add upres -- npx -y github:auroracapital/upres-cli mcp
Or in claude_desktop_config.json / Cursor:
{
"mcpServers": {
"upres": {
"command": "npx",
"args": ["-y", "github:auroracapital/upres-cli", "mcp"],
"env": { "UPRES_API_KEY": "upres_yourkey" }
}
}
}
Tools: upres_list_models, upres_get_credits, upres_upscale_image, upres_upscale_video, upres_enhance_audio, upres_get_job.
Free tier for open-source projects
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.
Error handling
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.
Contributing
See CONTRIBUTING.md. Tests run with:
npm test
pip install -e ".[dev]"
pytest tests/test_client.py -v
License
MIT โ see LICENSE