FIND THE FIRST FAILED GATE

Fix ControlNet in Forge by testing the signal path

Start with the symptom, then prove base generation, input, detected map, model load, patch, and output in that order. Change one boundary at a time so the failed stage—and the evidence needed to fix or report it—stays visible.

Product boundaryOriginal Forge onlySource snapshotdfdcbab · 26 Jun 2025Review date27 Aug 2026
00 · Direct answer

Do not troubleshoot “ControlNet” as one box

The earliest failed gate determines the next test. Later controls cannot repair an earlier failure.

01Base fails

Leave this page. ControlNet is not yet the failing boundary.

02Map fails

Fix input or preprocessing before loading and tuning.

03Model fails

Verify the file contract and exact loader error.

04Output fails

Use the same-seed A/B pair to prove the effect.

Page boundary

This page owns diagnosis: no effect, wrong preview, Model None, recognition errors, black or stretched ControlNet output, Hires/Img2img branch failures, multi-unit conflicts, and regressions. To build a first working pair, use the ControlNet workflow. General black output belongs to the output-stage diagnostic.

01 · Symptom router

Choose what fails first

The router gives a first test, a pass condition, and a stop rule. It does not guess a universal fix.

FIRST FAILED GATE · Model application or the comparison itself

The map looks right, but the output ignores it

Do now
Keep one unit. Confirm Enable, a non-None model, weight above zero, a Timestep Range that includes the run, and a map/model/base-family contract documented by the model publisher.
Pass proof
Generate A with the unit disabled and B with it enabled. Seed, prompt, dimensions, sampler, scheduler, steps, checkpoint, Hires. fix state, and every other setting must stay identical.
Stop rule
A selected Control Type, a plausible preview, or “ControlNet Method … patched” in the console does not by itself prove a visible conditioning effect.

VERIFIED Gate order is traced through current original-Forge input, preprocessor, loader, Hires and sampling code. Reported symptoms remain environment-specific.

02 · Signal ladder

Read the run from left to right

Stop at the first red gate. Everything to its right is unproved, not automatically broken.

  1. 01 · BASE

    Forge generates without ControlNet

    A failing base is not a ControlNet case. Fix model, memory, decode, or output first.

  2. 02 · INPUT

    One enabled unit receives the intended image

    No image can produce the exact current error “controlnet is enabled but no input image is given.”

  3. 03 · MAP

    Preview contains the intended signal

    A wrong map localizes the fault before control-model loading or sampling.

  4. 04 · MODEL

    One non-None model loads

    A dropdown entry is discovery; a completed loader stage is a separate gate.

  5. 05 · PATCH

    The method reaches sampling

    The current log can confirm that a method was patched, but visible effect still needs A/B proof.

  6. 06 · OUTPUT

    Enabled and disabled outputs differ as intended

    Only this same-seed comparison proves the unit changed the result usefully.

VERIFIED

Current code raises separate errors for missing input, missing selected model, and unrecognized model weights. Preserve the first error: later KeyError or postprocess messages can be consequences of the earlier failure.

Inspect the generation path ↗
03 · Minimal reproduction

Build a result another person can reproduce

The sequence keeps the failing evidence intact while removing unrelated branches.

  1. 01

    Preserve the failed run

    Save PNG Info, source image, detected map, exact control-model filename and source, full console, screenshot of the unit, and the original Forge commit.

  2. 02

    Prove the base twice

    Restart once, use the intended checkpoint and preset, batch 1, fixed seed, base dimensions, and no ControlNet, Hires. fix, LoRA, postprocessor, or third-party script.

  3. 03

    Restore one unit only

    Add one input image. Leave every other unit disabled. Use Single Image before any folder, upload batch, merge, or loopback route.

  4. 04

    Verify the control contract

    The publisher must document the control model’s base family and accepted signal. A name filter or community recipe is not enough.

  5. 05

    Inspect the detected map

    Run the preprocessor preview. If the input is already the expected map, compare Preprocessor: None. Stop if the map is unusable.

  6. 06

    Use the neutral proof state

    Enable the unit; start from weight 1, full 0–1 range, Balanced, Hires. fix off, and a deliberate Resize Mode. These are controls for comparison, not universal quality settings.

  7. 07

    Run disabled and enabled copies

    Keep seed, prompt, checkpoint, dimensions, sampler, scheduler, steps, and every non-ControlNet setting identical. Toggle only the one unit.

  8. 08

    Restore one boundary

    After the one-unit pair passes, add Hires. fix, Img2img influence, a second unit, batch input, LoRA, or one extension—never several at once.

DONE STATEYou can name the first failed gate, reproduce it with one unit, and show the exact disabled/enabled difference—or the exact error that prevents that comparison.
04 · Console decoder

Treat the first message as a boundary

Exact current strings are code-verified. Issue-only traces are labeled and dated.

controlnet is enabled but no input image is given
VERIFIED

The inspected single-image path raises this when neither the unit nor the Img2img fallback supplies a usable array. Add or reselect the intended input; do not tune weight.

You have not selected any control model!
VERIFIED

The selected preprocessor requires a model, but Model is None. A few preprocessors declare that they do not need a control model; ordinary model-backed routes do.

Recognizing Control Model failed: …
VERIFIED

The file was found, but current registered control-model loaders returned no patcher. Capture the exact path and verify the file’s role and documented compatibility.

ControlNet Method … patched.
VERIFIED

The method reached the patch stage. It does not certify that the detected map was useful or that the enabled output differs visibly from the disabled control.

ControlNet Skipped High-res pass / Low-res pass.
VERIFIED

This is an informational branch: the selected Hires-Fix Option excluded that pass. Check Both, Low res only, or High res only before calling the unit ineffective.

PermissionError … ControlNetPreprocessor … .tmp
COMMUNITY-REPORTED

Issue #2790 records a Windows file-in-use failure while a preprocessor asset was being renamed. Preserve the exact locked path and process; do not generalize it to every preview failure.

TypeError: '<' not supported between instances of 'dict' and 'int'
COMMUNITY-REPORTED

Issue #2691 records this Img2img failure in one updated 2025 environment, followed by KeyError: 0. Match its commit and reproduction before treating it as the same bug.

05 · Compatibility proof

Know what each model state proves

A visible filename is a scanner result. A useful controlled output is the complete contract.

UNKNOWN

Model is absent

Discovery has not passed. Verify the effective ControlNet weights path and refresh; do not infer an unsupported model yet.

UNKNOWN

Model appears in the dropdown

The scanner accepted the path, extension, and name. Current Control Type filtering uses filename filters; compatibility is still unproved.

VERIFIED

Model loads and method patches

The inspected Forge build recognized that state dictionary and attached a control path for this run. Useful output is still unproved.

VERIFIED

Same-seed A/B changes the intended structure

This exact build, base checkpoint, control model, map, and settings form a passing tested pair. Do not generalize it to another family or file.

UNKNOWN

A FLUX, Union, PuLID, IP-Adapter, or fork recipe is named online

A product name is not a loader contract. Current open reports include unanswered compatibility questions and recognition failures. Follow the exact publisher and build evidence.

UNKNOWN

We do not publish a universal FLUX, Union, PuLID, IP-Adapter, or fork compatibility list without primary documentation and a controlled original-Forge test. Open 2026 issue #3084 still asks which FLUX ControlNet models work, while issue #3114 records one recognition failure; neither proves all support or all failure.

06 · Bug-report receipt

Collect evidence before changing the environment

A report needs the control contract, the first failed gate, and a comparison—not only a screenshot of the final output.

ControlNet diagnostic receipt
RECORDED0 / 10 recorded
LOCAL FIXOne gate fails, then passes

Keep the passing receipt as your new baseline.

CORE REPORTClean original Forge reproduces

Attach the receipt, full log, files, and commit boundary.

07 · Branch isolation

Add advanced routes only after one unit passes

Each route adds a separate user job and a new failure boundary.

HIRES. FIX

Confirm the active pass

Record Both, Low res only, or High res only. The inspected code logs when it skips either pass. A skipped pass is configuration evidence, not a loader failure.

IMG2IMG

Separate two image inputs

Keep init image, denoising, mask, resize, and the ControlNet input distinct. Prove one influence, then the other, then the combination.

MULTIPLE UNITS

Prove each contract alone

Generate the same receipt with unit 1 only, then unit 2 only, then both. Never begin diagnosis from an unproved stack.

BATCH / MERGE

Prove one file first

Record ordering, dimensions, input mode, batch options, seeds, and the first file that fails. A folder-level symptom is not yet a model-level cause.

EXTENSIONS

Remove the second code path

Disable all third-party extensions. If clean integrated ControlNet passes, re-enable one repository and commit at a time.

UPDATE

Compare commits, not memories

Keep a separate last-passing build. Match the receipt against the first failing original-Forge commit before labeling a regression.

08 · ControlNet FAQ

Specific questions from real failure paths

Answers stay inside the original-Forge boundary and separate current code from reports and dated tutorials.

Why is ControlNet not working in Stable Diffusion WebUI Forge?

Find the first failed gate: base generation, unit input, detected map, model load, patch, or same-seed output proof. Test one unit with Hires. fix, LoRAs, extra units, batches, postprocessors, and third-party extensions disabled.

Why does ControlNet have no effect even though the preview works?

A correct preview proves only the preprocessor stage. Confirm Enable, a non-None publisher-documented model for the same map and base family, weight above zero, an active Timestep Range, and a same-seed disabled/enabled comparison.

Why does Forge ControlNet Model say None?

The integrated interface does not include every control weight. Put the intended weight in the effective models/ControlNet path or configured extra path, use the ControlNet model refresh action, and inspect the scanner or first loader error.

Why does my ControlNet model appear only under All?

Current Control Type filtering uses filename filters attached to preprocessors. A filename that does not match those filters may not appear in a narrower view. This filtering behavior is navigation, not compatibility proof.

What does “Recognizing Control Model failed” mean?

Forge found the file but the registered control-model loaders did not build a patcher from its state dictionary. Verify that it is actually a supported control model for the exact original-Forge build, not another file role or fork-specific package.

Why is the Run preprocessor button disabled?

Current UI code disables the action and labels it “No ControlNet input image available” when the unit has no input image. Upload or reselect the source for that unit before testing the detector.

Why is the ControlNet preview empty or wrong?

Verify the actual unit input and detector first. Change exposed resolution or thresholds one at a time and inspect the new map. For an already processed control map, compare Preprocessor: None rather than preprocessing it again.

Why does OpenPose miss a person in Forge?

The failure is at the detected-map gate. Use a clearer input, verify the intended person is visible, test the relevant OpenPose preprocessor controls one at a time, and do not proceed until the preview contains the joints you need.

Why does ControlNet make the output black or blank?

Prove the same seed with ControlNet disabled. If that passes, restore one unit and remove Hires. fix, other units, LoRAs, postprocessors, and third-party extensions. Preserve the preview and console to locate the first bad stage.

Why is my ControlNet output stretched or cropped?

Input and output aspect ratios differ, and the selected Resize Mode applies a tradeoff. Just Resize can distort; Crop and Resize can remove outer areas; Resize and Fill preserves the full map but adds bands.

Does Pixel Perfect fix stretched ControlNet output?

No. Pixel Perfect calculates preprocessor resolution from input, output, and resize mode. It does not make aspect ratios equal, undo a crop, remove padding, or make an incompatible model work.

Can Control Weight fix a wrong detected map?

No. Weight changes the strength of a later control stage. Repair the input or preprocessor until the map is correct, then compare weight from a passing full-range baseline.

Can Control Mode fix an incompatible model?

No. Balanced, My prompt is more important, and ControlNet is more important change priority. They do not change the control model’s architecture, base family, or expected map type.

Why does ControlNet stop working with Hires. fix?

Current Forge can apply the unit to Both, Low res only, or High res only and logs when a pass is skipped. Prove base resolution first, then record the selected Hires-Fix Option and compare one option at a time.

Why does ControlNet fail only in Img2img?

Img2img adds its own source image, mask, resize, and denoising influence. Prove the same control pair in a simple route, then restore Img2img settings. A dated open TypeError report is evidence for one environment, not a universal cause.

How do I troubleshoot multiple ControlNet units?

Disable all but one. Prove every unit separately with the same base receipt, then combine two passing units without changing prompt or seed. The first failing combination is the useful boundary.

Does original Forge support FLUX ControlNet or Union models?

Do not make a universal claim. The inspected generic loader code does not certify every named FLUX or Union package, while open repository reports include unanswered questions and recognition failures. Require publisher documentation and a controlled test in the exact build.

Can I install the AUTOMATIC1111 ControlNet extension in Forge to fix this?

Do not add a second ControlNet implementation during diagnosis. Original Forge already contains an integrated extension. Advice that edits Forge to force-enable another implementation creates an unsupported comparison and may introduce conflicts.

Can a third-party extension break integrated ControlNet?

Community reports describe extension-specific conflicts, but that does not identify yours. Reproduce with all third-party extensions disabled, then enable one at a time while preserving repository and commit for the first extension that restores the symptom.

Why did ControlNet break after an update?

Record the last passing and first failing original-Forge commits and exact extension commits. Reproduce the same minimal receipt on a separate clean install. That distinguishes a core regression from local accumulated state or an extension conflict.

Where do Forge ControlNet models and preprocessors go?

Control weights use models/ControlNet by default. Downloaded detector assets use the separate models/ControlNetPreprocessor tree. Forge can also use configured extra paths; record the effective path shown by your installation.

What does “ControlNet Method patched” prove?

It proves the inspected code reached the patch stage for that method. It does not prove the preview is correct, the model is useful for your base family, or the enabled output follows the intended structure.

What should I include in a Forge ControlNet bug report?

Include original repository and commit, environment, exact base and control files with sources, unit settings, source and detected map, prompt and fixed seed, full console, disabled/enabled outputs, extension-disabled result, and clean-install result.

When should I use the ControlNet workflow page instead?

Use the workflow page when you have not yet built a first passing pose, Canny, depth, or prepared-map pair. This page starts from a symptom and localizes the first failed diagnostic gate.

09 · Evidence ledger

What is verified, reported, dated, or unknown

Product sources explain Forge and its user problems. The workspace SEO book alone controls page methodology.

VERIFIED Current original-Forge source
COMMUNITY-REPORTED Original-repository issues and discussions
STALE SNAPSHOT Fully reviewed local research sources
ASSUMPTION

The ordered “signal ladder” is our diagnostic presentation of the inspected execution path. It is not a claim that every runtime failure exposes a clean message at every gate.

Written by the Forge Field Guide editorial team · reviewed against original Forge commit dfdcbab · source-audited, not GPU-run here · updated 27 Aug 2026.