diff --git a/show/dance2023/theaterLightConfig.n3 b/show/dance2023/theaterLightConfig.n3
--- a/show/dance2023/theaterLightConfig.n3
+++ b/show/dance2023/theaterLightConfig.n3
@@ -6,25 +6,50 @@
@prefix show: .
@prefix xsd: .
+:EffectFunction rdfs:comment """
+Linked to a code function. That func's Inputs are
+1) magic stuff like time,
+2) the effectAttrs listed under (?effect :input ?)
+
+Outputs are always a DeviceSettings list which can affect arbitrary devices.
+""" .
+show:fadePage1f0 rdfs:comment ":strength connects the fader to sub0" .
show:fadePage1 a :FadePage; rdfs:label "live controls"; :fader show:fadePage1f0, show:fadePage1f1 .
-show:fadePage1f0 a :Fader; :column "1"; :effectAttr :strength; :effectClass effect:effect0; :value 0.306 .
-show:fadePage1f1 a :Fader; :column "2"; :effectAttr :strength; :effectClass effect:effect2; :value 0.58 .
+show:fadePage1f0
+ a :Fader;
+ :column "1";
+ :effect effect:sub0;
+ :setting [ :effectAttr :strength ] . # fader value is applied to this attr.
-effect:effect0
+effect:sub0
a :Effect;
- :setting effect:effect0_set1 .
-effect:effect0_set1 :device dev:plain1; :deviceAttr :brightness; :scaledValue 0.5 .
+ :effectFunction effect:scale;
+ :input [ :effectAttr :strength ]; # also put the time here if the func needs it.
+ :setting
+ [ :device dev:plain1; :deviceAttr :brightness; :value 0.5 ],
+ [ :device dev:par2; :deviceAttr :color; :value "#ff8000" ] .
-effect:effect2 a :Effect;
- rdfs:label "effect2";
- :publishAttr :strength;
- :setting effect:effect2_set0, effect:effect2_set1, effect:effect2_set2, effect:effect2_set3 .
-effect:effect2_set0 :device dev:par6; :deviceAttr :color; :scaledValue 0.251 .
-effect:effect2_set1 :device dev:par2; :deviceAttr :color; :scaledValue 0.714 .
-effect:effect2_set2 :device dev:strip1; :deviceAttr :color; :scaledValue 0.651 .
-effect:effect2_set3 :device dev:strip2; :deviceAttr :color; :scaledValue 0.22 .
+effect:scale
+ a :EffectFunction;
+ rdfs:label "a submaster- a few devices at specified colors";
+ :input
+ [ :effectAttr :strength; :value 0 ], # overridden by fader
+ [ :effectAttr :output; :value2 [ # something to say 'this attr value must resemble the following graph'
+ :device :valueRequired; # ...and it's repeatable, unlike :strength
+ :deviceAttr :valueRequired;
+ :value :valueRequired ] ] .
+
+
+# show:fadePage1f1 a :Fader; :column "2"; :effectAttr :strength; :effect effect:effect2 .
+# effect:effect2 a :Effect;
+# :publishAttr :strength;
+# :setting effect:effect2_set0, effect:effect2_set1, effect:effect2_set2, effect:effect2_set3 .
+# effect:effect2_set0 :device dev:par6; :deviceAttr :color; :scaledValue 0.251 .
+# effect:effect2_set1 :device dev:par2; :deviceAttr :color; :scaledValue 0.714 .
+# effect:effect2_set2 :device dev:strip1; :deviceAttr :color; :scaledValue 0.651 .
+# effect:effect2_set3 :device dev:strip2; :deviceAttr :color; :scaledValue 0.22 .
dev:strip1 a :Bar612601d; :dmxUniverse dmxA:; :dmxBase 175 .