ComfyUI Node

FLUX.1 Fill [dev]

The Swiss-army editor

By Runware·Created 2 years ago·Updated about a month ago· 140
FLUX.1 Fill [dev]
  • acePlusPlus.images
  • seedImage
  • maskImage
  • outpaint
  • lora
  • controlNet
  • ipAdapters
  • pulid
  • ultralytics
  • acceleratorOptions
  • advancedFeatures.watermark.image
  • acePlusPlus.masks
  • 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
acePlusPlus.repaintingScale0.00
safetyfalse
safety.checkContentfalse
acePlusPlus.typeportrait
ttlfalse
ttl_value60
outputFormatJPG
outputQuality95
advanced_json

FLUX.1 Fill [dev] is the inpainting specialist of the FLUX family, and this node wraps it the clever way: through ACE++, a task framework that turns "what do you want done?" into modes. Instead of one inpainting pipeline, you get three - portrait, subject, and local editing - plus a repainting-scale dial that trades identity preservation against prompt adherence. It's the most flexible editing node in the Runware pack, and also the easiest to confuse yourself with.

The model runs on Runware's hardware (runware:102@1), so you get FLUX-quality fills with zero local footprint.

How it works

A taskType: imageInference REST call. The input image(s) ride up as data URIs, and the ACE++ mode (acePlusPlus.type) tells the model what kind of task this is. The classic local ComfyUI "load image + mask + prompt" inpaint path is here too (seedImage, maskImage), so you're not forced into the ACE++ way - you just get both.

Inputs that matter

  • acePlusPlus.images - required; the reference image(s). This is the ACE++ socket, distinct from seedImage.
  • acePlusPlus.type - portrait / subject / local_editing. Portrait keeps a face recognizable, subject targets an object, local_editing is free-form region work. Pick per job.
  • acePlusPlus.repaintingScale - 0–1. The whole interesting dial: 0 preserves original character/identity, 1 surrenders to the prompt. Start around the middle and nudge toward 0 when the edit keeps drifting off the subject.
  • acePlusPlus.masks - optional masks for the ACE++ path.
  • seedImage / maskImage / outpaint - the classic inpaint/outpaint route, if you prefer it.
  • lora / controlNet / ipAdapters / pulid - the full builder socket suite. pulid is notable: face-ID preservation on top of portrait editing.
  • layerDiffuse - toggle for transparent-image generation.
  • steps / scheduler / CFGScale / strength / maskMargin - the standard diffusion dials, all off-by-default toggles with paired value widgets.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt

Or ComfyUI Manager → search Runware → Install → restart. API key in ComfyUI Settings → Runware API key or RUNWARE_API_KEY.

Gotchas

  • Two input paths (ACE++ vs classic mask) means two ways to get nothing. Pick one: if you're feeding acePlusPlus.images, configure the ACE++ settings; if you're doing classic inpaint, wire seedImage + maskImage and let acePlusPlus.type sit at its default.
  • The off-by-default toggles are a deliberate design: values with usage rules start hidden so a default request never violates them. If a setting seems missing, flip its enable toggle first.
  • advanced_json is the escape hatch (documented for hiresFix), and invalid JSON is silently ignored - so check your syntax if a tweak doesn't land.

Fill [dev] is the "one editor for everything" node - portraits, objects, local fixes, even transparent output. The ACE++ modes and repainting scale make it genuinely more capable than a plain inpaint wrapper. Just don't fight it by mixing both input paths.

CategoryRunware/Image/runware

Inputs (47)

NameTypeDefaultDescription
acePlusPlus.imagesIMAGE
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
acePlusPlus.masksoptIMAGE
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.
acePlusPlus.repaintingScaleoptFLOAT0.000–1Balances original character identity (0.0) vs prompt adherence (1.0). Lower values preserve stronger character resemblance.
safetyoptBOOLEANfalseEnable to set safety. Off uses the model's default.
safety.checkContentoptBOOLEANfalseEnable or disable content safety checking.
acePlusPlus.typeoptCOMBOportraitTask mode for ACE++ generation.
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