Skip to content

MWBMPartners/MeedyaManager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

118 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ§πŸ“ MeedyaManager

MeedyaManager Logo

🎡🎬 Smart, cross-platform media file manager and auto-organizer
Rust core + native UIs β€” inspired by MusicBee's flexibility, built for everywhere

Rust Platforms License


(C) 2025–2026 MWBM Partners Ltd


🌟 What is MeedyaManager?

MeedyaManager is a cross-platform media file management application that automatically monitors folders, reads metadata from audio and video files, and renames/organizes them according to user-defined rules β€” inspired by MusicBee's auto-organize feature. It is built on a shared Rust core library with fully native UIs on each platform: SwiftUI on macOS, WinUI 3 on Windows, and GTK4 on Linux. This architecture β€” the same pattern used by 1Password, Dropbox, and Firefox β€” delivers native look-and-feel on every platform while sharing all business logic through a single Rust codebase.


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Native UI Layer                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  macOS    β”‚   β”‚   Windows    β”‚   β”‚     Linux      β”‚  β”‚
β”‚  β”‚ SwiftUI   β”‚   β”‚   WinUI 3   β”‚   β”‚ GTK4 (gtk4-rs) β”‚  β”‚
β”‚  β”‚ (Swift 6) β”‚   β”‚   (C# .NET) β”‚   β”‚   (Rust)       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚        β”‚                 β”‚                  β”‚            β”‚
β”‚   UniFFI            cbindgen/          Direct Rust       β”‚
β”‚   (auto-gen         P/Invoke           (no FFI)          β”‚
β”‚    Swift)            (C#)                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                   Rust Core (mm-core)                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚Watcher β”‚ β”‚Rule Eng. β”‚ β”‚Metadata  β”‚ β”‚ Classifier   β”‚ β”‚
β”‚  β”‚(notify)β”‚ β”‚(lexer/   β”‚ β”‚(lofty)   β”‚ β”‚ (4-level)    β”‚ β”‚
β”‚  β”‚        β”‚ β”‚parser/   β”‚ β”‚          β”‚ β”‚              β”‚ β”‚
β”‚  β”‚        β”‚ β”‚evaluator)β”‚ β”‚          β”‚ β”‚              β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚Renamer β”‚ β”‚Companion β”‚ β”‚Providers β”‚ β”‚ Config       β”‚ β”‚
β”‚  β”‚        β”‚ β”‚Tracker   β”‚ β”‚(19+ APIs)β”‚ β”‚ (JSON5+.env) β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

FFI Strategy:

  • macOS: UniFFI (Mozilla) auto-generates Swift bindings from Rust
  • Windows: cbindgen/csbindgen generates C headers β†’ C# P/Invoke calls Rust .dll
  • Linux: Direct Rust (GTK4 via gtk4-rs + libadwaita) β€” no FFI needed

✨ Features

Feature Description
πŸ‘οΈ Real-Time File Watching Monitors folders for new media files and processes them automatically (notify crate)
πŸ“ MusicBee-Inspired Rule Engine Template syntax with <Tag>, $If(), $And(), $Or(), 20+ functions, regex, deep nesting
✏️ Metadata Editing Read/write tags across audio and video formats via lofty
πŸ” 19+ Metadata Lookup Providers Music (10), Video (5), Podcasts (1), Identifiers (3) β€” with fuzzy matching and cover art
🧠 Smart Classification 4-level hierarchy: Media Group β†’ Format β†’ Class β†’ Quality
πŸ”„ Companion File Tracking Moves subtitles, cover art, and disc images alongside media
πŸ—‚οΈ External JSON5 Config File types and metadata tags defined in filetypes.json5 / tags.json5 β€” editable without recompile, user-overridable
πŸ”’ File Integrity Checking SHA256 hash before/after every metadata write; atomic rename (rename(2)); rollback + corruption log on failure
βš™οΈ Background Service Mode Runs as systemd user unit (Linux), launchd agent (macOS), or Windows Service; managed via meedya service CLI
πŸ“¦ Settings Export / Import Portable .mmprofile bundles for device migration and backup (meedya config export/import)
πŸ§ͺ Test Mode Safe editing β€” creates _MeedyaManager copies instead of modifying originals; commit or revert when done
πŸ›‘οΈ Pre-release Safety Pre-release builds auto-enable Test Mode; stable upgrade prompts to disable
πŸ“œ Privacy Policy No tracking, no analytics; full third-party provider disclosure
☁️ Cloud Storage Sync OneDrive, Google Drive, Dropbox, MEGA, iCloud (planned)
πŸ—„οΈ Database Export MySQL, MariaDB, SQL Server, SQLite, PostgreSQL
🌐 Secure Media Server REST API with JWT auth, media streaming, web frontend
🎨 Native Look & Feel SwiftUI + Liquid Glass on macOS, WinUI 3 + Mica on Windows, GTK4 + Libadwaita on Linux

πŸ’» Platform Support

Platform Architectures UI Framework FFI Binding Store Target
🍎 macOS Apple Silicon (arm64) SwiftUI (Swift 6) UniFFI App Store
πŸͺŸ Windows x64, ARM64 WinUI 3 (C# .NET 8) cbindgen / P/Invoke Microsoft Store
🐧 Linux x86_64, ARM64 GTK4 + Libadwaita (gtk4-rs) Direct Rust Flatpak / Snap

πŸš€ Quick Start

Prerequisites

  • Rust (stable, via rustup)
  • Platform-specific toolchain (see below)

Build the Rust Core & CLI

# Clone the repository
git clone https://github.com/MWBMPartners/MeedyaManager.git
cd MeedyaManager

# Build all Rust crates (core, CLI, providers, GTK UI)
cargo build --workspace

# Run all tests
cargo test --workspace

# Run the CLI
cargo run -p mm-cli -- scan ~/Music

Build the macOS App (SwiftUI)

# Build the Rust FFI library for macOS
cargo build -p mm-ffi --release

# Open in Xcode and build
open macos/MeedyaManager.xcodeproj
# Or build from command line:
cd macos && swift build

Build the Windows App (WinUI 3)

# Build the Rust FFI library for Windows
cargo build -p mm-ffi --release

# Build the C# / WinUI 3 project
cd windows
dotnet build

Build the Linux App (GTK4)

# Build the GTK4 UI directly (no FFI needed)
cargo build -p mm-gtk --release

πŸ“‚ Project Structure

MeedyaManager/
β”œβ”€β”€ Cargo.toml                    # Workspace root
β”œβ”€β”€ rust-toolchain.toml           # Pin Rust version
β”œβ”€β”€ .rustfmt.toml / clippy.toml / deny.toml
β”‚
β”œβ”€β”€ crates/
β”‚   β”œβ”€β”€ mm-core/                  # Core business logic
β”‚   β”‚   └── src/ (config/, watcher/, classify/, rule_engine/,
β”‚   β”‚            renamer/, companion/, metadata/, state/,
β”‚   β”‚            logging/, health/, error.rs)
β”‚   β”œβ”€β”€ mm-providers/             # 19+ metadata lookup providers
β”‚   β”‚   └── src/ (traits.rs, registry.rs, credentials.rs,
β”‚   β”‚            rate_limiter.rs, match_scoring.rs, cover_art.rs,
β”‚   β”‚            music/, video/, podcasts/, identifiers/)
β”‚   β”œβ”€β”€ mm-cloud/                 # Cloud storage (M7)
β”‚   β”œβ”€β”€ mm-export/                # Database export (M9)
β”‚   β”œβ”€β”€ mm-server/                # Media server (M10)
β”‚   β”œβ”€β”€ mm-cli/                   # Cross-platform CLI (clap)
β”‚   β”œβ”€β”€ mm-ffi/                   # FFI bindings (UniFFI + cbindgen)
β”‚   └── mm-gtk/                   # Linux GTK4/Libadwaita UI
β”‚
β”œβ”€β”€ macos/                        # Swift/SwiftUI app
β”‚   β”œβ”€β”€ MeedyaManager.xcodeproj/
β”‚   └── MeedyaManager/ (Views/, Models/, Bindings/, Resources/)
β”‚
β”œβ”€β”€ windows/                      # WinUI 3 / C# app
β”‚   β”œβ”€β”€ MeedyaManager.sln
β”‚   └── MeedyaManager/ (Views/, ViewModels/, Interop/, Assets/)
β”‚
β”œβ”€β”€ config/settings.json5         # Shared default config
β”œβ”€β”€ assets/                       # Shared icons/branding
β”œβ”€β”€ branding/                     # Logos
β”œβ”€β”€ docs/                         # Developer docs
β”œβ”€β”€ help/                         # User documentation
β”œβ”€β”€ .github/workflows/            # CI/CD (7 workflows)
β”œβ”€β”€ .claude/                      # Project context
β”œβ”€β”€ Project_Plan.md / PROJECT_STATUS.md / README.md
└── justfile                      # Task runner

πŸ—ΊοΈ Milestone Roadmap

# Milestone Status Description
M0 πŸ”§ Repository Setup & Scaffolding βœ… Complete Archive Python, init Cargo workspace, scaffold native apps, CI stubs
M1 🧱 Core Engine (Rust) βœ… Complete Config, classification, metadata (lofty), watcher (notify), renamer, logging (217 tests)
M2 πŸ“ Rule Engine βœ… Complete Lexer, recursive descent parser, evaluator, 20+ template functions (182 tests)
M3 ⌨️ CLI βœ… Complete clap-based commands: scan, debug, watch, rule, edit, lookup, config (45 tests)
M4 πŸ–₯️ FFI Layer & Native UI Shells βœ… Complete UniFFI + cbindgen, SwiftUI/WinUI 3/GTK4 app shells (20 tests)
M5 πŸ” Metadata Lookup Providers βœ… Complete 19+ providers, fuzzy matching, rate limiting, cover art (332 tests)
M6 🎨 Full Native UI βœ… Complete Rule Builder, Metadata Editor, Lookup Panel on all platforms (~90 tests)
M7 ☁️ Cloud Storage Monitoring βœ… Complete OneDrive, Google Drive, Dropbox, MEGA stub, iCloud stub (~90 tests)
M8 πŸ“¦ Packaging & Public Release βœ… Complete App Store, Microsoft Store, Flatpak/Snap, auto-updater (~33 tests)
M9 πŸ—„οΈ Database Export βœ… Complete MySQL, MariaDB, SQL Server, SQLite, PostgreSQL (~90 tests)
M10 🌐 Secure Media Server βœ… Complete axum HTTP server, REST API, JWT auth, media streaming β€” v1.0.0 released (~90 tests)
β€” πŸ”§ Post-Release Enhancements (v1.1.0) βœ… Complete Accessibility (AT-SPI2/VoiceOver/XAML), i18n (gettextrs/.xcstrings/.resw), external filetype registry, extended metadata tags
β€” πŸ”§ Post-Release Enhancements (v1.2.0) βœ… Complete External JSON5 tag registry, file integrity (SHA256 + atomic write), background service mode, settings export/import

πŸ› οΈ Technology Stack

Rust Core

Purpose Crate
File watching notify
Metadata read/write lofty
CLI framework clap
HTTP client reqwest
Async runtime tokio
Config (JSON5) json5 + serde
Environment vars dotenvy
Logging tracing + tracing-subscriber
FFI (Swift) uniffi
FFI (C header) cbindgen
GTK4 UI gtk4-rs + libadwaita
Rate limiting governor
Fuzzy matching fuzzy-matcher
Credential storage keyring
Error types thiserror
Regex regex
OAuth2 oauth2
JWT jsonwebtoken

Native UIs

Platform Language Framework Version
macOS Swift 6 SwiftUI Xcode 16+
Windows C# WinUI 3 / .NET 8 Visual Studio 2022+
Linux Rust GTK4 + Libadwaita gtk4-rs

🍎 Apple Platform Wishlist

The following Apple-specific and Apple-enhanced features are planned for future releases on macOS (and potentially iOS/iPadOS). These extend MeedyaManager beyond cross-platform parity to take full advantage of the Apple ecosystem.

Feature Description GitHub Issue
🎡 Music.app Library Import Parse the macOS Music app library (~/Music/Music/) to bulk-import existing metadata, ratings, and play counts β€” zero re-tagging needed for existing collections #134
🎼 MusicKit Framework Replace REST-based Apple Music lookups with the native MusicKit framework for on-device catalog search, richer metadata, and authenticated user-library access #135
πŸ”­ Quick Look Extension Register a QLPreviewExtension so Finder shows rich album-art previews with metadata for any media file managed by MeedyaManager #136
πŸ—£οΈ Siri Shortcuts / App Intents Expose MeedyaManager operations (scan folder, rename preview, metadata lookup) as AppIntent actions usable in the Shortcuts app and via Siri voice commands #137
🧠 Core ML Audio Fingerprinting Use Apple's Neural Engine (Core ML / Sound Analysis) for on-device audio fingerprinting β€” identify tracks without an external API, works fully offline #138
πŸ” Spotlight Importer Publish library metadata to macOS Spotlight via CoreSpotlight so every track is searchable system-wide from Spotlight or Alfred #139
πŸ“‘ AirPlay 2 Streaming Stream media from the built-in MeedyaManager server to any AirPlay 2 receiver (HomePod, Apple TV, AirPlay-enabled speaker) #140
☁️ CloudKit Settings Sync Sync rename rules, config, and preferences across all Apple devices via iCloud / CloudKit β€” rules set on Mac appear automatically on iPhone/iPad #141

These features are tracked as wishlist GitHub Issues and will be scheduled in a future milestone once core cross-platform parity is solid.


βš–οΈ License

This project is licensed under the GPL-2.0-or-later β€” see the LICENSE file for details.


πŸ“š Documentation

Document Description
πŸ“‹ Project_Plan.md Full project plan with architecture, milestones & tech stack
πŸ“Š PROJECT_STATUS.md Current progress tracker
πŸ“ docs/ROADMAP.md Milestone timeline
πŸ“¦ docs/changelog.md Detailed change log
πŸ“– help/getting-started.md Getting started guide
βš™οΈ help/configuration.md Configuration reference
πŸ“ help/rule-syntax.md Rule template syntax guide
🎡 help/supported-formats.md Supported file formats
πŸ” help/provider-setup.md Metadata lookup provider setup
πŸ”§ help/troubleshooting.md Troubleshooting guide
❓ help/faq.md Frequently asked questions

(C) 2025–2026 MWBM Partners Ltd

About

Master of Metadata

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors