Burned text using svg filter

Classic SVG burned edges plus layered thermal glows. Tone follows the canvas; type size scales the filter.

v0.1.0
🍰
🏃
🎓
Intermediate

Thermal Text

Heatwave
Canvas
Tone follows canvas — light

Install

Requires a project with shadcn/ui initialized. Installs all 1 file and any listed registry dependencies.

npx shadcn@latest add https://manglekuo.com/showcase/r/burned-text.json

Documentation

Burned Text Effect

Two SVG engines in one component: the classic char-edge burn, plus glow with two constructions — soft nested bloom (thermal) and chromatic rings (VHS). Tone follows the surface behind the text — light or dark — not the page theme.

Usage

import {  BurnedText,  CLASSIC_BURN_SETTINGS,  THERMAL_PRESET,  VHS_PRESET,} from '@/components/ui/burned-text' {/* Classic burn — original color-matrix char */}<BurnedText  text="Burned Text"  engine="classic"  tone="light"  classic={CLASSIC_BURN_SETTINGS}/> {/* Thermal — soft nested heat bloom */}<BurnedText  text="HOT"  engine="glow"  glowStyle="bloom"  core={THERMAL_PRESET.core}  layers={THERMAL_PRESET.layers}/> {/* VHS — chromatic offset rings */}<BurnedText  text="PRO"  engine="glow"  glowStyle="rings"  core={VHS_PRESET.core}  layers={VHS_PRESET.layers}/>Language: jsx

Props

BurnedText

  • text (string): Text to render.
  • fontSize (number, default: 64): Font size in pixels. Classic blur and glow spreads scale with this value.
  • fontFamily / fontWeight / tracking: Type controls. Non-generic families load from Google Fonts.
  • engine ("classic" | "glow", default: "classic"): Classic = original burn filter; glow = stacked color layers.
  • glowStyle ("bloom" | "rings", default: "bloom"): Bloom = thermal inset bands (erode → punch → soften); rings = annular outward blurs (VHS).
  • tone ("light" | "dark", default: "light"): Pick from the canvas behind the glyphs. Light classic multiplies into paper; dark classic inverts to ash and screens so char blacks dissolve on slate/ink.
  • classic (ClassicBurnSettings): contrast, brightness, secondBlurAmount, secondBrightness, optional filterValues matrix.
  • core / layers: Used when engine="glow". Layers are outer-first. For thermal bloom, spread is inset depth from the glyph edge (larger = hotter / further in).
  • className (string, optional): Extra classes on the SVG.

Helpers: toneFromCanvas(hex), CLASSIC_BURN_SETTINGS, THERMAL_PRESET, VHS_PRESET.

How It Works

  1. Classic — blur → dilate → contrast/brightness → second blur → color matrix (dark: invert + hue-rotate, luminance-key the char fringe, then CSS screen).
  2. Glow bloom — each thermal band shrinks in from the glyph edge (erode → alpha punch → soften blur), stacked cold→hot like burn’s bite.
  3. Glow rings — soft outer fringe plus annular mid/inner bands with chromatic offsets (VHS tracking).
  4. Type — after document.fonts.load, getBBox() sizes the SVG; the demo stage stays fixed and scales the SVG with CSS so the canvas does not grow with font size.

DialKit on this page is demo-only: Look picks Burn / Thermal / VHS, the Version dropdown + + save snapshots to localStorage, and canvas swatches drive tone from background luminance. The clipboard control is Copy prompt — it pastes an agent-ready install (npx shadcn@latest add …/r/burned-text.json) plus the exact BurnedText props for the look you dialed, not DialKit’s “update useDialKit” scaffold.