Skip to content

Releases: Hospes/plexify

0.1.1

22 Sep 12:25

Choose a tag to compare

Intelligent Matching & Performance Boost

This release marks a significant leap forward for Plexify, introducing a completely revamped media matching engine for superior accuracy and a new caching layer for a dramatic performance increase, especially when processing TV shows.

🚀 Features & Enhancements

🧠 Intelligent Media Matching Algorithm

The core logic for identifying movies and TV shows has been rebuilt from the ground up. Instead of a simple scoring system, Plexify now uses a sophisticated confidence scoring algorithm to find the best possible match for your media files.

  • Title Similarity Scoring: The new engine calculates the Levenshtein distance between the filename and the search results, ensuring that titles like "The Dark Knight" and "Batman The Dark Knight" are correctly identified as strong matches.
  • Multi-Factor Confidence: The final score is a weighted calculation based on:
    • Title similarity.
    • A significant bonus for matching the year parsed from the filename.
    • A bonus for consensus between multiple metadata providers (e.g., TMDB and IMDb).
  • Minimum Confidence Threshold: To prevent false positives, a minimum confidence score is now required. Files that don't find a sufficiently high-quality match will be skipped, avoiding incorrect organization.
  • Enhanced Logging: The console output is now more verbose during the matching process, showing the different candidates and their calculated scores so you can see exactly why a specific match was chosen.

⚡ Performance Boost with Metadata Caching

Plexify is now much faster when processing directories containing multiple episodes of the same TV show.

  • In-Memory Cache: A new in-memory caching layer has been introduced. When the first episode of a show is processed, its metadata is fetched and cached.
  • Reduced API Calls: Subsequent episodes from the same show will use the cached data, eliminating redundant API calls and significantly speeding up the overall process. The cache is active for a single run of the application.

📺 Expanded Media Support

  • IMDb TV Mini-Series: Plexify now correctly identifies and processes "TV Mini-Series" from IMDb, treating them as standard TV Shows for organizational purposes.

⚠️ BREAKING CHANGES

Configuration Variable Renamed

The configuration property for the TMDB Access Token has been renamed for clarity and consistency.

  • Old Name: TMDB_API_READ_ACCESS_TOKEN
  • New Name: TMDB_API_ACCESS_TOKEN

Action Required: You must update your local.properties file and any environment variables you have set.

Example local.properties update:

# Required for TMDB (The Movie Database)
TMDB_API_KEY="your_tmdb_api_key"
-TMDB_API_READ_ACCESS_TOKEN="your_tmdb_access_token"
+TMDB_API_ACCESS_TOKEN="your_tmdb_access_token"

⚙️ Other Changes & Fixes

  • Command-line arguments can now be supplemented or overridden by environment variables (e.g., TMDB_API_KEY, TMDB_API_ACCESS_TOKEN).
  • The matchConfidence score in the internal data models has been changed from Int to Double to allow for more granular scoring.
  • The .gitignore file has been updated to ignore the templates/ directory.
  • Internal code has been hardened to prevent incorrect object types from being passed to certain functions.

Full Changelog: 0.1.0...0.1.1

0.1.0

21 Sep 21:00

Choose a tag to compare

🎉 Plexify v0.1.0 - Initial Release!

We are thrilled to announce the first public release of Plexify! This release marks the culmination of initial development, bringing a powerful, cross-platform command-line tool designed to automatically organize your movie and TV show collections into a clean, structured library, perfect for media servers like Plex, Jellyfin, and Emby.

This initial version is packed with features to take the headache out of managing your media library. Pre-compiled native executables for Linux and Windows are available for download in the assets section below.

✨ Key Features

  • 🤖 Automatic Media Organization: Processes entire directories or individual files, sorting them into a clean library structure.
  • 📝 Advanced Filename Parsing: Intelligently extracts title, year, season, episode, resolution, and quality from even the most complex filenames.
  • ☁️ Multi-Source Metadata: Fetches and verifies media information from multiple databases (TMDB, IMDb) to find the most accurate match.
  • 🧠 Intelligent Consolidation: Compares search results from all providers, scores them, and selects the best "golden record" for your media.
  • 🎨 Customizable Naming: Comes with pre-configured, optimal naming templates for Plex and Jellyfin. You can also define your own powerful custom templates.
  • 🔗 Flexible File Operations: Choose to either MOVE your files or create HARDLINKs, preserving your original files for seeding or backup.
  • 🖥️ Cross-Platform: Built with Kotlin/Native to run as native executables on Linux and Windows.

🚀 Automated Release Workflow

This release introduces a brand new GitHub Actions workflow that automatically builds and packages the application whenever a new release is published. This means you get ready-to-use binaries for Linux (.tar.gz) and Windows (.zip) attached directly to each release.

🖥️ Usage Example

Organize a downloads folder using hardlinks (the default mode) and the Jellyfin naming convention:

./plexify "/path/to/downloads" "/path/to/Media Library"

Move a single movie file and use the Plex naming convention:

./plexify --mode MOVE --template-plex "/downloads/The.Matrix.1999.mkv" "/movies"

For more details on custom templates and advanced usage, check out the new README.md!

🛠️ What's New in This Release

This is the foundational release of Plexify. Everything is new!

Project & Build System

  • Kotlin/Native Setup: Project initialized as a Kotlin Multiplatform application targeting linuxX64 and mingwX64 (Windows).
  • Gradle Build Logic:
    • Configured dependencies using libs.versions.toml, including Clikt, Ktor, Kotlinx Serialization, Coroutines, and IO.
    • Integrated the build-config plugin to securely manage API keys from environment variables or a local.properties file.
    • Implemented dynamic versioning based on git describe.
  • CI/CD: Added a GitHub Actions workflow (release.yml) to automate the build, packaging, and upload of release assets.

Application Core

  • CLI Interface: A user-friendly command-line interface built with Clikt, supporting sources, destination, operation mode, and naming templates.
  • Media Processing Pipeline:
    • Parse: A robust MediaFilenameParser to deconstruct filenames.
    • Search: MetadataProvider interface with implementations for TMDB and IMDb.
    • Consolidate: Logic to score and select the best metadata match.
    • Format: A powerful PathFormatter that supports placeholders, padding, and conditional blocks in naming templates.
    • Organize: A FileOrganizer that handles file operations (MOVE/HARDLINK) and directory creation.
  • Platform-Specific Code: Implemented platform-native functions for creating hardlinks on both Linux and Windows.

Documentation & Licensing

  • Comprehensive README: Added a detailed README.md covering features, setup, usage, and custom templates.
  • MIT License: The project is now licensed under the permissive MIT License.

Full Changelog: 0.0.0...0.1.0