A central logo or preview image framed by a reactive visualizer — a radial frequency-bar ring and waveform that pulse with glow blooms on every beat. Alive without sound, with optional mic or file audio.
import AudioReactive from '@crazygl/hero-audio-reactive';
export default function Hero() {
return (
<AudioReactive
heading="Hear it move."
visualizerStyle="radial-bars"
centerMedia="https://crazygl.com/samples/crazygl.png"
accentColor="#5cf2ff"
secondaryColor="#c45cff"
/>
);
}centerMedia (logo/preview at the centre), subjectSize, subjectBassResponse (how hard it pumps on bass).visualizerStyle (radial-bars / linear-bars / waveform-ring), barCount, reactivity, beatPulse, glowIntensity, rotationSpeed.accentColor (bass/low hue), secondaryColor (treble hue), bgTop, bgBottom, transparent.audioSource (none / file / mic), audioFile URL. Mic shows an opt-in button; access is requested only on click.npm install @crazygl/hero-audio-reactiveThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import AudioReactiveHero from '@crazygl/hero-audio-reactive';
export default function Landing() {
return (
<AudioReactiveHero />
);
}The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';
import AudioReactiveHero from '@crazygl/hero-audio-reactive';
export default function Page() {
return (
<section>
<AudioReactiveHero
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}