# Pika H3 Flex (self-hosted)

> Run Pika H3 Flex (self-hosted) by pika online or via API. GPU time, billed per millisecond, no setup.

**URL:** https://inference.sh/apps/pika/pika-h3-flex-oss
**Last updated:** 2026-11-08

---

Pika H3 Flex from the open weights, on our GPUs. Text-to-video and first/last-frame image-to-video with synchronized stereo audio. 5-15s, native 480p or 768p, six sampling steps.

- app: `pika/pika-h3-flex-oss`
- maker: [pika](https://inference.sh/apps/pika.md)
- category: [video](https://inference.sh/apps/category/video.md)
- input → output: text → video, image → video
- tasks: [text to video](https://inference.sh/apps/tag/text-to-video.md), [image to video](https://inference.sh/apps/tag/image-to-video.md), [first last frame](https://inference.sh/apps/tag/first-last-frame.md), [native audio](https://inference.sh/apps/tag/native-audio.md), [open weights](https://inference.sh/apps/tag/open-weights.md)
- price: GPU time, billed per millisecond
- runs via: api, javascript and python sdk, belt cli, mcp

## pika-h3-flex-oss API Guide

### About
pika h3 flex from the open weights, on our gpus. text-to-video and first/last-frame image-to-video with synchronized stereo audio. 5-15s, native 480p or 768p, six sampling steps.

### Get an API Key
Create one in [settings → api keys](https://app.inference.sh/settings/keys). The examples read it from `INFERENCE_API_KEY`.

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

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Run and Get Result
Submit a request and wait for the final result.

```python
import os
from inferencesh import inference

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

## version @3sm8nbwj pinned
result = client.run({
        "app": "pika/pika-h3-flex-oss@3sm8nbwj",
        "input": {
            "prompt": "A red fox trots along a frozen riverbank at dawn, breath steaming. 0-3s: low tracking shot beside the fox. 3-5s: it stops and looks straight into the lens. Sound: crunching snow, distant crows, no music."
        }
    })

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

#### Stream Live Updates
Get real-time progress updates as the task runs.

```python
import os
from inferencesh import inference

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

## version @3sm8nbwj pinned
## stream=True yields updates as they arrive
for update in client.run({
        "app": "pika/pika-h3-flex-oss@3sm8nbwj",
        "input": {
            "prompt": "A red fox trots along a frozen riverbank at dawn, breath steaming. 0-3s: low tracking shot beside the fox. 3-5s: it stops and looks straight into the lens. Sound: crunching snow, distant crows, no music."
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

#### Run in the Background
Start the task and get its id back right away, then check on it with `GET /tasks/{id}`. It is done when `status` is 10 (completed), 11 (failed) or 12 (cancelled).

```python
import os
from inferencesh import inference, TaskStatus

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

## returns as soon as the task is created
task = client.run({
        "app": "pika/pika-h3-flex-oss@3sm8nbwj",
        "input": {
            "prompt": "A red fox trots along a frozen riverbank at dawn, breath steaming. 0-3s: low tracking shot beside the fox. 3-5s: it stops and looks straight into the lens. Sound: crunching snow, distant crows, no music."
        }
    }, wait=False)

## later: read its current state
state = client.tasks.get(task["id"]).data
if state["status"] == TaskStatus.COMPLETED:
    print(state["output"])
```

### 2. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "pika/pika-h3-flex-oss@3sm8nbwj",
    "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/...
```

### 3. Schema

#### Input
- **prompt** (string) *required*: What happens in the video, in plain prose. Describe the shots in order with timing, the camera, the subjects and the sound (dialogue in quotes, ambience, music or 'no music'). There is no prompt rewriter here, so be concrete.
- **image** (string): First frame (JPEG, PNG or WebP). Center-cropped to the canvas aspect ratio and held as frame one.
- **last_frame_image** (string): Last frame. Can be given alone to generate up to it, or with image for first-and-last-frame.
- **duration** (integer): Requested length in whole seconds, 5 to 15. Snapped up to the model's frame grid (5s gives 124 frames, 5.17s).
- **aspect_ratio** (string): Canvas aspect ratio. auto follows the first keyframe when one is given, otherwise 16:9.
- **resolution** (string): Native generation tier. 480p is about twice as fast.
- **soundscape** (string): Overall ambience and physical sounds (the model's overall_soundscape field). Defaults to natural sound matching the scene.
- **music** (string): Background score (the model's non_diegetic_music field). Default none.
- **format_prompt** (boolean): Wrap the prompt in Pika's structured template (keyframe alignment line, integrated_multimodal_description, overall_soundscape, non_diegetic_music). Off, or a prompt that already contains integrated_multimodal_description, is sent verbatim.
- **seed** (integer): Seed, or -1 for a random one.

#### Output
- **frames** (integer): Frames generated.
- **height** (integer): Canvas height in pixels.
- **seed** (integer): Seed used.
- **video** (string): MP4 with H.264 video at 24 fps and AAC stereo audio at 32 kHz.
- **width** (integer): Canvas width in pixels.

## other video apps

- [Pika H3 Flex Upscale](https://inference.sh/apps/pika/pika-h3-flex-upscale.md): $0.05-$0.14/sec (480p src), $0.03-$0.12/sec (768p src); 1080p/2K/4K targets
- [Pika H3 Flex Reference to Video](https://inference.sh/apps/pika/pika-h3-flex-reference.md): $0.06/sec 480p, $0.12/sec 768p, $0.15/sec 1080p, $0.16/sec 2k, $0.20/sec 4k (output+input video sec). Stems: $0.001/sec
- [Pika H3 Flex](https://inference.sh/apps/pika/pika-h3-flex.md): $0.02/sec 480p, $0.04/sec 768p, $0.07/sec 1080p, $0.08/sec 2K, $0.16/sec 4K; stems +$0.001/stem-sec
- [Gemini Omni 1.2 Flash](https://inference.sh/apps/google/gemini-omni-1-2-flash.md): $0.0232/sec 360p, $0.0695/sec 720p, $0.1043/sec 1080p, $0.2085/sec 4K, plus $1.50/M input and $9.00/M thinking tokens
- [VACE](https://inference.sh/apps/pruna/vace.md): $0.40/video

## faq

### how much does Pika H3 Flex (self-hosted) cost?

GPU time, billed per millisecond. you pay per run from your inference shell credits. no subscription is required.

### how do I run Pika H3 Flex (self-hosted) via api?

call pika/pika-h3-flex-oss with the javascript or python sdk, the rest api, or `belt app run pika/pika-h3-flex-oss` from a terminal. the api reference on this page lists every input.

### who makes Pika H3 Flex (self-hosted)?

Pika H3 Flex (self-hosted) is made by pika and runs on inference shell. every pika app is listed at https://inference.sh/apps/pika.

### can my agent use Pika H3 Flex (self-hosted)?

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 Pika H3 Flex (self-hosted)?

other video apps on inference shell include Pika H3 Flex Upscale, Pika H3 Flex Reference to Video, Pika H3 Flex, Gemini Omni 1.2 Flash. they run through the same api, so switching is a one-line change.
