# Omni Flash

> A short clip with sound, from text or from up to 3 photos, at a very good price. With a video in, it changes that video.

Source: https://docs.nocamclub.com/models/omni-flash

- **Model id:** `omni-flash`
- **Makes:** videos
- **From:** 12 credits ($0.12)
- **Routes:** 1, so if it's down the model is down

## Writing prompts

- `reference_mode: "frames"` starts the clip on your first photo and ends it on your second.
- With a video among the files, this is video editing: say what changes. The length follows your video, so don't send `duration`.
- One action per clip. Simple movement holds up best.

## Good to know

- It refuses words about children, celebrities and well-known characters, and can be strict about it.
- Expect a couple of minutes.


## Call it

**cURL**

```bash
# A new Idempotency-Key for each new thing you want made, the same one when you retry it.
curl https://api.nocamclub.com/v1/generations \
  -H "Authorization: Bearer $NOCAM_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: omni-flash-$(date +%s)" \
  -d '{
  "model": "omni-flash",
  "input": {
    "prompt": "A paper boat sails down a rain gutter, slow camera move, sound of rain",
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }
}'
```

**JavaScript**

```js
const res = await fetch("https://api.nocamclub.com/v1/generations", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.NOCAM_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    "model": "omni-flash",
    "input": {
      "prompt": "A paper boat sails down a rain gutter, slow camera move, sound of rain",
      "duration": 8,
      "resolution": "720p",
      "aspect_ratio": "9:16"
    }
  }),
});
const generation = await res.json();
```

**Python**

```python
import os, uuid, requests

res = requests.post(
    "https://api.nocamclub.com/v1/generations",
    headers={"Authorization": f"Bearer {os.environ['NOCAM_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
    json={
        "model": "omni-flash",
        "input": {
            "prompt": "A paper boat sails down a rain gutter, slow camera move, sound of rain",
            "duration": 8,
            "resolution": "720p",
            "aspect_ratio": "9:16"
        }
    },
    timeout=90,
)
generation = res.json()
```

**MCP tool**

```json
{
  "name": "generate",
  "arguments": {
    "model": "omni-flash",
    "prompt": "A paper boat sails down a rain gutter, slow camera move, sound of rain",
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "9:16"
  }
}
```

Then poll `GET /v1/generations/{id}` until it finishes. See [Generations](https://docs.nocamclub.com/api/generations.md).

## Options

| Field | Takes | Default | What it is |
|---|---|---|---|
| `prompt` (required) | Up to 10000 characters |  | What to make. Refer to files by order: img1, img2, video1, audio1. |
| `aspect_ratio` | `16:9`, `9:16` | `16:9` |  |
| `resolution` | `720p`, `1080p` | `720p` |  |
| `duration` | `8`, `4`, `6`, `10` | `8` | Clip length, seconds. |
| `reference_mode` | `ingredients`, `frames` | `ingredients` | How the photos are used. |
| `images` | Up to 3 |  | Photos: file ids from /v1/uploads, or https addresses. |
| `videos` | Up to 1 |  | Videos, up to 10 s in total: file ids from /v1/uploads, or https addresses. |

Any other field is refused. How files work: [Uploads](https://docs.nocamclub.com/api/uploads.md) and [Files in prompts](https://docs.nocamclub.com/api/files-in-prompts.md).

## Prices

In credits (1 credit = $0.01), as of 2026-11-07. For the current list: `GET /v1/models/omni-flash`.

| Length | 720p | 1080p |
|---|---|---|
| 4 s | 12 | 12 |
| 6 s | 15 | 15 |
| 8 s | 20 | 20 |
| 10 s | 25 | 25 |

With a video among the files (`with_video`), when its length sets the clip's: 720p: 20, 1080p: 20.
