Nodes/CoachBate/CoachBate Load H3 Audio Path
ComfyUI Node

CoachBate Load H3 Audio Path

Load a slice of audio by path, in the shot file, without a browser dialog

By CoachBate·Created 3 months ago·Updated 21 days ago· 2
CoachBate Load H3 Audio Path
    • audio
    ◄audio_path►
    ◄start_seconds0.00►
    ◄end_seconds-1.00►

    A loader you can drive from text

    ComfyUI's stock audio loaders want you to click a file. That's fine when you're making one thing and useless when you're making forty of them from a shotlist, because the path is data - it lives in a JSON file, it changes per shot, and no dialog is going to appear at 3am with the right answer.

    CoachBate Load H3 Audio Path takes an audio path as a string, with an optional in/out range in seconds, and returns an AUDIO you can feed to H3's reference-audio slots. That's why it exists: the shotlist carries reference_audio_1-style paths, and this is the node that turns one into something a model can hear.

    Path resolution, since that's the whole node

    audio_path is the only thing that matters and the rules are simple once you know them:

    • Blank returns no reference audio at all - the node outputs None and doesn't try to decode, which is what you want for the shots that don't use a reference.
    • A relative path resolves under ComfyUI's output directory. You can write [output] in front to be explicit about it, but it's the default.
    • An absolute path is taken as-is, and surrounding quotes are stripped, so you can paste a Windows path straight out of Explorer without it breaking.

    start_seconds (default 0) and end_seconds (default -1) slice the source. -1 means "to the end of the file", which is the honest default: most references are short clips used whole.

    Under the hood it decodes with PyAV - the same av package ComfyUI itself ships, so there's nothing extra to install - and normalises integer PCM to float. It also hashes the file's mtime into its change detection, so replacing the file on disk re-triggers the node instead of handing you a cached stale waveform. That sounds like a small thing until you've spent twenty minutes wondering why your new VO take isn't being used.

    Inputs and outputs

    Required, all three: audio_path (STRING), start_seconds (FLOAT, ≥0), end_seconds (FLOAT, ≥-1). Output: audio (AUDIO).

    The tooltip is worth reading once, since it's the author's own framing: this is H3 reference audio. If you're after a whole-song master for a music-video pipeline, that's what CoachBatePrepareShotContinuity's conditioning_audio input is for.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/CoachBate/ComfyUI-CoachBate.git
    

    Or ComfyUI Manager → search "CoachBate" → restart ComfyUI. Nodes appear under CoachBate / H3. The pack declares no pip dependencies of its own; this node uses PyAV, which ComfyUI already requires.

    Where people get burned

    • "H3 reference audio not found: …" - the resolved path doesn't exist. Nine times out of ten it's a relative path that landed in output/ when you meant it to be absolute.
    • "starts at X s, after the 4.2s file ends" - your start_seconds is past the end of the file. Usually a leftover from the previous shot's longer reference.
    • "end (…) must be after start (…)" - end_seconds below start_seconds. Note that -1 is special-cased and is never the problem.
    • The waveform is far too short for the shot. You sliced a range; the model then gets a reference it can't use for the whole duration. Check the slice bounds before blaming lipsync.
    CategoryCoachBate/H3

    Inputs (3)

    NameTypeDefaultDescription
    audio_pathSTRINGH3 reference audio. Relative paths resolve under ComfyUI output; use '[output]' to make that explicit. Blank returns no reference audio.
    start_secondsFLOAT0.00Start of the source-audio slice in seconds.
    end_secondsFLOAT-1.00End of the source-audio slice in seconds; -1 uses the rest of the file.

    Outputs (1)

    NameTypeDescription
    audioAUDIO—