Path Juggler
Automates file organization by watching folders and routing files to structured destinations based on matching source material.
Current Workflow: DIT Editorial Proxies
The default configuration watches for Resolve render outputs and organizes them into editorial proxy folder structures:
- Watches
~/Movies/AMand~/Movies/PMfor MXF files from Resolve - Parses filenames like
A080C002_251209R2.mxfto extract the reel prefix (A080) - Searches mounted
HONEY 1,HONEY 2, etc. volumes for matching bin folders - Creates the editorial proxy folder structure in
~/Movies/Honey Dailies Transfer - Moves the rendered files to the correct location
Example
- Resolve outputs:
~/Movies/AM/A080C002_251209R2.mxf - Path Juggler finds on HONEY 1:
Honey/20251209_Day 22/02 FOOTAGE/CAM_A/A080CY75/ - Path Juggler creates:
~/Movies/Honey Dailies Transfer/20251209_Day 22 AM/03 EDITORIAL PROXIES/CAM_A/A080CY75/ - Path Juggler moves the MXF file there
Installation
Option 1: Standalone App (Recommended)
Build a self-contained macOS application - no Python dependencies needed after building:
# Make the build script executable
chmod +x build_app.sh
# Build the app
./build_app.sh
This creates dist/Path Juggler.app which you can drag to your Applications folder.
First launch: Right-click the app and select "Open" to bypass Gatekeeper (since it's self-signed).
Optional: Add a custom icon
# Requires Pillow
pip3 install Pillow
python3 create_icon.py
# Then edit build_app.sh and change:
# icon=None,
# to:
# icon='AppIcon.icns',
# Rebuild
./build_app.sh
Option 2: Run from Source
If you prefer to run the Python scripts directly:
pip3 install watchdog
python3 path_juggler_gui.py
Usage
GUI Application
Launch the app (double-click or from terminal):
open "Path Juggler.app"
# or
python3 path_juggler_gui.py
The GUI provides:
- Start/Stop button to control watching
- Live status of mounted HONEY volumes
- Real-time activity log with color-coded messages
- Clean macOS-style interface
Command Line Interface
Watch mode (default) - Continuously watches for new files:
python3 path_juggler.py
Dry run - See what would happen without moving anything:
python3 path_juggler.py --dry-run
Process once and exit - Process existing files without watching:
python3 path_juggler.py --once
Verbose mode - See detailed logging:
python3 path_juggler.py -v
Files
path_juggler_gui.py- GUI applicationpath_juggler.py- Command line interfacepath_juggler_core.py- Core logic (shared by both interfaces)build_app.sh- Build script for standalone .appcreate_icon.py- Optional icon generator
Customization
Edit the configuration section at the top of path_juggler_core.py:
WATCH_FOLDERS = {
"AM": Path.home() / "Movies" / "AM",
"PM": Path.home() / "Movies" / "PM",
}
DESTINATION_BASE = Path.home() / "Movies" / "Honey Dailies Transfer"
VOLUME_PATTERN = re.compile(r"^HONEY \d+$")
PROJECT_FOLDER = "Honey"
FOOTAGE_FOLDER = "02 FOOTAGE"
PROXIES_FOLDER = "03 EDITORIAL PROXIES"
After changing configuration, rebuild the app with ./build_app.sh
Troubleshooting
"No HONEY volumes found"
- Make sure your backup drives are mounted
- Check they're named exactly
HONEY 1,HONEY 2, etc. (with space before number)
"Could not find bin folder for A080"
- Verify the bin exists in SilverStack's folder structure
- Check the path follows:
HONEY X/Honey/YYYYMMDD_Day XX/02 FOOTAGE/CAM_X/A080XXXX/
Files not being detected
- Ensure Resolve is outputting to
~/Movies/AMor~/Movies/PM - Check file extension is
.mxf(case insensitive)
App won't open ("unidentified developer")
- Right-click the app and select "Open" instead of double-clicking
- Or: System Preferences → Security & Privacy → "Open Anyway"
Build fails
- Ensure you have Xcode Command Line Tools:
xcode-select --install - Check Python 3.8+ is installed:
python3 --version