@apicity/fal

中文文档
0.27.0发布于 2026/11/06MITTypeScriptES Module近 30 天下载 3928

Fal Platform API provider for model management, pricing, usage, and analytics.

原始使用文档
文档目录24 节
  1. Installation
  2. Quick Start
  3. Real-world example: upload a portrait, render a Grok Imagin…
  4. API Reference
  5. alibaba
  6. blackforestlabs
  7. bria
  8. bytedance
  9. creatify
  10. elevenlabs
  11. falAi
  12. flux2Flex
  13. flux3Action
  14. geminiOmniFlash
  15. google
  16. gptImage1p5
  17. heygen
  18. hunyuan
  19. ideogram
  20. kandinsky6Lite
  21. kandinsky6Pro
  22. kandinsky6Vsr
  23. kling
  24. klingVideo

@apicity/fal

npm dependencies TypeScript

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 any https:// 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 the file_url directly — 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: 0 remains limited to source-clip edit-video flows where it means keeping the original clip length.
  • Long-running calls accept an AbortSignal second argument and compose with the package's middleware, e.g. withRetry(fal.run.xai.grokImagineVideo.imageToVideo, { retries: 3 }) from @apicity/fal to ride out transient queue / 429s.
  • Errors throw FalError with status, type, request_id, and the parsed body attached: 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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

const res = await fal.run.geminiOmniFlash.v1p1.textToVideo({ /* ... */ });

Source: packages/provider/fal/src/fal.ts

google

POST fal.google.gemini3p8FlashLiteTts

POST https://fal.run/google/gemini-3.8-flash-lite-tts

Cost tier: prohibitive

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

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

Upstream docs ↗

const res = await fal.run.klingVideo.o3p4k.imageToVideo({ /* ... */ });

Sou

版本与发布记录

@apicity/fal 共发布 90 个版本,首次发布于 2026/05/10;过去 12 个月发布了 90 个版本。

版本发布日期距今
0.27.0latest2026/11/06今天
0.26.02026/11/051 天前
0.25.02026/11/033 天前
0.24.12026/11/024 天前
0.24.02026/11/014 天前
0.23.12026/11/015 天前

关于 @apicity/fal 的常见问题

@apicity/fal 是什么?

Fal Platform API provider for model management, pricing, usage, and analytics.

如何安装 @apicity/fal?

在项目目录运行 npm install @apicity/fal,或使用 pnpm add / yarn add / bun add。

@apicity/fal 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apicity/fal 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@apicity/fal 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@apicity/fal 可以商用吗?

@apicity/fal 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apicity/fal 的下载量有多少?

根据 npm 官方下载统计,@apicity/fal 在 2026/10/06 – 2026/11/04 这 30 天内被下载 3,928 次,日均约 131 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apicity/fal 还在维护吗?

最新版本 0.27.0 发布于 2026/11/06(今天);至今共发布 90 个版本,其中过去 12 个月发布了 90 个;首次发布于 2026/05/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。