NovaKitv1.0

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=true

Required 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

ParameterTypeRequiredDefaultDescription
promptstringYes-Text description of the video
modelstringNofal-ai/minimax/video-01Model ID
duration_secondsnumberNo5Video duration in seconds
resolutionstringNo720p720p, 1080p, or 4k
fpsnumberNo30Frames per second: 30 or 60
aspect_ratiostringNo16:9Aspect ratio
modestringNotext_to_videoGeneration mode
source_imagestringNo-Image URL for image-to-video
source_videostringNo-Video URL for video-to-video
negative_promptstringNo-What to avoid
seednumberNorandomRandom seed
prompt_optimizerbooleanNotrueEnhance prompt (MiniMax)
loopbooleanNofalseCreate looping video (Luma)

Aspect Ratios

  • 16:9 - Landscape (default)
  • 9:16 - Portrait (vertical video)
  • 1:1 - Square
  • 4:3 - Classic
  • 3:4 - Tall

Generation Modes

ModeDescription
text_to_videoGenerate video from text prompt
image_to_videoAnimate a source image
video_to_videoTransform 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

ModelQualityBest For
fal-ai/minimax/video-01ExcellentRealistic, high quality (default)
fal-ai/minimax/hailuo-02/standard/text-to-videoExcellentLatest MiniMax
fal-ai/veo3ExcellentGoogle Veo 3
fal-ai/veo3/fastGoodFast Veo 3
fal-ai/kling-video/v2.5-turbo/pro/text-to-videoExcellentKling v2.5
fal-ai/kling-video/v2/master/text-to-videoExcellentKling 2.0 Master
fal-ai/pixverse/v5.5/text-to-videoGoodPixverse
fal-ai/ltx-2/text-to-video/fastGoodFast LTX Video 2.0

Image-to-Video

ModelQualityBest For
fal-ai/minimax/video-01/image-to-videoExcellentAnimate images
fal-ai/veo2/image-to-videoExcellentGoogle Veo 2
fal-ai/kling-video/v2.5-turbo/pro/image-to-videoExcellentKling v2.5
fal-ai/wan-pro/image-to-videoExcellentWan 2.1 Pro
fal-ai/minimax/hailuo-2.3/pro/image-to-videoExcellentHailuo 2.3
fal-ai/bytedance/seedance/v1/pro/image-to-videoGoodByteDance 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

TypePrompt
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"

On this page