Skip to content

0.1.0

Choose a tag to compare

@Hospes Hospes released this 21 Sep 21:00
· 42 commits to main since this release

πŸŽ‰ 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