FLUX.1 [dev]
FLUX.1 [dev] without the 24GB VRAM tax
- seedImage
- maskImage
- outpaint
- lora
- controlNet
- ipAdapters
- pulid
- ultralytics
- acceleratorOptions
- advancedFeatures.watermark.image
- image
FLUX.1 [dev] is the model that ended the SDXL era and made "just type a sentence" prompting the norm - 12 billion parameters, natural-language prompts, hands that finally work, and in-image text that reads correctly. The catch has always been the hardware: a full FLUX stack needs serious VRAM, and the community spent 2024 squeezing it onto consumer cards with fp8, NF4, and GGUF. This node is the cheat code: it runs FLUX.1 [dev] on Runware's machines, so you get the quality without the 24GB tax, your GPU stays free for other work, and there's nothing to download.
One honest caveat before you commit: FLUX.1 [dev] is non-commercial (the Apache-2.0 tier is schnell, and it's the hard-to-finetune one). If you're doing paid work, that matters. For everything else, dev is the one people actually reach for.
What you set
Required: positivePrompt, width, and height - all straightforward, dims from 128 to 2048 in steps of 64. FLUX doesn't want tiny or weird resolutions; 1024ish is its happy place.
The interesting part is guidance. FLUX is a rectified-flow model, so the classic CFG math works differently. The node gives you two dials:
CFGScale- off by default, and off is usually right. FLUX uses distilled guidance; cranking this up often just burns detail.trueCFGScale- the real classifier-free guidance knob, for when you genuinely need stronger prompt adherence. Higher helps you obey, but pushes quality down. Start at default and only touch it when the image ignores you.
Everything else is standard for the pack: negativePrompt (ignored when CFGScale ≤ 1, so don't be confused when it seems to do nothing), seed, steps (FLUX defaults are few - this is a distilled model, more steps isn't automatically better), a 76-choice scheduler dropdown you can ignore, and numberResults for up to 20 variations.
The genuinely FLUX-specific goodies: layerDiffuse, which switches on transparent-image (RGBA) generation - one of the few places you get real cutouts without post-processing - plus sockets for pulid (face consistency), controlNet, ipAdapters, and lora, all fed by the pack's builder nodes.
The single output is image (IMAGE), which wires straight into Preview Image or Save Image.
How it works
Every node in this pack is the same shape: it builds a request with the model AIR and taskType, sends it over REST through the Runware SDK, and downloads the result back as a native IMAGE tensor. The heavy lifting - loading the 12B model, the T5 encoder, the denoising - all happens in the cloud. Your node is basically a very well-dressed API call, with the model's real parameters as widgets instead of JSON. Each run prints its cost on the title bar, which for FLUX is usually fractions of a cent.
Installing
ComfyUI Manager: search Runware, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model files - dependencies are just runware-sdk, pillow, and soundfile. You do need a Runware API key: Settings → Runware API key, or RUNWARE_API_KEY, or runware auth login.
Troubleshooting
The missing-key error is the classic first stumble: set the key before you blame the model. If outputs look soft, remember FLUX is distilled - check that you haven't cranked CFGScale into the double digits. And if you're here for transparent PNGs, layerDiffuse only works when it's actually toggled on.
Inputs (43)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| width | INT | 1024128–2048 | Width of the generated media in pixels. |
| height | INT | 1024128–2048 | Height of the generated media in pixels. |
| seedImageopt | IMAGE | — | |
| maskImageopt | IMAGE | — | |
| outpaintopt | RUNWARE_OUTPAINT | — | |
| loraopt | RUNWARE_LORA | — | |
| controlNetopt | RUNWARE_CONTROLNET | — | |
| ipAdaptersopt | RUNWARE_IPADAPTERS | — | |
| pulidopt | RUNWARE_PULID | — | |
| ultralyticsopt | RUNWARE_ULTRALYTICS | — | |
| acceleratorOptionsopt | RUNWARE_ACCELERATOROPTIONS | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| negativePromptopt | STRING | Prompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1). | |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | BOOLEAN | false | Enable to set steps. Off uses the model's default. |
| steps_valueopt | INT | 11–50 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| scheduleropt | COMBO | (default) | Scheduler to use for the diffusion process. |
| CFGScaleopt | BOOLEAN | false | Enable to set CFGScale. Off uses the model's default. |
| CFGScale_valueopt | FLOAT | 0.000–20 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| trueCFGScaleopt | BOOLEAN | false | Enable to set trueCFGScale. Off uses the model's default. |
| trueCFGScale_valueopt | FLOAT | 0.00 | True Classifier-Free Guidance scale. Higher values increase prompt adherence at the cost of quality. |
| strengthopt | BOOLEAN | false | Enable to set strength. This setting has usage rules in this model, so it is off unless you enable it. |
| strength_valueopt | FLOAT | 0.800–1 | Strength of the transformation. Lower values result in more influence from the original input. |
| maskMarginopt | BOOLEAN | false | Enable to set maskMargin. Off uses the model's default. |
| maskMargin_valueopt | INT | 3232–128 | Extra context pixels around the masked region during inpainting. The model zooms into the masked area with these additional pixels for better integration. |
| promptWeightingopt | COMBO | (default) | Syntax used for prompt weighting. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| layerDiffuseopt | BOOLEAN | false | LayerDiffuse for transparent image generation. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: hiresFix |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |