Add SHARED_CONTAINER_ID constant so the toast container is no longer namespaced per-node.
This allows different custom nodes or projects to stack notifications in one container.
- Extend dynamic widget category hints to capture choice source (static/hybrid/folder_paths)
- Infer workflow schema model candidates from output category hints when widget values match known presets
- Surface auto_download_capable and auto_download_candidate flags in missing model data
- Merge these flags on duplicate missing model entries
- Add cloud-download badge UI with tooltip explaining auto-download context
- Update huggingface author index metadata timestamp
- Switch missing model row layout from grid to flex
- Add circleCheckBig SVG icon to icon_utils
- Replace green 'Resolved' text pill with inline checkmark icon
- Update CSS with resolved icon and model details wrapper styles
- Add Escape key handler to close the info dialog, with proper cleanup
- Extract reusable renderInfoFieldLabel() helper to reduce code duplication
- Add dedicated SVG icons (file, fileText, hash, box, hardDrive, bookType) for field labels
- Adjust dialog sizing to calc(100vh - 16px) with 92vw max width
- Refactor CSS into .mr-info-field-label / .mr-info-label-icon / .mr-info-label-text
- Improve trained-words row layout with flex styling
- Add grid layout and CSS for a new 'Suggest' column in the download target
panel, including a lightbulb SVG icon button with a flash animation
- Update download_target_methods.js to render the suggest button in the
dedicated grid area and apply a ‘mr-is-suggesting’ animation on click
- Adjust search button label logic so it shows 'Search Again' when there is
a renderable search state in the panel, otherwise show 'Search Online'
backend:
- add 429 retry handling with backoff in CivArchive API requests
- add page-scraping fallback for CivArchive model payloads
- normalize CivArchive mirrors with dead/gated/paid/sha256 metadata
- include file metadata and mirror data in normalized archive files
- propagate additional dead/missing status field aliases
- include metadata in normalized CivitAI files
frontend:
- render mirror lists with source grouping, dead-link indicators, and skull icons
- add file badges (primary, type, format, size, fp, mirror count, id)
- improve secondary info in resolve/download methods to include base model
- enhance search panel secondary info with base model and filename
- on selecting a version with empty files, fetch fresh version details
- propagate base model context to CivitAI search state and display labels
Replace all link dialog terminology with resolver terminology
throughout the codebase, including module names, CSS classes,
IDs, JS variables, SVG gradient IDs, and log module names.
Remove the old web/linker/ tree and introduce the new web/resolver/
tree with parallel structure. Also replace core/linker.py with
core/resolver.py.
- Replace unicode text ('⛶', '×') with SVG icons for fullscreen/close buttons
- Add new SVG icons (windowMaximize, windowRestore, x) to icon_utils.js
- Update CSS selectors to scope window button styles under #model-linker-modal
- Remove border/box-shadow from buttons, add hover states
- Increase button size to 46x40px with full height
- Add aria-label attributes for accessibility
- Adjust dialog controls layout with stretch alignment
- Add new utility classes: ml-is-hidden, ml-is-visible, ml-is-inline-flex
- Add ml-is-muted and ml-is-error for text color states
- Add ml-is-success-action for success button styling
- Add ml-icon-img for icon vertical alignment
- Replace style.display = 'block/none' with classList toggles in linker.js
- Update getIconHtml to use ml-icon-img class instead of inline styles
- Changed icon mapping for lora-archive, lora_manager_archive, and lora-manager-archive from 'archive' to 'loraManager'
- Added new loraManager SVG icon in icon_utils.js
- Removed redundant 'Not needed' status display before search controls in download section
- Add getMissingNodeDisplay() helper to centralize node label formatting
- Make missing list rows keyboard-accessible (Enter/Space selection)
- Add clickable locate buttons for missing nodes to center in graph
- Style focus states for accessibility (outline, box-shadow)
- Add refreshCw icon to icon_utils.js for combo refresh buttons
- Refactor row HTML structure for better semantics
- Rename web/utils/{css-loader→css_loader,ErrorHandler→error_handler,IconUtils→icon_utils,ResourceManager→resource_manager} and web/log_system/{LoggerUtils→log_funcs} to lowercase_kebab-case naming convention
- Update all cross-import paths in the recreated utils and linker.js accordingly
- Add removeResolvedFromPopup / markEntryAsResolved to visually mark resolved entries in the ComfyUI Missing Models popup
- Add updateNodesDirectly to update graph node widgets in-place without triggering a full workflow reload
- Add checkAndOpenForMissingModels with isAutoOpenEnabled/setAutoOpenEnabled to auto-open the linker dialog when a workflow with missing models is loaded
- Add helper methods getMissingSearchKey, getSearchState, mergeSearchResults for per-entry search state caching and merging
Remove ~8000 lines of inline JavaScript styles from linker.js and organize
them into two focused stylesheets:
- linker-shell.css: modal shell, backdrop, window controls, layout structure
- linker-main.css: main content area (cards, buttons, forms, dialogs, tabs)
Simplify and clean up css-variables.css variable definitions.
Update css-loader.js to load both new stylesheet files.
Significantly improves code maintainability and separation of concerns.
Remove individual CSS component file references and streamline css-loader
to only load css-variables.css. The web/css directory now contains the
consolidated stylesheet, reducing complexity and improving maintainability.
Enhance logging system with configurable module names and dynamic
localStorage keys to avoid conflicts between multiple plugin instances.
- Add LOG_MODULE_NAME and DEFAULT_LOGGER_NAME to web/log_system/config.js
- Update logger.js to use dynamic storage keys based on module name
- Change window property from ResolutionMasterLogger to dynamic key
- Add PyDoc metadata to core/log_system/config.py
- Add JSDoc metadata blocks to all web log_system files
Reorganize web utilities:
- Move css-loader.js from web/ to web/utils/
- Add ErrorHandler.js for centralized error handling
- Add ResourceManager.js for stylesheet and template loading
rename: web/css-loader.js => web/utils/css-loader.js