GenieHelper Media Hub is a monolithic Flask application designed for media processing. The architecture prioritizes simplicity, self-hosting capability, and efficient resource usage on modest hardware.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER β
βββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ€
β Web Browser β Chrome Extensionβ Mobile Browser β
β (Desktop) β (extension-ui)β (Responsive UI) β
ββββββββββ¬βββββββββ΄βββββββββ¬βββββββββ΄βββββββββββββββββ¬βββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRESENTATION LAYER β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β Jinja2 β β HTMX β β Tailwind CSS β β
β β Templates β β Dynamic β β Styling β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β APPLICATION LAYER β
β Flask 3.1 (app.py) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Routes β β
β β βββ Page Routes (/, /dashboard, /convert, /resize, etc.) β β
β β βββ API Routes (/api/files, /api/tasks, /api/dashboard/stats) β β
β β βββ Operation Routes (/convert/image, /resize/video, etc.) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Middleware β β
β β βββ File Upload Handler (werkzeug) β β
β β βββ Request Validation β β
β β βββ Error Handling β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SERVICE LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β services/ ββ
β β βββ file_manager.py β File upload, storage, retrieval ββ
β β βββ database.py β SQLite connection management ββ
β β βββ task_queue/ β Background task processing ββ
β β βββ threading_backend.py ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β services/media/ ββ
β β βββ image_ops.py β crop, resize, convert (Pillow) ββ
β β βββ video_ops.py β compress, crop, resize, trim (FFmpeg) ββ
β β βββ doc_ops.py β PDF, DOCX conversion ββ
β β βββ media_info.py β Metadata extraction (ffprobe) ββ
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA LAYER β
β βββββββββββββββββββββββ βββββββββββββββββββββββ β
β β files.db β β tasks.db β β
β β (SQLite) β β (SQLite) β β
β β βββ files table β β βββ tasks table β β
β β βββ metadata β β βββ status/logs β β
β βββββββββββββββββββββββ βββββββββββββββββββββββ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β File System β β
β β βββ files/staging/ β Temporary uploaded files β β
β β βββ files/output/ β Processed output files β β
β β βββ media-output/ β Public download directory β β
β β βββ logs/ β Application logs β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXTERNAL DEPENDENCIES β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β FFmpeg β β ImageMagick β β yt-dlp β β
β β (Video) β β (Images) β β (YouTube Downloads) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The main application file contains:
app.py (~1200 lines)
βββ Configuration & Initialization
β βββ Flask app setup
β βββ Logging configuration
β βββ Database initialization
β βββ File manager instance
β
βββ Helper Functions
β βββ allowed_file() - Extension validation
β βββ get_upload_path() - Staging directory
β βββ get_output_path() - Output directory
β βββ save_uploaded_file() - File persistence
β βββ get_dashboard_stats() - Statistics
β
βββ Page Routes
β βββ / β workflow.html
β βββ /dashboard β dashboard_interactive.html
β βββ /convert, /resize, /crop, etc.
β βββ /files, /tasks, /queue
β
βββ Operation Routes
β βββ /convert/image (POST)
β βββ /resize/image, /resize/video (POST)
β βββ /crop/image, /crop/video (POST)
β βββ /compress/video (POST)
β βββ /download/video (POST)
β βββ /trim/video (POST)
β βββ /join/videos (POST)
β
βββ API Routes
βββ /api/files (GET/POST)
βββ /api/files/<id> (GET/DELETE)
βββ /api/tasks (GET)
βββ /api/dashboard/stats (GET)
FileManager
βββ list_files() β Get all tracked files
βββ add_file() β Register new file
βββ get_file() β Retrieve file info
βββ delete_file() β Remove file
βββ cleanup_old() β Remove expired filesDatabase Functions
βββ init_db() β Create tables if not exist
βββ get_db_connection() β Get SQLite connection
βββ execute_query() β Run SQL queriesimage_ops.py
βββ convert_image() β Format conversion
βββ resize_image() β Scale by percentage
βββ crop_image() β Crop to coordinates
βββ get_image_info() β Metadata extraction
video_ops.py
βββ compress_video() β CRF-based compression
βββ resize_video() β Resolution scaling
βββ crop_video() β Frame cropping
βββ trim_video() β Segment extraction
βββ join_videos() β Concatenation
βββ convert_video() β Format conversion
βββ download_youtube() β yt-dlp wrapper
doc_ops.py
βββ convert_document() β PDF/DOCX/MD/HTML conversionCREATE TABLE files (
id TEXT PRIMARY KEY,
filename TEXT NOT NULL,
path TEXT NOT NULL,
size INTEGER,
mime_type TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT -- JSON blob
);CREATE TABLE tasks (
id TEXT PRIMARY KEY,
type TEXT NOT NULL, -- 'convert', 'resize', etc.
status TEXT DEFAULT 'pending', -- pending, processing, completed, failed
input_file TEXT,
output_file TEXT,
params TEXT, -- JSON blob
error TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP
);User Action β HTTP Request
β
βΌ
Flask Route Handler
β
βββ Validate Input
β βββ Check file extension
β βββ Validate parameters
β βββ Check file size
β
βββ Save Uploaded File
β βββ Generate unique filename
β βββ Save to staging/
β
βββ Process Media
β βββ Call appropriate service
β βββ FFmpeg/ImageMagick execution
β βββ Generate output file
β
βββ Cleanup
β βββ Remove staging file
β
βββ Return Response
βββ HTML fragment (HTMX)
βββ JSON (API)
βββ Download link
Dashboard Hub (Level 0)
β
βββ Convert β Convert Page
β βββ Image Conversion
β βββ Document Conversion
β
βββ Resize β Resize Page
β βββ Image Resize
β βββ Video Resize
β
βββ Crop β Crop Page
β βββ Image Crop (Interactive)
β βββ Video Crop
β
βββ Compress β Compress Page
β βββ Video Compression
β
βββ Download β Download Page
βββ YouTube Download
Navigation Pattern:
- Hub β Operation Page β Action β Result
- Back button returns to Hub
- HTMX for dynamic updates without page reload
extension-ui/
βββ manifest.json β Extension configuration
βββ background.js β Service worker
βββ contentScript.js β Page injection
βββ index.html β Popup UI
βββ assets/ β Icons
- Simpler deployment on shared hosting
- Jinja2 templates for SSR
- Lower memory footprint
- Sufficient for file processing workloads
- Zero configuration
- Single file per database
- Sufficient for single-server deployment
- Easy backup (just copy file)
- Simpler architecture
- No Redis/RabbitMQ dependency
- Adequate for light task queues
- Can upgrade later if needed
- Progressive enhancement
- Server-side rendering
- Minimal JavaScript
- Faster initial load
- Single server deployment
- ~100 concurrent users
- ~500MB max file size
- Files cleaned after 24 hours
- Add Redis - Session storage, task queue
- Add Celery - Distributed task processing
- S3 Storage - Offload file storage
- CDN - Static asset delivery
- Load Balancer - Multiple Flask instances
- File Validation - Extension whitelist
- Size Limits - Max upload size enforced
- Secure Filenames - Sanitized via werkzeug
- HTTPS - Enforced via Plesk/nginx
- No Execution - Uploaded files never executed
Version: 1.0.0 Last Updated: January 25, 2026