Paul <paulthom...@gmail.com>: Nov 17 02:41PM -0800
Yes, you can export the lighting commands fairly easily. But it is more difficult to get that data into a format EOS can import. You will need to figure out the various parameters (apart from intensity) you are using (colours, focus or whatever) and their equlivant EOS numbers. You also need to export the cues and the levels in separate files as you need to import these separately into EOS. So the question becomes is it quicker to re-plot from scratch in EOS; just depends on the scale of the show file. The script below will export Lighting cue command from Qlab into 2 CSV files which can be imported into EOS. It only handles red, green,blue and intensity parameters (you can add others) and doesn't attempt to deal with cues which reference another cue ("pallets") so if you've used those it will almost certainly break. It will ignore any lighting cues which have a non-numeric cue number as EOS only handles numeric cue numbers (so you might want to adjust your workspace before using). Also EOS csv import is not very robust and if you get the data wrong it crashes. I have done minimal testing on this (just a few cues) and it works but please back up your Workspace and make sure you understand what the script does before running it. -- Export lighting cues and levels to CSV for import into EOS *tell* *application* *id* "com.figure53.QLab.5" *to* *tell* *front* *workspace* *set* nl *to* linefeed -- define the mapping to EOS parameter numbers -- if you are using more parameters other than RGB you will need to find the number from EOS and add them here -- note some parameter numbers can be 1000s (X-Focus) and this scheme may be impractical in those cases. *set* paramNames *to* *my* blankArray(14) -- here we just assume only RGB fixtrues are in use *set* *item* 1 *of* paramNames *to* "Intens" *set* *item* 12 *of* paramNames *to* "red" *set* *item* 13 *of* paramNames *to* "green" *set* *item* 14 *of* paramNames *to* "blue" ---- initalise the first two rows for cues csv data *set* ecuerows *to* {"START_TARGETS"} *set* *end* *of* ecuerows *to* "TARGET_TYPE,TARGET_TYPE_AS_TEXT,TARGET_LIST_NUMBER,TARGET_ID,TARGET_DCID,PART_NUMBER,LABEL,TIME_DATA,UP_DELAY,DOWN_TIME,DOWN_DELAY,FOCUS_TIME,FOCUS_DELAY,COLOR_TIME,COLOR_DELAY,BEAM_TIME,BEAM_DELAY,DURATION,ALERT_TIME,MARK,BLOCK,ASSERT,ALL_FADE,PREHEAT,FOLLOW,LINK,LOOP,CURVE,RATE,EXTERNAL_LINKS,EFFECTS,MODE,CUE_NOTES,SCENE_TEXT,SCENE_END,WIDTH,HEIGHT" -- add the cue list target (at top and bottom) *set* elistrow *to* *my* blankArray(37) *set* *item* 1 *of* elistrow *to* 15 -- cue list target *set* *item* 2 *of* elistrow *to* "Cue_List" *set* *item* 4 *of* elistrow *to* 1 -- cue list 1 *set* AppleScript's text item delimiters *to* "," *set* *end* *of* ecuerows *to* (elistrow *as* *text*) -- define a default eos cue row *set* decr *to* *my* blankArray(37) *set* *item* 1 *of* decr *to* 1 -- cue target *set* *item* 2 *of* decr *to* "Cue" *set* *item* 3 *of* decr *to* 1 -- cue list 1 ----- initalise the headers for levels CSV data *set* elrows *to* {"START_LEVELS"} *set* *end* *of* elrows *to* "TARGET_TYPE,TARGET_TYPE_AS_TEXT,TARGET_LIST_NUMBER,TARGET_ID,TARGET_PART_NUMBER,CHANNEL,PARAMETER_TYPE,PARAMETER_TYPE_AS_TEXT,LEVEL,LEVEL_REFERENCE_TYPE,LEVEL_REFERENCE_TYPE_AS_TEXT,LEVEL_REFERENCE_LIST_NUMBER,LEVEL_REFERENCE_ID,FADE_TIME,DELAY_TIME,MARK_CUE,TRACK_TYPE,EFFECT" -- define a default row for the levels data *set* dr *to* *my* blankArray(17) -- set common standard columns of EOS CSV output *set* *item* 1 *of* dr *to* 1 -- target type *set* *item* 2 *of* dr *to* "Cue" *set* *item* 3 *of* dr *to* 1 -- cue list 1 -- loop through the lighting cues in this workspace *repeat* *with* lxcue *in* (*cues* *whose* q type *is* "light") -- get the cue number and check it is numeric (non-numeric cue numbers are ignored) *try* *set* cueNum *to* q number *of* lxcue *as* *number* *on* *error* errMesg *display notification* errMesg with title "Non-numeric cue num " & cueNum *end* *try* -- catch the case where cue numbers are not numbers, otherwise this will break -- TODO you many want to remove 'LX' prefix if used here *if* (*class* *of* cueNum *is* *integer*) *or* (*class* *of* cueNum *is* *real*) *then* -- put the cue data (cue num, cue name, duration) into its row *set* ecrow *to* decr *set* *item* 4 *of* ecrow *to* cueNum *set* *item* 7 *of* ecrow *to* (q display name *of* lxcue *as* *string*) -- this is the Up Time duration ... *set* *item* 8 *of* ecrow *to* (duration *of* lxcue) -- ... EOS supports lots of timings, so the duration is in the CSV file again *set* *item* 18 *of* ecrow *to* (duration *of* lxcue) *set* AppleScript's text item delimiters *to* "," *set* *end* *of* ecuerows *to* (ecrow *as* *text*) *set* elrow *to* dr -- get the lighting command text of the lighting cue (of the form ch = level eg 8 = 45 each channel parameter on its own line) *set* lxlines *to* *paragraphs* *of* (command text *of* lxcue *as* *string*) *repeat* *with* cl *in* lxlines *set* w *to* *words* *of* cl *try* *set* ch *to* *item* 1 *of* w -- Qlab lighting commands sometimes include a parameter (eg red) but if just intensity, it is omitted. -- NOTE: if you have used references to other cues, this is not deall with here and will break! or give unpredicatable results *if* (*item* 2 *of* w) *is* "=" *then* -- intensity *set* lev *to* *item* 3 *of* w *set* pnum *to* 1 *set* pdesc *to* "Intens" *else* -- non-intensity parameter *set* pdesc *to* *item* 2 *of* w *set* lev *to* *item* 4 *of* w *end* *if* -- grab the Eos parameter number (for rgb, pan, tilt etc) from the paramNames list using custom function *set* pnum *to* *my* indexOf(paramNames, pdesc) -- update the essential columns in the eos row -- col 4 is cue num, col 6 is channel, col7 is eos parameter num, col 8 is param desc, col 9 is the level -- 6 is ch, 7 is param num, 8 param desc, 9 is level *set* *item* 4 *of* elrow *to* cueNum *set* *item* 6 *of* elrow *to* ch *set* *item* 7 *of* elrow *to* pnum *set* *item* 8 *of* elrow *to* pdesc *set* *item* 9 *of* elrow *to* lev *set* AppleScript's text item delimiters *to* "," -- append this data to the cumlative eos row data *set* *end* *of* elrows *to* (elrow *as* *text*) *as* *string* *end* *try* *end* *repeat* *else* *display notification* "skiping cue as non numeric cue number" *end* *if* *end* *repeat* *set* AppleScript's text item delimiters *to* "," *set* *end* *of* ecuerows *to* (elistrow *as* *text*) --set AppleScript's text item delimiters to linefeed *set* *end* *of* ecuerows *to* "END_TARGETS" *set* *end* *of* elrows *to* "END_LEVELS" -- get the Worksapce name to use in file name *set* AppleScript's text item delimiters *to* "." *set* workspaceName *to* *first* *text item* *of* ((q number) *as* *string*) *set* basename *to* workspaceName & "_export4Eos" *set* AppleScript's text item delimiters *to* linefeed *display dialog* "Export Lighting to EOS as CSV" & linefeed & basename & linefeed & (ecuerows *as* *text*) with title "Export to file" *end* *tell* -- now export the lines to files for cues and levels *set* cues_filepath *to* POSIX path *of* (*path to* *desktop*) & basename & "_cues.csv" *set* levels_filepath *to* POSIX path *of* (*path to* *desktop*) & basename & "_levels.csv" *try* *set* myfile *to* *open for access* cues_filepath *with* write permission *write* (ecuerows *as* *text*) & linefeed to myfile --write (elrows as text) & linefeed to myfile starting at eof *on* *error* e *display dialog* e *end* *try* *try* *set* myfile *to* *open for access* levels_filepath *with* write permission *write* (elrows *as* *text*) & linefeed to myfile starting at *eof* *display dialog* "Lighting data exported as CSV for EOS to " & nl & cues_filepath & nl & levels_filepath with title "Export finished" *on* *error* e *display dialog* e *end* *try* *on* indexOf(myList, myitem) *repeat* *with* n *from* 1 *to* length *of* myList *if* *item* n *of* myList *is* myitem *then* *return* n *end* *if* *end* *repeat* *return* 0 *end* indexOf *on* blankArray(numEl) -- generate an array with num of elements *set* A *to* {} *repeat* *with* n *from* 1 *to* numEl *set* *end* *of* A *to* "" *end* *repeat* *return* A *end* blankArray On Saturday, 15 November 2025 at 17:39:33 UTC Alexander R. Taylor wrote: |
Alexander (Mailing List) Taylor <ataylo...@orcsd.org>: Nov 18 12:58PM
Thank you very much for sharing this. I'm looking forward to tweaking this and transferring the 78 cues we have now. Thanks again, Alexander On Nov 17, 2025, at 5:41 PM, Paul <paulthom...@gmail.com> wrote: Caution - This email is from outside ORCSD. Do not click links or open attachments unless you recognize the sender and know the content is safe. ________________________________ Yes, you can export the lighting commands fairly easily. But it is more difficult to get that data into a format EOS can import. You will need to figure out the various parameters (apart from intensity) you are using (colours, focus or whatever) and their equlivant EOS numbers. You also need to export the cues and the levels in separate files as you need to import these separately into EOS. So the question becomes is it quicker to re-plot from scratch in EOS; just depends on the scale of the show file. The script below will export Lighting cue command from Qlab into 2 CSV files which can be imported into EOS. It only handles red, green,blue and intensity parameters (you can add others) and doesn't attempt to deal with cues which reference another cue ("pallets") so if you've used those it will almost certainly break. It will ignore any lighting cues which have a non-numeric cue number as EOS only handles numeric cue numbers (so you might want to adjust your workspace before using). Also EOS csv import is not very robust and if you get the data wrong it crashes. I have done minimal testing on this (just a few cues) and it works but please back up your Workspace and make sure you understand what the script does before running it. -- Export lighting cues and levels to CSV for import into EOS tell application id "com.figure53.QLab.5" to tell front workspace set nl to linefeed -- define the mapping to EOS parameter numbers -- if you are using more parameters other than RGB you will need to find the number from EOS and add them here -- note some parameter numbers can be 1000s (X-Focus) and this scheme may be impractical in those cases. set paramNames to my blankArray(14) -- here we just assume only RGB fixtrues are in use set item 1 of paramNames to "Intens" set item 12 of paramNames to "red" set item 13 of paramNames to "green" set item 14 of paramNames to "blue" ---- initalise the first two rows for cues csv data set ecuerows to {"START_TARGETS"} set end of ecuerows to "TARGET_TYPE,TARGET_TYPE_AS_TEXT,TARGET_LIST_NUMBER,TARGET_ID,TARGET_DCID,PART_NUMBER,LABEL,TIME_DATA,UP_DELAY,DOWN_TIME,DOWN_DELAY,FOCUS_TIME,FOCUS_DELAY,COLOR_TIME,COLOR_DELAY,BEAM_TIME,BEAM_DELAY,DURATION,ALERT_TIME,MARK,BLOCK,ASSERT,ALL_FADE,PREHEAT,FOLLOW,LINK,LOOP,CURVE,RATE,EXTERNAL_LINKS,EFFECTS,MODE,CUE_NOTES,SCENE_TEXT,SCENE_END,WIDTH,HEIGHT" -- add the cue list target (at top and bottom) set elistrow to my blankArray(37) set item 1 of elistrow to 15 -- cue list target set item 2 of elistrow to "Cue_List" set item 4 of elistrow to 1 -- cue list 1 set AppleScript's text item delimiters to "," set end of ecuerows to (elistrow as text) -- define a default eos cue row set decr to my blankArray(37) set item 1 of decr to 1 -- cue target set item 2 of decr to "Cue" set item 3 of decr to 1 -- cue list 1 ----- initalise the headers for levels CSV data set elrows to {"START_LEVELS"} set end of elrows to "TARGET_TYPE,TARGET_TYPE_AS_TEXT,TARGET_LIST_NUMBER,TARGET_ID,TARGET_PART_NUMBER,CHANNEL,PARAMETER_TYPE,PARAMETER_TYPE_AS_TEXT,LEVEL,LEVEL_REFERENCE_TYPE,LEVEL_REFERENCE_TYPE_AS_TEXT,LEVEL_REFERENCE_LIST_NUMBER,LEVEL_REFERENCE_ID,FADE_TIME,DELAY_TIME,MARK_CUE,TRACK_TYPE,EFFECT" -- define a default row for the levels data set dr to my blankArray(17) -- set common standard columns of EOS CSV output set item 1 of dr to 1 -- target type set item 2 of dr to "Cue" set item 3 of dr to 1 -- cue list 1 -- loop through the lighting cues in this workspace repeat with lxcue in (cues whose q type is "light") -- get the cue number and check it is numeric (non-numeric cue numbers are ignored) try set cueNum to q number of lxcue as number on error errMesg display notification errMesg with title "Non-numeric cue num " & cueNum end try -- catch the case where cue numbers are not numbers, otherwise this will break -- TODO you many want to remove 'LX' prefix if used here if (class of cueNum is integer) or (class of cueNum is real) then -- put the cue data (cue num, cue name, duration) into its row set ecrow to decr set item 4 of ecrow to cueNum set item 7 of ecrow to (q display name of lxcue as string) -- this is the Up Time duration ... set item 8 of ecrow to (duration of lxcue) -- ... EOS supports lots of timings, so the duration is in the CSV file again set item 18 of ecrow to (duration of lxcue) set AppleScript's text item delimiters to "," set end of ecuerows to (ecrow as text) set elrow to dr -- get the lighting command text of the lighting cue (of the form ch = level eg 8 = 45 each channel parameter on its own line) set lxlines to paragraphs of (command text of lxcue as string) repeat with cl in lxlines set w to words of cl try set ch to item 1 of w -- Qlab lighting commands sometimes include a parameter (eg red) but if just intensity, it is omitted. -- NOTE: if you have used references to other cues, this is not deall with here and will break! or give unpredicatable results if (item 2 of w) is "=" then -- intensity set lev to item 3 of w set pnum to 1 set pdesc to "Intens" else -- non-intensity parameter set pdesc to item 2 of w set lev to item 4 of w end if -- grab the Eos parameter number (for rgb, pan, tilt etc) from the paramNames list using custom function set pnum to my indexOf(paramNames, pdesc) -- update the essential columns in the eos row -- col 4 is cue num, col 6 is channel, col7 is eos parameter num, col 8 is param desc, col 9 is the level -- 6 is ch, 7 is param num, 8 param desc, 9 is level set item 4 of elrow to cueNum set item 6 of elrow to ch set item 7 of elrow to pnum set item 8 of elrow to pdesc set item 9 of elrow to lev set AppleScript's text item delimiters to "," -- append this data to the cumlative eos row data set end of elrows to (elrow as text) as string end try end repeat else display notification "skiping cue as non numeric cue number" end if end repeat set AppleScript's text item delimiters to "," set end of ecuerows to (elistrow as text) --set AppleScript's text item delimiters to linefeed set end of ecuerows to "END_TARGETS" set end of elrows to "END_LEVELS" -- get the Worksapce name to use in file name set AppleScript's text item delimiters to "." set workspaceName to first text item of ((q number) as string) set basename to workspaceName & "_export4Eos" set AppleScript's text item delimiters to linefeed display dialog "Export Lighting to EOS as CSV" & linefeed & basename & linefeed & (ecuerows as text) with title "Export to file" end tell -- now export the lines to files for cues and levels set cues_filepath to POSIX path of (path to desktop) & basename & "_cues.csv" set levels_filepath to POSIX path of (path to desktop) & basename & "_levels.csv" try set myfile to open for access cues_filepath with write permission write (ecuerows as text) & linefeed to myfile --write (elrows as text) & linefeed to myfile starting at eof on error e display dialog e end try try set myfile to open for access levels_filepath with write permission write (elrows as text) & linefeed to myfile starting at eof display dialog "Lighting data exported as CSV for EOS to " & nl & cues_filepath & nl & levels_filepath with title "Export finished" on error e display dialog e end try on indexOf(myList, myitem) repeat with n from 1 to length of myList if item n of myList is myitem then return n end if end repeat return 0 end indexOf on blankArray(numEl) -- generate an array with num of elements set A to {} repeat with n from 1 to numEl set end of A to "" end repeat return A end blankArray On Saturday, 15 November 2025 at 17:39:33 UTC Alexander R. Taylor wrote: Hello, Is there a way to export the fixture values of each lighting cue? I'm trying to import the cues into an Eos system as CSV without rewriting the whole show. Thanks, Alexander Sent from my iPhone! -- Contact support anytime: sup...@figure53.com User Group Code of Conduct: https://qlab.app/code-of-conduct/ Instagram: https://www.instagram.com/Figure53 TikTok: https://www.tiktok.com/@QLab.app Bluesky: https://bsky.app/profile/qlab.app --- You received this message because you are subscribed to the Google Groups "QLab" group. To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com<mailto:qlab+unsubscribe@googlegroups.com>. To view this discussion visit https://groups.google.com/d/msgid/qlab/0bc98121-28b0-4c27-88c9-ba417506eb64n%40googlegroups.com<https://groups.google.com/d/msgid/qlab/0bc98121-28b0-4c27-88c9-ba417506eb64n%40googlegroups.com?utm_medium=email&utm_source=footer>. The Right-To-Know Law provides that most e-mail communications to or from School District employees regarding the business of the School District are government records available to the public upon request. Therefore, this e-mail communication may be subject to public disclosure. |