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.)

21 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.

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.