Video Generation
Generate videos from text prompts or images
Video Generation
Generate high-quality videos from text descriptions or source images using MiniMax, Luma, and other video models.
Video generation is resource-intensive. We recommend using async mode for all video requests.
Try it Now
Test the Video Generation API directly in your browser:
Endpoint
POST /videos/generations
POST /videos/generations?async=trueRequired scope: video
Request Body
{
"prompt": "A timelapse of a flower blooming",
"model": "fal-ai/minimax/video-01",
"duration_seconds": 5,
"resolution": "720p",
"fps": 30,
"aspect_ratio": "16:9",
"mode": "text_to_video",
"source_image": null,
"negative_prompt": "blurry, static",
"seed": null,
"prompt_optimizer": true,
"loop": false
}Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Text description of the video |
model | string | No | fal-ai/minimax/video-01 | Model ID |
duration_seconds | number | No | 5 | Video duration in seconds |
resolution | string | No | 720p | 720p, 1080p, or 4k |
fps | number | No | 30 | Frames per second: 30 or 60 |
aspect_ratio | string | No | 16:9 | Aspect ratio |
mode | string | No | text_to_video | Generation mode |
source_image | string | No | - | Image URL for image-to-video |
source_video | string | No | - | Video URL for video-to-video |
negative_prompt | string | No | - | What to avoid |
seed | number | No | random | Random seed |
prompt_optimizer | boolean | No | true | Enhance prompt (MiniMax) |
loop | boolean | No | false | Create looping video (Luma) |
Aspect Ratios
16:9- Landscape (default)9:16- Portrait (vertical video)1:1- Square4:3- Classic3:4- Tall
Generation Modes
| Mode | Description |
|---|---|
text_to_video | Generate video from text prompt |
image_to_video | Animate a source image |
video_to_video | Transform an existing video |
Response
{
"created": 1703123456,
"data": {
"url": "https://fal.media/files/video123.mp4",
"duration_seconds": 5,
"width": 1280,
"height": 720
},
"model": "fal-ai/minimax/video-01",
"model_tier": "standard",
"usage": {
"credits_used": 500,
"seconds_used": 5,
"seconds_remaining": 55
}
}Async Response
{
"id": "job_video123",
"status": "pending",
"created": 1703123456,
"model": "fal-ai/minimax/video-01",
"estimated_credits": 500
}Examples
curl -X POST "https://www.novakit.ai/api/v1/videos/generations?async=true" \
-H "Authorization: Bearer sk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A drone flyover of a tropical beach at golden hour, cinematic",
"duration_seconds": 5,
"aspect_ratio": "16:9"
}'import requests
response = requests.post(
"https://www.novakit.ai/api/v1/videos/generations?async=true",
headers={
"Authorization": "Bearer sk_your_api_key",
"Content-Type": "application/json"
},
json={
"prompt": "The person slowly turns and smiles",
"mode": "image_to_video",
"source_image": "https://example.com/portrait.jpg",
"duration_seconds": 3
}
)
job_id = response.json()["id"]
print(f"Job started: {job_id}")import requests
import time
# Start the job
response = requests.post(
"https://www.novakit.ai/api/v1/videos/generations?async=true",
headers={"Authorization": "Bearer sk_your_api_key"},
json={"prompt": "Ocean waves crashing on rocks", "duration_seconds": 5}
)
job_id = response.json()["id"]
# Poll until complete
while True:
status = requests.get(
f"https://www.novakit.ai/api/v1/jobs/{job_id}?poll=true",
headers={"Authorization": "Bearer sk_your_api_key"}
).json()
print(f"Status: {status['status']}, Progress: {status.get('progress', 0)}%")
if status["status"] == "completed":
print(f"Video URL: {status['outputData']['video']['url']}")
break
elif status["status"] == "failed":
print(f"Failed: {status.get('errorMessage')}")
break
time.sleep(5)Available Models
Text-to-Video
| Model | Quality | Best For |
|---|---|---|
fal-ai/minimax/video-01 | Excellent | Realistic, high quality (default) |
fal-ai/minimax/hailuo-02/standard/text-to-video | Excellent | Latest MiniMax |
fal-ai/veo3 | Excellent | Google Veo 3 |
fal-ai/veo3/fast | Good | Fast Veo 3 |
fal-ai/kling-video/v2.5-turbo/pro/text-to-video | Excellent | Kling v2.5 |
fal-ai/kling-video/v2/master/text-to-video | Excellent | Kling 2.0 Master |
fal-ai/pixverse/v5.5/text-to-video | Good | Pixverse |
fal-ai/ltx-2/text-to-video/fast | Good | Fast LTX Video 2.0 |
Image-to-Video
| Model | Quality | Best For |
|---|---|---|
fal-ai/minimax/video-01/image-to-video | Excellent | Animate images |
fal-ai/veo2/image-to-video | Excellent | Google Veo 2 |
fal-ai/kling-video/v2.5-turbo/pro/image-to-video | Excellent | Kling v2.5 |
fal-ai/wan-pro/image-to-video | Excellent | Wan 2.1 Pro |
fal-ai/minimax/hailuo-2.3/pro/image-to-video | Excellent | Hailuo 2.3 |
fal-ai/bytedance/seedance/v1/pro/image-to-video | Good | ByteDance Seedance |
Tips for Better Videos
Writing effective video prompts:
- Describe motion explicitly ("camera pans left", "person walks forward")
- Include temporal cues ("timelapse", "slow motion")
- Specify camera angles ("close-up", "aerial shot", "tracking shot")
- Mention lighting and atmosphere
Example Prompts
| Type | Prompt |
|---|---|
| Nature | "Timelapse of clouds rolling over mountain peaks, golden hour lighting, 4K cinematic" |
| Portrait | "Close-up of a woman's face, gentle wind blowing her hair, soft natural lighting" |
| Action | "Sports car drifting around a corner, dust and smoke, dramatic slow motion" |
| Abstract | "Flowing liquid metal morphing into geometric shapes, reflective surface, dark background" |