Skip to content

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 17:45
· 109 commits to main since this release
  • 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 the depth of the megakino.to text coercion against hostile nesting
  • security: strip userinfo credentials from URLs before they can reach a telemetry payload
  • security: withhold direct_link.urls and syncplay.room_content when the origin provider cannot be determined
  • security: proxy awareness, cross-site guard, SyncPlay guest scope
  • security: close the SSRF gaps in the two proxies
  • security: one shared, quote-safe HTML escaper for the whole frontend
  • security: admin-gate the integration settings and stop returning secrets
  • security: always verify TLS certificates, drop the first-party exemption