diff --git a/show/dance2022/URI b/show/dance2022/URI
new file mode 100644
--- /dev/null
+++ b/show/dance2022/URI
@@ -0,0 +1,1 @@
+http://light9.bigasterisk.com/show/dance2022
diff --git a/show/dance2022/deviceClass.n3 b/show/dance2022/deviceClass.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/deviceClass.n3
@@ -0,0 +1,62 @@
+@prefix : .
+@prefix rdfs: .
+
+:color a :DeviceAttr; rdfs:label "color"; :dataType :color .
+:brightness a :DeviceAttr; rdfs:label "brightness"; :dataType :scalar .
+:strobe a :DeviceAttr; rdfs:label "strobe"; :dataType :scalar;
+ rdfs:comment "0=none, 1=fastest" .
+:strobeSpeed a :DeviceAttr; rdfs:label "strobeSpeed"; :dataType :scalar .
+:doNotUse a :DeviceAttr; rdfs:label "-"; :dataType :scalar .
+
+:MegaFlash a :DeviceClass; rdfs:label "Mega Flash" ;
+:doc ;
+ :deviceAttr :brightness, :strobeSpeed;
+ :attr
+ [ :outputAttr :strobeSpeed; :dmxOffset 0 ],
+ [ :outputAttr :brightness; :dmxOffset 1 ] .
+
+
+:SimpleDimmer a :DeviceClass; rdfs:label "SimpleDimmer";
+ :deviceAttr :brightness;
+ :attr
+ [ :outputAttr :level; :dmxOffset 0 ] .
+
+:ChauvetColorStrip a :DeviceClass; rdfs:label "ChauvetColorStrip";
+ :setup "SYS -> SdAd -> ";
+ :docs ;
+ :deviceAttr :color;
+ :attr
+ [ :outputAttr :mode; :dmxOffset 0 ],
+ [ :outputAttr :red; :dmxOffset 1 ],
+ [ :outputAttr :green; :dmxOffset 2 ],
+ [ :outputAttr :blue; :dmxOffset 3 ] .
+
+:Bar612601d a :DeviceClass; rdfs:label "LED Bar (mode d)";
+ :deviceAttr :color;
+ :attr
+ [ :outputAttr :red; :dmxOffset 0 ],
+ [ :outputAttr :green; :dmxOffset 1 ],
+ [ :outputAttr :blue; :dmxOffset 2 ] .
+
+:LedPar90 a :DeviceClass; rdfs:label "LED Par 9x10W RGBW";
+ :deviceAttr :color;
+ :attr
+ [ :outputAttr :master; :dmxOffset 0 ],
+ [ :outputAttr :red; :dmxOffset 1 ],
+ [ :outputAttr :green; :dmxOffset 2 ],
+ [ :outputAttr :blue; :dmxOffset 3 ],
+ [ :outputAttr :white; :dmxOffset 4 ],
+ [ :outputAttr :strobe; :dmxOffset 5 ],
+ [ :outputAttr :doNotUse; :dmxOffset 6 ],
+ [ :outputAttr :doNotUse; :dmxOffset 7 ] .
+
+:LedPar54 a :DeviceClass; rdfs:label "LED Par 54 RGBW";
+ :deviceAttr :color;
+ :attr
+ [ :outputAttr :master; :dmxOffset 0 ],
+ [ :outputAttr :red; :dmxOffset 1 ],
+ [ :outputAttr :green; :dmxOffset 2 ],
+ [ :outputAttr :blue; :dmxOffset 3 ],
+ [ :outputAttr :white; :dmxOffset 4 ],
+ [ :outputAttr :strobe; :dmxOffset 5 ],
+ [ :outputAttr :doNotUse; :dmxOffset 6 ] .
diff --git a/show/dance2022/fade.n3 b/show/dance2022/fade.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/fade.n3
@@ -0,0 +1,32 @@
+@prefix : .
+@prefix effect: .
+@prefix rdfs: .
+@prefix show: .
+@prefix xsd: .
+
+
+show:fadePage1 a :FadePage; rdfs:label "live controls"; :fader show:fadePage1f0 .
+
+show:fadePage1f1 a :Fader; :column "2"; :effectAttr :strength; :effectClass effect:effect31;
+ :value 0 .
+
+show:fadePage1f2 a :Fader; :column "3"; :effectAttr :strength; :effectClass effect:effect32;
+ :value 0 .
+
+show:fadePage1f3 a :Fader; :column "4"; :effectAttr :strength; :effectClass effect:effect32;
+ :value 0.588 .
+
+show:fadePage1f4 a :Fader; :column "5"; :effectAttr :strength; :effectClass effect:effect32;
+ :value 0 .
+
+show:fadePage1f5 a :Fader; :column "6"; :effectAttr :strength; :effectClass effect:effect34;
+ :value 0.396 .
+
+show:fadePage1f6 a :Fader; :column "7"; :effectAttr :strength; :effectClass effect:effect34;
+ :value 0.388 .
+
+show:fadePage1f7 a :Fader; :column "8"; :effectAttr :strength; :effectClass effect:effect34;
+ :value 0 .
+
+show:fadePage1f0 a :Fader; :column "1"; :effectAttr :strength; :effectClass effect:effect30;
+ :value 0 .
diff --git a/show/dance2022/networking.n3 b/show/dance2022/networking.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/networking.n3
@@ -0,0 +1,43 @@
+@prefix : .
+@prefix show: .
+@prefix sh: .
+
+# Use ip addrs in here to avoid an issue where nginx returns 502
+# errors for ~10sec after a service (re)starts. I haven't found a fix
+# for that in the nginx config.
+
+show:dance2022 :networking sh:netHome .
+sh:netHome
+ :captureDevice ;
+ :effectEval ;
+ :effectSequencer ;
+ :keyboardComposer ;
+ :musicPlayer ;
+ :paintServer ;
+ :rdfdb ;
+ :subServer ;
+ :vidref ;
+ :webServer ;
+ :timeline ;
+ :live ;
+ :effectListing ;
+ :fade ;
+
+ :collector ;
+ :collectorZmq .
+
+:captureDevice :urlPath "captureDevice" .
+:collector :urlPath "collector" .
+:dmxServer :urlPath "dmxServer" .
+:effectEval :urlPath "effectEval" .
+:effectSequencer :urlPath "effectSequencer" .
+:keyboardComposer :urlPath "keyboardComposer" .
+:musicPlayer :urlPath "ascoltami" .
+:paintServer :urlPath "paintServer" .
+:rdfdb :urlPath "rdfdb" .
+:subServer :urlPath "subServer" .
+:vidref :urlPath "vidref" .
+:timeline :urlPath "timeline" .
+:live :urlPath "live" .
+:effectListing :urlPath "effectListing" .
+:fade :urlPath "fade" .
diff --git a/show/dance2022/playlist.n3 b/show/dance2022/playlist.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/playlist.n3
@@ -0,0 +1,30 @@
+@prefix : .
+@prefix show: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: .
+
+show:dance2022 :musicRoot "show/dance2022/music";
+:spectrogramUrlRoot "/show/dance2022/spectrogram" .
+
+show:dance2022 :playList (
+ sh:song1 sh:song2 sh:song3 sh:song4 sh:song5
+ sh:song6 sh:song7 sh:song8 sh:song9 sh:song10
+ sh:song11 sh:song12 sh:song13 sh:song14 sh:song15
+) .
+
+sh:song1 a :Song; rdfs:label "01 olympics"; :songFilename "01-olympics.wav" .
+sh:song2 a :Song; rdfs:label "02 st louis blues (tap specialty)"; :songFilename "02-stlouis.ogg" .
+sh:song3 a :Song; rdfs:label "03 lullaby of broadway"; :songFilename "03-lullaby.ogg" .
+sh:song4 a :Song; rdfs:label "04 grand ole opry"; :songFilename "04-nashville.ogg" .
+sh:song5 a :Song; rdfs:label "05 hawaiian"; :songFilename "05-hawaii.wav" .
+sh:song6 a :Song; rdfs:label "06 fly me to the moon"; :songFilename "06-tap.wav" .
+sh:song7 a :Song; rdfs:label "07 disney (renum)"; :songFilename "09-disney.wav" .
+sh:song8 a :Song; rdfs:label "08 radio city"; :songFilename "08-xmas.wav" .
+sh:song9 a :Song; rdfs:label "09 oz (renum)"; :songFilename "07-wiz.wav" .
+sh:song10 a :Song; rdfs:label "10 new york"; :songFilename "10-newyork.wav" .
+sh:song11 a :Song; rdfs:label "11 istanbul"; :songFilename "11-istanbul.wav" .
+sh:song12 a :Song; rdfs:label "12 sisters"; :songFilename "12-sisters.wav" .
+sh:song13 a :Song; rdfs:label "13 star wars"; :songFilename "13-starwars.wav" .
+sh:song14 a :Song; rdfs:label "14 hip hop"; :songFilename "14-club.wav" .
+sh:song15 a :Song; rdfs:label "15 finale"; :songFilename "15-streets.ogg" .
diff --git a/show/dance2022/theaterLightConfig.n3 b/show/dance2022/theaterLightConfig.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/theaterLightConfig.n3
@@ -0,0 +1,193 @@
+@prefix : .
+@prefix rdfs: .
+@prefix dev: .
+@prefix dmxA: .
+@prefix dmxB: .
+
+# Ion channels
+# 31 curtain l
+# 38 down r pool
+# 45 down L pool
+# 60 down c pool
+# 93 down l tree1
+# 94 down l tree2
+# 95 down l tree3
+# 96 down r tree1
+# 97 down r tree2
+# 98 down r tree3
+# 99 mid l tree1
+# 100 mid l tree2
+# 101 mid l tree3
+# 102 mid r tree1
+# 103 mid r tree2
+# 104 mid r tree3
+# 106 up l tree1
+# 107 up l tree2
+# 108 up r tree1
+# 109 up r tree2
+# 113 patio below stairs
+# 201 down 1 led
+# 202 down 2 led
+# 203 down 3 led
+# 204 down 4 led
+# 207 patio stairs small
+# 208 patio stairs large
+# 209 patio r
+# 210 presenter
+# 211 up 1 fill led
+# 212 up 2 fill led
+# 213 up 3 fill led
+# 214 up 4 fill led
+# 215 up 5 fill led
+# 216 down l pool led
+# 217 down CR pool led
+# 218 down CL pool led
+# 219 down CR pool led
+# 220 down R pool
+# 221 mid r pool
+# 222 mid CL pool
+# 223 mid CR pool
+# 224 up L pool
+# 225 up C pool
+# 226 up CL pool
+# 227 up CR pool
+# 231 down 1 top led
+# 232 down 2 top led
+# 233 down 3 top led
+# 234 down 4 top led
+# 235 down 5 top led
+# 236 mid 1 top led
+# 237 mid 2 top led
+# 238 mid 3 top led
+# 239 mid 4 top led
+# 240 mid 5 top led
+# 241 up 1 top led
+# 242 up 2 top led
+# 243 up 3 top led
+# 244 up 4 top led
+# 245 up 5 top led
+# 251 cyc 1
+# 252 cyc 2
+# 253 cyc 3
+# 254 cyc 4
+# 255 cyc 5
+# 256 cyc 6
+# 257 cyc 7
+# 258 cyc 8
+# 259 cyc 9
+# 260 cyc 10
+# 261 cyc2 1
+# 262 cyc2 2
+# 263 cyc2 3
+# 264 cyc2 4
+# 265 cyc2 5
+# 266 cyc2 6
+# 267 cyc2 7
+# 268 cyc2 8
+
+# 118-144 house ND
+# 513 unknown mapped dimmer
+# 514 unknown mapped dimmer
+# 515 unknown mapped dimmer
+# 516 unknown mapped dimmer
+
+
+
+
+dev:strip1 a :Bar612601d; :dmxUniverse dmxA:; :dmxBase 175 .
+dev:strip2 a :ChauvetColorStrip; :dmxUniverse dmxA:; :dmxBase 12 .
+dev:strip3 a :Bar612601d; :dmxUniverse dmxA:; :dmxBase 178 .
+dev:par90 a :LedPar90; :dmxUniverse dmxA:; :dmxBase 16 .
+dev:par1 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 84 .
+dev:par2 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 181 .
+dev:par3 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 188 .
+dev:par4 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 105 .
+dev:par5 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 147 .
+dev:par6 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 154 .
+dev:par7 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 161 .
+dev:par8 a :LedPar54; :dmxUniverse dmxA:; :dmxBase 168 .
+
+dev:strobe a :MegaFlash; :dmxUniverse dmxA:; :dmxBase 115 .
+
+dev:down1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 11 .
+dev:down2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 9 .
+dev:down3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 7 .
+dev:down4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 5 .
+dev:down6 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 3 .
+dev:down7 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 2 .
+dev:moat_right_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 27 .
+dev:moat_left_up_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 31 .
+dev:moat_left_down_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 32 .
+dev:cross_down_L a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 34 .
+dev:cross_down_R a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 50 .
+dev:cross_up_L a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 52 .
+dev:cross_up_R a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 67 .
+dev:down_L_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 46 .
+dev:down_CL_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 44 .
+dev:down_C_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 42 .
+dev:down_CR_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 39 .
+dev:down_R_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 37 .
+dev:down_R_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 55 .
+dev:mid_CR_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 57 .
+dev:mid_C_dot a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 59 .
+dev:mid_C_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 60 .
+dev:mid_CL_red a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 62 .
+dev:mid_L_blue a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 64 .
+dev:up_strobes a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 65 .
+
+dev:tree_down_L_low a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 99 .
+dev:tree_down_L_high a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 101 .
+dev:tree_up_L_low a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 93 .
+dev:tree_up_L_high a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 95 .
+
+dev:tree_down_R_low a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 96 .
+dev:tree_down_R_high a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 98 .
+dev:tree_up_R_low a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 102 .
+dev:tree_up_R_high a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 104 .
+
+dev:cycBlue1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 83 .
+dev:cycBlue2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 80 .
+dev:cycBlue3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 77 .
+dev:cycBlue4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 74 .
+dev:cycGreen1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 82 .
+dev:cycGreen2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 79 .
+dev:cycGreen3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 76 .
+dev:cycGreen4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 73 .
+dev:cycRed1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 81 .
+dev:cycRed2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 78 .
+dev:cycRed3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 75 .
+dev:cycRed4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 72 .
+
+dev:orchestra a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 113 .
+
+dev:workCyc a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 146 .
+
+dev:houseUp1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 139; :hideInLiveUi true .
+dev:houseUp3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 141; :hideInLiveUi true .
+dev:houseUp4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 142; :hideInLiveUi true .
+dev:houseUp5 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 143; :hideInLiveUi true .
+dev:houseUp6 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 144; :hideInLiveUi true .
+
+# some virtual thing?
+#dev:houseDown a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 150 .
+
+dev:houseBack1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 131; :hideInLiveUi true .
+dev:houseBack2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 132; :hideInLiveUi true .
+dev:houseBack3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 133; :hideInLiveUi true .
+dev:houseBack4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 134; :hideInLiveUi true .
+dev:houseBack5 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 135; :hideInLiveUi true .
+dev:houseBack6 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 136; :hideInLiveUi true .
+dev:houseBack7 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 137; :hideInLiveUi true .
+dev:houseBack8 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 138; :hideInLiveUi true .
+dev:houseFront1 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 119; :hideInLiveUi true .
+dev:houseFront2 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 120; :hideInLiveUi true .
+dev:houseFront3 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 121; :hideInLiveUi true .
+dev:houseFront4 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 122; :hideInLiveUi true .
+dev:houseFront5 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 123; :hideInLiveUi true .
+dev:houseFront6 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 124; :hideInLiveUi true .
+dev:houseFront7 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 125; :hideInLiveUi true .
+dev:houseFront8 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 126; :hideInLiveUi true .
+dev:houseFront9 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 127; :hideInLiveUi true .
+dev:houseFront10 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 128; :hideInLiveUi true .
+dev:houseFront11 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 129; :hideInLiveUi true .
+dev:houseFront12 a :SimpleDimmer; :dmxUniverse dmxA:; :dmxBase 130; :hideInLiveUi true .
diff --git a/show/dance2022/vidref.n3 b/show/dance2022/vidref.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2022/vidref.n3
@@ -0,0 +1,21 @@
+@prefix : .
+@prefix show: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: .
+
+show:dance2022 :videoSetup :cam1 .
+:cam1
+ :dev "/dev/v4l/by-id/usb-Generic_FULL_HD_1080P_Webcam_200901010001-video-index0";
+ :brightness 0;
+ :contrast 0;
+ :saturation 58;
+ :hue 0;
+ :wbAuto false;
+ :gamma 220;
+ :powerFreq "60 Hz";
+ :wbTemperature 4600;
+ :sharpness 4;
+ :backlight 0;
+ :exposureAuto "manual";
+ :exposure 237 .