# Visual Effects

Exaplay 3 includes a GPU-accelerated effects pipeline powered by the **Effects Server** — a Node.js process that manages shader state and broadcasts changes to the rendering engine via WebSocket.

## Available Effects

### Color Keying

Remove a specific colour from a layer (e.g. green screen).

| Parameter      | Description                                         |
| -------------- | --------------------------------------------------- |
| `keyColor`     | RGB colour to remove (hex or picker)                |
| `tolerance`    | How closely a pixel must match the key colour (0–1) |
| `edgeSoftness` | Blend at the edges of the keyed region (0–1)        |

### Luminance Adjustment

Non-destructive brightness, contrast, and gamma correction.

| Parameter    | Range       | Default |
| ------------ | ----------- | ------- |
| `brightness` | -1.0 to 1.0 | 0.0     |
| `contrast`   | -1.0 to 1.0 | 0.0     |
| `gamma`      | 0.1 to 4.0  | 1.0     |

### Custom Shader Uniforms

Any GLSL uniform value can be driven in real time via the `/uniform` endpoint. This is used for custom effects developed in Notch or other GLSL-based tools.

## Applying Effects

### Via the Inspector

1. Select a clip in the Timeline.
2. In the Inspector, scroll to the **Effects** section.
3. Click **+ Effect** and choose an effect type.
4. Adjust the parameters using the sliders.

### Via the API

Effects can also be applied programmatically using the Effects Server REST API. See the [Effects Server API](/v3/developer-reference/effects-server-api.md) reference.

![Effects inspector section](/files/sJhdREx054Kemvcu8hYu)

## Effect Performance

All effects are applied as fragment shader passes on the GPU — they add negligible latency and do not affect the decode pipeline. Multiple effects can be stacked on a single clip.

## Removing Effects

* Select the effect in the Inspector and click the **× Remove** button.
* Or send `DELETE /effects/colorkey` (or `/effects/luminance`) to the Effects Server API.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.exaplay.one/v3/features/effects.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
