Flux 3 Video (API)
Flux 3 video in your graph — no GPU, no weights, just a key
- images
- end_image
- video
- video
- metadata
FLUX 3 is Black Forest Labs' big multimodal bet - one model that does image, video, audio and robot action - and right now it ships as gated early access, so there are no weights to download. That's exactly the hole this node fills. Flux3Video is a thin, honest wrapper around the official BFL API: you type a prompt (or hand it an image, or a clip to continue), it phones home to api.bfl.ai, polls until the job is done, and drops a finished mp4 back onto your canvas. No 48GB card, no VRAM juggling, no model files to babysit. If you're running FLUX 3 video at all today, this is basically how - the API version is the only door that's actually open.
Before you get excited: this is the same trade the whole API-node category carries. Your prompt and reference frames leave your machine, BFL's content filter is not something you can patch around, and every render costs credits. For a closed model you genuinely can't run locally, that's a fair price. Just don't mistake it for the local FLUX 3 Dev backbone BFL keeps promising - that's a different conversation.
How it works
One endpoint (POST /v1/flux-3-video), four modes, and the node reshapes itself to whichever you pick. t2v is text-to-video. i2v turns your images into keyframes - one image is the opening frame, two are start+end, 3–10 are spread evenly across the clip (you have to set a fixed duration for that), and if you want a real storyboard you add keyframe_times as comma-separated seconds like 0, 4.5, 10 and each image becomes a frame at that moment. v2v takes a video input and continues it via start_video. The smart one is draft_enhance: run a fast, cheap draft first, then feed the draft_cache string from that run back in and get the full-quality render. Everything else in draft_enhance mode is ignored - the cache pins the prompt, seed and conditioning - which the node warns you about in the console if you leave stuff set.
Under the hood it's the usual submit → poll → download dance, done properly. Jobs routinely sit in BFL's queue for 20+ minutes; the node logs status every minute so it doesn't look hung, backs off its polling to keep the request count down, retries dropped connections (only GETs, so it can't double-submit and double-charge you), and the finished-asset download is retried too because the signed URL expires. The whole thing is async, so two Flux nodes in one graph render simultaneously - you wait for the slowest clip, not the sum.
The inputs that matter
You mostly live in three of them: mode, prompt, and duration (auto or 5–20 whole seconds). Set aspect_ratio (auto usually makes the right call), and think about generate_audio - it's on by default and worth keeping on, since FLUX 3 video ships a real audio track. safety_tolerance is 0 (strictest) to 4 with a default of 2, and it's capped at 2 whenever you're sending conditioning media. resolution gives you hd or fhd. The api_key field is optional - empty means it reads from .env.
Outputs
video is a native ComfyUI VIDEO type, so it feeds straight into a Save Video node. The second output, metadata, is a STRING meant for a Show Any node: it logs the endpoint, task ID, polling URL, the exact request you sent and the response, with base64 blobs summarized as sizes instead of megabytes of text. When something goes weird, that's your forensic record.
Install and keys
ComfyUI Manager → search "Flux 3 API" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/DenRakEiw/flux_3_api
then restart ComfyUI. The dependency list is tiny - just requests - so there's no torch-version grief. You need a BFL API key in the pack's .env file:
BFL_API_KEY=bfl_...
Keys are read node field → .env → environment variable.
Where people get burned
The most common failure is money-related: if timeout_minutes runs out (default 45, up to 240), only the node aborts - the job keeps running at BFL and still costs credits. The error message includes the polling URL so you can grab the result afterward, but set the timeout with that in mind. And don't expect miracle consistency: early testers note FLUX 3 video holds single-shot clips together well but can drift across multiple shots and complex actions. For one strong continuous shot it's great; for a multi-segment storyboard, budget for retries.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | t2v | t2v: text to video. i2v: image(s) to video (keyframes). v2v: continue a clip (start_video). draft_enhance: render an earlier draft at full quality. |
| prompt | STRING | Required for t2v/i2v/v2v. Not allowed with draft_enhance, where the draft_cache pins everything. | |
| aspect_ratio | COMBO | auto | 'auto' lets the API choose based on the prompt and the references. |
| duration | COMBO | auto | Whole seconds 5-20, or 'auto'. 3+ keyframes without keyframe_times need a fixed length. |
| resolution | COMBO | hd | hd = default. fhd = higher resolution, via the video upscaler. |
| generate_audio | BOOLEAN | true | On by default. Off gives a silent clip. |
| safety_tolerance | INT | 20–4 | 0 (strictest) to 4. Default 2. With conditioning media the maximum is 2. |
| draft | BOOLEAN | false | Fast hd preview. The result carries a draft_cache that you can render at full quality with mode=draft_enhance. |
| version | STRING | latest | Only 'latest' is available at the moment. |
| imagesopt | IMAGE | i2v only. 1 image is the start frame, 2 images are start and end, 3-10 images are spaced evenly and need duration. Or combine with keyframe_times for a storyboard. | |
| end_imageopt | IMAGE | i2v only: when set, images is the start and end_image the end, giving exactly 2 keyframes. | |
| keyframe_timesopt | STRING | i2v only: seconds per image, comma separated (e.g. '0, 4.5, 10'). The count must match images and the values must ascend. Each image becomes a frame at that second. | |
| videoopt | VIDEO | v2v only: the clip to continue (mp4). | |
| draft_cacheopt | STRING | draft_enhance only: the base64 bundle or URL from the draft output of an earlier run. Required in this mode. | |
| timeout_minutesopt | INT | 451–240 | How long the node waits for the result. With a busy BFL queue a job easily takes 20+ minutes. When the time runs out only the node stops; the job keeps running server-side and still costs credits. |
| api_keyopt | STRING | Leave empty to read it from .env |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| metadata | STRING | — |