FLUX.1 Dev LoRA · Image Editing
The revival act, with a mask that actually works
- image_url
- mask_url
- loras
- images
- task id
FLUX.1 [dev] is a 2024 model that spent 2026 losing jobs to four different successors - Z-Image for photorealism, Qwen-Image for busy scenes, Klein and Qwen-Image-Edit for editing. What it still has is the LoRA ecosystem, thousands of community adaptations trained against its 12B architecture, plus one thing most hosted editors don't offer: a mask input. This node runs Dev as an image editing endpoint with up to three LoRA files and an optional black-and-white mask, $0.018 an image.
The two genuinely useful powers
Masked editing. mask_url takes a mask the same size as your source: white areas are redrawn, black areas are kept pixel-for-pixel. That's a real inpainting control, and it's the difference between "restyle the whole photo and hope the face survives" and "change the jacket, leave the face alone". Hosted editors usually give you a prompt and take the whole image; this one doesn't.
Your LoRAs on Dev. Dev has the mature LoRA library, and its documented niche is precisely the kind of LoRA people actually train: a single-subject LoRA on a scrappy dataset. Dev tolerates a dirty dataset where a base model would fight you, and collapses past about three subjects - a good thing to know before blaming the endpoint.
Both of those come with a caveat worth saying out loud: FLUX.1 [dev] weights are non-commercial, and its T5 text encoder carries the censorship quirks that were the meme of its launch year. If you're planning commercial work or fighting refusals all day, Z-Image and Chroma-style options are the better roads.
The inputs
- prompt - describe the whole image you want back. With a mask, describe what belongs in the white area.
- image_url - the source; the result keeps its shape.
- strength - 0 to 1, default 0.8. How far it's allowed to travel from the source. With a mask, lower usually looks better.
- guidance_scale - 0 to 20, default 3.5. That's the classic Flux Dev value; if you've tuned Flux locally, this will feel like home.
- steps - 1 to 50, default 28. Fewer steps return faster and a little softer - which is a fair description of the whole tradeoff.
- output_format - jpeg (default), png or webp.
- seed.
- Optional mask_url - black and white, matched to the source size.
- Optional loras - a
SPICY_LORASsocket fed by a SpicyAPI LoRA node: a direct.safetensorslink and a strength, chainable, three maximum. The link has to open without a login.
Outputs: images (IMAGE) and task id (STRING, the SpicyAPI task id for support).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Manager → search SpicyAPI. Restart, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys, and restart once more so the node list comes from your account. SPICY_API_KEY on servers. No model files, no pip dependencies - the pack's list is empty; Python 3.10+, V3 node API, tested with ComfyUI 0.39.
Practical notes
$0.018 an image means sweeping strength and guidance values is genuinely affordable - do that before you blame the LoRA. Set Max cost per run anyway; it's the ceiling that keeps a stray large queue from surprising you, and the pack quotes before submitting. Seeds default to fixed, so re-queueing the same graph reuses the cached image instead of charging again. Mask mismatches are the classic self-inflicted error: the mask must be the size of the source, or the model's redraw lands somewhere you didn't intend.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the whole image you want back; with a mask, describe what belongs in the white area. | |
| image_url | IMAGE | Source image to edit. The result keeps its shape. | |
| strength | FLOAT | 0.800–1 | How far to move away from the source, from 0 to 1. |
| guidance_scale | FLOAT | 3.50–20 | How closely the image follows the prompt, from 0 to 20. |
| steps | INT | 281–50 | Denoising steps, from 1 to 50. Fewer steps return faster and a little softer. |
| output_format | COMBO | jpeg | Container of the returned image. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
| mask_urlopt | IMAGE | Optional black-and-white mask the size of the source: white areas are redrawn, black areas are kept. | |
| lorasopt | SPICY_LORAS | Up to three LoRA weight files, each with its own strength. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |