Last year I got a Flanders Scientific DM241, and was thrilled to find many of its functions could be controlled remotely. While often times the monitor is close as hand it could also be across the studio so being able to control things like false color from your computer is handy. Plus, it's fun to poke around the protocols, but more on that in a minute.

The easiest is by connecting the monitor to ethernet and using the IP Remote Utility. The app gives you control over all of the keys on the monitor and even lets you stream back the scopes. There's also a Stream Deck profile, which is handy. However it just uses keyboard shortcuts meaning you can't use it if another application is in the foreground.

The Stream Deck Plugin

The plugin is configured with the IP address of the monitor, and can even connect to multiple monitors. Stream Deck buttons can be assigned to any of the four monitor inputs or the six function keys. Pressing a button on the Stream Deck is just like walking over to the monitor and pressing a button there.

The plugin is entirely stand-alone. It connects directly to the monitor over the network, without the need for the IP Remote Utility to be installed nor running. The only requirement is that your monitor be reachable over the network.

The GPI Controller enclosure

The GPI Controller

Next to the LAN port is another RJ-45 labeled GPI and is the second way to control the monitor. The pins of the port are used as normally open switches; connect a pin to ground to control the assigned function. Aside from the GPI Keypad Lockout there don't seem to be many options for making use of the additional 7 functions the GPI has.

The GPI Controller1 is a small box, USB-C on one side and RJ-45 on the other, that does just that. The controller is powered by an RP2040 microcontroller and custom firmware providing a USB bridge to the GPI. The enclosure is 3D printed and everything is hand assembled.

The Stream Deck plugin connects to the GPI controller automatically and provides three different key options:

  1. Latching button
  2. Momentary button
  3. Multi-function button

The latching button is the most common and simply toggles a function on and off, e.g. false color or a tally light.

The momentary button is useful for stateless functions like powering the monitor on.

Finally the multi-function button allows you to combine multiple latching functions. A great use for this is creating a yellow tally, which is the combination of red and green.


The Stream Deck plugin is going to be submitted to the store and will be available for as a free download, although supporting development through Ko-Fi is greatly appreciated.

The design of the GPI controller is just about finished, so I'm getting ready to do a small production batch. I'm hoping to gauge interest early so I know how many to make.

If you'd like to be one of the first to try them out please reach out.

  1. To see the controller in action check out the little promo I made for it.

Digitial techs spend a lot of time organizing files; it's our primary job. We create folders for every shot, use token when processing to organize files automatically, and then trash files into a single folder. Scrolling through thousands of files to find a missing frame isn't exactly fun.

To help solve this I've written a script that adds some order to your session's trash. Running the script trashes the selected variants in an orderly way, think of it as using the Image Folder Name token. Files are sorted into matching folders in the session trash, matching your capture folder.

Need to find an image? No more hunting around, just browse to the shot folder and you're off to the races.

Details and Caveats

When trashing images all in the same favorite the script is optimized to do everything as quickly as possible and takes advantage of batch operations. If trashing from an album where you can see images from multiple folders the script has an alternate mode that isn't as optimized, but is still plenty fast.

The script only mirrors the image folder name, not the entire hierarchy in the session. This might be something I'll add in the future if there's a need for it. If you use more complex session structures let me know.

Capture One famously doesn't handle subfolders well, and the Trash is no exception. When using the script you'll have to browse to the subfolders manually.


If you find yourself wishing for a more organized Trash Experience go download the script and take a look at the rest of the collection. If you find what I do helpful consider supporting my work through either a one-time donation or by becoming a member.


Guidelines got its first update of the year, and its biggest update to date, yesterday. Major parts of the user interface were updated as well as major changes to what you can do with frame lines.

The update is a available in-app and can be downloaded from the project page.


Your frame lines can now do more than just frame up, they can help you compose your shot with the addition of grids. Grids can be created in two ways:

  1. Pixel grids, creating grid lines at the specified pixel spacing
  2. Divided, creating evenly spaced grid lines

The grid lines follow the existing frame line styling and can be linked to create a unified grid.

Background Fill

Both frame lines, and the overlay itself, can be given background colors allowing you to add visual emphasis to the parts of your image that are most important. With nested frame lines complex overlays can be created to help guide your shot.

Updated Interface

The frame line controls have been moved out of a popover and into a top-level tab, giving persistent access to key adjustments. With the introduction of opacity throughout the overlay the preview has also been given a Very Fancy checkerboard pattern found in graphics editors the world over.

One of the primary jobs of a DT, especially on a high volume set, is managing images as they come in. This usually relies on setting the capture folder and some some basic tokens for setting the name. If the tech gets behind (or the photographer gets ahead) it’s easy to have images mis-filed requiring renaming, which, depending on the naming convention, can be complicated or error prone.

Current capture naming is just file naming, and thus once a name is set that’s what it is, no matter where that file is (or is supposed to be). Take the venerable <Destination Folder Name> token, which adds the name of the folder to the filename, one the most common naming schemes out there. However, when moving a file the name is no longer correct. Renaming is easy, but now you have to contend with file counters, other tokens, or plate info that’s been manually added.

However, if the filename wasn't a fixed piece of information and is instead based on metadata the name would always be correct.


Using tokens not just for initial naming and renaming would mean the filename would always match the state of the metadata. So for instance, the naming scheme <Image Folder Name>_<Capture Counter> would always match the current image folder and global capture counter. Renaming a file would be as simple as moving it. Remembering to rename and set the counter would no longer be necessary.

Live tokens would also make it easy to remap metadata values for a given token. For instance mapping color tags used for tagging shot types (hero, grey card, plate) could be done automatically, and importantly, consistently. Similarly it’s common to add info about a plate to the filename (LT, DK, glow, empty set), which is really metadata that is traditionally captured as part of the filename.

In some cases the filename needs to hold a lot of information: brand, SKU, color, product name, select state, plate type, etc. Usually much of this is predefined and shouldn't be changed. Storing that information as metadata and rendering it with tokens would make it harder to accidentally change. For a theoretical tethered capture application perhaps the "filename" text field would actually be a tiny single-field metadata editor for only the data needed.

Fixing bad naming would be trivial. Perhaps on day one the client didn't care much about the naming, but on day two they've found a new appreciation for the art (of file naming, that is). For large shoots batch renaming can be a surprisingly slow process, and again complex if needing to keep some parts of the name in tact. With everything in metadata renaming the shoot is as simple as reordering the tokens.

A final benefit is the option of having multiple names for an image. The DAM can have one name, whereas the designers can have a shorter one, all tied together by an image ID. Or in the case of fixing naming, keeping the original as a reference while going forward with the new scheme.


One of the most important pieces of information is the most easily changed: the file counter. Some workflows want a single continuous counter for the whole shoot, others by shot. What happens if you import additional images from card or rename images? Current software treats all of these counters as separate, much to the chagrin of many a digital tech.

Computers, and I believe this to be an uncontroversial statement, are very good at counting. There isn't a reason for us humans to have to keep track of so many different numbers. There are a number of different counter tokens I believe would be useful.

  • A "Global Capture Counter". This one simply counts up, and could be thought of as a unique ID for an image.
  • A "Sorted Counter". Pick your sort type, typically date, and it gives an index into that list. Importing images would allow them to be easily sorted correctly.
  • A "Sorted Folder Counter". The same as above, but on a per-folder level. Adding or removing images wouldn't require renaming.

Wrapping Up

Given the importance of correctly named images I believe we need to change how we treat them. In much the same way as "ImportantDoc-V1", "ImportantDoc-Final", "ImportantDoc-Final-Final" isn't the best backup method, relying solely on the filename, without leveraging the abundance of metadata available, isn't the best way to store critical information about the contents of a file.

Screening the Next Version of ScreeningRoom

13 Nov 2022 ∞

ScreeningRoom started off as basically a "what if" project, and has grown to be one of my most popular apps. It's gained a number of new features over a handful of releases but has remained, at the core, the same app that was started a little over a year ago. I'm happy with that core, creating a preview of to show monitors you might not be able to see, and don't see any reason to change it.

However, ScreeningRoom as it stands now has some, let's say, discoverability issues. The application lives only in the Menu Bar, which has lead to some confusion about where the app1 is and whether it's running. Depending on the display configuration dragging the popover to create a window can be nearly impossible and the context menu only UI leaves much to be desired.

Bug Fixes and Improvements

I've been working on a completely new version of ScreeningRoom that should address the outstanding UI issues. For starters it will be a normal application that, when launched, will show a normal window. Controls have been placed on screen so they're easy to find. Rearranging the interface like this also comes with some new features.

The control bar at the bottom of the window has options to quickly toggle streaming for all visible displays, speaking of which, displays can now be selectively hidden from the preview. This allows you to create windows for a single display as well as any combination of displays.

The rendering engine has also been given some upgrades, which are mostly invisible. One of the only areas you'll see the change is in the cursor crosshairs, which now render in the correct place2. The crosshair also renders across all displays, instead of just the display the mouse is in, which will should make the cursor easier to find.

The update is still a work in progress, but I'm hoping to have it ready by the end of the year.

  1. This became readily apparent with the launch of the new MacBook Pros, which had less space for Menu items. In some cases ScreeningRoom wouldn't even be visible.

  2. Easily one of the oldest bugs.

I'm pleased to annount two big updates to the Capture One Stream Deck plugin. The first is a new update and the second will make updates easier in the future.

Announcement the First

A new version of the plugin, 2022.6, is out and ready for download! This update fixes camera compatibility issues that prevented setting the shutter speed, aperture, or ISO. It also adds three new actions to toggle the visibility of the overlay, grids, and guides1.

Announcement the Second

After what has probably been too long I've finally submitted the plugin for inclusion in the plugin store. It hasn't been approved yet, but once it's in the store you'll be able to update automatically instead of needing to reinstall. Watch this space for an announcement when its available.

  1. Unfortunately guides are Capture One Studio only, a limitation of Capture One's AppleScript support.

The photographer I’ve been working with the last few days has really liked the idea of getting a 9 up grid of images to page through, and obviously as that’s something that takes more than ~7 seconds to do I wrote a little script to do it for me. I think it pairs particularly well with ⌃9.

The script lives on GitHub with the rest of my Capture One scrips.

Building a Finder Extension for Capture One

29 Jun 2022 ∞

Way back with macOS Yosemite Apple introduced an API meant for cloud sync applications like Dropbox to be able to add badges to files and folders, and after finding an application called GitFinder which leverages theses APIs to do something other than sync it got me thinking about building an extension that adds common digital tech tasks directly into the Finder.

A very simple version would just add menu items for setting the capture folder and adding folders to favorites, but the Fun Version would also sync those states as badges. A couple days a I decided to really look at the extension API to see if I could build such a thing.

The short answer is "yes".

As part of myriad other projects I've built myself a fairly robust bridge between Capture One's AppleScript library and Swift. The bridge has its own mini-API for interacting with Capture One and handles converting AppleEvents to and from Swift objects1. The Finder Sync API is relatively straight forward, it asks you about files and folder and in return you tell it what badge to display.

However, because nothing can be so simple, one issue I ran into was actually interacting with Capture One. The app extension refused to send Apple Events, which I assume is a security measure. After looking into the docs a bit more I figured an XPC service, which lets you move some of the business logic into its own process, was the way to go. I've never built anything using XPC and making sense of the API required a fair amount of research2.

Eventually I did manage to get everything working. The extension adds menus for setting the capture folder, adding and removing folders from favorites, and viewing a folder in Capture One. Crucially it also adds badges for the current capture folder and folders that are in favorites. The badges will even update in (somewhat) real-time to reflect changes made in Capture One.

While it does work the entire thing feels incredibly fragile. The extension communicates via XPC with the launch agent, which in turn calls Capture One via AppleEvents, which may time out and never complete. Updating based on changes in Capture One requires a repeating timer rather than actually being notified of the event. There are a number of states that could easily get out of sync. Everything only works on the current document, and would almost certainly break if multiple were open.

Honestly this is something I would love for Capture One to integrate themselves. I can't imagine them doing so anytime soon, but it would be a nice feature that could directly benefit working digital techs.

  1. I should probably publish that code into its own library.

  2. For instance, Apple's own XPC template won't compile.

Introducing First Contact

18 Jun 2022 ∞

I'd like to introduce a new app I've been working on called First Contact, a quick and easy way to create contact sheets. First Contact features the right balance of options for customizing the layout while not getting you bogged down.

First Contact

There are a number of ways to make contact sheets, but they tend to be part of expensive subscription plans, a side-feature of a DAM, a fancy print dialogue, or some combination of all three. First Contact aims to be fast and easier without sacrificing flexibility.

When you open images in First Contact the PDF is rendered in real-time, showing you exactly what you'll get and how large the final file will be, important if emailing is a concern. To that end you can also use 🥔 Mode, which scales images to the actual dimensions of the cell rather than embedding a larger (or full-size) copy.

The layout is easily customized by selecting the number of rows & columns along with the page margin. Your contact sheet can also be given the classic dark mode treatment for night owls.

Once everything is ready you can save the contact sheet and be on your way.

First Contact is available now for $25 with a 14-day free trial. To celebrate use the code first-contact-launch for 10% off!