# seedance-2.0/text-to-video-spicy

> Seedance 2.0 Spicy Text to Video generates high-quality cinematic clips from text prompts, optimized for scalable content generation with smooth animations and stable aesthetics. Ready-to-use REST inference API for creating social media clips, product videos, advertising creatives, visual storytelling, and professional text-to-video workflows with simple integration, no coldstarts, and affordable pricing.

- **Provider:** ByteDance
- **Category:** text-to-video
- **Price:** $0.5100 (~~$0.6000~~) per run

## Key Features

- Generate video directly from text prompts — no source image required.
- Cinematic quality — produce smooth, coherent video with consistent subjects and scenes.
- Flexible creative control — specify camera angles, lighting, subject actions and mood.
- Multiple duration and resolution options for preview through production workflows.
- Coherent storytelling — maintains narrative consistency across the generated frames.
- Diverse styles — photorealistic, animated, stylized, or abstract visual outputs.

## Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| `prompt` | Yes | Detailed text description of the video scene to generate. |
| `duration` | No | Video length in seconds (default varies by model). |
| `aspect_ratio` | No | Output ratio: 16:9, 9:16, 4:3, 1:1 (default: 16:9). |
| `resolution` | No | Output resolution: 480p, 720p, 1080p, 4k (default: 720p). |

## How to Use

1. Write a detailed prompt describing your video scene — include subject, action, setting, lighting and camera movement.
2. Select aspect ratio and resolution appropriate for your use case.
3. Set the desired duration for your video clip.
4. Generate and download your video — iterate on the prompt for better results.

## Code Examples

### Python

```python
import os
import requests

response = requests.post(
    "https://aircube.ai/api/v3/seedance-2.0/text-to-video-spicy",
    headers={
        "Authorization": "Bearer " + os.environ["AIRCUBE_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
    "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
    "duration": 8,
    "aspect_ratio": "16:9"
},
    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/seedance-2.0/text-to-video-spicy", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.AIRCUBE_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
  "duration": 8,
  "aspect_ratio": "16:9"
}),
});

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/seedance-2.0/text-to-video-spicy" \
  -H "Authorization: Bearer $AIRCUBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
  "duration": 8,
  "aspect_ratio": "16:9"
}'
```

### Python (Async)

```python
import os
import time
import requests

# 1. Submit
response = requests.post(
    "https://aircube.ai/api/v3/seedance-2.0/text-to-video-spicy",
    headers={
        "Authorization": "Bearer " + os.environ["AIRCUBE_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
    "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
    "duration": 8,
    "aspect_ratio": "16:9"
},
    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/seedance-2.0/text-to-video-spicy", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.AIRCUBE_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
  "duration": 8,
  "aspect_ratio": "16:9"
}),
});
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/seedance-2.0/text-to-video-spicy" \
  -H "Authorization: Bearer $AIRCUBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "Aerial shot of a coastal city at golden hour, camera slowly descending toward the waterfront",
  "duration": 8,
  "aspect_ratio": "16:9"
}')

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.48 |
| 480p | 5s | $0.60 |
| 480p | 6s | $0.72 |
| 480p | 8s | $0.96 |
| 480p | 10s | $1.20 |
| 480p | 12s | $1.44 |
| 480p | 15s | $1.80 |
| 720p | 4s | $0.96 |
| 720p | 5s | $1.20 |
| 720p | 6s | $1.44 |
| 720p | 8s | $1.92 |
| 720p | 10s | $2.40 |
| 720p | 12s | $2.88 |
| 720p | 15s | $3.60 |
| 1080p | 4s | $2.40 |
| 1080p | 5s | $3.00 |
| 1080p | 6s | $3.60 |
| 1080p | 8s | $4.80 |
| 1080p | 10s | $6.00 |
| 1080p | 12s | $7.20 |
| 1080p | 15s | $9.00 |
| 4k | 4s | $4.80 |
| 4k | 5s | $6.00 |
| 4k | 6s | $7.20 |
| 4k | 8s | $9.60 |
| 4k | 10s | $12.00 |
| 4k | 12s | $14.40 |
| 4k | 15s | $18.00 |

### Billing Rules

- 480p / 4s: $0.48.
- 720p / 4s: $0.96.
- 1080p / 4s: $2.40.
- 4k / 4s: $4.80.
- Longer durations scale proportionally.
- Failed generations are not charged.

## Best Use Cases

- Content creation — generate video clips for social media, ads and marketing campaigns.
- Storyboard visualization — bring written concepts to life as video previews.
- Music video production — create visual sequences from lyrical descriptions.
- Educational content — generate explainer or demonstration clips from descriptions.
- Game and film pre-visualization — prototype scenes before full production.

## Pro Tips

- Write prompts like a film director — include specific camera angles (close-up, wide shot, tracking shot).
- Describe lighting conditions (golden hour, dramatic shadows, neon glow) for mood control.
- Keep the scene description focused — one clear action or sequence per generation works best.
- Include temporal cues (slowly, suddenly, gradually) to guide the pacing of motion.
- Start with 16:9 for cinematic content and 9:16 for social media verticals.

## Notes

- Video output is typically MP4 format.
- Generation time scales with duration and resolution.
- Complex prompts with multiple subjects may require iteration to achieve desired results.

## FAQ

**Q: What is the seedance-2.0/text-to-video-spicy API?**

Seedance 2.0 Spicy Text to Video generates high-quality cinematic clips from text prompts, optimized for scalable content generation with smooth animations and stable aesthetics. Ready-to-use REST inference API for creating social media clips, product videos, advertising creatives, visual storytelling, and professional text-to-video workflows with simple integration, no coldstarts, and affordable pricing.

**Q: Do I need to provide an image to generate video?**

No — this model generates video purely from text. For image-guided video generation, check out our image-to-video models.

**Q: How long can the generated video be?**

Duration depends on the model — typically 4 to 15 seconds. Check the parameters section for the specific range.

**Q: Can I use seedance-2.0/text-to-video-spicy outputs commercially?**

Yes — generated videos are yours to use commercially. Review the Pricing page for plan-specific limits.
