Video
Text → video, image → video, or first-frame → last-frame. Many top models through one entry point.
Generate video from text or from an image. The platform offers two engines: fal is the main one (many models), and Higgsfield is a DoP-style image-to-video option.
What you can do
Three ways to generate video:
- Text → video (t2v) — describe a scene, get a clip.
- Image → video (i2v) — animate a still image.
- First frame → last frame — interpolate motion between two stills.
Some models also support reference-to-video, extend/continue, and edit. Which modes you get depends on the model you pick:
| Engine | Text → video | Image → video | First / last frame | Reference / Extend |
|---|---|---|---|---|
| fal (Veo, Seedance, Kling, Grok, Happy-horse) | ✓ | ✓ | ✓ (Veo, Kling) | ✓ (varies by model) |
| Higgsfield (DoP) | weave via image | ✓ | ✓ | — |
Choosing a model
fal_generate_video is the workhorse: one entry point to many top models. Pick a model with model_id, and pass that model's parameters in input. Each family supports different modes and fields:
| Family | model_id examples | Modes | Notable input fields |
|---|---|---|---|
| Veo 3.1 (Google) | fal-ai/veo3.1, fal-ai/veo3.1/image-to-video, .../first-last-frame-to-video, .../reference-to-video, .../extend-video | t2v, i2v, first/last, reference, extend | prompt, image_url, duration (4s/6s/8s), resolution (720p/1080p/4k), generate_audio, aspect_ratio |
| Seedance 2.0 (ByteDance) | bytedance/seedance-2.0/text-to-video, .../image-to-video, .../reference-to-video | t2v, i2v, reference | prompt, image_url, resolution (480p/720p), duration (auto/"4"–"15"), aspect_ratio, generate_audio |
| Kling 3.0 | fal-ai/kling-video/v3/pro/text-to-video, .../pro/image-to-video | t2v, i2v | prompt, start_image_url (i2v), end_image_url, duration ("3"–"15", default "5"), generate_audio |
| Grok Imagine (xAI) | xai/grok-imagine-video/text-to-video, .../image-to-video | t2v, i2v, reference, edit, extend | prompt, image_url, duration (int 1–15), resolution (480p/720p), aspect_ratio |
| Happy-horse (Alibaba) | alibaba/happy-horse/text-to-video, .../image-to-video | t2v, i2v, reference, edit | image_url, prompt, resolution (720p/1080p), duration (3–15, default 5) |
higgsfield_generate_video — DoP-style image-to-video. Models: higgsfield-ai/dop/lite / dop/standard / dop/turbo (each with a /first-last-frame variant). It has no pure text-to-video — for text → video, weave an image first (see below).
The first-frame field name differs by model. Kling uses start_image_url; every other family (Veo, Seedance, Grok, Happy-horse) uses image_url. Pass whichever the model you picked expects.
The duration format differs by model. Veo wants "8s", Seedance "auto" or "8", Kling "5", Grok and Happy-horse use integers. Follow the row for your model.
Interface
fal_generate_video — submit a job. Inputs: model_id (an endpoint id) and input (that model's full parameter object, passed through). Returns a request_id.
fal_get_video_status — poll a job. Pass both model_id and request_id. Returns IN_QUEUE / IN_PROGRESS, or COMPLETED with the video URL.
higgsfield_generate_video — submit. Inputs: prompt, image_url (required), model_id, params (model-specific, passed through). Returns a request_id.
higgsfield_get_video_status — poll. Pass request_id only. Returns in_progress, completed (with the video URL), or failed / nsfw.
Using it in a Skill
Video generation is asynchronous — two steps:
- Submit with
*_generate_video→ get arequest_id. - Poll
*_get_video_statusuntil it'sCOMPLETED→ get the video URL.
Generation can take a few minutes — keep polling until it completes. For fal, pass both model_id and request_id when polling; for Higgsfield, only request_id.
Text → video on an image-only engine (or whenever you want art-directed framing): generate an image first, then feed it as the start frame.
# Text → video (Veo 3.1, with audio, 8 seconds)
fal_generate_video(
model_id="fal-ai/veo3.1",
input={ "prompt": "A cinematic drone shot over a misty mountain lake at dawn",
"duration": "8s", "resolution": "1080p", "generate_audio": true }
)
# Image → video (Kling — note start_image_url, not image_url)
fal_generate_video(
model_id="fal-ai/kling-video/v3/pro/image-to-video",
input={ "prompt": "the character slowly turns and smiles",
"start_image_url": "https://…", "duration": "5" }
)Weave for image → video:
1. google_generate_image / openai_generate_image(prompt) → image
2. fal_generate_video(model_id=".../image-to-video",
input={ prompt: motion, image_url: <image> }) → request_id
(or higgsfield_generate_video with image_url)
3. poll *_get_video_status until COMPLETED → video URL