A bursty RGB glitch effect for Remotion
December 26, 2025
@storybynumbers_/remotion-glitch-effect adds short glitch bursts with RGB channel splitting. It’s designed to be sparse, repeatable, and easy to drop on top of existing compositions.
Install
npm install @storybynumbers_/remotion-glitch-effectUsage is a wrapper component exported by the package: wrap the subtree you want to affect.
<DigitalGlitchRGB
splitAmount={30}
blurAmount={0.4}
jitterAmount={2.5}
burstSpacing={35}
burstDuration={[5, 10]}
>
<YourContent />
</DigitalGlitchRGB>How it’s made
Burst schedule + determinism
A burst is a short window of frames where the effect is active. Each burst has a start frame, a duration, and a peak intensity. Outside bursts, frames are stable.
The seed keeps everything deterministic. All randomness comes from Remotion’s random() using string keys that incorporate the seed, so the same seed produces the same burst schedule and the same per-frame variation on every render.
The core loop is:
const bursts = useMemo(
() => generateBursts(durationInFrames, burstSpacing, burstDuration, seed),
[durationInFrames, burstSpacing, burstDuration, seed]
);
const { intensity, burst } = getGlitchIntensity(frame, bursts);Inside a burst, per-frame values derive from a frame seed (based on the burst seed + frame), so offsets and jitter change across the burst while staying reproducible.
RGB split via SVG filters
This is deliberately low-tech: SVG filters and a few layers.
When intensity > 0, the component renders the same children three times:
- Red: isolate red with
feColorMatrix, thenfeOffsetit. - Green: isolate green and keep it centered as a stable reference.
- Blue: isolate blue and
feOffsetit in the opposite direction.
On top of that:
- A small
feGaussianBlurapplies only during bursts to soften edges. - The three layers are composited with
mixBlendMode: "screen"so the split stays bright.