v0.0.9 — VRAM that matches nvitop, and a workflow-stage readout
VRAM now reads what nvitop reads
The canvas node's VRAM row was showing 3.7 GB on a card that nvitop, nvidia-smi and guiTOP all
showed at 9.5 GB. Six gigabytes off, and the watcher was the only tool on the box saying it.
Two separate causes, both fixed:
- ComfyUI's
/system_statscounts PyTorch's idle allocator cache as free memory. That is
correct from ComfyUI's point of view — it is memory it can reuse without asking the driver — but
it is not what any monitoring tool means by "free". - Even with that added back in, PyTorch and NVML disagree by about a gigabyte on the same card
at the same instant. So the figures now come from NVML, the same source nvitop reads, through a
new/watcher/vramroute in the node pack.
Two traps that were only visible against a real box:
- The device index is not a join key. On a multi-GPU machine PyTorch orders devices by
capability and NVML orders them by PCI bus — device 0 to PyTorch was device 2 to nvidia-smi.
Matching index to index would have printed one card's memory on another card's row and looked
entirely plausible. The cards are matched by UUID. - NVML's memory query has two versions and only the second is nvidia-smi's. The older one
counts driver-reserved memory as used (306 MiB on the test card). The node asks for v2.
If NVML is unavailable — an AMD box, or no pynvml — it falls back to ComfyUI's numbers with the
cache added back, which is close but reads a little high.
New: which part of the workflow is running
Every job layout now carries a NODE line: 4/21 KSampler.
STEP 7/20 tells you where you are inside one node. It does not tell you that the node is a
sampler rather than a VAE decode, or that there are fourteen more nodes after it. A graph spends
most of its wall clock loading, encoding and decoding either side of the sampler, and none of that
was visible before.
- The position is counted from the nodes actually seen executing.
- The total comes from the relay, which counts the nodes reachable from the outputs being run and
subtracts the ones ComfyUI reports as cached. Without the relay you get the position on its own
rather than a made-up total. - Subgraphs are handled. ComfyUI executes a subgraph's contents under expanded ids
(193:120,193:119, ...) and all of them belong to one node on your canvas. They count once,
and the line shows the name of the node you can actually see. - Nothing has run yet → a dash. Never a zero.
Also in this release
- Electron 31 → 43. Electron 31 has been end-of-life since December 2024 and was no longer
getting security fixes. Also updates electron-builder 25 → 26. - Reactor panel, control-room idiom: the dial figure no longer overlaps the arcs, and it is set
in near-black ink with a lit halo so the state colour still reads at a glance.
Note on this release
Windows only. The Linux AppImage and .deb are built under WSL2, which will not start on the build
machine right now (virtualization disabled in firmware). Linux users: 0.0.7 is the current build,
and the node pack changes above can be taken from the repo's comfyui-relay/ folder directly.