# Muse Video

> A talking clip from one photo, nearly free. Always 10 seconds, always with sound.

Source: https://docs.nocamclub.com/models/muse-video

- **Model id:** `muse-video`
- **Makes:** videos
- **From:** 2 credits ($0.02)
- **Routes:** 1, so if it's down the model is down

## Writing prompts

- **Put speech in quotes**, and keep it to about 20 words: it has to fit in 10 seconds.
- One simple action and a still camera: "He stays in the same place, and the camera doesn't move."
- With a photo, the clip takes the photo's shape: `aspect_ratio` is dropped, and `params` comes back without it. Crop the photo to the shape you want.
- Keep the frame simple: one subject, face in view.

## Good to know

- **There's no length to choose.** Sending `duration` is refused.
- Small details can drift: in the clip below the yellow sunglasses came out dark purple.
- Its word filter is its own, and a refusal can take a while to arrive. Only a finished clip means it passed.
- It has one route, so `no_fallback` is true.

## A real result: The character says our line

[Watch the clip](https://docs.nocamclub.com/examples/hello-clip.mp4)

Made through this API: 768×1152, 10 s, with sound, 2 credits, 72 seconds, from [this photo](https://docs.nocamclub.com/examples/mascot.jpg). The call below is the one that made it.

## 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: muse-video-$(date +%s)" \
  -d '{
  "model": "muse-video",
  "input": {
    "prompt": "The purple character from img1 looks straight into the camera, smiles and says clearly: \"One key. Every model. Build with the NoCam API.\" Then he gives a small nod. He stays in the same place, and the camera doesn'\''t move.",
    "images": [
      "https://docs.nocamclub.com/examples/mascot.jpg"
    ]
  }
}'
```

**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": "muse-video",
    "input": {
      "prompt": "The purple character from img1 looks straight into the camera, smiles and says clearly: \"One key. Every model. Build with the NoCam API.\" Then he gives a small nod. He stays in the same place, and the camera doesn't move.",
      "images": [
        "https://docs.nocamclub.com/examples/mascot.jpg"
      ]
    }
  }),
});
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": "muse-video",
        "input": {
            "prompt": "The purple character from img1 looks straight into the camera, smiles and says clearly: \"One key. Every model. Build with the NoCam API.\" Then he gives a small nod. He stays in the same place, and the camera doesn't move.",
            "images": [
                "https://docs.nocamclub.com/examples/mascot.jpg"
            ]
        }
    },
    timeout=90,
)
generation = res.json()
```

**MCP tool**

```json
{
  "name": "generate",
  "arguments": {
    "model": "muse-video",
    "prompt": "The purple character from img1 looks straight into the camera, smiles and says clearly: \"One key. Every model. Build with the NoCam API.\" Then he gives a small nod. He stays in the same place, and the camera doesn't move.",
    "images": [
      "https://docs.nocamclub.com/examples/mascot.jpg"
    ]
  }
}
```

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` | `9:16`, `16:9`, `1:1` | `9:16` | Only without a photo. With one, the result takes the photo's shape: crop the photo instead. |
| `images` | Up to 1 |  | Photos: 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/muse-video`.

**2 credits** ($0.02) for each generation.
