Flux Deblur (BFL)
One image in, one sharp image out, no GPU and no prompt
- config
- IMAGE
The name is a lie in the usual way for this pack: nothing here runs on your machine. Flux Deblur (BFL) takes a soft or out-of-focus still, hands it to Black Forest Labs' hosted flux-tools/deblur-v1 endpoint over HTTPS, waits, and drops the sharpened version back into your graph as a normal IMAGE. No checkpoint, no VRAM, no 6GB floor to plan around. Every Queue press is a metered call against a BFL API key, and that's the entire trade.
Why you'd reach for it
Deblur sits on the awkward rung of the upscaling ladder: not "more pixels" (interpolation - free, and it cannot hallucinate), not "more detail on an already-good source". It's the case where the source is soft. Locally, that means downscaling to roughly 0.35 MP and re-running it through SeedVR2 so it has a sharper relative base - a fiddle that wants GPU headroom - or NVIDIA's RTX deblur nodes, which want an RTX card. This node is the answer when the picture matters, your machine lacks the horsepower, and one call beats building a pipeline.
How it works
You send the image as base64 or a URL. The server re-renders a sharper version of the same scene and returns a link to the result, which the node downloads, converts into a tensor, and outputs. That's the whole trick - and its limit. There is no prompt and no mask here: no text lever to say "the face is the part that matters". BFL's own framing is "sharpen a blurry image while preserving the scene", and that's about as much control as you get. Hold onto the general rule for generative restoration: it rewrites identity to some degree by design, so put the result next to the original before you ship a face.
The inputs that matter
Three, really.
image- aSTRING, not anIMAGE. Base64 or an image URL, max 4 MP. Wire Load Image → Image to Base64 (BFL) → Flux Deblur; that converter ships in the same pack. Dragging anIMAGEwire straight into it is the standard beginner move and it won't connect.safety_tolerance- 0 to 5, default 2. Moderation runs on the input and the output, 0 being strictest.output_format-png(default) orjpeg. Leave it on png; the node decodes the result anyway, and it costs you nothing here.
The optionals: seed (default -1, random - set one if you want the same result twice, because this is generative), webhook_url / webhook_secret (the node polls for the result itself, so ignore these), and config, which takes a BFL_CONFIG from the pack's Flux Config (BFL) node.
Output: a single IMAGE. Preview it, save it, or feed it onward - but note there's no scale control, it restores in place, so upscale separately if you need more pixels.
Installing it
Easiest route is ComfyUI Manager: search ComfyUI-FLUX-BFL-API, install, restart. Manual is the usual dance:
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
The requirements file is one line, torch, which you already have - no weights, no wheels, no compile step. All the work happens on someone else's server.
What you do have to do is hand it a key. Grab one at api.bfl.ai, then edit config.ini in the pack folder:
[API]
X_KEY = YOUR_API_KEY
BASE_URL = https://api.bfl.ai/v1/
Or skip the file and connect a Flux Config (BFL) node with your key in it - that overrides per node. Worth doing: users have reported config.ini getting blown away on pack updates, and the config node exists partly because of that complaint.
Where people get burned
A black square instead of a result. Every failure path in this pack returns a blank 512×512 image instead of raising: bad key, network error, moderated task, exhausted polling. So when you get a black frame, don't go hunting for a bug in your graph - read the console. The node prints the task status, and prints BFL's moderation reasons when that's the cause.
Your key ends up in the console. The pack logs each request as a copy-pasteable curl, headers included. Great for debugging, awkward when you paste your log into a public thread.
The 4 MP ceiling, and a ~3-minute patience budget. The image path polls 40 times at 5-second intervals. Deblur is usually quick, but a busy BFL queue exhausts that window and hands you the black square.
Should you use it?
If you already run SeedVR2 locally, that's free and it's the community default for restoration work - use it. This node is the shortcut for when you'd rather spend credits than GPU time: one input, one image out, nothing to download. Same pack, same install, same key as the rest of the BFL API nodes.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | STRING | Blurry input image (base64-encoded string or image URL). Max 4 MP. | |
| safety_tolerance | INT | 20–5 | Tolerance level for input and output moderation. Between 0 and 5, 0 being most strict, 5 being least strict. |
| output_format | COMBO | png | png (default) or jpeg. |
| seedopt | INT | -1 | Optional seed for reproducibility. -1 = random. |
| webhook_urlopt | STRING | URL to receive webhook notifications. | |
| webhook_secretopt | STRING | Optional secret for webhook signature verification. | |
| configopt | BFL_CONFIG | Optional Flux Config (BFL) override for x-key, base URL, and region. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |