The show format
One text file, one song, every light in the room. Also as plain Markdown at /spec.md.
A show is a light show programmed to one song, in one plain-text file, the way a lighting desk keeps its cues. It says which lights hang where ([rig]), the colours and positions it uses ([palette]), what happens at which bar of the song ([cues]), and the moving parts: chases, effects and video. club.slopped.site plays it in 2D or 3D in time with the music, and drives a virtual DMX universe from it, as a real rig would be driven.
This page is generated from the validator's own lists. The validator is the same function in the browser and in the club's checks, so this page, the editor and the club can't disagree. Everything about it was written by machines.
- The editor: club.slopped.site/editor/ (shows the room as you type, checks every line, makes a share link)
- A skill file for agents that write shows: club.slopped.site/skills/writing-shows/SKILL.md
A whole show
show 1
title: My first show
by: you
about: Eight pars, two heads and a wall, to Tea Break.
[track]
song: tea-break-sloppy-droppy
[rig]
par front*8 at -8,3,7 to 8,3,7 in pars
wash head*2 at -5,-1,8.5 to 5,-1,8.5 in heads
wall screen at 0,-6.6,6 px 16x8 m 10x5
haze fog at 0,-6.8,0.5
[palette]
color tea #c8702a
color milk #fff0d8
pos crowd pan -25..25 tilt 55
[cues]
1 fog: dim 50
1 pars: color tea dim 20 fade 8 bars
1 run steam
drop heads: pos crowd color milk dim 90
drop run pour for 32 bars
drop run sway
biscuit all: dim 0 fade 4 bars
[chase pour]
on: pars
pattern: x ~ x ~
order: inout
look: dim 90 color milk
decay: 1.5b
[fx sway]
on: heads
attr: pan
wave: sine
period: 4 bars
size: 30
spread: 180
[video steam]
on: screen
kind: plasma
colors: tea milk
period: 16 bars
dim: 50
The file
- Line 1 is
show 1: the format and its version. - Then
key: valuemeta lines, then sections in square brackets.[chase NAME],[fx NAME]and[video NAME]take a name: lowercase letters, digits,-and_, starting with a letter. //starts a comment, anywhere on a line. Blank lines are ignored.- Every error says the line, the section and what would be right.
| Key | What |
|---|---|
| title | the show’s name, up to 60 characters (required) |
| by | who programmed it |
| about | one line, up to 160 characters |
| seed | a whole number: random chases and sparkle use it, so the same seed is the same show |
[track]
The song the show is programmed to. Without it, the show plays to a silent bar clock at 120 beats a minute.
| Key | What |
|---|---|
song | the id of a song in the club’s set (below) |
from | the first bar that plays (default 1) |
to | the bar it stops at (default the end) |
The songs in the club's set
Times can name a section of the song (by name, lowercased with spaces as -) or its role (intro, build, drop, breakdown, roller, drop2, outro). drop#2 is the second section called Drop, or if there is only one, the second whose role is drop.
| Song id | Title | BPM | Bars | Sections (name or role, first bar) |
|---|---|---|---|---|
tuning-up-sloppy-droppy | Tuning Up (Sloppy Droppy remix) | 132 | 136 | one-a (intro, 1); still-a (intro, 9); rolling-shut (intro, 17); opening (main, 33); open (main, 49); trio-and-the-a-again (breakdown, 65); build (build, 81); march (drop, 89); tutti (drop, 105); closing (outro, 121); one-a-to-finish (outro, 129) |
big-number-sloppy-droppy | The Big Number (Sloppy Droppy remix) | 138 | 144 | kick-and-hats (intro, 1); offbeat-bass (intro, 9); the-harp-in-triplets (intro, 17); gates (main, 33); the-understudy (breakdown, 49); the-big-number-on-saws (breakdown, 65); build (build, 81); drop (drop, 97); out (outro, 129); kick-to-the-end (outro, 137) |
scene-change-sloppy-droppy | Scene Change (Sloppy Droppy remix) | 140 | 120 | clocking-on (intro, 1); rolling (intro, 9); flats-stabbed (main, 17); heavy-lifting (main, 33); the-tune-on-the-mallet (breakdown, 49); build (build, 65); drop (drop, 73); drop-the-tune-s-shape (drop, 89); clocking-off (outro, 105); kick-to-the-end (outro, 113) |
tea-break-sloppy-droppy | Tea Break (Sloppy Droppy remix) | 170 | 144 | kettle (intro, 1); ghosts-and-sub (intro, 17); drop (drop, 33); drop-the-other-loop (drop, 49); biscuit (breakdown, 65); second-drop (drop2, 81); second-drop-the-other-loop (drop2, 97); cold-tea (outro, 113); drums-for-the-next-dj (outro, 129) |
pocket-rule-sloppy-droppy | Pocket Rule (Sloppy Droppy remix) | 175 | 144 | drums-for-the-dj (intro, 1); ghosts-and-sub (intro, 17); drop (drop, 33); drop-the-b-part (drop, 49); roller (roller, 65); half-time-full-speed (breakdown, 81); second-drop (drop2, 97); second-drop-the-b-part (drop2, 113); drums-for-the-next-dj (outro, 129) |
strip-light-sloppy-droppy | Strip Light (Sloppy Droppy remix) | 175 | 144 | drums-for-the-dj (intro, 1); ghosts (intro, 17); drop (drop, 33); drop-reese (drop, 49); roller (roller, 65); the-bridge-gated (breakdown, 81); second-drop (drop2, 97); second-drop-chopped (drop2, 113); lights-off (outro, 129) |
[rig]
One line per fixture, or per row of them:
<type> <name> at x,y,z [to x,y,z] [in group,group] [@universe.address]
par front*8 at -8,3,7 to 8,3,7 in pars
wall screen at 0,-6.6,6 px 24x12 m 10x5
- Positions are metres, written with no spaces.
xruns across the room (negative is left as the floor sees it),yfrom the stage edge into the room (the stage is negative),zup. A head below 1.5 m stands on the floor and points up; above, it hangs from the truss and points down. name*N ... to x,y,zmakes N fixtures,name1tonameN, spread evenly along the line;nameis then a group of them.inadds the fixtures to groups. Every type is also a group (par,wash…), andallis everything.- Fixtures are patched in order from universe 1, address 1; a fixture never straddles two universes, and a wall starts a universe of its own.
@2.1patches from universe 2, address 1. - A wall needs
px WxH(its pixels) andm WxH(its size in metres).
| Type | What | Attributes | DMX channels, in patch order |
|---|---|---|---|
par | A fixed wash light: one colour, no movement. | dim, color, strobe | dim, red, green, blue, shutter |
wash | A soft beam that pans and tilts, any colour, zooms 8 to 50 degrees. | dim, color, strobe, pan, tilt, zoom | pan, pan fine, tilt, tilt fine, speed, dim, red, green, blue, white, zoom, shutter |
spot | A hard beam with a colour wheel (nearest wheel colour), gobos and a prism, zooms 4 to 30 degrees. | dim, color, strobe, pan, tilt, zoom, gobo, prism | pan, pan fine, tilt, tilt fine, speed, dim, shutter, colour wheel, gobo, gobo spin, prism, focus, zoom |
strobe | A bright white flash tube. Its rate is capped at 3 flashes a second. | dim, strobe | dim, rate |
bar | Eight RGB pixels in a row; video layers pixel-map onto it. | dim, color, strobe | dim, red 1, green 1, blue 1, red 2, green 2, blue 2, red 3, green 3, blue 3, red 4, green 4, blue 4, red 5, green 5, blue 5, red 6, green 6, blue 6, red 7, green 7, blue 7, red 8, green 8, blue 8 |
blinder | Two warm-white cells pointed at the crowd. For one hit on the drop, not for long. | dim | cell 1, cell 2 |
haze | Haze in the air, so beams show. dim is its output. | dim | output, fan |
wall | An LED wall of W × H RGB pixels, patched from the start of its own universe. | dim, color | red, green, blue for each pixel, left to right, top row first; from the start of its own universe |
The spot's colour wheel, by DMX value: 8 open (#ffffff), 24 red (#ff2a1f), 40 orange (#ff8a1f), 56 yellow (#ffe14a), 72 green (#3dff6e), 88 cyan (#2ee6ff), 104 blue (#2f5bff), 120 magenta (#ff3ad6). Its gobos: open, dots, ring, bars, star, drip, shards, eye.
Selecting fixtures
Anywhere a show names fixtures, it can write a fixture, a group or a type, join them with +, and filter each with :odd, :even, :left, :right, :centre, :3 or :2-5 (positions counted from 1): pars:odd+washes.
[palette]
color slime #59ff7a
pos crowd pan -25..25 tilt 60
beam tight zoom 6 gobo dots
A range A..B spreads across the fixtures it is given to, in order: a fan of positions, or a gradient of colours (color slime..ice). Names are shared across colours, positions and beams. Built-in colours: red #ff2a1f, orange #ff8a1f, yellow #ffe14a, green #3dff6e, cyan #2ee6ff, blue #2f5bff, magenta #ff3ad6, white #ffffff.
[cues]
The timeline. Each line starts with a time:
| Time | Means |
|---|---|
33 | bar 33, beat 1 |
33.3 | bar 33, beat 3 |
33.2.5 | bar 33, halfway through beat 2 |
drop | the first bar of the section called Drop (or the first whose role is drop) |
drop#2 | the second one |
drop+8 | eight bars into it |
drop+8.3 | eight bars in, beat 3 |
Then either a selection, a colon and attributes, with an optional fade:
drop washes: pos crowd color slime dim 90
breakdown all: dim 0 fade 4 bars
or run NAME [for LENGTH | until TIME] or stop NAME for a chase, fx or video layer. Lengths are beats (4b, 0.5b, a bare number) or bars (2 bars).
| Attribute | Value |
|---|---|
dim | intensity, 0 to 100 (per cent) |
color | a palette colour or #rrggbb; A..B spreads a gradient across the fixtures |
pos | a palette position (pan and tilt) |
pan | degrees, -270 to 270 (0 faces the floor); A..B fans across the fixtures |
tilt | degrees, -135 to 135 (0 points straight down from the truss, or straight up from the floor) |
zoom | beam angle in degrees (wash 8-50, spot 4-30) |
beam | a palette beam (zoom, gobo, prism) |
gobo | a gobo: open, dots, ring, bars, star, drip, shards, eye |
prism | on or off |
strobe | flashes a second, 0 (off) to 3; 3 is the WCAG limit |
Cues track: an attribute keeps the last value a cue gave it until another cue changes it, fading over the cue's fade. Lines at the same time apply in file order.
[chase NAME]
Steps through fixtures on a rhythm. The rhythm is written in Patter, the cartridges' pattern language (cart.slopped.site/spec.md): one cycle of the pattern lasts cycle:, every x lights the next fixtures.
| Key | What |
|---|---|
on | the fixtures it steps through, in order |
pattern | a Patter rhythm for one cycle: x a step, ~ or . a rest, [x x] two in one step, x*4, <x ~> taking turns, notes (c4) for order: pitch |
cycle | how long one pass of the pattern takes (default one bar) |
order | forward, back, bounce, random, all, inout, outin, pitch |
width | fixtures lit on each step (default 1) |
look | the attributes a step sets (default dim 100) |
decay | how long a step takes to fade out; 0 holds it for its step (default 0.5b) |
[fx NAME]
A wave on one attribute, its phase spread across the fixtures, the way a desk's effects engine fans a sine across a row of heads.
| Key | What |
|---|---|
on | the fixtures it moves |
attr | dim, pan, tilt, zoom, hue |
wave | sine, saw, ramp, triangle, square, pulse |
period | one cycle of the wave (default one bar) |
size | how far it swings: per cent for dim, degrees for pan, tilt, zoom and hue |
base | dim only: the level it swings up from, merged highest-takes-precedence; without it the wave dips the fixture’s own level |
spread | the phase spread across the fixtures in degrees: 0 together, 360 one full wave across them |
wings | 1 to 4: 2 mirrors the spread from the middle |
duty | the on part of a square or pulse wave |
[video NAME]
A picture on the pixel wall, pixel-mapped onto any LED bars named with it (the bar's pixels show the part of the picture where they hang).
| Key | What |
|---|---|
on | a wall, and LED bars to pixel-map the same picture onto |
kind | solid, bars, rings, plasma, scan, drip, sparkle, checker, eyes |
colors | 1 to 4 colours |
period | one cycle of the picture |
dim | 0 to 100 |
blend | add (light on light, the default) or over (covers what is under it) |
angle | degrees, for bars and scan |
| Kind | What |
|---|---|
solid | one colour over everything |
bars | stripes sliding across (angle sets the direction) |
rings | rings opening from the centre, one a period |
plasma | slow smooth colour clouds |
scan | one line sweeping across |
drip | slime dripping down the wall |
sparkle | pixels lighting at random (seeded) and fading |
checker | a checkerboard swapping every period |
eyes | two green eyes that blink now and then |
Layers
Lowest first: the cues; then the runs (chases, fx, video) in the order they started, a later one winning (latest takes precedence, LTP). Intensity (dim) merges highest-takes-precedence (HTP) between cues and chases. The shutter (strobe) gates the light last.
Safety
<!-- cite: wcag22-flashes --> <!-- cite: wcag22-general-flash --> Flashing light can trigger seizures in people with photosensitive epilepsy. WCAG 2.3.1 asks that nothing flashes more than three times in any one second. Every show is played through, frame by frame, before it is allowed to play; a show that breaks the rule anywhere is refused, with the bar and beat and what flashed.
| Rule | Value |
|---|---|
| sampled | 60 frames a second, the whole show |
| a transition | relative luminance changes by 0.1 or more and the darker side is under 0.8 |
| a red transition | a saturated red (R ÷ (R + G + B) ≥ 0.8) and (R − G − B) × 320 changes by more than 20; or any change into or out of a visible saturated red |
| too much | more than 6 transitions (three flashes) in any one second |
| where | every light on its own; a 3 × 3 grid of the stage as the floor sees it; the whole view; and each wall’s pixels, by the area flashing together (more than 6.1 m²) |
| strobes | 3 a second at most, flashing for the first 25% of each period |
<!-- cite: mdn-prefers-reduced-motion --> With reduced motion (the visitor's system setting, or Calm lights on the floor), the same show plays calmer, and must pass the same check that way too:
| Thing | With reduced motion |
|---|---|
| strobe | stops; the light holds at 50% instead |
| chase | a slow fade across its fixtures, one wave every 8 beats, at 60% |
| fx | 8 beats a cycle at least; pan and tilt swing 50% as far; square, pulse, saw and ramp dimmer waves become sines |
| video | 4 times slower (at least 8 beats); sparkle, checker and scan become plasma |
| fades | dim and colour take at least 0.5 beats |
| blinders | 50% at most |
While a show plays, a governor watches each light as frames go by and holds it still rather than let it flash a fourth time in a second, as a last line behind the check.
Limits
| Limit | Value |
|---|---|
| file size | 32,768 bytes |
| lines | 1500 |
| fixtures | 96 |
| universes | 8 |
| wall pixels | 576 (at most 48 each way) |
| palette entries | 48 |
| chases, effects, video layers | 24, 24, 12 |
| cue lines | 800 |
| strobe rate | 3 flashes a second |
| share link | 12,000 characters |
| room | x -10 to 10, y -7 to 16, z 0 to 11 metres |
Share links
A show travels in the fragment of a link to the editor: club.slopped.site/editor/#s=1.<data>, its text deflated (raw DEFLATE) and written in base64url. The part after # never leaves the browser, so nothing is stored anywhere. A link from somebody else is checked like any other show before it plays.
