Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 3 Keyframes to Video Draft · $0.06/s
ComfyUI Node

arkennemasis fal · Flux 3 Keyframes to Video Draft · $0.06/s

Fix the pacing at 6 cents a second, then render it properly

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 3 Keyframes to Video Draft · $0.06/s
    • video
    • video_path
    • draft_cache_path
    • info
    ◄prompt►
    ◄aspect_ratioauto►
    ◄duration5►
    ◄generate_audiotrue►
    ◄safety_tolerance2►
    ◄keyframes[{"frame_index": 0, "image_url": "https://storage.googleapis.com/falserverless/example_inputs/veo31-flf2v-input-1.jpeg"}, {"frame_index": 120, "image_url": "https://storage.googleapis.com/falserverless/example_inputs/veo31-flf2v-input-2.jpeg"}]►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Keyframe shots fail in a specific, boring way: the anchors are fine, the pacing isn't. You put the turn at frame 40 and it should have been frame 60, so the model rushes it and you get a smear. That's a timing problem, and timing is the one thing you can absolutely judge from a low-quality preview - which makes drafting not just cheaper but genuinely more useful here than for a simple text-to-video shot.

    ArkFal_blackforestlabs_flux_3_keyframes_to_video_draft renders the same keyframe shot at $0.06 per second and returns a reusable draft cache for draft_enhance to finish at full quality.

    What you set

    • keyframes - required, a JSON list of {image_url, frame_index} objects, up to 10, with unique frame indices. Pre-filled with fal's own example so you can see the shape. You paste image URLs here; these are not IMAGE sockets.
    • duration - whole seconds, 5 through 20, default 5. An explicit duration is required: the model has to validate where each keyframe lands against the length of the clip.
    • prompt - what happens between the anchors.
    • generate_audio - on by default. Draft audio is included at no extra cost.
    • aspect_ratio - auto by default.
    • safety_tolerance - 0 strictest, 4 most permissive, default 2.

    No resolution. Drafts are 720p-class; that's the price you're paying less for.

    Optional shared controls: max_cost_usd (default $20 cap, checked before upload - nothing gets sent if the estimate is higher), reuse_identical_run (on by default), extra_json, max_concurrent.

    Outputs: video, video_path, draft_cache_path, info.

    Moving the cache to the finisher

    Here's the thing that catches literally everyone on their first try: the draft saves the encrypted bundle locally as draft_cache_path, and the enhance node wants draft_cache_url - a URL or data URI - which it hands to fal untouched. Local paths don't travel. The bundle's fal URL is in the draft's info output (fal's full answer, including the draft_cache file object) and it's also written to output/fal/_requests.jsonl. Paste it from there.

    Keep it. A draft cache is the difference between paying for a preview and paying for a preview plus a render.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/Hishamahmer/comfyui-arkennemasis
    

    Restart ComfyUI (or install via Manager - search arkennemasis), then put the key in the .env:

    FAL_KEY=your-key-from-fal.ai/dashboard/keys
    

    The file goes next to run_nvidia_gpu.bat on a portable install, or in the ComfyUI folder otherwise. There's no key input on the node on purpose, so no workflow file can leak one. Nothing to download, either - FLUX 3 is API-only access, which is exactly why this pack wraps it rather than shipping weights.

    Worth knowing

    Budget your keyframes as a sequence, not individually. Placing an anchor at index 0, one at 60 and one at 140 in a 6-second clip is asking the model to interpolate two moves in a hurry; the draft is how you find that out for $0.36 instead of $1.74.

    Results land in output/fal/blackforestlabs_flux-3_keyframes-to-video_draft/ and the node previews the clip on itself. Rate limits and dropped connections are retried with backoff automatically, Cancel cancels the render on fal's side, and a run interrupted by a restart is recoverable for free by request id.

    Categoryarkennemasis/fal/Video/Flux

    Inputs (10)

    NameTypeDefaultDescription
    promptSTRINGThe text prompt describing the draft video.
    aspect_ratioCOMBOautoAspect ratio of the generated draft. `auto` lets the model choose.
    durationCOMBO5Draft duration in whole seconds from 5 through 20. An explicit duration is required to validate keyframe positions.
    generate_audioBOOLEANtrueWhether to generate audio for the draft video.
    safety_toleranceINT20–4The safety tolerance level for the generated video. 0 is the strictest and 4 is the most permissive.
    keyframesSTRING[{"frame_index": 0, "image_url": "https://storage.googleapis.com/falserverless/example_inputs/veo31-flf2v-input-1.jpeg"}, {"frame_index": 120, "image_url": "https://storage.googleapis.com/falserverless/example_inputs/veo31-flf2v-input-2.jpeg"}]Keyframe images pinned to frame positions in the generated draft. Up to 10 keyframes with unique `frame_index` values. JSON. Required.
    max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
    reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
    extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
    max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

    Outputs (4)

    NameTypeDescription
    videoVIDEO—
    video_pathSTRING—
    draft_cache_pathSTRING—
    infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.