Nodes/ComfyUI_PersonaPlexMF/PersonaPlex Inference
ComfyUI Node

PersonaPlex Inference

Feed it audio, get a spoken reply (and a transcript)

By squarewulf·Created 7 months ago·Updated 5 months ago· 11
PersonaPlex Inference
  • personaplex_model
  • audio
  • settings
  • audio
  • text_output
voice_presetNATF2
text_promptYou are a wise and friendly teacher. Answer questions or provide advice in a clear and engaging way.

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 (default NATF2) - one of 18 presets: NATF0NATF3 and NATM0NATM3 (natural female/male), plus VARF0VARF4 and VARM0VARM4 (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's voice_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, its voice_preset and text_prompt override 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.

Categoryaudio/PersonaPlex

Inputs (5)

NameTypeDefaultDescription
personaplex_modelPERSONAPLEX_MODEL
audioAUDIO
settingsoptPERSONAPLEX_SETTINGS
voice_presetoptCOMBONATF218 options: NATF0, NATF1, NATF2, NATF3, NATM0, NATM1, +12
text_promptoptSTRINGYou are a wise and friendly teacher. Answer questions or provide advice in a clear and engaging way.

Outputs (2)

NameTypeDescription
audioAUDIO
text_outputSTRING