Add README with installation, usage, and API docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-22 13:31:13 +01:00
parent 25f1729f23
commit b5b046dd07

98
README.md Normal file
View File

@@ -0,0 +1,98 @@
# ComfyUI Node Usage Stats
A ComfyUI custom node package that silently tracks which nodes and packages you actually use. Helps identify never-used packages that are safe to remove.
## Features
- Tracks every node used in every workflow execution
- Maps each node to its source package
- SQLite storage for efficient querying
- Per-package aggregated stats (total nodes, used/unused, execution counts)
- Frontend dialog with never-used packages highlighted for removal
- Expandable rows to see individual node-level stats within each package
## Installation
```bash
# Symlink into your custom_nodes directory
ln -s /path/to/Comfyui_nodes_stats /path/to/ComfyUI/custom_nodes/comfyui-nodes-stats
```
Restart ComfyUI. Tracking starts immediately and silently.
## Usage
### UI
Click the **"Node Stats"** button in the ComfyUI menu. A dialog shows:
- Summary: how many packages are never-used vs used
- **Never Used** section (highlighted) — safe to remove
- **Used** section sorted by least-to-most executions
- Click any row to expand and see individual node stats
### API
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/nodes-stats/packages` | GET | Per-package aggregated stats |
| `/nodes-stats/usage` | GET | Raw per-node usage data |
| `/nodes-stats/reset` | POST | Clear all tracked data |
Example:
```bash
curl http://localhost:8188/nodes-stats/packages | python3 -m json.tool
```
### Package stats response format
```json
[
{
"package": "ComfyUI-Impact-Pack",
"total_executions": 42,
"used_nodes": 5,
"total_nodes": 30,
"never_used": false,
"last_seen": "2026-02-22T12:00:00+00:00",
"nodes": [
{
"class_type": "SAMDetectorCombined",
"package": "ComfyUI-Impact-Pack",
"count": 20,
"first_seen": "2026-01-01T00:00:00+00:00",
"last_seen": "2026-02-22T12:00:00+00:00"
}
]
}
]
```
## File Structure
```
__init__.py # Entry point: prompt handler, API routes
mapper.py # class_type -> package name mapping
tracker.py # SQLite persistence and stats aggregation
js/
nodes_stats.js # Frontend: menu button + stats dialog
pyproject.toml # Package metadata
```
## How It Works
1. Registers a prompt handler via `PromptServer.instance.add_on_prompt_handler()`
2. On every prompt submission, extracts `class_type` from each node
3. Maps each class_type to its source package using `RELATIVE_PYTHON_MODULE`
4. Stores per-node counts and timestamps in SQLite (`usage_stats.db`)
5. Also logs the full set of nodes per prompt for future trend analysis
## Data Storage
All data is stored in `usage_stats.db` in the package directory. Two tables:
- **node_usage**: per-node counts, first/last seen timestamps
- **prompt_log**: JSON array of nodes used per prompt, with timestamp
Use `POST /nodes-stats/reset` to clear all data.