Choose a theme by interaction role
Choose based on the job the visualization performs, not only its appearance. A support workflow
with permanent mute and end-call buttons may benefit from a passive theme, while a compact
assistant launcher can use a clickable circle.
Radial
Useradial for a colorful call surface with separate visual responses for each side of the
conversation:
idlelets the four-lobe field drift slowly back and forth; the interactive form shows a black phone control.connectingreplaces the phone with a compact loading indicator.listeningmoves the translucent outer membrane inward as input volume rises while traveling waves reshape its inner edge and the field oscillates in both directions.speakingswings the inner radial field back and forth at a changing pace while keeping the membrane calm.thinkingreuses the quiet listening baseline without inventing another visual signal.
style={{ '--orb-ui-radial-control-surround': '#101010' }}. Pass interactive={false} when your
application already owns its call controls.
Cloud
Usecloud for a calm, atmospheric assistant presence. It keeps one blue-violet palette while
communicating turn ownership through opposing scale and motion:
connectingshows a compact spinner before the sphere enters from a dot.listeningmoves slowly and shrinks as input volume rises.speakinggrows with output volume and moves more quickly.thinkingreuses the calm neutral treatment instead of introducing another animation.idleanderrorfade away when the visual is passive.
adapter.start() and adapter.stop() from those controls.
Circle
Usecircle when the voice agent is a primary assistant surface. It reads as an orb, status indicator, and voice presence at the same time.
Bars
Usebars when you want a waveform-like audio visualization.
Debug
Usedebug while wiring a provider adapter. It makes state and volume changes visible during integration.
Voice states
Each state should answer a user question:idle: Is the assistant available?connecting: Is the session starting?listening: Did the app hear me?thinking: Is the assistant processing?speaking: Is the assistant responding?error: Did something fail?
Accessibility and reduced motion
Every production theme needs a nearby text label for the current state. Do not require a user to distinguish listening from speaking by color or animation alone. When the orb is the call control, pass anaria-label; when labeled controls live elsewhere, use interactive={false}.
orb-ui respects reduced-motion preferences by limiting animation. Test that state copy, controls,
and error recovery remain usable when motion is reduced or the canvas is unavailable.
Theme review checklist
- Idle motion is quiet and does not imply that recording has started.
- Connecting is visibly different from an active conversation.
- Listening responds to microphone input when that level is available.
- Speaking responds to assistant output instead of reusing the microphone meter.
- Error has adjacent recovery copy and does not rely on color alone.
- The theme works at the smallest size used in the product.
- Keyboard focus and labels are clear for interactive variants.