Commit Graph

29 Commits

Author SHA1 Message Date
Ethanfel 0707a76768 feat(install): handleTrialInstall orchestrator with Manager fallback 2026-06-22 17:48:10 +02:00
Ethanfel a67b628140 feat(install): install-target resolution helpers for missing packs 2026-06-22 17:47:46 +02:00
Ethanfel acaa9f0168 feat(search): draw real node box from disabled-pack source
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
Click a node name (or 'Draw this node') in the mirror-search palette to render
an imitation ComfyUI node box with its real input sockets, widget defaults, and
output sockets. Since disabled packs aren't loaded (no /object_info entry), a
new read-only backend module (node_introspect.py) AST-parses the pack on disk —
never importing or executing it — to recover INPUT_TYPES / RETURN_TYPES from a
literal NODE_CLASS_MAPPINGS. New GET /nodes-stats/node-schema endpoint resolves
the disabled pack dir (handling @version suffixes / case) and returns the schema
off the event loop. Frontend lazily fetches + caches per node, renders sockets
vs widgets with type-colored dots, and falls back to a placeholder for packs
that build their node list dynamically.

End-to-end against the live install: 67/68 disabled packs resolve on disk, ~92%
of nodes render a real box, the rest fall back cleanly. Adds 7 parser unit
tests (36 total green). Bump to 1.6.0.
2026-06-21 15:23:58 +02:00
Ethanfel 77c159a918 feat(search): side preview panel for mirror search + strip stray NUL byte
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
Splits the palette into results (left) + a preview panel (right) that updates
on hover / arrow-key navigation, modern-search style. Since disabled-pack
nodes have no loaded definition (can't render a real node graphic), the panel
shows the pack metadata we do have: title, author, description, repo link,
version, and the sibling nodes in the pack (active node highlighted). Enable
7d / Enable available in both the row and the panel.

buildDisabledCatalog now attaches a shared per-pack meta object (from
getmappings entry[1]) to each catalog entry. Also removes a literal NUL byte
that had slipped into the dedup separator string, which made grep treat the
file as binary; replaced with a newline. Bump to 1.5.0.
2026-06-21 14:49:40 +02:00
Ethanfel 5860b232d4 fix(search): match disabled packs by all identifiers, not repo URL only
Publish to Comfy registry / Publish Custom Node to registry (push) Has been cancelled
getmappings keys packs by dir name/registry id far more often than by repo
URL, so the url-only join found just 7 of 73 disabled packs (71 nodes).
Resolve each getmappings key against every identifier a pack exposes (dir,
id, cnr_id, aux_id, files) like classifyUnresolved does — now 69 packs /
2301 nodes. Bump to 1.4.1.
2026-06-21 14:38:47 +02:00
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 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 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 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 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 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 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 20b88e27b7 Use custom SVG icon directly in menu button
Replace ComfyButton (which rendered as text) with a plain
button using our custom SVG icon, inserted at the same
menu position via app.menu.settingsGroup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:07:31 +01:00
Ethanfel ae2c786d3a Mark removed/disabled packages as uninstalled
Packages that only exist in the DB but are no longer in
NODE_CLASS_MAPPINGS or LOADED_MODULE_DIRS get status
"uninstalled" and appear in a separate greyed-out section
at the bottom of the dialog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 14:00:05 +01:00
Ethanfel 17a27ed5b2 Add 4-tier package classification by usage recency
Packages are now classified as:
- Used: actively used
- Recently Unused (<1 month): too early to judge
- Consider Removing (1-2 months unused): deletion suggestion
- Safe to Remove (2+ months unused): confident removal candidate

Never-used packages are classified based on how long tracking
has been active. Summary bar and sections are color-coded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 13:58:12 +01:00
Ethanfel fcca25397c Move DB writes to background thread and add SVG icon
Record usage in a daemon thread to avoid blocking the event loop
with SQLite fsync on slow storage. Replace text button label with
a bar-chart-with-nodes SVG icon in the legacy menu fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 13:50:11 +01:00
Ethanfel 6d0e5d55ed Use new frontend ComfyButton API for menu button
Adds button via app.menu.settingsGroup using ComfyButton with
bar-chart-2 icon. Falls back to legacy .comfy-menu DOM for
older ComfyUI versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 13:41:39 +01:00
Ethanfel 25f1729f23 Initial commit: ComfyUI node usage stats tracker
Tracks every node used in every prompt submission via SQLite,
maps class_types to source packages, and exposes API endpoints
and a frontend dialog for viewing per-package usage stats.

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