PersonaPlex Inference
Feed it audio, get a spoken reply (and a transcript)
- personaplex_model
- audio
- settings
- audio
- text_output
This is the offline version of the PersonaPlex party trick. Where the Conversation Server opens a browser and has a live back-and-forth, PersonaPlex Inference takes an audio file, runs it through NVIDIA's 7B speech-to-speech model, and hands you back two things: the model's spoken reply and a text transcript of it. No microphone, no web server, no real-time pressure - just feed it a turn and get a turn back.
Reach for it when you want to test the model on a set of recordings, batch through a bunch of prompts, or build a workflow where one node's audio output becomes the "user turn" here. It's turn-based, not streaming: one input audio, one output reply. If you want actual conversation, that's the server node's job.
How it works
Under the hood it's the same Moshi-style pipeline the whole pack runs. Your input audio gets resampled to the model's native sample rate, encoded into audio tokens by one Mimi codec, and streamed through the LM generator frame by frame while the model simultaneously writes out its own spoken tokens. A second codec decodes those into PCM, and the result is trimmed or padded to match your input's length. The text stream is decoded alongside and reassembled into the text_output transcript (the special bookkeeping tokens get stripped out, so you get clean text).
The persona and voice are set before generation: the model loads a voice prompt embedding from voices/ for the voice you pick, and your text_prompt is wrapped in system tags to define who it's being. That's the "persona control" from the pack title - tell it to be a friendly teacher, a customer service rep, whatever.
The inputs that matter
personaplex_model- must come from the PersonaPlex Model Loader. It's a required connection, which is good: it forces the heavy lifting to happen once.audio(required,AUDIO) - the user's turn. Anything ComfyUI can produce as audio works, so you can chain generated speech in or pull a WAV from a file node.voice_preset(defaultNATF2) - one of 18 presets:NATF0–NATF3andNATM0–NATM3(natural female/male), plusVARF0–VARF4andVARM0–VARM4(variety). The presets differ in timbre and speaking style. The README teases an audio-clone input on this node, but as shipped the cloning hook lives on the Conversation Server'svoice_clone_audio- here you pick from the built-ins.text_prompt- the persona/behavior prompt. Defaults to "You are a wise and friendly teacher…", which is a decent starting point for testing. If you leave it empty it falls back to that default.settings(optional) - the PersonaPlex Settings node. When connected, itsvoice_presetandtext_promptoverride this node's, and it controls sampling/temperature/seed. Not connected? Sensible defaults kick in.
The outputs
audio(AUDIO) - the spoken response. Wire it to a save/playback node and you're done.text_output(STRING) - the transcript of what it said. Handy for logging, for a "what did it actually say" sanity check, and for passing the reply into another node as text.
Expectation-setting, because nobody else will
PersonaPlex is genuinely impressive at reacting - it starts talking while you're still finishing a sentence, which is the whole point of the architecture. But the community verdict is consistent: the voices all have a slightly thin, "phone speaker" character, and the model's conversational depth is, generously, shallow. It's a great technical demo and a fun node to show off, not a SOTA voice assistant. And it's not a general-purpose TTS - it answers speech with speech, so don't ask it to read you a book.
Install and troubleshooting
Same pack-wide steps (clone, pip install -r requirements.txt, pip install -e personaplex_src/moshi). The usual suspects: sphn must be <0.2, and a conflicting moshi package throws unrecognized arguments: --voice-prompt-dir. If you see FileNotFoundError about a voice preset, the voices/ folder isn't populated - either let auto_download_voices do its thing or extract voices.tgz from the model repo into ComfyUI/models/personaplex/. Expect a long warmup on first run while the loader builds the model and does its quiet pre-generation passes.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| personaplex_model | PERSONAPLEX_MODEL | — | |
| audio | AUDIO | — | |
| settingsopt | PERSONAPLEX_SETTINGS | — | |
| voice_presetopt | COMBO | NATF2 | 18 options: NATF0, NATF1, NATF2, NATF3, NATM0, NATM1, +12 |
| text_promptopt | STRING | You are a wise and friendly teacher. Answer questions or provide advice in a clear and engaging way. | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| text_output | STRING | — |