A heading with CSS mix-blend-mode applied so it changes appearance against whatever sits behind it — picks the inverse colour of the backdrop pixel, like ink on a poster.
import BlendText from '@crazygl/hero-blend-text';
export default function Hero() {
return (
<BlendText
heading={"Inverse\nblend."}
subheading="Pick a blend mode; pick a photo."
blendMode="difference"
backdropImage="/photos/cover.jpg"
textColor="#ff3d7f"
/>
);
}heading, subheading.blendMode (difference, exclusion, overlay, multiply, screen, hard-light).backdropImage and a backdropColor tint multiplied into the image.textColor, fontSize, letterSpacing, headingFontFamily, headingFontWeight.npm install @crazygl/hero-blend-textThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import BlendText from '@crazygl/hero-blend-text';
export default function Landing() {
return (
<BlendText />
);
}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 BlendText from '@crazygl/hero-blend-text';
export default function Page() {
return (
<section>
<BlendText
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}