Forge Paths and Folders
Find the root first, then resolve the file. The same relative folder can sit under an extracted Windows package, a Git checkout, or a custom data directory—and only the running process knows which one is active.
Most path mistakes are root mistakes.
Original Forge resolves three different bases: program for source-owned files, data for most user state, and models for model inventories. They are equal in a default Git install, which is why the distinction is easy to miss.
The Windows package adds an outer layer: launchers and system sit outside its inner webui program/data root. Custom arguments can separate the roots again.
[PROGRAM]defaults to[DATA]→models/unless --data-dir or --models-dir changes the chainTranslate the same Forge folders into your install shape.
Absolute paths below are operational examples, not required locations. Select the profile whose launcher and outer folder match the process you use.
Windows package
The archive has an outer package folder with run/update batch files, system, and webui. Forge user data defaults inside webui. Your extracted folder name can differ.
C:\AI\Forge\webuiC:\AI\Forge\webuiC:\AI\Forge\webui\modelsC:\AI\Forge\webui\outputsC:\AI\Forge\webui\config.jsonC:\AI\Forge\webui\extensionsC:\AI\Forge\systemC:\AI\Forge\run.batWindows Git
In the default Git route, program root and data root are the checkout. webui.bat creates venv beside the launcher unless VENV_DIR changes it.
C:\AI\stable-diffusion-webui-forgeC:\AI\stable-diffusion-webui-forgeC:\AI\stable-diffusion-webui-forge\modelsC:\AI\stable-diffusion-webui-forge\outputsC:\AI\stable-diffusion-webui-forge\config.jsonC:\AI\stable-diffusion-webui-forge\extensionsC:\AI\stable-diffusion-webui-forge\venvC:\AI\stable-diffusion-webui-forge\webui-user.batLinux Git
The username and clone parent are examples. Linux paths are case-sensitive: models/Lora and models/lora are different directories.
/home/alex/stable-diffusion-webui-forge/home/alex/stable-diffusion-webui-forge/home/alex/stable-diffusion-webui-forge/models/home/alex/stable-diffusion-webui-forge/outputs/home/alex/stable-diffusion-webui-forge/config.json/home/alex/stable-diffusion-webui-forge/extensions/home/alex/stable-diffusion-webui-forge/venv/home/alex/stable-diffusion-webui-forge/webui-user.shmacOS Git
The path shape follows the source launcher. It does not claim current hardware or model parity for macOS; use the separate macOS support boundary before installing.
/Users/alex/stable-diffusion-webui-forge/Users/alex/stable-diffusion-webui-forge/Users/alex/stable-diffusion-webui-forge/models/Users/alex/stable-diffusion-webui-forge/outputs/Users/alex/stable-diffusion-webui-forge/config.json/Users/alex/stable-diffusion-webui-forge/extensions/Users/alex/stable-diffusion-webui-forge/venv/Users/alex/stable-diffusion-webui-forge/webui-user.shCustom launcher or manager? Its layout is not inferred here. Read the active console, locate launch.py, and inspect its arguments. Do not relabel a Stability Matrix, container, cloud image, or third-party bundle as the official package.
Five tokens replace dozens of guessed absolute paths.
Every table row uses one of these tokens. Resolve it once for the running process, then append the relative location exactly—including capitalization.
[PROGRAM]- The folder containing launch.py in the running Original Forge source.
[DATA]- Equals [PROGRAM] by default; --data-dir replaces this user-data base.
[MODELS]- Equals [DATA]/models by default; --models-dir replaces only this base.
[PACKAGE]- The outer extracted Windows archive folder containing system and webui.
[CHOSEN]- A path entered by the user in the interface; no stable default can replace it.
Find the file, folder, or output you need.
This table is a locator, not a compatibility guide. A file appearing in a scanned directory proves discovery only; use the linked task page to test loading or behavior.
Showing all 36 paths
| Item | Default formula | What it owns | What changes it | Boundary |
|---|---|---|---|---|
| Roots & runtime7 entries | ||||
VERIFIEDProgram root | [PROGRAM] | Source code, launch.py, launcher scripts, modules, and built-in code. | The checkout or package layout—not --data-dir. | Locate the launch.py used by the running console. A similarly named clone is not proof. |
VERIFIEDData root | [DATA] | Base for default user models, outputs, settings, user extensions, styles, and caches. | --data-dir | Defaults to [PROGRAM]. It can be elsewhere, so do not infer it from the browser URL. |
VERIFIEDModels root | [MODELS] | Base from which most model-family folders are derived. | --models-dir; otherwise [DATA]/models | --models-dir does not move embeddings, outputs, config, styles, or extensions. |
VERIFIEDWindows Git launcher config | [PROGRAM]/webui-user.bat | Editable Windows variables for Python, Git, venv, and COMMANDLINE_ARGS. | Git install only; package launchers differ. | Edit the file called by the active launcher. A dormant copy has no effect. |
VERIFIEDUnix launcher config | [PROGRAM]/webui-user.sh | Optional Linux/macOS variables such as COMMANDLINE_ARGS, python_cmd, and venv_dir. | Source install profile. | It must be used by the command that actually starts Forge. |
VERIFIEDGit virtual environment | [PROGRAM]/venv | Default isolated Python packages for Windows and Unix source launchers. | VENV_DIR on Windows; venv_dir on Unix. | The official Windows package instead carries its prepared runtime in the outer system folder. |
VERIFIEDPackage runtime | [PACKAGE]/system | Bundled Git/Python environment in the dated official Windows archive. | Selected release archive and outer extraction root. | Package-only path. Do not call it venv or copy it into a Git checkout. |
| Models & components11 entries | ||||
VERIFIEDCheckpoint / diffusion model | [MODELS]/Stable-diffusion | Primary checkpoint, supported diffusion model, or GGUF inventory. | --ckpt-dir; --ckpt adds a named file. | Discovery is not compatibility. Split FLUX layouts still need their named companion files. |
VERIFIEDSeparate VAE | [MODELS]/VAE | Separate image encoder/decoder files. | --vae-dir adds another inventory path; --vae-path pins one file. | Use only the VAE required by the exact model layout. |
VERIFIEDText encoders | [MODELS]/text_encoder | Separate CLIP-L, T5, and supported encoder components. | --text-encoder-dir adds another inventory path. | Do not place these in embeddings; embeddings are learned prompt tokens. |
VERIFIEDLoRA | [MODELS]/Lora | LoRA Extra Networks inventory. | --lora-dir replaces the default path. | Capital L matters on case-sensitive filesystems. The A1111 reference helper may inspect lowercase lora. |
VERIFIEDTextual inversion embeddings | [DATA]/embeddings | Textual Inversion Extra Networks inventory. | --embeddings-dir | This is beside models by default, not [MODELS]/embeddings. |
VERIFIEDHypernetworks | [MODELS]/hypernetworks | Legacy hypernetwork inventory. | --hypernetwork-dir | A folder path does not establish current model-family compatibility. |
VERIFIEDControlNet weights | [MODELS]/ControlNet | Integrated ControlNet model inventory. | --controlnet-dir | Weights are separate from preprocessor downloads and the built-in extension code. |
VERIFIEDControlNet preprocessors | [MODELS]/ControlNetPreprocessor | Default cache for integrated ControlNet preprocessor models. | --controlnet-preprocessor-models-dir | A downloaded preprocessor is not a ControlNet weight and will not appear in the model dropdown. |
VERIFIEDUpscaler weights | [MODELS]/{ESRGAN, RealESRGAN, BSRGAN, DAT, ScuNET, SwinIR} | Family-specific post-processing and resize model inventories. | The matching *-models-path argument. | Use the directory owned by that upscaler family; there is no single generic upscaler folder. |
VERIFIEDIP-Adapter weights | [MODELS]/ipadapter | Default model directory used by the integrated IP-Adapter code. | Integrated implementation; verify exact workflow code. | The presence of this path does not prove that every IP-Adapter model works with every base family. |
VERIFIEDInsightFace data | [MODELS]/insightface | Default InsightFace data used by supported integrated preprocessors. | Integrated implementation. | Downloads may create deeper subdirectories. Preserve the console download destination. |
| Generated files8 entries | ||||
VERIFIEDTxt2img images | [DATA]/outputs/txt2img-images/[date] | Default generated txt2img samples, grouped into date subdirectories. | Settings → Paths for saving; outdir_samples can override all sample roots. | The [date] directory comes from the default save-to-directory pattern and can be changed. |
VERIFIEDImg2img / inpaint images | [DATA]/outputs/img2img-images/[date] | Default img2img, sketch, and inpainting samples. | Settings → Paths for saving; outdir_samples can override. | Batch processing can use a user-selected output directory instead. |
VERIFIEDExtras images | [DATA]/outputs/extras-images/[date] | Default results from the Extras/post-processing tab. | Settings → Paths for saving. | This is distinct from an upscaled image produced inside Hires. fix. |
VERIFIEDTxt2img grids | [DATA]/outputs/txt2img-grids/[date] | Default saved grids for txt2img batches when grid saving is enabled. | outdir_grids or the specific txt2img grid setting. | A grid is not the set of individual samples. |
VERIFIEDImg2img grids | [DATA]/outputs/img2img-grids/[date] | Default saved grids for img2img batches when enabled. | outdir_grids or the specific img2img grid setting. | The gallery preview does not prove that grid saving is enabled. |
VERIFIEDSave-button copies | [DATA]/log/images | Dedicated destination used by the Save and Save zip controls under the result gallery. | Directory for saving images using the Save button. | Generate and Save are different actions and can write to different directories. |
VERIFIEDSaved img2img inputs | [DATA]/outputs/init-images | Optional copies of source images used for img2img. | Saving setting for init images. | The folder is relevant only when that saving option is enabled. |
VERIFIEDBatch img2img output | [CHOSEN IN IMG2IMG BATCH UI] | Destination entered for directory-based batch processing. | The Output directory field in the batch interface. | Do not assume it inherits the normal img2img output directory. |
| Settings & application data10 entries | ||||
VERIFIEDUser settings | [DATA]/config.json | Saved Settings values, including output-path overrides. | --ui-settings-file | Back it up before resetting settings. It is not the UI component-default file. |
VERIFIEDUI component defaults | [DATA]/ui-config.json | Saved interface component defaults and layout values. | --ui-config-file | It is separate from config.json. Deleting either file is a reset action, not a harmless cache clear. |
VERIFIEDPrompt styles | [DATA]/styles.csv + [DATA]/styles_integrated.csv | Default prompt-style databases loaded by the current code. | --styles-file can add one or more paths or wildcard patterns. | Preserve valid CSV structure and back up custom styles before updates or migration. |
VERIFIEDCustom CSS | [DATA]/user.css | Optional user stylesheet inserted into the WebUI when the file exists. | --data-dir moves the default location. | CSS can hide or break controls. Rename it during clean-interface diagnosis. |
VERIFIEDLast prompt record | [DATA]/params.txt | Prompt-history text written from the last generation path. | --no-prompt-history prevents creation. | It is not a complete generation receipt and can be overwritten by the next run. |
VERIFIEDForge cache | [DATA]/cache | Disk cache for file metadata and other cached subsections in current code. | SD_WEBUI_CACHE_DIR; legacy cache.json may be converted. | Do not treat all external model/download caches as this directory. Libraries may use OS-level caches. |
VERIFIEDUser-installed extensions | [DATA]/extensions | Third-party extensions installed for this Forge data root. | --data-dir moves the default directory. | Extension code is executable and version-sensitive. Keep it separate from other WebUIs. |
VERIFIEDBuilt-in extensions | [PROGRAM]/extensions-builtin | Integrated feature code shipped with the inspected Original Forge source. | The installed Forge commit. | Do not install third-party extensions here or copy this folder from a fork. |
VERIFIEDSaved extension states | [PROGRAM]/config_states | JSON snapshots created by the Extensions backup/restore interface. | Program root and the save action. | --data-dir does not move this directory in the inspected code. |
UNKNOWNTemporary images | [SYSTEM TEMP BY DEFAULT] | Temporary image files used by the interface when no custom temp directory is set. | Settings → Directory for temporary images. | The OS default is environment-dependent; never publish one universal path. |
Try a filename such as config.json, a shorter component name, or All groups. A third-party extension may own its data outside these core paths.
Resolve overrides from broadest to narrowest.
Do not add more flags until you can explain the effective path at each layer. A specific inventory path can survive while another root moves.
- 01
Find the running program
Use the console that printed the local URL. Record the source path and exact Original Forge commit.
- 02
Resolve
--data-dirIf absent,
[DATA] = [PROGRAM]. If present, settings, outputs, user extensions, and default models start under that custom base. - 03
Resolve
--models-dirIf absent,
[MODELS] = [DATA]/models. If present, it replaces that model base without moving the rest of user data. - 04
Apply inventory-specific paths
Check
--ckpt-dir,--vae-dir,--text-encoder-dir,--lora-dir, and other named controls only for the affected category. - 05
Read saved Settings
config.jsoncan retain custom output directories. The defaults in this table stop being the effective destinations when those fields are populated. - 06
Prove one write or discovery
Generate one image or refresh one model inventory, then inspect the actual resulting file or console path before moving anything else.
Back up state; recreate caches and environments.
A rollback is safer when application state is separated from replaceable code and generated caches.
User-created state
config.jsonandui-config.json- custom
styles*.csvanduser.css - outputs and Save-button copies you need
- models and license/source records
- third-party extension list and exact commits
Derived or environment state
- Git
venvafter recording its working stack - Forge cache after diagnosing the reason
- temporary images
- downloaded dependencies from authoritative sources
- a clean Original Forge checkout at the recorded commit
State from another product
Keep source, venv, configuration, extensions, custom nodes, and outputs separate between Original Forge, A1111, ComfyUI, reForge, Forge Classic, and Forge Neo. Share compatible weights only through explicit, verified category paths.
Build a shared-model layout safelyAnswers for the paths users actually type.
All relative defaults refer to inspected Original Forge commit dfdcbab. Installation examples are visibly labeled, and custom managers remain outside the verified package boundary.
Where does Stable Diffusion WebUI Forge save generated images?
By default, generated samples go under the active data root: outputs/txt2img-images for txt2img, outputs/img2img-images for img2img and inpainting, and outputs/extras-images for Extras. Date subfolders are enabled by the default directory pattern. Settings can override every destination.
Where is the Forge output folder in the Windows one-click package?
With an example package extracted to C:\AI\Forge, the default output root is C:\AI\Forge\webui\outputs. The actual outer folder can have any name, and a custom --data-dir or saved output setting changes the result.
Where is the Forge output folder in a Git install?
Without path overrides, outputs is inside the cloned stable-diffusion-webui-forge directory on Windows, Linux, or macOS. Resolve the active checkout first, then check config.json for saved output-directory overrides.
Why are my Forge images inside another date folder?
Save images to a subdirectory is enabled by default and the default directory-name pattern is [date]. Change that behavior in the saving settings only after recording the current destination.
Why did clicking Save put the image somewhere else?
The Save button uses its own default destination, [DATA]/log/images, while automatic generation uses the txt2img, img2img, or Extras output directory. Both paths are independently configurable.
What is the difference between the Forge program root and data root?
The program root contains the inspected source and launch.py. The data root owns most user data and equals the program root by default. --data-dir can separate them, while built-in extensions and config_states remain under the program root in the inspected code.
What does --data-dir move in Forge?
--data-dir changes the base for default models, embeddings, outputs, config.json, ui-config.json, styles, user.css, cache, and user extensions. It does not relocate program-owned source files, extensions-builtin, or config_states.
What does --models-dir move?
It replaces the models root used to derive most model-family folders. It does not move embeddings, outputs, settings, styles, extensions, or the Python environment.
Where is config.json in Forge?
The default is [DATA]/config.json. --ui-settings-file can select a different file. This stores Settings values and is separate from ui-config.json.
Where is ui-config.json?
The default is [DATA]/ui-config.json. It stores interface component defaults. --ui-config-file can change the path. Back it up before using deletion as a UI reset.
Where are Forge extensions installed?
Third-party extensions default to [DATA]/extensions. Integrated code ships in [PROGRAM]/extensions-builtin. Never mix those folders or transfer a built-in directory from reForge, Classic, or Neo into Original Forge.
Where is the Forge venv folder?
A default Git/source install uses [PROGRAM]/venv unless the launcher variable changes it. The official Windows package instead has a prepared outer system directory and should not be described as a normal Forge venv.
Where do Forge prompt styles go?
Current code loads [DATA]/styles.csv and [DATA]/styles_integrated.csv by default. --styles-file can add explicit files or wildcard paths. Back up custom CSV files before migration.
Where are ControlNet models and preprocessors stored?
ControlNet weights default to [MODELS]/ControlNet. Integrated preprocessor downloads default to [MODELS]/ControlNetPreprocessor. They serve different roles and appear in different controls.
Where are FLUX GGUF, VAE, CLIP-L, and T5 files stored?
The documented split layout puts the diffusion or GGUF file in [MODELS]/Stable-diffusion, the VAE in [MODELS]/VAE, and CLIP-L/T5 in [MODELS]/text_encoder. Packaged checkpoints can have another documented layout.
Can I move the entire Forge models folder with --data-dir?
--data-dir moves the broad user-data base, which also affects settings, outputs, extensions, and more. Use --models-dir when the intended change is only the WebUI-shaped models tree, or individual model path arguments for one category.
Why does a correct relative Forge path still not work?
You may be editing a different clone, package, data root, or launcher than the running process uses. Start from the console that printed the local URL, record its program path and command-line arguments, then resolve [DATA] and [MODELS].
Does Forge store every downloaded model inside its models folder?
No universal claim is safe. Integrated components often choose a directory under [MODELS], but Python libraries and third-party extensions may use their own data or OS-level caches. Preserve the console download destination and verify the exact extension or component source.
The code defines defaults. The running process defines your absolute path.
Primary claims were checked in a local copy of commit dfdcbab and rechecked against current original-repository pages. Community and tutorial sources supplied user language and failure cases, never the authoritative path rules.
Primary / direct evidence
Program, data, models, user extensions, built-ins, config-state, and default output roots.
↗ORIGINAL FORGECommand-line path controlsData/model roots, individual model directories, settings files, styles, and launcher behavior.
↗ORIGINAL FORGESaving-path settingsExact default sample, grid, Save, init-image, and temporary-file settings.
↗ORIGINAL FORGEShared state initializationconfig.json and default style files.
↗ORIGINAL FORGECache implementationCurrent cache directory and legacy cache.json conversion.
↗ORIGINAL FORGEUser CSS loaderuser.css under the data root.
↗ORIGINAL FORGEGeneration processingparams.txt write location and no-prompt-history boundary.
↗ORIGINAL FORGEOutput gallery controlsDifferent Save-button and automatic generation destinations.
↗ORIGINAL FORGEControlNet path definitionsControlNet weight and preprocessor defaults.
↗ORIGINAL FORGELoRA preloadCapital-L Lora default and path argument.
↗ORIGINAL FORGEWindows / Unix launchersDefault venv path for source installs.
↗ORIGINAL FORGEOfficial repository and releaseOriginal project and package boundary.
↗Local research reviewed: 9 records, including 4 full video transcripts
Original repository / README
Package structure, source route, and original-project boundary.
Full FLUX / GGUF owner guide
Split diffusion, VAE, CLIP-L, and T5 placement.
Forge UI construction code
Current VAE / Text Encoder inventory labels and model roots.
Stable Diffusion Art install guide
Package webui nesting, Mac/Git vocabulary, and shared-path questions; facts rechecked in code.
AI Souken installation article
Output-folder and beginner path intent; fork mixing and performance claims rejected.
Full Install and Run Guide
Full captions: archive/webui nesting, models, outputs, date folders, and saving-path language.
Install Forge UI and FLUX Models
Full captions: package folder, model roots, and FLUX file placement.
Install Stable Diffusion in 2025 Forge
Full captions: beginner package → webui → models mental model; fixed hardware and model claims not reused.
Shared model paths solution
Full captions: repeated-storage problem and whole-models junction proposal; broad linking shortcut rejected.
Default roots, formulas, flags, output settings, and current source ownership.
Absolute C:\, /home, and /Users paths illustrate a shape; users choose the real parent.
Third-party manager layouts, extension-specific state, and external library caches.