Nodes/Monja Character Voice/Monja Character Voice • Load
ComfyUI Node

Monja Character Voice • Load

Monja Character Voice Load

By andremonjardim·Created 3 months ago·Updated 3 months ago· 0
Monja Character Voice • Load
    • audio
    • ref_text
    • voice_pack
    character
    voice_name

    The voice-cloning part nobody talks about

    Once you've got F5-TTS or TTS Audio Suite generating speech in ComfyUI, the annoying part isn't the model - it's that every workflow wants you to drag in the same reference clip and retype the same transcript. Monja Character Voice • Load is the cure for exactly that. Pick a character, pick a voice, and out the other side comes the audio, its transcription, and a ready-made voice_pack dict that F5-TTS-style engines consume directly. Zero inference, zero GPU, zero API keys. It's a library drawer for your voices, and the drawer lives on disk.

    It's the read half of a two-node pack; its sibling SaveCharacterVoice writes the entries. If you've never saved anything, the first launch seeds the library with two example characters, Alice and Daniel, so you have something to poke at immediately.

    How it works

    Everything lives as plain files in Documents/MonjaCharacterVoice/characters/<Character>/. Each voice is a .wav plus a .txt sidecar holding the transcription. On load the node walks the character's folder recursively - subfolders like Voz or Referencia count - to find the matching wav, flattens stereo down to mono (the mono conversion is there to stop a whole class of cloning errors), and reads the text file.

    The output you should actually care about is voice_pack (type VOICE): a dict built with the keys F5-TTS and tts_audio_suite expect - samples, sample_rate, text, ref_text - plus the audio, path, and character name thrown in for good measure. The README calls it "F5-TTS optimized," and that's the honest version of the claim: this pack does the bookkeeping, the engine downstream does the talking.

    Inputs and outputs that matter

    Only two inputs, both dropdowns, and neither should surprise you:

    • character - the folders in your library. Picking one instantly filters the voice list (that's the JavaScript doing the filtering, via a small /monja/get_voices API endpoint).
    • voice_name - the specific voice for that character.

    And three outputs:

    • audio (AUDIO) - the reference clip in ComfyUI's native audio format.
    • ref_text (STRING) - the transcription, for anything that wants the text.
    • voice_pack (VOICE) - the dict to feed the F5-TTS / tts_audio_suite side of your workflow.

    If you only wire one thing up, wire voice_pack.

    Installing

    Via ComfyUI Manager (search "Monja Character Voice"), or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/andremonjardim/ComfyUI-Monja-CharacterVoice.git
    

    Then restart ComfyUI. That's the whole install: requirements.txt is just torch and torchaudio, both of which ComfyUI already ships. No model downloads, no runtime isolation headaches - this pack never touches a model, which is exactly why it won't break your transformers install.

    Where people get burned

    • Where do the files actually go? The default path resolves through the Windows shell API for the Documents folder, so on Windows it's Documents/MonjaCharacterVoice/characters. On Linux and macOS that lookup falls back to your home directory - you're looking at ~/MonjaCharacterVoice/characters instead. Don't go hunting in Documents on Linux. If you want it somewhere specific, set MONJA_CHARACTER_PATH to any directory you like.
    • The dropdowns are baked when the node loads. Save a new character, and the character list on an already-open Load node won't show it until you reload the graph or re-add the node. The voice list updates live when you switch characters, but the character list itself is captured at node creation.
    • "Nenhum" is not a character. It's the Portuguese fallback value that appears when the library is empty (the author is Brazilian, and a couple of error strings stayed in Portuguese - a missing voice raises a FileNotFoundError that reads "Voz … não encontrada"). If you see it, you've either got an empty library or a path problem.

    For a voice library manager, this thing is refreshingly boring - and boring is what you want from the part of the pipeline that just has to not lose your work.

    CategoryMonja/Character Voice

    Inputs (2)

    NameTypeDefaultDescription
    characterCOMBO2 options: Alice, Daniel
    voice_nameCOMBO4 options: Voice_Happy_Alice, Voice_Happy_Daniel, Voice_Principal_Alice, Voice_Principal_Daniel

    Outputs (3)

    NameTypeDescription
    audioAUDIO
    ref_textSTRING
    voice_packVOICE