Initial development by Claude

This commit is contained in:
2025-12-09 22:40:12 +02:00
parent 652e09ccdf
commit 6479b24195
6 changed files with 1280 additions and 1 deletions

155
README.md
View File

@@ -1,2 +1,155 @@
# path-juggler
# 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`