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:

EngineText → videoImage → videoFirst / last frameReference / 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:

Familymodel_id examplesModesNotable 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-videot2v, i2v, first/last, reference, extendprompt, 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-videot2v, i2v, referenceprompt, image_url, resolution (480p/720p), duration (auto/"4""15"), aspect_ratio, generate_audio
Kling 3.0fal-ai/kling-video/v3/pro/text-to-video, .../pro/image-to-videot2v, i2vprompt, 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-videot2v, i2v, reference, edit, extendprompt, image_url, duration (int 115), resolution (480p/720p), aspect_ratio
Happy-horse (Alibaba)alibaba/happy-horse/text-to-video, .../image-to-videot2v, i2v, reference, editimage_url, prompt, resolution (720p/1080p), duration (315, 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:

  1. Submit with *_generate_video → get a request_id.
  2. Poll *_get_video_status until it's COMPLETED → 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