156 lines
4.0 KiB
Markdown
156 lines
4.0 KiB
Markdown
# 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`
|