A unified, intelligent media management system for organizing, discovering, and managing your entire digital media library. Built with Tauri (Rust + Svelte) and a Python backend for high-performance media processing.
Before building or running MediaForge, ensure you have:
sudo apt-get install libssl-dev libgit2-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-devxcode-select --install)Clone the repository:
git clone https://github.com/your-repo/mediaforge.git
cd mediaforge
Install Node dependencies:
npm install
Set up Python virtual environment:
cd sidecar
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
cd ..
Start development server:
npm run tauri:dev
This will start:
npm run tauri:build
Linux:
npm run tauri:build -- --target x86_64-unknown-linux-gnu
macOS:
npm run tauri:build -- --target aarch64-apple-darwin # Apple Silicon
npm run tauri:build -- --target x86_64-apple-darwin # Intel
Windows:
npm run tauri:build -- --target x86_64-pc-windows-msvc
MediaForge uses a modern multi-process architecture:
┌─────────────────────────────────────────┐
│ Svelte UI (Frontend) │
│ - React to user interactions │
│ - Display results and progress │
└──────────────┬──────────────────────────┘
│
Tauri IPC │ JSON-RPC Protocol
│
┌──────────────▼──────────────────────────┐
│ Tauri Window (Rust Backend) │
│ - Command handling │
│ - File dialogs │
│ - System tray integration │
└──────────────┬──────────────────────────┘
│
Stdout/ │ JSONL Messages
Stdin │
┌──────────────▼──────────────────────────┐
│ Python Sidecar Process │
│ - Media file processing │
│ - Metadata extraction │
│ - Face detection │
│ - Thumbnail generation │
│ - API integrations │
└─────────────────────────────────────────┘
Configuration is stored in data/config.yaml. Key settings:
# Enable NSFW content filtering
nsfw_mode: false
# Watch folders for automatic organization
watch_folders: []
# Library folders to index
library_folders: []
# Conflict resolution strategy (rename_increment, overwrite, skip)
conflict_resolution: rename_increment
# API Keys for external services
api_keys:
stashdb: ''
tmdb: ''
omdb: ''
# Face detection settings
face_detection:
enabled: true
threshold: 0.6
For adult content metadata enrichment:
api_keys.stashdb in configapi_keys.tmdb in configapi_keys.omdb in configNo registration required, but AcoustID needs a client ID:
acoustid_client to configWhen enabled, MediaForge will:
To enable:
nsfw_mode: true in data/config.yamlnpm run dev - Start Vite dev server (frontend only)npm run build - Build frontend for productionnpm run preview - Preview production buildnpm run tauri:dev - Full development environment with Taurinpm run tauri:build - Build full desktop applicationmediaforge/
├── src/ # Frontend (Svelte + TypeScript)
│ ├── lib/ # Reusable components and utilities
│ ├── routes/ # Page routes
│ └── app.svelte # Root component
├── src-tauri/ # Tauri backend (Rust)
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ ├── commands.rs # IPC command handlers
│ │ ├── sidecar.rs # Python process management
│ │ └── tray.rs # System tray integration
│ ├── tauri.conf.json # Tauri configuration
│ └── Cargo.toml # Rust dependencies
├── sidecar/ # Python backend
│ ├── main.py # Entry point
│ ├── core/ # Core processing modules
│ └── requirements.txt # Python dependencies
├── data/ # Runtime data (config, db, cache)
│ └── config.yaml # Configuration file
└── README.md # This file
data/logs/rustup updatesrc-tauri/target/ and try againdata/logs/ for processing errorsthumbnail_cache_size in configwatch_interval to reduce file watching frequencyContributions are welcome! Please:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)MediaForge is licensed under the MIT License. See LICENSE file for details.
For issues, questions, or feature requests:
Happy organizing! MediaForge makes media management effortless.