FF Group Positioner
Snap a whole node group to your cursor with one key
- status
Every ComfyUI power user has the same arc: your workflow starts as a neat little graph and ends as a sprawling thing you have to scroll for minutes to find anything in. FF Group Positioner does one thing about that - point your mouse anywhere on the canvas, press a key, and the group you named gets moved so its center lands under your cursor. Whole group, all its nodes, in one jump. No pixels are generated, no model is loaded; this is a pure canvas-quality-of-life tool in the same family as rgthree's group muters and reroutes. It doesn't make your images better, it makes you faster.
How it actually works
The node you drop into the graph is half the story. When it runs, the Python side writes a small config - group name, shortcut key, enabled flag - to web/config/group_positioner.json inside the pack folder. The other half is a browser extension that ships with the pack: it watches your mouse position, polls that config file (and reads your node's widgets directly), and on the right keypress converts your cursor from screen coordinates into canvas coordinates using ComfyUI's own canvas.convertEventToCanvasOffset(). That conversion is the whole hard part - the README is essentially a postmortem of a version where it was broken and had to be restored using the same method Crystools and other extensions use.
Once triggered, it finds the group by exact name and moves the group object, dragging along every node whose bounds are fully inside the group. A recent commit tightened this from "intersecting" to "fully contained" on purpose, so a node that straddles the group edge stays behind rather than getting dragged along accidentally.
The three inputs that matter
- group_name - must match the group's title exactly, case-sensitive. The default is literally three handbag emojis (
👜👜👜); you will change it. - shortcut_key - default
5. Single keys (5,F8,a) or combos likeCtrl+Shift+GandAlt+F1. - enabled - master on/off for the shortcut. Defaults to on.
The single output, status, is just a confirmation string ("Group positioner configured: X -> 5 (enabled)"). It's marked as an output node, but you don't wire it anywhere - think of it as a settings panel that happens to live in the graph.
Install
Either ComfyUI Manager (search "comfyui-flipflopnodes" or just "FlipFlop") or the manual route, then restart:
cd ComfyUI/custom_nodes
git clone https://github.com/fredhopp/comfyui-flipflopnodes.git
There are no model downloads and no real dependencies - the pack's requirements.txt lists pillow/numpy/torch/piexif, but those already ship with ComfyUI and nothing here imports piexif at all.
Where people get burned
The shortcut listener is global - there's no "is the user typing in a text box?" guard. Press 5 while editing a seed or typing a number into a prompt and your group will jump. This is the first thing that bites, and it's why you should change the key to something like F8 or Ctrl+Shift+G right away.
Other real gotchas:
- Group not found - spelling is case-sensitive. Check the group exists and the name matches exactly; the extension logs available groups to the browser console (F12) to help.
- One config, shared - there's a single config file for the whole install. If you drop two Positioner nodes into one workflow, they fight over it and the last one to run wins. One node is the intended usage.
- Config lives in the pack folder - a
git pullor reinstall can wipe your settings back to defaults. - Straddling nodes stay put - with the fully-contained detection, anything not completely inside the group bounds won't move. Predictable, but it can surprise you on loose groupings.
Honest verdict: if you assemble large graphs and spend real time arranging groups, this is a nice little timesaver. If your workflows fit on one screen, skip it. It's a one-dev hobby utility - genuinely useful, barely known, and exactly the kind of thing you won't find much community discussion about.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| group_name | STRING | 👜👜👜 | — |
| shortcut_key | STRING | 5 | — |
| enabled | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |