MenuClose

Ink Bloom — React Animated Background

Ink drops blooming and feathering across wet paper — each front is an fbm-perturbed radius, denser at the core and ring-deposited at the edge, paling as it ages. Light paper base.

View source
PreviewWEBGPU
Starting live preview

Usage

import { InkBloom, INK_BLOOM_PRESETS } from "@/components/InkBloom";

export function SumiHero() {
  return (
    <section style={{ position: "relative", minHeight: "100dvh" }}>
      <InkBloom {...INK_BLOOM_PRESETS.sumi}
        {...{
          interactive: true,
          speed: 1,
          intensity: 0.92,
          drops: 4,
          spread: 0.26,
          from: "#f4eee2",
          to: "#b9ac96",
          accent: "#191621"
        }}
      />
      <div style={{ position: "relative", zIndex: 1, padding: "8rem 2rem" }}>
        <h1>Written in water</h1>
      </div>
    </section>
  );
}
Implementation notes & API

Purpose: sumi-e ink-wash backdrop on a warm fiber paper tone; drops respawn on staggered cycles so the page keeps breathing. Mount: full-bleed layer behind content; the paper is opaque and LIGHT — use dark type over it. Props: speed, intensity, drops (concurrent count), spread, feather, from/to/accent (paper, wash, ink colors). Pointer: interactive is off by default; set it and the freshest drop falls at the cursor. Guardrails: WebGPU required with fallback prop; reduced motion shows a settled page of blooms; one of the few light-background effects here.

PropertyTypeNotes / default
interactivebooleanfalse in the library; enabled in this preview
fallbackReactNodeShown when the renderer is unavailable
className / stylestring / CSSPropertiesApplied to the outer container
View source on GitHubFree for commercial projects · MIT