Dormant
- When
- Not chosen yet, like the side orbs of a carousel.
- Drives
- One still frame, smaller and quieter. Nothing to draw after it.
An audio-reactive orb for voice interfaces, drawn in WebGL2. Play any voice through it, tune the look, and take the code. Open source, MIT licensed.
Press play, or click the orb, and it tells you how it works while it moves with the voice.
01Controls
Every slider changes every orb on the page. Hover the i for what each one does, and copy the settings to share a look.
02Inside
Four layers, each one live below with the palette you chose. Then the path a voice takes from the speaker to the colour.
Four colour stops, deep to light, laid out by layered noise. Flat and still.
Every point goes through a lens: the middle magnifies, the edge compresses, and the flat field reads as a ball.
The noise is warped through itself and a clock moves it. Time alone does this: it is the orb at rest.
The voice stirs a small fluid, sends rings outward and lights the rim. Grain and a grade finish it.
03States
The same orb in each state. Talking and listening run on simulated voices here.
04Types
The same palette and voice in each type, all talking.
A soft painted field wrapped onto a sphere, drifting on layered noise, with film grain. The default.
A clear ball: bright fresnel rim, a sharp specular point and caustic threads moving inside. Reads as a physical object.
Ribbons of the palette flowing across the sphere, like an aurora drawn inside a ball. Speech lifts and widens them.
The painted field printed as a dot screen on pale paper, the darker the colour the bigger the dot. Speech swells the dots.
05Palettes
Five ramps, deep to light, each with a glint of a neighbouring hue. Or pass four colours of your own.
#4a3aff#8a7fff#d2cfff#f6c9ffViolet shadows, a lavender body and an orchid glint.
#55206e#e8566c#ffab73#ffe6a6Plum shadows, a coral body and a gold glint.
#003f86#018dff#8fd2ff#c4fff1Navy shadows, a sky blue body and an aqua glint.
#0b5134#1da463#93e2b6#fff0b8Pine to mint, with a glint of sunlight.
#080064#4a3aff#bfbaff#ffffffIndigo to violet with a white glint: the neutral orb.
06Use it
It is a React component and a few plain TypeScript files, no orb library to install. Clone it, copy it in, or let Claude wire it up.
Clone the repository and start the page you are reading.
git clone https://github.com/imuvrays1/voice-orb.git
cd voice-orb
pnpm install
pnpm devCopy src/lib/orb, src/components/VoiceOrb.tsx (and its CSS) and src/data/orb.ts into your React app, with LICENSE, and keep the notice at the top of each file. Then give it any AnalyserNode.
import VoiceOrb from "@/components/VoiceOrb";
import { AnalyserLevels } from "@/lib/orb/audio";
// Any Web Audio AnalyserNode: an <audio>, the mic, a voice SDK.
const voice = new AnalyserLevels(analyser);
<VoiceOrb palette="twilight" state="talking" voice={voice} />Install Voice orb by UV, the Claude Code skill, then ask for an orb. It copies the files with their licence and connects your audio.
/plugin marketplace add imuvrays1/voice-orb
/plugin install voice-orb-by-uv@voice-orb
Add a voice orb to my call screenpaletteid or 4 coloursvariantstringstatestringvoiceLevelSourcecallerLevelSourceparamsPartial<OrbParams>sizeCSS lengthlabelstringsrc/components/VoiceOrb.tsxThe component: states, easing, the drift and pulse clocks.src/lib/orb/renderer.tsOne shared WebGL2 context draws every orb on the page.src/lib/orb/shaders.tsThe four types, and the lens, noise, lights and grain they share.src/lib/orb/fluid.tsThe voice's liquid: a small stable-fluids simulation on the GPU.src/lib/orb/audio.tsWeb Audio: four calibrated bands, the mic, tab audio, a simulated voice.src/data/orb.tsPalettes, states, slider ranges and this page's words.07Engine
What keeps it fast and well behaved. The full story, with what broke on the way, is in the build journal.
Every orb shares one hidden WebGL2 context and copies its frame into its own canvas. Browsers drop contexts past about sixteen, so one per orb would break a page like this.
Each type is a fragment shader: a colour field wrapped onto a sphere, bent by layered noise, lit from the top left and finished with grain.
Each band calibrates to itself, so a quiet recording and a loud microphone both use the full range. A running total drives the drift, so speech speeds it and silence lets it coast.
Anything with a Web Audio AnalyserNode can drive it. Voice SDKs often expose one for the agent's audio; a second on the microphone drives listening.
Draws only on screen and in a visible tab, holds a still frame under reduced motion, survives a GPU reset, and resting side orbs cost nothing after their first frame.
Every step from a blank canvas to this page: what was tried, what broke, and the fix.