With many models, or models on a network drive, every visit to the scan page read every folder and, after a restart, every new model's header again (79 s for 1041 models on an AutoDL model disk). api/model_heads.py keeps what each file's header says by real path, size and time in user/anomalous/model_heads.json (at most 50,000 files, the longest unused dropped first, written a few seconds after the last change, only once setup_routes called keep_on_disk); get_metadata reads headers through it, so a header is read once per file version. scan_summary keeps the last summary (memory, and scan_summary.json when it changed); ?quick=1 hands it out at once and the page shows it with "showing the last counts while they are updated", then the fresh ones. Requests meanwhile await one count (_fresh). The models found on Civitai (components apart, at most 5000 kept) are listed by GET /anomalous/scan_matched; the page's "Found on Civitai" count opens them, with Civitai's name, base model, a box to find one by name and Open. Checked on the isolated ComfyUI reading the real loras and checkpoints read-only (scans stubbed; no file there changed): the last counts showed at once also after a restart, the fresh ones replaced them, the found list had 68 models with names, the box filtered, Open and Back returned to it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
2.0 KiB
CSS
33 lines
2.0 KiB
CSS
@import url("./styles/00-foundation-models.css?v=20261014-folders-1");
|
|
@import url("./styles/01-shell-tools.css?v=20261014-folders-1");
|
|
@import url("./styles/02-notebooks.css?v=20261014-loranode-1");
|
|
@import url("./styles/03-gallery-recipes.css?v=20261014-file-2");
|
|
@import url("./styles/04-dialogs-materials.css?v=20261011-wfd-3");
|
|
@import url("./styles/05-recipe-studio-overrides.css?v=20261011-wfd-3");
|
|
@import url("./styles/06-material-workbench.css?v=20261007-theme-2");
|
|
@import url("./styles/07-prompt-studio.css?v=20261007-theme-2");
|
|
@import url("./styles/08-theme-gallery-overrides.css?v=20261010-wfd-1");
|
|
@import url("./styles/09-prompt-drawers.css?v=20261007-theme-2");
|
|
@import url("./styles/10-model-sources.css?v=20261007-theme-2");
|
|
@import url("./styles/11-audio-studio.css?v=20261010-search-1");
|
|
@import url("./styles/12-tts-setup.css?v=20261007-theme-2");
|
|
@import url("./styles/13-script-director.css?v=20261007-theme-2");
|
|
@import url("./styles/14-version-manager.css?v=20261007-theme-2");
|
|
@import url("./styles/15-shell-rail.css?v=20261016-remote-3");
|
|
@import url("./styles/16-activity.css?v=20261007-theme-2");
|
|
@import url("./styles/17-model-types.css?v=20261007-theme-2");
|
|
@import url("./styles/18-scan-page.css?v=20261016-counting");
|
|
@import url("./styles/19-model-doctor.css?v=20261007-theme-2");
|
|
@import url("./styles/20-current-node.css?v=20261011-last");
|
|
@import url("./styles/21-prompt-studio.css?v=20261007-theme-2");
|
|
@import url("./styles/22-model-download.css?v=20261007-theme-2");
|
|
@import url("./styles/23-combo-structure.css?v=20261007-theme-2");
|
|
@import url("./styles/24-backup.css?v=20261007-theme-2");
|
|
@import url("./styles/25-model-import.css?v=20261008-import");
|
|
@import url("./styles/26-model-tidy.css?v=20261008-tidy");
|
|
@import url("./styles/27-param-compare.css?v=20261013-video-1");
|
|
@import url("./styles/28-workflows.css?v=20261010-wf-2");
|
|
@import url("./styles/29-workflow-detail.css?v=20261011-wfd-3");
|
|
@import url("./styles/30-scan-picker.css?v=20261016-lists");
|
|
@import url("./styles/31-model-info.css?v=20261014-desc-2");
|