# Guide: Applying Post-Processing Effects

ChainRender's **effects library** (`EffectPresetRegistry`) applies post-processing — CRT, glass, vignette,
scanlines, grain — over a rendered scene or image, as a composable, content-addressed stack.

## Apply an effect stack

Effects are referenced by preset (content hash) and applied as a stack over the base render. Each effect has an
**SVG-filter floor**, so the effect applies on-chain (not only as a GPU shader) — the styled result is part of the
trustless output, and richer GPU versions enhance over it.

```ts
// conceptually: base scene + an ordered effect stack (each preset referenced by hash)
// [crt] -> [vignette] -> [grain]
```

## Why effects are floored

A naive "apply a shader" would only work on a capable GPU client. ChainRender's effects each have an on-chain
SVG-filter floor, so:
- the effect **applies on-chain** (Grade A) as an SVG filter,
- a GPU client can render a richer version over it,
- it **fails closed** to the SVG-filter floor.

## Composability

Effects are data — stack several, reorder them, reuse presets across components. Because presets are
content-addressed, an effect stack is reproducible and shareable.

## Related
- **[Advanced Scenes, 3D & Effects](../concepts/advanced-scenes.md)** · **[The Floor](../concepts/the-floor.md)**
