Try the voice orb animation
Choose a theme and motion preset, then switch between listening, thinking, and speaking. Move the input slider while listening or the output slider while speaking to see the animation respond. This preview uses simulated levels and does not open your microphone or start a provider session.
Open the voice orb preview in a separate page.
The React code panel reflects your current selections.
The same signal drives every theme.
circle is a compact orb, cloud is an atmospheric sphere,
radial separates input and output motion, and bars offers a waveform-style alternative.
Some themes intentionally share a visual treatment between states. The passive cloud visual
disappears when idle or in error, so always include a text status.
Build an animated voice orb in React
Start with a controlledOrb when you want to preview the component before connecting a live
voice provider:
Simulate the full lifecycle
Before connecting a provider, build a small test surface that can show every supported state:'use client' at the top of the file that uses hooks. Other
React setups can use the example directly.
Tune the motion and appearance
Start withbalanced, calm, or expressive. Change the visual theme without changing how your
app reports the session state or audio levels:
Provider-backed orb
Use an adapter when the provider SDK owns the session. The preview’s sliders stand in for a real provider’s audio levels. For an ElevenLabs agent, follow the ElevenLabs orb guide for a complete example with start/end controls and session cleanup. Here is the minimal Vapi wiring:Passive orb with separate controls
An orb can subscribe to an adapter without becoming the session control.Custom controlled orb
Use controlled mode when a custom stack supplies a voice signal.Direction-specific motion
Theradial theme maps human input to its translucent outer membrane and agent output to the
twisting field inside the circle. Supply both volume directions through OrbSignal; Orb selects
the relevant value for the current state.
inputVolume while listening and
outputVolume while speaking. The public signal intentionally has no directionless volume
field, so every theme can distinguish “the app heard you” from “the assistant is responding.”
Add accessible status copy
Animation should reinforce, not replace, a text description. Put a concise label near the orb and announce meaningful lifecycle changes:aria-label. If separate controls own the session,
set interactive={false} and label those controls instead.
Test the integration
- Step through idle, connecting, listening, thinking, speaking, and error.
- Check silence, background noise, normal speech, and high volume.
- Deny microphone permission and verify that a recovery action appears.
- Start, stop, and start again to catch leaked provider listeners.
- Interrupt assistant speech and confirm the UI promptly returns to listening.
- Test keyboard navigation, reduced motion, and the text status without audio.
Design notes
- Do not animate aggressively while idle.
- Make listening and speaking visually distinct.
- Use thinking for processing gaps when the selected theme benefits from a distinct treatment.
- Keep error states obvious but not alarming.
- Pair the orb with a transcript or status label when users need more precision.