diff --git a/light9/effect/sequencer/eval_faders.py b/light9/effect/sequencer/eval_faders.py --- a/light9/effect/sequencer/eval_faders.py +++ b/light9/effect/sequencer/eval_faders.py @@ -52,15 +52,25 @@ class FaderEval: """rebuild our data from the graph""" self.faders = [] for fader in self.graph.subjects(RDF.type, L9['Fader']): - effect = typedValue(EffectUri, self.graph, fader, L9['effect']) - setting = typedValue(Node, self.graph, fader, L9['setting']) - setAttr = typedValue(EffectAttr, self.graph, setting, L9['effectAttr']) - self.faders.append(Fader(self.graph, self.lib, cast(URIRef, fader), effect, setAttr)) + try: + self.faders.append(self._compileFader(fader)) + except ValueError: + pass # this could go in a second, smaller addHandler call to avoid rebuilding Fader objs constantly for f in self.faders: - setting = typedValue(Node, self.graph, f.uri, L9['setting']) - f.value = typedValue(float, self.graph, setting, L9['value']) + try: + setting = typedValue(Node, self.graph, f.uri, L9['setting']) + except ValueError: + f.value = None + else: + f.value = typedValue(float, self.graph, setting, L9['value']) + + def _compileFader(self, fader: URIRef) -> Fader: + effect = typedValue(EffectUri, self.graph, fader, L9['effect']) + setting = typedValue(Node, self.graph, fader, L9['setting']) + setAttr = typedValue(EffectAttr, self.graph, setting, L9['effectAttr']) + return (Fader(self.graph, self.lib, cast(URIRef, fader), effect, setAttr)) def computeOutput(self) -> DeviceSettings: faderEffectOutputs: List[DeviceSettings] = []