fal.ai
fal.ai serves 4 video models on LLM API, all from Alibaba.
Models and prices
Prices when fal.ai serves the request.
No fal.ai model matches your search.
Video 4
Price per second of video; a range covers its resolutions
happyhorse-1.1-r2v | $0.14–0.18 | Reference | 720p–1080p |
|---|---|---|---|
happyhorse-1.1-t2v | $0.14–0.18 | Text | 720p–1080p |
happyhorse-1.0-video-edit | $0.14–0.28 | Video edit | 720p–1080p |
happyhorse-1.1-i2v | $0.14–0.18 | Image | 720p–1080p |
Send requests to fal.ai
Use the model ID as it is: video, audio and embedding requests take no provider prefix.
Example: HappyHorse 1.1 Reference-to-Video
POST /v1/videosVideo jobs run in the background: create one, poll it, then download the file.Videos docs
import os
import time
from openai import OpenAI
client = OpenAI(
base_url="https://api.llmapi.ai/v1",
api_key=os.environ["LLMAPI_KEY"],
)
video = client.videos.create(
model="happyhorse-1.1-r2v",
prompt="This paper boat drifts down a rainy street",
extra_body={"image_list": "https://llmapi.ai/samples/paper-boat.jpg"},
)
while video.status in ("queued", "in_progress"):
time.sleep(10)
video = client.videos.retrieve(video.id)
if video.status == "failed":
raise RuntimeError(video.error)
client.videos.download_content(video.id).write_to_file("video.mp4")import fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.llmapi.ai/v1",
apiKey: process.env.LLMAPI_KEY,
});
let video = await client.videos.create({
model: "happyhorse-1.1-r2v",
prompt: "This paper boat drifts down a rainy street",
// @ts-expect-error LLM API parameter
image_list: "https://llmapi.ai/samples/paper-boat.jpg",
});
while (video.status === "queued" || video.status === "in_progress") {
await new Promise((r) => setTimeout(r, 10_000));
video = await client.videos.retrieve(video.id);
}
if (video.status === "failed") throw new Error(video.error?.message);
const content = await client.videos.downloadContent(video.id);
fs.writeFileSync("video.mp4", Buffer.from(await content.arrayBuffer()));curl https://api.llmapi.ai/v1/videos \
-H "Authorization: Bearer $LLMAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse-1.1-r2v",
"prompt": "This paper boat drifts down a rainy street",
"image_list": ["https://llmapi.ai/samples/paper-boat.jpg"]
}'
# Poll GET https://api.llmapi.ai/v1/videos/{id} until "completed",
# then download GET https://api.llmapi.ai/v1/videos/{id}/contentPrices synced October 27, 2026.