This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Elemental
Fire, lightning, fog, smoke, water and light. Most are procedural noise shaders: set time with a move animation, or they stand still.
Example status: these are parameter demonstrations, many adapted from TokenMagicFX. Every example passes leanFX's validator. Live appearance checks are recorded below each macro; matching colours and the result still depend on your source image. These checks do not establish long-running stability. Some examples intentionally darken or hide the original image.
Columns: Default is the value used when the spec omits the parameter. Animate says whether it can be driven by animated (Animation). Construction options are fixed when the filter is built; changing them rebuilds it.
fire · xfire · electric · fog · xfog · smoke · fumes · flood · liquid · ripples · ray · xray
fire
Fire. Burning flames over the image's pixels.
A shader precision defect can make this effect turn blue and then black over time on GPUs using half precision. It requires the Fire highp shader fix; changing the macro values alone does not fix that defect.
Default zOrder 150
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
amplitude |
number | 1 |
yes | Flame turbulence. |
anchorX |
number | 1 |
yes | Horizontal origin of the flames. |
anchorY |
number | 1 |
yes | Vertical origin of the flames. |
blend |
number | 2 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0xffffff |
color modes | Tint mixed into the flames. |
fireBlend |
number | 1 |
yes | How the tint is mixed into the flames. See Blend Modes. |
intensity |
number | 1 |
yes | Flame height; above 1 is taller. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "fire",
filterId: "fire",
intensity: 1,
color: 0xffffff,
amplitude: 1,
blend: 2,
fireBlend: 1,
animated: {
time: {animType: "move", speed: -0.0024},
intensity: {animType: "syncCosOscillation", loopDuration: 15000, val1: 0.8, val2: 2},
amplitude: {animType: "syncCosOscillation", loopDuration: 4400, val1: 1, val2: 1.4}
}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
xfire
Magic Fire. Colorful fire with a four-color palette.
Default zOrder 145
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
amplitude |
number | 1 |
yes | Flame turbulence. |
blend |
number | 2 |
yes | How the fire is mixed with the image: 1–14, its own set of modes (linear dodge/burn, screen, vivid light, color dodge and burn, mix). |
chromatic |
boolean | false |
— | Rainbow color shift. |
color |
color | 0x000000 |
color modes | 0 uses the palette color1–color4; any other color replaces the palette with shades of it. |
color1 |
color | 0x250000 |
color modes | Palette color 1 (darkest). |
color2 |
color | 0xb20000 |
color modes | Palette color 2. |
color3 |
color | 0x330000 |
color modes | Palette color 3. |
color4 |
color | 0xffe500 |
color modes | Palette color 4 (brightest). |
discardThreshold |
number | 0.1 |
yes | With alphaDiscard, brightness below which pixels are cut. |
dispersion |
number | 0.25 |
yes | How far the colors spread. |
inlay |
boolean | false |
— | Let the image's own colors shape the flames. |
scaleX |
number | 1 |
yes | Horizontal flame scale. |
scaleY |
number | 1 |
yes | Vertical flame scale. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "xfire",
filterId: "magic-fire",
color: 0x000000,
dispersion: 0.25,
amplitude: 1,
scaleX: 1,
scaleY: 1,
blend: 2,
animated: {time: {animType: "move", speed: 0.001}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
electric
Electric. Crackling lightning over the image.
The example uses blend: 1 (multiply), which darkens the image between lightning bolts. Try blend: 2 (screen) to keep the image lighter. An entirely black result from the first frame can also be the Electric shader precision defect, which requires the highp shader fix.
Default zOrder 160
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
blend |
number | 1 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0xffffff |
color modes | Effect color as a number, 0xRRGGBB. |
intensity |
number | 5 |
no (construction) | Number of lightning layers, integer 1–20. Construction option. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "electric",
filterId: "electric",
color: 0xffffff,
blend: 1,
intensity: 5,
animated: {time: {animType: "move", speed: 0.002}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
fog
Fog. Drifting fog over the image.
A shader precision defect can make the entire image transparent on GPUs using half precision. It requires the Fog highp shader fix. Lowering density reduces the fog mix but does not correct the defect.
Default zOrder 190
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
color |
color | 0xffffff |
color modes | Effect color as a number, 0xRRGGBB. |
density |
number | 0.5 |
yes | Fog density, 0–1. |
dimX |
number | 1 |
yes | Horizontal pattern scale. Smaller values stretch the pattern. |
dimY |
number | 1 |
yes | Vertical pattern scale. Smaller values stretch the pattern. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "fog",
filterId: "fog",
color: 0x000000,
density: 0.65,
animated: {time: {animType: "move", speed: 2.2}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
xfog
Thick Fog. Dense, volumetric fog over the image.
The fog stays within the image silhouette. color tints the fog: the earlier blue example was intentional; this example uses neutral white.
Default zOrder 230
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
color |
color | 0xffffff |
color modes | Effect color as a number, 0xRRGGBB. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "xfog",
filterId: "thick-fog",
color: 0xffffff,
animated: {time: {animType: "move", speed: 0.0006}}
}]);
Visual check: User marked the revised example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
smoke
Smoke. Animated smoke wisps over the image.
This is a moving noise overlay within the image, rather than particles rising beyond its edge. Equal dimX and dimY give rounded wisps; a much smaller dimX stretches them into streams. The example uses neutral grey.
Default zOrder 200
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
blend |
number | 13 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0xffffff |
color modes | Effect color as a number, 0xRRGGBB. |
dimX |
number | 1 |
yes | Horizontal pattern scale. Smaller values stretch the pattern. |
dimY |
number | 1 |
yes | Vertical pattern scale. Smaller values stretch the pattern. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "smoke",
filterId: "smoke",
color: 0xb0b0b0,
blend: 2,
dimX: 1,
dimY: 1,
animated: {time: {animType: "move", speed: 0.009}}
}]);
Visual check: User marked the revised example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
fumes
Fumes. Swirling fumes or vapors.
Default zOrder 210
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
blend |
number | 2 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0xffffff |
color modes | Effect color as a number, 0xRRGGBB. |
dimX |
number | 1 |
yes | Horizontal pattern scale. Smaller values stretch the pattern. |
dimY |
number | 1 |
yes | Vertical pattern scale. Smaller values stretch the pattern. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "fumes",
filterId: "fumes",
color: 0x808080,
blend: 8,
animated: {time: {animType: "move", speed: 0.001}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
flood
Flood. Rippling water over the image.
Default zOrder 170
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
billowy |
number | 0.5 |
yes | Wave height, 0–1. |
color |
color | 0x0020a9 |
color modes | Water color. |
glint |
number | 0.5 |
yes | Sparkle on the water, 0–1. |
scale |
number | 70 |
yes | Wave scale; larger values give smaller waves. |
shiftX |
number | 0 |
yes | Horizontal offset of the water pattern. |
shiftY |
number | 0 |
yes | Vertical offset of the water pattern. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
tintIntensity |
number | 0.2 |
yes | How strongly the water color tints the image, 0–1. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "flood",
filterId: "flood",
color: 0x0020bb,
billowy: 0.43,
tintIntensity: 0.72,
glint: 0.31,
scale: 70,
padding: 10,
animated: {time: {animType: "move", speed: 0.0006}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
liquid
Liquid. Flowing, liquid surface over the image.
This example is a strong Spectral Body effect, with spectral: true and intensity: 4. Complete invisibility can be the inherited shader precision defect: it requires the Liquid highp fix. For a gentler starting point, try spectral: false and a lower intensity; those alternatives still need a visual check on your target.
Default zOrder 180
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
blend |
number | 4 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0x0595ff |
color modes | Effect color as a number, 0xRRGGBB. |
intensity |
number | 5 |
yes | Flow strength. |
scale |
number | 1 |
yes | Pattern scale. |
spectral |
boolean | false |
— | Ghostly, see-through rendering. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "liquid",
filterId: "spectral-body",
color: 0x20aaee,
blend: 8,
intensity: 4,
spectral: true,
scale: 0.9,
animated: {
time: {animType: "move", speed: 0.001},
color: {animType: "colorOscillation", loopDuration: 6000, val1: 0xffffff, val2: 0x00aaff}
}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
ripples
Solar Ripples. Shimmering, sun-like ripples.
An unchanged image can be the inherited noise precision defect. Updated leanFX shaders use highp; increasing intensity alone does not correct collapsed noise.
Default zOrder 250
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
amplitude |
number | 1 |
yes | Ripple amplitude. |
color |
color | 0xbbbbbb |
color modes | Effect color as a number, 0xRRGGBB. |
intensity |
number | 0.001 |
yes | Ripple intensity; small values such as 0.001–0.01. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "ripples",
filterId: "ripples",
color: 0xffaa33,
intensity: 0.005,
amplitude: 1,
animated: {time: {animType: "move", speed: 0.0012}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
ray
Rays. Rotating light rays.
Default zOrder 120
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
alpha |
number | 0.55 |
yes | Ray opacity, 0–1. |
alphaDiscard |
boolean | false |
— | Discard the faint, dark parts of the effect instead of drawing them. |
anchorX |
number | 0.5 |
yes | Horizontal center of the effect as a fraction of the filtered area: 0 left, 0.5 middle, 1 right. |
anchorY |
number | 0.5 |
yes | Vertical center of the effect as a fraction of the filtered area: 0 top, 0.5 middle, 1 bottom. |
color |
color | 0xff8010 |
color modes | Effect color as a number, 0xRRGGBB. |
dimX |
number | 100 |
yes | Horizontal ray scale. |
dimY |
number | 100 |
yes | Vertical ray scale. |
divisor |
number | 16 |
yes | Number of rays. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "ray",
filterId: "rays",
color: 0xcf8000,
alpha: 0.5,
divisor: 32,
anchorX: 0,
anchorY: 0,
animated: {time: {animType: "move", speed: 0.0005}}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
xray
X-Rays. Bright, radiating beams, such as a sunburst.
Default zOrder 130
| Parameter | Type | Default | Animate | Description |
|---|---|---|---|---|
anchorX |
number | 0.5 |
yes | Horizontal center of the effect as a fraction of the filtered area: 0 left, 0.5 middle, 1 right. |
anchorY |
number | -1 |
yes | Vertical center of the effect as a fraction of the filtered area: 0 top, 0.5 middle, 1 bottom. |
blend |
number | 8 |
yes | How the effect is mixed with the image. See Blend Modes. |
color |
color | 0xff8010 |
color modes | Effect color as a number, 0xRRGGBB. |
dimX |
number | 1 |
yes | Horizontal beam scale. |
dimY |
number | 1 |
yes | Vertical beam scale. |
divisor |
number | 40 |
yes | Number of beams. |
intensity |
number | 0.1 |
yes | Beam intensity. |
time |
number | 0 |
yes | Shader clock. Static values freeze one frame; animate it with move (see the example) to make the effect flow. |
await leanFX.addUpdateFiltersOnSelected([{
filterType: "xray",
filterId: "sunburst",
color: 0xffba00,
blend: 9,
divisor: 36,
intensity: 4,
anchorX: 0,
anchorY: 0,
animated: {
time: {animType: "move", speed: 0.0012},
anchorX: {animType: "syncCosOscillation", loopDuration: 6000, val1: 0.4, val2: 0.6}
}
}]);
Visual check: User marked this example working on a Token in Foundry v14 on 2026-10-08. Other images and target types still need their own visual check.
Examples run on the selected placeables; see API Reference for other targets.