Repository navigation
Releases: TechIdiots-LLC/mediariffle
Releases · TechIdiots-LLC/mediariffle
Release list
MediaRiffle v0.10.0
✨ Features and improvements
- A remux no longer runs far ahead of the player: ffmpeg copied a whole film in minutes and kept every segment
until the stream ended, so a long one needed tens of GB. It is now paused when 3 minutes ahead of the player and goes
on when the player is within 1 minute of what it made, so a stream uses a few hundred MB, however long the film.
(Adaptive streams already did this.) - A full disk no longer takes the server down: a remux copies the whole file as fast as it reads it and keeps its
segments until the stream ends, so a long, high-bitrate one filled a small disk (a container's 16 GB) and the
database stopped working until a restart cleared the files. When free space where streams are written falls below
Transcoding:MinFreeGB(3 GB), the stream using the most is stopped, and no new one starts. An error while checking
the streams no longer stops the server either. - MediaRiffle no longer stays down after a background error: the subtitle preparer hit a database error that
stopped the whole server with exit code 0, which systemd'sRestart=on-failuredoesn't restart, so it stayed down
behind a 503. The preparer now logs such an error and tries again later, and the unit isRestart=always(a
systemctl stopstill stops it). - A hung server restarts itself: on Linux, systemd now restarts MediaRiffle when it stops answering (the unit has
WatchdogSec=120; MediaRiffle sends its keep-alive only while it answers its own/healthz). Behind HAProxy this
ends the 503 that only a restart cleared./healthz(200 while the web server and database answer) is the better
health check than/api/auth/state; docs/reverse-proxy.md uses it. - A stuck ffmpeg no longer holds a stream: when the encoder for a stream made no segment in a minute, it is
stopped, and the player's next request starts a new one, instead of waiting on the stuck one for as long as the
stream is open.
🐞 Bug fixes
MediaRiffle v0.9.0
✨ Features and improvements
- Updating from Admin: Admin → Updates shows newer releases with their notes and updates to the newest with one
button, on installs from the.deb(Ubuntu, Debian, the Proxmox template) and the Windows installer. An updater
with the rights MediaRiffle hasn't got (root'smediariffle-update, the SYSTEM task "MediaRiffle Update") downloads
the release from GitLab or GitHub, checks it against the release's newSHA256SUMS, saves the database, installs
it, and goes back to the old version (and database) if the new one doesn't start. Never to an older version. The
first release with it is installed by hand; see docs/updating.md. Settings:Updates:Source,Prereleases,
CheckHours. - A reordered home page: Libraries come first, then Categories, My lists and Continue watching (with ★ Favorites
last). Continue watching is a single row that scrolls sideways, showing the 20 most recent. - More room at 1080p: its peak is 10 Mbit/s (was 8), and
Transcoding:MaxVideoKbpsdefaults to 10000 to match,
for film grain and dark scenes (VA-API averages 7.5 Mbit/s, was 6). A settings file that setsMaxVideoKbps
keeps its own; an upgrade no longer carries the old program folder's 8000, which was only its default. - Auto follows the player's size: it doesn't stream more than the picture is shown at (a small window plays a
smaller level), and going full screen steps up within seconds when the connection allows, instead of after what
was already buffered plays out. High still always aims for the best. - 1080p High: a second 1080p level at 14 Mbit/s, for a fast connection such as a home network, when
Transcoding:MaxVideoKbpsis 14000 or more. Auto steps up to it when the connection carries it; a slower one
stays on 1080p. 1440p is now 16 Mbit/s (was 14), so each level has more bits than the one below it.
🐞 Bug fixes
- Player fixes (!26) (@acalcutt)
- Clicking Next quickly no longer leaves an old video playing: moving on while a video was still starting could
leave its sound playing under the next one until the page was reloaded (the old player started its stream after
it had been closed, on a video no longer on the page).
MediaRiffle v0.8.0
✨ Features and improvements
- Full screen on a phone: a ⌄ button hides the controls without pausing; with them hidden, a tap brings them
back instead of also pausing the film; and they fade by themselves again after a tap (the last control tapped stayed
"hovered" on a touch screen, which kept them up). The 🚫 button that hides a video is just its icon now, as
"Hide" written out was taken for hiding the controls. - Blu-ray (PGS) subtitles without converting the video: they're drawn by the browser over the picture (libpgs),
so turning them on or off never restarts the stream and a 4K file keeps playing as it is. Subtitle tracks are
extracted ahead of time in the background (all of a file's in one read, newest files first, only while nothing is
streaming) and kept, up toSubtitleCacheGB, so turning one on is instant; text subtitles of a big file no longer
take minutes the first time either. DVD subtitles, and any picture subtitles on a TV, are still burned in.
PrepareSubtitlesturns the preparing off. - A 1440p level, between 1080p and 4K:
"MaxHeight": 1440(with"MaxVideoKbps": 16000) offers it,2160both.
For a GPU that can't convert 4K in real time but can to 1440p (an Intel Arc A380: 1.2x from a 60 Mbit/s 4K HDR
disc rip, against 0.6x to 4K); Auto only steps up to it while the encoder keeps ahead. - Changing stream without stopping: picking a quality, an audio track or an image subtitle, and Auto moving
between the file as it is and the converted stream, used to stop playback and show Loading… while a new stream
started. Now the new stream starts in the background, a few seconds ahead, while the old one keeps playing, and
takes over once it has the next few seconds ready: no pause. (Paused, casting, AirPlay and the last seconds of a
file change the plain way.) - Bring back lists, favorites and watch history after a move:
deploy/export-user-data.sql(run on the old
database, in DB Browser for SQLite or sqlite3) makes an import script for the new one;deploy/carry-user-data.sql
does it in one step with both databases at hand. They carry them from an
old database into one whose libraries were scanned afresh (moved to a new server, or a library's folder changed in
Admin), matching shows, movies, music and files by what they are rather than by id. See docs/proxmox.md.
🐞 Bug fixes
- Carry user data (!24) (@acalcutt)
- docs/proxmox.md: moving an install in, upgrading, HAProxy, as tippr's (!23) (@acalcutt)
- The end of a film is the end: a stream that fails in the last 20 s (or last 1% of a long film), as a file's
stated length can run past what there is to play, now counts as finished (saved as watched, on to the next
episode) instead of a playback error, or a new stream started at the very end. It finishes once, too, so a play
queue never skips one. - Quick Sync streams kept their segments and clock in step: Intel's encoder ignored the forced keyframes every 4 s
without-forced_idr, keeping its own 256-frame GOP, so segments came out 10 or 21 s long against a playlist of 4 s
ones. The stream's clock drifted from the file's, and near the end a film could run on past its length or stop with
a playback error. - Play works after a long pause: a video paused overnight (the computer asleep, so the player's "still here" never
reached the server, which stopped the stream as idle) couldn't be started again without reloading the page. Play
after a pause of over a minute now checks the stream is still there and, if not, starts a new one from the same
place. A stream that fails while paused is replaced at the next Play rather than at once (where it would go idle
too), recovery re-arms instead of giving up after one try, and the file played as it is recovers too. - Auto stops returning to a 4K original that stalls: once the file as it is stalls on a device (a 60 Mbit/s
disc rip, say), Auto remembers it there for 30 days, starting on the adaptive stream and not stepping back up to
the original every two minutes, which made playback stall and switch quality over and over. Original from the
menu still plays it. - 4K HDR on an Intel Arc (VA-API) converts at 1.7x real time: the GPU now decodes and scales it, and only the
1080p frames are copied back for libplacebo and encoded on the GPU again. Handing VA-API's 10-bit frames straight to
Vulkan crashed on Arc with Ubuntu 24.04's Mesa, so HDR fell back to the CPU and couldn't keep up. The startup
libplacebo check waits long enough for a first run's shader compile (it gave up after 30 s), and with VA-API, HDR
decoded on the CPU is tone-mapped with libplacebo too rather than zscale.
MediaRiffle v0.7.0
✨ Features and improvements
- Proxmox LXC template: each release has
MediaRiffle-v<version>-proxmox-amd64.tar.zst, Proxmox's Ubuntu 24.04
template with MediaRiffle, ffmpeg and the Intel/AMD GPU drivers installed, listening on port 5080; a container made
from it sets itself up at first boot (port and trusted proxies from/etc/mediariffle/firstboot.env). Built and
boot-tested by the release pipelines (GitLab's on the Linux runner). See docs/proxmox.md, which also covers passing in
a media share and the host's GPU. - Decoding on the GPU: with a GPU encoder (
Qsv,Vaapi,Nvenc), video is decoded and scaled on that GPU too,
so the picture never leaves it: a 4K file converted about 3.5 times faster on an Intel laptop's GPU. WithVaapi
(Linux), HDR and Dolby Vision are tone-mapped there with libplacebo, through Vulkan. What the GPU decodes is found
out at start and logged; anything else, a stream the GPU fails on, and burned-in subtitles are decoded on the CPU as
before.Transcoding:HardwareDecodingturns it off. See docs/configuration.md. - Play in VLC: under the player, Play in VLC… opens the file as it is in VLC, from where you are (on Android and
an iPhone or iPad the VLC app opens; on a computer a small .m3u playlist is saved, or copy the link into VLC's Open
Network Stream). VLC decodes everything itself (4K HEVC, HDR, Dolby Vision, TrueHD), so the server only reads the
file. The link carries its own key, works for 24 hours, and isn't offered to an account with a quality cap. - Smoother 4K played as it is: the browser keeps less of what's already played of a high-bitrate stream, so its
limited room goes to what's ahead.
🐞 Bug fixes
- Av sync (!20) (@acalcutt)
- The Cast button shows again: Google's own button hid itself until Chrome had found a Chromecast. The player
and the music bar now have a Cast button of their own, always there in Chrome and Edge (on HTTPS), which opens
Chrome's Cast dialog and reads "Casting" while casting. "Watching on a TV…" moved out of the controls, under the
player with Play in VLC…. - Sound out of sync after a seek, resume or subtitle change: a file played as it is (copied video, as 4K HEVC
is) and started part-way through had its sound a second or more early, and text subtitles late. Copied video
starts at a keyframe before the time; the sound now starts there with it, and the player's clock knows where.
(Seeking to that keyframe itself had made ffmpeg land on the one before it.)
MediaRiffle v0.6.2
✨ Features and improvements
- Dolby Vision, and better HDR tone mapping with libplacebo: when the server's ffmpeg has libplacebo and a Vulkan
GPU works (checked at start), converted HDR is tone-mapped with it on the GPU, applying Dolby Vision's metadata, and
HDR10 looks more natural than with zscale. Dolby Vision profile 5 (streaming services, web rips), which has no
ordinary picture underneath and showed dark and green or purple, is never sent as it is any more: it's converted.
Profiles 7 and 8 still play as the HDR10 they carry.Transcoding:UseLibplaceboturns it off. See docs/configuration.md.
🐞 Bug fixes
- Dolby vision (!18) (@acalcutt)
- Auto quality settles down: it kept switching levels on files the server converts at only a little faster than
they play (4K HDR, often). Waiting for ffmpeg to make a segment no longer counts as a slow connection, Auto no longer
steps up to a level ffmpeg can't keep up with (it tries again after 10 minutes), steps up only with plenty of room,
and stays on a level 20 s before stepping up from it. Safari's own player and a Chromecast pick levels as before.
MediaRiffle v0.6.1
✨ Features and improvements
- Change your password under Profile → Password (the current one first, and with two-step verification set up, a
passkey or code too; your other devices are signed out, this one stays signed in). - Password reset links: Admin → Users → Reset password makes a one-time link (good for 24 hours) for someone who
forgot theirs; they open it and choose a new password, so the admin never knows it. It signs them out everywhere
else and lifts a lockout. - Profile pictures: everyone starts with a built-in cartoon picture (a llama, a sloth, a taco, …) their account
picks, and can choose another or use their own photo (cropped and shrunk in the browser; iPhone photos work) under
Profile. It shows beside your name, under Switch user, and in Admin → Users. - Delete or rename a list: on a list's page, Delete list takes everything off it at once (it all stays in the
library), and Rename gives it a new name (an existing list's name puts the two together). Favorites can be cleared. - Take something off Continue watching: an × on each one there. It isn't hidden: the place is kept, and watching
it again puts it back.
🐞 Bug fixes
MediaRiffle v0.6.0
✨ Features and improvements
- Full screen stays full screen from one video to the next: Next, the play queue moving on, a media key or a voice
assistant's "next track" (e.g. through Home Assistant) no longer drops out of full screen. Each new one shows its
title (and its place in the queue) over the picture for a few seconds, and a queue's countdown to the next one shows
there too. - Hide from the player: a Hide button in the player's controls (full screen or not) hides the episode (or movie)
for you and goes on to the next one. Coming from a play queue, the title and its place in the queue show over the
picture for a few seconds, full screen or not. - The player fits the screen, from a phone to 4K: on a large screen the picture grows to fill its height (the
player's page isn't held to 1400px wide any more), and the controls' text grows a little to stay readable. On a phone
the picture runs edge to edge, the controls wrap in tidy groups (quality, audio and subtitles on a row of their own),
and the height is right in iPhone Safari (its toolbars are no longer counted). iPhone and iPad, which only take the
volume from their buttons, show just Mute. - Preferred video quality: each user picks how Auto plays under Profile → Video quality: Auto (by the
connection), High (the best first), Medium (up to 720p) or Low (up to 480p, to save data). An admin can set it as a
user's default under Admin → Users → Default quality, beside the Best quality cap, which still wins. - A Back button in the top bar, beside the name (phones and the home-screen app have no browser back to tap): back
to the page before, or home when MediaRiffle was opened straight onto this one.
🐞 Bug fixes
- Player: Hide outside full screen too; fits the screen from a phone to 4K (!14) (@acalcutt)
- Player: full screen across videos, Hide, preferred quality; a Back button (!13) (@acalcutt)
- Two-step: adding a method asks for one you already have (!12) (@acalcutt)
- Upgrades keep settings left in the program folder (!11) (@acalcutt)
- Scroll top (!10) (@acalcutt)
- Skip back and forward are both 10 seconds (forward was 30), on the buttons and on media keys.
- The volume slider reaches 100%: sliders were styled like text boxes, so the track ended short and full volume
looked like about 90%. - Pages open at the top: going to a show (or any page) after scrolling another one opened it as far down as the
last one was scrolled. - Upgrades keep settings left in the program folder: settings put in the program folder's
appsettings.json
(rather than%ProgramData%\MediaRiffle\appsettings.jsonor/etc/mediariffle/appsettings.json) were lost when an
upgrade replaced it. The Windows installer, the.debandinstall.shnow save it first, and the new version
carries whatever wasn't a default (Google sign-in, trusted proxies, …) into the settings file, which wins where it
set something itself (backed up first). That file no longer lists the defaults, and the log warns at start about
settings left there. - Adding a two-step method asks for one you have: with a passkey or authenticator set up, adding another (or
removing one, or new recovery codes) wants a check with an existing one in the last 10 minutes; the hours-old check
that keeps Admin open was enough before, so a session left open could add its own passkey.
MediaRiffle v0.5.1
✨ Features and improvements
- Switch user: everyone signed in on a device (with "Keep me signed in") is listed under your name → Switch user
and on the sign-in page, to switch between without a password, like Google accounts or Netflix profiles. Add another
account from there; sign out one or all. An account can ask for a PIN before others switch into it (Profile → Switch
user PIN). Admin still asks for its own two-step check after a switch. See docs/configuration.md. - Two-step verification for Admin: Admin asks for a passkey (Face ID, Touch ID, Windows Hello, a phone or a
security key) or an authenticator app's code (Apple Passwords, Google or Microsoft Authenticator, 1Password, …), once
every 12 hours. An admin without one is walked through setting it up the first time they open Admin, ending with ten
one-time recovery codes. Manage passkeys, the authenticator and recovery codes under Profile; another admin can reset
someone's under Admin → Users. Signing in itself is unchanged. See docs/configuration.md. - 4K transcodes: a 2160p level (H.264 at about 25 Mbit/s) for Auto and the quality menu, when the server allows it
(Transcoding:MaxHeight2160,MaxVideoKbpsabout 30000; best with a hardware encoder). For browsers that can't
play a 4K file's HEVC as it is, and 4K Chromecasts. The quality menu now lists only the levels a file can have. - HDR tone mapping: HDR video (HDR10, HLG) converted to H.264 is tone-mapped to ordinary colours instead of
looking washed out. Needs ffmpeg's zscale filter, which most builds have (the log says if not);
Transcoding:ToneMapHdrturns it off. See docs/configuration.md.
🐞 Bug fixes
- 4K transcodes and HDR tone mapping (!8) (@acalcutt)
- Switch user: accounts signed in on a device, with an optional PIN (!7) (@acalcutt)
- Admin two-step verification (passkeys / authenticator app), and shows with several series (!5) (@acalcutt)
- A show's other series are told apart: season folders named for another series of the show (
UK - Season 01,
All Stars - Season 02,Down Under - S01,Global All Stars Season 01) used to be merged into the show's own
seasons by the episode numbers in the file names. Each is its own series now, and files loose in the show's folder
named for another series (drag.race.espana.s01e01.mkv) are too. A show with several picks the series first, then
its seasons; Play all and the next episode go series by series, the show's own first. Episodes already in the
library are filed again at the next scan, without reading the files again. - Episode thumbnails stay in their place: a frame was shown at its full size and covered the episode's title.
MediaRiffle v0.5.0
✨ Features and improvements
- License: MediaRiffle is released under the BSD 3-Clause License, copyright TechIdiots LLC.
LICENSEships
with every package (in the program folder, and as/usr/share/doc/mediariffle/copyrightin the.deb). - Sign in with Google: link your Google account under your name → Profile, then sign in with it instead of your
password. Google only signs in accounts that linked it; people still join with invites. Off until an admin sets
MediaRiffle:Google:ClientIdandClientSecret(see docs/configuration.md). - A menu under your name in the top bar, with Profile and Sign out.
- Music libraries: a new library kind, browsed by artist, album and track. Songs are filed by their tags (album
artist, album, disc and track number, year), or byArtist/Album/01 - Titlefolders and names; tracks with
different artists and no album artist make a "Various Artists" compilation. Play all and Shuffle work on a library,
an artist, an album or a category, and picking a track plays the album from there. MP3, AAC and WAV (and FLAC and
Ogg where the browser plays them) are sent as they are; anything else is converted to AAC once and kept. Cover art
fromcover.jpg/folder.jpg, else the picture inside the files. See docs/configuration.md. - Music keeps playing while you browse, in a player bar at the bottom of every page (cover, title, previous /
play / next, seek, close), on the lock screen and media keys too. Now playing shows it bigger, with the queue to
jump around in. The playing track is marked on its album page; after a reload the music is back, paused where it
was. Starting a video closes it. - Music on a Chromecast: the player bar's Cast button sends the queue to the TV, which plays through it itself
(on with the phone asleep); the bar and Now playing follow and control it, and stopping casting brings the music
back, paused where the TV was. The TV fetches songs and covers from 24-hour links that carry their own key, as it
can't sign in. FLAC and Ogg go to it as they are. - Favorites, lists and hiding for music: artists, albums and single songs go in Favorites and your lists (a
song's ☆ on its album page, or its lists on Now playing); a list of songs is a playlist, played in the order they
were added, and a song can be taken out with ×. Artists, albums and songs can be hidden like shows and episodes. - Hide what you don't want to see: a Hide button on a show's or movie's page, on each episode, and while playing.
Hidden things stay listed, greyed out (Unhide brings them back), but are left out of Play all, Shuffle (categories,
lists, libraries and shows), Continue watching and the next episode. Only you see what you hid. Profile → Hidden
lists everything you hid, to open or unhide in one place.
🐞 Bug fixes
MediaRiffle v0.4.0
✨ Features and improvements
- Favorites and your own lists: a ☆ Favorite button and an "Add to a list…" box on a show's or movie's page (and
while playing one). Everything you tag the same way is one of your lists, to browse, play through or shuffle like
the admins' categories; only you see them. The home page shows your Favorites and your lists. They go with the show
or movie when it leaves the library, and with the account. - Auto quality is adaptive streaming, as on streaming sites: the player (hls.js, or Safari, a Chromecast or an
AirPlay receiver itself) times each segment's download and moves between 1080p, 720p, 480p and 360p segment by
segment, down as soon as the connection can't keep up and back up when it can, without restarting. The server makes
only the level being watched, from where it's watched, one ffmpeg per viewer, replaced when the player switches or
seeks. When the connection clearly has room for the file as it is, Auto still plays that (no transcode), and moves
to the adaptive stream when it stops keeping up (seen from the buffer running down, before it runs out). - Seeking a transcode is instant within what's been made, and anywhere else no longer restarts the stream: picked
levels are adaptive streams of one level. - Admin → Users: change a user's role, viewer to admin or back, from the Role column. Your own role can only be
changed by another admin. The change reaches the user's open sessions within a minute, without signing in again.
🐞 Bug fixes
- A paused player keeps its stream: it used to be stopped as idle after 90 seconds, so playing again failed. A
stream that goes away anyway (e.g. the server restarted) is started again where it was. - Cast no longer throws an error when the browser says it can cast but Google's Cast framework didn't load.