# minimax-h3-spicy/text-to-video

> MiniMax H3 is an omni-modal video generation model that produces 2K resolution video clips up to 15 seconds with native stereo audio. Supports text-to-video with multiple aspect ratios. Generate cinematic, high-fidelity videos with synchronized audio from text prompts.

- **Provider:** AirCube
- **Category:** text-to-video
- **Price:** $0.7000 per run

## Key Features

- Omni-modal 2K video generation with native stereo audio — no separate TTS step needed.
- Up to 15-second video clips from text prompts with native stereo audio.
- Multiple aspect ratio support: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16.
- Advanced prompt comprehension — up to 7,000 character prompts for detailed scene descriptions.
- 480p, 512p, 720p (768P) and 1080p (2K) resolution output.

## Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| `prompt` | Yes | Text description of the video to generate (max 7,000 characters). Describe both visual scenes and audio/sound effects. |
| `duration` | No | Video length in seconds: 4-15 (default: 5). Frames are auto-snapped to multiples of 17. |
| `aspect_ratio` | No | Output ratio: 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 (default: 16:9). |
| `resolution` | No | Output resolution: 480p, 512p, 720p (768P), 1080p (2K) (default: 720p). |

## How to Use

1. Write a detailed prompt describing the desired video scene, motion, and atmosphere.
2. Select an aspect ratio and duration.
3. Click Generate — the API returns a task ID for polling.
4. Poll the status endpoint until the video is ready, then download the MP4 with audio.

## Code Examples

### Python

```python
import os
import requests

response = requests.post(
    "https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video",
    headers={
        "Authorization": "Bearer " + os.environ["AIRCUBE_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
    "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "1080p"
},
    timeout=300,
)
data = response.json()

if data["success"]:
    print("ID:", data["data"]["id"], "Status:", data["data"]["status"])
else:
    print("Error:", data["error"]["message"])
```

### Node.js

```javascript
const response = await fetch("https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.AIRCUBE_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
  "duration": "5s",
  "aspect_ratio": "16:9",
  "resolution": "1080p"
}),
});

const data = await response.json();

if (data.success) {
  console.log("ID:", data.data.id, "Status:", data.data.status);
} else {
  console.error("Error:", data.error.message);
}
```

### cURL

```curl
curl -X POST "https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video" \
  -H "Authorization: Bearer $AIRCUBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
  "duration": "5s",
  "aspect_ratio": "16:9",
  "resolution": "1080p"
}'
```

### Python (Async)

```python
import os
import time
import requests

# 1. Submit
response = requests.post(
    "https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video",
    headers={
        "Authorization": "Bearer " + os.environ["AIRCUBE_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
    "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "1080p"
},
    timeout=300,
)
data = response.json()

if not data["success"]:
    print("Error:", data["error"]["message"])
    exit(1)

generation_id = data["data"]["id"]
print(f"Submitted: {generation_id}")

# 2. Poll until completed
while True:
    time.sleep(5)
    r = requests.get(
        f"https://aircube.ai/api/v3/status/{generation_id}",
        headers={"Authorization": "Bearer " + os.environ["AIRCUBE_API_KEY"]},
    )
    result = r.json()["data"]

    if result["status"] == "completed":
        print(result["output_url"])
        break
    elif result["status"] == "failed":
        print("Generation failed")
        break
```

### Node.js (Async)

```javascript
// 1. Submit
const response = await fetch("https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.AIRCUBE_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
  "duration": "5s",
  "aspect_ratio": "16:9",
  "resolution": "1080p"
}),
});
const data = await response.json();

if (!data.success) {
  console.error("Error:", data.error.message);
  process.exit(1);
}

const generationId = data.data.id;
console.log("Submitted:", generationId);

// 2. Poll until completed
while (true) {
  await new Promise((r) => setTimeout(r, 5000));
  const res = await fetch(
    `https://aircube.ai/api/v3/status/${generationId}`,
    { headers: { "Authorization": "Bearer " + process.env.AIRCUBE_API_KEY } },
  );
  const result = (await res.json()).data;

  if (result.status === "completed") {
    console.log(result.output_url);
    break;
  } else if (result.status === "failed") {
    console.error("Generation failed");
    break;
  }
}
```

### cURL (Async)

```curl
# 1. Submit
RESPONSE=$(curl -s -X POST "https://aircube.ai/api/v3/minimax-h3-spicy/text-to-video" \
  -H "Authorization: Bearer $AIRCUBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "A cinematic wide shot of a lighthouse on a rocky cliff at sunset, waves crashing below, seagulls calling overhead",
  "duration": "5s",
  "aspect_ratio": "16:9",
  "resolution": "1080p"
}')

ID=$(echo "$RESPONSE" | jq -r '.data.id')
echo "Submitted: $ID"

# 2. Poll until completed
while true; do
  sleep 5
  STATUS_RES=$(curl -s "https://aircube.ai/api/v3/status/$ID" \
    -H "Authorization: Bearer $AIRCUBE_API_KEY")
  STATUS=$(echo "$STATUS_RES" | jq -r '.data.status')

  if [ "$STATUS" = "completed" ]; then
    echo "$STATUS_RES" | jq -r '.data.output_url'
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "Generation failed"; break
  fi
done
```

## Pricing

| Resolution | Duration | Cost |
| --- | --- | --- |
| 480p | 4s | $0.34 |
| 480p | 5s | $0.42 |
| 480p | 6s | $0.50 |
| 480p | 8s | $0.67 |
| 480p | 10s | $0.84 |
| 480p | 12s | $1.01 |
| 480p | 15s | $1.26 |
| 512p | 4s | $0.45 |
| 512p | 5s | $0.56 |
| 512p | 6s | $0.67 |
| 512p | 8s | $0.90 |
| 512p | 10s | $1.12 |
| 512p | 12s | $1.34 |
| 512p | 15s | $1.68 |
| 720p | 4s | $0.56 |
| 720p | 5s | $0.70 |
| 720p | 6s | $0.84 |
| 720p | 8s | $1.12 |
| 720p | 10s | $1.40 |
| 720p | 12s | $1.68 |
| 720p | 15s | $2.10 |
| 1080p | 4s | $0.80 |
| 1080p | 5s | $1.00 |
| 1080p | 6s | $1.20 |
| 1080p | 8s | $1.60 |
| 1080p | 10s | $2.00 |
| 1080p | 12s | $2.40 |
| 1080p | 15s | $3.00 |

### Billing Rules

- 480p / 4s: $0.34.
- 512p / 4s: $0.45.
- 720p / 4s: $0.56.
- 1080p / 4s: $0.80.
- Longer durations scale proportionally.
- Failed generations are not charged.

## Best Use Cases

- Cinematic scene generation with synchronized audio and dialogue.
- Social media content with native sound (no separate audio workflow needed).
- Concept visualization and storyboarding for film and advertising.
- Music videos and promotional content with built-in stereo audio.

## Pro Tips

- Use detailed, descriptive prompts for best results — H3 supports up to 7,000 characters.
- For text-to-video, always specify an aspect ratio (it cannot be 'adaptive').
- Start with shorter durations (4-5s) to iterate on prompts before generating longer clips.
- The model generates native stereo audio — describe sounds and dialogue in your prompt for better results.

## Notes

- Video URLs are time-limited — download promptly after generation completes.
- Task results are retained for 7 days.

## FAQ

**Q: Does MiniMax H3 Spicy generate audio?**

Yes — H3 produces native stereo audio synchronized with the video. No separate TTS or audio generation step is needed.

**Q: What is the maximum video length?**

Up to 15 seconds per generation. Duration is specified in seconds (4-15).

**Q: What resolution does H3 support?**

480p, 512p, 720p (768P) and 1080p (2K). On our platform, 720p maps to 768P and 1080p maps to 2K.
