Commit Graph

61 Commits

Author SHA1 Message Date
Ethanfel a8fb5ae8b4 feat(search): toolbar button + hotkey to open mirror search 2026-06-21 14:27:46 +02:00
Ethanfel 0dfa14384d feat(search): mirror search palette UI + enable actions 2026-06-21 14:27:14 +02:00
Ethanfel 8c35ac6f09 feat(search): catalog ranking + filter helpers 2026-06-21 14:26:20 +02:00
Ethanfel b6635c9f3e feat(search): build disabled-node catalog from getmappings x getlist 2026-06-21 14:25:35 +02:00
Ethanfel fb3a785027 refactor: extract enablePackage core from handleEnable 2026-06-21 14:25:08 +02:00
Ethanfel 8cb0e32739 docs: implementation plan for disabled-node mirror search
6-task frontend-only plan: extract shared enablePackage core, build the
disabled-node catalog (getmappings x getlist), ranking/filter helpers, the
palette UI, toolbar button + hotkey, and docs/version. Manual verification
(no JS harness) + node --check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 14:15:16 +02:00
Ethanfel aa2f1f62bf docs: design for disabled-node mirror search
Approved design: a standalone search palette (toolbar button + hotkey) over
nodes belonging to disabled packs, built frontend-only by joining Manager's
getmappings x getlist, with Enable 7d / Enable actions reusing the trial
feature. Native-search injection is infeasible (bundled frontend), so this
runs alongside as a mirror.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 14:12:25 +02:00
Ethanfel 62e4b9df8c fix(workflow): skip Manager queue ops when Manager is mid-operation
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
2026-06-21 13:00:35 +02:00
Ethanfel 7cd67cdda1 docs: document workflow tab + trial-enable; bump to 1.3.0 2026-06-21 12:55:18 +02:00
Ethanfel c6601bc86f feat(workflow): auto-disable expired trial packages on load 2026-06-21 12:54:02 +02:00
Ethanfel c7b06f5906 feat(workflow): missing nodes defer to ComfyUI Manager installer 2026-06-21 12:52:31 +02:00
Ethanfel 427a509e4c feat(workflow): enable temporary (7d trial) / permanent actions 2026-06-21 12:48:38 +02:00
Ethanfel fed626685b feat(workflow): workflow tab UI + auto-open on load 2026-06-21 12:45:49 +02:00
Ethanfel 743741afc6 feat(workflow): classify unresolved nodes into disabled vs missing 2026-06-21 12:38:48 +02:00
Ethanfel b5e7bf204d feat(workflow): detect unresolved node types on workflow load 2026-06-21 12:36:18 +02:00
Ethanfel 9127f8121d feat(trials): boot tick, usage reset hook, and trial routes 2026-06-21 12:28:36 +02:00
Ethanfel c53fdd8560 feat(trials): stop_trial and clear trials on reset 2026-06-21 12:27:37 +02:00
Ethanfel 4ebad1bd6c feat(trials): reset_trials_for zeroes counter on use 2026-06-21 12:27:05 +02:00
Ethanfel 69eef149eb feat(trials): tick_boot_days counts distinct boot-days 2026-06-21 12:26:31 +02:00
Ethanfel 7b5fb32b31 feat(trials): add trial_packages table, start_trial, get_trials 2026-06-21 12:25:52 +02:00
Ethanfel caaaaa3b24 docs: implementation plan for workflow tab + trial-enable
Bite-sized TDD plan (13 tasks): backend trial state + boot tick + routes,
a spike to verify Manager's enable payload, frontend detection/tab/actions/
expiry, and docs/version. Backend is fully test-driven; frontend is
manual-verify (no JS harness).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 12:01:29 +02:00
Ethanfel 1a2bd2bcef docs: design for workflow tab + temporary trial-enable
Approved brainstorming design: a Workflow tab that splits a loaded
workflow's unresolved nodes into Missing (defer to Manager) and Disabled
(enable temporarily under a 7 distinct-boot-day rolling trial, or
permanently). Backend tracks trial state and counts boot-days; frontend
drives Manager enable/disable (Approach A).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 11:58:45 +02:00
Ethanfel 472ce00dc4 fix: build disable payload from getlist state, not commit hash
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
The disable action failed for git/nightly-installed packs (e.g.
masquerade-nodes-comfyui): /customnode/installed reports a git commit hash
as the version and the cnr_id as id, but ComfyUI Manager's disable endpoint
needs the install *state version* ("nightly"/semver/"unknown") and the
directory name as id.

Switch fetchManagerInfo to /customnode/getlist (the unified list Manager's
own UI uses), key by directory name, and build the payload as
{id: dirname, version: state, files?: repo}. Eligibility/reconciliation now
key off pack state instead of an enabled flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 11:27:33 +02:00
Ethanfel 5df56bc643 tools: add model-folder scan diagnostic
Standalone, read-only script that measures ComfyUI's boot-time model-folder
scan the same way folder_paths does (os.walk + getmtime per dir), ranks
folders by cost, detects network mounts and their actimeo/cache options, and
names the worst offender. Helps diagnose slow "scanning model folders" boots.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 11:13:48 +02:00
Ethanfel 0842c574d6 chore: add .gitignore for caches and local data
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
Ignore __pycache__, *.pyc, .pytest_cache, .benchmarks, and *.db files.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 10:37:41 +02:00
Ethanfel ba7f503e7d feat: disable unused packages via ComfyUI Manager
Add per-package and per-section "Disable" buttons on the Safe to Remove
and Consider Removing tiers. Uses ComfyUI Manager's queue API
(/customnode/installed, /manager/queue/disable|start|status) to move
packages into custom_nodes/.disabled, reconciling against Manager's
actual state and surfacing a restart banner. Hidden when Manager is
absent.

Also:
- tracker: extract shared _classify_age() recency helper (DRY), add tests
- js: centralize STATUS_META, replace inline hover handlers with CSS,
  de-duplicate summary bar
- bump version to 1.2.0, update README

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 10:36:19 +02:00
Ethanfel 4ccc772bb9 chore: bump version to 1.1.0
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:47:17 +02:00
Ethanfel 777e4890ae docs: update README for model tracking feature
Document new Models tab, /nodes-stats/models endpoint, model_usage
table, updated How It Works diagram, and file structure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:43:21 +02:00
Ethanfel 9477777124 fix: scope input-scanning loop inside per-node try/except in extract_models_from_prompt
If INPUT_TYPES() succeeded but returned a non-dict, the inner loop
calling input_types.get() would raise AttributeError outside the guard,
aborting model tracking for the entire prompt. Moving the loop inside
the try/except means only the offending node is skipped via continue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:34:10 +02:00
Ethanfel 831ed302e9 fix: update model_type on upsert conflict and scope close button to dialog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:20:18 +02:00
Ethanfel c7003df0bb fix: scope badge querySelector to dialog, update dialog title 2026-04-09 18:14:01 +02:00
Ethanfel bf5c8683a7 feat: add Models tab with per-type usage stats 2026-04-09 18:11:52 +02:00
Ethanfel 18d098a0da fix: add independent exception handling to _record_prompt 2026-04-09 18:08:53 +02:00
Ethanfel ed39c5918a feat: extend prompt handler and add /nodes-stats/models endpoint 2026-04-09 18:04:16 +02:00
Ethanfel 38e95c150a fix: atomic ModelMapper build and isolate test NODE_CLASS_MAPPINGS mutations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:03:16 +02:00
Ethanfel 9891b3ec41 feat: add ModelMapper with folder_paths introspection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:00:06 +02:00
Ethanfel ff42016009 test: add tier coverage for safe_to_remove and consider_removing 2026-04-09 17:58:26 +02:00
Ethanfel 800692d190 feat: add model_usage table and tracker methods
Adds model_usage schema, record_model_usage(), get_raw_model_stats(), and get_model_stats() to UsageTracker, with reset() support and 8 passing tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 17:55:27 +02:00
Ethanfel 70edeb0631 fix: configure folder_paths mock to prevent disk pollution in tests 2026-04-09 17:53:18 +02:00
Ethanfel 3ed778a0d6 test: add conftest with ComfyUI module stubs 2026-04-09 17:47:16 +02:00
Ethanfel b852c37786 Fix 3 bugs in model tracking plan
- Add conftest.py task to stub ComfyUI modules for tests
- Move extract_models_from_prompt into background thread
- Replace window.nsShowTab with local switchTab + addEventListener

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 17:43:08 +02:00
Ethanfel 901e3b722d Add model tracking implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 17:39:54 +02:00
Ethanfel ab204056a0 Add model tracking feature design doc
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 17:36:36 +02:00
Ethanfel 2387a8d8ef Store usage database in ComfyUI user directory
Moves the SQLite database from the extension folder to
ComfyUI/user/nodes_stats/ so stats survive reinstalls.
Automatically migrates existing data on first load.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:51:28 +01:00
Ethanfel 35560bceb0 Fix package name extraction for nested module paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 19:13:08 +01:00
Ethanfel b56687158d Improve summary badge click handling and accessibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 18:59:13 +01:00
Ethanfel c50a0a64d2 Set publisher ID and repository URL
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:35:13 +01:00
Ethanfel 7c8d402311 Add GitHub Actions workflow for registry publishing
Automatically publishes to Comfy registry when pyproject.toml
is updated on master. Can also be triggered manually.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:32:25 +01:00
Ethanfel 71fdcbdfd6 Make package exclusion case-insensitive
Directory names vary depending on how users clone or symlink
(e.g. ComfyUI-Manager vs comfyui-manager).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:15:02 +01:00
Ethanfel ca01871cf6 Exclude ComfyUI-Manager and node-stats from package list
These are management/meta tools, not workflow node packages.
Showing them in the stats would be confusing since they're
never used in actual workflows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:14:08 +01:00