FLUX.1 [dev] SRPO
The dev-tuned FLUX that ditched the plastic look
- seedImage
- maskImage
- outpaint
- lora
- controlNet
- ipAdapters
- pulid
- ultralytics
- acceleratorOptions
- advancedFeatures.watermark.image
- image
FLUX.1 [dev] SRPO is the community-loved "no plastic look" FLUX. It's a fine-tune of FLUX.1 dev post-trained with SRPO - Self-Play Reward Optimization, the RL-from-AI-feedback technique that judges its own outputs and reinforces what looks like a real photograph. That's the whole story of why it caught on: people kept describing it as realism without the waxy, airbrushed quality base dev is known for. It's hosted on Runware as runware:111@1, so you get it as a typed node without downloading the 12B stack or the fp8 drama that comes with it.
The honest caveat, before you're disappointed: it's still FLUX.1 dev under the hood, and 2026 has moved on - Klein and the Qwen-Image generation outclass it on complex scenes, and its day in the sun (late 2025) has passed. But for fast, genuinely photographic single-subject work, this remains a great API node. And the licensing reality of dev (non-commercial weights) becomes Runware's problem, not yours.
What you set
positivePrompt(required) - full sentences work best; FLUX's T5 encoder eats natural language, not tag soup.width/height- 128–2048, step 64, default 1024². FLUX is happiest around its native square.steps/CFGScale- both gated toggles, off by default, letting the model pick. When you turn them on you're saying you know better; community lore says Euler-style schedulers with modest steps.seedImage- for img2img; wire an IMAGE in andstrengthcontrols how much the original survives.maskImage- withmaskMargin(32–128 context pixels), this is your inpainting path.scheduler- 76 options,(default)first. Don't go exploring until you have a reason.lora,controlNet,ipAdapters,pulid,ultralyticssockets - the builder chain plugs in here for the full stacked-control workflow.layerDiffuse- transparent PNG output, if you're compositing.
Output is image (IMAGE), up to 20 per run via numberResults. advanced_json is the escape hatch for hiresFix.
How it works
Standard pack machinery: taskType: imageInference request over REST through the Runware SDK, references and masks encoded into the payload, native IMAGE back. The model AIR points at Runware's hosted SRPO checkpoint, so all the reward-optimized weight stays server-side. Cost prints on the title bar - SRPO was a beloved midweight, and it's priced accordingly.
Installing
ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model downloads; deps are runware-sdk, pillow, soundfile. API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Troubleshooting
Blurry or muddy output on this node means you've gone off the default scheduler/CFG path - reset the gates to off and let the model's own plan run. Negative prompts do nothing here unless you force CFGScale on, because dev-style guidance is a different animal than SD-era CFG. And remember the licensing note: dev derivatives are non-commercial by the weights' license; if you need commercial, you want a different model AIR entirely.
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 | — |