Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Scripting Assistant - For vMixNew to Visual Studio Code? Get it now.
Scripting Assistant - For vMix

Scripting Assistant - For vMix

SysProfile SRL

|
17 installs
| (0) | Free
VB.NET scripting for vMix, Visual Studio style: IntelliSense from your .vmix project and .NET 2.0 classes with Quick Info, real compiler errors, quick fixes and a live preview. Unofficial extension, not affiliated with or endorsed by vMix or StudioCoast Pty Ltd.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Scripting Assistant - For vMix

A typed development environment for writing VB.NET scripts for vMix, delivered as a Visual Studio Code extension.

It reads your actual .vmix project, offers completions built from the inputs and title fields it finds there, emits the native code vMix expects, and validates your script with the same VB.NET compiler vMix itself uses.

Disclaimer: This is an unofficial community extension. It is not affiliated with, endorsed by, or supported by vMix or StudioCoast Pty Ltd. "vMix" is a registered trademark of StudioCoast Pty Ltd.

Compatible with: vMix 29

Extension Overview


Contents

  • Why a typed syntax
  • Features
  • Getting started
  • Typed syntax reference
  • Settings
  • Requirements
  • API sources
  • Feedback
  • Third-party notices
  • License

Why a typed syntax

Every vMix automation call goes through a single entry point:

API.Function("SetText", Input:="Score vMix", SelectedName:="txtHome.Text", Value:="3")

The function name, the input name and the field name are all plain strings. Nothing checks them: a typo in "SetText", a renamed input or a field that no longer exists fails silently at showtime.

This extension replaces those strings with typed members drawn from your own project:

API.Title.SetText(InputsList.Score_vMix, ObjectsList.txtHome_Text, "3")

You get completion, signature help and validation while you write, and the extension translates the call back to the native form on export. Both directions are lossless — see Import and export.


Features

Contextual IntelliSense

Completion for the full vMix API, organised by category. Suggestions are filtered by what can legally appear at that position, and valid value ranges are shown inline.

IntelliSense Demo

Each function is offered as two overloads: one with required parameters only, one with all of them.

Function Overloads

Inside the parentheses only what belongs there is suggested — for an Input parameter, the inputs of the linked project:

Parameter Completion

Title field awareness

When a project is linked, the extension opens each GT Title (.gtzip) and reads its document.xml, populating ObjectsList with the title's text and image elements. Fields are filtered by their parent input and by kind: SetText offers text elements only, SetImage offers image elements only.

ObjectsList Filtering

.NET classes

vMix scripts can use the .NET Framework 2.0 base classes. Where a type is expected (Dim x As, New, CType(x, …)) the list offers types:

.NET types

After a dot come the real members of the expression's type, with the same description Visual Studio shows as Quick Info: summary, parameters and return value. It follows the expression through calls and indexes: wc.DownloadString(url).Split(","c)(0)., doc.SelectSingleNode(…).InnerText.

.NET members with Quick Info

Signature help lists every overload and describes the parameter being typed, and hovering a member, a type or a variable shows its Quick Info:

.NET signature help

.NET Quick Info on hover

The types and signatures are read by reflection from the .NET Framework 2.0 itself, limited to the classes vMix scripts actually use. The descriptions come from the official .NET API documentation; when the .NET Framework IntelliSense files for your Windows language are installed (for example, Spanish), they are shown in that language.

Supported namespaces

Imported by vMix, usable without qualification:

  • System — String, Integer, Double, Boolean, DateTime, TimeSpan, Math, Convert, Array, Environment, Exception, Random, Uri
  • System.IO — File, Directory, Path, FileInfo, FileStream, StreamReader, StreamWriter
  • System.Net — WebClient, WebRequest, HttpWebRequest, HttpWebResponse, WebHeaderCollection, NetworkCredential
  • System.Diagnostics — Process, ProcessStartInfo
  • System.Xml — XmlDocument, XmlNode, XmlNodeList, XmlElement, XmlAttribute, XmlReader

Written qualified, since vMix scripts cannot declare Imports:

  • System.Collections.Generic — List(Of T), Dictionary(Of TKey, TValue), KeyValuePair(Of TKey, TValue)
  • System.Collections — Stack
  • System.Text — StringBuilder, Encoding, UTF8Encoding
  • System.Text.RegularExpressions — Regex, Match, MatchCollection
  • System.Net.Sockets — TcpClient, UdpClient, NetworkStream
  • System.Threading — Thread
  • System.Globalization — CultureInfo

vMix's documentation only says that scripts can use "the vast majority of the built in base classes in the .NET framework", so this list was put together from the vMix help, forum and knowledge base and from public vMix scripts. Some namespace or class may be missing or included unnecessarily, and the list is open to feedback: if a class works in your scripts and is not offered, or something listed does not work in vMix, please say so in the Q & A.

Signature help

The full signature with parameter names, types, documentation and accepted value range, shown while you type inside the parentheses.

Signature Help

Real compiler errors

vMix compiles scripts with the VB.NET compiler bundled with the .NET Framework. This extension invokes that same compiler — vbc.exe, already present on every Windows installation, nothing to install.

Your script is compiled in the background against stubs of the vMix objects, and the compiler's own errors are surfaced with their original code (BC30451), in your system language, linked to the Microsoft documentation.

Diagnostics

This catches what pattern matching cannot: undeclared variables, misspelled members, unclosed blocks, type mismatches, and the Sub/Function declarations vMix does not permit.

What is compiled is the exported native code rather than what you typed, since the typed syntax does not exist as far as vbc.exe is concerned. Compilation is debounced, each run cancels the previous one, and a typical script takes about 140 ms.

The 56 scripts of a real production project compile without a single error.

Quick fixes

Errors come with the light bulb (Ctrl+.), as in Visual Studio. The fixes are driven by the compiler's own error codes and by the linked project, so they suggest names that actually exist:

Error Fix offered
BC30451 — name not declared A similar variable or vMix object if it looks like a typo (totla → total); otherwise Generate Dim totales As Integer, with the type inferred from how the variable is used and the declaration placed where it stays in scope
BC30456 — not a member (.Textt, Console.WritLine) The closest member of that type: the vMix objects, and common .NET types read by reflection from the .NET Framework
BC30272 — argument not accepted (Bus:=, Inpt:=) The valid argument taken from the signature the compiler reports, or removal of the argument
Unknown vMix function, input or title field The closest name in the function database or the linked project; fields are limited to that title
InputsList.X / ObjectsList.X not in the project The closest existing member

Navigation and refactoring

Shortcut Action
F2 Rename a variable across the script. Only variables declared in the script can be renamed, and names that are reserved or already taken are rejected
F12 Go to the variable's declaration. On InputsList.X, open the linked project
Shift+F12 Find all references
— Occurrences of the variable under the cursor are highlighted, with assignments distinguished from reads
Ctrl+K Ctrl+D (or Shift+Alt+F) Format the document with pretty listing and block indentation, as in Visual Studio, including Case indented inside Select Case. Ctrl+K Ctrl+F formats only the selection
— Pasted code is formatted automatically (editor.formatOnPaste is on by default for vMix Script)
Ctrl+K Ctrl+S Surround With: wrap the selected lines in If, If…Else, Try…Catch, Try…Finally, For, For Each, Do…Loop Until, While, With or a '#Region

Live vMix preview

A read-only split showing the script exactly as vMix will receive it, updated as you type and following the scroll position of the source.

Live vMix preview

The highlighted lines on the right are the ones the extension translated; lines already written in native syntax pass through untouched. The preview opens automatically with each script, and a status bar button toggles it. Ctrl+K V opens it side by side, and a second command opens it below for a horizontal split.

Project integration

Link the .vmix file that vMix saves and the extension reads:

  • Inputs, with their number and title.
  • GT Title fields from each .gtzip (txtScore.Text, imgLogo.Source). Title files are located relative to the project, so a moved project folder still resolves.
  • Data sources and their tables, for the DataSource* functions.
  • Scripts, for import and export.

External changes to the project file are detected and reloaded automatically. When vMix is running, Refresh Inputs from vMix reads the live state over the HTTP API instead.

Every command is available from the status bar item, which also reports the linked project and its input count:

Commands menu

Import and export

Export converts the current .vmixscript to native VB.NET and copies it to the clipboard, ready to paste into vMix. It can also write the script straight into the linked project: only the <Scripting> section is rewritten, the rest of the file is preserved byte for byte, and a backup is taken first. Strings and comments are never modified.

Import lists the scripts stored in the linked project and converts the selected one to the typed syntax.

Import Script

The imported script opens in typed syntax, with the preview on the right showing it converted back to what vMix receives:

Imported Script

Both directions are verified against a real production project: its 56 scripts import and export back without loss. Twenty-nine return byte for byte; the remaining twenty-seven differ only in the order or spacing of named arguments, which vMix parses identically. The import converts at least one call in 55 of the 56.

Visual Studio–style editing

The editor reproduces Visual Studio 2022 behaviour for VB.NET, restricted to what vMix actually compiles: VB.NET 2.0 (Visual Basic 2005) inside a single Sub.

  • Pretty listing. Committing a line — pressing Enter, or moving to another line — reformats it: dim x as integer=5 becomes Dim x As Integer = 5, Foo( a ,b ) becomes Foo(a, b), Sleep (500) becomes Sleep(500). Named arguments stay tight, as in Visual Studio (Input:="Camera 1"). Strings and comments are never touched.
  • Contextual casing. Keywords take their canonical form; variables keep the casing of their declaration, so a variable named text is not rewritten to Text; members after API., InputsList. and ObjectsList. take their real names.
  • End constructs. Pressing Enter after If x inserts Then and End If, and likewise for For/Next, Do/Loop, While/End While, Select Case, Try/Catch, With, Using and SyncLock. Nothing is inserted when the block is already closed.
  • Smart indentation, folding and comments. Blocks indent and outdent on their own, fold (including '#Region markers), and Ctrl+K Ctrl+C comments the selection.

Native vMix syntax

Scripts written the way vMix documents them are fully supported, with completion inside the string literals:

Position Suggestions
Input.Find(", Input:=", Overlay.Find(1).In(" Input names from the project
API.Function(", .Function(" vMix functions, with description and example
SelectedName:=", .Text(" Fields of that title (txtScore.Text)
Value:=" Script names for ScriptStart, data sources and tables, accepted values

Diagnostics report inputs, title fields and functions that do not exist, arguments API.Function does not accept, and syntax newer than VB.NET 2.0 that vMix will refuse to compile — If(a, b, c), lambdas, $"...", ?., Integer?, collection initialisers, and implicit line continuation without _.

Hovering a function or input name inside a string shows its documentation.

Also included

  • vMix objects. Completion for Input.Find(...), Input.Preview, Input.Output, .Text("field"), .Function(...), .WaitForCompletion(ms), Overlay.Find(n), Console.WriteLine and Sleep(ms), as documented in the vMix VB.NET scripting guide.
  • Data sources. Names and tables from the linked project, offered in the DataSource* functions.
  • Snippets. Common patterns, plus per-input shortcuts generated from the project (cut-Camera_1, fade-Intro, gt-Score).
  • Navigation. Document outline, folding, and Ctrl+Click from InputsList.X to the linked project.
  • Localisation. Messages, IntelliSense details, snippets and templates in English, Spanish and Portuguese, following the Windows display language — the same language vbc.exe reports its errors in — or the language chosen in vmixScripting.language. Command titles in menus follow the VS Code display language.

Getting started

1. Install

Search for Scripting Assistant - For vMix in the Extensions view, or install it from the Visual Studio Marketplace.

2. Link a project

From the Command Palette (Ctrl+Shift+P), or from the status bar item:

Scripting Assistant: Open project...

Select your .vmix file. The extension loads its inputs and extracts the fields of every GT Title.

3. Write a script

Create a file with the .vmixscript extension. The first line must be a comment holding the script name, which is what identifies it inside the project:

'Lower Third In

Type API. to browse the categories, then the function and its parameters. The live preview on the right shows the native code as you go.

4. Export

From the Command Palette or the status bar item:

Scripting Assistant: Export Script (VB.NET)

The translated code is copied to the clipboard, ready to paste into vMix — or the extension can write it into the linked project for you.


Typed syntax reference

What you write:

API.Title.SetText(InputsList.MyTitle, ObjectsList.txtName_Text, "Hello")
API.Transition.Cut()
API.Transition.Fade(InputsList.Camera_1, 1000)
API.Audio.SetVolume(InputsList.Music, 80)
API.DataSources.DataSourceSelectRow("vMix", "Teams", 3)
Input.Find(InputsList.MyTitle).Text(ObjectsList.txtName_Text) = "Hi"
Sleep(1000)

What vMix receives:

API.Function("SetText", Input:="MyTitle", SelectedName:="txtName.Text", Value:="Hello")
API.Function("Cut")
API.Function("Fade", Input:="Camera 1", Duration:=1000)
API.Function("SetVolume", Input:="Music", Value:="80")
API.Function("DataSourceSelectRow", Value:="vMix,Teams,3")
Input.Find("MyTitle").Text("txtName.Text") = "Hi"
Sleep(1000)

Typed calls emit only the arguments API.Function accepts in VB.NET: Input, SelectedName, Value and Duration. Calls that cannot be represented without losing information — Mix:= or SelectedIndex:=, for instance — are left as API.Function(...) on import rather than converted approximately.

Literals are quoted for you

In API.Function, Value is a String and Duration is an Integer — a distinction that is easy to get wrong by hand. Write the literal in its natural form and the export applies the right one:

You write vMix receives Why
API.Audio.SetVolumeChannel1(InputsList.Mic, 100) Value:="100" Value is a String, so the number is quoted
API.Transition.Fade(InputsList.Intro, 1000) Duration:=1000 Duration is an Integer, so it is left bare
API.Transition.Fade(InputsList.Intro, "1000") Duration:=1000 The quotes are removed

Variables and expressions are passed through exactly as written, since their type cannot be known.


Settings

Setting Default Description
vmixScripting.projectPath — The .vmix project to read inputs, title fields, data sources and scripts from
vmixScripting.compilerDiagnostics true Validate the script with vbc.exe
vmixScripting.vbcPath auto-detected Explicit path to the .NET Framework 2.0 vbc.exe
vmixScripting.livePreviewAuto true Open the live vMix preview automatically with each script
vmixScripting.prettyListing true Reformat each line as it is committed
vmixScripting.endConstructs true Close blocks automatically on Enter
vmixScripting.enableHotReload true Reload the project when the .vmix file changes on disk
vmixScripting.enableLinter true Warn about consecutive calls on one input without Sleep, untyped API.Function calls, and loops with no exit
vmixScripting.apiUrl http://localhost:8088 vMix HTTP API endpoint, used to run scripts and refresh inputs
vmixScripting.checkFunctionUpdates true Check the published sources once a day and offer to update the function database
vmixScripting.language auto Language of the extension: auto follows the operating system; en, es or pt force one

Requirements

  • Visual Studio Code 1.80 or later
  • Windows, for the compiler diagnostics (vbc.exe ships with the .NET Framework)
  • A vMix installation with .vmix project files, for the project integration features

API sources

The function database holds 792 functions, built from:

Source Version Link
vMix Shortcut Function Reference — the official list of functions, their category and accepted parameters v29 vmix.com/help/ShortcutFunctionReference.html
The Unofficial vMix API Reference, by Nick Roberts (MIT) — parameter details, notes, examples and minimum vMix version v24–v29 github.com/phuvf/vmixapi · vmixapi.com
vMix VB.NET Scripting guide — accepted API.Function arguments and vMix objects v29 vmix.com/help29/VBNetScripting.html
vmix-function-list, by Jens Stigaard — original data and categories up to v27 github.com/jensstigaard/vmix-function-list

Staying current

Once a day the extension rebuilds the database from the first two sources and compares it with the one in use. When vMix publishes new or changed functions — or a new version of its help — it offers to update, with the list of changes available before accepting. Nothing changes without confirmation, and the updated database takes effect immediately, without restarting. Only those two public pages are downloaded and nothing is sent. The check can be run on demand with Scripting Assistant: Check for vMix function updates, or turned off with vmixScripting.checkFunctionUpdates.


Feedback

Questions and bug reports go to the Q & A tab of the Marketplace page.

Reports about specific vMix API functions are particularly useful: a wrong parameter type, a missing overload or an incorrect value range in the function database is hard to find without someone hitting it in production. When reporting one, include the call as you wrote it and what vMix did with it.


Third-party notices

vMix API function data

The vMix function data comes from the data file of The Unofficial vMix API Reference (public/data/api.json, also served at vmixapi.com), which is distributed under the MIT License:

MIT License

Copyright (c) 2025 Nick Roberts

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

.NET API documentation

Contains descriptions of .NET types and members (summary, parameters and return value) taken from .NET API reference documentation by Microsoft and the .NET Foundation, licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). Changes: only the entries for the classes offered by the extension were kept, cross-references were converted to short type names, C# keywords to their Visual Basic form, and remarks and examples were omitted.

When the Windows display language is not English and the .NET Framework IntelliSense files for that language are installed on the computer, descriptions are read from those local files; they are not included in the extension.

The .NET type and member signatures are read from the metadata of the .NET Framework 2.0.


License

MIT


Built for the vMix community. vMix is a registered trademark of StudioCoast Pty Ltd.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft