Files
2026-03-23 16:40:53 -05:00

62 lines
2.8 KiB
Markdown

## Project
ComfyUI Node Organizer. Frontend-only custom node extension loaded from `dist/` through `__init__.py`.
## Start Here
Inspect `README.md`, `package.json`, `src/index.ts`, `src/adapter.ts`, and the relevant file under `src/layout/` or `tests/e2e/`.
Use `.changeset/plans/` only when prior design context is needed.
## Common Commands
```bash
pnpm install
pnpm build
pnpm typecheck
pnpm test
pnpm setup:e2e
pnpm test:e2e
pnpm ci:local
uv sync --locked --group dev
```
Version bumping:
- `uv run bump-my-version bump patch|minor|major`
## Repo Rules
- Build before E2E. ComfyUI loads `dist/`, not `src/`.
- Use `uv` for Python-side commands.
- Keep `.python-version` and `uv.lock` in sync with the publish workflow.
- Local `.changeset/*` files are intentionally gitignored. Do not commit them.
- Verify runtime behavior in ComfyUI before changing adapter logic or making claims about ComfyUI APIs.
## Runtime Facts
- Ctrl+Z works after organize. ComfyUI snapshots graph state before extension mutations.
- Keybindings are managed in ComfyUI's keybinding settings, not inside this extension's settings panel.
- Graph access: `canvas.getCurrentGraph?.() ?? canvas.graph ?? app.graph`.
- Group membership is geometry-based. Use center-point containment for nodes and full-rect containment for child groups. Do not read `_children`.
- Do not call `recomputeInsideNodes()`. It reads stale coordinates after our in-place `pos[0] = x` updates and fills `_children` with wrong node IDs.
- Group layout IDs are namespaced as `group:<id>`.
- Selected-group organize re-anchors selected root groups to their original absolute positions.
- Subgraph `inputNode` and `outputNode` are first-class layout nodes.
- `isGroup()` is verified against live runtime with `constructor.name === "LGraphGroup"` and fallback `typeof type !== "string"`.
## Test Facts
- Unit: layout framework, adapter bridge, runtime helpers, property-based invariants.
- E2E: Playwright against `.test-comfy/`.
- `pnpm setup:e2e` pins ComfyUI to the revision in `e2e.config.ts` for CI parity.
- CI and publish run the full Playwright suite on Linux.
- Repo-owned fixtures live flat in `tests/fixtures/`.
- Installed `comfyui-workflow-templates` are discovered live at E2E runtime from the pinned test ComfyUI environment.
- Broad installed-template coverage asserts correctness invariants only; strict topological order remains repo-fixture-only.
- Visual regression is graph-canvas scoped and uses platform-specific `-win32` / `-linux` baselines.
- `pnpm ci:local` covers unit/build parity only.
## Known Friction
- Some real ComfyUI workflows load with imperfect group rectangles. Verify against live runtime before changing containment behavior.
- A small number of real installed templates have topological-order violations due to complex inter-group connections. Tracked for v2.1.