Slideshows & hero rotators
Pair with @vysmo/slideshow for declarative timing
and gesture support. Or roll your own — the runner is thin enough
to drop into any state machine.
60 WebGL2 shaders, defined as plain data. Tree-shakable to the byte. Endpoint-correct by construction. Zero runtime dependencies.
$ pnpm add @vysmo/transitions View on GitHub Tell us what you have in mind — a look, a reference, a vibe — and we’ll consider it for the next batch.
Every transition is plain data. Pass it to Runner.render()
on each frame.
pnpm add @vysmo/transitions @vysmo/animations npm install @vysmo/transitions @vysmo/animations yarn add @vysmo/transitions @vysmo/animations import { Runner, paintBleed } from "@vysmo/transitions";
import { animate } from "@vysmo/animations";
const canvas = document.querySelector("canvas")!;
const runner = new Runner({ canvas });
animate({
from: 0,
to: 1,
duration: 1300,
onUpdate: (p) => runner.render(
paintBleed,
{ from, to, progress: p },
),
}); runner.render(paintBleed, {
from, to, progress: p,
params: {
softness: 0.04,
noiseStrength: 0.6,
},
});
Pair with @vysmo/slideshow for declarative timing
and gesture support. Or roll your own — the runner is thin enough
to drop into any state machine.
Snapshot your page to a canvas, swap, run a transition. Works alongside the View Transitions API as a fallback or a richer replacement.
Crossfades that don’t feel like 2008. Tree-shaking means you only ship the shaders you actually use.
Scrubbable transitions in browser-based editors. Pass any
progress value — the same shader serves preview,
render, and export.
Drive progress off scroll position with
@vysmo/scroll for cinematic section changes.
Use defineTransition as the GLSL shell. Skip the
plumbing and focus on the math.