# Code Map - Feature Location Reference This document provides a quick reference for locating features and components when making modifications to the Media Downloader application. Last Updated: 2026-02-10 (v12.12.1) --- ## Core Backend Files ### Database Layer - **File**: `/opt/media-downloader/modules/unified_database.py` - **Contains**: - All database table schemas (downloads, media_gallery, review_queue, recycle_bin, etc.) - CRUD operations for all tables - Database connection pooling (DatabasePool class) - Settings management (get_setting, set_setting) - Recycle bin operations (move_to_recycle_bin, restore_from_recycle_bin) - Face recognition metadata storage ### API Endpoints - **Entry Point**: `/opt/media-downloader/web/backend/api.py` (828 lines - router registration) - **Routers**: `/opt/media-downloader/web/backend/routers/` (26 routers) - `paid_content.py` - Paid content CRUD, services, creators, feed, messages, OnlyFans/Fansly setup, health checks - `private_gallery.py` - Private gallery auth, media, persons, encryption, features, URL import - `media.py` - Media serving, thumbnails, gallery - `face.py` - Face recognition endpoints - `downloads.py` - Download history, analytics - `review.py` - Review queue management - `config.py` - Configuration management - `scheduler.py` - Scheduler control - And 18 more routers (auth, health, recycle, stats, discovery, video, etc.) --- ## Feature-Specific Modules ### Face Recognition - **Main Module**: `/opt/media-downloader/modules/face_recognition_module.py` - **Detection Module**: `/opt/media-downloader/modules/face_detection_module.py` - **Database Manager**: `/opt/media-downloader/modules/face_recognition_db.py` - **Related Scripts**: - `/opt/media-downloader/scripts/add_reference_face.py` - Add reference faces - `/opt/media-downloader/scripts/batch_compare_faces.py` - Batch comparison - `/opt/media-downloader/scripts/list_reference_faces.py` - List faces - `/opt/media-downloader/scripts/delete_reference_face.py` - Delete faces - **UI Components**: - Frontend API calls: `/opt/media-downloader/web/frontend/src/lib/api.ts` - Face recognition page: Check App.tsx for routing ### File Movement & Organization - **File**: `/opt/media-downloader/modules/move_module.py` - **Contains**: - File movement logic (move_file) - Batch move context management - Review queue handling - Notification tracking for moved files - Separate tracking for review queue vs matched files - Integration with face recognition workflow ### Push Notifications - **File**: `/opt/media-downloader/modules/pushover_notifier.py` - **Contains**: - Pushover API integration - Batch download notifications - Review queue notifications (separate from regular downloads) - Platform-specific icons and formatting - Image attachment support - Priority settings ### Media Download Modules - **Instagram**: `/opt/media-downloader/modules/instagram_module.py` - **Reddit**: `/opt/media-downloader/modules/reddit_module.py` - **TikTok**: `/opt/media-downloader/modules/tiktok_module.py` - **Bunkr**: `/opt/media-downloader/modules/bunkr_module.py` - **X/Twitter**: `/opt/media-downloader/modules/x_module.py` ### Utilities - **Filename Cleaner**: `/opt/media-downloader/utilities/filename_cleaner.py` - **Metadata Manager**: `/opt/media-downloader/modules/metadata_manager.py` - **Cache Builder**: `/opt/media-downloader/utilities/cache_builder.py` --- ## Frontend Structure ### Main Application Files - **App Entry**: `/opt/media-downloader/web/frontend/src/App.tsx` - Main routing configuration - Navigation menu (Downloads, Media, Review, System dropdowns) - WebSocket connection management - Global notification handling - **API Client**: `/opt/media-downloader/web/frontend/src/lib/api.ts` - All API call definitions - Authentication token management - Request/response handling ### Page Components #### Downloads Page - **File**: `/opt/media-downloader/web/frontend/src/pages/Downloads.tsx` - **Features**: - Comprehensive filter system (search, platform, media type, face recognition) - Advanced filters (date range, size range, sort options) - Grid/List view toggle - Batch operations - File preview modal #### Media Gallery Page - **File**: `/opt/media-downloader/web/frontend/src/pages/Media.tsx` - **Features**: - Media browsing and organization - Batch delete operations - File viewing/download - Basic filtering (needs upgrade to match Downloads page) #### Review Queue Page - **File**: `/opt/media-downloader/web/frontend/src/pages/ReviewQueue.tsx` - **Features**: - Files awaiting manual review (no face match) - Move to media gallery - Delete files - Face recognition results display #### Recycle Bin Page - **File**: `/opt/media-downloader/web/frontend/src/pages/RecycleBin.tsx` - **Features**: - View deleted files from all sources (downloads, media, review) - Restore files to original location - Permanently delete files - Batch operations - Statistics dashboard - Filtering by source #### Configuration Page - **File**: `/opt/media-downloader/web/frontend/src/pages/Config.tsx` - **Features**: - Application settings management - Platform credentials - Face recognition settings - Notification settings - Directory settings #### Other Pages - `/opt/media-downloader/web/frontend/src/pages/ChangeLog.tsx` - Version history - `/opt/media-downloader/web/frontend/src/pages/Logs.tsx` - System logs viewer - `/opt/media-downloader/web/frontend/src/pages/Health.tsx` - Health monitoring ### UI Libraries & Utilities - **Notification Manager**: `/opt/media-downloader/web/frontend/src/lib/notificationManager.ts` - Toast notifications - Success/error/info messages - **React Query**: Used throughout for data fetching and caching - **Tailwind CSS**: Styling framework (configured in tailwind.config.js) --- ## Configuration Files ### Application Settings - **Database Settings**: Stored in SQLite via SettingsManager (preferred method) - Access via: `app_state.settings.get('key')` or `app_state.settings.set('key', value)` - Settings categories: general, face_recognition, notifications, recycle_bin, etc. - **Legacy JSON Config**: `/opt/media-downloader/config/settings.json` - Being phased out - DO NOT ADD NEW SETTINGS HERE - Use database settings instead ### Version Management - **Version File**: `/opt/media-downloader/VERSION` - Single source of truth - **Package.json**: `/opt/media-downloader/web/frontend/package.json` - Frontend version - **README**: `/opt/media-downloader/README.md` - Documentation version - **API Version**: Set in `/opt/media-downloader/web/backend/api.py` (FastAPI app) ### Changelog - **JSON Format**: `/opt/media-downloader/data/changelog.json` - Structured changelog for API - **Markdown Format**: `/opt/media-downloader/docs/CHANGELOG.md` - Human-readable changelog --- ## System Scripts ### Maintenance Scripts - `/opt/media-downloader/scripts/create-version-backup.sh` - Creates timestamped backups - `/opt/media-downloader/scripts/check-updates.sh` - Checks for available updates ### Database Scripts - `/opt/media-downloader/scripts/repair-parent-chains.js` - Fixes backup parent chains --- ## Common Modification Scenarios ### Adding a New API Endpoint 1. Add endpoint function to `/opt/media-downloader/web/backend/api.py` 2. Add corresponding database method to `/opt/media-downloader/modules/unified_database.py` (if needed) 3. Add API client function to `/opt/media-downloader/web/frontend/src/lib/api.ts` 4. Use in frontend component with React Query ### Adding a New Page 1. Create component in `/opt/media-downloader/web/frontend/src/pages/YourPage.tsx` 2. Add route in `/opt/media-downloader/web/frontend/src/App.tsx` 3. Add navigation menu item in App.tsx (if needed) 4. Import required icons from 'lucide-react' ### Modifying Download Behavior 1. Platform-specific logic: `/opt/media-downloader/modules/{platform}_module.py` 2. File movement logic: `/opt/media-downloader/modules/move_module.py` 3. Face recognition integration: `/opt/media-downloader/modules/face_recognition_module.py` 4. Metadata storage: `/opt/media-downloader/modules/metadata_manager.py` ### Modifying Notifications 1. Backend notification logic: `/opt/media-downloader/modules/pushover_notifier.py` 2. WebSocket broadcasts: `/opt/media-downloader/web/backend/api.py` (ConnectionManager) 3. Frontend toast handling: `/opt/media-downloader/web/frontend/src/lib/notificationManager.ts` 4. Component notification listeners: Individual page components ### Modifying Face Recognition 1. Core recognition: `/opt/media-downloader/modules/face_recognition_module.py` 2. Detection: `/opt/media-downloader/modules/face_detection_module.py` 3. Database storage: `/opt/media-downloader/modules/face_recognition_db.py` 4. API endpoints: `/opt/media-downloader/web/backend/api.py` (search for "face") 5. Reference face scripts: `/opt/media-downloader/scripts/` (face-related scripts) ### Modifying Recycle Bin 1. Database operations: `/opt/media-downloader/modules/unified_database.py` - `move_to_recycle_bin()`, `restore_from_recycle_bin()`, `empty_recycle_bin()` 2. API endpoints: `/opt/media-downloader/web/backend/api.py` (search for "/api/recycle") 3. UI component: `/opt/media-downloader/web/frontend/src/pages/RecycleBin.tsx` 4. Delete operations: Update delete endpoints in api.py to call `move_to_recycle_bin()` ### Adding New Settings 1. Initialize in API startup: `/opt/media-downloader/web/backend/api.py` (lifespan function) ```python if not app_state.settings.get('your_setting'): app_state.settings.set('your_setting', default_value, category='category', description='desc') ``` 2. Add UI controls: `/opt/media-downloader/web/frontend/src/pages/Config.tsx` 3. Add API endpoints: `/opt/media-downloader/web/backend/api.py` (if needed) ### Updating Version 1. Update `/opt/media-downloader/VERSION` (primary source) 2. Update `/opt/media-downloader/README.md` (version badge) 3. Update `/opt/media-downloader/web/frontend/package.json` (version field) 4. Update API version in `/opt/media-downloader/web/backend/api.py` 5. Update App.tsx version display 6. Add entry to `/opt/media-downloader/data/changelog.json` 7. Add entry to `/opt/media-downloader/docs/CHANGELOG.md` 8. Run `/opt/media-downloader/scripts/create-version-backup.sh` --- ## Database Schema Quick Reference ### Core Tables - **downloads** - Downloaded files tracking - **media_gallery** - Organized media files - **review_queue** - Files awaiting manual review - **recycle_bin** - Soft-deleted files (UUID-based storage) - **users** - User accounts - **settings** - Application settings (key-value store) - **face_recognition_db** - Reference faces and metadata ### Recycle Bin Schema ```sql CREATE TABLE recycle_bin ( id TEXT PRIMARY KEY, -- UUID for storage original_path TEXT NOT NULL, -- Full path for restore original_filename TEXT NOT NULL, -- Display name recycle_path TEXT NOT NULL, -- Current location file_extension TEXT, -- .jpg, .mp4, etc. file_size INTEGER, -- Bytes original_mtime REAL, -- Preserved timestamp deleted_from TEXT NOT NULL, -- 'downloads', 'media', 'review' deleted_at DATETIME, -- When deleted deleted_by TEXT, -- Username metadata TEXT, -- JSON metadata restore_count INTEGER DEFAULT 0 -- Times restored ) ``` --- ## Directory Structure ``` /opt/media-downloader/ ├── config/ - Configuration files (legacy JSON - avoid) ├── data/ - Application data │ ├── backup_cache.db - Main SQLite database │ └── changelog.json - Structured changelog ├── docs/ - Documentation (keep all docs here) ├── logs/ - Application logs ├── modules/ - Python backend modules ├── scripts/ - Utility scripts ├── utilities/ - Helper utilities └── web/ ├── backend/ - FastAPI application │ └── api.py - Main API file └── frontend/ - React application └── src/ ├── lib/ - Utilities (api.ts, notificationManager.ts) └── pages/ - Page components ``` --- ## Quick Reference Cheat Sheet | Feature | Backend File | Frontend File | API Endpoint | |---------|-------------|---------------|--------------| | Downloads | modules/*_module.py | pages/Downloads.tsx | /api/downloads/* | | Media Gallery | modules/unified_database.py | pages/Media.tsx | /api/media/* | | Review Queue | modules/move_module.py | pages/ReviewQueue.tsx | /api/review/* | | Recycle Bin | modules/unified_database.py | pages/RecycleBin.tsx | /api/recycle/* | | Face Recognition | modules/face_recognition_module.py | N/A | /api/face/* | | Notifications | modules/pushover_notifier.py | lib/notificationManager.ts | N/A | | Settings | modules/unified_database.py | pages/Config.tsx | /api/settings/* | | Users | web/backend/api.py | N/A | /api/auth/*, /api/users/* | --- ## Tips for Making Modifications 1. **Always use database settings** - Don't add to JSON config files 2. **Update version numbers** - Follow VERSION_UPDATE_CHECKLIST.md 3. **Test Python syntax** - Run `python3 -m py_compile ` before committing 4. **Test TypeScript** - Run `npm run type-check` in web/frontend/ 5. **Rebuild frontend** - Run `npm run build` after changes 6. **Restart services** - `sudo systemctl restart media-downloader-api` and `media-downloader-web` 7. **Create backups** - Run `scripts/create-version-backup.sh` before major changes 8. **Update changelog** - Add entries to both changelog.json and CHANGELOG.md --- ## Related Documentation - **CHANGELOG.md** - Version history and release notes - **VERSION_UPDATE_CHECKLIST.md** - Step-by-step version update process - **FACE_RECOGNITION.md** - Face recognition feature documentation - **NOTIFICATIONS.md** - Notification system documentation - **REVIEW_QUEUE_STRUCTURE.md** - Review queue architecture - **FEATURE_ROADMAP_2025.md** - Planned features and improvements