Nodes/comfyui-pertineo-vfx/Pertineo Empty Audio
ComfyUI Node

Pertineo Empty Audio

Your Video Model Wants an Audio Input. Feed It Silence on Purpose.

By Pertineo·Created 8 days ago·Updated 8 days ago· 0
Pertineo Empty Audio
    • audio
    • duration_sec
    ◄frame_count121►
    ◄fps24.000►
    ◄sample_rate▾►
    ◄channels▾►

    Somewhere around LTX-2 the audio track stopped being an afterthought and became part of the graph. These models generate picture and sound together, so their workflows have an audio socket, and a graph that only makes pictures has to put something there. You can't leave it empty, and you probably don't want whatever the model invents.

    That's the whole job of Pertineo Empty Audio: it produces a silent AUDIO of exactly the right length. No file on disk, no ffmpeg, no placeholder WAV to forget about - a tensor of zeros with a duration computed from your frame count.

    Why you'd reach for it

    ComfyUI's video/audio hybrid workflows (LTX-2 and its successors) are built around synchronized picture and sound; the LTX line even ships audio VAE nodes alongside the video ones. When you're doing a VFX-flavoured job - matting a plate, running a sequence through a sampler, outputting frames for a comp - you're not generating sound at all. You need the shape of an audio track so the rest of the graph is happy, and nothing in it. An empty audio of the wrong length is worse than useless: it desyncs everything downstream, and it's the kind of bug you find three nodes later.

    How it works

    It does one piece of arithmetic and one allocation. Duration is frame_count / fps. Sample count is that duration times the sample rate, rounded. Then it hands back a waveform tensor of that many samples, in your chosen channel count, filled with zeros, plus the sample rate.

    So 121 frames at 24 fps is 5.042 seconds. At 48 kHz that's 242,000 samples. The duration_sec output hands you that float directly, which is handy if you're driving anything else by seconds rather than frames.

    The inputs that matter

    • frame_count - just wire frame_count from Pertineo Load Image Sequence into it. The author's own tooltip says so, and it's the right call: type the number by hand once and you'll change the range later and forget. Defaults to 121, which is LTX's friendliest length.
    • fps - a float, so 23.976 and 29.97 are fair game. Set this to the real rate of your sequence, not a rounded one. Half a frame of drift over a hundred frames is a half-frame of drift.
    • sample_rate - 48000 by default and that's the video standard; the other options (44100, 96000, 22050, 16000) are there because sometimes you're matching something. 96 kHz is a decent idea if the next node resamples.
    • channels - stereo or mono. Stereo unless something complains.

    The two outputs are audio (the zeros) and duration_sec (a float). audio goes wherever the workflow wants its audio; duration_sec is the one people forget, and it's useful for anything that expects seconds.

    Install

    ComfyUI Manager, search Pertineo VFX, install, restart. Or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/pertineo/comfyui-pertineo-vfx
    pip install -r comfyui-pertineo-vfx/requirements.txt
    

    That requirements file is one line - OpenEXR>=3.2 - and it's there for the pack's image I/O, not for this node. There are no model weights for Empty Audio to download. The pack loads each node group independently, so if the OpenEXR install goes sideways, you lose the sequence I/O nodes and this one keeps working.

    Where people get burned

    Frame count vs. frame range. frame_count is a count, not a last frame number. If you're loading frames 1001–1121, that's 121 frames - not 1121. This is exactly why Pertineo Frames for Model has a separate length output; wire that, and the range-vs-count confusion disappears.

    An fps that doesn't match the plate. A 25 fps silent track under 24 fps footage runs 4% short. It won't error. You'll just notice your audio-driven node ends slightly early and spend an hour on it.

    Expecting a file. Nothing is written. If a downstream node insists on a path rather than an AUDIO socket, this isn't the tool - you'd need a Save Audio somewhere, and a real silent file.

    Everything else is boring in the good way. It's one of those nodes you install, wire once into a template, and never think about again.

    CategoryPertineo/IO

    Inputs (4)

    NameTypeDefaultDescription
    frame_countINT1211–1000000Number of frames. Connect frame_count from 'Pertineo Load Image Sequence' so the length always matches.
    fpsFLOAT24.0001–240Frame rate of the sequence (e.g. 23.976, 24, 25, 29.97, 30).
    sample_rateCOMBOSample rate of the silent track. 48000 is the usual video standard.
    channelsCOMBONumber of audio channels.

    Outputs (2)

    NameTypeDescription
    audioAUDIO—
    duration_secFLOAT—