ComfyUI Node

FLUX.1 [dev] SRPO

The dev-tuned FLUX that ditched the plastic look

By Runware·Created 2 years ago·Updated about a month ago· 140
FLUX.1 [dev] SRPO
  • seedImage
  • maskImage
  • outpaint
  • lora
  • controlNet
  • ipAdapters
  • pulid
  • ultralytics
  • acceleratorOptions
  • advancedFeatures.watermark.image
  • image
positivePrompt
width1024
height1024
negativePrompt
seed0
stepsfalse
steps_value1
scheduler(default)
CFGScalefalse
CFGScale_value0.00
trueCFGScalefalse
trueCFGScale_value0.00
strengthfalse
strength_value0.80
maskMarginfalse
maskMargin_value32
promptWeighting(default)
numberResults1
layerDiffusefalse
advancedFeaturesfalse
advancedFeatures.watermark.bgColor
advancedFeatures.watermark.displayPosition(default)
advancedFeatures.watermark.fontColor
advancedFeatures.watermark.opacityfalse
advancedFeatures.watermark.opacity_value0.10
advancedFeatures.watermark.text
safetyfalse
safety.checkContentfalse
ttlfalse
ttl_value60
outputFormatJPG
outputQuality95
advanced_json

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 and strength controls how much the original survives.
  • maskImage - with maskMargin (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, ultralytics sockets - 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.

CategoryRunware/Image/runware

Inputs (43)

NameTypeDefaultDescription
positivePromptSTRINGText prompt describing elements to include in the generated output.
widthINT1024128–2048Width of the generated media in pixels.
heightINT1024128–2048Height of the generated media in pixels.
seedImageoptIMAGE
maskImageoptIMAGE
outpaintoptRUNWARE_OUTPAINT
loraoptRUNWARE_LORA
controlNetoptRUNWARE_CONTROLNET
ipAdaptersoptRUNWARE_IPADAPTERS
pulidoptRUNWARE_PULID
ultralyticsoptRUNWARE_ULTRALYTICS
acceleratorOptionsoptRUNWARE_ACCELERATOROPTIONS
advancedFeatures.watermark.imageoptIMAGE
negativePromptoptSTRINGPrompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1).
seedoptINT00–9223372036854776000Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range.
stepsoptBOOLEANfalseEnable to set steps. Off uses the model's default.
steps_valueoptINT11–50Total number of denoising steps. Higher values generally produce more detailed results but take longer.
scheduleroptCOMBO(default)Scheduler to use for the diffusion process.
CFGScaleoptBOOLEANfalseEnable to set CFGScale. Off uses the model's default.
CFGScale_valueoptFLOAT0.000–20Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt.
trueCFGScaleoptBOOLEANfalseEnable to set trueCFGScale. Off uses the model's default.
trueCFGScale_valueoptFLOAT0.00True Classifier-Free Guidance scale. Higher values increase prompt adherence at the cost of quality.
strengthoptBOOLEANfalseEnable to set strength. This setting has usage rules in this model, so it is off unless you enable it.
strength_valueoptFLOAT0.800–1Strength of the transformation. Lower values result in more influence from the original input.
maskMarginoptBOOLEANfalseEnable to set maskMargin. Off uses the model's default.
maskMargin_valueoptINT3232–128Extra context pixels around the masked region during inpainting. The model zooms into the masked area with these additional pixels for better integration.
promptWeightingoptCOMBO(default)Syntax used for prompt weighting.
numberResultsoptINT11–20Number of results to generate. Each result uses a different seed, producing variations of the same parameters.
layerDiffuseoptBOOLEANfalseLayerDiffuse for transparent image generation.
advancedFeaturesoptBOOLEANfalseEnable to set advancedFeatures. Off uses the model's default.
advancedFeatures.watermark.bgColoroptSTRINGBackground color in hex format.
advancedFeatures.watermark.displayPositionoptCOMBO(default)Watermark position.
advancedFeatures.watermark.fontColoroptSTRINGText color in hex format.
advancedFeatures.watermark.opacityoptBOOLEANfalseEnable to set advancedFeatures.watermark.opacity. Off uses the model's default.
advancedFeatures.watermark.opacity_valueoptFLOAT0.100.1–1Watermark opacity.
advancedFeatures.watermark.textoptSTRINGWatermark text.
safetyoptBOOLEANfalseEnable to set safety. Off uses the model's default.
safety.checkContentoptBOOLEANfalseEnable or disable content safety checking.
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOJPGFile format for the generated image.
outputQualityoptINT9520–99Compression quality of the output. Higher values preserve quality but increase file size.
advanced_jsonoptSTRINGOptional JSON merged into the request. For: hiresFix

Outputs (1)

NameTypeDescription
imageIMAGE