{"id":3387,"date":"2025-02-04T22:18:23","date_gmt":"2025-02-05T03:18:23","guid":{"rendered":"https:\/\/techministry.blog\/?p=3387"},"modified":"2025-02-04T22:18:23","modified_gmt":"2025-02-05T03:18:23","slug":"using-ross-dashboard-and-the-companion-satellite-api-to-create-a-virtual-touch-surface-on-a-ross-video-ultritouch","status":"publish","type":"post","link":"https:\/\/techministry.blog\/?p=3387","title":{"rendered":"Using Ross Dashboard and the Companion Satellite API to create a virtual touch surface on a Ross Video Ultritouch"},"content":{"rendered":"\n<p>My church, Fellowship Greenville, has been building a second campus now for a little over a year. It&#8217;s been an exciting process. The new auditorium will feature a control room much like what we have at our existing campus.<\/p>\n\n\n\n<p>One of the newer pieces of equipment that we are putting in is a Ross Video UltriTouch HR. It&#8217;s a 2RU touch screen computer essentially, running Ross Dashboard. (I&#8217;ve <a href=\"https:\/\/techministry.blog\/2018\/04\/18\/using-ross-dashboard-for-production-control\/\">written<\/a> <a href=\"https:\/\/techministry.blog\/2018\/04\/30\/controlling-blackmagic-videohub-from-ross-dashboard\/\">about<\/a> <a href=\"https:\/\/techministry.blog\/2020\/04\/03\/sending-osc-messages-from-ross-dashboard\/\">Ross<\/a> <a href=\"https:\/\/techministry.blog\/2018\/11\/29\/server-based-countdown-clocks-with-multiple-client-viewers-using-node-js-and-a-raspberry-pi\/\">Dashboard<\/a> before if you want to read about any of those.) Dashboard is a very flexible program that lets you program very custom interfaces to control your gear. We used it heavily until I started investing a lot of time toward Companion. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/techministryblog.wordpress.com\/wp-content\/uploads\/2025\/02\/image.png?w=1024\" alt=\"\" class=\"wp-image-3392\" \/><\/figure>\n\n\n\n<p>Once I knew we were getting one of these, I knew right away that I wanted to be able to use it as a satellite surface for Companion. Taking what I learned from my <a href=\"https:\/\/techministry.blog\/2024\/12\/20\/streamlining-electron-app-development-with-ai-building-a-virtual-stream-deck-for-bitfocus-companion-using-the-satellite-api\/\">ScreenDeck project<\/a>, and my OGScript knowledge (Ross&#8217;s flavor of Java\/JavaScript that powers the custom panels in Dashboard), I was able to make this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/techministryblog.wordpress.com\/wp-content\/uploads\/2025\/02\/img_6985.png?w=1024\" alt=\"\" class=\"wp-image-3394\" \/><\/figure>\n\n\n\n<p>It was pretty easy to get simple buttons with text on them, and get the colors of the buttons to match Companion button colors. But I wanted the buttons to <em>look<\/em> like Companion buttons, and that took some work. Dashboard doesn&#8217;t have any image editing libraries that I was aware of, so I had to get creative. The image data coming from Companion is base64 encoded 8-bit RGB. I reached out to the Ross staff on their forums and they quickly got back to me with a helpful decoder function. It was similar to the one I had already written to decode the base64 encoded text data that comes from the Companion Satellite API.<\/p>\n\n\n\n<p>Once I was able to decode it back to the binary RGB data, it was &#8220;simply&#8221; a matter of writing a function that saves these as bitmap files in a folder local to the panel and then changing the style of the button to show the new bitmap image.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/techministryblog.wordpress.com\/wp-content\/uploads\/2025\/02\/screenshot-2025-02-04-at-10.02.46e280afpm.png?w=579\" alt=\"\" class=\"wp-image-3398\" \/><\/figure>\n\n\n\n<p>And there we have it! I&#8217;m looking forward to using this on our UltriTouch as well as the TouchDrive touch screen as well.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/techministryblog.wordpress.com\/wp-content\/uploads\/2025\/02\/screenshot-2025-02-04-at-9.45.34e280afpm.png?w=1024\" alt=\"\" class=\"wp-image-3401\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/techministryblog.wordpress.com\/wp-content\/uploads\/2025\/02\/screenshot-2025-02-04-at-9.45.46e280afpm.png?w=1024\" alt=\"\" class=\"wp-image-3402\" \/><\/figure>\n\n\n\n<p>The panel supports turning the bitmaps on\/off, setting the button size, total keys, keys per row, and of course the IP\/port to Companion.  The satellite port is changeable on the Dashboard side but is currently fixed in Companion to 16622.<\/p>\n\n\n\n<p>If you&#8217;re a Ross Dashboard user and want to tinker with the panel, I&#8217;ve made it available via Github on my <a href=\"https:\/\/github.com\/josephdadams\/rossdashboardpanels\">RossDashboardPanels<\/a> repository where I have shared some other panels as well.<\/p>\n\n\n\n<p>If you ever need any custom Dashboard panels created (or Companion modules!), I do this for hire on the side to support my family. You can reach out to me via my website, <a href=\"http:\/\/www.josephadams.dev\">josephadams.dev<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My church, Fellowship Greenville, has been building a second campus now for a little over a year. It&#8217;s been an exciting process. The new auditorium will feature a control room much like what we have at our existing campus. One of the newer pieces of equipment that we are putting in is a Ross Video &hellip; <a href=\"https:\/\/techministry.blog\/?p=3387\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Using Ross Dashboard and the Companion Satellite API to create a virtual touch surface on a Ross Video Ultritouch&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[19,22,29,50,51,68],"class_list":["post-3387","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-companion","tag-dashboard","tag-javascript","tag-production","tag-programming","tag-technology"],"_links":{"self":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts\/3387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3387"}],"version-history":[{"count":0,"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts\/3387\/revisions"}],"wp:attachment":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}