fix(downloads): route unknown checkpoint baseModels to diffusion models by default

CivitAI labels new DiT architectures (MiniMax H3, future Flux/Wan/Qwen
variants) as model.type "Checkpoint" with plain "Model" file entries,
so the DIFFUSION_MODEL_BASE_MODELS allowlist could never keep up and
such downloads were mis-routed to the checkpoint roots (e.g. model
2877206 / version 3374439). The set of true full-checkpoint families is
closed, so the baseModel fallback is inverted:

1. file type UNet/Diffusion Model -> unet (unchanged)
2. baseModel in DIFFUSION_MODEL_BASE_MODELS (now incl. MiniMax H3) -> unet
3. baseModel in new CHECKPOINT_BASE_MODELS (SD 1.x/2.x/3.x, SDXL, Pony,
   Illustrious, NoobAI) -> checkpoint
4. unknown/empty baseModel -> new unknown_base_model_routing setting,
   defaulting to diffusion models

The setting is exposed under Settings > Downloads, validated in
SettingsManager, and threaded into both the download manager and the
download routing endpoint so they keep agreeing.
This commit is contained in:
Will Miao
2026-10-02 09:58:01 +08:00
parent 2193ec8f38
commit 3aa32120df
22 changed files with 270 additions and 8 deletions
+34
View File
@@ -371,6 +371,7 @@ DIFFUSION_MODEL_BASE_MODELS = frozenset(
# Other diffusion models
"Ernie",
"Ernie Turbo",
"MiniMax H3",
"Nucleus",
"Qwen",
"ZImageBase",
@@ -380,6 +381,39 @@ DIFFUSION_MODEL_BASE_MODELS = frozenset(
]
)
# baseModel values from CivitAI that are true full checkpoints (loaded via
# CheckpointLoaderSimple in ComfyUI). New DiT families appear on CivitAI all
# the time, so download routing inverts the fallback: anything NOT in this
# closed set (and not a known diffusion model) is treated as a diffusion
# model by default (see py/services/download_routing.py).
# "Pony V7" is deliberately excluded: it is not an SDXL-derivative full
# checkpoint, so it follows the unknown-base-model default (diffusion).
CHECKPOINT_BASE_MODELS = frozenset(
[
# Stable Diffusion 1.x
"SD 1.4",
"SD 1.5",
"SD 1.5 LCM",
"SD 1.5 Hyper",
# Stable Diffusion 2.x
"SD 2.0",
"SD 2.1",
# Stable Diffusion 3.x
"SD 3",
"SD 3.5",
"SD 3.5 Medium",
"SD 3.5 Large",
"SD 3.5 Large Turbo",
# SDXL and its full-checkpoint derivatives
"SDXL 1.0",
"SDXL Lightning",
"SDXL Hyper",
"Pony",
"Illustrious",
"NoobAI",
]
)
# Supported baseModel values for download exclusion settings.
# Keep this aligned with static/js/utils/constants.js, excluding the generic "Other" value.
SUPPORTED_DOWNLOAD_SKIP_BASE_MODELS = frozenset(