Would someone mind letting me know the easiest/best way to have a lower third animate on automatically with the right timing when you switch from say, a split screen with several people to focus on one person? I’d like the lower third to come on automatically a second or so after switching to the single shot and then go off after 20 seconds, for example. Thank you!
A: The “quick and dirty” implementation:
- Add Automation layer (For each situation one variant. Person A, Person B, Person A+B)
- use a code like this at “while Live” (when it should repeate while it is active), if it’ should be done once, at “on Live” in Manual mode:
// wait till the movement finishes and everything is in place
sleep(20)
// call the endpoint of the lower thirds:
layerOn(<API-Endopoint of the Lower Third>)
layerOff(<API-Endopoint of the Lower Third>)
Notice: Add layerOn() or layerOff() for all lower thirds Layers which should be seen/not be seen. What if another is currently visible? Yes. We have to switch 'em off in “case”. When they are not visible, nothing else happens.
- Start each particular Automation together with your matching Layer Set
B: The propper implementation:
When I think to the demo-document, I sent you - which is realy complex, because of the different signet positions/behaviours, and because of the split screen, which should show the same lower thirds then elsewhere, but on another position, which should be possible - the gray buttons contain a second action, that let the lower thirds appear together with the original switching process. This connection has to be deleted, to not get in conflict with the new Automation process. An “easy” way does not exist, but a more or less complex way:
Hint: The more participants you have, the more complex this will be, when using Automation together with the used Lower Thirds (which does not support time shifting). So, I’d suggest to use it as rare as possible for only switching in the lower Thirds. Please keep also in mind, that some times, lower thirds do not have the propper timing, even you could show them automatically. If so, there could be some kind of “time line”, which is cycling through some main views in a pattern, when this or that is to see “on time”. Also, an option for “do not show lower thirds while cycling” could be necessary, especially when LTs are not welcome. It’s not funny to read the name, when someone talked bogus, because of being nervous. (I tallked bullshit, and yes, this is my name!) :
This “pattern” could be solved like this
in combination with that:
Stay tuned to see if I can accomplish this! - Elissa
ALMOST THERE! (but not quite) Per the attached screenshots, my lower third (one of several) comes in automatically(!) with 5 second delay as programmed, but in the group view (2x2) rather when I solo that person - Person A. I’ve attached screenshots - first of how its coming in on the group shot and then where I actually want it to come in. What should I have done differently? Thank you!
If you want to compare parameters, like boolean switch states, you have to use ifLayerData() to trigger the choice.
Syntax:
ifLayerData()
(else)
endif
Cascade more ifs by using else to ask different situations. The sleep command is there, because I think you want to cycle it while being onLive:
sleep($duration)
ifLayerData()
...
else
ifLayerData()
...
else
ifLayerData()
...
else
ifLayerData()
...
endif
endif
endif
endif
Instead of the … call the matching lower third, by using layerOn($variant).
With this method you could run all lower third situations, by one automation process. But only, if you just have ONE person on screen.
With your layer arrangement it’s not possible to show lower thirds on different positions on screen, or on the same time.
Please see Automation - mimoLive - 5 to get more information about the usage of ifLayerData().
From mimoLive 5.10.1b3 on, you’re able to get the endpoints, also the API-Key and the Variable’s name also the by clicking on the Text at the Layer-Setings, next to the value.
If you use an older version of mimoLive, see JSON-Objects for namings. Just call the API-Endpoint within your top favorite Browser. (Firefox shows it also formated.)
What is an API-Key?
=> The API-Key is the “path” to the value, including the variable’s name, like: data.attributes.input-values.tvGroup_Control__Solo_A
I will try my best and see what happens (or doesn’t!) - Elissa
Don’t worry, you can do it!
Hey, there. I tried this as the code, but it just would not generate the proper lower third when SoloA was clearly clicked in the Melange 4 layer. Here’s also a quick video - no errors but not the action I’m looking for. Lower third coding attempt - minimatters Thanks if you have a quick thought or two. Once this works (I’m anticipating eventual success), would be happy to share with the group, as this seems like a helpful automation to have.
Many thanks! Barbara still working on her issues… - Elissa
Hello @elissa,please delete < and > from your code.
At syntax descriptions we use these signs/characters/markers to show, that some kind of paranthesis is necessary.
By the way, please cascade the code, so that unnecessary if-commands are skipped. Please sort it by the chance of the most appearance.
ifLayerData()
...
else
ifLayerData()
...
else
ifLayerData()
...
else
ifLayerData()
...
endif
endif
endif
endif
The rest looks amazing, GO GO GO!!
Ps: There was a “timeout”, which shows, that your request to the api-endpoint failed.
Hey @MiniMattersEL , was it a solution?
About to get to work on this—thank you! (We’re on EST in Maryland, US.) will report back!
Don’t worry. I replied to you (this morning) at 3am.
Hi! I believe I get the logic and syntax of this now, having read everything carefully. But it’s not working. I have the layer set Melange 4 to include automation going live. When I click to recall the layer set, this indeed launches the script. But even if I have the split screen set to Solo A or any of the others, it will not produce the proper lower third. And definitely, it’s not triggering the lower thirds I want when switching among A, B C and D solos. Here’s the latest, with only the syntax corrections you made, and some abbreviation of the API endpoint lengths to just the latter part, which instructions said was permitted. Sorry that I can’t figure this out - this seems like exactly the task the automation is made for!
sleep(5)
ifLayerData(“5CBB258F-D792-4CD9-9E96-E67170A9EBF4”,“data.attributes.input-values.tvGroup_Control__Solo_A”,"==",true)
layerOn(C1CAEB84-4710-4225-AA55-B63961153FC6/variants/E6E169D0-213E-4364-884C-D117D927E0E8)
else
ifLayerData("5CBB258F-D792-4CD9-9E96-E67170A9EBF4","data.attributes.input-values.tvGroup_Control__Solo_B","==",true)
layerOn(C1CAEB84-4710-4225-AA55-B63961153FC6/variants/5BA63D1C-C1EE-425E-BB34-2238BA927759)
else
ifLayerData("5CBB258F-D792-4CD9-9E96-E67170A9EBF4","data.attributes.input-values.tvGroup_Control__Solo_C","==",true)
layerOn(C1CAEB84-4710-4225-AA55-B63961153FC6/variants/03C4069E-FA78-452C-A092-37B901717F2B)
else
ifLayerData("5CBB258F-D792-4CD9-9E96-E67170A9EBF4","data.attributes.input-values.tvGroup_Control__Solo_D","==",true)
layerOn(C1CAEB84-4710-4225-AA55-B63961153FC6/variants/41B27D01-491B-41F6-BD84-FDAE5B220558)
endif
endif
endif
endif
By the way, it runs through the Sleep for 5 seconds and then it times out repeatedly on the IfLayerData variables. Thanks for your thoughts.
-Elissa
Thank you very much for your post, @MiniMattersEL .
I also tested it. It seems to be that there is a bug in v1.32 of Automation Layer. Unfortunately, it seems to be that the part about the boolean values is broken. I hope that it gets fixed soon. (I wrote a Bug report to Boinx.)
@MiniMattersEL , let me think, how you could work around:
OK, this is a solution:
Add a Script-Layer: (Manual Mode)
SplitScript
- Show All
- Person One
- Person Two
- Person Three
- Person Four
At the LayerSets, start the equivalent Script together with the SplitScreen. Inside the Script-LayerVariants, use httpRequest() to activate the boolean-switches inside of the split screen. (at on Live). BTW, this technique makes the SplitScreen-Layer compatible with LayerSets.
Let your LowerThirds script trigger ifLayerIsOn() (instead of ifLayerData) and reference the SplitScript-Layers.
Thank you for letting me know about the bug and discovering it, in fact. Certainly saves time and frustration/confusion! will look at your workaround and see if I can grasp it. Back to you later or tomorrow.
Elissa
I’m looking forward to hearing from you.
Here a demo, which sould inspire you.
Download:
https://drive.google.com/file/d/16upud-BmGh1NT_Yi_8eQdnbA3KW21ZU3/view?usp=sharing
It works.
You do not have to use the “all”-option of the Split Screen together with a lower third to make it work, maybe there just happens at the Script nothing else, then the movement between a fullscreen back to the splitt screen. Because of the bug, we cannot do a propper compare before switching. So, we just switch all “off” (in a sequence). This does not harm the performance in this case, so #kismet.
So happy to see this! My efforts had failed thus far—I didn’t know what I needed to do with the http function and was asking some others. I will re-engage with new energy tomorrow! I think this is a needed automation that shouldn’t be so hard. As you may know, I’m an editor way way more than a programmer, but willing and interested to try scripts to a certain extent. I’m sure your example is going to help me. Thank you! What is your main profession?
Elissa
You’re welcome,
that’s a good question: I cannot decide for a main profession, everything is - somehow - connected together: Most of the time, I’m a trainer/teacher (especially for German as a foreign / secondary language), artist and mental mind fu!#er, who’s exploring sense and nonsense of existance.
Over the time I collected lots of experience related on live broadcastings (TV) and streaming, based on software switching. In lack of a huge budget, scripting came into the play. (It’s the very fast finger, I’m not able to use myself, while presentations/shows. This ended up with up to 95% Automation of a show production, and 100% Automation while running a show with fixed or partial fixed show parts/plot points.)
However, it’s still fun to do. Please don’t worry about confusion/frustration: With the httpRequest()-command, you can change a boolean switch state of a layer’s variant, or execute further API-commands (like starting/stopping a stop watch, instant recording, cycleThroughVariants e.t.c.)
Syntax:
httpRequest(API-ENDPOINT)
Please compare these lines, you’ll immediately see the API-Endpoint of a layer-Variant, and the syntax to switch each of the toggles “off”.
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_A&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_A%22%3Afalse%7D%7D)
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_B&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_B%22%3Afalse%7D%7D)
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_C&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_C%22%3Afalse%7D%7D)
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_D&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_D%22%3Afalse%7D%7D)
Replace this to your “variant” of the Split Screen:
http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F
The “switch-on”-commands look similar:
// Where is the "true"?
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_A&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_A%22%3Atrue%7D%7D)
(…at the very end of the command)
I know, that inside of the command are several parameters present, so called sparse-parameters, also an update parameter. Currently, I do not fully understand how to write it, but I use copy and paste to fiddle it together.
I’m not a programmer either, but it feels so fancy to use it.
Notice: httpRequest needs a full URL, beginning with http:// - This is not save for a document which is being saved as. If you “save it as”, the document gets a new DocumentID, this breaks that connection.
BUT:
You could abuse layerOn() instead. This does only work, if you terminate the API and PARAMETERS with an ending #-character.
So, instead of
httpRequest(http://127.0.0.1:8989/api/v1/documents/510577608/layers/5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_A&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_A%22%3Afalse%7D%7D)
you’d use:
layerOn(5FC57440-C77A-40E7-9300-8ED0058AA929/variants/D00C0921-9A6E-422A-81E4-A88C0A9BC11F?include=data.attributes.input-values&fields[input-values]=tvGroup_Control__Solo_A&update=%7B%22input-values%22%3A%7B%22tvGroup_Control__Solo_A%22%3Afalse%7D%7D#)
Did you see the #-char at the end? It’s important. It ignores the rest of the internal command magic.
Thank you so much. I am just now getting to this. Spent the day traveling to a mass vaccination site, where the computers broke down. It was a very long day, but I have the first dose of a vaccine at least! I look forward to learning more through what you have prepared.