How to Configure extra_model_paths.yaml to Share Models Between ComfyUI Installations
ComfyUI uses extra_model_paths.yaml to register additional filesystem locations with the central folder_paths registry, allowing multiple installations to share a single model repository without duplicating files.
ComfyUI supports external model path configurations that extend the default folder structure, enabling users to share models across multiple installations or organize assets on external drives. By configuring extra_model_paths.yaml according to the Comfy-Org/ComfyUI source code specifications, you can map logical folder names like checkpoints and loras to any absolute or relative filesystem location, and the system will treat them as native folders.
How the Extra Model Paths System Works
According to the ComfyUI source code, the configuration system relies on two core components: utils/extra_config.py handles YAML parsing and path resolution, while folder_paths.py maintains the central registry. When load_extra_path_config() processes your YAML file, it expands environment variables and relative paths (including ~ for home directories), then registers each location via add_model_folder_path().
The UI and all downstream APIs query folder_paths.get_folder_paths() to locate assets. This means externally configured directories function identically to built-in folders, ensuring that whether models reside in the default models/checkpoints/ directory or a shared network drive, ComfyUI treats them as first-class citizens.
Creating Your extra_model_paths.yaml File
The YAML structure uses top-level section names to group related paths, with standard folder names such as checkpoints, loras, vae, and custom_nodes as keys.
Basic Configuration Syntax
A minimal configuration maps a folder type directly to a filesystem path:
shared_models:
checkpoints: /mnt/nas/stable-diffusion/checkpoints
loras: /mnt/nas/stable-diffusion/loras
Each key under the section represents a model type recognized by ComfyUI's folder registry in folder_paths.py.
Using base_path for Cleaner Configurations
To avoid repeating long path prefixes, define a base_path key that the loader automatically prepends to relative entries:
nas_storage:
base_path: /mnt/shared/comfyui_models
checkpoints: checkpoints
loras: loras
vae: vae
The loader in utils/extra_config.py resolves base_path first, then joins it with each relative subfolder before calling the registration functions.
Prioritizing Shared Locations with is_default
Add is_default: true to any section to insert those paths at the front of the search order:
primary_storage:
base_path: ~/models/shared
is_default: true
checkpoints: checkpoints
As implemented in folder_paths.py, the add_model_folder_path() method checks this flag to determine whether to prepend or append the path to the internal list, affecting the order shown in the UI file browser.
Loading the Configuration into ComfyUI
ComfyUI discovers extra_model_paths.yaml through two mechanisms defined in main.py and comfy/cli_args.py.
Automatic Loading from the Installation Directory
If you place a file named exactly extra_model_paths.yaml in the same directory as main.py, ComfyUI automatically loads it during startup (lines 82-88 in main.py). This requires no command-line arguments:
python main.py
Specifying Custom Locations via CLI
For multiple configurations or files stored elsewhere, use the --extra-model-paths-config flag defined in comfy/cli_args.py:
python main.py --extra-model-paths-config /path/to/shared_models.yaml
You can pass this flag multiple times to load several configuration files simultaneously.
Complete Configuration Examples
Sharing Models Across Multiple Installations
This configuration points to a centralized NAS storage while keeping local models as fallback:
# extra_model_paths.yaml
shared_nas:
base_path: /mnt/nas/ai_models
is_default: true
checkpoints: checkpoints
loras: loras
controlnet: controlnet
local_fallback:
checkpoints: ./models/checkpoints
Cross-Platform Path Expansion
The loader supports environment variables and home directory expansion, verified in tests-unit/utils/extra_config_test.py:
windows_shared:
base_path: "%APPDATA%/ComfyUI/shared_models"
checkpoints: checkpoints
linux_home:
base_path: ~/ai-models/shared
loras: loras
Programmatic Loading
For custom scripts or extensions, import the utility directly from the source:
from utils import extra_config
extra_config.load_extra_path_config("/absolute/path/to/config.yaml")
# Paths are now available via folder_paths.get_folder_paths("checkpoints")
Summary
- Configuration file: Create
extra_model_paths.yamlusing standard folder names likecheckpointsandlorasas keys mapped to filesystem locations. - Path resolution: The
utils/extra_config.pyloader expands~, environment variables, and relative paths automatically before registration. - Loading methods: Place the file next to
main.pyfor auto-discovery, or use--extra-model-paths-configfor explicit control over file locations. - Search priority: Set
is_default: trueto prioritize shared folders over local installation directories. - System integration: Registered paths function identically to default folders because all ComfyUI components query the centralized
folder_pathsregistry viaget_folder_paths().
Frequently Asked Questions
What is the exact filename required for automatic loading?
The file must be named exactly extra_model_paths.yaml and placed in the root directory containing main.py. As shown in main.py lines 82-88, ComfyUI checks for this specific filename during startup before processing command-line arguments. Any other name requires explicit loading via the --extra-model-paths-config flag.
Can I use environment variables in the path definitions?
Yes. According to tests-unit/utils/extra_config_test.py, the loader correctly expands system environment variables such as %APPDATA% on Windows and $HOME or ~ on Unix systems when resolving paths in your YAML configuration.
How do I ensure shared models appear before local ones in the file browser?
Set is_default: true within your YAML section. This flag triggers folder_paths.add_model_folder_path() to insert those paths at the beginning of the internal list rather than appending them, making shared content appear first in the UI and API responses.
Does this configuration method work for custom_nodes and other non-model folders?
Yes. While commonly used for checkpoints and loras, the system supports any folder type registered in folder_paths.py, including custom_nodes, vae, clip, and controlnet. Simply use the appropriate logical folder name as the key in your YAML file, and the registry will handle it accordingly.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →