Home

V-ISE is a platform to provide automation of broadcast video systems using Windows PowerShell. Now that PowerShell 6/7 is open source and cross platform, I have to qualify this with “Currently requires MS Windows operating system” although I am in the early stages of a version that works on Mac and Linux.

PowerShell is an object-oriented automation engine and scripting language based on Microsoft .Net open source framework with an interactive command-line shell that Microsoft developed to help IT professionals configure systems and automate administrative tasks. MS has also embedded this console into VS Code which provides a cross platform development, debugging and execution platform for PowerShell scripts.
I have provided additional .Net components to extend the ability of PowerShell to automate Blackmagic Design products and other systems that use various protocols to allow sctript based automation.

V-ISE allows automation of many systems, in addition to the host operating system, including:

  • Blackmagic Design ATEM video switch’s
  • Other Blackmagic Hardware
  • CasparCG Open-source Playout Server
  • MIDI I/O
  • X-keys input
  • StreamDeck
  • OSC I/O
  • Arduino I/O (Using USB Firmata protocol)

This project is a work in progress but I’m using it on a regular basis at my church. New features are added as I need them or when I see interesting “how do I” questions on forums that I just can’t resist trying to solve.
Please consider donating if you find any of the content or applications usefull.

Donate Button with Credit Cards

For more details about the project, start at the V-ISE menu

If you haven’t heard of PowerShell I suggest you start with PowerShell

Using PowerShell should be second nature to anyone who is an IT Windows administrator. For others it may be a steep learning curve, but the alternative is probably just as hard (learning Python, Node.JS or LUA etc.)

30 thoughts on “Home”

  1. Hi Ian

    I have a streamdeck atem prod studio 4k and a mac

    Ive downloaded powershell but now i cannot work out what to donto get it working

    Would you have. Any suggestion as to where to look …. would really appreciate it

    Andrew

  2. hi! I m really happy to know that! It’s incrindible thing transform the old grasvalley into a new stuff for atem, let me know more about? Do you have a list of compatible spec using arduino?

  3. Hello Ian,
    First of all, thanks for the work and time you put into this project, I was able to get my ATEM up and running over midi. Question for you…Do you have any experience with ARCnet ?
    I have an really nice ForA control surface that runs on ARCnet (but the head end is long gone) curious if you knew of a way to get my ATEM to talk with my ForA surface… Thanks again for your time.

    1. Thanks for the feedback. I doubt you would find an ARCnet interface to anything these days. Personally I would rip out the internal CPU and figure out the switch/lamp circuit and interface an Arduino or Raspberry Pi in there. Big job though.

  4. Hello Ian,

    I’m using your Powershell examples to control my Atem. Everything is working great.
    But I also want to use a T-bar.
    Do you have a Poweshell example for using a T-bar with the Atem?

    With kind regard,
    Jan Hein

  5. Hi Ian,

    Thanks for your great work regarding the scripting engine. I’m currently a justmacros user, but as support is lacking for that at the moment it is good to know the alternatives. I just want to mention a broken link to you: the download link for your EDL from ATEM Cuts file creator tool is exactly the same and lands on the exact same spot as the videohub configuration document link.

  6. Tanks and just a question about using xtouch mini with Atem Mini. Is it possibile assign the macros, written on Atem Mini, to the xTouch Mini Buttons ?

    Thank yoi

    1. Yes, that is easy. The Json file can be updated to change a button command to $atem.RunMacro(0)
      You might also want to remove the button from the input monitoring section of the json file. See the documentation for button numbers and other commands.

  7. Hello, Ian.
    First of all I would like to congratulate you for the excellent work you do.
    I would like to know if the Linux version includes the RGB control option, through the Behringer CMD-DV1.
    Thank you very much for your attention.

  8. Hello Ian, great fan of your work. Do you have any news on your midi controller for Blackmagic ATEM Camera control?

  9. I would ask you for help.
    After using your Atem Studio HD control code (it’s really great),
    I can’t adjust the code to control the volume via turn the knobs.
    For now, it is set to turn on and off the sound coming through the embedded SDI cable,
    the desire is to use volume control as well.
    This is the code I use, can you add what is missing?

    {
    “keys”: [
    {
    “Mode”: “Script”,
    “KeyID”: 89,
    “Command”: ” “,
    “Script”: ” $me[0].Program=5″,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 1”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 90,
    “Command”: ” “,
    “Script”: ” $me[0].Program=6″,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 2”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 40,
    “Command”: ” “,
    “Script”: ” $me[0].Program=7″,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 3”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 41,
    “Command”: ” “,
    “Script”: ” $me[0].Program=8″,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 4”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 42,
    “Command”: ” “,
    “Script”: “$me[0].Program=3”,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 5”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 43,
    “Command”: ” “,
    “Script”: “$me[0].Program=4”,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 6”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 44,
    “Command”: ” “,
    “Script”: “$me[0].Program=3010”,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 7”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 45,
    “Command”: ” “,
    “Script”: “$me[0].Program=3020”,
    “Caption”: “Auto Transition”,
    “Description”: “Cut 8”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 85,
    “Command”: ” “,
    “Script”: “$me[0].cut()”,
    “Caption”: “Cut”,
    “Description”: “Cut”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 84,
    “Command”: ” “,
    “Script”: “$me[0].AutoTransition()”,
    “Caption”: “Autotransition”,
    “Description”: “Auto Transition”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 87,
    “Command”: ” “,
    “Script”: “$me[0].Preview=5”,
    “Caption”: “Preview 5”,
    “Description”: “Set Preview bus to input 5”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 88,
    “Command”: ” “,
    “Script”: “$me[0].Preview=6”,
    “Caption”: “Preview 6”,
    “Description”: “Set Preview bus to input 6”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 91,
    “Command”: ” “,
    “Script”: “$me[0].Preview=7”,
    “Caption”: “Preview 7”,
    “Description”: “Set Preview bus to input 7”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 92,
    “Command”: ” “,
    “Script”: “$me[0].Preview=8”,
    “Caption”: “Preview 8”,
    “Description”: “Set Preview bus to input 8”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 86,
    “Command”: ” “,
    “Script”: “$me[0].Preview=3”,
    “Caption”: “Preview 3”,
    “Description”: “Set Preview bus to input 3”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 93,
    “Command”: ” “,
    “Script”: “$me[0].Preview=4”,
    “Caption”: “Preview 4”,
    “Description”: “Set Preview bus to input 4”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 94,
    “Command”: ” “,
    “Script”: “$me[0].Preview=3020”,
    “Caption”: “Preview 1”,
    “Description”: “Set Preview bus to input 1”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 95,
    “Command”: ” “,
    “Script”: “$me[0].Preview=3010”,
    “Caption”: “Preview 2”,
    “Description”: “Set Preview bus to input 2”
    },

    {
    “Mode”: “Script”,
    “KeyID”: 32,
    “Command”: ” “,
    “Script”: “toggleAudio 5 48”,
    “Caption”: “Audio 5”,
    “Description”: “Audio 5”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 33,
    “Command”: ” “,
    “Script”: “toggleAudio 6 49”,
    “Caption”: “Audio 6”,
    “Description”: “Audio 6”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 34,
    “Command”: ” “,
    “Script”: “toggleAudio 7 50”,
    “Caption”: “Audio 7”,
    “Description”: “Audio 7”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 35,
    “Command”: ” “,
    “Script”: “toggleAudio 8 51”,
    “Caption”: “Audio 8”,
    “Description”: “Audio 8”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 36,
    “Command”: ” “,
    “Script”: “toggleAudio 1 52”,
    “Caption”: “Audio 1”,
    “Description”: “Audio 1”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 37,
    “Command”: ” “,
    “Script”: “toggleAudio 2 53”,
    “Caption”: “Audio 2”,
    “Description”: “Audio 2”
    },
    {
    “Mode”: “Script”,
    “KeyID”: 38,
    “Command”: ” “,
    “Script”: “toggleAudio 3 54”,
    “Caption”: “Audio 3”,
    “Description”: “Audio 3”
    }
    ,
    {
    “Mode”: “Script”,
    “KeyID”: 39,
    “Command”: ” “,
    “Script”: “toggleAudio 4 55”,
    “Caption”: “Audio 4”,
    “Description”: “Audio 4”
    }
    ],

    “Mapping”: [
    {
    “Key”: 89,
    “Input”: 5
    },
    {
    “Key”: 90,
    “Input”: 6
    },
    {
    “Key”: 40,
    “Input”: 7
    },
    {
    “Key”: 41,
    “Input”: 8
    },
    {
    “Key”: 42,
    “Input”: 1
    },
    {
    “Key”: 43,
    “Input”: 2
    },
    {
    “Key”: 44,
    “Input”: 3
    },
    {
    “Key”: 45,
    “Input”: 4
    },
    {
    “Key”: 87,
    “Input”: 5
    },
    {
    “Key”: 88,
    “Input”: 6
    },
    {
    “Key”: 91,
    “Input”: 7
    },
    {
    “Key”: 92,
    “Input”: 8
    },
    {
    “Key”: 86,
    “Input”: 1
    },
    {
    “Key”: 93,
    “Input”: 2
    },
    {
    “Key”: 94,
    “Input”: 3
    },
    {
    “Key”: 95,
    “Input”: 4
    }
    ],
    “EncoderVolume”: [
    {
    “Encoder”: 20,
    “Input”: 5
    },
    {
    “Key”: 21,
    “Input”: 6
    },
    {
    “Key”: 22,
    “Input”: 7
    },
    {
    “Key”: 23,
    “Input”: 8
    },
    {
    “Key”: 16,
    “Input”: 1
    },
    {
    “Key”: 17,
    “Input”: 2
    },
    {
    “Key”: 18,
    “Input”: 3
    },
    {
    “Key”: 19,
    “Input”: 4
    }
    ]
    }

    Thank you

    1. Hi, that looks like an older version of the program. Audio only worked on some ATEM’s like the TVS and Production Studio’s. New units like the Mini and Pro4k use Fairlight Audio which is different. I updated the program to support Fairlight audio and also enable the encoders to be used for other things as well as audio (like changing media pool slot or position picture in picture window). This required a change to the format of the Json file.
      I just found a bug in the volume level setting which I’ll fix tomorrow and release an update that works with standard or Fairlight audio ATEMs.

  10. Hi Ian, great job you are doing… My question is if you have a solution to use an old tricaster surface control (LiveControl LC-11/USB port) with Atem Television
    Thank you very much for your attention

  11. Hi,

    I am really an armature in Code and stuff, Can you please help me in configuring the Behringer Xtouch to the Atem Software control,
    I have tried but not understand how to do it,
    I would really appreciate you help on this,

    Thank you

  12. Hi Ian,
    Thanks for all the effort you’ve put into the Atem macro scripts.
    I’m using them to help with our church service streaming, but I’ve had a couple of problems that I was wondering if you or anybody else has seen before:
    I get occasional issues where my Atem mini doesn’t respond to the output of your macro script. It’s being controlled over a wired network, so doesn’t seem to be a network issue.

    I was going to look at atemmacro.exe to see if I get better performance from that, but I get an error when I try to run that – “method not found system.string switcherlib.switcher.get_macrostatus”. Tried adding the path to environment variables in case it couldn’t find the DLL, but didn’t seem to improve things.

    All running on Win8.1.
    I’d be very grateful for any assistance with this (while accepting that I’m not due any form of support!)

    1. Thanks for the feedback. I have tested the switcherlib for more then a month with other ATEM models, but only for a few days with the Mini.
      I don’t use macros all that much and only ever tested with simple 2 or 3 step macros (I use the equivalent PowerShell commands natively in functions which replaces the need for macros) so I’ll do a bit more testing.
      atemmacro.exe uses an older version of switcherlib that is not compatible with the mini. You can just copy the atemmacro.exe (without the switcherlib.dll) into you directory that has working PowerShell and it might work.

  13. Hello,

    Are there any bits of code in this that could get the xKey 124 T-bar to automate this in DaVinci Resolve application:

    https://drive.google.com/file/d/1W7xLKw4FsEekt6M_v2bCRBTV4Pu5a21Z/view?usp=sharing

    Resolve’s wipe function places two images over each other in the exact same spot in the GUI. You can then “switch” between the two images just like you would “switch” between two live video feeds in a control room. Just inside the app. This is also output through video hardware to your broadcast monitor.

    When you initiate the wipe function, a visible line appears, splitting the two images in half. You can then click, hold, and drag a mouse or pen tablet, and drag either way to reveal more or less of each image. Effectively cropping the image your are dragging over and revealing more of the image you are dragging from.

    If you have BM’s $30k Black Magic Advanced panel T-bar, you can use it’s T-bar to wipe between the images. I’m assuming BM’s DaVinci Resolve uses the same code for their Advanced Panel T-bar, as BM’s ATEM uses for the a T-bar on an external controller. So technically Resolve should be “listening” for a T-bar

    The physical wiping of the line itself could be a “left mouse button down and hold” but assigned to the T-bar instead of the mouse.

    Thanks!

    1. Hi,
      I started adding the code for T-Bar but didn’t get it tested as I don’t have a unit. I have not looked at any automation of Resolve although I understand it supports keyboard shortcuts but that is a very clunky way of automating, especially for something like a fader value. I don’t know if there is an API that would allow similar integration that BMD do with their hardware panels?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.