BFL released FLUX 3 Image Klein (POST /v1/flux-3-image-klein) on
2026-10-15. It takes the same prompt, references, resolution and
aspect ratio as Flux 3 Image, so the node subclasses Flux3Image and
adds what Klein accepts on top: seed, steps, output_format, exact
width x height and a 0-7 safety_tolerance, without grounding.
The Flux 3 Image example workflow gets two bypassed Klein groups
(text to image, edit by URL); existing groups are untouched.
FLUX 3 Image (flux-3-image) generates and edits from one prompt, with
up to ten references and bounding boxes. The endpoint rejects seed,
output_format and webhooks, and 4k renders can take minutes, so the
node polls up to 120 attempts and keeps the result lossless.
BFL requires polling the polling_url returned at submit: it points at
the region holding the task, and FLUX 3 Image returns a regional one.
post_request now returns a TaskId carrying it and get_result polls it
for every node, falling back to get_result?id= only when it is absent.
A failed task reported as HTTP 503 with a terminal status now stops at
once instead of polling until the timeout.
Adds an example workflow and documents the polling behavior.
The registry's Updates section was empty for every version because the
publish workflow never passed a changelog. comfy-cli reads
COMFY_NODE_CHANGELOG, so the workflow now builds it from the version's
CHANGELOG.md section. The registry shows it as one plain paragraph (no
Markdown), so the script keeps the first column of each table row.
Releases also date that CHANGELOG section and get an annotated vX.Y.Z
tag; CLAUDE.md and /version-bump describe the steps.
Bring the package in line with the current BFL API reference:
flux-tools/deblur-v1, video-edit-v1 and video-upscale-v1 had no
node. The video nodes reuse BaseFlux3Video via a URL_PATH attribute.
Existing nodes gain API fields: qhd/uhd on Flux 3 Video,
disable_pup on Flux 2 Max/Pro/Pro Preview, safety_tolerance and
disable_pup on Outpaint. New widgets are appended so saved
workflows keep their values.
Fixes found while testing on ComfyUI 0.37.0:
- V2V offered 16-20 s; BFL caps continuation at 15 s
- draft with a non-hd resolution was rejected; send hd
- Flux 2 width/height defaulted to 0 below min 64, so every
fresh Flux 2 node failed validation
- the finetune example needed ShowText|pysssss; use core
Preview as Text and drop the unused group-node template
Terminal polling statuses now log BFL's details (Moderation
Reasons). Example workflows gain Deblur, Video Edit and Video
Upscale groups.
pre-commit only sees the commit being made, so a key committed with
--no-verify or from a clone without the hooks still reached the
remote. pre-push applies the same rules to every commit being
pushed, not just the tip: a key removed in a later commit still
lands in the remote history.
pre-commit: `grep -q` exited early and, under pipefail, turned a
match into a pass when a long diff followed the key; a config.ini
without an X_KEY line made the hook fail silently.
Block commits whose staged content would leak a BFL API key:
config.ini must keep the your-key placeholder, FluxConfig_BFL nodes in
workflows/*.json must have an empty or bfl_xxx x_key widget, and no
staged addition may match bfl_<16+ chars> key material. Installed via
git config core.hooksPath .githooks (run once per clone).
The FluxConfig_BFL node in the example workflow was saved with a real
x_key widget value and pushed in 7bbc4cc. The key must be treated as
compromised and rotated in the BFL dashboard; this commit clears the
widget so the tracked example matches the other workflows.
New BFL-API-flux-3-video.json covers all three modes: t2v straight to
SaveVideo, i2v fed by Flux3Keyframes, and v2v fed by LoadVideo through
VideoToBase64. The tools workflow gains a Flux Virtual Try-On v2 group
mirroring the v1 setup; remaining churn in that file is ComfyUI
frontend metadata (aux_id -> cnr_id, node order/positions) and the
outpaint mode widget value written by the current node schema.
README gains the three Flux 3 Video rows at the top of the generation
table plus the Flux 3 Keyframes, Video to Base64 and VTO v2 entries.
CHANGELOG gets an Unreleased section covering the new nodes and the
Reasoning/Generating polling fix.
Wrap the new flux-3-video endpoint (t2v, i2v, v2v modes) in three
generation nodes plus two workflow utilities:
- BaseFlux3Video reuses BaseFlux post/poll, overrides process_result to
download the signed MP4 and return ComfyUI's native VIDEO type, and
returns a 1-frame black video on every failure path. Polling ceiling
is 240 attempts (~20 min): a real v2v+fhd task was still generating
at 11 minutes.
- Flux3Keyframes combines up to 10 image sockets into the keyframes
string; timing 'even' sends a plain list, 'custom' sends
[seconds, image] pairs (start pinned at 0, end_time = clip length).
- VideoToBase64 converts a ComfyUI VIDEO to a base64 MP4 string for
v2v's start_video.
Nodes register only when comfy_api is importable so the package keeps
loading on older ComfyUI versions.
BFL's get_result reference documents two intermediate statuses the
Status enum was missing: Reasoning and Generating (returned by FLUX 3
tasks). Status(status) raised ValueError on them, which landed in the
JSON-parsing error handler with a misleading log line. Both now retry
like Pending, and the retry log prints the actual status.
BFL released flux-tools/vto-v2 on 2026-07-17 with sharper face
preservation and inputs up to 4 MP. The request/response format is
identical to v1, so the node subclasses FluxVirtualTryOn and overrides
only the endpoint path via a new URL_PATH class attribute.
BFL added a `mode` parameter to flux-tools/outpainting-v1 (2026-06-09)
selecting the quality/speed tradeoff. Expose it as a combo defaulting
to "high" (the API default) and only send it when set to "fast", so
the default request body stays unchanged.
Wrap the new BFL flux-tools/vto-v1 endpoint as FluxVirtualTryOn,
following the erase/outpaint tool-node pattern: base64 string
person/garment inputs, a required prompt, and optional
seed/webhook/config over the shared BaseFlux post -> poll path. Update
the README node table and add two virtual try-on groups to the tools
example workflow.
adds FluxErase (POST flux-tools/erase-v1) and FluxOutpaint
(POST flux-tools/outpainting-v1) in a new nodes/flux_tools.py
module. these wrap the two new BFL tool endpoints from May 2026.
also:
- ImageToBase64_BFL gains an image_format dropdown (jpeg / png) so
masks can be encoded losslessly
- BaseFlux.generate_image moves check_multiple_of_32 inside the
try/except so non-multiple-of-32 dims return a blank image
instead of crashing the workflow
- bump version to 1.1.0; start CHANGELOG.md fresh at 1.1.0
introduces project-level claude code tooling — CLAUDE.md behavioral
rules and BFL conventions, agents/commands/skills under .claude/, and
hooks that block accidental config.ini API-key commits and run ruff
after edits. wires ruff into pyproject.toml as a dev extra with the
project's lint/format config, and ignores claude runtime artifacts.
- Added permissions for issue writing in the workflow.
- Modified condition to check repository owner instead of fork status.
- Updated action version from `main` to `v1` for stability.