Flux 3 Video I2V (BFL)
FLUX 3 image-to-video from a keyframes string
- config
- video
Image-to-video is where FLUX 3 actually gets interesting. Text-to-video you can get anywhere; but feed this node a frame - or a whole sequence of frames - and Black Forest Labs will animate it with the same early-access FLUX 3 Video engine, native audio included. It's the second node in the video trio from gelasdev's ComfyUI-FLUX-BFL-API, and it exists because BFL's API insists on taking your reference images as a JSON keyframes string. This node is the comfortable front door to that format.
Like the rest of the pack, it's a cloud call, not local inference. Your images go up to api.bfl.ai, the video gets rendered on BFL's hardware, and you pay per request. The upside: FLUX 3-class video without a local model's VRAM appetite. The downside: you're at the mercy of an early-access API, so expect occasional waits and a moderation layer you can't turn off.
How it works
Under the hood it's the same POST-then-poll dance as T2V. The node sends {"mode": "i2v", "keyframes": ...} to /v1/flux-3-video, polls every five seconds (up to ~20 minutes of patience), then downloads the finished MP4 and returns it as ComfyUI's native VIDEO type. The interesting part is what you feed into keyframes, which is surprisingly flexible:
- The output of a Flux 3 Keyframes (BFL) node - the intended path for multi-frame work.
- A single base64 image or image URL, pasted straight in - a one-frame starting point.
- A JSON array of images, or of
[seconds, image]pairs like[[0, "..."], [4.5, "..."]]- up to ten frames - if you want to hand-craft the timing.
Inputs worth knowing
prompt- what happens in the clip. If you're animating a still, describe the motion and scene changes; FLUX 3's language handling does most of the work.keyframes- covered above. The tooltip in the node spells out every accepted format, so you can't really go wrong.resolution(hd/fhd),duration(autoor 5–20s),aspect_ratio(fromautoand 21:9 down to 9:16) - the shared video knobs.generate_audio(on by default),safety_tolerance(0–4, default 2),draft(fast preview mode).config(optional) - per-node key/base URL/region override.
Output is video (VIDEO) → wire it into the built-in Save Video / preview nodes.
Installing and the gotchas
Install once for the whole pack: ComfyUI Manager → search "ComfyUI-FLUX-BFL-API", or:
cd ComfyUI/custom_nodes
git clone https://github.com/gelasdev/ComfyUI-FLUX-BFL-API.git
cd ComfyUI-FLUX-BFL-API
pip install -r requirements.txt
Just torch in the deps; you already have everything else. You need ComfyUI ≥ 0.3.30 or the node won't even register, and you need a BFL API key (config.ini, or a Flux Config node - config.ini gets wiped on updates, so the node route is sturdier).
The trap that gets most people: if you send three or more plain keyframe images while duration is auto, BFL rejects the request - the API requires an explicit duration for multi-frame keyframes. The node prints a warning when it spots that combination, so watch the console. And as with T2V, a black output usually means the job died server-side (moderation, error, or timeout), not that you mis-wired anything.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| keyframes | STRING | Connect a Flux 3 Keyframes node, or paste a single image URL/base64, or a JSON array of images or [seconds, image] pairs (up to 10): [[0, "..."], [4.5, "..."]] | |
| resolution | COMBO | hd | 2 options: hd, fhd |
| duration | COMBO | auto | 17 options: auto, 5, 6, 7, 8, 9, +11 |
| aspect_ratio | COMBO | auto | 8 options: auto, 21:9, 2:1, 16:9, 4:3, 1:1, +2 |
| generate_audio | BOOLEAN | true | — |
| safety_tolerance | INT | 20–4 | — |
| draft | BOOLEAN | false | — |
| configopt | BFL_CONFIG | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |