Catalog

Edit Props (live)

TEXT
config

Source

42 lines
import React from 'react';
import { AbsoluteFill, interpolate, random, useCurrentFrame } from 'remotion';

interface Props {
  text: string;
  glitchIntensity: number;
}

export default function CrtGlitch({ text, glitchIntensity }: Props) {
  const frame = useCurrentFrame();
  const resolvedAt = 30;
  const revealRatio = interpolate(frame, [0, resolvedAt], [0, 1], {
    extrapolateRight: 'clamp',
  });
  const charsToShow = Math.floor(text.length * revealRatio);
  const jitter = random(`j-${frame}`) * glitchIntensity * 4 - 2;

  const display = text
    .split('')
    .map((ch, i) => (i < charsToShow ? ch : String.fromCharCode(0x2591)))
    .join('');

  return (
    <AbsoluteFill
      style={{
        backgroundColor: '#000',
        color: '#d0ffdc',
        fontFamily: 'monospace',
        fontSize: 68,
        fontWeight: 700,
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        textShadow: `${jitter}px 0 0 #ff3399, ${-jitter}px 0 0 #33ccff`,
        padding: 60,
      }}
    >
      {display}
    </AbsoluteFill>
  );
}

Schema (Zod)

import { z } from 'zod';

export const Schema = z.object({
  text: z.string().describe('$port:text Text to reveal through CRT scan'),
  glitchIntensity: z.number().min(0).max(1).default(0.6),
});

CRT Glitch Reveal

crt_glitch_reveal

Text reveal with CRT scan, chromatic-aberration jitter, and progressive character decrypt. Inspired by Lovis Odin's CRT-anim LoRA aesthetic.

Workflow Inputs (1)

  • Text to reveal through CRT scan
    text
    TEXTRequired

Config Fields (1)

  • glitchIntensity

Meta

Updated
4/21/2026