Faulty Blackmagic Mini Converter repaired

Today’s repair job was required so that our church service Internet stream could have audio.

The Audio to SDI mini converter wasn’t producing any output. Tell tail sign that something was wrong was how loose the input and output bnc connectors were.

Soldering iron to the rescue (luckily I had it in my car this week), but only after finding something that could undo the Torx screws that hold the printed circuit board inside the case.

All of the solder joints on the 2 outside BNC were dry and cracked. The problem trying to solder them back is the amount of thermal mass, not only in the body of the connectors but the entire ground plane of the PCB is directly connected the ground pins of the BNC’s, means that you really need a 100-watt iron to get good solder flowing.

I had also never opened one of the mini converters and was surprised to see how densely packed full of electronics it is.

Repairing a faulty Hyperdeck

I have repaired lots of video equipment over the last couple of years so I thought I would start a “repair” category.

This one was initially reported a faulty HDMI but it was really a flickering screen on the Hyperdeck. Almost blinking off and on as if it couldn’t lock onto the input.

Turned out to be the thin ribbon cable from the front control PCB to the LCD screen. This is held in place by a very small plastic clip that is not joined to the connector (unlike others that slide in and out or pivot up/down to lock the cable in place).

This piece of equipment lives in a road case and gets transported every week so has had a hard life. Hopefuly it keeps going a bit longer.

Adjust ATEM USK Chroma Key settings with Midi Device

I found it a bit frustrating trying to set up the chroma key using the Blackmagic Design ATEM Software panel. Trying to change the values using the mouse while looking at the preview monitor was not very efficient.

So I used a MIDI device that has some rotary encoders and PowerShell to make the adjustments. See the video below for a demo

Using this almost made it fun playing with the options.

The Behringer CMD DC-1 seems to be on special at https://www.bhphotovideo.com/c/search?Ntt=cmd+dc-1

This was automated using Windows PowerShell but could have just as easily been done with JustMacros.

You can find example code for this here… https://gist.github.com/imorrish/5614d4369ca111f7096aff31d27e4d98

Automating Characterworks from PowerShell

I saw a question on the BMD forum asking about the possibility of triggering an action in Characterworks. A quick check of the Characterworks online help showed that the CW Remote Control Server listens to requests on port 5201 and accepts HTTP POST requests containing JSON-encoded commands.

It would be easy to define a keyboard shortcut or X-Keys button that initiated the Characterworks action and switched the input, or enabled a key, on the Blackmagic ATEM using a PowerShell script.

Below is a simple example PowerShell script showing how to send a command to Characterworks:

$url = "http://localhost:5201/"
$command = '{ "action" : "play_motions", "motions" : [ "Motion 1" ], "channel" : "live1" }'

$bytes = [System.Text.Encoding]::ASCII.GetBytes($command)
$web = [System.Net.WebRequest]::Create($url)
$web.Method = "POST"
$web.ContentLength = $bytes.Length
$web.ContentType = "application/x-www-form-urlencoded"
$stream = $web.GetRequestStream()

$reader = New-Object System.IO.Streamreader -ArgumentList $web.GetResponse().GetResponseStream()

It would be easy to wrap this in a function to take the motions and channel values as parameters and return the response.

Blackmagic Design TVS HD Flying Key animations

The Blackmagic Design Television Studio HD has added flying key features to the upstream key, something the original TVS did not support.

I created a demo video showing this feature in action using the software panel to control it.

A more seamless experience can achieved using PowerShell to automate the “key fly to” commands.

Example script (assumes you have already used SwitcherLib to connect to the TVS HD.

$mp1.MediaStill = 2
$key1.Fly = 1
$key1.OnAir = 1
$key1.FlyRunToKeyFrame = [SwitcherLib.FlyKeyFrameDestination]::FlyKeyFrameFull
start-sleep 1
start-sleep 1
start-sleep 1
start-sleep 1
$key1.OnAir = 0
$key1.Fly = 0

You can see from the video below how well the animation flows.

Blackmagic Television Studio HD DVE features

I’m loving having DVE capability in the new ATEM TVS HD. It is not as rich as the ATEM 1 and 2 M/E’s but is a big improvement over the old TVS.

Although only a 2D DVE, it provides most of the Key and transition features of the bigger ATEM’s. By far the most useful feature I think is Picture-In-Picture and I was especially surprised to see the TVS HD support flying key.

I have been adding more DVE automation functionality to my PowerShell ATEM Switcher library and will have an update version that supports all TVS HD feature soon (although it will require the 7.0 firmware in all other ATEM’s you might want to automate from PowerShell). A beta 6.9 version of the switcherlib.dll is available from the downloads folder.

Some tips below for people who are new to the DVE capabilities found in the TVS HD.

The position values are defined from the center of the window. Maximum to have the center point hard left or right values are

x:-16.00 to 16.00

y:-9.00 to 9.00

The size of the window

X:0.00 to 1.00

So, if you wanted a ¼ of full screen size (1/2 width and height), the size would be 0.5 (aspect ratio is maintained by default)

And for top left, x= -8 & y= 4.5

In PowerShell I just define these values in an array.


= @(-8,4.5,.5,.5)

= @(8,4.5,.5,.5)

= @(8,-4.5,.5,.5)

= @(-8,-4.5,.5,.5)

Then I have a function you pass the array to




$script:usk1.FlyPositionX = $window[0]

$script:usk1.FlyPositionY = $window[1]

$script:usk1.FlySizeX = $window[2]

$script:usk1.FlySizeY = $window[3]


So to set the IP to top left

setPIPWindow $topLeft

You can also set the border to be a combination of pixels that are inside or outside the DVE window size

The Key Frame option lets you transition the PIP window to a new location.

Unfortunately, you can’t load position and size values directly into the A and B positions. You can only set the current values to one of these 2 so you would have to have the key off air to load up initial values. Once the key is on air you are limited to only the 2 presets, full screen, off screen in one of the 8 directions.

In PowerShell you can save the current position and size with



You can initiate the Fly with




Where the value after :: (which will be shown using intellisense) can be:

  • FlyKeyFrameA
  • FlyKeyFrameB
  • FlyKeyFrameFull
  • FlyKeyFrameInfinityTopLeft
  • FlyKeyFrameInfinityBottomRight
  • FlyKeyFrameInfinityCenter
  • FlyKeyFrameInfinityCenterOfKey
Squeeze the current program item to reveal the preview item.

The DVE transition can be set with PowerShell

$me1.TransitionStyle =

$me1.DVETransitionStyle =

Where the values after the :: can be…

  • SqueezeTopLeft
  • SqueesTop
  • SqueezeTopRight
  • Squeez bottomRight
  • PushTopLeft
  • PushBottomRight

Note: you can’t enable the DVE transition style if the USK key type is set to DVE and is on air.

There is also an option in the DVE transition to have a source that will fly across the screen as part of the transition to preview (Graphic Wipe). This should be a source that has the image you want in the center and transparent background.

The width should be less than 25% of the video standard width with the majority of the image have an alpha transparency (or black background).

For 720p the centre 320 horizontal pixels will be used for vertical strip

I’m yet to implement this in PowerShell.

Xkeys XKR-32 for Blackmagic ATEM TVS operation

I have posted some sample Windows PowerShell scripts for controlling the Blackmagic Design ATEM Television Studio (TVS) on GitHub.

The main thing I did with this sample is define the actions for each key in a JSON file. You can store any combination of PowerShell commands for a button or call a function.

The JSON file is loaded into the script and a hash table is created which holds just the key ID and string to evaluate as code.

function LoadXkeys(){
$xkFile = ConvertFrom-Json (get-content "documents\WindowsPowerShell\xkr32.json" -raw)
$Global:xkCommands = @{}
foreach($key in $xkFile.keys){

This means you can edit the JSON file and just re-run the LoadXKeys function to make changes on the fly.

I’ll probably change the format of the JSON file but for now it looks like this:

“keys”: [
“Type”: “Script”,
“KeyID”: 0,
“Command”: ” “,
“Script”: “$ActiveME.Program=1”,
“Caption”: “Prog 1”,
“Description”: “CUT”
“Type”: “Script”,
“KeyID”: 1,
“Command”: ” “,
“Script”: “if($Global:KeypadMode -eq \”\”){$ActiveME.Preview=1} else {keypad 1}”,
“Caption”: “Prev 1”,
“Description”: “ME1 Auto Transition”

You can find the full code here https://gist.github.com/imorrish/f8a2b6aba612e310169dc7b4da0ac9d9

The bottom row of buttons function as preview selection by default but if you select Macro or Color then the bottom row allows selecting a macro from 1-10 or one of 10 predefined colors (ROYGBIV, White, Grey, Black in that order).

If MP1 or MP2 is already on preview, selecting it again then lets you pick the slot from the media pool to load into the currently previewed media player.

I did get a few ideas from the new TVS HD panel so might make an expanded version of this with only preview selection and making 1-20 for data input.