---
title: "Upscale video 2x"
method: POST
path: "/v1/video/upscale"
tags: ["Image"]
---

# Upscale video 2x

`POST /v1/video/upscale`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/video/upscale`
- Auth: HTTP bearer

Upscales a video file 2x using PiperSR on Apple Neural Engine. Processes every
frame through the tiled super-resolution pipeline. Audio is passed through (no
re-encode). Output is H.264 MP4 at 2x resolution. Offline processing — typically
5-19 FPS depending on input resolution. Max input: 20 MB decoded, 4096px per
dimension.

## Request body

- object
  - `video` string, required: Base64-encoded video data (MP4, MOV)
  - `metadata_only` boolean: Return metadata JSON instead of the output video (default false)

## Response `200`

Upscaled video (binary MP4) or metadata JSON

- VideoUpscaleResult
  - `input_width` integer
  - `input_height` integer
  - `output_width` integer
  - `output_height` integer
  - `total_frames` integer
  - `duration_seconds` number
  - `average_fps` number
  - `total_processing_seconds` number
  - `speed_ratio` number: processing_time / video_duration (>1 means slower than real-time)
  - `output_file_size_bytes` integer

## Other responses

- `400`: Invalid request
- `413`: Video exceeds 20 MB limit or dimensions exceed 4096px
- `503`: CoreML upscale service not available

---

[API](https://skmtc.dev/modelpiper/apis/toolpiper-api.md) · [All operations](https://skmtc.dev/modelpiper/apis/toolpiper-api/llms.txt) · [OpenAPI document](https://skmtc.dev/modelpiper/apis/toolpiper-api/revisions/6722bf56385c?raw)
