AUTOMATIC1111/stable-diffusion-webui
Lore
The story of how stable-diffusion-webui evolved from a single-file 4chan-posted Gradio script into the dominant open-source Stable Diffusion UI. Every event below is anchored to a date derived from git history; speculation is hedged with phrases like "appears to" or "likely".
Eras
The four-thousand-line origin (Aug 2022)
The repository's first public commit is 3324f31e — "first" on 2022-08-22, four days after Stable Diffusion 1.4 was publicly released. The README at that point credited an "Initial Gradio script — posted on 4chan by an Anonymous user." The early commits are largely AUTOMATIC1111 splitting that single script into proper modules, adding GFPGAN, prompt matrix, and grids:
b63d0726adds GFPGAN as a tab and an img2img option.3395c291introduces prompt matrix, per-batch seeds, and CSV logging.- By the end of August 2022 the project already shipped the txt2img and img2img tabs that are still recognisable today.
The first explosion (Sep–Dec 2022)
Activity peaked at 1,328 commits in October 2022, the highest single month in the project's history. The codebase grew from a hobby project into a community hub. Notable additions:
- Sep 2022 — Textual Inversion arrived with prompt parsing improvements and the embeddings/ folder.
- Oct 2022 — The cross-attention layer optimisations (Doggettx, InvokeAI, sub-quadratic) landed in
modules/sd_hijack_optimizations.py; xFormers integration followed a few weeks later. - Oct 2022 — The Extras tab and the X/Y plot script (precursor of X/Y/Z grid) were added.
- Nov 2022 — The script and extension system were generalised;
scripts/and the extensions tab appeared. - Dec 2022 — Stable Diffusion 2.0 support was added shortly after upstream's release; the
configs/v2-inference*.yamlfiles entered the tree.
Hypernetworks and the training tab (Oct 2022 – early 2023)
Hypernetworks, contributed mostly by AngelBottomless and others, gave the UI a second extra-network primitive after textual-inversion. They were positioned as a "lightweight fine-tune" mechanism:
- The training tab, dataset preprocessing (BLIP/deepdanbooru autotagging), and learning-rate schedules all date from this period.
- Hypernetworks have since been deprecated in favour of Lora. The code in
modules/hypernetworks/hypernetwork.pyis still functional but has not seen meaningful changes in over a year.
The release-tag era begins (Jul 2023)
For the first ~10 months the project did not have version tags; users tracked master directly. The first tag, v1.4.0 on 2023-06-27, marked the start of a release process with dev/release_candidate/master branches. Subsequent tags:
| Tag | Date | Highlights |
|---|---|---|
| v1.4.0 | 2023-06-27 | First tagged release |
| v1.5.0 | 2023-07-25 | SDXL 0.9/1.0 support, refiner, Lora built-in |
| v1.6.0 | 2023-08-31 | Switch to Gradio 3.41, redesigned UI, image embeddings |
| v1.7.0 | 2023-12-16 | New samplers, model hash caching, settings reorganisation |
| v1.8.0 | 2024-03-02 | Restart sampler, generation profiler, perf work |
| v1.9.0 | 2024-04-13 | Schedulers split from samplers, model loading rewrite |
| v1.9.4 | 2024-05-28 | Bugfix release |
| v1.10.0 | 2024-07-27 | Stable Diffusion 3 support, six "Performance N/6" PRs |
| v1.10.1 | 2024-07-27 | Last commit on master to date |
The SDXL retrofit (Jul–Aug 2023)
SDXL's release in July 2023 forced large changes:
- A second checkpoint type with different module shapes — handled by
modules/sd_models_xl.pyandModelTypeenum inmodules/sd_models.py. - The refiner pattern (switching to a second checkpoint at a configurable step) became a built-in
modules/processing_scripts/refiner.py. - The Lora system was rewritten into the modular
network_*.pystructure underextensions-builtin/Lora/so that LoHa, LoKr, IA3, GLoRA and OFT could share infrastructure.
Schedulers split off (Apr 2024)
For most of the project's life "sampler" meant both algorithm and sigma schedule (e.g., Euler a Karras). v1.9 separated them:
modules/sd_schedulers.pylists schedules (Karras, Exponential, Polyexponential, …) as first-class objects.- The UI grew a Schedule Type dropdown next to the Sampler dropdown.
get_sampler_and_scheduler()inmodules/sd_samplers.pyhandles backward-compatible parsing of legacy infotext like "Sampler: Euler a Karras".- Align Your Steps, KL Optimal, Beta, Normal, Simple and DDIM schedulers all arrived between v1.9 and v1.10.
Stable Diffusion 3 and a quiet ending (Jul 2024)
v1.10 was a major release: SD3 support landed via modules/models/sd3/ and a series of six "Performance" PRs (#15803–#15820) shaved tens of percent off generation time. The last commit on master is 82a973c0 — changelog from 2024-07-27.
Since then the dev branch has continued to receive commits, but no new release has been cut. The project appears to have entered a maintenance phase, with users migrating to forks (notably vladmandic/automatic and the various ComfyUI-style alternatives) for newer model support.
Longest-standing features
These have survived essentially intact since the first month of the project:
- Prompt attention syntax (
(word),[word],(word:1.2)) — the Lark grammar inmodules/prompt_parser.pyhas had additions but the core parser is from Sep 2022. - The X/Y plot script — added in October 2022, eventually grew a Z dimension and CSV input.
scripts/xyz_grid.pyis the largest "user-script" file at ~38 KB. - The script callback system — established before the extensions tab existed (Q4 2022) and has only added new callbacks; none have been removed.
process_images()shape —StableDiffusionProcessing→process_images_inner→Processedwas introduced in late 2022 and remains the primary contract for both UI and API.
Deprecated or removed features
| Feature | Introduced | Status | Replacement |
|---|---|---|---|
| Hypernetworks training | ~Oct 2022 | Deprecated, still functional | Lora |
--opt-split-attention-v1 |
Late 2022 | Kept for compatibility | --opt-sdp-attention |
| Aesthetic Gradients | Late 2022 | Removed from core; lives as external extension | – |
| Default sampler "DDIM (compvis)" | Early 2023 | Removed | k-diffusion DDIM |
--always-batch-cond-uncond |
2022 | "does not do anything" — kept as a no-op flag | always-on optimisation |
dont_fix_second_order_samplers_schedule setting |
2023 | Removed in v1.10 (#16061) | – |
--max-batch-count |
2022 | Marked defunct in v1.10 (#16119) | settings page |
| Old hires-fix path | 2022 | Replaced; legacy path remains as old_hires_fix_first_pass_dimensions() |
new hires fix |
Major rewrites
- Cross-attention optimiser dispatcher (Q4 2022) — moved from a single
if/elseladder to a list ofSdOptimizationobjects inmodules/sd_hijack_optimizations.pythat scripts can extend via thelist_optimizerscallback. - Lora subsystem (Q3 2023) — collapsed multiple ad-hoc scripts into
extensions-builtin/Lora/networks.pyplus per-typenetwork_*.pystrategies. - Model loading (early 2024) —
sd_models.pyload_model_weightswas largely rewritten to support shared text encoders, refiner switching, and SDXL inpainting. - Settings tab (v1.6, mid-2023) — switched from a flat list to categorised tabs; settings now declared with section/category metadata in
modules/shared_options.py.
Growth trajectory
xychart-beta horizontal
title "Commits per quarter (selected)"
x-axis ["2022-Q3", "2022-Q4", "2023-Q1", "2023-Q2", "2023-Q3", "2023-Q4", "2024-Q1", "2024-Q2"]
y-axis "Commits" 0 --> 2500
bar [915, 2023, 1193, 1078, 1191, 506, 596, 301]Roughly half of the project's commits occurred in its first six months. Activity has tapered every year since, in line with the open-source pattern of "the founder gradually pulls back as forks specialise."
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.
Previous
By the numbers
Next
Fun facts