Files
media-sort/CHANGELOG.md
T
2026-09-30 23:06:14 -04:00

12 KiB
Raw Blame History

Changelog

All notable changes to the Media Sorter project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.1.0] - 2026-09-07

Added

  • Robust Long-Running Anime Tokenization & Season/Episode Extraction:
    • Full support for 4-digit episode numbers (\d{1,4}) across standard TV tags (S01E1171) and standalone episode prefixes (EP1171, E233).
    • Added support for anime releases with episode titles ([Anime Time] One Piece - 0233 - Episode Title [Tags]), space-separated formats ([HatSubs] One Piece 1073...), and underscore formats ([Kaerizaki-Fansub]_One_Piece_1076...).
    • Parent directory season extraction (Season 08 - Water Seven) scanning ancestor paths from closest to farthest while ignoring system root folders.
  • Natural Ordering & Web UI Auto-Detection:
    • Implemented natural_sort_key in Python and naturalCompare in JavaScript so episodes never get misaligned or sequentially numbered out of order.
    • Added "Auto-Detect from Filenames" button in the manual batch modal to immediately pull true season and episode numbers directly from file names.
    • Increased episode numbering limit to 9999 to support long-running anime like One Piece.
    • Fixed clean_detected_show_name to preserve year-like numbers (1900-2099) in movie and series titles (e.g. Blade Runner 2049).
  • Manual Batch Sorting & Library Management:
    • Added POST /api/files/manual-sort-batch and POST /api/library/clear endpoints.
    • Added floating multi-file selection bar and 2-step manual batch sorting overlay modal.

[1.0.7] - 2026-09-05

Added

  • Library Catalog & Show/Movie Management (📚 Library):
    • Added a dedicated top-level 📚 Library view with full catalog tracking of all indexed shows and movies across storage drives.
    • Interactive selector buttons to switch between 📺 Shows, 🎬 Movies, and 📂 All, with live count badges.
    • Real-time instant search input to filter titles as you type.
    • Disk scanning synchronization (POST /api/library/rescan) that indexes directory trees, episode counts, seasons, and technical metadata.
    • Persistent database tracking via LibraryItem table model with unique constraint protection and last-updated tracking.
  • Automatic Show Memory Routing:
    • Whenever a new show is detected or sorted, it is automatically cataloged in the Library.
    • When inspecting downloads or analyzing files, media sorter queries known shows from the library and automatically routes incoming media (such as extras, behind-the-scenes, specials, and unbracketed files) into that show's folder (SHOWS_DIR / <Show Name>).
  • Unsure File Grouping Dropdowns:
    • Automatically clusters non-show files into dedicated collapsible dropdown cards instead of dumping them into a flat singles list:
      • Shared Subfolder Groups: Files sharing a common subfolder in downloads form their own group card (e.g. 📁 Shared Subfolder: Dexter Extras (5 files)).
      • Matching Name Prefix Groups: Files sharing a common clean title stem or prefix form their own group card (e.g. 🏷️ Matching Name Prefix: Blood, Guts and Body Parts (2 files)).
      • Only truly lone, isolated files remain in the singles media list.
    • Group action buttons:
      • ⚡ Sort Group: Sorts all files in the group directly via POST /api/files/sort-group.
      • ✏️ Set Show/Movie for Group: Opens the manual assignment modal for the entire group, allowing one-click bulk categorization to Movies or TV Shows.
  • Group Sorting Endpoint (POST /api/files/sort-group):
    • Server endpoint that batch-processes unsure groups of files with show name override or movie destination formatting, atomic movement, and automatic library catalog registration.

Fixed

  • Anime Fansub Adjacent Brackets Regex:
    • Fixed RE_ANIME_RELEASE regex to support adjacent bracket tags without spaces (e.g. [Erai-raws] Bleach - 001 [1080p][MultiSub][EF0AF7BA].mkv), ensuring anime episode fan releases are accurately classified.
  • Prevent Anime Episode Matching into SxxExx:
    • Added negative lookahead (?![xX\w]) to prevent episodic titles like Game of Thrones - 1x09 - Baelor from prematurely matching 1 as an anime episode instead of Season 1 Episode 9.
  • Fast Local Artwork & Responsive Downloads Inspection:
    • Updated fetch_show_poster with allow_network=False during folder inspection so downloads scanning completes in under 2 seconds rather than stalling on synchronous external network queries.

[1.0.6] - 2026-09-05

Added

  • Targeted Show Sorting (POST /api/files/sort-show):
    • The "⚡ Sort Now" button inside any show's dropdown card in the Downloads Folder Explorer now targets that specific show directly.
    • Sorts all episodes of that show into SHOWS_DIR / <Show Name> / Season XX / ... with full transaction tracking, database history, and instant rollback support.
    • Interactive UI with button loading spinner (<span class="loading-spinner"></span> Sorting...), disabled state during execution, success toast with count of sorted episodes, and automatic UI refresh.
  • Standalone Episode Pattern Recognition:
    • Added support for standalone Episode \d{1,4} and Ep \d{1,4} patterns (e.g., Naruto Episode 207 The Supposed Sealed Ability.mkv, Bleach Episode 05.mkv).
    • Added support for anime/fansub series formatting without release group prefixes (e.g., BLEACH꞉ Sennen Kessen-hen - 27 E89717B7].mkv).
    • Added support for anime opening/ending patterns (S03ED01, S03OP01).
  • Interactive Button Loading States:
    • Added loading spinner and disabled state to ⚡ Run Sort Now (Live), ⚡ Sort All Files, and show-specific ⚡ Sort Now buttons to prevent duplicate runs and give immediate visual feedback.

Fixed

  • Show "Sort Now" Button Doing Nothing:
    • Fixed issue where clicking "Sort Now" inside a show dropdown appeared to do nothing because episodic shows like Naruto were failing tokenizer matching, getting classified as low-confidence movies, and being quarantined (which were flagged but not moved).
    • Fixed button calling global sorting instead of targeted show sorting.
    • Fixed run results panel being hidden on Dashboard tab when viewing Folder Explorer tab.
  • MKV Video Containers Misclassified as Audio/Music:
    • Fixed bug where video containers (.mkv, .mp4) containing audio streams were routed to audio-only classification if lightweight EBML header parsing didn't match a hardcoded video codec string.
    • Reordered classifier pipeline so video containers and extensions are always checked as videos first before audio-only handling.
    • Expanded EBML video track detection in _parse_ebml to recognize generic V_ track headers (including VC-1, DivX, XviD, and MPEG2).

[1.0.5] - 2026-09-05

Added

  • Quarantine Top Action Buttons & Bulk Controls:
    • Action buttons at the top of the Review & Quarantine header for immediate manual actions: 🎬 Move to Movies, 📺 Move to Shows, ✏️ Set Show/Movie, ↩️ Unflag, and ↩️ Undo All Resolved.
    • Multi-item selection checkboxes with header Select All / Deselect All toggle and live selection count tracking.
    • Selection toolbar that adapts dynamically based on checked items for bulk execution.
    • Backend bulk endpoints:
      • POST /api/quarantine/bulk-resolve: Bulk moves selected or all pending quarantine items to Movies or TV Shows inside a fast transaction.
      • POST /api/quarantine/bulk-undo: Bulk unflags pending items or rollbacks all resolved quarantine files back to original source directories.
  • Manual Modal File Switcher:
    • Added file picker dropdown inside modal-manual-sort when multiple quarantine items are available, enabling switching between items without reopening the modal.
  • Automatic Folder Explorer & Queue Refresh:
    • Automatically re-scans and refreshes the Downloads Folder Explorer (loadFiles) and Quarantine queue (loadQuarantine) immediately whenever sorting runs (live or preview) or batch rollbacks complete.
  • Granular & Global Undo Actions:
    • Added ↩️ Undo All Resolved button to easily restore all resolved quarantine files to their source folders.
    • Per-item unflagging for pending items and per-item rollback for resolved items.

Fixed

  • False-Positive TV Show Classifications for Movies:
    • Resolution Dimensions: Filenames containing dimensions like 1920x1080 or 1280x720 no longer falsely match episodic TV season/episode regex (20x108, 80x720). Added negative lookbehind/lookahead and resolution fallback parser RE_DIMENSIONS.
    • Release Years in Torrent Tags: Anime release regex pattern no longer treats 4-digit release years (1900–2099) in bracketed torrent tags (e.g., [YTS.MX] Movie Title - 2024 [1080p].mkv) as episode numbers.
    • Broad Substring Match: Replaced broad "tv" in path_str check with directory boundary regex (?i)[/\\](?:tv[/\\]|tv[-_\s]shows?|tv[-_\s]series|season[-_\s]*\d+), preventing movies with HDTV, [rartv], or Apple.TV from routing to TV show logic.
    • Folder Explorer Subdirectories: Fixed downloads inspector so scene/torrent movie subfolders (e.g. The.Dark.Knight.2008.1080p.BluRay/) are not misidentified as TV show names; movies now properly appear under singles targeting MOVIES_DIR.
    • Release Group Cleaning: Updated _clean_title to cleanly strip leading bracketed group tags (e.g., [YTS.MX], [rarbg], [TGx]).
  • .txt Companion Cleaning & Explorer Filter:
    • Excluded .txt companions (e.g., torrent notes, RARBG.txt) from the folder explorer.
    • Automatically cleans up companion .txt files and empty parent release folders when media files are deleted or organized.
  • Safe Quarantine Mode:
    • Flagged files with confidence below threshold remain in place safely rather than being automatically moved.
  • Missing Module Import:
    • Fixed missing import re in src/media_sorter/classifier.py.

Changed

  • Unified Settings and .env configuration into a single coherent dashboard tab.
  • Expanded automated test suite to 65 tests covering movie dimension tokenization, bracketed release years, HDTV classification, folder explorer movie detection, and bulk quarantine APIs.

[1.0.4] - 2026-09-05

Added

  • File renaming toggle (RENAME_FILES) and customizable naming templates for movies and TV shows (MOVIE_TEMPLATE, TV_TEMPLATE).
  • Automatic cleanup of empty parent directories after files are moved (CLEANUP_EMPTY_DIRS).

[1.0.3] - 2026-09-05

Added

  • TV show dropdown aggregation in downloads folder explorer with collapsible season groups.
  • Local artwork and TVmaze poster lookup for series.

[1.0.2] - 2026-09-05

Added

  • Instant batch rollbacks and transactional operation journaling.
  • Manual file categorization modal and REST API endpoints.

[1.0.1] - 2026-09-05

Added

  • Multi-signal classifier supporting audiobooks, podcasts, home videos, and archives.
  • SQLite WAL operation journaling.

[1.0.0] - 2026-09-05

Added

  • Initial release with atomic file sorting, dry-run simulation, and web dashboard.

[1.0.8] - 2026-09-06

Added

  • Added missing custom themes: neon-forest, retro-retro, golden-sand, deep-space, candy-cotton.
  • Implemented RGB Chroma mode UI with toggle and speed slider, keyframe animations, and persistence via localStorage.
  • Added unit tests for theme availability and RGB feature.

[1.0.9] - 2026-09-06

Added

  • Implemented .rgb-mode CSS class with keyframe animation for chroma glow.
  • Updated project version to 1.0.9 across metadata.

Fixed

  • RGB visual effect was missing, now correctly applied.
  • Version numbers were out‑of‑sync between pyproject.toml and package __init__.

[1.0.10] - 2026-09-06

Added

  • Updated README with section on using the Antigravity bot via Direct Messages.
  • Added no‑cache HTTP headers to ensure version badge updates reliably.

Changed

  • Bumped project version to 1.0.10 in pyproject.toml and package __init__.

Fixed

  • Version numbers now stay in sync across metadata files.