li-yuan-fang/EasyK
48.4
Weak · 1 October 2026
11.3k
lines of production code
VB.NET
primary language
2
measurements over time
What this system is
This system is a desktop-based music playback and streaming application that integrates with DLNA devices and a web-based request interface. It features advanced audio processing capabilities, including real-time vocal removal for accompaniment, and supports complex lyric synchronization with per-character furigana for DLNA output. The application manages song queues via a command-line interface and web API, handling playback control, volume management, and device discovery while maintaining a structured logging and configuration system.
Features
DLNA music mode now supports per-character lyrics with furigana
The DLNA music playback experience has been enhanced to support complex, per-character lyric synchronization, including Japanese furigana (reading aids) for each character. This change introduces new data models for verbatim lyrics and a provider framework that allows lyric plugins to supply detailed timing and phonetic data, enabling more precise and visually rich lyric displays during DLNA streaming.
DLNA/Music · high confidence
New accompaniment engine with multi-channel vocal removal
Added a new accompaniment processing module in K/Audio/Accompaniment that supports vocal removal (center channel cancellation) for stereo, 4-channel, 5.1, and 7.1 audio formats. The implementation includes a time-domain processor (CenterAccompaniment) and an STFT-based processor (STFTAccompaniment) with configurable window types (Hann, Hamming, Blackman, Rectangular), reduction factors, and magnitude gain. The system handles PCM-16 and float32 audio streams via IWaveProvider and ISampleProvider interfaces, enabling real-time accompaniment generation with adjustable vocal suppression intensity.
K/Audio/Accompaniment · high confidence
New audio processing and device management components
Added new files in K/Audio to handle accompaniment processing (AccompanimentProvider, AccompanimentProviderFloat), CEF and VLC audio streaming (CefAudioHandler, VlcAudioHandler), audio device change detection (DeviceChangeHandler), and a central dummy player (DummyPlayer) that manages volume, accompaniment modes, and device reloading.
K/Audio · high confidence
New toast notification system and enhanced QR code interaction
The application now features a new toast notification system (AlertManager) that displays transient, icon-based status messages (such as volume, mute, or track changes) on the player window, replacing previous alert mechanisms. Additionally, the QR code display has been significantly enhanced: users can now drag the QR code window to reposition it, and zoom it in or out using the mouse wheel while holding Control. The QR code window also remembers its last position and size across sessions. These changes are supported by a refactoring of the main player window (FrmPlayer) and the underlying QR code rendering logic.
K/View · high confidence
New utility libraries and enhanced system interaction capabilities
The Utils module has been significantly expanded with new helper classes: AsyncUtils provides an asynchronous computation framework with concurrency limiting and core-count detection; AudioUtils enables reading and setting system and process-specific volume levels via NAudio; ColorUtils adds image-based color schema extraction and JSON serialization for colors; ConsoleUtils exposes Windows console control handler APIs; JsonUtils and XmlUtils provide safe, resilient parsing for JSON and XML (including DLNA DIDL-Lite namespace fixes); ScreenUtils retrieves detailed monitor information (including EDID data) and calculates screen overlaps; NetUtils adds local IP detection, TCP port usage monitoring, and URL validation; and TimeUtils now supports fractional time parsing. Additionally, the legacy MouseUtils class was removed, and FormUtils was updated to include a SetPropW P/Invoke.
Utils · high confidence
Behavioural changes
Command system refactoring and new control features
The command implementation files have been refactored to use consistent namespaces and a centralized logging system (replacing direct Console.WriteLine with Logger calls). This update introduces several new capabilities: a 'fair' mode command to toggle fairness algorithms, a 'replay' command to re-sing the current song, and an 'auto-deploy' feature via the 'restore' command to save and restore player screen configurations. DLNA device names can now be viewed or set using the 'dlna' command, and the 'port' command allows changing the HTTP server port with automatic QR code refresh. The 'exit' command now supports a 'save' argument to persist song records before quitting, and the 'push' command has been updated to force skip songs. Additionally, the 'seek' command now accepts specific second offsets, the 'top' command displays the source of moved songs, and the 'pass' command automatically refreshes the QR code upon updating the authorization key. The legacy 'lock' command has been removed and replaced by the new 'block' command for locking top songs, and the Bilibili login flow has been simplified to remove manual cookie persistence logic.
Commands/Implements · high confidence
DLNA device name customization and configurable access control
Users can now customize the DLNA device name displayed on the network, with changes automatically updating the SSDP description. Access to DLNA services is now governed by a configurable check function (defaulting to allowing all), replacing the previous hardcoded logic that relied on specific EasyK mirror states and strict IP permission settings. Additionally, the ConnectionManager service now allows unconditional access to improve compatibility with certain client software.
DLNA · high confidence
DLNA playback and volume control logic refactored
The DLNA service layer has been restructured to delegate playback control to a dedicated DLNAPlayer instance rather than using direct mirror triggers. AVTransport now registers and unregisters this player, handling state transitions (playing, paused, stopped) and seeking through the player object, which improves synchronization for buffered resources. RenderingControl has been updated to manage volume and mute states directly via the player's volume property, including caching the previous volume level to correctly restore it when unmuting, and adding support for GetVolume and GetMute requests.
DLNA/Services · high confidence
DLNA protocol implementation refinements and stability fixes
The DLNA protocol layer now handles event subscriptions and remote actions more robustly. Event broadcasts can now include special update values alongside standard state changes, ensuring subscribers receive all relevant notifications. HTTP responses for subscriptions and remote actions now use standard status codes (e.g., 412 Precondition Failed, 400 Bad Request) for better compliance. Remote action handling includes an access control check and safer XML parsing to prevent crashes on malformed requests. Additionally, logging has been standardized to use the central Logger, and internal timing loops for broadcasts have been optimized to reduce CPU usage.
DLNA/Protocol · high confidence
Enhanced stability, logging, and exit safety
The application now features a structured logging system (KLogger) that replaces direct console writes, ensuring consistent output and better error tracking. A safe exit mechanism has been implemented using a dedicated handler and lock to prevent deadlocks and ensure graceful shutdown of services (WebServer, DLNA, KCore) and configuration saving. Console input/output encoding is now set to Unicode for correct character display. Additionally, the solution now supports x86 builds alongside x64, and the default HTTP connection limit has been increased to 1024 to improve network handling.
(repo-wide) · high confidence
Expanded settings for audio, DLNA, and system behavior
The application now exposes granular configuration options for real-time accompaniment (including Fourier transform parameters and volume gain), DLNA playback (such as device naming, strict permission enforcement, and lyric display modes), and general system behavior (including fairness mode, safe exit timeouts, and upload size limits). Additionally, the legacy cookie container for Bilibili login persistence has been removed in favor of a dedicated keep-login setting, and the logging system has been updated to use a structured Logger instead of console output.
Settings · high confidence
Improved HTTP server resilience and standardized API responses
The web server now automatically recovers from port-binding conflicts by adjusting Hyper-V dynamic port ranges, restarting the WinNAT service, and switching to an available port within the configured range, preventing manual intervention for common startup errors. The API endpoints have been standardized to use explicit HTTP status codes (e.g., 400, 403, 404, 416, 500) instead of generic integers, and the /rank endpoint now supports specific ranking adjustments rather than just moving songs to the top. Additionally, the upload system now validates file hashes upon completion and the request models have been updated to support new fields like 'hash' and 'rank'.
Web · high confidence
Introduction of DLNA Player with Music Mode and Lyric Customization
The DLNA/Player area introduces a new DLNAPlayer class and a StoredMusic data structure, enabling DLNA-based music playback with specific support for a 'Music Mode'. This implementation adds capabilities for dynamic lyric color customization (via LyricColor in StoredMusic) and manages playback states such as buffering and waiting for connections, effectively replacing or augmenting previous DLNA handling logic with a more structured approach to lyric display and music-specific attributes.
DLNA/Player · medium confidence
Refactored command system to use reflection-based loading and namespace scoping
The command infrastructure has been restructured to improve maintainability and extensibility. The base \Command\ class is now encapsulated within the \Commands\ namespace, and the \CommandParser\ no longer manually instantiates commands in a hardcoded list. Instead, it uses reflection to automatically discover and load all classes inheriting from \Command\ within the \EasyK.Commands\ namespace, resolving dependencies via constructor injection. This change also fixes a bug where the \CommandTop\ instruction was defined twice, as the new system deduplicates or manages registrations more cleanly, and prepares the system for asynchronous loading optimizations.
Commands · high confidence
Refactored core architecture and introduced new playback features
The application's core logic has been refactored to support new capabilities including accompaniment mode, DLNA device name modification, and lyric offset/contrast adjustments. The main window class has been removed in favor of a new player form, and CEFSharp settings have been updated to persist login sessions and use D3D11 rendering. Additionally, a new logging system and song request record structures have been implemented to improve stability and data handling.
K · high confidence
Version bump to 1.1.4.0 and addition of UI icon resources
The application version has been updated to 1.1.4.0. Additionally, new SVG icon resources for accompaniment, mute, original, pause, play, push, and volume have been added to the project resources, and the application manifest now explicitly requests administrator privileges.
My Project · high confidence
Dependencies
Upgrade CefSharp to 126.2 and add NAudio dependencies
The embedded browser engine has been upgraded from CefSharp 109 to version 126.2.70, which includes a switch to the new ChromiumEmbeddedFramework runtime packages. Additionally, the NAudio library suite (version 2.3.0) has been added to support audio processing features, while Microsoft.Graph.Core and Microsoft.Kiota.Authentication.Azure dependencies were removed.
(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 48 → 48 (+0.0)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 85 → 85 (+0.0)
- Architecture 90 → 90 (+0.0)
- Maturity 46 → 46 (+0.2)
- Readiness 27 → 27 (+0.0)
- Security 100 → 100 (+0.0)
Resolved (6)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Hotspot: DLNA/Music/DLNAMusicProviders.vb (DLNA/Music/DLNAMusicProviders.vb)
- Hotspot: K/EasyK.vb (K/EasyK.vb)
- Hotspot: Utils/ColorUtils.vb (Utils/ColorUtils.vb)
- Hotspot: Web/UploadManager.vb (Web/UploadManager.vb)
Architecture
- Unchanged — 1 containers · 0 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
li-yuan-fang/EasyK 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 0f509c46c65342eb4bc373c0656829c7a22fe25e — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.