Commit Graph
448 Commits
Author SHA1 Message Date
Dariusz L b28cd72ae5 refactor: deduplicate filename cleanup and generic token helpers 2026-07-03 00:26:18 +02:00
Dariusz L 9c0ec8b26b Add progress reporting for loaded model and workflow analysis
- Add server-side loaded models progress tracking in __init__.py
- Report workflow node analysis progress from workflow_analyzer.py
- Add frontend polling, rendering, and UI flow for loaded models progress
2026-07-03 00:06:04 +02:00
Dariusz L 1a94a7badc Validate civitai URL input before parsing
Add an early guard in core/sources/civitai.py to return None for non-string or empty URL inputs before calling urlparse. This prevents exceptions and unexpected behavior when callers pass None or empty values, making the parser more robust.
2026-07-02 23:43:37 +02:00
Dariusz L 56ec5c3083 refactor: consolidate shared helpers and deduplicate HTML escaping/URL collection 2026-07-02 23:35:40 +02:00
Dariusz L 28d054b228 refactor: deduplicate progress tracking, file size extraction, and loaded model rendering
- Replace inline analysis/hash/search progress helpers with direct JobProgressTracker calls
- Add shared extract_file_size() utility and remove duplicated extraction in CivitAI/CivArchive/HuggingFace
- Extract getModelNameAndStrength/getModelToken helpers in loaded models view
- Add raw response mode to fetchJson and simplify backend log export handling
2026-07-02 23:13:37 +02:00
Dariusz L ce29f88c6d refactor: centralize repeated filename/search/URL/HTTP helpers
Replace duplicated filename-to-query logic with a single
\uild_filename_search_queries\ helper in matcher/civarchive/huggingface,
standardize Civitai URL generation in the frontend via \getCivitaiModelUrl\,
unify browser user-agent and response file-size extraction in the downloader
path, and derive workflow node-type category hints from widget categories
rather than maintaining a large static mapping.
2026-07-02 22:56:21 +02:00
Dariusz L 8ce70c30e6 refactor: consolidate shared utilities into type_utils and path_utils
Replace duplicated SHA256 normalization, metadata sidecar discovery, trained-words
extraction, type coercion, and cache helpers into shared modules. Clarify that the
_civitai.py/_civarchive.py/_huggingface.py/_workflow_analyzer.py refactorings are
behavior-preserving so future contributors keep behavior aligned in one place.
2026-07-02 22:41:56 +02:00
Dariusz L 3865914d0f refactor: replace inline JSON reads with read_json_safe in resolver, civitai, and huggingface 2026-07-02 19:19:05 +02:00
Dariusz L 5f23ace7ab Bump logger version to 1.5.6
Update AzLogs version number in the logger module header.
2026-07-02 18:56:10 +02:00
Dariusz L 37383ac046 refactor: consolidate logger imports and replace deprecated log.warn usage 2026-07-02 17:27:54 +02:00
Dariusz L 8ef52c8e69 fix(type_utils): accept hf:// URLs in looks_like_model_file 2026-07-02 04:46:40 +02:00
Dariusz L 9951e1fbd5 refactor: centralize shared utilities in core/type_utils and remove redundant wrappers
- Move URL model-file validation logic to type_utils.looks_like_model_file and use it from __init__.py, civarchive
- Extract remote file-size probing into type_utils.fetch_remote_file_size and replace duplicated HEAD+Range logic in civarchive and huggingface
- Extract image normalization into type_utils.normalize_model_image, replacing duplicated CivitAI/CivArchive image mapping in civarchive and civitai
- Drop redundant local wrapper functions (_as_dict, _as_list, _version_sort_key, _select_primary_model_file, _extract_primary_file, _read_json_file, _write_json_file_atomic, _get_sha256_hash, _extract_civitai_image_id, _build_civitai_image_url) in favor of existing shared implementations
- Use path_utils.read_json_safe and write_json_atomic directly in model_list
2026-07-02 04:40:23 +02:00
Dariusz L e0a765af61 Translate url_utils.js comments to English
Translate JSDoc comments for the getModelCardUrl function from Polish to English for better accessibility and consistency across the codebase.
2026-07-02 04:24:11 +02:00
Dariusz L b7e7b1b295 refactor: centralize getModelCardUrl and HTML/URL utilities in resolver/utils 2026-07-02 04:18:04 +02:00
Dariusz L 86bd6c04fc refactor: centralize model-extension handling and search-cache clearing
- Add clear_all_search_caches() in core/sources/__init__.py and replace 4
  individual cache-clearing call sites in __init__.py with the new helper.
- Add shared parse_civitai_model_path() in core/type_utils.py and use it
  from both CivitAI and CivArchive URL parsers to remove duplicated regex logic.
- Rename parse_huggingface_url() to get_huggingface_repo_and_file_from_url()
  in core/resolver.py for clarity.
- Add stripModelExtension() and hasModelExtension() utilities (with a single
  MODEL_EXTENSIONS_REGEX) in web/resolver/utils/render_format_methods.js
  and replace repeated inline regex patterns across search_panel.js,
  model_info_methods.js, tabs_loaded_methods.js, and queue_methods.js.
2026-07-02 03:57:43 +02:00
Dariusz L 2d2e8b4621 refactor: centralize filename and size utilities across sources
- Introduce get_filename_from_path in path_utils and replace repeated
  os.path.basename calls across core/downloader.py, core/resolver.py,
  core/sources/civarchive.py, core/sources/civitai.py, and
  core/sources/huggingface.py
- Move duplicated inline HTTP response size helpers (_response_file_size,
  _parse_size_header, _parse_content_range_size) into core/type_utils.py
  and update civarchive.py and huggingface.py to import them
- Remove inline normalize_sha256_value from __init__.py and reuse the
  existing normalize_sha256 helper
- Refactor options_methods.js localStorage read/write logic into a
  SETTINGS_MAP-driven loop to reduce repetition
2026-07-02 03:37:44 +02:00
Dariusz L 59e61ba077 refactor: centralize progress reporters, default user-agent, improve error propagation and aria2 fetch usage 2026-07-02 02:54:38 +02:00
Dariusz L f428924ee0 fix: normalize table cell borders in search results
Add border: none reset and restructure border-bottom declarations to
ensure consistent border rendering across search result table cells.
2026-07-02 02:47:12 +02:00
Dariusz L 11ec45526c refactor: consolidate duplicated path and size utilities
Extract MODEL_EXTENSIONS and format_size_bytes into core/type_utils, removing duplicates from workflow_analyzer and downloader. Add getFilenameFromPath to render_format_methods and replace inline path-splitting logic across JS resolver actions, search, and views.
2026-07-02 02:27:53 +02:00
Dariusz L 01f0ea1194 feat: improve hash comparison UX with source labels and success notifications
- Add getHashCompareSourceLabel to normalize source display names
- Add getHashCompareResultName and getHashCompareResultUrl helpers
- Collect and dedupe hash compare matches instead of returning boolean
- Show success notification listing matched sources when local model hash matches online results
2026-07-02 02:18:21 +02:00
Dariusz L 2078d870b3 refactor: centralize path normalization and extract common options task handler
- Introduce normalizePathToForward/normalizePathToBackward helpers in render_format_methods.js
- Replace inline path normalization regex across 6 files with shared helpers
- Extract executeOptionsTask helper in options_methods.js to deduplicate repeated async loading/error/success handling and add missing error notifications
2026-07-02 02:12:40 +02:00
Dariusz L d97450f119 refactor: extract splitter drag logic into shared utility
Replace duplicated inline drag handlers in queue_methods.js and
missing_browser_methods.js with a new startSplitterDrag() helper in
web/resolver/utils/splitter_drag.js.

The utility centralizes pointer/mouse event binding, RAF throttling,
and touch-cancellation cleanup, cutting net code across the two
callers while preserving existing behaviour (bounds, edge-open
threshold, collapse preview, and settle/cleanup timing).
2026-07-02 01:57:37 +02:00
Dariusz L dc7ed980b9 refactor: deduplicate progress tracking and unify hash polling logic
- Introduce JobProgressTracker in __init__.py to consolidate the duplicated
  thread-safe progress/cancellation state and cleanup logic previously
  implemented separately for search and hash jobs.
- Extract shared pollHashCalculation method in model_info_methods.js to
  centralize hash polling, abort checking, and error handling across all
  call sites.
- Use getMissingModelKey in search_panel.js to eliminate inline key
  construction duplication.
2026-07-02 01:50:19 +02:00
Dariusz L d42df98370 Generalize model source linking from CivitAI-only to multi-platform support (CivitAI, CivArchive, HuggingFace, LoRA Archive) with cached metadata lookups 2026-07-02 01:26:54 +02:00
Dariusz L 88cf8580f7 feat: add local model hash calculation with manual-progress notifications 2026-07-02 00:41:40 +02:00
Dariusz L 1128234bbd feat: add local model hash comparison functionality
Implement end-to-end hash comparison for local models and local matches.

Backend:
- Add /model_resolver/local-model-hashes API endpoint
- Add get_local_model_hash_metadata() to read sidecar SHA256 metadata

Frontend:
- Add Compare Hashes context menu item and CSS
- Pass missing_key/missing_search_key through resolveDownloadMethods
- Enhance local match rendering with hash status and context data
- Add hash normalization, formatting, and candidate collection helpers
- Wire compareLocalModelHashesWithCurrentFinding action

Also update HuggingFace author index metadata.
2026-07-02 00:27:59 +02:00
Dariusz L 1c71b609f3 fix: defer base model mapping refresh during batch load
Avoid redundant refreshBaseModelMappingOptions calls when loading saved
mappings by batching the refresh to a single call after all rows are added.
2026-07-01 23:19:02 +02:00
Dariusz L ea97e36532 fix: guard renderModelTreeNodes calls behind expand state to avoid unnecessary rendering 2026-07-01 23:07:32 +02:00
Dariusz L 113c20c566 perf: optimize missing models browser selection updates
Avoid full list re-render on row selection by passing selectionOnly flag
to displayMissingModels, which now selectively updates row classes and
detail pane instead of rebuilding the entire DOM. Also removed an eager
ensureLocalModelsThenPopulate('') call on combo list presence, and added
a click listener alongside focus so the combo list reliably populates on
both interaction types.
2026-07-01 23:00:37 +02:00
Dariusz L d95c099f5a Improve rendering performance and split drag behavior
- Added CSS content-visibility and contain-intrinsic-size to list row
  containers in resolver-main.css and resolver-shell.css for off-main-thread
  rendering optimization.
- Deferred queue list panel split drag updates to requestAnimationFrame in
  web/resolver/actions/queue_methods.js, reducing redundant DOM writes and
  guarding against duplicate frames during split dragging.
- Deferred missing browser split drag updates to requestAnimationFrame in
  web/resolver/views/missing_browser_methods.js with optional chaining on
  split start values, preventing layout thrashing while dragging.
2026-07-01 22:52:17 +02:00
Dariusz L c9d83f6fe1 Remove scrollbar-gutter: stable from resolver pane
The stable scrollbar-gutter was preventing natural layout behavior
in scrollable container by always reserving space for the scrollbar.
Removing it lets the pane use standard overflow-y behavior.
2026-07-01 21:06:48 +02:00
Dariusz L 26d13c1acc feat: enhance logging system with exception level, aliases, and spaced log levels 2026-07-01 20:58:25 +02:00
Dariusz L 22be853f13 Add FATAL log level to logging system 2026-07-01 20:43:32 +02:00
Dariusz L f11f81b152 Merge branch 'main' of https://github.com/Azornes/Comfyui-Model-Resolver 2026-07-01 20:31:27 +02:00
Dariusz L 21b16389e7 refactor: simplify queue panel open/close logic 2026-07-01 20:29:43 +02:00
Dariusz L c7dcdc848a Add ko-fi funding option for Azornes 2026-07-01 20:09:34 +02:00
Dariusz L 0f62d19490 refactor: simplify queue split drag state management
Remove manual cursor and pointer-event state restoration during queue
resize. The drag now relies on the browser default col-resize behavior
and avoids setting body styles or mr-is-resizing-queue. Guard
applyQueueSplitWidth against redundant style writes and drop unused
parameters from beginQueueEdgeDrag, deferQueueSplitReleaseUi, and
startSplitDrag.
2026-07-01 18:05:16 +02:00
Dariusz L 3c4dfc72e4 feat: refactor queue panel and split layout with deferred reveal and pointer events
- Add PointerEvent support for queue toggle, edge drag, and splitter interactions
- Implement deferred queue panel reveal animation (mr-queue-opening class)
- Make queue panel updates demand-driven; skip refresh when panel is hidden
- Replace per-item remove listeners with event delegation on queue list
- Track queue split container width via ResizeObserver with safe fallbacks
- Centralize split flex application and persist queue width/collapsed state with debounce
- Fix missing browser split pane styles to use helper-track CSS variables
- Add deferred UI cleanup for missing browser split drag end
- Add prewarm frame fallback when ResizeObserver is unavailable
2026-07-01 17:58:05 +02:00
Dariusz L c2b074ce12 fix: improve missing browser split pane resize behavior 2026-07-01 01:23:24 +02:00
Dariusz L ef8ff03743 fix: remove forced download path mode reset on template detection 2026-06-30 23:16:44 +02:00
Dariusz L 25e20eea8f feat: add frontend and backend log export in options 2026-06-30 23:14:37 +02:00
Dariusz L f1e863e495 Normalize module name when __name__ contains OS path separators
ComfyUI may set __name__ to hybrid OS-path values (e.g. 'E:\\...\\comfyui-model-resolver.core.sources.model_list'), which broke the existing split-by-dot logic.

This adds a pre-normalization step that converts path separators to dots, strips drive letters and .py extensions, so _normalize_module_name reliably falls back to DEFAULT_MODULE for unknown path-derived values rather than miscounting segments.
2026-06-30 22:33:41 +02:00
Dariusz L 63518e18b4 fix(logger): reset loggers in configure() to apply new config 2026-06-30 22:16:53 +02:00
Dariusz L c6441aa92e feat: add FATAL log level, refactor logging colors and stacklevel
- Add FATAL (50) to LogLevel enum, LEVEL_MAP, and LEVEL_THEME (bright red #E74C3C)
- Drop legacy COLORS dict in favor of LEVEL_THEME RGB values + ANSI_RESET
- Replace hard-coded stacklevel=4 with _INTERNAL_FRAMES constant so caller
  location is always correct regardless of call-chain depth
- Simplify _normalize_module_name by removing redundant path normalization
- Add fatal() to ModuleLogger, AzLogsLogger, and module-level API
- Lazily init _log in path_utils via _get_log() to avoid circular imports
2026-06-30 22:07:15 +02:00
Dariusz L b59be44935 refactor(log): remove legacy standalone log functions and consolidate exports
- Drop manual log_debug/info/warn/error/exception stubs from core/log_system/log_funcs.py
- Remove stale re-exports of create_module_logger/logger from core/__init__.py
- Add core/log_system/__init__.py as the single public entry point for the log system
- Update huggingface-author-index metadata
2026-06-30 21:34:25 +02:00
Dariusz L a7f5f70e3c refactor: migrate logging from global functions to per-module loggers
Replace global log_* wrapper functions with create_module_logger(__name__)
instances across the codebase, enabling proper module-level logger
namespacing. Simplifies core/log_system/log_funcs.py by removing legacy
_normalize_module_path and cleaning up _normalize_module_name. Bumps
log_system config to 2.0.0 and introduces PROJECT_ALIASES for cleaner
log module prefix stripping.
2026-06-30 21:24:33 +02:00
Dariusz L a04c294c55 Bump log_system version to 1.5.7; conditionally resolve use_colors from env/config 2026-06-30 06:00:21 +02:00
Dariusz L 5301bbbb6d Improve log system robustness with safer handlers and simplified color config 2026-06-30 05:35:01 +02:00
Dariusz L cf90841789 feat(log_system/logger): enable Windows console ANSI colors and fix color formatting 2026-06-30 04:28:33 +02:00
Dariusz L 41f0f6c7b4 Use shared global notification container across custom nodes
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.
2026-06-30 01:27:52 +02:00