Sits next to Disable All. Calls queuePromptSafely() — which tries
app.queuePrompt(0) first, then falls back to clicking the canvas-side
Run button if the API shape isn't available.
Distinct green styling (#2d7d46) so it doesn't blend with the blue
Enable/Disable buttons. Queues the prompt using whatever groups are
currently enabled, same as ComfyUI's own Run.
Lets users define a workflow sequence (step 1 → step 2 → ...) by
dragging rows in the panel. Order is independent of rgthree's
auto-sort and persists across reloads.
How it works:
- Each row gets draggable="true" + HTML5 DnD handlers.
- On drop, reorderGroup(moving, target, before|after) computes the new
ordering, writes it to localStorage (ORDER_KEY), and re-renders.
- Drop indicator: inset top/bottom box-shadow in the accent color
showing where the dragged row will land.
- sortByCustomOrder() applied at the end of getNavigableGroups so the
matchColors filtering still happens first.
- Groups not yet in the saved order keep relative order and end up
after listed ones. New groups auto-append on the next reorder write.
Shortcut badges follow the new order — 1..9 always map to the first 9
rows as they appear in the panel, so dragging a group to the top
assigns it shortcut "1" (assuming no custom override).
Settings panel gains two reset buttons: "Reset row order" (just the
order) and "Reset all settings" (colors + shortcuts + order).
Two issues:
1) Enabled rows now have a visual indicator beyond the toggle pill:
- Bold title text tinted toward the accent color
- Left edge stripe in the accent color (via inset box-shadow)
- Subtle gradient wash from the accent color into the row bg
All driven by --cnv-accent so it picks up the user's custom color.
Applied at render time AND on every periodic sync so external
toggles (via the canvas muter directly) update the panel too.
2) Shortcut edits weren't persisting. Root cause: I only attached a
"change" event listener to the shortcut list, and text inputs only
fire change on blur. So typing a key char then immediately picking a
group from the select could lose the unsaved key value when the
panel closed without the input ever blurring.
Fix: also attach an "input" listener — fires per keystroke for text
inputs and on selection for selects. Either path now persists.
Header now distinguishes click vs drag:
- mousedown → mouseup with <4px total movement = treated as a CLICK,
toggles collapse (same as clicking the arrow)
- More movement = actual drag, keeps existing behavior
- Threshold avoids accidental toggling during tiny mouse jitters
Also enlarged the collapse arrow button: bigger font, padded box with
border + background tint, easier to hit. Either gesture (header click
or arrow click) does the same thing now.
Click the ⚙ button in the toolbar → settings slide down between toolbar
and group list.
Colors (4 pickers, live preview, persist to localStorage):
- Body background (defaults to rgthree teal #0e283f)
- Header bar (#1e4f88)
- Accent / toggle ON (#2864ad)
- Row hover (#163657)
All panel styling now reads from CSS custom properties so the live
update is just panel.style.setProperty(key, value).
Keyboard shortcuts (overrides defaults):
- Add rows one at a time: type a key char, pick a group from a dropdown
- × button removes a row
- Empty list = defaults restore (1..9 → first 9 groups by order)
- Single-key only (a-z, 0-9). Modifier keys ignored (Ctrl/Meta/Alt).
Reset button wipes both localStorage entries and rebuilds settings UI
with defaults.
Refactored onKeyDown to go through resolveShortcut() so the same code
path handles defaults and user overrides.
Per user feedback:
- REMOVE filter / search input — wasn't useful for 15 groups
- REMOVE color dot — was confusing, looked like a status indicator
but did nothing
- REMOVE "Enable " prefix on row titles — just show the group name
- REMOVE → jump button per row — clicking the row body already jumps
- REMOVE ⋯ menu per row — its actions weren't pulling weight
- REMOVE right-click context menu — same reason
- ADD toolbar between header and list:
[Enable All] [Disable All] [⚙ Settings]
Enable All / Disable All flip every widget in every muter at once.
Settings opens an alert stub for now — actual color + shortcut
customization will land in v0.3.1.
Net result: each row is just `Group Name [N] [toggle pill]`.
Click toggle pill = flip. Click anywhere else on the row = jump.
Bumped to 0.3.0 (breaking UI change).
After realizing the canvas-Floater approach can't escape canvas zoom
(pinned canvas nodes always scale with ds.scale, making them unusable
when panned out), pivoted back to this DOM-overlay panel. It naturally
renders at constant size regardless of zoom.
This commit just makes the panel LOOK like rgthree's muter so it doesn't
feel like a separate UI:
- Dark blue card with rgthree-style blue header bar
- Each row: color dot + "Enable {Group Name}" + toggle pill + → + ⋯
- Toggle pill is a real pill: rounded rectangle with "no"/"yes" label
and a glowing knob that pulses when on (matches rgthree muter visuals)
- Alternating row backgrounds for readability
- Toggle pill is bidirectionally wired to the corresponding rgthree
widget — flip in panel → muter widget toggles → panel pill animates
(and vice versa via the existing 600ms sync)
Bumped CNV_VERSION to 0.2.0.
Each row in the panel is now a real two-way toggle wired to the
corresponding widget on rgthree's Fast Groups Muter. Click the checkbox
in the panel → muter widget flips. Toggle the muter widget directly on
the canvas → panel checkbox catches up on the next poll (600ms). Save +
load works because all state still lives in rgthree.
Per row layout:
[checkbox] [color dot] Group Name [shortcut N] [→ jump] [⋯ menu]
Click body of row = jump. Explicit → button = same jump (visible
affordance). ⋯ opens the same context menu as right-click. Groups with
no managing muter render a dashed placeholder where the checkbox would
be (visual signal: "this group is unmanaged").
Kept: drag-to-reposition, collapse, search, matchColors filter (only
groups in the primary muter render), keyboard 1-9 = jump, version
marker, all rgthree integration (single-muter Solo, all-muter Reset).
Bumped to v0.1.0 since the row contract changed.
JS-only ComfyUI extension. Floating right-anchored panel that:
- Auto-lists every LGraph group in the current workflow
- Click row → animated pan+zoom to fit the group on screen
- Search box at the top filters by title
- Right-click row → Solo run / Center / Reset
- Solo uses rgthree's Fast Groups Muter (driven via widget callbacks)
when present; otherwise falls back to node.mode = NEVER on every node
outside the soloed group's bounds
- Keyboard 1-9 jumps to the first nine groups
- Panel is draggable; position + collapsed state persisted to localStorage
- Hidden when graph has < 2 groups
No Python node, no drawNode hooks, no view-filtering — only canvas pan/zoom
+ rgthree widget poking + node.mode flag setting. None of the fragile
internal hooks that comfyui-tabs depended on.