Skip to content

Effects Reference ​

Exaplay's visual effects run inside the engine, on the GPU, as part of the normal render of a clip. There is no separate effects service and no extra port to open: an effect is a property of the clip, stored in the project and set through the same channels as any other clip property — the Inspector, POST /data, a TCP/OSC set: command, or a Data Track.

Replaces the old "Effects Server API" page

Earlier versions of this page documented a Node.js "Effects Server" on http://localhost:3001 with /effects/apply, /effects/colorkey and a ws://localhost:3001/effects socket. No such service exists — it was never part of the shipped product, nothing in the UI connects to port 3001, and no firewall rule is needed for it. Use the value paths on this page instead.

The contract ​

Every clip carries two things:

ValueTypeMeaning
effect-namestringThe effect's id (see the catalogue below), or none
effect.<parameter>floatOne parameter of the selected effect

A clip has one effect at a time — the picker is a choice, not a stack. Setting effect-name to a different id replaces the current effect; setting it to none removes it.

Parameter names are the shader's own uniform names (lowercase with underscores). Writing effect.<parameter> for a parameter the current effect does not have is harmless — it is simply never read.

Where the values live ​

effect-name and effect.* are ordinary clip values, so they are:

  • saved with the project,
  • applied on the next rendered frame (no reload),
  • fanned out to render clients on a multi-client rig like any other uid-addressed value edit (see Multi-Client Setup),
  • addressable from every control protocol.

Setting an effect ​

From the Inspector ​

Select the clip, open the Effects section and its Effect picker, choose an effect, and adjust the sliders below it. See Visual Effects.

Over HTTP ​

http
POST /data HTTP/1.1
Host: 192.168.1.5:8123
Content-Type: application/json

{
  "type": "exaObj",
  "uid": 12345678,
  "values": {
    "effect-name": "colorkey",
    "effect.key_r": 0.0,
    "effect.key_g": 1.0,
    "effect.key_b": 0.0,
    "effect.tolerance": 0.3,
    "effect.edge_softness": 0.1
  }
}

uid is the clip's UID from GET /project?req=tree. type must be exaObj — a /data request without it is not dispatched.

Over TCP / OSC / cue script ​

The generic set: verb addresses the same paths:

comp_main.media3.set:effect-name=blur
comp_main.media3.set:effect.blur_amount=3.5

See the TCP Command API.

From a timeline curve ​

A Data Track with the Exaplay value output can drive any of these paths, so an effect parameter can be animated along the timeline.

Common controls ​

These apply on top of whichever effect is selected:

ValueDefaultMeaning
effect.intensity100Wet/dry mix of the effect, in percent
effect.use-regionfalseApply the effect to a sub-region only
effect.entire-effecttrueApply to the whole frame
effect.x, effect.y0Region origin
effect.w, effect.h100%Region size
effect.alignCRegion alignment
effect.scalingcoverRegion scaling mode
effect.flip-h, effect.flip-vfalseFlip the effect region
effect.angle0Rotate the effect region

Effect catalogue ​

46 effects in 10 categories, plus none. Ranges below are the slider limits the Inspector enforces; the same limits apply to values written over the API.

Keying ​

Effect idParameters (range, default)
colorkeykey_r (0–1, 0), key_g (0–1, 1), key_b (0–1, 0), tolerance (0–1, 0.3), edge_softness (0–1, 0.1), luma_tolerance (0–1, 0.35), spill (0–1, 0.5), spill_balance (0–1, 0.5)
luminance_keythreshold_low (0–1, 0), threshold_high (0–1, 0.3), softness (0–1, 0.1), invert (0–1, 0)

The key colour is three separate 0–1 floats, not a hex string. Green screen (#00FF00) is key_r 0, key_g 1, key_b 0 — which is the default.

Tone & Exposure ​

Effect idParameters (range, default)
levelsblack_point (0–1, 0), white_point (0–1, 1), gamma (0.5–2, 1)
brightness_contrastbrightness (−1–1, 0), contrast (0–2, 1)
exposureexposure (−2–2, 0)
gammagamma_value (0.5–2.5, 1)
color_balanceshadows_/midtones_/highlights_ × cyan_red, magenta_green, yellow_blue (each −1–1, 0)
shadows_highlightsshadows (−1–1, 0), highlights (−1–1, 0)

Color Management ​

Effect idParameters (range, default)
black_whitecontrast (0.5–2, 1)
sepiatone_strength (0–2, 1), saturation (0–2, 1)
invertamount (0–1, 1)
hue_saturationhue (−180–180, 0), saturation (−1–2, 1), lightness (−1–1, 0)
color_temperaturetemperature (−1–1, 0) — shown as Warm / Cool Tint: an additive red/blue offset, not a Kelvin white balance. For that use the clip's Color Correction section.

Color Grading ​

Effect idParameters (range, default)
add_coloradd_r, add_g, add_b (each −1–1, 0)
multiply_colormul_r, mul_g, mul_b (each 0–2, 1)
vibrancevibrance (−1–2, 0)
color_curvescurve_amount (−1–1, 0) — shown as S-Curve Contrast: one strength value toward a fixed S-curve, not an editable curve.

Blur & Sharpening ​

Effect idParameters (range, default)
blurblur_amount (0.5–5, 2)
sharpensharpness (0.5–3, 1.5) — 1 leaves the picture untouched, above 1 sharpens, below 1 softens; the average brightness stays the same.
motion_blurblur_angle (0–360, 0), blur_strength (0–1, 0)

Artistic Effects ​

Effect idParameters (range, default)
pixelatepixel_size (1–50, 8)
edgeedge_strength (0–2, 1)
oil_paintingbrush_size (1–10, 3), intensity (0–1, 0.5)
toonlevels (2–8, 4), edge_threshold (0–1, 0.3), edge_strength (0–1, 1)
kaleidoscopesegments (2–32, 6), rotation (0–360, 0), zoom (0.1–5, 1), center_x/center_y (0–1, 0.5)

Stylize ​

Effect idParameters (range, default)
chromatic_aberrationamount (0–0.06, 0.012)
vignetteamount (0–1, 0.5), radius (0.2–1.5, 0.8), softness (0.05–1, 0.5)
posterizelevels (2–32, 6)
halftonescale (20–300, 90), softness (0–1, 0.4)
scanlinescount (100–1080, 480), intensity (0–1, 0.4)

Distortion & Projection ​

Effect idParameters (range, default)
domeazimuth (−360–360, 90), elevation (−179–179, 50), rotation (0–90, 0)
fisheye180_domeazimuth (−360–360, 0), elevation (−179–179, 0), rotation (−180–180, 0), lens_rotation (−180–180, 0), zoom (0.5–2, 1), center_x/center_y (0–1, 0.5), edge_softness (0–0.2, 0.01)
fish2domeazimuth (−720–720, 0), elevation (−360–360, −90), rotation (−360–360, 0), fovY (1–360, 230), fisheyeFOV (1–360, 180), center_x/center_y (0–1, 0.5), circle_size (0.05–4, 1)
dome_flat2gridratiox (1–100, 16), ratioy (1–100, 9), azimuth (0–360, 180), elevation (0–90, 55), fov (1–180, 45)
rectangle_to_domedome_radius (0–10000, 300), dome_aperture (0–360, 180), virtual_screen_azimuth (−180–180, 0), virtual_screen_elevation (−90–90, 35), virtual_screen_width (0–10000, 355), virtual_screen_height (0–10000, 200), dome_tilt (0–180, 21)
dome_plane2fisheyeazimuth (0–360, 0), altitude (0–90, 90), zoom (1–350, 100), fov (1–360, 180), camera_x/camera_y (−100–100, 0)
lens_distortionbarrel_amount (−1–1, 0), vignette (0–1, 0)
camera_intrinsicfocal_length (0.5–3, 1), principal_x/principal_y (−0.5–0.5, 0), radial_k1/radial_k2 (−1–1, 0), tangential_p1/tangential_p2 (−0.5–0.5, 0), skew (−0.5–0.5, 0)

Putting a fisheye on a dome: which of the two ​

fisheye180_dome assumes the source was shot through a 180° lens that fills the frame. Reach for fish2dome when it was not — a fisheye livestream whose circle sits off-centre or cropped, or a Giant Screen / Omnimax print, whose lens is not 180° and which the other effect therefore stretches.

Two groups of parameters carry that:

  • fisheyeFOV is the angle the input lens covered. Set it to the lens's own figure; leaving it at 180 on a narrower lens is exactly the stretch.
  • center_x, center_y, circle_size describe where the image circle sits in the file. The centre is a fraction of the image and the diameter a multiple of its shorter side, so the numbers survive a re-encode at another resolution and mean the same thing on a client running a proxy. From pixels measured in an image editor: center_x = centre_px_x / image_width, center_y = centre_px_y / image_height, circle_size = diameter_px / min(image_width, image_height). The defaults describe a centred circle filling the shorter side, so an ordinary full-frame circular fisheye needs no calibration.

fovY is the output dome's coverage — 180 for a hemisphere, 230 for a dome that carries on past the springline. Orientation is azimuth (heading), elevation (tilt, −90 puts the lens axis on the apex) and rotation (roll about the lens axis). Directions the lens never recorded are left transparent rather than smeared, so a narrow lens on a wide dome shows an empty rim.

The mapping is equidistant (radius ∝ angle off the lens axis), which is what Giant Screen and scientific fisheye lenses are calibrated to.

fish2dome was written by Tom Kwasnitschka (GEOMAR Helmholtz Centre for Ocean Research Kiel) and shared for Exaplay.

Generative Domemaster ​

Procedural fills, animated from the engine clock — they replace the clip's image rather than processing it. The UI no longer offers them as effects: the same fills are built-in generators ($[realtime]/dome-hyperspace, dome-nebula, dome-fluid, dome-fire). The effect ids stay valid, so a project that uses one keeps playing it.

Effect idParameters (range, default)
dome_hyperspacespeed (0–5, 1), segments (1–24, 6), twist (−4–4, 1), hue_shift (0–1, 0), glow (0–3, 1.2), brightness (0–3, 1), edge_softness (0–0.2, 0.02)
dome_auroraspeed (0–3, 0.6), scale (0.5–6, 2.5), hue_shift (0–1, 0.55), intensity (0–3, 1.3), star_density (0–1, 0.5), brightness (0–3, 1), edge_softness (0–0.2, 0.02)
dome_fluidspeed (0–3, 0.7), scale (0.5–6, 2.2), swirl (0–3, 1.1), hue_shift (0–1, 0.15), iridescence (0–2, 0.9), brightness (0–3, 1), edge_softness (0–0.2, 0.02)
dome_firespeed (0–4, 1.2), scale (0.5–6, 2.6), turbulence (0–2, 1), flame_height (0–2, 0.8), intensity (0–3, 1.4), brightness (0–3, 1), edge_softness (0–0.2, 0.02)

LED & Virtual Production ​

Effect idParameters (range, default)
led_moireled_moire_strength (0–1, 0.5), led_moire_h_radius/led_moire_v_radius (0–4, 1)
led_black_liftled_black_lift (0–0.15, 0.02), led_black_gamma (0.5–2, 1), led_white_clip (0.8–1, 1)
led_pixel_gridled_grid_pitch (1–32, 4), led_grid_gap (0–0.6, 0.15), led_grid_darkness (0–1, 0.8)
led_gamut_limiterled_max_sat (0–2, 1), led_sat_rolloff (0–1, 0.3), led_skin_protect (0–1, 0)
eye_adapteye_white_r/eye_white_g/eye_white_b (0.5–2, 1), eye_adapt_degree (0–1, 0.8), eye_luminance (0.1–4, 1), eye_hunt (0–2, 0), eye_stevens (0–1, 0), eye_purkinje (0–1, 0), eye_surround (−1–1, 0), eye_chroma (0–2, 1), eye_lightness_exp (0.5–2, 1)

Exaplay 3 User Documentation