# P-Video-Replace

> Run P-Video-Replace by pruna online or via API. $0.03/sec (720p) or $0.06/sec (1080p), no setup.

**URL:** https://inference.sh/apps/pruna/p-video-replace
**Last updated:** 2026-08-05

---

Replace characters in videos using reference images. Preserves motion, timing, camera, and scene.

- app: `pruna/p-video-replace`
- maker: [pruna](https://inference.sh/apps/pruna.md)
- category: [video](https://inference.sh/apps/category/video.md)
- input → output: video → video
- tasks: [video to video](https://inference.sh/apps/tag/video-to-video.md)
- price: $0.03/sec (720p) or $0.06/sec (1080p)
- runs via: api, javascript and python sdk, belt cli, mcp

## p-video-replace API Guide

### About
replace characters in videos using reference images. preserves motion, timing, camera, and scene.

### 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-replace@11n0716p",
        "input": {
            "video": "https://example.com/file.png",
            "images": [
                "https://example.com/file.png"
            ]
        }
    })

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-replace@11n0716p",
        "input": {
            "video": "https://example.com/file.png",
            "images": [
                "https://example.com/file.png"
            ]
        }
    }, 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-replace@11n0716p",
    "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
- **video** (string) *required*: Source video (.mp4). Motion, timing, camera, and scene come from this.
- **images** (array) *required*: Reference image(s) of people to place into the video (1-4 images).
- **instruction_prompt** (string): Describe who in the video to replace with whom from reference images. E.g. 'Replace the person in the source video with the woman from reference image 1. Keep lip sync, motion, audio, and camera from the source video.'
- **resolution** (string): Output resolution: 720p ($0.03/s) or 1080p ($0.06/s).
- **turbo** (boolean): Turbo mode: faster generation for slightly lower quality.
- **target_fps** (string): Target FPS: 'original' to match source, or '24'/'48'.
- **save_audio** (boolean): Include audio from the source video in the output.
- **ignore_audio** (boolean): Ignore source audio during generation. If save_audio is true, audio is still saved.
- **seed** (integer): Random seed for reproducible generation.
- **disable_safety_checker** (boolean): Disable safety checker for generated videos.

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

## 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-Reference](https://inference.sh/apps/pruna/p-video-2-pro-reference.md): 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

## faq

### how much does P-Video-Replace cost?

$0.03/sec (720p) or $0.06/sec (1080p). you pay per run from your inference shell credits. no subscription is required.

### how do I run P-Video-Replace via api?

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

### who makes P-Video-Replace?

P-Video-Replace 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-Replace?

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-Replace?

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.
