Continuing on with Shark Bunch Week… I’ve been talking about Bunch again lately because I’ve been setting up a new one for podcasting (which happened to lead to new features). It’s been a while since I created a Bunch from scratch, and I thought I’d document it for anyone curious about Bunch but intimidated by the syntax and/or number of options. Or just people looking for ideas for getting more out of it. I’ve got the Podcast Bunch set up and working smashingly, so I’ll share that here and detail some of the tricks. I know several people can use some of these tips verbatim — Bunch seems to be especially popular with podcasters.

I’ll break it down one section at a time, but you can see the whole thing in this gist.

All of my Bunches start by triggering a specific project and task in I detailed this setup back in the post Bunch and I use the Automator method with a couple of variables I can easily copy/paste and modify in each Bunch.

## Some time tracking
& workflows/Timing
- task = Podcasting
- project = Podcasting

Next I turn on Do Not Disturb and set my audio settings as detailed in Bunch gets audio control. Note that since that post I’ve added a mute command and the ability to specify input or output for all volume and mute commands. I also created a script called volumetoggle.rb that gets all of my input, output, and alert audio devices and volumes at the time it runs and saves them to a text file I can use to restore on quit.

## Do not disturb me, audio settings
(dnd on)

### Save audio device settings
### <>
$ ~/scripts/volumetoggle.rb save

### Input/output devices can be referred to using partial names
#### Expands to "MacBook Pro Speakers"
(audio output macbook)
(audio input mute)
#### Expands to "Scarlett Solo"
(audio input scarlett)

Next I need to quit or pause bandwidth-sucking apps, in my case Dropbox and Backblaze, both of which require some special handling and use shell script lines. As far as I’ve been able to tell, Dropbox requires a brute force kill these days, which sucks and could probably cause data loss or at least sync errors, but I haven’t run into that yet.

## Quit the bandwidth heavy apps
$ killall Dropbox
$ /Library/Backblaze.bzpkg/bztransmit -pausebackup

Then I launch all of the apps I need. The @@ hides all open windows before launching new apps. By the way, I use Bunch in “Single Bunch Mode,” so apps unique to other Bunches will automatically be quit when I switch to the Podcast Bunch.

Note the use of % in the %nvUltra line. By default Bunch will quit any apps it launched when the Bunch is toggled off. The % tells Bunch to ignore the app when quitting, leaving it running if it already is. Since I have nvUltra running most (all) of the time, it’s safe to assume that I’ll want it to keep running after I’m done podcasting. This can apply to any apps you need specifically for a context but don’t want to close when you leave that context.

I also use nvUltra’s url handler to open the notebook where I keep all of my Markdown show notes. In most cases you could just use the dash syntax to open a specific file or folder in an app, but in the case of nvUltra there are some benefits to the url handler. But I digress.

## Open the necessary apps
### Launch nvUltra and close all current windows
%nvUltra Beta
- XX
### Open a notebook via the nvUltra url handler
### Collaborative show notes
### Essentials
Audio Hijack

Then I load up the page with any ad reads for the current episode. This line targets Firefox specifically and has the added benefit of also launching my primary web browser, which I use a lot when podcasting.

## Check for ad spots

And here’s the cool trick I mentioned yesterday: using Moom to set window positions. You can save a workspace, give it a title, then use AppleScript to trigger it.

## Use Moom saved layouts to position windows
* tell application "Moom" to arrange windows according to snapshot "Podcasting"

Lastly I set up special handling when quitting the Bunch. All of the apps I launched will quit automatically (except for % lines), and commands I’ve run (such as dnd on) will be reversed, so I don’t need to do anything there. In this case, I just need to end the Timing session, restore my audio setup to what it was when I started, and restart Dropbox and Backblaze.

Note the new syntax for the Dropbox line: !! specifies that an app should be launched when quitting the bunch. I found that open -a was both inelegant and prone to hangs, so I added this new method.

# When I'm finished
!& workflows/Timing
!$ ~/scripts/volumetoggle.rb restore
!$ /Library/Backblaze.bzpkg/bztransmit -completesync

Here’s the link to the whole shebang again. You’ll obviously need to customize it extensively to meet your own needs, but it provides some good examples of what’s possible.

If you’re looking for a comprehensive guide to podcasting, from planning through editing and publishing, The Successful Podcasting courses from Aaron Dowd are now available as a part of a subscription to $99/month gets you access to Successful Podcasting, the Logic and GarageBand courses, and a whole bunch of other great courses on If you want to expand your skills, check it out!