Topaz Video Upscaler brings Topaz Labs' video upscaling and restoration to the Jantaris API. It takes a source video and upscales it 2x; on Jantaris the factor is fixed, and the 1x cleanup and 4x options are not exposed yet. It accepts MP4, MOV or MKV files up to 50 MB and preserves the clip's duration and frame timing, so the result drops straight back into an edit. Billing is per second of the source length as measured on the server.
Best for
- Upscaling AI video clips to 4K for delivery
- Restoring compressed social or phone footage
- Bringing 1080p sources up to 4K
- Finishing short clips from models like Seedance 2.0 Fast
Prompting tips
- A 1080p source comes back at about 4K, a 720p source at about 1440p.
- Trim the clip before uploading, since you pay per second of source.
- Keep files under 50 MB and split longer videos into parts.
- For a specific target resolution, use Enhance Video 1.0 instead.
FAQ
How much does the Topaz Video Upscaler API cost?
The rate is $0.11 per second, charged per second of the source video. Failed jobs are not charged.
What file formats and sizes are accepted?
MP4, MOV or MKV, up to 50 MB, passed as a public URL.
Does upscaling change the frame rate or length?
No. Duration and frame timing are preserved. If you want to pick the output resolution, see Enhance Video 1.0.
How to call Topaz Video Upscaler via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "topaz-video-upscaler",
"input": {
"video_url": "https://example.com/input.mp4"
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "topaz-video-upscaler",
"input": {
"video_url": "https://example.com/input.mp4"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "topaz-video-upscaler",
"input": {
"video_url": "https://example.com/input.mp4"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
video_url * | string |
The same schema is available from GET /v1/models/topaz-video-upscaler.









