# H3 Max Camera Controls

> Run H3 Max Camera Controls by falai online or via API. From $0.05 per second, no setup.

**URL:** https://inference.sh/apps/falai/minimax-h3-max-camera-controls
**Last updated:** 2026-10-20

---

Turn a single image into a video with keyframed camera orbit, elevation and distance using MiniMax H3 Max via fal. The scene stays frozen; only the camera moves.

- app: `falai/minimax-h3-max-camera-controls`
- maker: [falai](https://inference.sh/apps/falai.md)
- category: [video](https://inference.sh/apps/category/video.md)
- input → output: image → video
- tasks: [image to video](https://inference.sh/apps/tag/image-to-video.md), [camera control](https://inference.sh/apps/tag/camera-control.md)
- price: $0.05/sec 480P, $0.08/sec 768P, $0.16/sec 1080P
- runs via: api, javascript and python sdk, belt cli, mcp

## minimax-h3-max-camera-controls API Guide

### About
turn a single image into a video with keyframed camera orbit, elevation and distance using minimax h3 max via fal. the scene stays frozen; only the camera moves.

### 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": "falai/minimax-h3-max-camera-controls@1ky7apr2",
        "input": {
            "image": "https://example.com/file.png",
            "camera_trajectory": [
                {
                    "azimuth": 0,
                    "distance": 1,
                    "elevation": 10,
                    "time": 0
                },
                {
                    "azimuth": 90,
                    "distance": 1,
                    "elevation": 10,
                    "time": 1
                }
            ]
        }
    })

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": "falai/minimax-h3-max-camera-controls@1ky7apr2",
        "input": {
            "image": "https://example.com/file.png",
            "camera_trajectory": [
                {
                    "azimuth": 0,
                    "distance": 1,
                    "elevation": 10,
                    "time": 0
                },
                {
                    "azimuth": 90,
                    "distance": 1,
                    "elevation": 10,
                    "time": 1
                }
            ]
        }
    }, 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": "falai/minimax-h3-max-camera-controls@1ky7apr2",
    "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
- **image** (string) *required*: Image to use as the first frame.
- **camera_trajectory** (array) *required*: Ordered camera keyframes (max 12). The first pose is held before its time and the last pose for the remainder.
- **prompt** (string): Optional prompt. Defaults to preserving the frozen scene while only the camera moves.
- **duration** (number): Video duration in seconds (1-15).
- **resolution** (string): 480P native (default), 768P native, 1080P latent refinement.
- **prompt_expansion_mode** (string): Prompt rewriting effort.
- **seed** (integer): Random seed for reproducible generation.

#### Output
- **expanded_prompt** (string): The prompt after expansion.
- **video** (string): The generated video.

## other video apps

- [H3 Max Styles](https://inference.sh/apps/falai/minimax-h3-max-styles.md): $0.08/sec (768P)
- [H3 Max Insert Video](https://inference.sh/apps/falai/minimax-h3-max-insert-video.md): $0.05/sec 480p, $0.06/sec 768p
- [H3 Max 3D to Video](https://inference.sh/apps/falai/minimax-h3-max-3d-to-video.md): $0.50/request + $0.05/sec (480P), $0.08/sec (768P), $0.16/sec (1080P) + $0.10/generated ref; 5s min
- [H3 Max Recast](https://inference.sh/apps/falai/minimax-h3-max-recast.md): $0.30/sec at 768P, $0.45/sec at 1080P
- [H3 Max Relight](https://inference.sh/apps/falai/minimax-h3-max-relight.md): $0.05/s 480P, $0.08/s 768P, $0.16/s 1080P, $0.32/s 2K; up to 15s/video

## faq

### how much does H3 Max Camera Controls cost?

$0.05/sec 480P, $0.08/sec 768P, $0.16/sec 1080P. you pay per run from your inference shell credits. no subscription is required.

### how do I run H3 Max Camera Controls via api?

call falai/minimax-h3-max-camera-controls with the javascript or python sdk, the rest api, or `belt app run falai/minimax-h3-max-camera-controls` from a terminal. the api reference on this page lists every input.

### who makes H3 Max Camera Controls?

H3 Max Camera Controls is made by falai and runs on inference shell. every falai app is listed at https://inference.sh/apps/falai.

### can my agent use H3 Max Camera Controls?

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 H3 Max Camera Controls?

other video apps on inference shell include H3 Max Styles, H3 Max Insert Video, H3 Max 3D to Video, H3 Max Recast. they run through the same api, so switching is a one-line change.
