---
title: Upscaling video — P-Video-Upscale | Runware Docs
url: https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video
description: "How to upscale video with Pruna P-Video-Upscale: the request, the size each preset returns, the frame cap on clip length, the audio track and turbo mode."
---
### [Introduction](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#introduction)

P-Video-Upscale is Pruna AI's video upscaler. You send it **a finished clip and a target preset**, and it returns the same clip at a higher resolution with its aspect ratio, frame rate and audio track carried over. The model works only from **what is already in the frame**, so the request is a clip and a preset.

**Source**:

[Watch video](https://runware.ai/docs/assets/source-knitwear.CIIv06aO.mp4)

**Upscaled**:

[Watch video](https://runware.ai/docs/assets/output-knitwear.jn_nUrI3.mp4)

The cardigan above went in as a compressed 480p export and came back at 1080p. Drag the handle across her back as she turns: the source shows the cables as **soft ridges**, and the upscale **separates every twist** with a clean shadow line between them. The fine horizontal ribbing inside the diamond panels, which the compression had blurred into a flat cream, comes back as distinct rows.

This guide covers the request, the size each preset returns, how long a clip each preset accepts, the audio track and turbo mode. Two more guides build on it: [raising the frame rate](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/raising-the-frame-rate) for `fps` and interpolation, and [upscaling generated video](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-generated-video) for finishing P-Video-2-Pro clips at delivery resolution.

### [The request](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#the-request)

An upscale is one clip in and one clip out. Put the source in `inputs.video`, name the `model`, and pick a preset in `resolution`.

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'prunaai:p-video@upscale',
  deliveryMethod: 'async',
  resolution: '1080p',
  inputs: {
    video: 'https://vm.runware.ai/video/os/a14d18/ws/2/vi/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9.mp4'
  }
})
```

**Python**:

```python
import asyncio
import os

from runware import Runware

async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "prunaai:p-video@upscale",
            "deliveryMethod": "async",
            "resolution": "1080p",
            "inputs": {
                "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9.mp4"
            }
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "upscale",
      "taskUUID": "7d2e4f61-3a8b-4c5d-9e0f-1a2b3c4d5e6f",
      "model": "prunaai:p-video@upscale",
      "deliveryMethod": "async",
      "resolution": "1080p",
      "inputs": {
        "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9.mp4"
      }
    }
  ]'
```

**CLI**:

```bash
runware run prunaai:p-video@upscale \
  deliveryMethod=async \
  resolution=1080p \
  inputs.video=https://vm.runware.ai/video/os/a14d18/ws/2/vi/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9.mp4
```

**JSON**:

```json
{
  "taskType": "upscale",
  "taskUUID": "7d2e4f61-3a8b-4c5d-9e0f-1a2b3c4d5e6f",
  "model": "prunaai:p-video@upscale",
  "deliveryMethod": "async",
  "resolution": "1080p",
  "inputs": {
    "video": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9.mp4"
  }
}
```

- `inputs.video` is the only input. It takes a public URL or the UUID of an earlier Runware task, **up to 512 MiB**.
- `resolution` is the preset: `720p`, `1080p`, `2k` or `4k`, with `1080p` as the default.
- `fps` keeps the source rate when you leave it out. A higher value **interpolates new frames**, covered in [raising the frame rate](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/raising-the-frame-rate).
- `settings.turbo` runs a faster pass, covered in [turbo mode](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#turbo-mode) below.
- `settings.safetyFilter` set to `true` checks the clip against the content policy before it is processed.

### [Sizing the output](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#sizing-the-output)

Each preset is **a pixel budget, not a height**. The output keeps the shape of the source and fills that budget, so a vertical or square clip comes back at a different size from a 16:9 one under the same preset.

| Preset | 16:9 | 9:16 | 1:1 |
| --- | --- | --- | --- |
| `720p` | 1280 × 720 | 720 × 1280 | 960 × 960 |
| `1080p` | 1920 × 1080 | 1080 × 1920 | 1440 × 1440 |
| `2k` | 2560 × 1440 | 1440 × 2560 | 1920 × 1920 |
| `4k` | 3840 × 2160 | 2160 × 3840 | 2880 × 2880 |

Shapes outside the table **land in between**: a 4:3 clip at `1080p` comes back at 1660 × 1246. The workout clip below is vertical, and `1080p` returned it at full vertical HD for a Reels or Shorts upload.

**Source**:

[Watch video](https://runware.ai/docs/assets/source-workout.DD9Y1hLj.mp4)

**Upscaled**:

[Watch video](https://runware.ai/docs/assets/output-workout.DbxDEEt4.mp4)

The pegboard behind him is where the 366-pixel-wide source gave up most. In the upscale **each hook and handle stands apart**, and the resistance bands hang as separate colored cords instead of a striped smear.

A preset only raises the size. A clip that is **already larger than the preset comes back at its own size**, so a 1080p clip sent with `720p` returns at 1920 × 1080.

### [How long a clip can be](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#how-long-a-clip-can-be)

Length is capped by **the number of frames the model processes**, and each preset has its own cap. The count is the clip's duration times the output frame rate, with no more than 30 frames counted per second.

| Preset | Frame cap | At 24 fps | At 30 fps |
| --- | --- | --- | --- |
| `720p` | 2,400 | 100 s | 80 s |
| `1080p` | 1,200 | 50 s | 40 s |
| `2k` | 600 | 25 s | 20 s |
| `4k` | 300 | 12.5 s | 10 s |

A clip over the cap is **rejected, not trimmed**. To fit one, send a shorter clip or step down a preset. Raising `fps` counts more frames per second up to 30, so a 24 fps clip that fits at its own rate can stop fitting once you ask for 30 or 60.

### [The audio track](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#the-audio-track)

Whatever sound the source carries is **copied into the output** as it is, so speech and music stay on the same frames they started on. A silent source comes back silent.

[Watch video](https://runware.ai/docs/assets/output-listing.Bu5cD7sL.mp4)

*480p source upscaled to 1080p, audio carried over*

The listing intro above went in at 480p with the agent's voice on it. Turn the sound on: her line comes through intact and **in sync with her mouth**, because the model upscales the picture and leaves the soundtrack alone.

### [Turbo mode](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#turbo-mode)

Set `settings.turbo` to `true` for **a faster pass at the same price**. Its documented trade is slightly lower quality. On the sneakers below, upscaled from 480p to `4k`, the turbo pass finished in 78 seconds against 121 for the standard one in the run behind this guide.

**Source**:

[Watch video](https://runware.ai/docs/assets/source-sneakers.CJCSOQ6I.mp4)

*The 480p source*

**Standard**:

[Watch video](https://runware.ai/docs/assets/output-sneakers.CqzRtqu_.mp4)

*4k, standard*

**Turbo**:

[Watch video](https://runware.ai/docs/assets/output-sneakers-turbo.DHjgP5zN.mp4)

*4k, turbo*

At page width the two passes are indistinguishable, so the crops below take the same patch of the toe box from each clip. The double stitching and the perforations come through **the same in both passes**, and both are a long way from the source.

![A close crop of the toe box from the 480p source, with soft stitching, fuzzy perforations and a blurred sole tread](https://runware.ai/docs/assets/crop-sneakers-source.O8FKDUyP_1IAjoU.jpg)

*Source · same region, enlarged*

![The same toe box crop from the standard 4K pass, with crisp double stitching, round perforations and a defined sole tread](https://runware.ai/docs/assets/crop-sneakers-standard.B8qGd-Iv_1wq4GP.jpg)

*Standard · 100% crop*

![The same toe box crop from the turbo 4K pass, matching the standard pass](https://runware.ai/docs/assets/crop-sneakers-turbo.DtRxoZvm_Z1htVOh.jpg)

*Turbo · 100% crop*

On footage like this, turbo is **the faster way to the same result**. The documented trade has not gone away, though, so before you switch a batch over, run a sample of your own footage both ways and compare it at 100%.

### [What it can recover](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#what-it-can-recover)

The model rebuilds detail from **the signal the source still carries**, and where that signal is gone it draws something plausible in its place. The backyard clip below shows both. The original is a clean 768p clip. The phone copy is that clip crushed to 360p with heavy compression and noise, the way footage looks after a few rounds through messaging apps. The upscale is the phone copy at 1080p.

**Original**:

[Watch video](https://runware.ai/docs/assets/original-backyard.DKJJ2ju1.mp4)

*The original*

**Phone copy**:

[Watch video](https://runware.ai/docs/assets/source-backyard.CxntDjQv.mp4)

*The 360p phone copy sent to the model*

**Upscaled**:

[Watch video](https://runware.ai/docs/assets/output-backyard.C1ixdAHg.mp4)

*The phone copy, upscaled to 1080p*

The upscale is clean and sharp, and it is **not the original**. Switch between the three: the man on the left lost his curls, the woman's face and smile changed shape, and the lemon slice on her glass became a plain yellow cup. The compression had reduced those details to blocks, and the model drew **new ones that fit the blocks**.

So a rough source gives you a sharper clip rather than a recovered one, and **faces can come back changed**. Check them against the original whenever identity matters, such as a testimonial or a demo with a real presenter.

Check **small text** as well. A sign or a label too small to read in the source can come back as **letters that were never there**, since the model sharpens the shapes it finds without knowing what they spell. Watch any clip with on-screen text at full size before you ship it.

### [Tips](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/upscaling-video#tips)

1. **Pick the preset by where the clip plays.** `1080p` covers feeds and most players. Save `2k` and `4k` for large screens and for footage that will be cropped or reframed in an edit.
    
2. **Check the frame cap before you send a long clip.** At `4k` the cap is 300 frames, 12.5 seconds at 24 fps. A longer clip is rejected, so step down a preset or shorten it.
    
3. **Leave `fps` out to keep the timing.** The source rate passes through untouched, and raising it counts more frames against the cap. See [raising the frame rate](https://runware.ai/docs/models/prunaai-p-video-upscale/guides/raising-the-frame-rate).
    
4. **Upscale the cleanest copy you have.** Detail that a re-encode destroyed comes back redrawn, not recovered. Send the original export, not a copy that has been through a messaging app.
    
5. **Check faces on rough sources.** A heavily compressed face is rebuilt from blocks and can come back as a slightly different person.
    
6. **Try turbo on a sample.** It costs the same and finished in about two thirds of the time here. Compare it at 100% on your own footage before you switch a batch over.
    
7. **Watch on-screen text at 100%.** Unreadable signs and labels can come back as invented lettering.
    
8. **Upscale after the edit.** Cut and grade first, then upscale the finished piece, so the sharpened frames are not softened again by a later re-encode.