Muxiva built-in Nodes
Built-ins are vendor-neutral factories compiled into Muxiva. They are classified by capability even though they share the Rust runtime binary.
| Node type | Layer | Capability | Contract |
|---|---|---|---|
builtin.audio_resampler |
Media | audio.resample |
PCM S16LE Audio in and configured-rate Audio out |
builtin.audio_vad |
Algorithm | speech.vad |
PCM Audio in and speech activity Event out |
builtin.speech_formatter |
Algorithm | text.speech_format |
Streaming Markdown Text and cancellation Signal in; TTS-safe plain Text out |
builtin.voice_turn_context |
Control | conversation.turn_context |
Transcript plus speech Event in and turn context Text out |
builtin.voice_turn_controller |
Control | conversation.turn_control |
Filters meaningless transcripts, admits turns, and exclusively emits canonical cancellation |
builtin.interval_tick |
Control | clock.interval |
Periodic Event out |
builtin.text_source |
Utility | text.source |
Configured UTF-8 Text out |
builtin.uppercase |
Utility | text.uppercase |
UTF-8 Text in and uppercase Text out |
builtin.text_sink |
Utility | text.collect |
UTF-8 Text in |
builtin.stdout_text_sink |
Utility | observability.stdout |
UTF-8 Text in and branded stdout logging |
builtin.demo.* factories are deterministic architecture previews used by tests and are marked
utility / demo.voice. They are not production microphone, ASR, LLM, TTS, or speaker Nodes.
Select any built-in in Studio to inspect its configuration and Port schemas. Media conversion is
explicit: incompatible sample rates should be connected through builtin.audio_resampler, not
silently converted inside an Edge.
The generic Node declares sample_format, sample_rate_hz, and channels in explicit input
and output configuration objects, so 16 kHz input and 48 kHz output are not separate Node types.
builtin.speech_formatter lets an Agent's original Markdown branch directly to a rich chat client
while a derived plain-text branch feeds TTS. It strips emphasis markers and bare URLs, keeps link
labels, and replaces streamed fenced-code blocks and Markdown tables with configurable spoken
messages. It also owns sentence batching for TTS through
minimum_chunk_characters and maximum_chunk_characters; the Agent itself
emits semantic text deltas without voice policy. A terminal Agent Event flushes
the final partial sentence. suppressed_parenthetical_terms configures product-specific
parenthetical presentation that must not be spoken. The Builtin contains no character or device
vocabulary; Xiaozhi terms live only in the Xiaozhi Graph. The streaming parser retains fence and table state
across Text Frames; an interruption Signal or a new sequence resets that state,
so stale unfinished Markdown cannot silence a later turn.
builtin.voice_turn_controller is the sole interruption decision point in a cascade voice graph.
VAD speech.started/stopped values are observations. Only an admitted final transcript produces
muxiva.turn.cancelled and a same-sequence Prompt. Fillers, coughs, minimum length, and short
command allowlists are configurable. An authoritative device stop first emits
muxiva.turn.interrupt.requested and still passes through the controller before reaching Agent,
TTS, and playback Nodes.