Rank: Advanced Member
Groups: Registered
Joined: 11/23/2020(UTC) Posts: 170 Location: Wichita Thanks: 10 times Was thanked: 24 time(s) in 20 post(s)
|
Originally Posted by: gpdipalmerahtimur Hi Doggy,
If we can modify a Title Fill Color by using SetColor, can we also use script to Change Border Color dynamically? Nope. They added the new feature of colored borders but they never added it to the API. You need to request it as "Feature Request" though they really should be considering the API whenever they add a new feature at this point they are not doing so.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 3/7/2022(UTC) Posts: 71 Location: Munich Was thanked: 33 time(s) in 17 post(s)
|
Just a hint for all those struggling with scripting vMix and want a resource for "borrowing" code snippets: During the last 1.5 years, in the context of our company filmstudio and its live event productions, I've developed multiple production-grade vMix scripts and released them as Open Source Software. Recently, I've further polished and documented all the scripts, added a few new ones and improved some of the existing ones. Check out this freely available vMix Scripts collection now, feel free to reuse some of those scripts in your own productions, and please give back some feedback. I hope this resource is useful for all professional vMix users.
|
7 users thanked engelschall for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Total Seconds Countdown not as standard timedisplay Code:'Total Seconds Countdown using Stopwatch as time reference
dim total as integer = 250 'Total # of seconds to count down
dim label as integer = 1
dim watch As Stopwatch = Stopwatch.StartNew()
do while label > 0
Dim elapsed As TimeSpan = watch.Elapsed
label = total - Math.Floor(elapsed.TotalMilliseconds/1000)
API.Function("SetText",Input:="9",SelectedName:="Description.Text",Value:=label) 'edit for own titlinput
Sleep(250)
loop
Code:'Total Seconds Countdown using DateTime as time reference
dim StartTime,NowTime as DateTime
dim ts As TimeSpan
dim ctime as integer = 1
dim total as integer = 250 'Total # of seconds to count down
StartTime = DateTime.Now()
do while ctime > 0
NowTime = DateTime.Now()
ts = NowTime.Subtract(StartTime)
ctime = total - (((ts.Hours * 60) + ts.Minutes) * 60 + ts.Seconds)
API.Function("SetText",Input:="9",SelectedName:="Headline.Text",Value:=ctime)
sleep(500)
Loop
|
2 users thanked doggy for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 4/16/2017(UTC) Posts: 578 Location: jamaica
Thanks: 77 times Was thanked: 32 time(s) in 31 post(s)
|
Is there a simpler script, using a simple code....
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Originally Posted by: Joeboe Is there a simpler script, using a simple code.... for what ???? (sorry can not read minds)
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Originally Posted by: Bonbondotkom I press F2 to Show Inputs in Green Category Then these what D1 to D9 would do: D1=Function=PreviewInput&Input=Input10 D2=Function=PreviewInput&Input=Input11 D3=Function=PreviewInput&Input=Input12 D4=Function=PreviewInput&Input=Input13 D5=Function=PreviewInput&Input=Input14 D6=Function=PreviewInput&Input=Input15 D7=Function=PreviewInput&Input=Input16 D8=Function=PreviewInput&Input=Input17 D9=Function=PreviewInput&Input=Input18
Is it doable in scripting without using MoveInput? I don't want to change the input number. Thanks in advance!
yeah maybe but why mess up (highjack) this post up while you allready have a separate post (also highjacked with different original question) addressing your issue/personal request
|
1 user thanked doggy for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 7/27/2022(UTC) Posts: 31 Thanks: 11 times Was thanked: 1 time(s) in 1 post(s)
|
sorry about that. i just deleted my post here.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 2/18/2014(UTC) Posts: 1,838 Location: Stockholm
Thanks: 144 times Was thanked: 297 time(s) in 250 post(s)
|
I want a Companion (V3) button to light up if any Input has Solo On. Unfortunately there is no info in vMix's API that reflects solo globally. Here is script that will find if any Input has Solo On. To save vMix's Dynamic values for other uses, the script alters the Loop value of the (arbitrary) Input "Black". And it's loop state can easily be used for Feedback, Triggers, etc in Companion. Code:'AnySolo
dim checkStatesIterTime as integer = 200
do while true
Dim x As New XmlDocument()
x.LoadXml(API.XML)
dim soloNode As XmlNode = x.SelectSingleNode("/vmix/inputs/input[@solo='True']")
If soloNode IsNot Nothing Then
API.Function("LoopOn",Input:="Black")
Else
API.Function("LoopOff",Input:="Black")
End If
sleep(checkStatesIterTime)
Loop
|
1 user thanked richardgatarski for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 2/18/2014(UTC) Posts: 1,838 Location: Stockholm
Thanks: 144 times Was thanked: 297 time(s) in 250 post(s)
|
and, of course, one might need a button that turns Solo Off for all Inputs :) Code:Dim x As New XmlDocument()
x.LoadXml(API.XML)
dim soloNodesList As XmlNodeList = x.SelectNodes("/vmix/inputs/input[@solo='True']")
for each node as XmlElement In SoloNodesList
API.Function("SoloOff",Input:=node.GetAttribute("key"))
next
|
1 user thanked richardgatarski for this useful post.
|
|
|
Rank: Newbie
Groups: Registered
Joined: 9/15/2022(UTC) Posts: 1 Location: Maputo Thanks: 2 times
|
Hello there! I have to say thanks for this great thread. As a zero programming skilled person I am gratefull for all posted here. Excuse me for this little following intro; for some time I have been working doing a live tv show where there is a moment where people in the set play a trivia. The regular trivia. Host makes questions, each person has a buzzer and so on. How do i do it? Well, each contestant has its own camera on them. Each camera is a video input on my vmix. What I have done is that each buzzer is connected to vmix. Each one of them works as a keyboard input which i set in vmix as a shortcut. The idea is that when a contestant presses the buzzer it instantely and automatically switchs to his camera and shows him on program output and also some effect overlays, sounds and stuff. So, each buzzer input as a keyboard key. For example for 3 buzzers keys 1 (D1), 2 (D2) and 3 (D3). On the shortcut menu each one of this shortcuts does the exactly same thing; sets dynamic value to 1 and starts a script ("buzzer"). The 3 shortcuts do exactly the same thing and value. scren.png (10kb) downloaded 0 time(s).And, my super-mega script "buzzer" is just this 2 lines: Function=CutDirect&Input=DynamicInput1 Sleep 20000 Why the sleep? Because as it is a trivia, when the first person buzzes and gets on screen, the other buzzers are disabled. Hence the sleep. So the second and third buzzer are not CutDirect and not switched to the program output and we just stay with the person who buzzed. In the shortcut screenshot you see a D0 shortcut that I use just to stop the script (that is left "sleeping" for no further buzzer activation) so i can re-start the buzzers. I know its very rudimentary. But it works. The only thing is that as as the script is "sleeping" i get the prompt message "Script Buzzer is already running" so i have to keep pressing "Close" every time/answer. But, it still gets the job done. If anybody has a proper way to do this, would be glad to see. Cheers!
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 11/23/2020(UTC) Posts: 170 Location: Wichita Thanks: 10 times Was thanked: 24 time(s) in 20 post(s)
|
Originally Posted by: ManuGG Hello there! I have to say thanks for this great thread. As a zero programming skilled person I am gratefull for all posted here. Excuse me for this little following intro; for some time I have been working doing a live tv show where there is a moment where people in the set play a trivia. The regular trivia. Host makes questions, each person has a buzzer and so on. How do i do it? Well, each contestant has its own camera on them. Each camera is a video input on my vmix. What I have done is that each buzzer is connected to vmix. Each one of them works as a keyboard input which i set in vmix as a shortcut. The idea is that when a contestant presses the buzzer it instantely and automatically switchs to his camera and shows him on program output and also some effect overlays, sounds and stuff. So, each buzzer input as a keyboard key. For example for 3 buzzers keys 1 (D1), 2 (D2) and 3 (D3). On the shortcut menu each one of this shortcuts does the exactly same thing; sets dynamic value to 1 and starts a script ("buzzer"). The 3 shortcuts do exactly the same thing and value. scren.png (10kb) downloaded 0 time(s).And, my super-mega script "buzzer" is just this 2 lines: Function=CutDirect&Input=DynamicInput1 Sleep 20000 Why the sleep? Because as it is a trivia, when the first person buzzes and gets on screen, the other buzzers are disabled. Hence the sleep. So the second and third buzzer are not CutDirect and not switched to the program output and we just stay with the person who buzzed. In the shortcut screenshot you see a D0 shortcut that I use just to stop the script (that is left "sleeping" for no further buzzer activation) so i can re-start the buzzers. I know its very rudimentary. But it works. The only thing is that as as the script is "sleeping" i get the prompt message "Script Buzzer is already running" so i have to keep pressing "Close" every time/answer. But, it still gets the job done. If anybody has a proper way to do this, would be glad to see. Cheers! I would add a single if statement to the script. That if statement would check to see if the DynamicInput1 is set to one of the player cameras already, if not already set to one of the players do your Function=CutDirect&Input=DynamicInput1. Now create a copy of the script for each player and set up the trigger for each player to start their copy of the script instead of all players starting one script. With each player having their own copy of the script, you don't get the "script is already running" prompts but since the first to press gets the input set to their camera none of the others can take it, no wait 20000 needed.
|
1 user thanked Roy Sinclair for this useful post.
|
|
|
Rank: Newbie
Groups: Registered
Joined: 4/9/2022(UTC) Posts: 2 Location: Hanoi Thanks: 2 times
|
First off all, i am sorry about my English (i'm using Google translate) How to call input by short name by script Example i have a inputname "ABCD#1234" (ABCE is shortname, and 1234 is note infomation) how to API.Function("Cut",Input:="ABCD") same API.Function("Cut",Input:="ABCD#1234") Tks for support.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 11/23/2020(UTC) Posts: 170 Location: Wichita Thanks: 10 times Was thanked: 24 time(s) in 20 post(s)
|
Originally Posted by: Nguyendung First off all, i am sorry about my English (i'm using Google translate) How to call input by short name by script Example i have a inputname "ABCD#1234" (ABCE is shortname, and 1234 is note infomation) how to API.Function("Cut",Input:="ABCD") same API.Function("Cut",Input:="ABCD#1234") Tks for support. There is no "Cut" function, only "CutDirect" which is probably why the things you've been trying didn't work. Best practice it to use the KEY value for the input instead of it's number or it's name. The number and the name can be changed but unless the input is deleted and added back again the KEY value for that input will never change. And yeah, it's a hideous thing to type but that's what cut and paste are for. Code:
For example this is the http://localhost:8088/api response from vMIX (copy I'm running)
...
<input key="fda8cd85-095d-4c40-98ba-b98800c02eaa" number="1" type="Stream" title="Center Camera" shortTitle="Center Camera" state="Running" position="0" duration="0" loop="False" muted="True" volume="100" balance="0" solo="False" audiobusses="" meterF1="0" meterF2="0" gainDb="0">Center Camera</input>
...
So my call to switch to the "Center Camera" (using the format you used) would be: API.Function("CutDirect",Input:="fda8cd85-095d-4c40-98ba-b98800c02eaa")
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Populate Layers of an input with the previews of the first 10 mixes / and update if they transition (Don't Ask why ;-) ) Code:'Populating the layers of an input with the previews of Mixes (max 9)
Dim MVInput as string = "Colour" 'number or name of the multiview Input
Dim MaxMix as integer = 10 'max number of Mix Inputs to check / use in order (max 10 layers)
Dim MixNumberPV as string = "0" 'just a check for existing defined input in the Mix
dim y as integer = 1
dim xml as string = API.XML()
dim x as new system.xml.xmldocument
do while true
x.loadxml(API.XML())
Dim nodeList As XmlNodeList = x.SelectNodes("//mix")
y = 1
For each node as XmlElement In nodeList
MixNumberPV = (node.SelectSingleNode("preview").InnerText)
if MixNumberPV <> "0"
API.Function("SetLayer",Input:=MVInput ,Value:= y.tostring & "," & MixNumberPV )
else
API.Function("SetLayer",Input:=MVInput ,Value:= y.tostring & ",None" )
end if
y+=1
if Y > MaxMix
exit for
end if
next
sleep(500)
loop
|
2 users thanked doggy for this useful post.
|
|
|
Rank: Newbie
Groups: Registered
Joined: 11/9/2021(UTC) Posts: 1
|
Hi all.
I'm trying to get the name of the currently subscribed NDI source to a VMix input as a string for .net scripting. Maybe something comparable to:
exampletext as string = (Input.Find("Example_Graphic").Text("Line 1.Text"))
The api.xml doesn't seem to give the source name but the .vmix preset file does. However I need to query this live so that would only work if the preset was saved after the NDI source changed.
Any suggestions would be appreciated, thank you :)
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Originally Posted by: joeb1 Hi all.
I'm trying to get the name of the currently subscribed NDI source to a VMix input as a string for .net scripting. Maybe something comparable to:
The api.xml doesn't seem to give the source name You sure ? (shortTitle=) Quote:but the .vmix preset file does. However I need to query this live so that would only work if the preset was saved after the NDI source changed.
Any suggestions would be appreciated, thank you :) Maybe check for it the "Last" preset (auto updates every minute)
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/24/2021(UTC) Posts: 531 Location: athens Thanks: 128 times Was thanked: 73 time(s) in 69 post(s)
|
Hello guys. Is there any way the number of the overlay channel to be transcoded in to the real input name? I want to keep logs of what im playing in my overlay channels so i used as base this script https://forums.vmix.com/...or-commercials#post99914 and this https://forums.vmix.com/...ng-for-Dummies#post71167 the script is this for example for overlay1 channel Code:
''''''''''''''''
' Script von Mats Julian Steffens
' www.lvstrm.de
''''''''''''''''
'
' Log everything you are playing
'
''''''''''''''''
dim dateinamealt as string = ""
do
dim datum as string
datum = DateTime.Now.ToString("yyMMdd")
dim filename as string
filename="C:\vMix log\overlay1\"+datum+"-vmixlog.txt" 'Where to save the file
If (Not System.IO.File.Exists(filename)) Then
My.Computer.FileSystem.WriteAllText(filename, " ", True)
End If
''''''''''''''''
dim timestamp as string
timestamp = DateTime.Now.ToString("dd/MM/yy HH:mm:ss")
dim xml as string = API.XML()
dim ovl1input as string = ""
dim x as new system.xml.xmldocument
x.loadxml(xml)
ovl1input = (x.SelectSingleNode("//overlays//overlay[1]").InnerText)
dim dateiname as string = (x.SelectSingleNode("//overlays//overlay[1]").InnerText)
if (ovl1input = nothing)
'we don't have 2 PIP overlays, no point in continuing then
end if
dim inputnamelaenge as string
If (ovl1input = dateiname) Then
inputnamelaenge = 0
Else
inputnamelaenge = ovl1input.Length()+3
End If
dim inputString as string
'Datei schreiben
If (dateinamealt <> dateiname) Then
inputString = timestamp + " " + dateiname.Substring(inputnamelaenge) + Environment.NewLine
Console.WriteLine(inputString)
My.Computer.FileSystem.WriteAllText(filename, inputString, True)
dateinamealt = dateiname
End If
sleep(1000)
loop
Ιt work ok but is there any way in txt log file instead of the input number to record the input name? I need somehow to transcode the input number from overlay api xml record to the input name and then write it to the txt file. Is this possible? Thank you
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,239 Location: Belgium Thanks: 293 times Was thanked: 958 time(s) in 793 post(s)
|
Originally Posted by: nikosman88 Hello guys. Is there any way the number of the overlay channel to be transcoded in to the real input name? I want to keep logs of what im playing in my overlay channels so i used as base this script https://forums.vmix.com/...or-commercials#post99914 and this https://forums.vmix.com/...ng-for-Dummies#post71167 the script is this for example for overlay1 channel Ιt work ok but is there any way in txt log file instead of the input number to record the input name? I need somehow to transcode the input number from overlay api xml record to the input name and then write it to the txt file. Is this possible? Thank you get the Input's innertext matching the number Code:'X is the variable holding the input number
Dim name as string = x.SelectSingleNode("//input[@number=" & X & "]").InnerText
|
1 user thanked doggy for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/24/2021(UTC) Posts: 531 Location: athens Thanks: 128 times Was thanked: 73 time(s) in 69 post(s)
|
Originally Posted by: doggy Originally Posted by: nikosman88 Hello guys. Is there any way the number of the overlay channel to be transcoded in to the real input name? I want to keep logs of what im playing in my overlay channels so i used as base this script https://forums.vmix.com/...or-commercials#post99914 and this https://forums.vmix.com/...ng-for-Dummies#post71167 the script is this for example for overlay1 channel Ιt work ok but is there any way in txt log file instead of the input number to record the input name? I need somehow to transcode the input number from overlay api xml record to the input name and then write it to the txt file. Is this possible? Thank you get the Input's innertext matching the number Code:'X is the variable holding the input number
Dim name as string = x.SelectSingleNode("//input[@number=" & X & "]").InnerText
Thank you. Im trying to do it.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 11/15/2021(UTC) Posts: 72 Thanks: 8 times Was thanked: 9 time(s) in 7 post(s)
|
Hy guys, It is possible to change a Text value by Looking for name and Not for the Index nr? Code:API.Function("ChangeCountdown",Input:="Timer Centre.gtzip", SelectedIndex:="0", Value:="00:05")
Something like: API.Function("ChangeCountdown",Input:="Timer Centre.gtzip", Selectet Name:="countdown1.Text", Value:="00:05")
|
|
|
|
Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.
Important Information:
The vMix Forums uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close