π BV Subgraph Heading
A bold header node that labels sections of your graph β and your subgraph
- _
BV Subgraph Heading renders a bold header text inside a node, so you can label sections of your graph without hunting through a sea of same-shaped boxes. It's a pure UI node - it doesn't compute anything. It exists because the ecosystem's biggest workflow problem isn't speed, it's reading the graph. The ComfyUI docs have a whole section on how a dense, unlabeled graph is the single biggest beginner barrier, and every power-user pack (rgthree, Efficiency Nodes) ships layout tools for the same reason: a workflow too hard to read is a workflow you stop trusting.
Where this one earns its keep is Subgraphs. The README's headline feature: when you expose the heading inside a Subgraph/Subflow, the header text also renders on the subgraph's node in the parent graph. So instead of a cryptic little box labeled by whatever you named it, the subgraph tells you what it is right there on the node. That's the difference between a "BV 04" box and a "FINAL COLOR GRADE" box.
How it works
The backend is almost nothing: it takes the inputs and returns the heading text as a dummy STRING output. All the visual work - big bold text, the divider line, the click-to-edit behavior - is done by a JavaScript extension that renders the node's widget as a styled header. The text renders when ComfyUI loads the node, and you edit it by clicking directly on the header text (that's the README's screenshot flow).
Inputs:
value(STRING, defaultHeading) - the header text itself.font_size(INT, default 20, range 10β60) - how big it renders.show_divider(BOOLEAN, default false) - toggles an optional horizontal divider under the header.
Output: a single _ STRING that just echoes value. Ignore it; it's there because ComfyUI wants nodes to have outputs. The node also works as a plain graph label in a normal (non-subgraph) workflow - put it at the top of each logical section.
Install & gotchas
Pack standard: ComfyUI Manager β BV Node Pack, or clone https://github.com/BlackVortexAI/bv_nodepack into custom_nodes, then restart and Ctrl + F5 hard-refresh. The hard refresh genuinely matters here - the heading is rendered by a JS extension, so a stale cache shows a plain text widget instead of the styled header.
Three things worth knowing. First, because the rendering is frontend JS, ComfyUI's Nodes 2.0 frontend can render it as a standard widget instead of the styled header - the pack's own design notes admit Nodes 2.0 may fall back to plain widgets. Legacy canvas is fine. Second, the node is a graph decoration, but it still executes - keep an eye out in your "time taken" readout only if you've dropped fifty of them into a workflow (they're microseconds, so don't worry). Third, the dummy output is intentionally meaningless; if you're expecting "a label you can read from another node," that's not what this is. It's cosmetic, on purpose.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| value | STRING | Heading | β |
| font_size | INT | 2010β60 | β |
| show_divider | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| _ | STRING | β |