Factory.ai

Open-Source Wikis

/

Stable Diffusion WebUI

/

Built-in extensions

/

Other built-in extensions

AUTOMATIC1111/stable-diffusion-webui

Other built-in extensions

Active contributors: AUTOMATIC1111, w-e-w, light-and-ray, Kohaku-Blueleaf, tfernd

Purpose

Walk-through of the smaller in-tree extensions under extensions-builtin/. Each ships as a separate directory but is loaded by the same load_scripts() flow as user extensions.

LDSR — Latent Diffusion Super-Resolution

extensions-builtin/LDSR/

A dedicated upscaler that uses an LDM-based super-resolution model. Slow (multiple seconds per tile) but produces very sharp results. Files:

  • sd_hijack_autoencoder.py and sd_hijack_ddpm_v1.py — patches to make the upstream LDSR model load with the project's safe-pickle wrapper.
  • vqvae_quantize.py — vector-quantised autoencoder code copied from the LDSR repo.
  • ldsr_model_arch.py — the actual LDSR pipeline.
  • scripts/ldsr_model.py — registers an Upscaler so LDSR appears in the upscaler dropdown.

The model files (model.ckpt and project.yaml) auto-download into models/LDSR/ on first use.

SwinIR — SwinIR / Swin2SR upscalers

extensions-builtin/SwinIR/

Two upscalers: SwinIR (transformer-based super-resolution) and Swin2SR (improved successor). The integration is mostly a wrapper around Spandrel's loader; the heavy code is in Spandrel. scripts/swinir_model.py registers each as an Upscaler.

ScuNET — ScuNET denoiser/upscaler

extensions-builtin/ScuNET/

ScuNET is primarily a denoiser; the webui also exposes its upscale variants. Same pattern: scripts/scunet_model.py wraps Spandrel's loader.

hypertile — attention partitioning

extensions-builtin/hypertile/

tfernd/HyperTile is an attention optimisation that splits very large attention maps into tiles. Most useful at high resolutions and for SDXL. Hooks cfg_denoiser and patches the cross-attention layers in place.

scripts/hypertile_xyz.py adds an X/Y/Z plot axis for tile-size sweeps. Configuration lives in Settings under "Hypertile".

canvas-zoom-and-pan — inpainting canvas helpers

extensions-builtin/canvas-zoom-and-pan/

JavaScript-only. Adds keyboard shortcuts and mouse wheel zoom/pan to the inpainting canvas. The Python side is a no-op script that exists only to ship the JS/CSS through the extensions loader.

extra-options-section — configurable toolbar

extensions-builtin/extra-options-section/

Lets the user pin frequently-used settings (sampler, CFG scale, …) to a row above the prompt area. The user picks which options via the Settings tab; the extension reflects that choice into the UI on every render.

mobile — touch-friendly UI

extensions-builtin/mobile/

Tiny extension (~3 KB) that adjusts CSS and JS event handling for mobile browsers. The bulk of the change is the v1.10 PR (#15682) "Allow mobile users to open context menu by using two fingers press."

postprocessing-for-training

extensions-builtin/postprocessing-for-training/

Provides a ScriptPostprocessing that turns the Train tab's preprocessing flow (resize/crop/autotag) into a regular Extras step. Useful for batch-processing image folders without having to use the Train tab's specific UI.

prompt-bracket-checker

extensions-builtin/prompt-bracket-checker/

JS-only quality-of-life: shades the prompt textarea red when (, [, or { brackets aren't balanced. Catches the most common prompt-syntax mistake before the user clicks Generate.

soft-inpainting

extensions-builtin/soft-inpainting/

Implements feathered/soft-edge inpainting by hooking cfg_denoiser. Instead of blending masked latents with a binary mask at every step, it blends predicted noise with a smooth falloff. Produces noticeably better seams in img2img inpainting.

The math is straightforward (a Schedule-then-blend trick). The extension is a good "cfg_denoiser callback in <300 lines" reference for anyone learning the callback API.

Lifecycle

All of these load through the same load_scripts() path as user extensions (systems/scripts-and-extensions.md). They can be disabled individually via Settings → Extensions → Disable. They cannot be updated independently — they share the webui's git revision.

Why keep them in-tree?

Because they're widely used and version-coupled to the core. SwinIR and Lora in particular need to track sd_models / sd_hijack changes, and shipping them as external extensions would mean breakage every release. The cost is that the repo contains code with very different shapes (Lora is a model patcher, mobile is two CSS rules) under one roof.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Other built-in extensions – Stable Diffusion WebUI wiki | Factory