Un effet glitch RGB par rafales pour Remotion
26 décembre 2025
@storybynumbers_/remotion-glitch-effect ajoute de courtes rafales de glitch avec séparation des canaux RGB. Il est pensé pour rester rare, reproductible, et facile à poser au-dessus de compositions existantes.
Installation
npm install @storybynumbers_/remotion-glitch-effectL'usage passe par un composant wrapper exporté par le paquet : enveloppez la sous-arborescence que vous voulez affecter.
<DigitalGlitchRGB
splitAmount={30}
blurAmount={0.4}
jitterAmount={2.5}
burstSpacing={35}
burstDuration={[5, 10]}
>
<YourContent />
</DigitalGlitchRGB>Comment c'est fait
Calendrier des rafales et déterminisme
Une rafale est une courte fenêtre d'images où l'effet est actif. Chaque rafale possède une image de début, une durée, et une intensité de pic. Hors rafales, les images sont stables.
La seed maintient tout déterministe. Tout l'aléatoire vient de random() de Remotion à partir de clés de chaîne qui intègrent la seed, de sorte que la même seed produit le même calendrier de rafales et la même variation par image à chaque rendu.
La boucle centrale est :
const bursts = useMemo(
() => generateBursts(durationInFrames, burstSpacing, burstDuration, seed),
[durationInFrames, burstSpacing, burstDuration, seed]
);
const { intensity, burst } = getGlitchIntensity(frame, bursts);À l'intérieur d'une rafale, les valeurs par image dérivent d'une seed d'image (basée sur la seed de rafale plus l'image), de sorte que les décalages et le jitter varient au fil de la rafale tout en restant reproductibles.
Séparation RGB via filtres SVG
C'est délibérément low-tech : des filtres SVG et quelques couches.
Lorsque intensity > 0, le composant rend les mêmes enfants trois fois :
- Rouge : isole le rouge via
feColorMatrix, puisfeOffset. - Vert : isole le vert et le conserve centré comme référence stable.
- Bleu : isole le bleu et applique
feOffsetdans le sens opposé.
Par-dessus :
- Un léger
feGaussianBlurne s'applique que pendant les rafales, pour adoucir les bords. - Les trois couches sont composées avec
mixBlendMode: "screen"pour que la séparation reste lumineuse.