Radar Weights Node
Set a Stack of LoRA Weights by Dragging a Spider Chart
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Radar Weights Node is a custom widget that drops an actual interactive radar chart onto your ComfyUI graph. You drag the blue points in and out, and it spits out up to ten FLOAT values you can wire anywhere. If you've ever stacked three LoRAs, fiddled with a bank of ControlNet or IP-Adapter strengths, or tried to balance regional prompt emphasis, you know the alternative: a row of tiny number widgets you keep editing while you re-roll. This makes all of them one gesture.
It's a nicety node - pure convenience, no models, no API keys, no GPU work. You install it because a workflow gets better to drive, not because it unlocks a new capability, the same way packs like rgthree-comfy exist purely to keep big graphs workable.
How it works
There are two halves talking to each other. The front half is a JavaScript extension shipped in the pack's js/ folder (ComfyUI serves it via WEB_DIRECTORY). It draws the radar on the node's canvas - gray axis lines, four dotted reference circles at 0.5, 1.0, 1.5 and 2.0, and a blue data polygon connecting your control points.
The clever part is how dragging gets back to Python. ComfyUI's frontend can't just set a widget value and have the backend see it mid-run, so the node registers its own local HTTP endpoint, POST /radar_weights/update_weights, through ComfyUI's PromptServer. Release a point and the JS posts the weights; the backend stores them in a dict keyed by node ID and writes them to storage/radar_weights_weights.json inside the pack's folder. An IS_CHANGED hash on the node ID, axes_count, and the stored weights tells ComfyUI to re-execute the graph when you've dragged something. That round-trip is why values survive a queue run - and, per the README, even a restart, since they're persisted to disk.
Output values range from 0.0 at the center to 2.0 on the outermost ring, rounded to two decimals. So you get 0.65, not 0.6499999.
The inputs and outputs that matter
There's exactly one input: axes_count, an INT with a range of 3–10 and a default of 5. Bump it and the chart redraws with that many axes, and the outputs update to match.
Outputs are ten FLOAT ports named 1 through 10, and here's the trap: the node always exposes all ten, but only the first axes_count are live. The inactive ones hard-return 0.0. So if you're running 5 axes and wire output 8 into something thinking it'll give you a weight, you get zero and your result silently breaks. With 5 axes, outputs 1–5 are yours; the rest are dead weight. Outputs read clockwise starting at the top (12 o'clock) of the chart.
Because they're plain floats, they plug into anything that takes a float: LoRA strength inputs, ControlNet or IP-Adapter strength fields, conditioning weight multipliers. There's no dedicated "LoRA" node here - you connect an output to whatever strength port you want, exactly as the README's sample workflow shows.
Install
The real way, from the README - it's a trivial install with zero Python dependencies and no model files:
cd ComfyUI/custom_nodes
git clone https://github.com/FunnyFinger/ComfyUi-RadarWeightNode.git
Then restart ComfyUI. The node appears under Add Node → Spider/Widgets → Radar Weights Node. If you use ComfyUI Manager, searching "Radar Weights Node" finds the same pack. The pyproject.toml lists an empty dependency list, so there's nothing to pip install - the only thing that can go wrong is forgetting the restart, because the radar widget is JavaScript that only loads on startup.
Where people get burned
The zero-fill on unused outputs is the biggest one - don't connect port 6+ unless you raised axes_count past 5.
Persistence can also surprise you. Weights are stored per node instance ID in storage/radar_weights_weights.json inside the pack's folder. That's handy for restarts, but it means a saved workflow can silently carry along whatever you last dragged, even after you copy a node or rebuild a graph. If a workflow "remembers" weights you don't want, that JSON file is the state - delete it (or the node) to reset to 1.0 everywhere.
Finally, a KB-grounded caveat: heavy custom-canvas widgets like this are exactly the class of node the ComfyUI frontend rewrite (Nodes 2.0) has historically roughed up. If the radar renders wrong on the new canvas, the legacy canvas is still there as the escape hatch for precisely this kind of extension. It's a young, low-traffic node too, so don't expect breakage to be patched overnight - file an issue and move on.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| axes_count | INT | 53–10 | — |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| 1 | FLOAT | — |
| 2 | FLOAT | — |
| 3 | FLOAT | — |
| 4 | FLOAT | — |
| 5 | FLOAT | — |
| 6 | FLOAT | — |
| 7 | FLOAT | — |
| 8 | FLOAT | — |
| 9 | FLOAT | — |
| 10 | FLOAT | — |