mtoc 2.6 introduces a playback history list. quickly access your recent plays, open history and queue by clicking the left and right of the artwork, enqueue your history in reverse order.
11.01.2026 21:59 β π 2 π 1 π¬ 1 π 0@mtoc.app.bsky.social
Visually-rich local music library app for Linux https://mtoc.app Lead developer: @3fz.org https://flathub.org/en/apps/org._3fz.mtoc
mtoc 2.6 introduces a playback history list. quickly access your recent plays, open history and queue by clicking the left and right of the artwork, enqueue your history in reverse order.
11.01.2026 21:59 β π 2 π 1 π¬ 1 π 0Up next in Jan '26: the long-awaited mtoc official website, and a .deb release. More refinements and features to the app to come π΅
01.01.2026 01:14 β π 0 π 0 π¬ 0 π 0Happy New Year! mtoc 2.5.2 ships tonight with two small features: the spacebar now works as a play/pause shortcut, and there's a new option in settings to disable playlists (for those who prefer to keep the UI clean and prevent creation of a playlists directory).
01.01.2026 01:12 β π 1 π 1 π¬ 1 π 0promotional banner for the mtoc 2.5 release. It features a wavy purple background, a screenshot of mtoc (music player app) displaying the library and now playing interfaces, and the text: mtoc 2.5 New in 2.5: - Favorites - Improved drag-and-drop lists - Playlists, Album, and Discography Shuffle options in context menus - Additional bug fixes
New release: mtoc 2.5 with favorites, improved drag-and-drop reordering for queues and playlists, new shuffle options and context menus. Available later today on Flathub.
09.12.2025 22:44 β π 1 π 1 π¬ 0 π 0Coming soon: mtoc 2.5 will include a favorites feature. Click the heart to add tracks to a dynamic playlist. The filled heart is tinted with your system accent color π
04.12.2025 09:03 β π 3 π 1 π¬ 0 π 0Shoutout to all users who submit bug reports and feature requests; community feedback is a critical component of the advancement of open-source software. I try to address issues quickly.
18.11.2025 03:46 β π 2 π 0 π¬ 0 π 0Version 2.4.2, releasing tonight, includes the following updates:
- added split artist parsing for track artists, enabling navigation links to existing album artists from the now playing UI
- enabled scanning of external album art for files that lack embedded art
The 2.4.1 patch is out now. This fixes a bug where a manual track change during the last 2 seconds of a track would result in a crash. This patch also includes support for LRC-formatted synced lyrics embedded as plain text metadata.
13.11.2025 08:18 β π 1 π 1 π¬ 0 π 0Releasing today: mtoc 2.4 with support for multi-artist albums. This update also places the title and artist for your current track in the window title, and introduces performance improvements targeting library scanning and album art processing.
10.11.2025 05:38 β π 2 π 1 π¬ 1 π 0Screenshot of the system tray media player widget on KDE plasma, showing the album art, progress bar, and playback controls. Now playing: Dream Theater, Octavarium
Patch notes: mtoc 2.3.3
- Fixes a bug in the Flatpak build where the album art thumbnails didn't appear in MPRIS system media player widgets.
- Improved case-insensitive artist grouping and search results.
- Light/dark theme now switches without restarting the app when in "system" mode.
This update also enables synchronization between the lyrics highlighting and progress bar position while playback is paused, a small change that you will appreciate if you like to pause the song and move the progress slider to read the lyrics at a given point before resuming.
21.10.2025 04:02 β π 1 π 0 π¬ 0 π 0The system tray icon, previously broken in the 2.3 and 2.3.1 builds distributed on Flathub, is now fixed with the addition of the --talk-name=org.kde.StatusNotifierWatcher permission in the Flatpak manifest.
21.10.2025 04:02 β π 1 π 0 π¬ 1 π 0screenshot of a system tray context menu, showing playback controls, shuffle and repeat toggles, and a playlists menu
mtoc 2.3.2, coming today, includes a new context menu with playback controls and a playlist picker for the system tray.
21.10.2025 04:02 β π 2 π 0 π¬ 2 π 0mini player showing the effect
The result is subtle but creates good contrast at the edges of containers with a variety of contents: important for an interface that's entirely drawn on a "translucent" frosted glass effect. github.com/asa-degroff/...
15.10.2025 12:11 β π 0 π 0 π¬ 0 π 0but no part of the resulting image will actually be black. And since the blur is radial, there is also a subtle rounded effect at the corners, which closely emulates how light passing through a rectangular aperture looks in real life. A simpler linear gradient was tried, but didn't achieve this.
15.10.2025 12:11 β π 0 π 0 π¬ 1 π 0Why create a composition layer 80px larger than the parent and then clip it to size? The blur effect works by averaging colors of neighboring pixels. With the black border being outside of the parent dimensions, black will be smoothly blended in,
15.10.2025 12:11 β π 0 π 0 π¬ 1 π 0ShaderEffectSource { id: textureSource1 anchors.centerIn: parent width: compositionLayer1.width height: compositionLayer1.height sourceItem: compositionLayer1 visible: false live: true hideSource: true } MultiEffect { id: effect1 anchors.centerIn: parent width: textureSource1.width height: textureSource1.height source: textureSource1 blurEnabled: true blur: Math.min(1.0, root.blurRadius / 256.0) blurMax: 64 visible: sourceImage1.status === Image.Ready || sourceImage1.status === Image.Loading opacity: root.currentImageIndex === 0 ? root.backgroundOpacity : 0 autoPaddingEnabled: false Behavior on opacity { NumberAnimation { duration: 300 easing.type: Easing.InOutQuad } } } }
The effect: the composite layer has the blur applied (the blur radius is 64, the code may be a bit sloppy here from past experimentation). The opacity transition is set to 300ms inOutQuad for a smooth look. This effect is purely decorative, so the animation duration doesn't slow down the UX.
15.10.2025 12:11 β π 0 π 0 π¬ 1 π 0Image { id: sourceImage1 anchors.fill: parent anchors.margins: 40 fillMode: Image.PreserveAspectCrop cache: false // Don't cache blurred backgrounds asynchronous: true source: root.image1Source sourceSize.width: 512 sourceSize.height: 512 onStatusChanged: { if (status === Image.Error) { console.warn("BlurredBackground: Failed to load image:", source); } } } }
The album art image: this is then placed on top of the black layer with 40px margins all around (centering it within the black rectangle). The size is capped at 512px (cropped to fit parent aspect ratio) for efficiency (smaller can make it look chunky, but anything larger will get blurred anyway).
15.10.2025 12:11 β π 0 π 0 π¬ 1 π 0// Only create the image and blur effect if we have a valid source Loader { id: imageLoader anchors.fill: parent active: root.source != "" || root.image1Source != "" || root.image2Source != "" z: 1 sourceComponent: Item { anchors.fill: parent clip: true // Clip the overflowing content // Image layer 1 Item { id: imageLayer1 anchors.fill: parent // Composition layer with black padding Item { id: compositionLayer1 anchors.centerIn: parent width: parent.width + 80 height: parent.height + 80 visible: false Rectangle { anchors.fill: parent color: "black" }
Setup: source check, anchor to parent, clip: true. This sets the result to match the size of the parent container.
Composition layer with black padding: this is key to the subtle edge falloff. Another layer is created, 80px larger in both dimensions than the base layer, and filled with black.
// Handle source changes and trigger crossfade onSourceChanged: { if (source != "") { // Update the non-visible layer with the new source if (currentImageIndex === 0) { // Layer 1 is visible, update layer 2 // Clear the old source first to release memory if (image2Source != "") { image2Source = "" } image2Source = source } else { // Layer 2 is visible, update layer 1 // Clear the old source first to release memory if (image1Source != "") { image1Source = "" } image1Source = source } // Toggle to the layer with the new image currentImageIndex = 1 - currentImageIndex } else { // Source is empty, clear both images to show black background image1Source = "" image2Source = "" currentImageIndex = 0 } }
First: why two layers? During animated opacity transitions, both images will be visible for the duration of the transition. This achieves the effect smoothly without transitioning to a solid color in between images. Loading them as two layers and changing the sources makes this easy.
15.10.2025 12:11 β π 0 π 0 π¬ 1 π 0mtoc main window showing the blurred background effect
Code vibe check: blurred background with edge brightness falloff. This effect is used wherever there's a blurred background derived from the album art: separate instances for the library pane and now playing pane/compact now playing bar, and in the mini player. π§΅
15.10.2025 12:11 β π 3 π 1 π¬ 1 π 0mtoc 2.3.1 is releasing today: this patch fixes a bug where newly added lyrics would cause the lyrics display not to update properly when changing tracks, and fixes a bug where playing from the All Songs playlist after adding or removing tracks with the watcher enabled could cause a crash.
15.10.2025 01:40 β π 1 π 0 π¬ 0 π 0Other new features toggleable in settings include:
- minimize to tray when closing the main window
- single-click to play tracks
The new file watcher is implemented using the QFileSystemWatcher class to watch your chosen music directories for changes. Newly added (or removed) music will be automatically reflected in the library - no manual scanning or restarting required.
14.10.2025 00:41 β π 2 π 0 π¬ 2 π 0External lyrics are automatically matched to audio files in the same directory. Exact base file name matches are paired, and fuzzy matching as a fallback finds the closest matching file name to pair lyrics with tracks. To populate your library with lyrics, check out LRCGET:
14.10.2025 00:41 β π 3 π 0 π¬ 1 π 0mtoc supports the standard lyrics tag for unsynced lyrics; embedded synced lyrics are supported using the SYLT standard for MP3 files.
External lyrics, synced and unsynced, are supported using the .lrc standard (.txt will also work). Shoutout to @s20n.dev for the lyrics implementation.
mtoc 2.3 promotional banner featuring a screenshot of the app showing the main window with library and lyrics displayed, "Get it on Flathub" badge, and the following text: New in 2.3 Lyrics: embedded and external, synced lyrics with line highlighting and click-to-seek File Watcher: fast, automatic library updates when adding and removing files from your music directory New Settings Options: minimize to tray, single-click to play tracks
Out today: mtoc 2.3. This update adds support for displaying lyrics, and a new file watcher enabling automatic library updates.
14.10.2025 00:41 β π 2 π 2 π¬ 1 π 0screenshot of the mtoc main window, showing the library and now playing screens
Hello world! This is the official account for mtoc, a music player and library browsing app for Linux. Stay tuned for feature highlights, release notes, and development progress. mtoc aims to create a polished, visually-pleasing music experience with album art in the spotlight. Find it on Flathub.
05.10.2025 05:04 β π 2 π 1 π¬ 0 π 1