2025-12-09 22:40:12 +02:00
2025-12-09 22:40:12 +02:00
2025-12-09 22:40:12 +02:00

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:

  1. Watches ~/Movies/AM and ~/Movies/PM for MXF files from Resolve
  2. Parses filenames like A080C002_251209R2.mxf to extract the reel prefix (A080)
  3. Searches mounted HONEY 1, HONEY 2, etc. volumes for matching bin folders
  4. Creates the editorial proxy folder structure in ~/Movies/Honey Dailies Transfer
  5. 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

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 application
  • path_juggler.py - Command line interface
  • path_juggler_core.py - Core logic (shared by both interfaces)
  • build_app.sh - Build script for standalone .app
  • create_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/AM or ~/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
Description
No description provided
Readme 56 KiB
Languages
Python 79.1%
Shell 20.9%