Appearance
Effects Server API
The Effects Server runs on http://localhost:3001 and exposes REST endpoints and a WebSocket for real-time GPU shader control.
Base URL
http://localhost:3001Effects
Apply an Effect
POST /effects/applyRequest body
json
{
"effectId": "colorkey",
"params": {
"keyColor": "#00FF00",
"tolerance": 0.3,
"edgeSoftness": 0.05
}
}Response 200 OK
json
{ "status": "applied", "effectId": "colorkey" }Clear All Effects
POST /effects/applyRequest body
json
{ "clear": true }Color Keying
Apply Color Key
POST /effects/colorkeyRequest body
| Field | Type | Description |
|---|---|---|
keyColor | string | Hex colour to remove (#RRGGBB) |
tolerance | float | Match tolerance 0–1 |
edgeSoftness | float | Edge blend softness 0–1 |
Remove Color Key
DELETE /effects/colorkeyLuminance
Apply Luminance Adjustment
POST /effects/luminanceRequest body
| Field | Type | Range | Default |
|---|---|---|---|
brightness | float | -1.0 to 1.0 | 0.0 |
contrast | float | -1.0 to 1.0 | 0.0 |
gamma | float | 0.1 to 4.0 | 1.0 |
Remove Luminance
DELETE /effects/luminanceShader Uniforms
Set a Uniform Value
POST /uniformRequest body
json
{
"effectId": "myShader",
"uniform": "uIntensity",
"value": 0.75
}Sets a named GLSL uniform on the specified effect. The engine applies the value on the next render frame.
Data Tracks
List Data Tracks
GET /datatrackCreate / Update a Data Track
POST /datatrackRequest body
json
{
"id": "dimmer1",
"name": "Dimmer 1",
"outputType": "osc",
"destination": "192.168.1.10:8000",
"oscAddress": "/fixture/1/dimmer",
"interpolation": "linear",
"keyframes": [
{ "time": 0, "value": 0 },
{ "time": 5, "value": 255 },
{ "time": 10, "value": 0 }
]
}Delete a Data Track
DELETE /datatrack/:trackIdCalculate Value at Frame
POST /datatrack/:trackId/valueRequest body
json
{ "frame": 150, "fps": 30 }WebSocket Connections
Effect State Sync
ws://localhost:3001/effectsAll connected clients receive a message whenever the effect state changes:
json
{
"type": "effectsUpdate",
"effects": { "colorkey": { ... }, "luminance": { ... } }
}Data Track Updates
ws://localhost:3001/datatrackBroadcasts the current value of all data tracks on every frame.
Property Keyframes
Get All Keyframes
GET /property-keyframesReturns all keyframes across all tracks and properties.
Add or Update Keyframes
POST /property-keyframesRequest body
json
{
"trackId": "clip_uid_opacity",
"property": "opacity",
"keyframes": [
{ "time": 0.0, "value": 0.0, "interpolation": "linear" },
{ "time": 2.0, "value": 1.0, "interpolation": "ease-out" }
]
}Interpolation types: linear, ease-in, ease-out, ease-in-out, step
Response 200 OK
json
{ "status": "saved", "trackId": "clip_uid_opacity", "count": 2 }Delete Keyframes for a Track
DELETE /property-keyframes/:trackIdRemoves all keyframes for the given track ID.
Preview
Get Preview Settings
GET /previewConfigure Preview
POST /previewRequest body
json
{
"compositionId": "comp_main",
"enabled": true,
"width": 480,
"height": 270
}Disable Preview
DELETE /preview/:compositionIdMonitor
Get Active Connections
GET /monitor/connectionsReturns a list of all active HTTP and WebSocket connections with type, remote address, status, and duration.
Get Host Information
GET /monitor/hostReturns hostname, platform, Node.js version, and all network interface addresses.
Response sample
json
{
"hostname": "SHOW-PC-01",
"platform": "win32",
"interfaces": {
"Ethernet": [{ "address": "192.168.1.5", "family": "IPv4" }]
}
}Add Monitor Event
POST /monitor/eventsRequest body
json
{
"type": "custom",
"message": "External trigger received",
"source": "192.168.1.100"
}Project Export
Export Project to ZIP
POST /project/exportPackages the current project and all referenced media into a ZIP archive.
Rate limit: 5 requests per minute.
Response: application/zip binary stream — the browser downloads it automatically.
Error responses:
| Status | Meaning |
|---|---|
429 | Rate limit exceeded — wait 60 seconds |
404 | No project is currently loaded |
500 | Export failed — check server log |
