vMix Forums
»
General
»
Feature Requests
»
vMix VB.Net Scripting Environment Improvements
Rank: Advanced Member
Groups: Registered
Joined: 3/7/2022(UTC) Posts: 71 Location: Munich Was thanked: 33 time(s) in 17 post(s)
|
During the development of my various vMix VB.Net based scripts (see https://github.com/rse/vmix-scripts/) I've stumbled over the following shortcomings, which I would like to see improved in future versions of vMix: 1. Missing Function/Sub-Routines: for unknown reasons in the VB.Net 2.0 environment of vMix it seems one cannot declare neither functions ("function ... end function") nor sub-routines ("sub ... end sub"). This way one cannot define helper functions for complex scripts in order to reduce the script complexity. For one script I even had to change the algorithm from a recursive approach to an interactive one in order to cope with the limitation. VB.Net 2.0 is already a very old and nasty scripting environment, but without even functions/subs it is extremely nasty. Please support functions! 2. Missing Input Type: Although in the vMix documentation the type of inputs is defined to be "Input", this type is not available. There is only a global symbol "Input" for accessing things like Input.Output but no "Input" TYPE. In error messages vMix also tells one that the type of inputs actually internally is vMix.Scripting.Internal.Input. But even this cannot be used as a type as any "vMix." is not allowed. Please expose the type of inputs. 3. Missing Key on Inputs: One can go from numbers/names of inputs to Input-type-based objects via Input.Find(<name>) or Input.Find(<number>), but there seems to be no way to go from Input-type objects to the numbers/names. At least there is no ".Name" or ".Key" or whatever property on Input-type objects exposed. This e.g. dramatically limits the use of Input.Output and Input.Preview. Please expose at least the number and name of an input through a property. 4. Weak API Structure: the vMix API exposes an XML structure with some information on the current vMix configuration. Unfortunately, it is a rather weak exposure of the configuration only. Lots of information (e.g. whether a layer is enabled or disabled) is not exposed. This way one cannot easily react on those configuration aspects from within a script.
|
1 user thanked engelschall for this useful post.
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,188 Location: Belgium Thanks: 288 times Was thanked: 947 time(s) in 782 post(s)
|
Originally Posted by: engelschall 1. Missing Function/Sub-Routines: for unknown reasons in the VB.Net 2.0 environment of vMix it seems one cannot declare neither functions ("function ... end function") nor sub-routines ("sub ... end sub"). This way one cannot define helper functions for complex scripts in order to reduce the script complexity. For one script I even had to change the algorithm from a recursive approach to an interactive one in order to cope with the limitation. VB.Net 2.0 is already a very old and nasty scripting environment, but without even functions/subs it is extremely nasty. Please support functions!
create extarnally (app) and have access to all the bells and wistles of the enviroment! What we did anyways before vMix scripting was added ( and still prefer for various/practical reasons)
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 3/7/2022(UTC) Posts: 71 Location: Munich Was thanked: 33 time(s) in 17 post(s)
|
Yes and no. YES, in general I agree that when you would place the scripting code into an external program you can use an arbitrary scripting environment (in my case it would be Node.js or something like this). But, NO, this means you get lots of latency because of the involved HTTP API access (even over localhost). For instance, check out my Audio-Sidechain script (https://github.com/rse/vmix-scripts/blob/master/audio-sidechain.vb): every 10ms it has to check the state of vMix in order to perform its actions. It works great, but only because it is running from WITHIN vMix itself. It would fail to work if running externally because of the extra latencies. Also, there is the nasty case that for a complex production one needs multiple scripts anyway. And currently we can just store them as "local scripts" with the event preset. If the scripts are externally, they have to be kept in sync with the preset and also have to be started manually when vMix starts, etc. So, I see your point, of course. But in practice external scripting gets somewhat nasty.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/27/2012(UTC) Posts: 5,188 Location: Belgium Thanks: 288 times Was thanked: 947 time(s) in 782 post(s)
|
Originally Posted by: engelschall Yes and no. YES, in general I agree that when you would place the scripting code into an external program you can use an arbitrary scripting environment (in my case it would be Node.js or something like this). But, NO, this means you get lots of latency because of the involved HTTP API access (even over localhost). For instance, check out my Audio-Sidechain script (https://github.com/rse/vmix-scripts/blob/master/audio-sidechain.vb): every 10ms it has to check the state of vMix in order to perform its actions. It works great, but only because it is running from WITHIN vMix itself. It would fail to work if running externally because of the extra latencies. Also, there is the nasty case that for a complex production one needs multiple scripts anyway. And currently we can just store them as "local scripts" with the event preset. If the scripts are externally, they have to be kept in sync with the preset and also have to be started manually when vMix starts, etc. So, I see your point, of course. But in practice external scripting gets somewhat nasty. "Right".
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 11/23/2020(UTC) Posts: 166 Location: Wichita Thanks: 10 times Was thanked: 23 time(s) in 19 post(s)
|
Originally Posted by: doggy create extarnally (app) and have access to all the bells and wistles of the enviroment! What we did anyways before vMix scripting was added ( and still prefer for various/practical reasons)
If you can do this by accessing the vMix API then yes (i.s. not the HTTP calls method). +1 - Implementation is incomplete. It should be finished.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 12/24/2021(UTC) Posts: 430 Location: athens Thanks: 116 times Was thanked: 65 time(s) in 61 post(s)
|
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 3/30/2023(UTC) Posts: 63 Location: Chicago Thanks: 8 times Was thanked: 2 time(s) in 1 post(s)
|
+1 on subroutines and functions. Silly that you can't use them. Makes for much poorer scripts without them.
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 7/4/2021(UTC) Posts: 248 Thanks: 7 times Was thanked: 29 time(s) in 26 post(s)
|
|
|
|
|
Rank: Advanced Member
Groups: Registered
Joined: 11/23/2020(UTC) Posts: 166 Location: Wichita Thanks: 10 times Was thanked: 23 time(s) in 19 post(s)
|
Originally Posted by: engelschall During the development of my various vMix VB.Net based scripts (see https://github.com/rse/vmix-scripts/) I've stumbled over the following shortcomings, which I would like to see improved in future versions of vMix: 1. Missing Function/Sub-Routines: for unknown reasons in the VB.Net 2.0 environment of vMix it seems one cannot declare neither functions ("function ... end function") nor sub-routines ("sub ... end sub"). This way one cannot define helper functions for complex scripts in order to reduce the script complexity. For one script I even had to change the algorithm from a recursive approach to an interactive one in order to cope with the limitation. VB.Net 2.0 is already a very old and nasty scripting environment, but without even functions/subs it is extremely nasty. Please support functions! 2. Missing Input Type: Although in the vMix documentation the type of inputs is defined to be "Input", this type is not available. There is only a global symbol "Input" for accessing things like Input.Output but no "Input" TYPE. In error messages vMix also tells one that the type of inputs actually internally is vMix.Scripting.Internal.Input. But even this cannot be used as a type as any "vMix." is not allowed. Please expose the type of inputs. 3. Missing Key on Inputs: One can go from numbers/names of inputs to Input-type-based objects via Input.Find(<name>) or Input.Find(<number>), but there seems to be no way to go from Input-type objects to the numbers/names. At least there is no ".Name" or ".Key" or whatever property on Input-type objects exposed. This e.g. dramatically limits the use of Input.Output and Input.Preview. Please expose at least the number and name of an input through a property. 4. Weak API Structure: the vMix API exposes an XML structure with some information on the current vMix configuration. Unfortunately, it is a rather weak exposure of the configuration only. Lots of information (e.g. whether a layer is enabled or disabled) is not exposed. This way one cannot easily react on those configuration aspects from within a script. Microsoft has announced they are deprecating the use of VbScripting in programs so this unfulfilled request is now obsolete. In it's place I suggest vMix create an API DLL that can be used to create "script" DLLS that vMix can call and use instead of the internal VBScripting language so that "scripts" for vMix could be made using Visual Studio in any language supported by Visual Studio. It should include all the API calls and objects with properties that can be queried and set that currently exist plus events that can be "subscribed" to allow the creation of more sophisticated and substantially faster scripting hopefully allowing the additional control that would allow us to provide much more comprehensive and functional scripts AND perhaps allow control integration to and from other programs like lighting controllers and sound systems. Once that is in place the existing VBScript system could be left to run for a few years while people migrate to the new system then eventually removed.
|
|
|
|
vMix Forums
»
General
»
Feature Requests
»
vMix VB.Net Scripting Environment Improvements
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