Streamlining Exhibit Installs with Launchpad—An Open Source Tool by Bluecadet

Benjamin Bojko
Bluecadet
Published in
5 min readSep 14, 2023

As a creative technologist I get a lot of joy out of building visual experiences for physical spaces. Many of Bluecadet’s projects run in highly trafficked locations for years, and if you’ve ever worked on a long-term media installation, you’re probably aware of the challenges involved in making them bulletproof. As exhibits scale in size and complexity, the process of installing can become a delicate but repetitive chore. To streamline and standardize this process, we developed Launchpad: an open-source tool that facilitates the deployment and management of exhibit apps and content.

Why Build Our Own Tool?

Many of our projects are content-heavy, native apps with long runtimes distributed across many PCs. Our experiences need to be reliable, consistent across exhibits and support many types of frameworks like Unity, Cinder or Web. If things go wrong — especially on a large canvas — they need to fail gracefully and recover quickly. We also often pull content from a wide variety of sources and need to cache that content offline for quick and reliable access.

Typically we need to tick these boxes during our installs:

  • Configure Windows OS for exhibit environments
  • Run a watchdog to restart processes on exit
  • Prevent escape from our apps into the OS
  • Regularly sync remote content locally

There are plenty of great tools for some of these tasks, like Helios Interactive’s Phoenix, Stimulant’s AM/PM, Local Projects’ ofxApp, Windows Task Manager, Ansible and PM2. But none of them provide all the specific settings for PC bootstrapping, monitoring capabilities, content pipelines or extensibility that we needed.

Standardizing our Process

Before Launchpad, we had long install checklists for each PC that required manual configuration and testing. However, this was prone to errors and time-consuming to manage. During a project for the Gerald R Ford Presidential Library, we found ourselves spending three days in an AV closet installing dozens of programs one-by-one, manually.

Our office for three days while installing dozens of programs for the Gerald Ford Presidential Library.
Install punch list for a few dozen PCs at a single site. Each step had to be configured and validated manually.

For a long time, our watchdog of choice was Phoenix, which is a robust tool but hard to manage and sequence multiple concurrent apps with. For content, we either wrote custom Python scripts or used rysnc and ssh, which was either very specific and time consuming or limited our choice of backends and infrastructure.

echo "Downloading media..." 
rsync -rlvz --size-only --ipv4 --progress -e 'ssh -p 2222' --delete --exclude='*.csv' $ENV.$SITE@appserver.$ENV.$SITE.drush.in:code/wp-content/uploads/*/*/ ./media

echo "Downloading data..."
rsync -rlvz --size-only --ipv4 --progress -e 'ssh -p 2222' --delete --include='*.csv' --exclude='*' $ENV.$SITE@appserver.$ENV.$SITE.drush.in:code/wp-content/uploads/*/*/ ./data

Automating at Scale

Our next big project was for The Henry Ford Museum — coincidentally another Michigan-based Ford institution — with one of the more complex installations running on 20 PCs.

Calibrating one of the 20 depth cameras at The Henry Ford Museum

Tired of spending days poring over punch lists, we knew we needed a better solution. That’s why we set out to build a suite of scripts that would automated every step of the process—an early version of Launchpad.

Configuring a fresh Windows PC with Launchpad

This initial version was built as a plugin for AM/PM. While it worked wonders for our first project at The Henry Ford, we quickly realized that it lacked the necessary extension options and control over launch sequences and app states. As we geared up for our next challenge with over 20 individual programs at the MIT Museum, we knew we had to up our game.

Deploying new builds across 20 PCs at The Henry Ford Museum using an old version of Launchpad

Standalone Package

The next version of Launchpad was built from the ground up as a standalone process or a Node dependency. It combined the best parts of our previous AM/PM plugin and was designed to be easily extended and modular. We swapped in PM2 as our watchdog of choice, which allowed us to run it as a subprocess to manage multiple apps at the same time, get better state readings and add add features like window management.

Our final Launchpad structure.

But that’s not all — we revised our content pipeline to support a range of CMS platforms, improve caching and gracefully rollback content in emergencies. We also added text and image processing capabilities, making it easy to resize, filter and crop images or convert CMS-specific syntax to HTML or any other format. Additionally, Launchpad now has streamlined log management and provides hooks to run commands at various stages of your app lifecycle.

Why You Should Use Launchpad

Syncing content and launching apps with Launchpad

Launchpad has significantly simplified our process of installing complex interactive programs across museums, institutions and other large venues. It takes the guesswork out of configuration and reduces days of work down to minutes for us. After years of testing it on permanent exhibit installs with across many types of backends and frameworks, it’s become a crucial part of our exhibit operations and we’re excited to open source it.

What Launchpad Can Do

  • Run multiple apps in parallel, with control over launch sequence and window order
  • Fail gracefully and restart apps when they exit
  • Automate PC configuration for exhibit environments, e.g. disable consumer features like edge swipes, notifications, updates and prevent PCs from going to sleep
  • Sync content from APIs like Sanity, Strapi, Contentful, Airtable, and generic JSON (Wordpress, Drupal, REST APIs)
  • Cache content locally in case of network outage, with graceful rollback error handling
  • Support for text transformations like markdown to HTML, image processing, resizing, filtering, and cropping

Getting Launchpad

Launchpad is available on NPM and GitHub:

npm i @bluecadet/launchpad

Check out our documentation to get started and learn more.

We’ve deployed many projects with Launchpad and are actively maintaining it. If you have questions or suggestions, submit an issue and we’ll look into it.

--

--

Benjamin Bojko
Bluecadet

Creative Tech Director, ex-Bluecadet/Potion/Big Spaceship