@apicity/fal
Fal Platform API provider for model management, pricing, usage, and analytics.
Runtime dependencies:
zod@^4.6.6— request schemas attached to every POST endpoint as.schema
Installation
npm install @apicity/fal
# or
pnpm add @apicity/fal
Quick Start
import { createFal } from "@apicity/fal";
const fal = createFal({ apiKey: process.env.FAL_API_KEY! });
Real-world example: upload a portrait, render a Grok Imagine video
fal's signature flow is upload-once, reuse-everywhere — drop bytes onto
fal's CDN via a presigned PUT, then thread the resulting
https://*.fal.media/ URL through any model endpoint. The two-step
snippet below combines
tests/integration/fal-storage-upload-initiate.test.ts
(POST initiate → PUT bytes) with
tests/integration/fal-xai-grok-imagine-video.test.ts
(image-to-video generation), so every URL, byte count, and asset id
below comes from real recorded HARs.
import { readFile } from "node:fs/promises";
import { createFal } from "@apicity/fal";
const fal = createFal({ apiKey: process.env.FAL_API_KEY! });
// 1. Reserve a signed upload slot. `initiate` returns two URLs: a
// permanent `file_url` you'll feed to downstream models, and a
// presigned `upload_url` you PUT the bytes to. Both point at the
// same fal CDN — no third-party hosting needed.
const slot = await fal.storage.upload.initiate({
file_name: "man.jpg",
content_type: "image/jpeg",
});
console.log(slot.file_url);
// → "https://v3b.fal.media/files/b/0a96d564/QR9a1l-E0UuoR6zOHUMlX_man.jpg"
// (the `cat1.jpg` recording shows the same URL shape with a
// cat1 suffix; the suffix tracks `file_name` you passed in.)
// 2. PUT the bytes to the presigned URL. fal storage is plain HTTP —
// no SDK call needed, just `fetch` with a matching Content-Type.
// The signature on `upload_url` expires after a short window;
// upload promptly. The resulting `file_url` is durable and
// fetchable by every fal model endpoint.
const bytes = await readFile("./man.jpg");
const put = await fetch(slot.upload_url, {
method: "PUT",
headers: { "Content-Type": "image/jpeg" },
body: bytes,
});
if (!put.ok) throw new Error(`upload failed: ${put.status}`);
// 3. Hand the now-permanent `file_url` to xAI's Grok Imagine image-to-
// video model. fal returns the MP4 on the same fal CDN. `duration`
// runs from 1 to 15 seconds, and `resolution` is "480p" or "720p".
const result = await fal.run.xai.grokImagineVideo.imageToVideo({
prompt: "the man waves at the camera as the wind blows his hair",
image_url: slot.file_url,
aspect_ratio: "16:9",
resolution: "720p",
duration: 6,
});
console.log(result.video.url);
// → "https://v3b.fal.media/files/b/0a96be18/bMSvmG4X4YNIsdUfc_MgD_6Ypo1qmx.mp4"
console.log(result.video.file_size);
// → 3110943 // ~3 MB MP4 for a 6-second 720p clip
Notes
- The recorded Grok Imagine HAR inlines the image as a
data:image/jpeg;base64,…URL — fal accepts both inline data URLs and anyhttps://URL it can reach. Uploading via fal storage first keeps request bodies tiny (350 KB → <1 KB) and lets you reuse the asset across multiple model calls without re-encoding. - The package re-exports a one-call
uploadFile(provider, { data, filename, contentType })helper that wraps the initiate-then-PUT dance and returns thefile_urldirectly — use it when you don't need granular control over the lifecycle or signed URL. - Every POST endpoint exposes a Zod schema: call
fal.run.xai.grokImagineVideo.imageToVideo.schema.safeParse(input)to validate a payload before paying for inference. - WAN 2.7 reference-to-video validates generated duration as 2–10
seconds.
duration: 0remains limited to source-clip edit-video flows where it means keeping the original clip length. - Long-running calls accept an
AbortSignalsecond argument and compose with the package's middleware, e.g.withRetry(fal.run.xai.grokImagineVideo.imageToVideo, { retries: 3 })from@apicity/falto ride out transient queue / 429s. - Errors throw
FalErrorwithstatus,type,request_id, and the parsedbodyattached:try { ... } catch (e) { if (e instanceof FalError) console.error(e.status, e.body); }.
API Reference
283 endpoints across 55 groups. Each method mirrors an upstream URL path.
alibaba
POST fal.alibaba.happyHorse.imageToVideo
POST https://fal.run/alibaba/happy-horse/image-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.referenceToVideo
POST https://fal.run/alibaba/happy-horse/reference-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.textToVideo
POST https://fal.run/alibaba/happy-horse/text-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.v1p1.imageToVideo
POST https://fal.run/alibaba/happy-horse/v1.1/image-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.v1p1.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.v1p1.referenceToVideo
POST https://fal.run/alibaba/happy-horse/v1.1/reference-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.v1p1.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.v1p1.textToVideo
POST https://fal.run/alibaba/happy-horse/v1.1/text-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.v1p1.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.happyHorse.videoEdit
POST https://fal.run/alibaba/happy-horse/video-edit
Cost tier: prohibitive
const res = await fal.run.alibaba.happyHorse.videoEdit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.qwenAudio3Tts
POST https://fal.run/alibaba/qwen-audio-3-tts
Cost tier: prohibitive
const res = await fal.run.alibaba.qwenAudio3Tts({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.qwenImage3.edit
POST https://fal.run/alibaba/qwen-image-3/edit
Cost tier: prohibitive
const res = await fal.run.alibaba.qwenImage3.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.qwenImage3.textToImage
POST https://fal.run/alibaba/qwen-image-3/text-to-image
Cost tier: prohibitive
const res = await fal.run.alibaba.qwenImage3.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0.imageToVideo
POST https://fal.run/alibaba/wan-3.0/image-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0.referenceToVideo
POST https://fal.run/alibaba/wan-3.0/reference-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0.textToVideo
POST https://fal.run/alibaba/wan-3.0/text-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0Prime.imageToVideo
POST https://fal.run/alibaba/wan-3.0-prime/image-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0Prime.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0Prime.referenceToVideo
POST https://fal.run/alibaba/wan-3.0-prime/reference-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0Prime.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.alibaba.wan3p0Prime.textToVideo
POST https://fal.run/alibaba/wan-3.0-prime/text-to-video
Cost tier: prohibitive
const res = await fal.run.alibaba.wan3p0Prime.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
blackforestlabs
POST fal.blackforestlabs.flux3.draftEnhance
POST https://fal.run/blackforestlabs/flux-3/draft-enhance
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.draftEnhance({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.editImage
POST https://fal.run/blackforestlabs/flux-3/edit-image
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.editImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.editVideo
POST https://fal.run/blackforestlabs/flux-3/edit-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.editVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.extendVideo
POST https://fal.run/blackforestlabs/flux-3/extend-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.extendVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.extendVideo.draft
POST https://fal.run/blackforestlabs/flux-3/extend-video/draft
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.extendVideo.draft({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.firstLastFrameToVideo
POST https://fal.run/blackforestlabs/flux-3/first-last-frame-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.firstLastFrameToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.firstLastFrameToVideo.draft
POST https://fal.run/blackforestlabs/flux-3/first-last-frame-to-video/draft
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.firstLastFrameToVideo.draft({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.imageToVideo
POST https://fal.run/blackforestlabs/flux-3/image-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.imageToVideo.draft
POST https://fal.run/blackforestlabs/flux-3/image-to-video/draft
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.imageToVideo.draft({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.keyframesToVideo
POST https://fal.run/blackforestlabs/flux-3/keyframes-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.keyframesToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.keyframesToVideo.draft
POST https://fal.run/blackforestlabs/flux-3/keyframes-to-video/draft
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.keyframesToVideo.draft({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.base.editImage.lora
POST https://fal.run/blackforestlabs/flux-3/klein/base/edit-image/lora
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.base.editImage.lora({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.base.textToImage.lora
POST https://fal.run/blackforestlabs/flux-3/klein/base/text-to-image/lora
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.base.textToImage.lora({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.base.trainer
POST https://fal.run/blackforestlabs/flux-3/klein/base/trainer
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.base.trainer({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.base.trainer.edit
POST https://fal.run/blackforestlabs/flux-3/klein/base/trainer/edit
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.base.trainer.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.editImage
POST https://fal.run/blackforestlabs/flux-3/klein/edit-image
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.editImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.editImage.lora
POST https://fal.run/blackforestlabs/flux-3/klein/edit-image/lora
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.editImage.lora({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.textToImage
POST https://fal.run/blackforestlabs/flux-3/klein/text-to-image
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.klein.textToImage.lora
POST https://fal.run/blackforestlabs/flux-3/klein/text-to-image/lora
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.klein.textToImage.lora({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.textToImage
POST https://fal.run/blackforestlabs/flux-3/text-to-image
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.textToVideo
POST https://fal.run/blackforestlabs/flux-3/text-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3.textToVideo.draft
POST https://fal.run/blackforestlabs/flux-3/text-to-video/draft
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3.textToVideo.draft({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3Max.imageToVideo
POST https://fal.run/blackforestlabs/flux-3-max/image-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3Max.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3Max.keyframesToVideo
POST https://fal.run/blackforestlabs/flux-3-max/keyframes-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3Max.keyframesToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.flux3Max.textToVideo
POST https://fal.run/blackforestlabs/flux-3-max/text-to-video
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.flux3Max.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.blackforestlabs.fluxVideoUpscale
POST https://fal.run/blackforestlabs/flux-video-upscale
Cost tier: prohibitive
const res = await fal.run.blackforestlabs.fluxVideoUpscale({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
bria
POST fal.bria.fibo2.edit
POST https://fal.run/bria/fibo-2/edit
Cost tier: prohibitive
const res = await fal.run.bria.fibo2.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fibo2.generate
POST https://fal.run/bria/fibo-2/generate
Cost tier: prohibitive
const res = await fal.run.bria.fibo2.generate({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fiboEdit1p5.edit
POST https://fal.run/bria/fibo-edit-1.5/edit
Cost tier: prohibitive
const res = await fal.run.bria.fiboEdit1p5.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fiboEdit1p5.expand
POST https://fal.run/bria/fibo-edit-1.5/expand
Cost tier: prohibitive
const res = await fal.run.bria.fiboEdit1p5.expand({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fiboEdit1p5.productHolding
POST https://fal.run/bria/fibo-edit-1.5/product-holding
Cost tier: prohibitive
const res = await fal.run.bria.fiboEdit1p5.productHolding({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fiboEdit1p5.virtualTryOn
POST https://fal.run/bria/fibo-edit-1.5/virtual-try-on
Cost tier: prohibitive
const res = await fal.run.bria.fiboEdit1p5.virtualTryOn({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.fiboGen1p5.textToImage
POST https://fal.run/bria/fibo-gen-1.5/text-to-image
Cost tier: prohibitive
const res = await fal.run.bria.fiboGen1p5.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bria.guidedRemoveBackground
POST https://fal.run/bria/guided-remove-background
Cost tier: prohibitive
const res = await fal.run.bria.guidedRemoveBackground({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
bytedance
POST fal.bytedance.seedSpeech.tts.v2
POST https://fal.run/fal-ai/bytedance/seed-speech/tts/v2
Cost tier: prohibitive
const res = await fal.run.bytedance.seedSpeech.tts.v2({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.fast.imageToVideo
POST https://fal.run/bytedance/seedance-2.0/fast/image-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.fast.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.fast.referenceToVideo
POST https://fal.run/bytedance/seedance-2.0/fast/reference-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.fast.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.fast.textToVideo
POST https://fal.run/bytedance/seedance-2.0/fast/text-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.fast.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.imageToVideo
POST https://fal.run/bytedance/seedance-2.0/image-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.referenceToVideo
POST https://fal.run/bytedance/seedance-2.0/reference-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.textToVideo
POST https://fal.run/bytedance/seedance-2.0/text-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.us.imageToVideo
POST https://fal.run/bytedance/seedance-2.0/us/image-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.us.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.us.referenceToVideo
POST https://fal.run/bytedance/seedance-2.0/us/reference-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.us.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p0.us.textToVideo
POST https://fal.run/bytedance/seedance-2.0/us/text-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p0.us.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.draft.complete
POST https://fal.run/bytedance/seedance-2.5/draft/complete
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.draft.complete({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.imageToVideo
POST https://fal.run/bytedance/seedance-2.5/image-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.referenceToVideo
POST https://fal.run/bytedance/seedance-2.5/reference-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.textToVideo
POST https://fal.run/bytedance/seedance-2.5/text-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.us.draft.complete
POST https://fal.run/bytedance/seedance-2.5/us/draft/complete
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.us.draft.complete({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.us.imageToVideo
POST https://fal.run/bytedance/seedance-2.5/us/image-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.us.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.us.referenceToVideo
POST https://fal.run/bytedance/seedance-2.5/us/reference-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.us.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedance2p5.us.textToVideo
POST https://fal.run/bytedance/seedance-2.5/us/text-to-video
Cost tier: prohibitive
const res = await fal.run.bytedance.seedance2p5.us.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.flash.edit
POST https://fal.run/bytedance/seedream/v5/flash/edit
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.flash.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.flash.layerize
POST https://fal.run/bytedance/seedream/v5/flash/layerize
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.flash.layerize({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.flash.textToImage
POST https://fal.run/bytedance/seedream/v5/flash/text-to-image
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.flash.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.lite.edit
POST https://fal.run/fal-ai/bytedance/seedream/v5/lite/edit
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.lite.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.lite.textToImage
POST https://fal.run/fal-ai/bytedance/seedream/v5/lite/text-to-image
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.lite.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.pro.edit
POST https://fal.run/bytedance/seedream/v5/pro/edit
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.pro.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.pro.layerize
POST https://fal.run/bytedance/seedream/v5/pro/layerize
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.pro.layerize({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.bytedance.seedream.v5.pro.textToImage
POST https://fal.run/bytedance/seedream/v5/pro/text-to-image
Cost tier: prohibitive
const res = await fal.run.bytedance.seedream.v5.pro.textToImage({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
creatify
POST fal.creatify.boreal
POST https://fal.run/creatify/boreal
Cost tier: prohibitive
const res = await fal.run.creatify.boreal({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
elevenlabs
POST fal.elevenlabs.music.v2p5
POST https://fal.run/elevenlabs/music/v2.5
Cost tier: prohibitive
const res = await fal.run.elevenlabs.music.v2p5({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.elevenlabs.tts.elevenV4
POST https://fal.run/elevenlabs/tts/eleven-v4
Cost tier: prohibitive
const res = await fal.run.elevenlabs.tts.elevenV4({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.elevenlabs.tts.elevenV4Turbo
POST https://fal.run/elevenlabs/tts/eleven-v4-turbo
Cost tier: prohibitive
const res = await fal.run.elevenlabs.tts.elevenV4Turbo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
falAi
POST fal.falAi.elevenlabs.speechToText.scribeV2
POST https://fal.run/fal-ai/elevenlabs/speech-to-text/scribe-v2
Cost tier: prohibitive
const res = await fal.run.falAi.elevenlabs.speechToText.scribeV2({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
flux2Flex
POST fal.flux2Flex
POST https://fal.run/fal-ai/flux-2-flex
Cost tier: prohibitive
const res = await fal.run.flux2Flex({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
flux3Action
POST fal.flux3Action.so101
POST https://fal.run/fal-ai/flux-3-action/so101
Cost tier: prohibitive
const res = await fal.run.flux3Action.so101({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
geminiOmniFlash
POST fal.geminiOmniFlash
POST https://fal.run/google/gemini-omni-flash
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.edit
POST https://fal.run/google/gemini-omni-flash/edit
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.imageToVideo
POST https://fal.run/google/gemini-omni-flash/image-to-video
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.referenceToVideo
POST https://fal.run/google/gemini-omni-flash/reference-to-video
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.v1p1.edit
POST https://fal.run/google/gemini-omni-flash/v1.1/edit
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.v1p1.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.v1p1.imageToVideo
POST https://fal.run/google/gemini-omni-flash/v1.1/image-to-video
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.v1p1.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.v1p1.referenceToVideo
POST https://fal.run/google/gemini-omni-flash/v1.1/reference-to-video
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.v1p1.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.geminiOmniFlash.v1p1.textToVideo
POST https://fal.run/google/gemini-omni-flash/v1.1/text-to-video
Cost tier: prohibitive
const res = await fal.run.geminiOmniFlash.v1p1.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.google.gemini3p8FlashLiteTts
POST https://fal.run/google/gemini-3.8-flash-lite-tts
Cost tier: prohibitive
const res = await fal.run.google.gemini3p8FlashLiteTts({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.google.gemini3p8FlashTts
POST https://fal.run/google/gemini-3.8-flash-tts
Cost tier: prohibitive
const res = await fal.run.google.gemini3p8FlashTts({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.google.lyria3p5
POST https://fal.run/google/lyria-3.5
Cost tier: prohibitive
const res = await fal.run.google.lyria3p5({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
gptImage1p5
POST fal.gptImage1p5
POST https://fal.run/fal-ai/gpt-image-1.5
Cost tier: prohibitive
const res = await fal.run.gptImage1p5({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.gptImage1p5.edit
POST https://fal.run/fal-ai/gpt-image-1.5/edit
Cost tier: prohibitive
const res = await fal.run.gptImage1p5.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
heygen
POST fal.heygen.avatar3.digitalTwin
POST https://fal.run/fal-ai/heygen/avatar3/digital-twin
Cost tier: prohibitive
const res = await fal.run.heygen.avatar3.digitalTwin({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.avatar4.digitalTwin
POST https://fal.run/fal-ai/heygen/avatar4/digital-twin
Cost tier: prohibitive
const res = await fal.run.heygen.avatar4.digitalTwin({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.avatar4.imageToVideo
POST https://fal.run/fal-ai/heygen/avatar4/image-to-video
Cost tier: prohibitive
const res = await fal.run.heygen.avatar4.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.avatar5.digitalTwin
POST https://fal.run/fal-ai/heygen/avatar5/digital-twin
Cost tier: prohibitive
const res = await fal.run.heygen.avatar5.digitalTwin({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.heygenVideo.imageToVideo
POST https://fal.run/heygen/heygen-video/image-to-video
Cost tier: prohibitive
const res = await fal.run.heygen.heygenVideo.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.heygenVideo.referenceToVideo
POST https://fal.run/heygen/heygen-video/reference-to-video
Cost tier: prohibitive
const res = await fal.run.heygen.heygenVideo.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.heygenVideo.textToVideo
POST https://fal.run/heygen/heygen-video/text-to-video
Cost tier: prohibitive
const res = await fal.run.heygen.heygenVideo.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.heygenVoice
POST https://fal.run/heygen/heygen-voice
Cost tier: prohibitive
const res = await fal.run.heygen.heygenVoice({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.heygenVoice.turbo
POST https://fal.run/heygen/heygen-voice/turbo
Cost tier: prohibitive
const res = await fal.run.heygen.heygenVoice.turbo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v2.translate.precision
POST https://fal.run/fal-ai/heygen/v2/translate/precision
Cost tier: prohibitive
const res = await fal.run.heygen.v2.translate.precision({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v2.translate.speed
POST https://fal.run/fal-ai/heygen/v2/translate/speed
Cost tier: prohibitive
const res = await fal.run.heygen.v2.translate.speed({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v2.videoAgent
POST https://fal.run/fal-ai/heygen/v2/video-agent
Cost tier: prohibitive
const res = await fal.run.heygen.v2.videoAgent({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v3.fillerWordRemoval
POST https://fal.run/fal-ai/heygen/v3/filler-word-removal
Cost tier: prohibitive
const res = await fal.run.heygen.v3.fillerWordRemoval({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v3.lipsync.precision
POST https://fal.run/fal-ai/heygen/v3/lipsync/precision
Cost tier: prohibitive
const res = await fal.run.heygen.v3.lipsync.precision({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v3.lipsync.speed
POST https://fal.run/fal-ai/heygen/v3/lipsync/speed
Cost tier: prohibitive
const res = await fal.run.heygen.v3.lipsync.speed({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.heygen.v3.videoAgent
POST https://fal.run/fal-ai/heygen/v3/video-agent
Cost tier: prohibitive
const res = await fal.run.heygen.v3.videoAgent({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
hunyuan
POST fal.hunyuan.v3.instructEdit
POST https://fal.run/fal-ai/hunyuan-image/v3/instruct/edit
Cost tier: prohibitive
const res = await fal.run.hunyuan.v3.instructEdit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
ideogram
POST fal.ideogram.v4p5
POST https://fal.run/ideogram/v4.5
Cost tier: prohibitive
const res = await fal.run.ideogram.v4p5({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.ideogram.v4p5.edit
POST https://fal.run/ideogram/v4.5/edit
Cost tier: prohibitive
const res = await fal.run.ideogram.v4p5.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.ideogram.vector.imageToVector
POST https://fal.run/ideogram/vector/image-to-vector
Cost tier: prohibitive
const res = await fal.run.ideogram.vector.imageToVector({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.ideogram.vector.textToVector
POST https://fal.run/ideogram/vector/text-to-vector
Cost tier: prohibitive
const res = await fal.run.ideogram.vector.textToVector({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
kandinsky6Lite
POST fal.kandinsky6Lite.imageToVideo
POST https://fal.run/fal-ai/kandinsky6-lite/image-to-video
Cost tier: prohibitive
const res = await fal.run.kandinsky6Lite.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kandinsky6Lite.textToVideo
POST https://fal.run/fal-ai/kandinsky6-lite/text-to-video
Cost tier: prohibitive
const res = await fal.run.kandinsky6Lite.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
kandinsky6Pro
POST fal.kandinsky6Pro.imageToVideo
POST https://fal.run/fal-ai/kandinsky6-pro/image-to-video
Cost tier: prohibitive
const res = await fal.run.kandinsky6Pro.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kandinsky6Pro.textToVideo
POST https://fal.run/fal-ai/kandinsky6-pro/text-to-video
Cost tier: prohibitive
const res = await fal.run.kandinsky6Pro.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
kandinsky6Vsr
POST fal.kandinsky6Vsr
POST https://fal.run/fal-ai/kandinsky6-vsr
Cost tier: prohibitive
const res = await fal.run.kandinsky6Vsr({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kandinsky6Vsr.lite
POST https://fal.run/fal-ai/kandinsky6-vsr/lite
Cost tier: prohibitive
const res = await fal.run.kandinsky6Vsr.lite({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
kling
POST fal.kling.v4.imageToVideo
POST https://fal.run/kling/v4/image-to-video
Cost tier: prohibitive
const res = await fal.run.kling.v4.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kling.v4.referenceToVideo
POST https://fal.run/kling/v4/reference-to-video
Cost tier: prohibitive
const res = await fal.run.kling.v4.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kling.v4.textToVideo
POST https://fal.run/kling/v4/text-to-video
Cost tier: prohibitive
const res = await fal.run.kling.v4.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.kling.v4.videoToVideo.edit
POST https://fal.run/kling/v4/video-to-video/edit
Cost tier: prohibitive
const res = await fal.run.kling.v4.videoToVideo.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
klingVideo
POST fal.klingVideo.o3.pro.imageToVideo
POST https://fal.run/fal-ai/kling-video/o3/pro/image-to-video
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.pro.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3.pro.referenceToVideo
POST https://fal.run/fal-ai/kling-video/o3/pro/reference-to-video
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.pro.referenceToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3.pro.textToVideo
POST https://fal.run/fal-ai/kling-video/o3/pro/text-to-video
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.pro.textToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3.pro.videoToVideo.edit
POST https://fal.run/fal-ai/kling-video/o3/pro/video-to-video/edit
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.pro.videoToVideo.edit({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3.pro.videoToVideo.reference
POST https://fal.run/fal-ai/kling-video/o3/pro/video-to-video/reference
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.pro.videoToVideo.reference({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3.standard.imageToVideo
POST https://fal.run/fal-ai/kling-video/o3/standard/image-to-video
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3.standard.imageToVideo({ /* ... */ });
Source: packages/provider/fal/src/fal.ts
POST fal.klingVideo.o3p4k.imageToVideo
POST https://fal.run/fal-ai/kling-video/o3/4k/image-to-video
Cost tier: prohibitive
const res = await fal.run.klingVideo.o3p4k.imageToVideo({ /* ... */ });
Sou