AUTOMATIC1111/stable-diffusion-webui · error · Exception

Could not find checkpoint with name {p.refiner_checkpoint}

Error message

Could not find checkpoint with name {p.refiner_checkpoint}

What it means

At the start of process_images, if p.refiner_checkpoint is set (not None/''), sd_models.get_closet_checkpoint_match is used to resolve it to a CheckpointInfo; when no loaded-or-known checkpoint matches the string, None is returned and this Exception stops the run. It guards against a stale or mistyped refiner model name in the generation request.

Source

Thrown at modules/processing.py:885

        assert(len(p.prompt) > 0)
    else:
        assert p.prompt is not None

    devices.torch_gc()

    seed = get_fixed_seed(p.seed)
    subseed = get_fixed_seed(p.subseed)

    if p.restore_faces is None:
        p.restore_faces = opts.face_restoration

    if p.tiling is None:
        p.tiling = opts.tiling

    if p.refiner_checkpoint not in (None, "", "None", "none"):
        p.refiner_checkpoint_info = sd_models.get_closet_checkpoint_match(p.refiner_checkpoint)
        if p.refiner_checkpoint_info is None:
            raise Exception(f'Could not find checkpoint with name {p.refiner_checkpoint}')

    if hasattr(shared.sd_model, 'fix_dimensions'):
        p.width, p.height = shared.sd_model.fix_dimensions(p.width, p.height)

    p.sd_model_name = shared.sd_model.sd_checkpoint_info.name_for_extra
    p.sd_model_hash = shared.sd_model.sd_model_hash
    p.sd_vae_name = sd_vae.get_loaded_vae_name()
    p.sd_vae_hash = sd_vae.get_loaded_vae_hash()

    modules.sd_hijack.model_hijack.apply_circular(p.tiling)
    modules.sd_hijack.model_hijack.clear_comments()

    p.fill_fields_from_opts()
    p.setup_prompts()

    if isinstance(seed, list):
        p.all_seeds = seed
    else:

View on GitHub (pinned to 82a973c043)

Solutions

  1. Download or restore the refiner checkpoint .safetensors/.ckpt into models/Stable-diffusion and refresh the checkpoint list.
  2. Or clear the refiner selection (refiner_checkpoint: null / 'None' / '') if you don't want the refiner pass.
  3. Use the exact title shown in the UI checkpoint dropdown; get_closet_checkpoint_match does substring/hash matching, so a distinctive substring of the real filename works.

Example fix

# before
p.refiner_checkpoint = 'sd_xl_refiner_1.0'   # not on disk -> Exception

# after
p.refiner_checkpoint = None                    # skip refiner pass
Defensive patterns

Strategy: validation

Validate before calling

from modules import sd_models

def resolve_refiner(name):
    if name in (None, '', 'None', 'none'):
        return None
    info = sd_models.get_closet_checkpoint_match(name)
    if info is None:
        raise ValueError(f'refiner {name!r} not present; download it or clear the field')
    return info

p.refiner_checkpoint = resolve_refiner(p.refiner_checkpoint)

Type guard

def checkpoint_exists(name: str) -> bool:
    return sd_models.get_closet_checkpoint_match(name) is not None

Try / catch

try:
    processed = process_images(p)
except Exception as e:
    if 'Could not find checkpoint' in str(e) and 'refiner' not in str(e):
        # message contains the refiner name; null it and retry without the refine pass
        p.refiner_checkpoint = None
        processed = process_images(p)
    else:
        raise

Prevention

When it happens

Trigger: Sending a txt2img request with refiner_checkpoint: 'sd_x_refiner_1.5' when no checkpoint with that name/hash/substring exists in models/Stable-diffusion (not downloaded, deleted, or misspelled).

Common situations: Refiner model was removed from the models directory but still selected in saved defaults; name typo in an API call; shared config where the refiner exists on one machine but not another.

Related errors


AI-assisted analysis of AUTOMATIC1111/stable-diffusion-webui@82a973c043 (2026-08-14). Data as JSON: /api/errors/5b27ddd4b9abf529. Report an issue: GitHub.