Boundary Labs Blog

An eclectic mix of product and industry news, software development stuff, and technical topics of interest.

November 19, 2021

If you’ve tried exporting video in Focus (or any of the other Tesla video exporters on macOS), you've probably run into videos that cannot be decoded. In Focus you'll see a "Cannot Decode" error, and in other apps you may just have an export that hangs forever. The issue is due to subtle corruptions in the video stream that the car writes. You can usually detect them visually by scrubbing through the video until you come upon a black frame. The player doesn’t have issues with these corruptions, it just presents them as black frames. However, the built in framework for video export chokes on these frames and presents a “Cannot decode” error, which is unrecoverable.

In the past, I’ve advised people to use Focus’s video scrubber to edit out the corrupt frames (outlined here). However, I’ve found this to be at best a tedious workaround, and an unsatisfying answer to give people who just want to export their videos. The process can be especially time consuming when there are multiple corrupt frames per video. Additionally, it seems that this problem is getting worse over time. This is now the number 1 support request I receive.

The good news is that Focus 2.5 solves the issue in two ways.

First, it introduces a transcoder. The transcoder takes the original videos, decodes them, then writes them out into a new folder. Focus gives you the option of setting the transcoder quality. By default, it will encode the video in about the same quality as the source material. Choosing a lower quality allows you to produce usable video that takes up a fraction of the space, which is good for archival purposes.

The transcoder analyzes each frame as it is decoding. If it finds a corrupt frame, it is discarded. The resulting transcoded video is free of defects, and can be exported as desired. The original video is kept, stored in a folder with the same event name as the original, with the text “-original” as the suffix. Focus will then use the new transcoded video for all operations. The original can be kept or discarded at your discretion.

Second, the export function uses the transcoder automatically when it detects corrupt frames. It attempts to use the original video from the car, but if it detects bad frames, the source material in the exported time series is transcoded in place. No new folder is created, but new transcoded files appear alongside the source video. These files are then used for the export, and removed when the export completes.

Transcoding time will depend heavily on the computer you are using. New Macs using Apple Silicon can transcode 40 minutes of video (10 minutes from each camera) in a little over 2 minutes. Older Macs can be substantially slower.

If you have questions on the new functionality in Focus, or suggestions on how to improve it, you can email me at or find me on Twitter at @rminerick.

Focus has been updated to version 2.2 today. This is primarily a feature update, adding some user requests as well as a few cosmetic improvements and bug fixes. The full release notes are here. The documentation for Focus has been updated substantially as well, so please check it out if you're wondering what Focus can do.

The pricing structure has been changed for Focus as well. Starting today, it will be available for $9.99 from the App Store. If you'd prefer only the macOS version and would like to save $1, the macOS version is available by itself for $8.99 from the Boundary Labs store.

The price of Memoir has been cut to $4.99. There has not been a significant update in some time, as I've shifted most development time to Dossier. I don't plan on it going anywhere, this is just an acknowledgment that for now, at least, it's not the top priority.

The website has been updated throughout. There is a new support system in place, you've probably noticed the presence of a new "Help" button in the lower right hand corner of the site. This forwards requests to the new ticketing system, which I hope will provide a more centralized place for keeping up with support questions and feature requests.

Lastly, if you've purchased products from our store in the past, you can log in to your account and see the licenses you've purchased in the past. Finding an old serial number is probably the number one support request, so this should make it easy.

April 13, 2020

I'm happy today to announce the arrival of Focus for iOS. Focus for iOS brings many of the great features from the macOS version to iOS. Simply plug in your storage device (using the appropriate adapter), and you're now able to browse, flag, delete, and export videos right on your iPhone or iPad.

Focus is utilizing Universal Purchase, recently introduced by Apple, which allows a purchase on one platform to transfer to the others. So, if you've already purchased Focus on the Mac, you can now download Focus for your iPhone or iPad for free.

Today's release of Focus for the Mac updates the way flags are applied to videos so that it is compatible with the iOS version. Now that the iOS version is out, further updates to both version, including several requested features on the Mac, are coming.

I have two big changes to share with everyone today that I felt warranted a blog post.

First, the latest release of Focus is out, and it has a big feature that I think everyone is really going to like - in-app editing of videos for export. I've tried to make clipping videos as easy as possible without cluttering the interface or slowing Focus down. To do so, there's a new custom video scrubber that appears only when summoned. Clipping videos couldn't be simpler - click your desired start point and end point on the scrubber, and you've got your clip to export. Need several clips from the same video? It supports that too, just keep clicking. You can even remove selections by holding down the option key when you click.

Secondly, the price of Memoir has been reduced to just $4.99. This isn't a temporary price cut, but the new retail price. Looking around the marketplace, there are a lot of other options out there. I want people to give Memoir a try; hopefully this price cut removes a barrier for people who wouldn't otherwise try it out.

That's all for today! I always like hearing from people, so if you have any suggestions, you can email me at, or find me on Twitter at @rminerick.

August 13, 2019

One of the interesting things about Tesla cars is that they are packed full of cameras (8 of them on the Model 3). Tesla allows you to plug in a USB drive and click a button on the touch screen to save videos from the forward and two side cameras when an event of interest takes place. Earlier this year, Tesla also introduced a feature called Sentry Mode which uses the car's cameras to record activity when someone does something like lean on your car (or something more nefarious).

Focus started as a way to scratch my own itch, so to speak. What I'm ultimately interested in is playing with image recognition techniques and automatic detection of activity. I think this would make the Sentry Mode concept much easier to deal with on a regular basis - I mean, who wants to sit and skim through 60 second videos to figure out why the car was triggered?

This first release handles combining the videos from the three available cameras and merging them into one. The calendar functionality (which I shamelessly stole from Memoir) makes it much easier to find videos than just a big list view, and I find the flag feature works great for "interesting" videos. I think it's the most capable app of it's kind, and a solid first release. Having never actually done any video work prior to a month ago, there was a learning curve in getting this going, and so there's a lot of room for new features and improvements. We'll see where it goes!

July 26, 2019

First off, a back story. You should jump ahead if you just want instructions on how to handle hosting Vapor on a Mac.

One of the things I've learned about myself over the years is that I need variety in my work. Every two or three years I look around and see what I could be doing differently to increase productivity and keep software development interesting.

I've had the opportunity over the past 15 years to do a lot of web development work for a variety of clients. Several years ago, after a particularly demanding project, it was clear to me that I needed to find something better on the server side (I was mostly doing PHP at the time). That's when I found Laravel. Laravel felt comfortable from the start, and I've been using it for the past 5 years. I've used it to power everything from simple sites with a few forms to larger sites that process several hundred orders per day. In short, if you program in PHP, you should check it out.

Last year, when I started working on our new website - I again had this feeling that I needed something different. Maybe it was the fact that I'd been using Swift a lot, and going back to PHP just felt... wrong. So, I set about searching to see if there was something that would allow me to stay in Swift-land, something again to make web development fun. I found Vapor.

What's great about Vapor? Much like Laravel, it's just comfortable. I found out later that Laravel was somewhat of an inspiration for Vapor, so that probably helped. The fact that it's Swift means it is instantly familiar, and I feel like I'm context switching less. True, I still need to do front end work in a JavaScript framework, but not continuously moving between PHP and Swift has eliminated a lot of the friction to just getting things done.

This brings me to the other really cool thing about Swift: you can easily leverage existing macOS frameworks to build your backend. For me, this means I can utilize libraries like Core Image or Foundation, opening up a huge set of frameworks that I'm already familiar with. This also exposes what I consider a hole in the ecosystem - hosting. In order to take advantage of Apple frameworks, you need to be running on macOS. For many projects that don't rely only on Foundation, this isn't a problem - Swift on Linux supports these just fine, and there are instructions out there to handle this. Even better, the creators of Vapor have an excellent service they offer, Vapor Red, which I prefer to handle sites that don't require a macOS host. But what if you want to take advantage of the many frameworks available only on macOS?

Hosting Vapor on macOS

This assumes you have the developer tools on your host Mac, but little else. On the host Mac, install Homebrew:

% /usr/bin/ruby -e "$(curl -fsSL"

Once installed, pull in Vapor:

% brew tap vapor/tap
% brew install vapor/tap/vapor

Clone your vapor project to wherever it is you want it to run from, then change your directory to your vapor project and build:

% vapor build —release
% swift build --configuration release

Run your project:

% .build/release/Run —env=production

You need to make sure that your site starts up on boot. For this, I use supervisord, which you can install using homebrew:

% brew install supervisor

Create the supervisord configuration file:

% mkdir /usr/local/etc/supervisor.d
% nano /usr/local/etc/supervisor.d/yourapp.ini

Open a text editor, and enter the following for the yourapp.ini file:

directory = [program directory]
command= bash -c ".build/release/Run serve --env production --hostname"


Make sure that whatever directory you choose to put your log files in, that it exists before you start supervisord. Then, start the supervisord service:

% brew services start supervisor

The next thing to do is to create a proxy which passes traffic from the http port (80) and, optionally, the https port (443), to the running application. To do so, first ensure that apache isn't already running on your host:

% sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Then go ahead and install nginx (also fomr homebrew):

% brew install nginx
% sudo brew services start nginx

Set up nginx:

% sudo nano /usr/local/etc/nginx/nginx.conf

Modify the “user” on the first line:

user [your user id] staff;

Comment out the existing server block (or remove it).

Create a new server in the servers directory:

% cd /usr/local/etc/nginx/servers
% nano [servername]

Set up a new server block that redirects all traffic on port 80 to port 8080 (where your vapor project is running):

server {
listen 80 default_server;
listen [::]:80 default_server;
location / {

Once this is complete, just restart nginx and you should be able to browse to your server on port 80:

% sudo brew services start nginx

I’d recommend setting up SSL for whatever you’re doing, certbot works great for this. Instructions are available on their website.

That's it for now. If you have any questions or comments, I'm reachable both via email at and on Twitter at @rminerick.

Other pertinent references that might help:

June 14, 2019

I've been working on Memoir 3 for about the last two years, going in fits and starts between consulting work and working on another startup company. As I've transitioned out of consulting and my requirements at the other business have been reduced, Memoir development has picked up steam - and I'm finally ready to announce a brand new version, Memoir 3.

Memoir 3 is a complete rewrite of the original version. The interface has been streamlined, and support for many of the latest macOS features are included. The product page has more detail, and the help files have been moved online so it's easier to see how Memoir operates. As always, a free trial is available, so you can purchase Memoir after you see if it's a good fit. Memoir 3 is a free upgrade for existing users, macOS 10.13 and higher.


Now that Memoir is out the door, Dossier is up next. In the past, much of the code has been shared between the two programs; with Memoir 3 this has changed. Memoir will remain a application focused on keeping notes on your Mac. Dossier will evolve into something larger, keeping it's advanced features (and adding more) while also moving onto Apple's other platforms. Much of the knowledge gained in Memoir will lend itself to Dossier, resulting in a quicker release. Dossier is still in the planning phase, so I won't have details on the release date and new features for some time.

All that being said, the current version of Dossier is long in the tooth. I've removed it from the Mac App Store, as I could not provide a meaningful update within Apple's requested timeline. Today, Dossier has been updated to version 2.7.3. I've also reduced the price to $14.99, with a free upgrade to version 3. A more substantial update is in the works, fixing bugs that have cropped up over the years with new macOS releases, and adding some new features. At it's core, Dossier is still a very capable program - and I now have the time to keep it maintained until I can complete work on a rewrite.

Licensing and Serial Numbers

The majority of sales of both Memoir and Dossier have gone through the Mac App Store. The Memoir 3 update will be available on the App Store soon. For those who bought directly from Boundary Labs, new licenses are now available for the latest releases of Memoir and Dossier. A new license is required for the latest versions, though the upgrade is free. Please email us if you do not receive the new license via email.

New Website

We have a new website that has been written from the ground up in Swift using the Vapor framework. I've so far focused on enabling purchasing and integrating with our eCommerce partner (FastSpring), so I feel like things are a bit bare at the moment. It will fill out over the coming months, with a focus on help and support content.

This Blog

Lastly, there's this blog. As the tagline above notes, I don't intend it to be a product blog (or not specifically a product blog). On the previous website, I've occasionally posted tutorials or experiences on getting tricky things to work on macOS. These were sometimes hidden, posted for my own future use or sent along to someone who was having technical issues similar to my own. So, instead of a product blog, I'll be keeping those kinds of things here.

That's it for now. If you have any questions or comments, I'm reachable both via email at and on Twitter at @rminerick.