Major Features: - 🖥️ Standalone desktop app (VideoMatcher.app) - double-click to run - 🎨 Black & gold branded UI (Montserrat font, #FFC407 accent) - 📁 Local file browser for master/adaptation folders - ⚡ Fast mode processing (10-20x faster, disables AKAZE/AI Vision) - 🤖 Smart AI Vision fallback (auto-retry when no matches found) - 📊 Real-time progress bars (fingerprinting & matching) - 💾 Local processing (no cloud, no authentication) - 📤 CSV export with master filenames Web Application (Enterprise): - 🌐 Flask web app with Azure AD authentication - 📦 Box.com integration for cloud storage - 🐳 Docker support for deployment - 🔐 JWT validation with httpOnly cookies - 🎯 REST API endpoints Enhancements: - Fixed master filename lookup (was showing "Unknown") - Automatic fingerprint recovery (detects missing files) - Improved CSV format (master file next to adaptation) - Port conflict handling (auto-finds available port) - Environment variable fixes for standalone mode Documentation: - Updated README with standalone app section - Added 10+ guide documents (UI improvements, fingerprint recovery, etc.) - Build instructions with PyInstaller - Comprehensive troubleshooting guide Technical: - PyInstaller build configuration (video_matcher.spec) - Launcher with environment setup (launcher.py) - Mock authentication for standalone mode - Video matcher service layer - Metadata parser and AKAZE video matching 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
7.7 KiB
Video Matcher Standalone Application - Quick Start Guide
What Was Created
I've transformed your Video Matcher tool into a standalone desktop application that users can run with a simple double-click. Here's what's new:
New Files Created
launcher.py- Main entry point that starts the Flask server and opens the browsertemplates/standalone.html- Beautiful UI for folder selection and matchingvideo_matcher.spec- PyInstaller configuration for building the executablebuild.py- Automated build scriptREADME_STANDALONE.md- Comprehensive documentation
Modified Files
app.py- Added standalone mode support and local file system endpoints:/local/browse- Browse local folders/local/scan-masters- Scan master folder/local/add-masters- Add masters to database/local/scan-adaptations- Scan adaptation folders/local/match- Match videos from local paths
How to Use Right Now (Development Mode)
You can test the standalone application immediately without building:
# Run the launcher
python launcher.py
This will:
- Start a local Flask server (http://localhost:5000 or next available port)
- Automatically open your browser
- Show the folder selection interface
User Workflow
-
Select Master Folder
- Browse your filesystem
- Select folder with master videos
- System scans and fingerprints them
-
Select Adaptation Folder(s)
- Browse and select adaptation folders
- Can select multiple folders (e.g., different countries)
-
Process & View Results
- Click "Start Matching"
- View results with match confidence
- Export as CSV
How to Build for Distribution
When you're ready to share with others who don't have Python installed:
Step 1: Install PyInstaller
pip install pyinstaller
Step 2: Run Build Script
python build.py
This creates a dist/VideoMatcher/ folder with everything needed.
Step 3: Distribute
# Create a zip file
cd dist
zip -r VideoMatcher.zip VideoMatcher/
# Share VideoMatcher.zip with users
What Users Will See
VideoMatcher/
├── VideoMatcher (or VideoMatcher.exe on Windows)
├── data/
├── tmp/
└── README.txt
Users simply:
- Extract the zip
- Double-click
VideoMatcher - Browser opens automatically
- Select folders and match videos
Key Features
✅ No Server Required
- Everything runs locally on user's machine
- No hosting costs
- No file uploads needed
✅ Large File Support
- Masters stay on local disk
- No size limits (unlike web uploads)
- Direct file system access
✅ Simple Distribution
- Single zip file
- No installation wizard
- Works on macOS, Windows, Linux
✅ Optional Box Integration
- Box.com support still available if needed
- Can mix local folders and Box downloads
✅ Clean User Interface
- Step-by-step wizard
- Visual folder browser
- Progress indicators
- Export results
Architecture Overview
┌─────────────────────────────────────┐
│ User Double-Clicks Executable │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ launcher.py │
│ - Sets STANDALONE_MODE=1 │
│ - Starts Flask server │
│ - Opens browser automatically │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Browser (http://localhost:5000) │
│ - Shows standalone.html │
│ - Folder selection UI │
│ - Results display │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Flask App (app.py) │
│ - Authentication disabled │
│ - Local file endpoints enabled │
│ - Direct file system access │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Video Matcher Service │
│ - Fingerprinting │
│ - Matching logic │
│ - Results generation │
└─────────────────────────────────────┘
Testing Checklist
Before distributing to users, test:
- Master folder selection works
- Adaptation folder selection works
- Multiple adaptation folders can be added
- Fingerprinting completes successfully
- Matching produces correct results
- CSV export works
- "Start Over" resets properly
- Application runs on target OS (Windows/macOS/Linux)
File Sizes to Expect
- Executable: ~80-150 MB (includes Python runtime)
- Master fingerprints: ~1-5 MB each (cached after first run)
- Total distribution zip: ~100-200 MB
Comparison: Before vs After
Before (Current Setup)
- Masters in local folder:
To Exclude/Masters transcoded/ - Adaptations in local folder:
To Exclude/1011A Spring Fashion/ - Run via:
python batch_match.pyor web app - Sharing: Requires Python setup for others
After (Standalone App)
- Masters: User selects any folder on first run
- Adaptations: User selects any folder(s) on each run
- Run via: Double-click
VideoMatcher - Sharing: Send zip file, users extract and run
Configuration Options
Environment Variables (Optional)
Users can create .env file in app directory:
# Force specific port
PORT=5000
# Enable debug logging
FLASK_ENV=development
# Custom data directory
DATA_DIR=/path/to/data
Command Line Options
The launcher can be modified to accept arguments:
./VideoMatcher --port 8080
./VideoMatcher --debug
Troubleshooting
"Port already in use"
The launcher automatically finds an available port (5000-5009).
"FFmpeg not found"
Users need FFmpeg installed:
- macOS:
brew install ffmpeg - Windows: Download from ffmpeg.org
- Linux:
sudo apt-get install ffmpeg
"Permission denied" (macOS)
- System Preferences > Security & Privacy
- Allow the application
Windows Defender warning
- Click "More info" > "Run anyway"
Next Steps
- Test Now: Run
python launcher.pyto test the interface - Build: Run
python build.pyto create executable - Test Built App: Run
dist/VideoMatcher/VideoMatcher - Distribute: Zip and share with users
Support
For detailed documentation, see:
- README_STANDALONE.md - Complete guide
- build.py - Build script with comments
- launcher.py - Launcher with inline docs
Summary
You now have:
- ✅ Standalone desktop application
- ✅ Browser-based UI with folder selection
- ✅ Local file processing (no uploads)
- ✅ Easy distribution (single zip file)
- ✅ Cross-platform support
- ✅ Optional Box.com integration still available
The application prompts for folders on every run (as you requested) and processes everything locally on the user's machine. Perfect for handling large uncompressed master files without server storage concerns!