3.3 KiB
3.3 KiB
Migration Plan: Comfy-Org/ComfyUI-React-Extension-Template
Repo is being updated to match the Comfy-Org/ComfyUI-React-Extension-Template pattern,
adding a React/TypeScript Style Mixer UI alongside the existing custom nodes.
Steps
✅ Step 0 — Save this plan (first order of business)
✅ Step 1 — Clean up the Python layer
- Save plan to
PLAN.md - Delete broken tests (
tests/test_immac_tools.py— asserts old-style class attributes that don't exist onio.ComfyNode) - Remove dead dict registration from
src/immac_tools/__init__.py(NODE_CLASS_MAPPINGS,NODE_DISPLAY_NAME_MAPPINGS,WEB_DIRECTORY) - Remove unused
ExampleForwardingExtensionfromsrc/immac_tools/forwarding_nodes.py
✅ Step 2 — Rewrite root __init__.py to match the template pattern
- Restore
NODE_CLASS_MAPPINGS+NODE_DISPLAY_NAME_MAPPINGS(required by ComfyUI core and Manager;comfy_entrypointalone doesn't surface nodes universally yet) - Wire
comfy_entrypointtosrc/immac_tools/nodes.py(forward-compat) - Register aiohttp static routes to serve
dist/immac_style_mixer/at/immac_style_mixer/ - Register
nodes.EXTENSION_WEB_DIRS[project_name]usingcomfy_config(with fallback)
✅ Step 3 — Add Style Mixer REST API (src/immac_tools/api.py)
style_mixer_data.jsonload/save helpersGET /immac_style_mixer/api/dataPOST /immac_style_mixer/api/data(with basic structural validation)- Routes wired into root
__init__.pyviaregister_routes() - Images handled by ComfyUI built-ins (
/upload/image+/view)
✅ Step 4 — Update pyproject.toml
- Change
includes = []→includes = ["dist/"] - Remove
[build-system]/[tool.setuptools]blocks
✅ Step 5 — Scaffold ui/ (React + TypeScript + Vite)
ui/package.jsonui/vite.config.ts— output →../dist/immac_style_mixer/ui/tsconfig.json+ui/tsconfig.node.jsonui/src/main.tsx— registers ComfyUI sidebar tabimmac-style-mixerui/src/components/StyleMixerPanel.tsx— placeholder- Build verified (
npm run build✔)
✅ Step 6 — Build UI components
types.ts—Style,Mix,MixEntry,StyleMixerDatahooks/useStyleMixerData.ts— fetch/save via API;uploadStyleImage()+styleImageUrl()helperscomponents/StyleCard.tsx— image upload (drag&drop/picker), editable name & prompt, favorite star, deletecomponents/MixCard.tsx— name, radio to activate, style entries (ON/OFF + weight + remove), add-style dropdown, favorite starcomponents/StyleGallery.tsx— sorted grid (favorites first), inline "Add" formcomponents/StyleMixerPanel.tsx— Current Mix / Mixes / Styles sections wired to data hook- Build verified (
tsc && vite build✔)
Step 7 — GitHub Actions CI ← currently here
.github/workflows/react-build.yml— on push tomain:npm ci+npm run buildinsideui/
Key Decisions
- Single
POST /immac_style_mixer/api/dataendpoint for all persistence (minimal backend; expand later) - Sidebar tab (not floating window) for the panel
dist/tracked in git — required for registry publishing viaincludes = ["dist/"]- Styles are user-defined strings (prompt text snippets)