diff --git a/show/dance2015/effectClass.n3 b/show/dance2015/effectClass.n3
new file mode 100644
--- /dev/null
+++ b/show/dance2015/effectClass.n3
@@ -0,0 +1,102 @@
+@prefix : .
+@prefix effect: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix xml: .
+@prefix xsd: .
+
+@prefix ch: .
+@prefix chase: .
+
+# when these are inserted, a curve called 'env' will be added to this
+# code, so multiply by that. Also if you mention 'music' anywhere, an
+# output 'music' will be set to the current song.
+
+
+effect:cycFlash a :EffectClass;
+ rdfs:label "cycFlash";
+ :code "out = * nsin(t*2) * env" .
+
+# Notes for quneo pads:
+# 48 49 50 51
+# 44 45 46 47
+# 40 41 42 43
+# 36 37 38 39
+
+
+effect:cycToMusic a :EffectClass; rdfs:label "cyc to music";
+:quneoNote 36;
+:code "out = * music * env" .
+
+
+effect:fullToMusic a :EffectClass; rdfs:label "full to music";
+:quneoNote 38;
+:code "out = * music * env" .
+
+
+
+effect:blacklight a :EffectClass;
+ rdfs:label "blacklight";
+ :quneoNote 37;
+ :code
+ "out = [env * p1, env * p2, env * p4]",
+ "p1 = * .3",
+ "p2 = Strip.solid('LR', (0,0,1))",
+ "p4 = Blacklight(1)"
+ .
+
+
+effect:whiteLed a :EffectClass;
+ rdfs:label "whiteLed";
+ :code "out = Strip.solid('LR', (1,1,1)) * env" .
+
+
+effect:slowColor a :EffectClass;
+ rdfs:label "slow color chase";
+ :quneoNote 37;
+ :code
+ "period = 5",
+ "r = * nsin(t / period)",
+ "y = * nsin((t+.3) / period)",
+ "b = * nsin((t+.6) / period)",
+ "out = [r*env,y*env,b*env]"
+ .
+
+chase:backchase a :Chase; :channels (
+
+
+
+
+
+
+
+) .
+
+
+effect:backChase a :EffectClass;
+ rdfs:label "back chase";
+ :code "out = chase(t, names=backchase, ontime=.3, offset=-.11) * env" .
+
+effect:backChaseSlower a :EffectClass;
+ rdfs:label "back chase slower";
+ :code "out = chase(t, names=backchase, ontime=.7, offset=-.11) * env" .
+
+chase:frontrand a :Chase; :channels (
+
+
+
+
+
+
+
+
+
+
+
+
+) .
+
+
+effect:frontrandChase a :EffectClass;
+ rdfs:label "frontrand chase";
+ :code "out = chase(t, names=frontrand, ontime=.3, offset=-.11) * env" .