Text Effects
Text effects are per-character behaviors applied via span tags. Each effect listed below shows its canonical tag name, any registered aliases, its parameters with defaults and ranges, and an example.
Visual effects
Section titled “Visual effects”bounce
Section titled “bounce”Animates each character with a eased bounce arc, launching upward and falling back using a Bouncy easing curve.
Syntax
<bounce amplitude=1.0 frequency=1.0 phase=1.0>text</bounce>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | a | float | 1.0 | Bounce height in px (0-50) |
| frequency | f | float | 1.0 | Bounces per second (0.01-100) |
| phase | w | float | 1.0 | Per-character phase offset (0-10) |
Example
<bounce amplitude=3 frequency=2>Boing!</bounce>
Source: BounceEffect.java
circle
Section titled “circle”Moves each character in a circular orbit around its original position.
Syntax
<circle radius=1.0 frequency=1.0 phase=0.0>text</circle>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| radius | r | float | 1.0 | Circular motion radius in px (0-50) |
| frequency | freq | float | 1.0 | Rotations per second (0.01-100) |
| phase | p | float | 0.0 | Per-character phase offset (0-10) |
Example
<circle radius=3 phase=0.5>Orbit</circle>
Source: CircleEffect.java
Aliases: col
Sets every character to a fixed RGBA color.
Syntax
<color color=FF0000>text</color>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| color | col | color hex | null (white) | RGBA hex color, e.g. FF0000 or FF0000FF |
Example
<color color=5BCEFA>cyan text</color>
Notes
When no color param is given the effect defaults to white (1.0, 1.0, 1.0, 1.0). Both RGB (RRGGBB) and RGBA (RRGGBBAA) hex strings are accepted.
Source: ColorEffect.java
Visual
Pulses each character’s alpha up and down in a sine wave, creating a fade-in/fade-out loop.
Syntax
<fade minAlpha=0.3 frequency=1.0 phase=0.0>text</fade>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| minAlpha | min | float | 0.3 | Minimum alpha during fade (0-1) |
| frequency | freq | float | 1.0 | Cycles per second (0.01-100) |
| phase | p | float | 0.0 | Per-character phase offset (0-10) |
Example
<fade minAlpha=0.1 frequency=0.5 phase=0.3>Fading text</fade>
Source: FadeEffect.java
glitch
Section titled “glitch”Randomly jitters characters, blinks alpha, and slices each glyph into horizontally shifted bands to simulate a digital glitch artifact.
Syntax
<glitch frequency=1.0 shiftChance=0.08 jitterChance=0.015 blinkChance=0.003 offset=1.0 chromatic=0.0 slices=2>text</glitch>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| frequency | freq | float | 1.0 | Glitch event rate (0.01-100) |
| shiftChance | - | float | 0.08 | Probability of a slice shift per frame (0-1) |
| jitterChance | - | float | 0.015 | Probability of position jitter per frame (0-1) |
| blinkChance | - | float | 0.003 | Probability of alpha blink per frame (0-1) |
| offset | - | float | 1.0 | Slice/jitter offset multiplier (0-10) |
| chromatic | - | float | 0.0 | Chromatic aberration intensity (0-5) |
| slices | - | int | 2 | Number of glitch slices (2-5) |
Example
<glitch frequency=2 chromatic=1.5>CORRUPTED</glitch>
Notes
Set chromatic above zero to get red/cyan color fringing on shifted slices. slices=2 uses a fast two-slice code path; values 3-5 use the general multi-slice path.
Source: GlitchEffect.java
gradient
Section titled “gradient”Aliases: grad
Maps a color palette across the span, with optional animation, angle, and interpolation mode.
Syntax
<gradient colors=5BCEFA,F5A9B8 hue=false cyclic=true angle=0.0 mode=char frequency=1.0 length=20.0>text</gradient>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| colors | - | string | 5BCEFA,F5A9B8 | Comma-separated hex palette |
| hue | - | bool | false | Interpolate in HSV instead of RGB |
| cyclic | - | bool | true | Ping-pong palette sampling |
| angle | ang | float | 0.0 | Gradient angle in degrees (0-360) |
| mode | - | enum | char | char (per character) or uniform (whole span at one t) |
| frequency | freq | float | 1.0 | Palette cycle frequency in Hz (0-100) |
| length | len | float | 20.0 | Spatial gradient length in characters (0.1-1000) |
Example
<gradient colors=FF6B6B,FFE66D,6BFFB8 length=12>Tri-color</gradient>
Notes
frequency=0 disables scrolling so the gradient is purely positional. hue=true produces smoother transitions when colors are close in hue.
Source: GradientEffect.java
Aliases: glow
Draws a soft radial glow halo around each character by rendering semi-transparent copies in concentric rings.
Syntax
<neon radius=2.0 intensity=1.0 quality=2 frequency=0.0 falloff=2.0 color="">text</neon>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| radius | r | float | 2.0 | Glow radius in px (0.5-8) |
| intensity | - | float | 1.0 | Glow brightness multiplier (0.1-3) |
| quality | - | int | 2 | Ring sample quality: 1 (fast), 2 (balanced), 3 (detailed) (1-3) |
| frequency | freq | float | 0.0 | Pulse frequency in Hz; 0 = static (0-100) |
| falloff | - | float | 2.0 | Glow falloff exponent (0.5-4) |
| color | col | color hex | (text color) | Glow color; defaults to the character’s own color |
Example
<neon radius=3 intensity=1.5 color=00FFAA>Glow</neon>
Notes
quality is capped by the maxNeonQuality config value on the client. glow is a registered alias for this effect.
Source: NeonEffect.java
outline
Section titled “outline”Draws a solid-color border around each character by rendering eight shifted copies behind the original.
Syntax
<outline width=1.0 color="" alpha=1.0>text</outline>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| width | w | float | 1.0 | Outline thickness in px (0.5-4) |
| color | col | color hex | (black) | Outline color |
| alpha | - | float | 1.0 | Outline alpha multiplier (0-1) |
Example
<outline width=1.5 color=FF0000>Outlined</outline>
Source: OutlineEffect.java
pendulum
Section titled “pendulum”Aliases: pend
Rotates each character back and forth like a pendulum, with an optional circular orbit offset at the pivot.
Syntax
<pendulum frequency=1.0 angle=30.0 radius=0.0>text</pendulum>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| frequency | freq | float | 1.0 | Swings per second (0.01-100) |
| angle | ang | float | 30.0 | Max rotation in degrees (0-90) |
| radius | r | float | 0.0 | Optional pivot offset radius in px (0-50); 0 = rotate in place |
Example
<pendulum angle=45 frequency=0.8>Tick Tock</pendulum>
Source: PendulumEffect.java
Visual
Scales brightness up and down with a sine wave. Optionally cycles through a color palette in sync.
Syntax
<pulse base=0.75 amplitude=1.0 frequency=1.0 phase=0.0 colors="" hue=false>text</pulse>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| base | - | float | 0.75 | Baseline brightness (0-1) |
| amplitude | amp | float | 1.0 | Pulse amplitude (0-5) |
| frequency | freq | float | 1.0 | Pulses per second (0.01-100) |
| phase | p | float | 0.0 | Per-character phase offset (0-10) |
| colors | - | string | null | Optional palette to cycle through |
| hue | - | bool | false | Interpolate palette in HSV |
Example
<pulse frequency=2 phase=0.4>Pulsing</pulse>
Source: PulseEffect.java
rainbow
Section titled “rainbow”Aliases: rainb
Cycles each character through the full HSV hue spectrum, offset per character to produce a rolling rainbow.
Syntax
<rainbow frequency=1.0 phase=1.0>text</rainbow>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| frequency | freq | float | 1.0 | Color cycle frequency in Hz (0-100) |
| phase | p | float | 1.0 | Per-character phase offset (0-10) |
Example
<rainbow frequency=1.5>Hello world</rainbow>
Source: RainbowEffect.java
scroll
Section titled “scroll”Continuously scrolls the span horizontally within a viewport, optionally fading or cutting at the edges.
Syntax
<scroll speed=1.0 width=-1 clip=fade fadeWidth=8.0 direction=left gap=0.0>text</scroll>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| speed | s | float | 1.0 | Scroll speed multiplier (0.1-100) |
| width | w | float | -1.0 | Viewport width in px; -1 = auto-fit to span (-1 to 1000) |
| clip | - | enum | fade | Edge clipping: fade, cut, or both |
| fadeWidth | fw | float | 8.0 | Fade gradient width in px (1-50) |
| direction | dir | enum | left | Scroll direction: left or right |
| gap | - | float | 0.0 | Gap between repetitions in px (0-500) |
Example
<scroll speed=1.5 width=60 clip=both>Scrolling ticker text</scroll>
Notes
On the first render frame the span width is not yet known, so characters are hidden until the measurement pass completes (typically one frame).
Source: ScrollEffect.java
shadow
Section titled “shadow”Offsets and recolors the drop-shadow pass for each character.
Syntax
<shadow offsetX=0.0 offsetY=0.0 color="" alpha=1.0>text</shadow>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| offsetX | dx | float | 0.0 | Horizontal shadow offset (-100 to 100) |
| offsetY | dy | float | 0.0 | Vertical shadow offset (-100 to 100) |
| color | col | color hex | (black) | Shadow color |
| alpha | - | float | 1.0 | Shadow alpha multiplier (0-1) |
Example
<shadow dx=2 dy=2 color=880000>Long shadow</shadow>
Notes
This effect only modifies the shadow pass (settings.isShadow == true). The main character layer is unaffected.
Source: ShadowEffect.java
Visual
Randomly displaces each character each frame using a deterministic seed based on the character index and codepoint.
Syntax
<shake amplitude=1.0 frequency=1.0>text</shake>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | amp | float | 1.0 | Shake magnitude in px (0-50) |
| frequency | freq | float | 1.0 | Shake frequency in Hz (0.01-100) |
Example
<shake amplitude=2 frequency=3>Trembling</shake>
Source: ShakeEffect.java
Visual
Rotates each character sinusoidally around its center, like a pendulum but purely rotational with no positional arc.
Syntax
<swing amplitude=1.0 frequency=1.0 phase=0.0>text</swing>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | amp | float | 1.0 | Swing magnitude (rotation amount, 0-10) |
| frequency | freq | float | 1.0 | Swings per second (0.01-100) |
| phase | p | float | 0.0 | Per-character phase offset (0-10) |
Example
<swing amplitude=2 phase=0.3>Swinging</swing>
Notes
swing produces pure rotation. For rotation with an orbital arc, use pendulum.
Source: SwingEffect.java
turbulence
Section titled “turbulence”Aliases: turb
Displaces each character along two independent sine waves, producing chaotic, non-repeating motion.
Syntax
<turbulence amplitude=1.0 frequency=1.0>text</turbulence>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | amp | float | 1.0 | Turbulence magnitude in px (0-50) |
| frequency | freq | float | 1.0 | Turbulence rate in Hz (0.01-100) |
Example
<turbulence amplitude=3 frequency=1.5>Chaotic</turbulence>
Notes
The displacement is driven by sin(t * 1.7 + index * 0.31 + codepoint * 0.07) on X and sin(t * 2.3 + ...) on Y, so each character follows a unique but deterministic path. For uniform random jitter use shake instead.
Source: TurbulenceEffect.java
Visual
Displaces each character vertically along a sine wave, creating a flowing up-and-down ripple across the span.
Syntax
<wave amplitude=1.0 frequency=1.0 wavelength=1.0>text</wave>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | amp | float | 1.0 | Vertical displacement in px (0-50) |
| frequency | freq | float | 1.0 | Cycles per second (0.01-100) |
| wavelength | wlen | float | 1.0 | Spatial wavelength scale (0.001-100) |
Example
<wave amplitude=4 frequency=1.5 wavelength=2>Wavy text</wave>
Source: WaveEffect.java
wiggle
Section titled “wiggle”Displaces each character along a character-specific direction vector in a sine pattern, so each glyph wiggles in its own direction.
Syntax
<wiggle amplitude=1.0 frequency=1.0 phase=1.0>text</wiggle>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| amplitude | amp | float | 1.0 | Wiggle magnitude in px (0-50) |
| frequency | freq | float | 1.0 | Wiggles per second (0.01-100) |
| phase | p | float | 1.0 | Per-character phase offset (0-10) |
Example
<wiggle amplitude=2 frequency=2>Wiggly</wiggle>
Notes
The direction angle is derived from codepoint % 30, so the same character at different positions will wiggle in the same direction but at different phases.
Source: WiggleEffect.java
Animation effects
Section titled “Animation effects”obfuscate
Section titled “obfuscate”Aliases: obf
Replaces characters with scrambled glyphs, with four modes: constant scramble, animated reveal, animated hide, and random flicker.
Syntax
<obfuscate mode=constant interval=20 direction=left alphabet=glyph soundMode=transition sound="" volume=0.5 pitch=1.0>text</obfuscate>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| mode | - | enum | constant | constant, reveal, hide, or random |
| interval | ms | int | 20 | Milliseconds per glyph flip (1-10000) |
| direction | dir | enum | left | Reveal/hide direction; see ObfuscateMode values |
| alphabet | alph | enum | glyph | glyph (random font glyphs) or readable (A-Za-z0-9) |
| soundMode | sm | enum | transition | transition (one sound per flip) or continuous |
| sound | snd | string | null | Sound preset or resource id |
| volume | vol | float | 0.5 | Sound volume (0-2) |
| pitch | - | float | 1.0 | Sound pitch (0.5-2) |
Example
<obfuscate mode=reveal interval=50>Secret message</obfuscate>
Notes
reveal and hide animate in sequence and then loop after a short delay. random keeps roughly 30% of characters obfuscated at any moment with each glyph lasting 500-2000 ms. Sound only fires if a sound param is given.
Source: ObfuscateEffect.java
typewriter
Section titled “typewriter”Aliases: type
Reveals characters one at a time at a configurable speed, with optional cursor, sound, and repeat control.
Syntax
<typewriter speed=12.0 resetDelay=1.0 repeat=infinite cursor=false cursorChar=_ cursorBlink=2.0 sound="" volume=0.5 pitch=1.0>text</typewriter>Parameters
| Name | Alias | Type | Default | Description |
|---|---|---|---|---|
| speed | s | float | 12.0 | Characters per second (0.1-1000) |
| resetDelay | - | float | 1.0 | Seconds to wait before restarting (0-60) |
| repeat | - | string | infinite | Repetitions: integer count, once, or infinite |
| cursor | - | bool | false | Show a blinking cursor at the typing head |
| cursorChar | - | string | _ | Single-codepoint cursor glyph |
| cursorBlink | - | float | 2.0 | Cursor blink frequency in Hz (0-20); 0 = always on |
| sound | snd | string | null | Sound preset or resource id |
| volume | vol | float | 0.5 | Sound volume (0-2) |
| pitch | - | float | 1.0 | Sound pitch (0.5-2) |
Example
<typewriter speed=8 cursor=true repeat=once>Hello, world.</typewriter>
Notes
repeat=once stops after the full string is shown and does not restart. cursorChar must be a single Unicode codepoint; multi-codepoint strings fall back to _ with a logged warning.
Source: TypewriterEffect.java