# P-Video-2-Pro-Reference

> Run P-Video-2-Pro-Reference by pruna online or via API. Output: cost $0.015-$0.105/sec, speed $0.02-$0.115/sec. Ref video: $0.03-$0.06/sec. Ref img: $0.005/img. Ref audio: $0.0015-$0.0025/sec, no setup.

**URL:** https://inference.sh/apps/pruna/p-video-2-pro-reference
**Last updated:** 2026-10-23

---

Video from a prompt plus up to 9 image, 3 video and 3 audio references on MiniMax H3. Consistent characters, motion transfer, 5-15s, 480p to 4k.

- app: `pruna/p-video-2-pro-reference`
- maker: [pruna](https://inference.sh/apps/pruna.md)
- category: [video](https://inference.sh/apps/category/video.md)
- input → output: reference → video, image → video
- tasks: [reference to video](https://inference.sh/apps/tag/reference-to-video.md), [image to video](https://inference.sh/apps/tag/image-to-video.md)
- price: Output: cost $0.015-$0.105/sec, speed $0.02-$0.115/sec. Ref video: $0.03-$0.06/sec. Ref img: $0.005/img. Ref audio: $0.0015-$0.0025/sec
- runs via: api, javascript and python sdk, belt cli, mcp

## p-video-2-pro-reference API Guide

### About
video from a prompt plus up to 9 image, 3 video and 3 audio references on minimax h3. consistent characters, motion transfer, 5-15s, 480p to 4k.

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Setup Your API Key
Set `INFERENCE_API_KEY` as an environment variable. Get your key from settings → api keys.

```bash
export INFERENCE_API_KEY="inf_your_key"
```

#### Run and Get Result

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


result = client.run({
        "app": "pruna/p-video-2-pro-reference@4c4b9kew",
        "input": {
            "prompt": "prompt"
        }
    })

print(result["output"])
```

#### Stream Live Updates

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


## stream=True yields updates as they arrive
for update in client.run({
        "app": "pruna/p-video-2-pro-reference@4c4b9kew",
        "input": {
            "prompt": "prompt"
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

### 2. Authentication
The API uses API keys for authentication. See the authentication docs for detailed setup instructions.

### 3. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "pruna/p-video-2-pro-reference@4c4b9kew",
    "input": {
        "image": "/path/to/local/image.png",  # detected & uploaded
        "audio": "https://example.com/audio.mp3",  # url passed through
    }
})
```

#### Manual Upload

```python
## upload and get a hosted URL
file = client.files.upload("/path/to/file.png")
print(file.uri)  # https://cloud.inference.sh/...
```

### 4. Schema

#### Input
- **prompt** (string) *required*: Text description for video generation. Refer to references by what they show.
- **images** (array): Reference images (up to 9 including first and last frames; 20 MiB, 4096 px each).
- **videos** (array): Reference videos (up to 3; 2-15s each, 15s combined, up to 1080p/60 fps).
- **audios** (array): Reference audio (up to 3, 15s combined). Set keep_audio to use one file as the soundtrack.
- **keep_audio** (boolean): Keep the single audio file as the video's audio. Needs exactly one audio file.
- **first_frame_image** (string): Optional opening image (soft keyframe, counts as a reference image).
- **last_frame_image** (string): Optional closing image (soft keyframe, counts as a reference image).
- **duration** (integer): Video duration in seconds (5-15).
- **resolution** (string): 480p or 768p native. 1080p, 2k and 4k generate at 768p and upscale.
- **mode** (string): speed (default) or cost (cheaper, slower).
- **prompt_upsampler** (string): Rewrite the prompt before generation: turbo, max or off. Frame images force turbo.
- **aspect_ratio** (string): Aspect ratio. adaptive follows the references.
- **seed** (integer): Random seed for reproducible generation.
- **enable_safety_filter** (boolean): Check inputs against the content policy. Always-on categories are blocked either way.

#### Output
- **seed** (integer): Seed used for generation.
- **video** (string): Generated video with audio.

## other video apps

- [VACE](https://inference.sh/apps/pruna/vace.md): $0.40/video
- [P-Video-Animate](https://inference.sh/apps/pruna/p-video-animate.md): $0.03/sec 720p, $0.06/sec 1080p
- [P-Video-Upscale](https://inference.sh/apps/pruna/p-video-upscale.md): Std: $0.01/sec 720p, $0.02 1080p, $0.04 2k, $0.08 4k; high fps 2x
- [P-Video-2-Pro-Avatar](https://inference.sh/apps/pruna/p-video-2-pro-avatar.md): $0.02/sec 480p, $0.04/sec 768p, $0.06/sec 1080p, $0.08/sec 2k, $0.12/sec 4k
- [P-Video-2-Pro](https://inference.sh/apps/pruna/p-video-2-pro.md): $0.01-$0.155/sec; cost: $0.01-$0.105, speed: $0.02-$0.115, quality: $0.04-$0.155 (480p-4k)

## faq

### how much does P-Video-2-Pro-Reference cost?

Output: cost $0.015-$0.105/sec, speed $0.02-$0.115/sec. Ref video: $0.03-$0.06/sec. Ref img: $0.005/img. Ref audio: $0.0015-$0.0025/sec. you pay per run from your inference shell credits. no subscription is required.

### how do I run P-Video-2-Pro-Reference via api?

call pruna/p-video-2-pro-reference with the javascript or python sdk, the rest api, or `belt app run pruna/p-video-2-pro-reference` from a terminal. the api reference on this page lists every input.

### who makes P-Video-2-Pro-Reference?

P-Video-2-Pro-Reference is made by pruna and runs on inference shell. every pruna app is listed at https://inference.sh/apps/pruna.

### can my agent use P-Video-2-Pro-Reference?

yes. agents call it as a tool through the inference shell mcp server (https://api.inference.sh/mcp), the belt cli or the sdk, and pay per run like you do.

### what are the alternatives to P-Video-2-Pro-Reference?

other video apps on inference shell include VACE, P-Video-Animate, P-Video-Upscale, P-Video-2-Pro-Avatar. they run through the same api, so switching is a one-line change.
