Releases: PD-Codes/MediaForge
Releases · PD-Codes/MediaForge
Release list
v1.5.0
- feat: merge catalogue entries that share a TMDB id into one row with a pill per source
- feat: pick which source a merged row downloads from, with a preferred-source default
- feat: show a live match count on each status chip and disable empty ones
- feat: add lots of missing things
- feat: add A-Z jump rail, status filters and sorting to the Catalogue page
- feat: rebuild the catalogue action bar so it stays out of the way on phones
- feat: give the catalogue details modal a backdrop header like the download modal
- feat: let third-party catalogues supply their own source colour
- feat: add a Catalogue page with the full A-Z list of AniWorld and SerienStream [BETA]
- feat: wire filmo.to, 9anime and aniwaves through search, home feed, auto-sync and monitoring and the hole system
- feat: add aniwaves.ru series provider with EchoVideo hoster extractor #24
- feat: add 9anime.or.at series provider with MegaPlay hoster #24
- feat: add Filmo (filmo.to) movie provider and mint-based hoster resolution [Feature - Provider]: Filmo.to #27
- feat: reactions, revocable invites, and a working service worker
- feat: "because you watched" row, and shared skeleton/empty states
- feat: scoped API keys and a generated OpenAPI document
- feat: real dry run, plus provider contract tests
- feat: external worker host, and enforce library scoping
- feat: wire rules, language profiles and maintenance windows into the download path; add error explanations, bulk actions and settings profiles
- feat: operations, audit log, groups, rules and language profiles
- feat: schema migrations, audit log, groups and worker heartbeats
- feat: module-registered content sources reach the search bar
- fix: some fixes
- fix: use a pooled requests session for TMDB instead of a new TLS handshake per call
- fix: correct the relative import depths in catalogue_worker — bulk queue and auto-sync never ran
- fix: treat a merged row as queued, synced or selected when any of its sources is
- fix: load app.js on the Catalogue page so the library check has anything to check against
- fix: make the catalogue status chips filter for a category instead of hiding it
- fix: recompile the German catalog — a merge reinstated an older .mo missing 14 strings
- fix: lots of fixes
- fix: card layout, module settings fields, dynamic search, cross-language duplicate detection; feat: empty-room reaper, gap dismiss, filter dropdowns
- fix: render the missing per-row source label in the merged catalogue list
- fix: show the A-Z rail drag bubble (offsetParent is null while hidden)
- fix: lock body scroll while the catalogue details modal is open
- fix: six reported bugs across home feed, module settings, design defaults and the module modal
- fix: fix style in search suggestions
- fix: worker status, module deactivation, full audit trail and UI defects
- fix: worker status, module deactivation, full audit trail and UI defects
- fix: some modal fixes from previous feat addings
- fix: Show third-party modules' sites in the DNS test, not just UpTime
- fix: make live module registration immune to concurrent requests
- refactor: drop the dead in-memory catalogue cache now that the store owns it
- refactor: split the 6939-line db.py into a domain package
- perf: halve the catalogue id backfill's concurrency and delay its start by 90s
- perf: cache the per-entry library check instead of rescanning on every keystroke
- perf: throttle the catalogue list re-render on window resize
- chore: refresh catalogue lists once a day instead of twice, on a background timer
- docs: document register_catalogue's color parameter and the new page controls
- style: fix bottom of overview cards
- test: run the bulk worker for real instead of stubbing start_job
- test: catch relative imports that point outside the package or at nothing
- test: cover row merging, source picking and both urls of a merged pair
- test: guard that app.js is loaded before catalogue.js
v1.4.3
- feat: adding image hoster allow to module function
- fix: some bugfixes in uptime monitoring system
- fix: stop leaking the install id from the settings page
- style: List View Fixes
- style: wrap the library path in the download modal instead of clipping it
- security: fix docker resolve the HIGH findings that failed the Trivy gate
- security: fix some issues with certificates
v1.4.2
- feat: adding new functions to start page 2, adding more functions to jellyfin/plex connectivity (incl. an "Your Profile"), fix some bugs, adding Feature from #26
- feat: add PyPI dependency preflight before a docker code update
- feat: add POST /api/update/docker-preflight (admin only)
- feat: add detail.docker_code_update telemetry data point
- feat: hide the release banner when that version is already installed
- feat: offer a retry button and readable reasons when comic preparation fails
- feat: announce versions with a release banner and a collapsible changelog box
- feat: link release posts straight to the settings updates tab
- feat: show a non-dismissible home page modal for important dev infos
- fix: bound every generated SQL list to a fixed size & issues on Main Menu Shortcuts
- fix: mobile list rows, integration badges, drop duplicate Auto-Sync path control
- fix: many style fixes, separation for Instance and profile settings and a fix for #26
- fix: refuse a docker code update on a dev install even when no channel is sent
- fix: reject docker code updates on the dev channel and on read-only venvs
- fix: re-read the cache sizes when the library settings tab is opened
- fix: distinguish an unmeasurable cache from an empty one in the settings
- fix: let cached covers revalidate so clearing the cache actually takes effect
- fix: rebuild comic cover URLs after preparation instead of reusing a cached 404
- fix: bump the cover cache-buster even when no card was marked stale
- fix: send no-store on a cover that does not exist yet, for comics and books
- fix: try every available extractor instead of only the first installed one
- fix: fall back to another tool when the peek cannot list a comic archive
- fix: forget circumstantial comic conversion failures after a minute, not an hour
- fix: let an explicit prepare request retry instead of replaying a cached failure
- fix: offer the prepare button when a comic conversion failed for a retryable reason
- fix: clear cover spinners when preparation finishes and only show them where a cover is missing
- fix: detect a finished comic conversion instead of polling a field the API never sends
- fix: restart a lost comic conversion request instead of waiting out the deadline
- fix: stop flagging comics as unprepared once their converted copy exists
- fix: style fix for specific checkboxes
- fix: key dev info read state on the server uid instead of the reusable row id
- perf: prefer the extractor that last succeeded for a format
- docs: document container updates in the README
- docs: document dev info post types in the wiki (EN/DE)
- style: adding flags to language buttons and correct styles. Also adding language as default for new accounts
- style: rework the language availability pills
- style: replace update overlay ring spinner with 9-square fade loader
- test: cover the release-banner suppression rules
- test: cover extractor fallback, promotion and failure-cache behaviour
- security: per-install device credential and signed requests
- security: backup atomicity, telemetry leaks, direct-link SSRF, HLS temp dir
- security: reject pre-release and non-dotted target versions for docker code updates
- security: validate the target version against a strict PEP 440 regex and resolve it server-side only
- security: reject non-http(s) release URLs before they reach an href
v1.4.1
This should fix some Captcha issues
- feat: let _ensure_xvfb report whether a display is actually available
- fix: fail with an actionable message when no X display is available instead of an unreadable TargetClosedError
- fix: guard the hanime browser launch for a missing display, its xvfb call was swallowed by a bare except
- fix: report a missing display as a setup problem, not a crash
- fix: handle a missing display in the interactive captcha solver, which had no generic error branch
- fix: verify Xvfb actually stayed alive before promising a display
- security: strip the Chromium launch command from telemetry payloads, it leaked provider domains including an adult source
- security: log captcha browser failures by reason code instead of the raw patchright message
v1.4.0
- feat: adding Homescreen 2.0 Banner
- feat: add classify.is_transport_failure for the crash channel, sharing the unreachable-server tables
- feat: add MegakinoUnavailable so routes classify by type instead of exception class names
- feat: add a comic library with reader for all common archive formats
- feat: index CBZ, CBT, CB7, CBR, CBA and PDF comics grouped into series and issues
- feat: read series, issue number and credits from ComicInfo.xml, fall back to the filename
- feat: add a comic reader with single and double-page spreads, zoom and fit modes
- feat: queue a cover for every issue, series covers first
- feat: give every comic its own downscaled cover, prepared visibly in the background
- feat: extract a single page from CBR/CBA instead of repacking the whole archive
- feat: downscale covers to 640px WebP (1.5 MB page -> 7 KB cover)
- feat: repack CBR/CBA into a cached CBZ, never touching the original file
- feat: cache comic covers on disk and drop cache entries when the source is gone
- feat: add optional ComicVine enrichment, off by default and rate-limited below the API cap
- feat: add a series/single-issue switch to the comic shelf
- feat: wire comic_auto_prepare_all so it actually converts every issue
- feat: point at the automatic preparation setting from the reader
- feat: prepare comic covers in the background and show that it is happening
- feat: extract one cover per series after a scan instead of never starting
- feat: show preparation progress in the shelf header and on each card
- feat: add a comics settings section for covers, caches and diagnostics
- feat: add a setting for replacing originals after conversion, off and unwired
- feat: split the library into one shelf per media kind
- feat: add /library hub with per-kind tiles and live counters
- feat: add media_kinds column to custom_paths, configurable in settings
- feat: add library sub-menu to the sidebar, planned kinds shown disabled
- feat: let modules register a shelf via register_thirdparty(section="library")
- feat: TMDB backdrop as the title window's header image (in Modal / Beta)
- feat: changes on Start Page 2, Hover Information, module changes with TMDB, integration of OpenSubtitles (free API Key needed)
- feat: add flag.integrations.mediaplayer as its own data point, separate from mediascan
- feat: add telemetry/classify.py as the single place cancellations and unreachable-server errors are classified
- feat: wire up the flag./detail. data points that were registered but never emitted
- feat: let build_play_event emit syncplay.room_content under its own consent toggle
- feat: make the devInfo feature-usage dashboard registry-driven so unwired keys are visible
- feat: jellyfin specific settings added, also some fixes in other settings
- feat: optional absolute episode numbering from the "[Episode NNN]" title marker (aniworld)
- feat: library => read PDF and EPUB in an overlay instead of a browser tab
- feat: adding more library functions and fix: one progress bar for single-file jobs, working accent hex input, no search history on load
- feat: Web Player Overhaul with more options, styles, etc. Also some bug fixes
- fix: some fixed in ebook library
- fix: stop reporting yt-dlp hoster errors as MediaForge crashes
- fix: keep network transport failures out of the telemetry crash channel
- fix: answer 502 instead of 500 in /api/episodes and /api/providers when megakino.to is unavailable
- fix: stop filing telemetry crash reports for megakino.to outages on the remaining two routes
- fix: answer 502 instead of 500 when megakino.to returns an unusable response
- fix: stop filing a telemetry crash report for every megakino.to outage
- fix: handle a truncated JSON body in /api/seasons, which had no upstream branch at all
- fix: for megakino => guard against list-typed API fields in parse_meta
- fix: accept a JSON array in megakino.to fields documented as plain text
- fix: stop one malformed megakino.to record from failing the whole /api/series response
- fix: fixing language
- fix: use a comics-specific translation for "Series" so German reads Reihen, not Serien
- fix: accept kind="comic" for reading bookmarks (was collapsed onto epub)
- fix: group comics by folder and recognise the numbering styles real libraries use
- fix: treat the parent folder as the series name, filename only for number and title
- fix: accept an underscore or dot before a bare issue number
- fix: poll the preparation status immediately instead of 2.5s late
- fix: show the preparing spinner in the single-issue view too
- fix: read a trailing "- 0001" as the issue number instead of a story title
- fix: read a leading number when the title carries its own dash
- fix: decode percent-escaped characters in filenames (H%f6lle -> Hölle)
- fix: take the year out of brackets that also name a publisher
- fix: detect bsdtar when it is installed as "tar", as on Windows 10+ and macOS
- fix: make the whole poster card clickable on the comic and book shelves
- fix: add keyboard activation and ARIA state to poster cards
- fix: prepare comic covers on shelf load, not only during a scan
- fix: queue cover preparation from /api/library?kind=comic so an already scanned library gets covers at all
- fix: read the group preference lazily — calling into library_core.js at parse time aborted the page module and left LIB_KIND undefined
- fix: backdrop and text fix in modal
- fix: home panel storage view fix for Unix and Docker
- fix: home panel hidden queue rows will counts visible only
- fix: assign MEDIA_STATS_ENABLED in its own settings block (was a 500 on probe-worker saves)
- fix: cockpit storage/limits, mobile heading overflow, empty hover drawer, calendar release dates and series detection
- fix: queue keep the home page run strip live
- fix: restore the default home-feed row order and record why the personal rows lead
- fix: style the shared Start Page groups in the home page modal, which does not load settings_rows.css
- fix: never report user-initiated cancellations as crashes or errors
- fix: keep the console silent while the devInfo server is offline or in maintenance
- fix: honour a download cancel in the CLI captcha solver instead of holding the browser open
- fix: reset the push-notification fan-out scope in a finally block
- fix: report flag.self_update after the restart so it survives the process exit
- fix: only arm the v1 API telemetry throttle when an event was actually sent
- fix: some fixes in start page order
- fix: repair Kindle markup, page geometry, chapters and typography
- fix: change aniworld episode changer to correct season, but leave number absolute
- fix: some fixes and addings
- fix: some fixes in book reader
- fix: settings => put Layout first on the Start Page tab and style its subheadings
- fix: some fixes in module management, startpage 2 and some more
- fix: Modules => make CineInfo sources a first-class module capability
- fix: Web Player => a double tap must not leave fullscreen
- fix: Fix a crash when uninstalling a module (also causing an lint error)
- fix: some bug fixes in hanime style, seerr poster responsive, etc.
- fix: fix hanime issues
- fix: hanime search backend moved, and unblock its poster CDN
- fix: sync the German catalogue and wrap the hardcoded strings
- fix: a successful single-episode retry is no longer booked as failed
- fix: harden the transcoder, the workers and numeric settings
- fix: vendor hls.js instead of loading it from a CDN
- fix: watchdog no longer aborts long downloads
- fix: validate library paths before queueing an upscale
- fix: encoding/upscaling no longer deletes the original before the move
- fix: upscale and encoding queue doesnt run at the same time anymore
- refactor: generalise _genres_str into a shared _text coercion helper
- refactor: drop the comic_auto_covers toggle, covers are never optional
- refactor: split library.js/.css into core + video + books modules
- perf: parse the megakino API response once instead of decoding the body twice
- perf: omit empty fields from cached issue rows
- perf: swap in late covers in place instead of repainting the grid
- perf: skip the ffprobe pass on book-only paths and the book pass on video-only ones
- perf: drop the other kind's payload from /api/library responses
- perf: cache the telemetry consent/enabled_keys read instead of hitting SQLite per event
- perf: move SyncPlay session telemetry out of the room and registry locks
- perf: bound the image proxy and collapse concurrent fetches
- perf: pause polling in hidden tabs, add a queue badge endpoint
- perf: SQLite pragmas, batched calendar writes and the missing indexes
- chore: uv lock for py7zr
- chore: drop the orphaned German msgid left behind by the start page rewording
- chore: fix .dockerignore, drop dead folders, complete the docs
- chore: add .gitattributes to fix line-ending noise
- docs: describe all three classification consumers in classify.py's module docstring
- docs: describe the folder-per-series layout in the README and the empty state
- docs: describe the comic library in the README
- docs: describe the per-media-kind libraries in the README
- docs: Update Readme and pyproject.toml
- docs: record that third-party modules never get a telemetry interface
- docs: document what telemetry never reports in PRIVACY.md and README
- docs: state the PR title and language rules in the PR template
- style: theme tokens for status colours, checkbox class, missing breakpoints
- test: guard the page-module/core load-order contract for all three shelves
- test: cover crash-safe publishing, hanime cards and the retry plan
- test: add a pytest suite and wire it into CI
- build: add py7zr for .cb7 and libarchive-tools to the Docker image for .cbr
- ci: change Triage for modules
- ci: consolidate workflows and cut the build minutes
- ci: pin third-party actions to SHAs and harden the workflows
- security: keep response content out of the megakino error message, size and position only
- security: bound th...
v1.3.1
- fix: emergency fix => upscaling and encoding error fix and bump to version 1.3.1
- docs: Remove 'Other Cool Projects' section from README
v1.3.0
- feat: complete overhaul of application and many fixes and changes
- feat: download subtitles from stream too into mkv file
- feat: new statistics page, download duplicate system (better quality download, audio merge), and some bug fixes as usual
- feat: Dev Version is now able to install modules for the future version
- feat: adding themes (templates) to module store and change style of favorites
- feat: add compact view and better bulk edit for auto-sync
- feat: adding more general system information to telemetry for better analysis
- feat: Overhaul design of Auto-Sync Section
- fix: remove deleted .env.example from pyinstaller spec (build issues)
- fix: upscaling issue fix
- fix: watcher system issues fixed (I hope)
- fix: library scan in duplicate check
- fix: subtitle download fixes for every extractor
- fix: some fixes in statistics
- fix: download duplicate better quality fix from previous commit
- fix: .env migration to db (there was something missing)
- fix: Mobile View: When Menu open, the main page will not be scrollable anymore
- fix: fix download system with language maps to one central map instead of multiple ones, also adding information and buttons for developers how they can create and upload own modules/templates
- fix: Fix in Module store after installing an package
- fix: style change of advanced search, some bug fixes (image cache, download abort, rest of files after download abort cleanup, captcha issue after download abort)
- fix: module store fix with unsigned modules
- fix: some missing files in last commit
- fix: workflow fixes
- fix: add missing translation
- fix: complete truncated api_autosync_batch endpoint
- fix: module store doesnt show update
- fix: auto-sync css issues fixed and batch selection function
- chore: update CI workflows (scans, build checks, PR helpers) and improve PR template
- docs: add webplate to readme
- style: fix checkbox style of "Default for Sites"
- style: Theme Module padding was not set correctly
- style: fix media library toolbar to have an better border
- ci: disable trivy secret scanning to prevent false positives from dependencies
- ci: add cross-platform build checks, security scans (CodeQL, Trivy) and PR validation workflows
v1.2.5
- feat: Add System Tray and Autostart support
- feat: show total queue count on main sidebar item
- feat: adding more routes for modular, included now: Provider, Mirrors, notifications, uptime integration (provider)
- feat: new integration for Jellyfin - NFO File Provider
- fix: change notifications from german to english
- fix: 'NoneType' object is not callable
- fix: change seerr modals to use default ones
- fix: some more telemetry stuff for better debugging errors
- fix: [Bug]: NVENC detection fails: hardware probe uses undersized test frame (128x128)
- fix: mediaforge settings title
- fix: add missind card for encoding in settings
v1.2.4
- revert: 4 New providers (due performance issues)
- feat: 4 New providers (WARNING NOT FULLY WORKING)
- feat: adding cineinfo orchestrator to modules
- feat: backup function added
- feat: Library Duplicate Check
- fix: uptime monitor fixes
- fix: Fix Docker Environment with Playwright, that chromium isnt able to write its database because of security locks
- draft fix: some fixes in new providers (not finished)
- fix: some fixes and style changes
- fix: secure custom paths deletion protection and prevent silent fallback
- fix: fixes in styles, Seerr Modals (provider check), backup (backup without password now possible), Confirmation Modals and some more
- fix: adding real issue comment and telemetry info
- fix: test fix of captcha resolve
- fix: fix app restart logic when app is started directly in console with pip
- docs: fix image
- docs: update readme
- style: rework of Menu Style
- style: restyled settings and integrations section
- revert: removing the 4 providers due to too many bugs
v1.2.3
- feat: add ALTCHA proof-of-work captcha support to solver
- feat: add optional debug logging for captcha browser console/network errors
- feat: send telemetry event when captcha solving times out or fails
- feat: adding module sensitive settings and dependency installation
- feat: change module store unverified button to an list where also not checked modules are listed (Attention)
- fix: delay first Turnstile click to let widget settle before interacting
- fix: only steal window focus in visible/manual captcha mode, never in background
- fix: adding button and security routes to install module dependencies
- fix: docker fix for xvfb cleanup
- fix: fix some detection settings