Przeglądaj źródła

fix: patch load label, test 512 dimmer fx !

micha 3 lat temu
rodzic
commit
72fc8abd01
5 zmienionych plików z 59 dodań i 41 usunięć
  1. 33 22
      Editor3.py
  2. 16 9
      console.py
  3. 3 3
      lib/chat.py
  4. 4 4
      show/GloryCamp2021/patch.sav
  5. 3 3
      show/GloryCamp2021/presets.sav

+ 33 - 22
Editor3.py

@@ -61,6 +61,7 @@ from collections import OrderedDict
 
 show_name = "GloryCamp2021"
 show_name = "GloryCamp2021"
+show_name = "Dimmer"
 
 
 CUES    = OrderedDict()
@@ -78,7 +79,7 @@ BEAM  = ["GOBO","G-ROT","PRISMA","P-ROT","FOCUS","SPEED"]
 INT   = ["DIM","SHUTTER","STROBE","FUNC"]
 client = chat.tcp_sender()
 
-fade = 5 #2 #0.1 #1.13
+fade = 2 #2 #0.1 #1.13
 fade_on = 1
 fx_prm = {"SIZE":20,"SPEED":100,"OFFSET":50}
 
@@ -165,7 +166,10 @@ def update_dmx(attr,data,value=None,args=[fade],flash=0,pfx=""):
         cmd=""
     return cmd
 
-
+class dummy_event():
+    def __init__(self):
+        self.num =0
+    
 class Xevent():
     def __init__(self,fix,elem,attr=None,data=None,mode=None):
         self.data=data
@@ -253,6 +257,7 @@ class Xevent():
                                     self.data.elem_attr[fix][attr]["bg"] = "grey"
                                     data["ATTRIBUT"][attr]["ACTIVE"] = 0
                                 #print(data["ATTRIBUT"])
+                            print( "CB CLEAR" )
 
                         
                 if self.attr.startswith("SZ:"):#SIN":
@@ -598,7 +603,7 @@ class Xevent():
                         print("GO PRESET")
                         if nr not in self.data.val_presets:
                             self.data.val_presets[nr] = OrderedDict()
-                            self.data.val_presets[nr]["VALUE"] = None
+                            self.data.val_presets[nr]["VALUE"] = 0
                             self.data.val_presets[nr]["FX"] = ""
                         sdata = self.data.val_presets[nr]
                         cmd = ""
@@ -608,10 +613,12 @@ class Xevent():
                             for attr in sdata[fix]:
                                 v2 = sdata[fix][attr]["VALUE"]
                                 v2_fx = sdata[fix][attr]["FX"]
-                                #print(fix,attr,v)
+                                #print(fix,attr,v2, fix in self.data.fixtures,self.data.fixtures.keys(),2)
                                 if fix in self.data.fixtures:
                                     #print("==",self.data.fixtures[fix]["ATTRIBUT"])
+                                    #print( "==", attr, self.data.fixtures[fix], self.data.fixtures.keys(),4 )
                                     if attr in self.data.fixtures[fix]["ATTRIBUT"]:
+                                        #print( attr)
                                         data = self.data.fixtures[fix]
                                         v=self.data.fixtures[fix]["ATTRIBUT"][attr]["VALUE"]
                                         if v2 is not None:
@@ -634,7 +641,7 @@ class Xevent():
                                             if v2_fx:
                                                 cmd+=update_dmx(attr,data,pfx="fx",value=v2_fx,flash=xFLASH)#,flash=FLASH)
                                         #worker.fade_dmx(fix,attr,data,v,v2)
-                                  
+                        print("cmd",cmd) 
                         if cmd:
                             client.send(cmd )
                                         
@@ -735,11 +742,11 @@ class Xevent():
             
 
                 
-        finally:
-            pass
-        #except Exception as e:
-        #    print("== cb EXCEPT",e)
-        #    print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
+            #finally:
+            #    pass
+        except Exception as e:
+            print("== cb EXCEPT",e)
+            print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
         #print(self.elem["text"],self.attr,self.data)
         
                                             
@@ -775,13 +782,14 @@ class Master():
                 self.val_presets[i] = OrderedDict() # FIX 
                 self.val_presets[i]["CFG"] =  OrderedDict() # CONFIG 
                 self.label_presets[i] = "-"
+
   
-    def __del__(self):
+    def exit(self):
         print("__del__",self)
         self.backup_presets()
         print("********************************************************")
         self.backup_patch()
-        print("********************************************************")
+        print("*********del",self,"***********************************************")
     def load(self):
         fixture = OrderedDict()
 
@@ -930,18 +938,21 @@ class Master():
 
         
        
-        self.fixtures = fixture
+        #self.fixtures = fixture
         
         
     def load_patch(self):
         filename="patch"
         d,l = self._load(filename)
-        for i in d:
+        self.fixtures = OrderedDict()
+        for i in l:
             sdata = d[i]
+            for attr in sdata["ATTRIBUT"]:
+                sdata["ATTRIBUT"][attr]["ACTIVE"] = 0
             print("load",filename,sdata)
             #if "CFG" not in sdata:
             #    sdata["CFG"] = OrderedDict()
-        self.fixtures = d
+            self.fixtures[str(i)] = sdata
         #self.label_presets = l
         
     def load_presets(self):
@@ -1306,12 +1317,12 @@ class Master():
         self.draw_input()
         self.draw_preset()
         
-        
+try:
+    master =Master()
+    master.render()
 
-master =Master()
-master.render()
-
-
-root.mainloop()
-sys.exit()
+    root.mainloop()
     
+finally:
+    master.exit()
+

+ 16 - 9
console.py

@@ -129,7 +129,7 @@ class Fade():
         self.__last = start
         self.__target = target
         self.run = 1
-        print("INIT", str(self) )
+        #print("INIT", str(self) )
     def __str__(self):
         return self.__repr__()
     def __repr__(self):
@@ -211,7 +211,7 @@ class DMXCH(object):
                 #self._fade.next()
                 #self._fade.next()
             except Exception as e:
-                print( "Except:",e)
+                print( "Except:fade",e,target,time,clock)
     def fx(self,xtype="sinus",size=40,speed=40,offset=0,clock=0):
         if str(xtype).lower() == "off":
             #self._fx = Fade(self._fx_value,target=0,time=2,clock=clock) 
@@ -227,7 +227,7 @@ class DMXCH(object):
                 target = float(target)
                 self._flush = Fade(self._last_val,target,time=time,clock=clock,delay=delay)
             except Exception as e:
-                print( "Except:",e)
+                print( "Except:flush",target,time,clock,__name__,e,)
     def flush_fx(self,xtype="sinus",size=40,speed=40,offset=0,clock=0):
         if str(xtype).lower() == "off":
             #self._fx = Fade(self._fx_value,target=0,time=2,clock=clock) 
@@ -288,17 +288,21 @@ def split_cmd(data):
 
 
 def CB(data):
-    print("CB",data)
+    #print("CB",data)
 
     cmds = split_cmd(data)
     c = clock.time() 
-    time = 2
+    c = float(c)
+    time = 0
     delay = 0
 
     for xcmd in cmds:
         if xcmd.startswith("df"):
             xxcmd=xcmd[2:].split(":")
             #print("DMX:",xxcmd)
+            if len(xxcmd) < 2:
+                print("cmd err df",xcmd)
+                continue
             if "alloff" == xxcmd[1].lower():
                 for i in Bdmx:
                     if i is not None:
@@ -315,10 +319,10 @@ def CB(data):
                 #    v = 255
                 if len(l) >= 3:
                     try:time=float(l[2])
-                    except:pass
+                    except:print("ERR","time",xcmd)
                 if len(l) >= 4:
                     try:delay=float(l[3])
-                    except:pass
+                    except:print("ERR","delay",xcmd)
 
                 if len(Bdmx) > k:
                     Bdmx[k].flush(target=v,time=time, clock=c,delay=delay)
@@ -350,7 +354,7 @@ def CB(data):
                 print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
         elif xcmd.startswith("fxf"):
             xxcmd=xcmd[3:].split(":")
-            print("fxf:",xxcmd)
+            #print("fxf:",xxcmd)
             if "alloff" == xxcmd[1].lower():
                 for i in Bdmx:
                     if i is not None:
@@ -383,6 +387,9 @@ def CB(data):
         elif xcmd.startswith("fx"):
             xxcmd=xcmd[2:].split(":")
             #print("DMX:",xxcmd)
+            if len(xxcmd) < 2:
+                print("xxcmd err",xxcmd,xcmd)
+                continue  
             if "alloff" == xxcmd[1].lower():
                 for i in Bdmx:
                     i.fx(xtype="off",clock=c)
@@ -409,7 +416,7 @@ def CB(data):
                     #Bdmx[k].fade(target=v,time=t, clock=c)
                     Bdmx[k].fx(xtype=xtype,size=size,speed=speed,offset=offset,clock=c)
             except Exception as e:
-                print("EXCEPTION IN FX",e)
+                print("EXCEPTION IN FX",xcdm,e)
                 print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
 
 

+ 3 - 3
lib/chat.py

@@ -91,16 +91,16 @@ def cmd(cb=dummyCB,port=50000):
                             clients2[client_nr] = nachrichten
                     if sock in clients:
                         client_nr = clients.index(sock)
-                        print(clients2[client_nr])
+                        #print(clients2[client_nr])
                     ip = sock.getpeername()[0]
                     #print(">>>", ip, nachrichten.split(";"))
                     if nachrichten:
                         tstamp = time.strftime("%H:%M:%S")
 
-                        print("from:",client_nr,">>>", tstamp , ip, nachrichten.split(";"))
+                        #print("from:",client_nr,">>>", tstamp , ip, nachrichten.split(";"))
                         for xx,nachricht in enumerate(nachrichten.split(";")):
                             cmd = nachricht #.split(" ")
-                            print(xx,cmd)
+                            #print(xx,cmd)
                             cb({"c":client_nr,"cmd":cmd})
 
 

+ 4 - 4
show/GloryCamp2021/patch.sav

@@ -1,9 +1,9 @@
-1	1	{"DMX": 1, "UNIVERS": 2, "NAME": "F1", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 20.55, "ACTIVE": 0, "FX": ""}}}
+1	1	{"DMX": 1, "UNIVERS": 2, "NAME": "F1", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
 2	2	{"DMX": 2, "UNIVERS": 2, "NAME": "F2", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
 3	3	{"DMX": 3, "UNIVERS": 2, "NAME": "F3", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
 4	4	{"DMX": 4, "UNIVERS": 2, "NAME": "F4", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
 11	11	{"DMX": 11, "UNIVERS": 2, "NAME": "FL", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
 24	24	{"DMX": 24, "UNIVERS": 2, "NAME": "P", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}}}
-1001	1001	{"DMX": 401, "UNIVERS": 2, "NAME": "IRGB", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}, "RED": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 256, "ACTIVE": 0}, "GREEN": {"NR": 5, "MASTER": "", "MODE": "F", "VALUE": 256, "ACTIVE": 0}, "BLUE": {"NR": 6, "MASTER": "", "MODE": "F", "VALUE": 196.87000000000023, "ACTIVE": 0}}}
-3001	3001	{"DMX": 241, "UNIVERS": 2, "NAME": "MH-BEAM", "ATTRIBUT": {"SHUTTER": {"NR": 6, "MASTER": "", "MODE": "S", "VALUE": 8.22, "ACTIVE": 0, "FX": ""}, "VDIM": {"NR": -1, "MASTER": "", "MODE": "F", "VALUE": 256, "ACTIVE": 0, "FX": ""}, "PAN": {"NR": 1, "MASTER": "", "MODE": "F", "VALUE": 147.55000000000007, "ACTIVE": 1, "FX": ""}, "PAN-FINE": {"NR": 2, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "TILT": {"NR": 3, "MASTER": "", "MODE": "F", "VALUE": 61.24000000000002, "ACTIVE": 1, "FX": ""}, "TILT-FINE": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "RED": {"NR": 7, "MASTER": "1", "MODE": "F", "VALUE": 256, "ACTIVE": 1, "FX": ""}, "GREEN": {"NR": 8, "MASTER": "1", "MODE": "F", "VALUE": 256, "ACTIVE": 0, "FX": ""}, "BLUE": {"NR": 9, "MASTER": "1", "MODE": "F", "VALUE": 196.87000000000023, "ACTIVE": 0, "FX": ""}}}
-3002	3002	{"DMX": 261, "UNIVERS": 2, "NAME": "MH-BEAM", "ATTRIBUT": {"SHUTTER": {"NR": 6, "MASTER": "", "MODE": "S", "VALUE": 8.22, "ACTIVE": 0, "FX": ""}, "VDIM": {"NR": -1, "MASTER": "", "MODE": "F", "VALUE": 256, "ACTIVE": 0, "FX": ""}, "PAN": {"NR": 1, "MASTER": "", "MODE": "F", "VALUE": 147.55000000000007, "ACTIVE": 1, "FX": ""}, "PAN-FINE": {"NR": 2, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "TILT": {"NR": 3, "MASTER": "", "MODE": "F", "VALUE": 61.24000000000002, "ACTIVE": 1, "FX": ""}, "TILT-FINE": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "RED": {"NR": 7, "MASTER": "1", "MODE": "F", "VALUE": 256, "ACTIVE": 1, "FX": ""}, "GREEN": {"NR": 8, "MASTER": "1", "MODE": "F", "VALUE": 256, "ACTIVE": 0, "FX": ""}, "BLUE": {"NR": 9, "MASTER": "1", "MODE": "F", "VALUE": 196.87000000000023, "ACTIVE": 0, "FX": ""}}}
+1001	1001	{"DMX": 401, "UNIVERS": 2, "NAME": "IRGB", "ATTRIBUT": {"DIM": {"NR": 1, "MASTER": "1", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}, "RED": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "GREEN": {"NR": 5, "MASTER": "", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "BLUE": {"NR": 6, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}}}
+3001	3001	{"DMX": 241, "UNIVERS": 2, "NAME": "MH-BEAM", "ATTRIBUT": {"SHUTTER": {"NR": 6, "MASTER": "", "MODE": "S", "VALUE": 217.8300000000003, "ACTIVE": 0}, "VDIM": {"NR": -1, "MASTER": "", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}, "PAN": {"NR": 1, "MASTER": "", "MODE": "F", "VALUE": 168.51000000000013, "ACTIVE": 0}, "PAN-FINE": {"NR": 2, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "TILT": {"NR": 3, "MASTER": "", "MODE": "F", "VALUE": 77.68000000000002, "ACTIVE": 0}, "TILT-FINE": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "RED": {"NR": 7, "MASTER": "1", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "GREEN": {"NR": 8, "MASTER": "1", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "BLUE": {"NR": 9, "MASTER": "1", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}}}
+3002	3002	{"DMX": 261, "UNIVERS": 2, "NAME": "MH-BEAM", "ATTRIBUT": {"SHUTTER": {"NR": 6, "MASTER": "", "MODE": "S", "VALUE": 217.8300000000003, "ACTIVE": 0}, "VDIM": {"NR": -1, "MASTER": "", "MODE": "F", "VALUE": 0.0, "ACTIVE": 0}, "PAN": {"NR": 1, "MASTER": "", "MODE": "F", "VALUE": 168.51000000000013, "ACTIVE": 0}, "PAN-FINE": {"NR": 2, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "TILT": {"NR": 3, "MASTER": "", "MODE": "F", "VALUE": 77.68000000000002, "ACTIVE": 0}, "TILT-FINE": {"NR": 4, "MASTER": "", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}, "RED": {"NR": 7, "MASTER": "1", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "GREEN": {"NR": 8, "MASTER": "1", "MODE": "F", "VALUE": 255.0, "ACTIVE": 0}, "BLUE": {"NR": 9, "MASTER": "1", "MODE": "F", "VALUE": 127.0, "ACTIVE": 0}}}

+ 3 - 3
show/GloryCamp2021/presets.sav

@@ -4,8 +4,8 @@
 3	Prisma	{"CFG": {"FADE": 0.817539954132789, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "701": {"PRISMA": {"VALUE": 8.22, "FX": ""}}, "702": {"PRISMA": {"VALUE": 8.22, "FX": ""}}, "703": {"PRISMA": {"VALUE": 8.22, "FX": ""}}, "704": {"PRISMA": {"VALUE": 8.22, "FX": ""}}, "705": {"PRISMA": {"VALUE": 8.22, "FX": ""}}, "706": {"PRISMA": {"VALUE": 8.22, "FX": ""}}}
 4	LOWLIGHT	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "FL", "DELAY": 0}, "701": {"DIM": {"VALUE": 0, "FX": ""}}, "702": {"DIM": {"VALUE": 0, "FX": ""}}, "703": {"DIM": {"VALUE": 0, "FX": ""}}, "704": {"DIM": {"VALUE": 0, "FX": ""}}, "705": {"DIM": {"VALUE": 0, "FX": ""}}, "706": {"DIM": {"VALUE": 0, "FX": ""}}}
 5	ZOOM	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "701": {"ZOOM": {"VALUE": 0, "FX": ""}}, "702": {"ZOOM": {"VALUE": 0, "FX": ""}}, "703": {"ZOOM": {"VALUE": 0, "FX": ""}}, "704": {"ZOOM": {"VALUE": 0, "FX": ""}}, "705": {"ZOOM": {"VALUE": 0, "FX": ""}}, "706": {"ZOOM": {"VALUE": 0, "FX": ""}}}
-6	links	{"CFG": {"FADE": 5.0, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"PAN": {"VALUE": 155.7700000000001, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}, "3002": {"PAN": {"VALUE": 155.7700000000001, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}}
-7	HOME	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"SHUTTER": {"VALUE": 8.22, "FX": ""}, "VDIM": {"VALUE": 256, "FX": ""}, "PAN": {"VALUE": 172.21000000000015, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}, "GREEN": {"VALUE": 256, "FX": ""}, "BLUE": {"VALUE": 196.87000000000023, "FX": ""}}, "3002": {"SHUTTER": {"VALUE": 8.22, "FX": ""}, "VDIM": {"VALUE": 256, "FX": ""}, "PAN": {"VALUE": 172.21000000000015, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}, "GREEN": {"VALUE": 256, "FX": ""}, "BLUE": {"VALUE": 196.87000000000023, "FX": ""}}}
+6	links	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"PAN": {"VALUE": 147.96000000000006, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}, "3002": {"PAN": {"VALUE": 147.96000000000006, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}}
+7	HOME	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"PAN": {"VALUE": 168.51000000000013, "FX": ""}, "TILT": {"VALUE": 77.68000000000002, "FX": ""}}, "3002": {"PAN": {"VALUE": 168.51000000000013, "FX": ""}, "TILT": {"VALUE": 77.68000000000002, "FX": ""}}}
 8	Front Off	{"1": {"DIM": {"VALUE": 0.0, "FX": ""}}, "2": {"DIM": {"VALUE": 0.0, "FX": ""}}, "3": {"DIM": {"VALUE": 0, "FX": ""}}, "4": {"DIM": {"VALUE": 0, "FX": ""}}, "CFG": {"BUTTON": "GO", "FADE": 4, "DELAY": 0}}
 9	PAN MID	{"CFG": {"FADE": 0.817539954132789, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "701": {"PAN": {"VALUE": null, "FX": "sinus:14:83:4267"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:4267"}}, "702": {"PAN": {"VALUE": null, "FX": "sinus:14:83:4978"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:4978"}}, "703": {"PAN": {"VALUE": null, "FX": "sinus:14:83:5689"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:5689"}}, "704": {"PAN": {"VALUE": null, "FX": "sinus:14:83:6400"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:6400"}}, "705": {"PAN": {"VALUE": null, "FX": "sinus:14:83:7111"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:7111"}}, "706": {"PAN": {"VALUE": null, "FX": "sinus:14:83:7822"}, "TILT": {"VALUE": null, "FX": "sinus:0:249:7822"}}}
 10	MA Open	{"CFG": {"FADE": 4.545454545454545, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "701": {"DIM": {"VALUE": 256, "FX": ""}}, "702": {"DIM": {"VALUE": 256, "FX": ""}}, "703": {"DIM": {"VALUE": 256, "FX": ""}}, "704": {"DIM": {"VALUE": 256, "FX": ""}}, "705": {"DIM": {"VALUE": 256, "FX": ""}}, "706": {"DIM": {"VALUE": 256, "FX": ""}}}
@@ -44,7 +44,7 @@
 43	-	{"CFG": {"FADE": 4, "DELAY": 0, "BUTTON": "GO"}}
 44	links	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"PAN": {"VALUE": 168.10000000000014, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}, "3002": {"PAN": {"VALUE": 168.10000000000014, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}}}
 45	-	{"CFG": {"FADE": 4, "DELAY": 0, "BUTTON": "GO"}}
-46	-	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO"}, "3001": {"PAN": {"VALUE": 147.55000000000007, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}}, "3002": {"PAN": {"VALUE": 147.55000000000007, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}}}
+46	-	{"CFG": {"FADE": 5, "DEALY": 0, "BUTTON": "GO", "DELAY": 0}, "3001": {"PAN": {"VALUE": 147.55000000000007, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}}, "3002": {"PAN": {"VALUE": 147.55000000000007, "FX": ""}, "TILT": {"VALUE": 61.24000000000002, "FX": ""}, "RED": {"VALUE": 256, "FX": ""}}}
 47	-	{"CFG": {"FADE": 4, "DELAY": 0, "BUTTON": "GO"}}
 48	-	{"CFG": {"FADE": 4, "DELAY": 0, "BUTTON": "GO"}}
 49	-	{"CFG": {"FADE": 4, "DELAY": 0, "BUTTON": "GO"}}