Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

mtoc.app

@mtoc.app
23 followers 7 following 28 posts

Visually-rich local music library app for Linux mtoc.app Lead developer: @3fz.org flathub.org/en/apps/org._3fz.mtoc

PostsRepliesMedia
mtoc.app @mtoc.app · 11/01/2026
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.
231 3
mtoc.app @mtoc.app · 01/01/2026
Up next in Jan '26: the long-awaited mtoc official website, and a .deb release. More refinements and features to the app to come 🎵
000 0
mtoc.app @mtoc.app · 01/01/2026
Happy 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).
111 1
mtoc.app @mtoc.app · 09/12/2025
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.
promotional 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
011 1
mtoc.app @mtoc.app · 04/12/2025
Coming 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 💜
031 3
mtoc.app @mtoc.app · 18/11/2025
Shoutout 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.
020 2
mtoc.app @mtoc.app · 18/11/2025
Version 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
111 1
mtoc.app @mtoc.app · 13/11/2025
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.
011 1
mtoc.app @mtoc.app · 10/11/2025
Releasing 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.
121 2
mtoc.app @mtoc.app · 27/10/2025
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.
Screenshot of the system tray media player widget on KDE plasma, showing the album art, progress bar, and playback controls. Now playing: Dream Theater, Octavarium
010 1
mtoc.app @mtoc.app · 21/10/2025
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.
010 1
mtoc.app @mtoc.app · 21/10/2025
The 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.
110 1
mtoc.app @mtoc.app · 21/10/2025
mtoc 2.3.2, coming today, includes a new context menu with playback controls and a playlist picker for the system tray.
screenshot of a system tray context menu, showing playback controls, shuffle and repeat toggles, and a playlists menu
220 2
mtoc.app @mtoc.app · 15/10/2025
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/...
mini player showing the effect
000 0
mtoc.app @mtoc.app · 15/10/2025
but 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.
100 1
mtoc.app @mtoc.app · 15/10/2025
Why 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,
100 1
mtoc.app @mtoc.app · 15/10/2025
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.
                ShaderEffectSource {
                    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
                        }
                    }
                }
            }
100 1
mtoc.app @mtoc.app · 15/10/2025
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).
                    Image {
                        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);
                            }
                        }
                    }
                }
100 1
mtoc.app @mtoc.app · 15/10/2025
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.
    // 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"
                    }
100 1
mtoc.app @mtoc.app · 15/10/2025
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.
    // 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
        }
    }
100 1
mtoc.app @mtoc.app · 15/10/2025
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. 🧵
mtoc main window showing the blurred background effect
131 3
mtoc.app @mtoc.app · 15/10/2025
mtoc 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.
010 1
mtoc.app @mtoc.app · 14/10/2025
Other new features toggleable in settings include: - minimize to tray when closing the main window - single-click to play tracks
020 2
mtoc.app @mtoc.app · 14/10/2025
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.
220 2
mtoc.app @mtoc.app · 14/10/2025
External 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:
flathub.org
Install LRCGET on Linux | Flathub
Download synced LRC lyrics
130 3
mtoc.app @mtoc.app · 14/10/2025
mtoc 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.
120 2
mtoc.app @mtoc.app · 14/10/2025
Out today: mtoc 2.3. This update adds support for displaying lyrics, and a new file watcher enabling automatic library updates.
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
122 2
mtoc.app @mtoc.app · 05/10/2025
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.
screenshot of the mtoc main window, showing the library and now playing screens
021 2