LC Label ๐ท๏ธ
The workflow annotation node that behaves like a Word text box
Nobody installs a node pack for labels, and then everybody ends up using them. The most-upvoted sentiment in the entire plumbing discussion is just somebody saying they can't stand messy noodles and need to see what connects where. Six months after you build a good graph, the difference between "a workflow" and "a wall of grey boxes" is whether you wrote anything down.
LC Label is a text box drawn on top of the canvas. No title bar, no sockets, no execution - it doesn't do anything, which is the point. Double-click it and you get a settings dialog with text, font, size, bold/italic, alignment, colour, outline, shadow and a background fill. Then you drag it where you want it.
How it works
The label is drawn as HTML above the canvas in web/lc_label.js, not inside the LiteGraph canvas. Two consequences worth knowing, because they're the reason this is nicer than a stock group or a reroute-with-text:
- It can't be buried. Nodes and links draw under it, so an image preview or a fat sampler node never covers your note.
- Clicks still behave. Because it's a real DOM overlay rather than a canvas widget, it selects, drags and pins like an ordinary node - and when it's pinned, clicks pass through it to whatever is underneath.
The manipulation is where it earns its keep. Select it and you get a round rotate handle above it, like Word or Paint. Dragging snaps to 5ยฐ, with a magnet at 0ยฐ, 90ยฐ and 180ยฐ so it settles straight - Shift for 15ยฐ steps, Alt for free rotation. Drag a corner to scale, and the opposite corner stays put, so a label anchored somewhere doesn't slide out from under you. Type an exact angle in the settings if you're fussy.
Text wrapping is a real handle, not a hack: drag a side handle to set a wrap width and the text reflows into a column. Stuck with a wrap you don't want? Wrap width 0 in settings returns it to auto-sizing.
The four bundled fonts - Bebas Neue, Oswald, Permanent Marker and Pacifico - ship inside web/fonts with their licenses (three SIL OFL 1.1, Permanent Marker Apache 2.0), and each one previews in its own typeface in the dropdown, which sounds trivial until you've picked a display font blind.
Inputs and outputs
Neither. The node class has no inputs, no outputs and no function to speak of - it's an output node only so ComfyUI is happy to keep it in the graph. Everything you configure lives on the JS side and serialises into the workflow JSON.
Practically: pin it (right-click โ Pin) for a title or a watermark you don't want to keep clicking on. Pinned, the only way to grab it again is Ctrl+drag a selection box around it - which is exactly the behaviour you want for a label sitting over the nodes you do work in.
Install
Manager โ ComfyUI LC123 Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git
Restart. No pip step, no requirements.txt. Since the entire node is frontend, hard-refresh your browser after any pack update or you'll keep seeing the old label code and wonder why the fix didn't work.
Common issues
"I can't select it any more." You pinned it. That's the feature: clicks pass through to the canvas, so it stops eating the clicks you meant for the nodes under it. Ctrl+drag a box around it to select it again.
The font isn't the one you picked. Bundled fonts load from the pack's own web/fonts; a stale browser cache is the usual cause. Hard-refresh. If you built a workflow with a bundled font and someone else opens it, they need the pack installed for it to render as intended.
It vanished from the saved workflow. It shouldn't - the label's config is stored in the node itself, so it travels with the graph. But note it is a node, so anything that deletes or replaces nodes (some workflow-cleanup tools, a paste that dropped it) takes the label with it. Grep the JSON for "LCLabel" if you're not sure.
"Why not use rgthree's Label, or just a Group title?" rgthree's label has been through the Nodes 2.0 rendering mess like the rest of that pack, and a Group title is stuck to a rectangle with no rotation, no outline, no per-label font. If you keep your annotations inside the canvas and never rotate them, the alternatives are fine. If you want a caption that reads like a caption - angled, styled, sitting over the mess - this is the one that behaves.
Inputs (0)
No inputs
Outputs (0)
No outputs