# 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 ### Option 1: Standalone App (Recommended) Build a self-contained macOS application - no Python dependencies needed after building: ```bash # 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 ```bash # 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: ```bash pip3 install watchdog python3 path_juggler_gui.py ``` ## Usage ### GUI Application Launch the app (double-click or from terminal): ```bash 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: ```bash python3 path_juggler.py ``` **Dry run** - See what would happen without moving anything: ```bash python3 path_juggler.py --dry-run ``` **Process once and exit** - Process existing files without watching: ```bash python3 path_juggler.py --once ``` **Verbose mode** - See detailed logging: ```bash 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`: ```python 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`