Nodes/saltai_whisper_transcribe/Whisper Transcribe (OpenAI API)
ComfyUI Node

Whisper Transcribe (OpenAI API)

This node just calls OpenAI's Whisper API

By haohaocreates·Created 2 years ago·Updated 2 years ago· 1
Whisper Transcribe (OpenAI API)
    • transcription_result
    • audio_path
    • frames_count
    file_path
    openai_key
    model
    mode
    language
    response_format
    temperature0.70
    timestamp_granularities
    max_frames0
    seek_seconds0.00
    prompt

    The node that skips the whole local stack

    Whisper Transcribe (OpenAI API) is the "I'd rather not" node. You drop a clip into ComfyUI's input folder, paste an OpenAI API key into the node, run it, and a transcript comes out - no model download, no VRAM, no GPU required. If you transcribe a few files a month rather than a thousand, that trade is usually the right one: the actual Whisper model lives on OpenAI's servers and you pay by the minute of audio (a two-minute clip runs about a cent).

    It's one of three nodes in the Salt AI Whisper Transcriber pack, and the only one that touches the network. Its siblings load and run Whisper locally (see Whisper Model Loader); this one calls OpenAI's hosted whisper-1 endpoint instead. The README talks about "Whisper V2," but the model dropdown only offers whisper-1 - that's just OpenAI's current Whisper API model, don't read anything into the version number.

    How it works

    Smarter than it looks. Before anything reaches the API, the node shells out to ffmpeg to strip the audio track into a 16 kHz mono MP3, and uses ffprobe to read the video's frame rate. So you can point it at a whole MP4 and it uploads only the audio - small uploads, and most files stay under OpenAI's 25 MB per-request cap. Then it calls openai.audio.transcriptions.create, or translations.create when you pick translate_to_english.

    The inputs that matter

    Required: file_path and openai_key. The path is relative to ComfyUI/input - drop your file there and type its filename, not an absolute path.

    The optional ones you'll actually set:

    • mode - transcribe or translate_to_english. Translation always outputs English and ignores the language and timestamp settings.
    • language - an ISO language code; leave blank to auto-detect.
    • response_format - text, json, verbose_json, or prompt_schedule. That last one is the pack's signature: it converts segments into "frame": "text" lines timed to the probed fps, the format Salt-style prompt-scheduling workflows expect.
    • max_frames and seek_seconds - only do anything in prompt_schedule mode, so ignore them otherwise.
    • prompt - a hint string that biases Whisper toward proper nouns and spellings, plus temperature (0.7 default) if you want it more or less adventurous.

    The outputs

    transcription_result (the text or JSON you asked for), audio_path (where the extracted MP3 landed, handy if you want to reuse it), and frames_count (the video's total frames, from the probed fps).

    Install

    Same pack as the other two Salt Whisper nodes. ComfyUI Manager → search "SaltAI Whisper" → Install, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/haohaocreates/PR-SaltAI_Whisper_Transcriber-e087b361
    

    Then install the deps with the same Python ComfyUI runs from (on the portable Windows build that's ComfyUI\python_embedded\python.exe -m pip install -r requirements.txt), restart ComfyUI, and refresh the browser tab. The clone also needs ffmpeg and ffprobe on your PATH - the node calls them directly and they're not in requirements.txt.

    Gotchas

    Your API key sits in the graph as a plain string, and it's saved into the workflow JSON. The moment you share a workflow with that widget filled, you've handed out a live credential - blank the key or strip it before exporting anything. That's the same credential-leak shape that makes API-wrapper nodes a target, and it's worth internalizing with this one.

    One this-mirror-specific trap: the shipped code does from . import logger, but the repo is missing logger.py, so a fresh clone can fail to load with a ModuleNotFoundError before you ever see the node. If that happens, create logger.py in the pack folder:

    # logger.py
    import logging
    logger = logging.getLogger(__name__)
    

    Then restart. And remember whisper-1 caps uploads at 25 MB. 16 kHz mono MP3 is compact, but a multi-hour file can still blow past it - for long audio, use the local transcribe node instead.

    CategorySALT/Whisper

    Inputs (11)

    NameTypeDefaultDescription
    file_pathSTRING
    openai_keySTRING
    modeloptCOMBO1 options: whisper-1
    modeoptCOMBO2 options: transcribe, translate_to_english
    languageoptSTRING
    response_formatoptCOMBO4 options: text, json, verbose_json, prompt_schedule
    temperatureoptFLOAT0.700–1
    timestamp_granularitiesoptCOMBO2 options: segment, word
    max_framesoptINT0
    seek_secondsoptFLOAT0.00
    promptoptSTRING

    Outputs (3)

    NameTypeDescription
    transcription_resultSTRING
    audio_pathSTRING
    frames_countINT