lyswhut/lx-music-desktop
38.1
Weak · 28 September 2026
67.1k
lines of production code
JavaScript
with TypeScript
3
measurements over time
What this system is
This system is a desktop music player application built on Electron and Vue 3, designed to aggregate and play audio from multiple third-party streaming sources. It provides comprehensive local library management, including playlist organization, song downloading with metadata embedding, and a 'dislike' list to filter unwanted content. The application features a highly customizable interface with desktop lyrics, audio visualization, and sound effects, alongside client-server synchronization for cross-device data consistency.
How it got here
2019–2022 — Vue 3 migration and v2.0 architecture
106 changes.
The project underwent a comprehensive migration from Vue 2 to Vue 3, restructuring the renderer, main process, and build system to support the Composition API and Webpack 5. This period established the v2.0 configuration schema, introduced a standalone desktop lyrics window, and expanded music source support with new SDKs for Kuwo, Baidu, and Migu. The work culminated in the announcement of maintenance mode, directing users to the successor project Any Listen.
2023–2024 — Sync infrastructure and audio processing
15 changes.
This period focused on building a robust synchronization system with dedicated client and server modes, including device authentication, playlist management, and a new dislike list feature. Concurrently, the project introduced advanced audio processing capabilities, such as high-quality pitch shifting, equalization, and convolution reverb, alongside expanded API support for external player control and lyric parsing.
Features
Added BlankView component for search results display
The Search view now includes a new BlankView component that renders the search interface when no results are found. This component displays hot search suggestions and search history based on user settings, allowing users to click on items to initiate searches. It also provides functionality to clear search history and includes styling for the empty state display.
src/renderer/views/Search/components · high confidence
Added Chinese character pronunciation data and parser
The application now includes a comprehensive pronunciation dictionary for 8,105 Chinese characters based on the 'General Standard Chinese Character Table' (2013). This capability is enabled by a new parser script that processes raw phonetic data into a structured JSON format, allowing the system to resolve character pronunciations programmatically.
(repo-wide) · high confidence
Added cursor bubble and snow visual effects
New visual effects have been added to the application: a bubble cursor effect that renders animated particles following mouse or touch movement, and a snowfall effect that displays falling white particles across the viewport. These are implemented in new utility files (bubbleCursor.js and snow.min.js) within the common effects module.
src/common/utils/effects · high confidence
Added database persistence for music metadata from external sources
Introduced a new database module to store and retrieve music information fetched from third-party sources. This change adds SQL statements and helper functions to manage a \music\_info\_other\_source\ table, enabling the application to persist metadata (such as name, singer, and source) for songs retrieved from external providers, ensuring this data remains available across sessions.
_src/main/worker/dbService/modules/music\_other\source · high confidence
Added database persistence for the Dislike List feature
This change introduces the backend database service for the new 'Dislike List' capability. It adds SQLite operations to query, insert, and overwrite dislike records, enabling the application to persist user preferences for disliked songs. The implementation includes logic to parse and store song and artist names, supporting the synchronization and management of the dislike list.
_src/main/worker/dbService/modules/dislike\list · high confidence
Desktop lyric window IPC abstraction layer
A new IPC utility module has been added to the desktop lyric renderer to centralize communication with the main process. This module exposes functions for retrieving and updating lyric window configuration, managing window bounds and resize behavior, and listening for events such as mouse enter/leave, main window initialization, and theme changes, providing a consistent interface for the lyric UI to interact with the application core.
src/renderer-lyric/utils · high confidence
Initial implementation of the publish utility suite
This change introduces the core utilities for the application's build and release pipeline. The new \publish/utils\ module includes asset management scripts to clean, compile, and package Electron builds, as well as logic to copy build artifacts to the assets directory. It adds support for publishing releases to GitHub (including changelog integration) and uploading assets to Tencent Cloud COS with progress tracking. Additionally, it provides helper functions for parsing changelogs, formatting file sizes using IEC units, and managing version metadata.
publish/utils · high confidence
Initial renderer styling foundation with CSS variables and cross-platform fonts
This change introduces the core styling infrastructure for the application's renderer, establishing a consistent visual baseline. It defines a comprehensive set of CSS custom properties for the primary color palette (including light/dark variants and alpha transparencies) in \index.less\, and a full Material Design-inspired color system in \colors.less\. The \reset.less\ file implements a browser-style reset and configures platform-specific font families (Windows, macOS, Linux) with CJK support to ensure correct text rendering across operating systems. Additionally, \animate.less\ provides a suite of CSS keyframe animations (bounce, shake, pulse, etc.), while \layout.less\ and \variables.less\ establish utility mixins for text truncation and global layout constants like toolbar height and border radius.
src/renderer/assets/styles · high confidence
Introduce 'Dislike List' store for managing blocked songs and artists
Added a new state management module for the 'Dislike List' feature, allowing users to block specific songs or artists. The implementation includes state definitions and action handlers to initialize, add, overwrite, and clear dislike rules, which are stored as a newline-separated list of song and artist names. This store provides the backend logic for the newly introduced 'dislike' functionality and its associated keyboard shortcuts.
src/renderer/store/dislikeList · high confidence
Introduce Leaderboard Board List and Music List views
Added the \BoardList\ component to display a scrollable list of leaderboards with an active indicator icon and a right-click context menu for actions like playing or collecting. Added the \MusicList\ component to display the songs within a selected board, supporting pagination and play actions. These components wire up the leaderboard navigation and content display logic in the renderer.
src/renderer/views/Leaderboard/BoardList · high confidence
Introduce main worker for list management, music metadata, and lyric parsing
A new main worker has been added to offload heavy operations from the main thread. It includes list management logic for filtering played and disliked songs, sorting music lists by various fields (name, singer, album, duration) in ascending, descending, or random order, and handling music file metadata such as extracting embedded cover art (with optimization for large images) and parsing embedded lyric tags (including Any Listen format).
src/renderer/worker/main · high confidence
Introduce new resumable download utility with proxy and redirect support
Added a new download utility module (\src/common/utils/download\) that provides resumable file downloads via the \createDownload\ function. The implementation handles HTTP/HTTPS requests, supports automatic following of 301/302 redirects (up to 2 hops), and allows configuration of proxy agents for both HTTP and HTTPS traffic. It exposes progress, completion, error, and failure events to the caller, enabling accurate tracking of download speed and percentage.
src/common/utils/download · high confidence
Introduces desktop lyric configuration and state management
This change establishes the foundational state management for the desktop lyrics feature, introducing a new store structure in src/renderer-lyric/store. It defines the default configuration schema (LX.DesktopLyric.Config) which includes settings for scroll alignment, line spacing, font styling (including bold options for extended lyrics), transparency on pause, and the ability to swap translation and romanization positions. The store also manages playback state (isPlay) and music metadata, providing the necessary data layer for the desktop lyrics UI to render and respond to user preferences.
src/renderer-lyric/store · high confidence
Introduction of Material Design component library
A new set of UI components has been added to the renderer to implement a Material Design look and feel. This includes ListButtons for list actions, Modal for dialogs with animations, Pagination for list navigation, PopupBtn for hover/click popups, SearchInput with keyboard navigation and context menu support, and a placeholder SongList container. These components replace or supplement previous UI implementations to provide a consistent visual style and improved interaction patterns.
src/renderer/components/material · high confidence
Introduction of Vue 3-based floating tips plugin
The application now uses a new Vue 3-based plugin (src/renderer/plugins/Tips) to display floating tips. This plugin automatically shows tooltips based on the aria-label attribute of elements under the mouse cursor, with automatic closing after 10 seconds. It handles positioning, text wrapping, and cleanup of instances.
src/renderer/plugins/Tips · high confidence
Introduction of a global Dialog plugin for Vue 3
A new Dialog plugin has been added to the renderer, providing a global $dialog service for Vue 3 components. This plugin allows the application to programmatically display modal dialogs with customizable messages, confirm/cancel buttons, and teleport targets, returning a Promise that resolves based on user interaction. The implementation includes a reusable Dialog.vue component and an index.js entry point that registers the service globally, enabling consistent confirmation and alert dialogs across the UI.
src/renderer/plugins/Dialog · high confidence
Introduction of a standalone Desktop Lyrics window
A new, independent Desktop Lyrics feature has been added, allowing users to display lyrics in a separate, always-on-top window. This window supports drag-to-move and resize interactions (including touch support), offers configurable font settings, and includes options to pause scrolling, show translations, and display Romanized lyrics. Users can also control transparency behaviors, such as lowering opacity when paused or when the mouse leaves the area, and the window respects system language settings on first launch.
src/renderer-lyric · high confidence
Introduction of i18n plugin for internationalization support
A new i18n plugin has been added to the renderer-lyric plugins directory, initializing the internationalization instance via \createI18n()\ and exposing the \i18nPlugin\, \useI18n\ utility, and \I18n\ type for use within the application.
src/renderer-lyric/plugins · high confidence
Introduction of reusable SVG icon component
A new SvgIcon component has been added to the renderer plugins, allowing users to display icons by name via a \<svg-icon\> tag. The component automatically resolves the icon from the @renderer/assets/svgs directory and applies consistent styling (1.2em size, current color fill). This enables consistent icon usage across the application without inline SVG markup.
src/renderer/plugins/SvgIcon · high confidence
Introduction of user API module for custom source management
A new user API module has been added to the main process, enabling the import, storage, and execution of custom source scripts. This feature introduces a dedicated window for managing these APIs, with security hardening via context isolation and disabled node integration. The system handles script compression for storage, deduplicates imports, and ensures custom sources respect the application's network proxy settings.
src/main/modules/userApi · high confidence
Introduction of vertical desktop lyric layout with enhanced styling and scroll controls
This change introduces the \LyricVertical\ component, which renders desktop lyrics in a vertical orientation. It adds support for specific user settings including font weight (bold) for lyrics, extended lines, and line spacing, as well as scroll alignment options (top or center). The implementation also refines scroll behavior, particularly handling window resizing and movement on Windows to prevent window size changes during drag, and improves the visual rendering of active and played lyric states with shadow effects.
src/renderer-lyric/components/layout/LyricVertical · high confidence
New Korean language support and i18n infrastructure
The application now supports Korean (ko-kr) in addition to Simplified Chinese, Traditional Chinese, and English. This change introduces a new i18n module in \src/lang\ that manages language switching and message translation via Vue integration, alongside complete translation files for all supported locales and configuration for ESLint and TypeScript within the language directory.
src/lang · high confidence
New Kuwo and Baidu Music SDK implementations
The application now includes new source integrations for Kuwo (kw) and Baidu Music (bd). The Kuwo SDK provides full support for music search, hot search suggestions, album details, song lists, leaderboards, comments, and lyrics (including translation handling). The Baidu Music SDK adds support for music search, hot search, song lists, leaderboards, and lyric retrieval. These additions expand the available music sources for users.
src/renderer/utils/musicSdk/kw · high confidence
New Leaderboard view for browsing and importing music charts
Added a new Leaderboard view that allows users to browse music charts from various sources, select specific charts, and import them into their local library. The view includes a source selector to switch between different chart providers and displays the selected chart's tracks in a list. Users can play the imported list directly or save it as a new playlist, with duplicate detection to prevent redundant imports.
src/renderer/views/Leaderboard · high confidence
New Music Search Results List View
Added a new MusicList component for the Search view that displays search results from online sources. The list supports pagination, allows users to play individual tracks by adding them to their default playlist, and updates the URL query parameters when navigating between pages.
src/renderer/views/Search/MusicList · high confidence
New Open API module for HTTP player control and status
A new HTTP-based Open API module has been added to the application, exposing endpoints for player control (play, pause, skip, seek, volume, mute, collect) and status retrieval (including full lyrics and translation fields). The API supports Cross-Origin Resource Sharing (CORS) by default and introduces Server-Sent Events (SSE) for subscribing to real-time player status updates with configurable field filtering.
src/main/modules/openApi · high confidence
New Search view with source and type filtering
Added a new Search page (src/renderer/views/Search/index.vue) that allows users to filter search results by source and type (music or songlist). The view integrates with the application's routing to persist source and type preferences in the URL query parameters and respects user settings for default values. It renders either a music list or a song list based on the selected type and displays a blank view when no search text is provided.
src/renderer/views/Search · high confidence
New TypeScript type definitions for application settings and features
The \src/common/types\ directory now contains a comprehensive set of TypeScript declaration files that define the application's configuration schema and data models. This includes \app\_setting.d.ts\, which introduces numerous new user-facing settings such as playback rate control, pitch preservation, power save blocking, desktop lyric styling (alignment, font weight, opacity), and UI options like progress bar styles and window transparency. It also defines types for the new 'dislike list' feature, expanded sync capabilities (including client/server modes and dislike list synchronization), and an HTTP open API with LAN access options. Additionally, it standardizes types for music metadata, download tasks, IPC communication, and sound effects (EQ and convolution presets), providing the structural foundation for these features across the codebase.
src/common/types · high confidence
New TypeScript type definitions for sync and app state
The application now includes a new set of TypeScript declaration files in src/main/types that define the structure for the new client-server synchronization feature (including socket interfaces, sync actions for lists and dislike lists), the global application state (Lx interface), and database service types. This provides type safety for the newly introduced sync functionality and centralizes type definitions for the main process.
src/main/types · high confidence
New and updated settings components for the desktop app
The Settings view now includes dedicated components for managing the Dislike List (with a modal to edit rules), Play Timeout (allowing users to set a timer to stop playback), and Desktop Lyrics (offering granular controls for visibility, colors, font, alignment, and scroll behavior). Additionally, the Basic settings panel has been expanded to include the Play Timeout control, while Download settings now support configuring the maximum number of concurrent downloads and embedding translated/Romanized lyrics into files. Backup and restore functionality has been updated to handle new data formats, and the About section now displays clearer licensing and source information.
src/renderer/views/Setting/components · high confidence
New authentication and device management for the sync server
The sync server now includes a new authentication module (auth.ts) that handles device verification via AES/RSA encryption and IP-based rate limiting, along with endpoints for generating auth codes and verifying connections. The server implementation (server.ts) has been refactored to support this new auth flow, manage WebSocket connections with duplicate client detection, and expose device management capabilities (getDevices, removeDevice) via the public API (index.ts). This allows users to manage which devices are authorized to sync data with the server.
src/main/modules/sync/server/server · high confidence
New common UI components for player controls and list management
This location introduces a suite of new reusable UI components for the player interface and playlist management. AudioVisualizer provides a canvas-based audio spectrum display that uses frequency averaging to enhance visual rhythm. PlaybackRateBtn and VolumeBtn offer popup controls for adjusting playback speed (with pitch preservation) and volume, with VolumeBtn adding support for mouse-wheel adjustments. TogglePlayModeBtn allows users to cycle through or select specific playback modes (loop, random, etc.). ProgressBar implements a smooth, animated progress bar with drag-to-seek functionality. ListAddModal and ListAddMultipleModal handle adding single or multiple songs to playlists, featuring dynamic list resizing for different screen widths and a confirmation dialog when creating a playlist with a duplicate name. DownloadModal and DownloadMultipleModal provide quality selection interfaces for downloading songs, including support for FLAC Hires (24-bit).
src/renderer/components/common · high confidence
New control bar and lyric offset adjustment in the player interface
The player's bottom control bar now includes dedicated buttons for toggling desktop lyrics, audio visualization, lyric selection, and comments, alongside existing sound effect, playback rate, volume, and play mode controls. Additionally, a new lyric menu allows users to adjust lyric font size and synchronize lyrics by adding or removing time offsets (in 10ms or 100ms increments), with changes saved to the local lyric file.
src/renderer/components/layout/PlayDetail/components · high confidence
New core modules for API source management, dislike list, and lyric handling
The renderer core now includes dedicated modules for managing API sources (apiSource.ts), handling the 'dislike song' list with IPC synchronization (dislikeList.ts), and processing lyrics including translation/Roma swap logic and desktop lyric communication (lyric.ts). Additionally, global application state and worker initialization are centralized in globalData.ts.
src/renderer/core · high confidence
New database service module for managing the download list
A new download module has been introduced in the worker's database service to handle the persistence and manipulation of the user's download queue. This change adds a dedicated layer (dbHelper, statements, and index) that manages the 'download\_list' table, providing capabilities to query, insert, update, delete, and clear download records. It includes logic to map internal download list items to database fields (such as progress, status, and metadata) and ensures that list ordering is maintained via a 'position' column during insertions and updates.
src/main/worker/dbService/modules/download · high confidence
New database service modules for lyrics and music URLs
The application introduces dedicated database service modules for managing lyrics and music URLs. The new lyric module (\src/main/worker/dbService/modules/lyric\) provides functionality to store, retrieve, and manage both raw and user-edited lyrics, including support for multiple lyric types (e.g., translated, romaji) and operations like batch insert, update, and delete. The new music URL module (\src/main/worker/dbService/modules/music\_url\) handles the storage and retrieval of song URLs, supporting batch operations to save, remove, and clear URL records. These modules implement the underlying database interactions using prepared SQL statements and transaction handling.
_src/main/worker/dbService/modules/lyric, src/main/worker/dbService/modules/music\url · high confidence
New deep-link URL scheme support for music, playlists, and player control
The application now handles the \lxmusic://\ URL scheme, allowing external apps or system interactions to trigger specific actions within the player. This new \useDeeplink\ module parses incoming links and routes them to dedicated handlers: \music\ actions enable searching for tracks or playing specific songs (including a new \music/searchPlay\ capability), \songlist\ actions allow opening or playing playlists by source and ID, and \player\ actions provide remote control over playback (play, pause, skip, toggle, collect, dislike). The implementation includes input validation for sources (kw, kg, tx, wy, mg) and parameters, ensuring that only well-formed requests are processed while displaying error dialogs for invalid inputs.
src/renderer/core/useApp/useDeeplink · high confidence
New desktop lyric renderer with playback rate and swap settings
A new lyric rendering core has been introduced in the renderer-lyric module, enabling users to adjust playback speed and swap the display order of translation and romaji lyrics. The implementation initializes a lyric player that respects the playback rate setting and handles lyric offset adjustments, while the main window channel now processes specific actions for setting playback rates and managing lyric display states.
src/renderer-lyric/core · high confidence
New high-quality pitch-shifting and advanced audio processing engine
The player plugin now includes a new audio processing pipeline built on the Web Audio API, introducing a custom pitch-shifter (phase vocoder) that allows users to change song pitch without affecting playback speed. This change also adds support for configurable output channel counts (up to the device's maximum) and integrates a comprehensive equalizer with multiple presets (pop, rock, classical, etc.) and convolution reverb effects (telephone, cathedral, etc.). These features are implemented via new files including \index.ts\ for the audio graph and \pitch-shifter/\ modules for the DSP logic.
src/renderer/plugins/player · high confidence
New horizontal layout component for desktop lyrics
Introduced a new \LyricHorizontal\ component that renders desktop lyrics in a horizontal scrolling layout. This component handles lyric positioning, scrolling behavior (including wheel and touch interactions), and applies visual styles such as font family, size, opacity, alignment, and line spacing based on user settings. It also manages window dragging and resizing constraints on Windows to prevent unintended window size changes during interaction.
src/renderer-lyric/components/layout/LyricHorizontal · high confidence
New layout components for update, license, and sync workflows
The layout area now includes several new modal components to handle specific user workflows: ChangeLogModal displays current and historical version update logs; UpdateModal manages the update check, download, and installation process with progress tracking; PactModal enforces the Apache 2.0 license agreement with a mandatory countdown before acceptance; and SyncModeModal/SyncAuthCodeModal provide the UI for configuring data synchronization modes (merge/overwrite) and entering authentication codes.
src/renderer/components/layout · high confidence
New music comment section with hot/new tabs and nested replies
The MusicComment component in the PlayDetail layout has been replaced with a new implementation that displays user comments for the currently playing track. Users can now toggle between 'Hot' and 'New' comment tabs, view paginated results, and see nested replies via the new CommentFloor component. The UI supports user avatars, timestamps, location metadata, like counts, and embedded images within comments, with lazy loading applied to images for performance.
src/renderer/components/layout/PlayDetail/components/MusicComment · high confidence
New music list management and search components
Added three new Vue components to the music list interface: MusicSortModal for reordering tracks by position, MusicToggleModal for swapping a song's source across different music providers, and SearchList for providing an overlay search experience with keyboard navigation and debounced input.
src/renderer/views/List/MusicList/components · high confidence
New music metadata module with proxy support and FLAC handling
A new music metadata utility module (src/common/utils/musicMeta) has been added to handle writing tags and cover art for MP3 and FLAC files. The module now supports downloading cover images through a configured proxy, ensuring that image and audio loading, as well as song downloads, respect proxy settings. For FLAC files, it includes a custom metadata processor to correctly embed Vorbis comments and picture blocks, addressing previous issues where embedded covers were not being deleted properly. The implementation also controls the size of downloaded cover images by appending size parameters to image URLs where applicable.
src/common/utils/musicMeta · high confidence
New server-side user space management with device and dislike list support
The sync server now introduces a dedicated user space module that manages per-user data, including a list of authenticated devices and a new 'disliked songs' list. This change adds infrastructure for tracking connected clients (with key info and connection dates) and integrates a dislike list manager, enabling synchronization of user preferences and device authentication state on the server side.
src/main/modules/sync/server/user · high confidence
New song list search results view with source filtering
Added a new SongListList view component and its associated composition API hook (useList) to display search results for song lists. This feature allows users to filter search results by specific online sources or view results from all sources combined, with automatic pagination handling and scroll position preservation when navigating away from the search page.
src/renderer/views/Search/SongListList · high confidence
New sound effects panel with convolution, EQ, panner, and pitch shifting
A new sound effects modal is now accessible via the SoundEffectBtn component, providing users with four distinct audio processing tools: AudioConvolution for applying reverb effects with adjustable main and send gains, BiquadFilter for ten-band equalization with preset and user-defined configurations, AudioPanner for spatial audio control via speed and radius sliders, and PitchShifter for adjusting playback rate. The interface includes UI components for saving and managing user presets for both convolution and EQ filters, and displays a tip when non-default audio devices are in use.
src/renderer/components/common/SoundEffectBtn · high confidence
New store modules for hot search, sound effects, and theme utilities
The renderer store now includes dedicated modules for managing hot search queries across music sources (src/renderer/store/hotSearch.ts), user-defined sound effect presets for EQ and convolution (src/renderer/store/soundEffect.ts), and theme-related utilities such as background URL building and theme application logic (src/renderer/store/utils.ts). These additions complement the existing global state in index.ts and setting.ts by introducing new capabilities for search aggregation, audio customization, and theme handling.
src/renderer/store · high confidence
New sync mode management UI with server device list
The Settings page now includes a dedicated Sync section (SettingSync) that allows users to enable synchronization and choose between 'server' or 'client' modes. When 'server' mode is active, users can configure the server port, refresh the authentication code, and manage a list of authenticated devices via a new modal interface. This modal displays connected devices (identifying mobile vs. desktop) and allows removal of specific devices. The 'client' mode view displays the current connection status and allows configuration of the host address.
src/renderer/views/Setting/components/SettingSync · high confidence
Project initialization with ESLint configuration and documentation
The repository has been initialized with a new ESLint setup, including base rules for JavaScript, TypeScript, and Vue files, alongside standard configuration files like .editorconfig, .gitignore, and tsconfig.json. The project documentation has also been added, featuring a comprehensive README.md detailing the software's features and usage, a CHANGELOG.md tracking version history, and an FAQ.md addressing common user issues.
(repo-wide) · high confidence
Support for KRC format lyric files
Added support for reading local KRC format lyric files. This change introduces a new decoder in src/common/utils/lyricUtils/kg.js that handles KRC-specific encoding (XOR decryption and zlib inflation) and parses the internal JSON structure to extract standard lyrics, translations, and romanization. A utility function in util.ts was also added to decode HTML entities within the lyric text.
src/common/utils/lyricUtils · high confidence
Sync now supports syncing "disliked songs" lists
The sync module has been expanded to include a new module for synchronizing the "disliked songs" list between client and server. This change introduces new handler and event logic in \src/main/modules/sync/client/modules/dislike\ and \src/main/modules/sync/dislikeEvent\ to manage the transfer and application of dislike actions, alongside a corresponding server-side implementation in \src/main/modules/sync/server/modules/dislike\. The sync feature version is bumped to 2.0.0 to reflect this new capability.
src/main/modules/sync · high confidence
Sync support for user dislike lists
The sync server now includes a dedicated module for synchronizing the user's 'dislike' (blocked) song list across devices. This change introduces snapshot-based conflict resolution, allowing users to choose between merging local and remote lists or overwriting one with the other during sync. It also handles real-time propagation of individual dislike actions and manages snapshot history to keep device states consistent.
src/main/modules/sync/server/modules/dislike · high confidence
Theme editor adds dark font toggle and window control color customization
The Theme Edit Modal now includes a 'Dark Font' checkbox option, allowing users to force dark text on light backgrounds for better readability. Additionally, the editor exposes color pickers for the window control buttons (close, minimize, and hide), enabling users to customize the appearance of these specific UI elements within their custom themes.
src/renderer/views/Setting/components/ThemeEditModal · high confidence
Architecture
Establishes renderer-side TypeScript type definitions and global interfaces
This change introduces the foundational TypeScript declaration files for the renderer process, defining the global \Lx\ object, \Window\ extensions, and specific namespaces for player state, worker communication, and internationalization. It consolidates common type imports and establishes the type contract for the application's runtime environment, including support for commit metadata and key event handling.
src/renderer/types · high confidence
Refactored list management store into a modular action/state architecture
The list management logic in the renderer store has been restructured from a monolithic implementation into distinct modules: \state.ts\ for reactive data (user lists, default/love/temp lists), \action.ts\ for pure state mutations (creating, removing, updating lists and music items), and \rendererListManage.ts\ for IPC communication with the main process. This change introduces a new \listDataOverwrite\ action to handle bulk synchronization of list data and positions, and separates the concerns of local state management from remote IPC calls, improving maintainability and performance for large list operations.
src/renderer/store/list/listManage · high confidence
Refactored player state management into modular store files
The player store logic has been reorganized from a monolithic structure into distinct, modular files to improve maintainability and clarity. State definitions for music information, playback status, and lists are now isolated in state.ts, while specific concerns like lyrics handling (lyric.ts), playback progress (playProgress.ts), volume control (volume.ts), and playback rate adjustment (playbackRate.ts) are managed in their own dedicated modules. Action logic for updating play indices, setting music info, and managing temporary playlists is centralized in action.ts. This change provides a cleaner separation of concerns for the player's internal state without altering the external API or user-facing features.
src/renderer/store/player · high confidence
Restructured build configuration and packaging scripts
The build configuration directory has been reorganized into a set of dedicated scripts to manage the application's build lifecycle. This includes new entry points for production packaging (build-pack.js) and development running (runner-dev.js), alongside specialized hooks for pre-packaging and post-packaging tasks (build-before-pack.js, build-after-pack.js). The changes also introduce utilities for handling native library dependencies (deps.js, dependencies-patch.js, lib-update.js) and consolidated configuration files for CSS and Vue loaders, streamlining how the application is compiled and bundled for different platforms.
build-config · high confidence
Behavioural changes
9 commits (0 fixes) modifying resources
A change to existing behaviour in resources — 9 commits, 10 files.
resources · medium confidence · unverified
Automatic registration of Vue components in the renderer
The renderer now automatically discovers and registers all .vue files located within the components directory as global components. This eliminates the need for manual import and registration statements for each component, streamlining the development workflow by allowing new components to be available immediately upon creation.
src/renderer/components · high confidence
Base UI components migrated to Vue 3
The base UI component library (including Btn, Checkbox, Input, Menu, MusicList, Popup, Selection, SliderBar, Tab, and VirtualizedList) has been rewritten to use Vue 3. This migration introduces the Composition API (via \<script setup\> and composables), replaces the Options API with reactive refs and computed properties, and updates data binding to use the v-model / modelValue pattern. Users will experience improved performance and responsiveness, particularly in list rendering and scrolling, as well as more consistent and accessible interactive behaviors across all base controls.
src/renderer/components/base · high confidence
Database service moved to a dedicated worker thread with WAL mode and integrity checks
The database service has been refactored to run in a separate Node.js worker thread using Comlink for communication, replacing the previous synchronous implementation. This change improves main-thread responsiveness by offloading SQLite operations. The new service initializes the database with Write-Ahead Logging (WAL) enabled for better concurrency, performs schema integrity verification on startup to prevent corruption issues, and includes migration logic to handle version updates (specifically fixing a v2.4.0 version mismatch). The worker exposes modules for list management, lyrics, music URLs, downloads, and dislike lists.
src/main/worker · high confidence
Desktop lyrics control bar now supports dragging from any area
The desktop lyrics window can now be repositioned by dragging from the control bar's background, not just the title bar. This change introduces a new \ControlBar\ component and a \useDrag\ composable that handles mouse and touch events to move the window, addressing usability issue \#2280.
src/renderer-lyric/components/layout · high confidence
Desktop lyrics window behavior and configuration overhaul
The desktop lyrics module has been rewritten to improve stability and user control. The window now disables rounded corners and shadows by default to prevent visual artifacts on macOS and other platforms. A new 'hover to hide' feature allows the lyrics to disappear when the mouse leaves the window area, controlled by the \isHoverHide\ setting. Window positioning logic has been refined to prevent the window from shifting unexpectedly when screen resolution changes or when the main window goes fullscreen (if \fullscreenHide\ is enabled). The module now supports displaying the lyrics process in the taskbar via the \isShowTaskbar\ setting. Additionally, the window creation now uses native resizing on Windows and enforces minimum width/height constraints (38px) to prevent unusable window sizes.
src/main/modules/winLyric · high confidence
Desktop lyrics window gains resize, hover-hide, and pause-hide controls
The desktop lyrics window now supports interactive resizing via mouse and touch gestures, allowing users to adjust the window dimensions and position. Additionally, new behaviors allow the lyrics to hide when the mouse leaves the window area (if enabled) and to fade out or hide shortly after playback pauses (if enabled), providing better control over visual clutter. These changes are implemented in the \src/renderer-lyric/useApp\ module, which handles the underlying state and event listeners for these interactions.
src/renderer-lyric/useApp · high confidence
Download store refactored with grouped save paths, proxy support, and metadata fixes
The download store logic has been restructured into dedicated action, state, and utility modules. Users can now organize downloaded songs into subdirectories based on the playlist name via the 'savePathGroupByListName' setting. The download process now respects configured proxy settings for both file downloads and metadata embedding, and artist names in embedded metadata are standardized by replacing '、' with ';'. Additionally, the system handles long filenames more robustly and introduces new settings to control the embedding and downloading of translation and romaji lyrics.
src/renderer/store/download · high confidence
Download view refactored with tabbed filtering and enhanced selection
The Download view has been restructured to support tabbed filtering (All, Running, Paused, Error, Finished) and improved list interaction. Users can now select multiple items using Shift+Click for range selection or Ctrl+Click for individual toggling, with the 'Select All' command (Ctrl+A) correctly applying only when the list has focus. The view also introduces a modal for adding music to playlists and refines the context menu to dynamically enable or disable actions like Play, Start, Pause, and Remove based on the download task's current status.
src/renderer/views/Download · high confidence
Fixes playlist data corruption and ordering issues
The list database service now corrects a data integrity issue where numeric IDs were incorrectly stored with a trailing '.0' (e.g., '123.0'), ensuring they are cleaned up upon retrieval. Additionally, the logic for inserting and moving songs within playlists has been refined to prevent crashes during initialization and to guarantee that song order is saved and retrieved correctly, resolving previous issues where tracks might appear out of sequence or be misplaced.
src/main/worker/dbService/modules/list · high confidence
Improved path handling and configuration migration for special characters
The application now correctly handles file paths containing percent signs (%) and hash symbols (\#), which previously caused issues with playback and application startup on Windows. A new \encodePath\ utility in \src/common/utils/electron.ts\ explicitly encodes these characters to ensure valid URL formatting. Additionally, the \migrateSetting.ts\ module has been updated to properly migrate configuration settings from versions prior to 2.0.0, ensuring that theme IDs, player settings, and other user preferences are correctly mapped to the new configuration structure.
src/common/utils · high confidence
Introduces v2.0.0 configuration schema and common infrastructure
The application has been upgraded to version 2.0.0, introducing a new configuration structure defined in \src/common/defaultSetting.ts\ (v2.1.0 schema) and a new store name \config\_v2\ in \src/common/constants.ts\. This change includes new default settings for features such as desktop lyrics, sound effects, and playback rates, alongside new IPC event names and hotkey definitions. The \src/common\ directory now also provides shared TypeScript utilities for Electron IPC communication (\mainIpc.ts\, \rendererIpc.ts\) and ESLint configuration.
src/common · high confidence
KuGou music source SDK completely rewritten
The KuGou (kg) music source integration has been replaced with a new, modular implementation. This change introduces dedicated modules for handling albums, comments, leaderboards, lyrics, music info, search, pictures, singers, and song lists, along with utility functions for HTTP requests and signature generation. The new search module now utilizes the AndroidFilter interface, and the comment module has been updated to fetch the latest comments and support image display. Additionally, the SDK now supports reading local KRC format lyric files and includes a temporary experimental search implementation.
src/renderer/utils/musicSdk/kg · high confidence
LX Music enters maintenance mode and recommends migration to Any Listen
The application's changelog and version metadata have been updated to announce that development efforts are shifting to a new project, Any Listen, which supports features like WebDAV playback and data synchronization. Users are encouraged to migrate to Any Listen for future updates, while this version of LX Music continues with minor optimizations (such as improved Tencent recommendation lists and transparent window border fixes) and bug fixes (including issues with KuGou playlist song loss, Windows 7 startup, and fullscreen toggling).
publish · high confidence
Major backend refactoring and legacy Windows warnings
The application's main utility layer has been significantly restructured. A new, simplified JSON-file-based store implementation replaces the previous storage mechanism, handling data persistence and automatic backup on corruption. Migration utilities have been added to seamlessly upgrade user data (playlists, settings, hotkeys) from pre-v2.0.0 versions. Font management now uses the \font-list\ library instead of native Electron modules for cross-platform consistency. Additionally, a new legacy Windows check warns users on Windows 7/8 about security risks and encourages upgrading to Windows 10+, while the \hidden\ startup parameter now automatically enables the system tray icon.
src/main/utils · high confidence
Migrate renderer build configuration to Webpack 5
The renderer build pipeline has been updated to use Webpack 5, introducing several configuration changes that affect the build process and output. The new setup includes asset handling rules for images, media, and fonts using Webpack 5's native asset modules, and integrates plugins like \css-minimizer-webpack-plugin\ for CSS optimization in production builds. Additionally, the production build now embeds the git commit ID and date into the application via \DefinePlugin\, allowing users to see the specific build version in the UI, and enforces a clean working directory check during CI builds to prevent inconsistent artifacts.
build-config/renderer, build-config/renderer-lyric · high confidence
Migu Music SDK API and data parsing overhaul
The Migu (mg) music source implementation has been updated to use new API endpoints and data structures. Album, playlist, and search operations now call updated v2.0/v3.0 endpoints (e.g., MIGUM3.0/resource/album/v2.0, MIGUM3.0/resource/playlist/song/v2.0, and jadeite.migu.cn search) with new headers and signature logic. Comment retrieval now uses a stack-based v1.0 API with pagination via last comment IDs. Lyric handling adds MRC decryption and LRC/LXLYRIC parsing, while image and play-count formatting are adjusted to match the new response shapes. These changes improve reliability for album, playlist, search, comments, and lyrics from the Migu source.
src/renderer/utils/musicSdk/mg · high confidence
Music list view refactored into modular composition logic
The MusicList component has been restructured to use Vue 3 Composition API, splitting the view's logic into dedicated composables (useList, useListInfo, useMenu, usePlay, etc.) for better maintainability. This change introduces a 'dislike' feature accessible via the context menu, which adds songs to a dislike list and skips them during playback. It also adds a 'toggle source' capability, allowing users to swap a song's music provider while preserving its position in the list. Additionally, the list now supports source visibility toggling, improved keyboard selection (including Shift+Click and Ctrl+A), and scroll position persistence.
src/renderer/views/List/MusicList · high confidence
Music source matching and API integration refactored
The music SDK module has been restructured to improve how music sources are discovered and matched. A new \versionChars\ constant is now used to filter out non-primary track versions (such as remixes, live performances, or instrumentals) during song matching, aiming to return the original studio version more accurately. The \findMusic\ logic has been updated to normalize and compare song titles, singers, and album names more robustly. Additionally, the Xiami (xm) music source has been disabled by default, with its API methods stubbed to return errors, while the core \index.js\ now orchestrates initialization and search across the remaining active sources (Kuwo, Kugou, QQ, NetEase, Migu).
src/renderer/utils/musicSdk · high confidence
My List view refactored with drag-and-drop and duplicate-creation confirmation
The My List sidebar has been restructured into modular composition functions (useDarg, useEditList, useMenu, etc.) to improve maintainability. Users can now reorder their custom playlists by holding the modifier key and dragging items. Additionally, creating a new playlist with a name that already exists now triggers a confirmation dialog instead of failing silently or overwriting, preventing accidental data loss.
src/renderer/views/List/MyList · high confidence
New IPC event handlers for app settings, system fonts, playlists, and dislike lists
The application now exposes a comprehensive set of IPC handlers for managing core data and settings. Users can retrieve and update application settings, fetch available system fonts, and manage deep links and theme changes. Additionally, the module adds full support for playlist operations (creating, updating, removing, and reordering lists and music tracks) and dislike list management (adding, overwriting, and clearing disliked songs), ensuring these actions are properly synchronized between the main process and renderer processes.
src/main/modules/commonRenderers · high confidence
New IPC event handlers for window, music, and sync management
The application now exposes a comprehensive set of IPC event handlers in the main process to manage core features. Users can control window behavior (minimize, maximize, fullscreen, close, dev tools), manage power saving settings, and handle file dialogs. Music playback is supported via handlers for lyrics (raw, edited, other sources) and music URLs. Data persistence is handled through generic get/save data operations. Download management allows listing, adding, updating, and clearing download tasks. Sound effects can be configured with EQ and convolution presets. Synchronization features include server/client status checks, device management, and code generation. Additionally, an open API server can be started or stopped, and user-defined APIs can be imported, managed, and executed.
src/main/modules/winMain/rendererEvent · high confidence
New NetEase Cloud Music (Wy) SDK implementation
The \src/renderer/utils/musicSdk/wy\ directory has been completely rewritten with a new SDK implementation. This update introduces support for fetching hot search terms, paginated and hot comments (including emoji conversion), and detailed song information. It also adds support for high-resolution audio (FLAC 24-bit) display, improved lyric parsing (including translation and romanization), and a new leaderboard module for various music charts.
src/renderer/utils/musicSdk/wy · high confidence
New TypeScript type definitions for the lyric renderer
The lyric renderer now includes dedicated TypeScript declaration files to define its runtime environment and shared types. The new \app.d.ts\ file exposes global window properties for internationalization (\i18n\), theme management (\setTheme\, \setLyricColor\), language setting (\setLang\), and OS detection, while \common.d.ts\ imports shared type shims for Vue, theming, desktop lyrics, and IPC communication.
src/renderer-lyric/types · high confidence
New client-mode synchronization service with enhanced connection reliability
The sync module now supports a dedicated client mode, introducing new files in src/main/modules/sync/client to handle authentication (RSA/AES encryption), persistent WebSocket connections, and local storage of sync keys. This change improves connection stability by implementing automatic reconnection with exponential backoff, configurable connection timeouts, and support for up to 5 URL redirects during the handshake process.
src/main/modules/sync/client · high confidence
New desktop lyric styling and font system
The desktop lyric renderer now uses a dedicated set of Less stylesheets to control its appearance. This includes a comprehensive color palette (colors.less), CSS reset and typography defaults (reset.less), layout utilities like text truncation and text-shadow effects (layout.less), and animation keyframes (animate.less). The system defines specific font families for Windows, macOS, and Linux to ensure proper CJK character support and prevents text truncation issues.
src/renderer-lyric/assets · high confidence
New download worker with enhanced lyric embedding and file handling
The application introduces a new download worker module (src/renderer/worker/download) that manages song downloads with improved lyric handling and file management. This worker now supports embedding multiple lyric types (standard, translated, romaji, and Any Listen lyrics) into audio files, filtering extended lyric time labels to match the main lyrics, and saving lyrics with UTF-8 BOM for better compatibility. It also includes logic to skip downloading files that already exist in the target directory, handles proxy settings for downloads, and implements retry mechanisms for failed downloads with proper error status reporting.
src/renderer/worker/download · high confidence
New event bus and keyboard event handling system
The renderer now uses a custom event hub (replacing the commented-out 'mitt' library) to manage application events, including playback state, UI updates, and configuration changes. A dedicated key event system has been added to handle global and local hotkeys, allowing the application to respond to keyboard inputs for actions like playback control and window management.
src/renderer/event · high confidence
New event-driven architecture for app, list, and dislike management
The application introduces a new modular event system in the main process to handle state changes and user actions. This includes dedicated event emitters for application lifecycle and settings (AppEvent), user playlist management (ListEvent), and the 'dislike' song list (DislikeEvent). A key behavioral improvement in the ListEvent module is a fix for list IDs: numeric IDs are now explicitly converted to strings to prevent data corruption where numbers were incorrectly appended with '.0'. These events facilitate communication between the main process and other parts of the application, ensuring consistent state updates for configurations, playlist modifications, and dislike list changes.
src/main/event · high confidence
New font-based lyric rendering engine with playback rate support
The lyric display system has been replaced with a new engine that renders lyrics as animated text (font mode) using the Web Animations API, offering a visual alternative to standard line-by-line display. This update introduces support for adjusting the playback rate, allowing users to speed up or slow down the lyric animation in sync with the music. It also improves parsing robustness by correctly handling millisecond-precision timestamps, filtering out invalid translation or Romanization lines, and managing extended lyrics.
src/common/utils/lyric-font-player · high confidence
New system tray and application menu modules
This change introduces new main-process modules for managing the application menu and system tray. The app menu is now configured to display native macOS system menus (such as About, Hide, and Quit) while remaining null on other platforms. The system tray module provides a context menu with playback controls (play/pause, next/previous, favorite), window visibility toggles, and desktop lyric options, all supporting multiple languages (English, Simplified Chinese, Traditional Chinese, Korean). The tray icon theme automatically adapts to the system's light/dark mode when the 'auto' theme is selected, and clicking the tray icon on non-macOS platforms now toggles the main window visibility.
src/main/modules · high confidence
Online list component rewritten in Vue 3 with new interaction features
The OnlineList component has been migrated to Vue 3 and restructured into modular composables (useList, useMenu, usePlay, etc.). This update introduces a 'dislike' feature that requires confirmation before adding a song to the dislike list, and adds a setting to enable automatic playlist switching when double-clicking a song. The list now displays 24-bit lossless badges for FLAC 24bit tracks, fixes issues with right-click menu behavior on search and ranking lists, and improves the shift-click selection logic to prevent unintended selection changes.
src/renderer/components/material/OnlineList · high confidence
Play bar layout and progress display options
The play bar now supports three distinct layout modes—Full, Middle, and Mini—selected via the 'common.playBarProgressStyle' setting. The Full mode displays the progress bar across the entire width, the Middle mode places it alongside the time display, and the Mini mode uses a compact progress indicator. Additionally, the Control Buttons component has been introduced to manage actions like adding music to playlists and toggling desktop lyrics, while the PlayProgress component provides a popup interface for adjusting playback position.
src/renderer/components/layout/PlayBar · high confidence
Player logic refactored into modular composables
The player's internal logic in the renderer has been restructured from a monolithic implementation into a set of specialized composables (e.g., \useLyric\, \useVolume\, \usePlaybackRate\, \useMediaSessionInfo\, \useSoundEffect\). This change introduces dedicated modules for managing specific player capabilities, including volume and mute controls, playback rate adjustment with pitch preservation, environment sound effects (panner, biquad filters, convolution), media session integration for OS-level controls, and automatic preloading of the next track. It also adds support for configuring maximum audio output channel counts and handling media device changes.
src/renderer/core/useApp/usePlayer · high confidence
Redesigned Play Detail interface with new window controls and auto-hiding cursor
The Play Detail view has been completely rebuilt with a new layout structure. Window control buttons (hide, minimize, fullscreen, close) are now rendered in dedicated header components that can be positioned on the left or right based on settings. The bottom play bar has been restructured to include a progress container and time labels alongside playback controls. Additionally, when the player is in fullscreen mode, the mouse cursor will now automatically hide after 3 seconds of inactivity to provide a cleaner viewing experience.
src/renderer/components/layout/PlayDetail · high confidence
Redesigned list management dialogs for duplicate detection, sorting, and updates
The MyList components have been rewritten to provide a more structured and user-friendly interface for managing music lists. The Duplicate Music Modal now uses a virtualized list to efficiently display and handle duplicate tracks, allowing users to play or remove specific duplicates with immediate list refresh. The List Sort Modal has been overhauled to offer granular control, enabling users to sort by specific fields (name, singer, album, time, source) and direction (up, down, random), with the random option correctly disabling field selection. The List Update Modal now clearly displays auto-update toggles and update timestamps for source lists, with visual feedback during fetching. Additionally, the Music Sort Modal now supports reordering multiple selected tracks by position, addressing previous issues with default list name display and list refresh after removal.
src/renderer/views/List/MyList/components · high confidence
Redesigned sidebar with new navigation and window controls
The sidebar layout has been completely rewritten to feature a new navigation bar and window control buttons. The navigation now uses a dynamic menu system that respects the 'download.enable' setting and provides visual feedback for active routes via a sliding indicator. Window controls (close, minimize) are now rendered in a dedicated component that appears on the left side when configured, featuring improved hover states and focus handling to prevent icon clipping. The overall layout uses flexbox for better alignment and includes a logo placeholder that hides in fullscreen mode.
src/renderer/components/layout/Aside · high confidence
Redesigned song list browsing and import interface
The song list view has been completely rewritten to feature a new layout with a tag-based popup selector, a sort tab, and a refreshed list item design that now displays the playlist update time when available. The 'Open Shared Playlist' dialog has been updated to include a scrollbar for better usability when handling long inputs or lists.
src/renderer/views/songList/List · high confidence
Redesigned song list detail view with improved navigation and duplicate handling
The song list detail page has been refactored to improve user experience and code structure. The view now includes a dedicated action handler that prevents accidental duplication by prompting users before re-importing an existing online playlist. Navigation has been enhanced with a new keyboard shortcut (backspace) to return to the previous screen, and the UI layout has been updated to better handle long playlist names and descriptions. The underlying logic for fetching and displaying list details has also been reorganized into reusable composables for better maintainability.
src/renderer/views/songList/Detail · high confidence
Redesigned toolbar with configurable window control placement and improved search behavior
The application toolbar has been rebuilt to support a configurable position for window control buttons (minimize, close), which can now be placed on the left or right via the 'common.controlBtnPosition' setting. The search input component has been updated to fix a bug where navigating away from the search page to a playlist detail page would incorrectly clear the search box and list when the 'obsessive-compulsive' auto-clear setting was enabled. Additionally, the focus and hover states for the window control buttons have been optimized for better visual feedback.
src/renderer/components/layout/Toolbar · high confidence
Refactored main window management and added taskbar controls
The main window module has been restructured into separate files (index, main, utils, autoUpdate) to improve code organization. This change introduces taskbar thumbnail buttons for play, pause, next, previous, and collect actions, allowing users to control playback directly from the system taskbar. It also implements a taskbar progress bar that reflects the current song's playback position and status, and refactors the auto-update logic to use electron-updater with explicit event handling for update checks, downloads, and installation.
src/main/modules/winMain · high confidence
Refactored music list store into modular action, state, and sync files
The music list store logic in the renderer has been reorganized into three distinct modules: \action.ts\ (handling operations like creating lists, adding/moving songs, and cache retrieval), \state.ts\ (managing reactive status and update times), and \syncSourceList.ts\ (fetching and overwriting songs from online sources). This change improves code maintainability by separating concerns within the list management system.
src/renderer/store/list · high confidence
Refactored player core with new timeout stop and power-save controls
The player logic in src/renderer/core/player has been reorganized into dedicated modules: action.ts now handles URL fetching, retry delays, and playback state; timeoutStop.ts implements a new countdown timer that automatically pauses or stops playback when a set duration expires; and utils.ts introduces a power-save blocker that prevents the computer from sleeping during playback and a list-filtering utility that integrates with the dislike list. These changes improve playback stability, add automatic stop-timer functionality, and ensure the system remains awake while music is playing.
src/renderer/core/player · high confidence
Refactored renderer utilities to Vue 3 Composition API
The utility functions in the renderer's composition layer have been rewritten to use the Vue 3 Composition API (e.g., \ref\, \onMounted\, \onBeforeUnmount\), replacing the previous implementation style. This migration introduces new composables such as \useDrag\ for list reordering, \useIconSize\ for dynamic icon scaling, \useImportTip\ for standardized import error dialogs, \useMenuLocation\ for context menu positioning, and \useNextTogglePlay\ for playback mode management, while existing logic for lyrics, keyboard handling, and desktop lyrics has been adapted to the new reactive patterns.
src/renderer/utils/compositions · high confidence
Refactored search store modules for music and songlists
The search functionality for music tracks and songlists has been restructured into dedicated module directories (src/renderer/store/search/music and src/renderer/store/search/songlist). This change introduces separate state management and action handlers for each search type, including specific pagination limits (e.g., 30 for music, 15/18 for songlists) and source availability checks. The refactoring ensures that search results are properly sorted, deduplicated, and cached per source, while also handling empty states and load failures with appropriate user-facing labels.
src/renderer/store/search/songlist · high confidence
Refactored server-side playlist synchronization logic
The sync server module for playlists has been rewritten to improve extensibility and fix data consistency issues. The new implementation introduces a snapshot-based approach for tracking device state changes and handles list merging (supporting top/bottom insertion preferences) and overwriting strategies more robustly. It also corrects metadata merging problems and ensures consistent field ordering during synchronization, resulting in more reliable playlist updates across connected devices.
src/main/modules/sync/server/modules/list/sync · high confidence
Refactored server-side sync negotiation and event registration
The sync module's server-side logic has been restructured to improve how feature synchronization is negotiated and events are managed. A new handler now processes feature changes by iterating through the defined feature list, updating socket state, and triggering module-specific syncs only when features are enabled. The main sync flow has been updated to first query the client for its enabled features and version, then iterate through the feature list to synchronize only those that are active, while also handling disconnection checks during the process. Additionally, a new event registration system has been introduced to dynamically register and unregister sync events for all modules via a central socket server instance.
src/main/modules/sync/server/server/sync · medium confidence
Refactored song list and leaderboard store modules
The song list and leaderboard store modules have been restructured into separate action and state files. This change introduces dedicated state management for leaderboards (including board lists and detail info) and refines the song list store with improved tag handling, list detail info, and selection state. The refactoring ensures consistent data structures and caching mechanisms across both modules, improving maintainability and clarity of the music data flow.
src/renderer/store/songList · high confidence
Renderer layer migrated to Vue 3 with Composition API
The renderer has been upgraded from Vue 2 to Vue 3, adopting the Composition API (via \\<script setup\>\) and \vue-router\ v4. This change introduces a new application entry point (\main.ts\) that initializes the app using \createApp\, integrates internationalization via a plugin, and manages routing with hash history. The UI structure is now defined in \App.vue\ using Vue 3 component syntax, and the build configuration includes a new ESLint setup for Vue and TypeScript, along with a dedicated \tsconfig.json\ for path aliases.
src/renderer · high confidence
Renderer utility layer restructured with new i18n, IPC, and data persistence modules
The \src/renderer/utils\ directory has been reorganized into a new modular structure, introducing dedicated files for internationalization (\i18n.ts\), inter-process communication (\ipc.ts\), and local data persistence (\data.ts\). This change adds a centralized i18n plugin setup, replaces the previous request handling with a new \request.js\ module based on the \needle\ library, and implements throttled saving for list positions, settings, and update info via \data.ts\. Additionally, new utilities for keyboard binding (\keyBind.ts\), color picking (\pickrTools.ts\), and music file metadata handling (\music.ts\) have been added to support the application's core features.
src/renderer/utils · high confidence
Restructured application initialization and added startup parameter support
The application's core initialization logic has been reorganized into modular hooks (such as \useDataInit\, \useEventListener\, and \useOpenAPI\) to improve maintainability. A new feature allows users to start the app with command-line arguments to automatically search for text or play a specific song list by source and link. Additionally, the system now supports auto-updating user playlists based on source changes and provides settings to enable an HTTP API for external control.
src/renderer/core/useApp · high confidence
Restructured main process entry points and added ESLint configuration
The main process code has been reorganized into dedicated entry files: \index.ts\ for production builds and \index-dev.ts\ for development, which now explicitly installs the Vue DevTools extension. A new \.eslintrc.cjs\ file enforces linting rules for the main process TypeScript code, and \tsconfig.json\ has been updated to support path aliases like \@common\ and \@main\.
src/main · high confidence
Settings page restructured with navigation table of contents
The Settings view has been rewritten to use a new component-based architecture featuring a left-hand navigation table of contents (TOC) that allows users to jump between specific setting categories. This change introduces a dedicated 'Open API' section (SettingOpenAPI) alongside existing categories like Basic, Play, Sync, and Network, and implements smooth scrolling and active-state highlighting for the selected tab.
src/renderer/views/Setting · high confidence
Sync negotiation now supports 'dislike' feature versioning
The sync client's negotiation logic has been updated to explicitly handle the 'dislike' feature alongside the existing 'list' feature. When connecting to a server or desktop app, the client now checks if the supported feature versions for both 'list' and 'dislike' match the local version, enabling synchronized handling of disliked songs if the versions align.
src/main/modules/sync/client/sync · high confidence
Tencent Music source adapter rewritten with new API endpoints and pure-JS decryption
The Tencent Music (tx) adapter in the renderer has been completely rewritten to use the modern \u.y.qq.com\ JSON API endpoints for search, comments, hot search, leaderboards, and song lists, replacing the legacy \fcgi-bin\ and HTML-parsing methods. The QRC lyric decryption logic has been replaced with a pure JavaScript implementation (ported from the native plugin), removing the dependency on native binaries. Additionally, a new \api-test.js\ file provides a fallback music URL service via \ts.tempmusics.tk\, and search requests now include a generated \searchid\ signature to improve reliability.
src/renderer/utils/musicSdk/tx · high confidence
Theme system overhaul with dark font support and new color utilities
The theme engine in src/common/theme has been rewritten to support a new 'dark font' option for themes, allowing text to remain dark even on dark backgrounds (controlled by the isDarkFont flag in theme definitions). This change introduces new utility modules (colorUtils.js, utils.js) for generating precise color shades and alpha variations, and updates the default theme configurations (createThemes.js) to include this new property. The generated theme index (index.json) now reflects these structural changes, enabling more granular control over text contrast in dark mode themes.
src/common/theme · high confidence
Unified music source resolution and local file handling
The music core has been refactored to centralize URL, cover art, and lyric retrieval through a unified dispatcher in \index.ts\ that routes requests to specific handlers for online, local, and downloaded music. Local music support now includes enhanced fallback mechanisms that attempt to match local files against online sources to fetch missing metadata, URLs, and lyrics, while also supporting source switching if the initial match fails. Downloaded music handling ensures that cached local file paths are prioritized for playback and artwork, with online fallbacks for lyrics. The system also implements caching for other-source lookups and a 15-second timeout for source resolution to prevent hanging requests.
src/renderer/core/music · high confidence
Updated LX Music license agreement with 24-hour copyright data removal requirement
The project's licensing documentation has been revised to clarify usage terms alongside the Apache License 2.0. Key changes include a new requirement for users to remove any generated copyrighted data within 24 hours to avoid infringement, explicit disclaimers regarding the accuracy of audio data sourced from third-party APIs, and a reaffirmation that the project is non-commercial and intended solely for technical research. The license is now provided in both English and Chinese versions.
licenses · high confidence
Updated Migu Music leaderboard API integration
The Migu Music SDK now uses a new endpoint (music.migu.cn) to fetch music charts, replacing the previous legacy API. This change updates the internal logic for retrieving chart data and parsing song details, ensuring that leaderboard information is fetched from the current web interface structure.
src/renderer/utils/musicSdk/mg/temp · high confidence
User API renderer event handling and lifecycle management
The user API module now implements explicit IPC event handling for the renderer process, introducing new messages for initialization, response processing, dev tools opening, proxy retrieval, and update alerts. This change adds a request queue with timeout management (20-second default) to handle asynchronous API calls, allowing users to cancel pending requests and receive structured status updates regarding API availability and configuration changes.
src/main/modules/userApi/rendererEvent · high confidence
User API renderer process restructured with new preload and HTML entry
The user API renderer module now uses a dedicated preload script (preload.js) and a minimal HTML entry point (user-api.html) to expose the 'lx' API bridge to the renderer context. This change introduces support for 'local' sources to retrieve music URLs, lyrics, and pictures, adds 'flac24bit' quality support for major sources (kw, kg, tx, wy, mg), and implements proxy handling for custom source network requests via the tunnel library. The preload script also adds validation for lyric lengths and update alert logs, and exposes event names for initialization, requests, and update alerts.
src/main/modules/userApi/renderer · high confidence
Webpack build configuration for the main process is introduced
The build system for the application's main process now uses a set of Webpack configuration files (base, development, and production). This setup defines the build target as 'electron-main', configures module resolution with specific path aliases (such as @main, @renderer, @lyric, and @common), and handles TypeScript compilation via ts-loader. The production build includes optimizations like copying user API HTML and theme images, while the development build enables source maps and specific environment variable definitions.
build-config/main · high confidence
Dependencies
Update to LX Music Desktop 2.12.6 with Electron 42 and Node 22 support
The application has been updated to version 2.12.6, upgrading the underlying Electron runtime to v42.11.6 and raising the minimum required Node.js version to 22. This release also updates the build toolchain, including Webpack 5.106.2 and electron-builder 26.15.7, and refreshes core dependencies such as better-sqlite3 (v13.0.3) and undici (v7.29.1) to ensure compatibility with the newer runtime environment.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 26 → 38 (+12.2)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 59 → 67 (+8.9)
- Architecture 55 (new)
- Maturity 54 → 54 (-0.1)
- Readiness 15 → 29 (+14.0)
- Security 20 → 47 (+26.4)
- Accessibility 39 (new)
- Performance 60 (new)
Resolved (113)
- (anonymous) (cognitive 17) (src/renderer/utils/compositions/useLyric.js)
- (anonymous) (cognitive 17) (src/renderer/utils/musicSdk/wy/songList.js)
- (anonymous) (cognitive 19) (src/renderer/utils/musicSdk/wy/musicDetail.js)
- (anonymous) (cognitive 21) (src/renderer/utils/musicSdk/index.js)
- (anonymous) (cyclomatic 16) (src/renderer/utils/musicSdk/index.js)
- (anonymous) (cyclomatic 17) (src/renderer/utils/musicSdk/wy/songList.js)
- (anonymous) (cyclomatic 18) (src/renderer/utils/musicSdk/wy/musicDetail.js)
- Boundary-crossing change coupling: app_setting.d.ts ↔ SettingPlay.vue (src/common/types/app_setting.d.ts)
- Boundary-crossing change coupling: defaultSetting.ts ↔ SettingPlay.vue (src/common/defaultSetting.ts)
- Boundary-crossing change coupling: desktop_lyric.d.ts ↔ SettingDesktopLyric.vue (src/common/types/desktop_lyric.d.ts)
- Boundary-crossing change coupling: desktop_lyric.d.ts ↔ utils.ts (src/common/types/desktop_lyric.d.ts)
- Change coupling: app_setting.d.ts ↔ desktop_lyric.d.ts (src/common/types/app_setting.d.ts)
- Change coupling: defaultSetting.ts ↔ app_setting.d.ts (src/common/defaultSetting.ts)
- Change coupling: defaultSetting.ts ↔ desktop_lyric.d.ts (src/common/defaultSetting.ts)
- Change coupling: webpack.config.base.js ↔ webpack.config.base.js (build-config/renderer-lyric/webpack.config.base.js)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Dimension evaluation failed
- High CVE: [GHSA redacted] (package-lock.json)
- …and 93 more
New (246)
- (anonymous) (cognitive 50) (src/renderer-lyric/components/layout/LyricVertical/useLyric.js)
- (anonymous) (cognitive 51) (src/renderer-lyric/components/layout/LyricHorizontal/useLyric.js)
- (anonymous) (cognitive 52) (src/renderer/utils/compositions/useLyric.js)
- (anonymous) (cyclomatic 21) (src/renderer/views/List/MyList/useMenu.js)
- (anonymous) (cyclomatic 36) (src/renderer-lyric/components/layout/LyricVertical/useLyric.js)
- (anonymous) (cyclomatic 37) (src/renderer-lyric/components/layout/LyricHorizontal/useLyric.js)
- (anonymous) (cyclomatic 38) (src/renderer/utils/compositions/useLyric.js)
- (anonymous)::handleSelectData (cognitive 20) (src/renderer/views/Download/useList.js)
- (anonymous)::handleSelectData (cognitive 20) (src/renderer/views/List/MusicList/useList.js)
- Change coupling: ListAddModal.vue ↔ ListAddMultipleModal.vue (src/renderer/components/common/ListAddModal.vue)
- Change coupling: lyric.js ↔ lyric.js (src/renderer/utils/musicSdk/tx/lyric.js)
- Change coupling: webpack.config.prod.js ↔ webpack.config.prod.js (build-config/renderer-lyric/webpack.config.prod.js)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- FileTooLong: kg/songList.js (src/renderer/utils/musicSdk/kg/songList.js)
- FontPlayer._refresh (cognitive 26) (src/common/utils/lyric-font-player/font-player.js)
- FunctionTooLong: download.createTask (src/renderer/worker/download/download.ts)
- FunctionTooLong: preload.initEnv (src/main/modules/userApi/renderer/preload.js)
- FunctionTooLong: server.handleStartServer (src/main/modules/sync/server/server/server.ts)
- FunctionTooLong: useInitUserApi.default (src/renderer/core/useApp/useInitUserApi.ts)
- …and 226 more
Changes since last survey
- 23 commits — 16 feature/other, 7 fixes
By area
- (root) — 9 commits
- publish/changeLog.md — 3 commits
- .github/workflows — 2 commits
- build-config/build-before-pack.js — 2 commits
- build-config/lib — 2 commits
- src/lang — 2 commits
- src/main — 2 commits
- src/renderer — 1 commit
Notable commits
- fix: fix(l10n): correct window size option text in zh-tw (#2943)
- fix: fix: correct wrong product name on win legacy prompt (#2978)
- fix: fix: 修复主题背景图片URL构建逻辑
- fix: fix: 修复构建
- fix: fix: 修复架构映射以正确复制库文件
- fix: fix: 修正armv7l架构映射以匹配正确的值
- fix: fix: 降级 @simonwep/pickr 和 webpack 版本,修复依赖问题
- change: chore: adjust item order of language options (#2946)
- change: 优化 tx 推荐歌单列表
- change: 优化透明窗口边框显示效果,修复全屏模式下的相关问题
- change: 修复 win7 无法启动的问题
- change: 修复 win7 无法启动的问题
- change: 修复打开某些 kg 歌单时歌曲丢失的问题
- change: 发布 v2.12.3
- change: 发布 v2.12.4
- change: 发布 v2.12.5
- change: 发布 v2.12.6
- change: 新增 Windows 旧版提示功能,提醒用户升级至新版系统以提高安全性和性能
- change: 更新依赖&版本号(2.12.3-beta.11)
- change: 更新依赖&版本号(2.12.3-beta.12)
- …and 3 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
lyswhut/lx-music-desktop was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit ad95d5091c9ed689fa72b5e5c849df65f5a679ce — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.