Nodes/Nova Audio Player/Nova FlowPulse ๐Ÿ’“
ComfyUI Node

Nova FlowPulse ๐Ÿ’“

Find the One Node That's Eating Your Whole Run

By NovaFemmeยทCreated 2 months agoยทUpdated 15 days agoยท 1
Nova FlowPulse ๐Ÿ’“
    • report
    โ—„log_to_filefalseโ–บ
    โ—„log_formatcsvโ–บ
    โ—„log_namenova_profileโ–บ
    โ—„sample_interval_ms250โ–บ
    โ—„gpu_telemetryauto (safe)โ–บ
    โ—„reset_each_runfalseโ–บ
    โ—„view_stateโ–บ

    The odd node in a music pack

    Nothing about this node is audio. It ships in ComfyUI-NovaAudioPlayer, a 25-node pack built around ACE-Step music generation - mastering, loudness measurement, tag writing, LoRA training - and tucked under Utility & IO there's a workflow profiler. Strange place for it, and still the node from this pack you'll most likely keep in every workflow.

    The problem: ComfyUI tells you almost nothing about where a run goes. Your graph went from 90 seconds to six minutes after you swapped a sampler, and the progress bar just says something is slow. If you've gone looking before you've probably met ComfyUI_ProfilerX, the profiler people recommend in workflow threads; FlowPulse is the same job with a bigger on-canvas dashboard.

    How it works, and how honest the numbers are

    ComfyUI runs one node at a time in a single process. That's the fact the design rests on: your OS cannot tell you "KSampler used 82% CPU," because a process is the smallest unit it accounts for. So FlowPulse samples the ComfyUI process on a background thread and attributes each sample to whichever node held the execution slot at that moment - sound precisely because execution is sequential. Time is exact, taken from the execution events. CPU, RAM, disk and GPU are sampled, so they spot the hot node without being precise.

    Three caveats before you trust a figure:

    • A node that finishes inside one sample interval shows โ€“, not zero. Drop sample_interval_ms to 50 for short nodes.
    • CPU reads like top: 100% is one core fully busy, so a multi-threaded node can read above 100%.
    • ฮ” RAM is a hint, not ownership - tensors are shared and freed lazily, so a node can show a negative delta. Peak RAM and duration are the figures to act on.

    Nodes served from cache never execute, so they don't appear. Correct - they cost nothing.

    The inputs you actually set

    Six widgets; two or three matter day to day.

    • sample_interval_ms - 250 ms is a fine default, 50โ€“100 ms when you're chasing something fast.
    • gpu_telemetry - leave it on auto (safe). That mode uses only NVML, AMD SMI or pyrsmi, out-of-band monitoring APIs meant to be called from any thread. torch (unsafe on ROCm) reads PyTorch's allocator instead, and the author's tooltip warns it has aborted ComfyUI on ROCm. Believe it.
    • log_to_file, log_format (csv, json, markdown) and log_name - writes to ComfyUI/output/nova_flowpulse/<log_name>-<timestamp>.<ext> when each run finishes.
    • reset_each_run - off, so averages settle over repeated runs. On when you only care about this run.

    view_state is hidden, driven by the dashboard itself. Don't touch it.

    The single output is report, a string summarising the last completed run with a ranked bar chart of the slowest nodes - wire it into Nova Console ๐Ÿ–ฅ๏ธ from the same pack. One quirk: the log is written when the run finishes, not when this node executes, so report describes the last completed run. Press โญณ Save log for a file covering the run that just ended.

    Installing it

    comfy node install comfyui-novaaudioplayer
    # or
    cd ComfyUI/custom_nodes
    git clone https://github.com/NovaFemme/ComfyUI-NovaAudioPlayer.git
    

    Restart ComfyUI and hard-refresh the browser (Ctrl + F5). Not optional - the dashboard is JavaScript, and a cached older copy is the most common way this node misbehaves.

    No models, and nothing heavy for this node: the pack's two declared packages, mutagen and pymysql, belong to its tagging and MySQL nodes. FlowPulse needs psutil, which ComfyUI normally ships - if not, pip install psutil and the status bar says so rather than dying. For real GPU numbers:

    pip install nvidia-ml-py      # NVIDIA
    pip install amdsmi            # AMD, ships with ROCm
    pip install pyrsmi            # AMD, lighter alternative
    

    The console prints which backend it picked on the first sampled run. No backend just hides the GPU panel.

    Where people get burned

    A stale browser takes the node out of the run. Value not in list: gpu_telemetry: False not in [...] means ComfyUI restored widget values by position, a widget shifted everything one slot, and a boolean landed in a dropdown. Hard-refresh. Since v1.2 it falls back to defaults and says so in the console instead of being dropped.

    ROCm crashes. A death with Fatal Python error: Aborted and a HW Exception by GPU node-1 ... GPU Hang line is the driver giving up, not a Python error. Set gpu_telemetry to off and run again - if it still aborts, FlowPulse is innocent and you're into the usual ROCm suspects (a non-fp16 VAE, tiled VAE decode, --disable-smart-memory). With no backend installed it makes no GPU calls at all, so this is a clean way to rule it in or out.

    macOS disk counters. Per-process I/O isn't available there, so it falls back to system-wide figures and the footer says which.

    Should you use it

    Yes, if you've ever stared at a slow graph and guessed. It points at the node to look at, and it flags its own weak figures rather than handing you a confident wrong number.

    Categoryโ–ถ๏ธ Nova Audio/๐Ÿ› ๏ธ Utility & IO

    Inputs (7)

    NameTypeDefaultDescription
    log_to_fileBOOLEANfalseWrite a profile file to output/nova_flowpulse when each run finishes.
    log_formatCOMBOcsvFile format of the saved profile: csv, json or markdown.
    log_nameSTRINGnova_profileFile name prefix. A timestamp is always appended.
    sample_interval_msINT25050โ€“2000How often the process is sampled while a run is active.
    gpu_telemetryCOMBOauto (safe)auto: NVML / AMD SMI only, safe to poll during a run. torch: reads PyTorch's allocator and is opt-in - polling the compute runtime has aborted ComfyUI on ROCm.
    reset_each_runBOOLEANfalseOn: every run starts from zero. Off: figures accumulate so averages settle.
    view_stateSTRINGSet by the dashboard on the node: the view, the focused node and the sort order.

    Outputs (1)

    NameTypeDescription
    reportSTRINGSummary of the last completed run, and the path of the log file when logging is on.