{{ i18n.app.name }}

{{ i18n.components.lyricView.phonetic }}
{{ i18n.components.lyricView.translation }}
{{ i18n.components.lyricView.timeAdjustment }}
{{lyricTiming.offsetLabel}}
{{ i18n.components.lyricView.recognizeSecondary }}
{{ i18n.pages.lrcConverter.translation }}{{ i18n.pages.lrcConverter.phonetic }}
{{ meta.title }}  -  {{ meta.artist }}
{{ i18n.app.name }}

{{ i18n.pages.start.title }}

{{ i18n.pages.start.subtitle }}

{{ i18n.pages.start.privacyHint }}

{{ i18n.actions.import }}

{{ i18n.pages.start.importTitle }}

{{ i18n.pages.start.optionsTitle }}
{{ i18n.pages.start.dropTitle }} {{ i18n.pages.start.dropDesc }}

{{ i18n.pages.lrcConverter.title }}

{{ i18n.pages.lrcConverter.description }}

{{ i18n.pages.lrcConverter.outputLabel }}
{{ lrcxResult }}

{{ i18n.pages.lrcConverter.optionsTitle }}

{{ i18n.pages.lrcConverter.optionsDescription }}

{{ i18n.pages.lrcConverter.mergeZeroDuration }}

{{ i18n.pages.lrcConverter.mergeZeroDurationHelp }}

{{ i18n.pages.lrcConverter.lineSequence }}

{{ i18n.pages.lrcConverter.sequenceHelp }}

{{ i18n.pages.lrcConverter.phonetic }}
{{ i18n.pages.lrcConverter.lyric }}
{{ i18n.pages.lrcConverter.translation }}

{{ i18n.pages.lrcConverter.currentOrder }}{{ sequenceOrder }}

{{ feedback }}

cover

{{ name }}

{{ i18n.pages.playlistPage.description }} {{ desc }}

{{tname}}
{{ i18n.actions.playAll }} {{countNum}}
{{ i18n.labels.cover }}
{{ i18n.labels.title }}
{{ i18n.labels.artist }}
{{ i18n.labels.duration }}
{{ i18n.labels.marks }}

{{ i18n.pages.fileMaintenance.kicker }}

{{ i18n.pages.fileMaintenance.title }}

{{ i18n.pages.fileMaintenance.subtitle }}
{{ i18n.pages.fileMaintenance.pendingRecords }} {{pendingRecordCount}}
{{ i18n.pages.fileMaintenance.pendingReferences }} {{pendingReferenceCount}}
{{ i18n.pages.fileMaintenance.observerBatches }} {{pendingObserverBatchCount}}
{{ i18n.pages.fileMaintenance.runtimeQueue }} {{runtimeQueueUpdated}}
{{statusText}}

{{ i18n.pages.fileMaintenance.completedTitle }}

{{completedRecordCount}}
{{record.title}} {{record.timeText}}
{{record.statusText}}

{{record.summaryText}}

{{record.rootText}} {{record.eventText}} {{record.thresholdText}} {{record.appliedText}}

{{ i18n.pages.fileMaintenance.operationResultTitle }}

{{item.label}} {{item.value}}

{{emptyTitle}}

{{emptyText}}

{{record.title}} {{record.timeText}}
{{record.statusText}}
{{record.rootText}} {{record.eventText}} {{record.thresholdText}} {{record.appliedText}}

{{record.summaryText}}

{{item.label}} {{item.value}}

{{ i18n.pages.fileMaintenance.operationResultTitle }}

{{item.label}} {{item.value}}
{{ i18n.pages.fileMaintenance.oldRoute }} {{item.oldRoute}}
{{affected.label}} {{affected.value}}
{{item.reasonText}}

{{ i18n.pages.fileMaintenance.noCandidates }}

使用指南

MiuPlayer Box

MiuPlayer Box 选择网页路线,不做二进制分发,尽量跟随浏览器新特性来实现本地音乐播放、歌词展示和数据管理。下面是关键能力、限制和常见配置说明。

安全授权 轻量可离线 本地优先 歌单可备份

为什么用网页做本地播放器

浏览器对文件访问、缓存、PWA、媒体控制和画中画的支持已经足够承担一部分桌面音乐播放器场景。相比传统桌面软件,网页播放器更轻、更容易更新,也更容易控制权限边界。

安全

文件和目录访问由浏览器授权,风险操作需要用户明确确认。

轻量

无需安装完整桌面程序,可离线使用,也方便保留或回退版本。

性能

面向万级曲库做渲染优化,避免为播放器额外启动一个完整浏览器壳。

数据掌控

尊重磁盘结构,不做多余缓存;歌单数据可导入、导出和备份。

受限功能说明

网页平台仍有边界。例如系统级快捷键、直接打开文件资源管理器等能力会受到浏览器限制。MiuPlayer Box 会尽量提供替代方案。

限制补救权衡
无法注册系统级快捷键播放器内快捷键与系统媒体控制不会抢占其他应用快捷键。
网页不能直接打开文件资源管理器安装 pwa-enhancer.exe 后使用自定义协议该能力需要用户主动安装并授权。
没有桌面歌词歌词小窗播放器可以部分替代浏览器目前不会支持透明顶层窗口这种危险API这个网页做不了≧ ﹏ ≦

完整功能建议环境

  • Chromium 内核浏览器,版本高于 130
  • Windows / Linux / macOS
  • 如需“在文件资源管理器中显示”,需安装 pwa-enhancer

想确认浏览器能力是否完整?

请打开 兼容性检测 页面查看结果。

本地音乐文件夹浏览

支持 .lrc.lrcx 歌词文件,并会在需要时回退到内嵌歌词。

步骤

  1. 在开始页点击“打开文件夹”,选择音乐目录并授权读取。
  2. 进入“本地音乐浏览器”,即可看到对应目录。
  3. 如果需要显示真实系统路径,可在根目录右键文件夹并设置绝对路径。

画中画播放器

MiuPlayer Box 提供两类 Picture-in-Picture 播放器:迷你控制器和歌词播放器。

步骤

  1. 迷你播放器入口在底部播放控制区域:
  2. 歌词播放器入口在歌词视图中:
  3. 点击后没有反应时,请先检查浏览器兼容性。

在文件资源管理器中显示

该功能允许网页应用通过自定义协议打开系统文件资源管理器。

要求

  • Windows 10 或更高版本
  • 已安装 pwa-enhancer.exe
  • 为音乐根目录设置了绝对系统路径

安装 pwa-enhancer.exe

  1. 从下面链接或 GitHub 下载 pwa-enhancer,并放在固定目录。
  2. 在终端中运行 pwa-enhancer.exe --install
  3. 回到 本地音乐浏览器 根路径,右键非临时文件夹并选择“设置绝对路径”。
  4. 将音乐文件夹对应绝对系统目录填充到输入框中。填写错误可能导致打开文件位置无效
pwa-enhancer.exe 会注册 explorerlink: 协议,使网页应用可以发起受控的资源管理器打开请求。卸载可运行 pwa-enhancer.exe --uninstall

PWA 安装

你可以把 MiuPlayer Box 安装为独立窗口运行的 PWA。

要求

Chromium 内核浏览器,版本高于 110。

步骤

  1. 打开浏览器菜单,寻找“安装应用”或“安装 MiuPlayer Box”。
  2. 确认安装后,应用会以独立窗口打开。
  3. 安装后可从系统应用列表、任务栏或桌面快捷方式启动。
  4. 若有更新,下次打开应用时会自动刷新资源。

Guide

MiuPlayer Box

MiuPlayer Box takes the web app route instead of binary distribution. It follows modern browser features to provide local playback, lyric display, and data management. This page covers key features, limits, and common setup steps.

Permission-based Light and offline-ready Local-first Backup-friendly playlists

Why Use the Web for a Local Player

Browser support for file access, caches, PWA installation, media controls, and picture-in-picture is now strong enough for part of the desktop music player workflow. Compared with traditional desktop software, a web player stays lighter, easier to update, and clearer about permission boundaries.

Safety

File and folder access is controlled by the browser, and risky actions require explicit user confirmation.

Lightweight

No heavy desktop installation. Offline use and version staying are easier to manage.

Performance

The UI is optimized for large libraries and avoids launching another full browser shell just for playback.

Data Control

The app respects your folder structure, avoids unnecessary caches, and supports playlist import, export, and backup.

Known Platform Limits

The web platform still has boundaries. System-wide shortcuts and directly revealing files in Explorer are limited by the browser, so MiuPlayer Box provides practical workarounds where possible.

LimitWorkaroundNote
No system-wide shortcut registrationUse in-player shortcuts and system media controlsThe app will not hijack shortcuts from other apps.
A web page cannot directly open File ExplorerInstall pwa-enhancer.exe and use the custom protocolThis requires explicit installation and user-level authorization.
No desktop lyric overlayThe lyric popup player can partially replace itBrowsers are not going to support risky APIs like transparent always-on-top windows, so this web app cannot do that.

Recommended Environment

  • Chromium-based browser, version above 130
  • Windows / Linux / macOS
  • pwa-enhancer installed if you need reveal-in-file-explorer support

Want to verify browser support?

Open the Compatibility Check page and review the result.

Local Music Folder Explorer

Supports .lrc and .lrcx lyric files, with fallback to embedded lyrics when needed.

Steps

  1. On the start page, click Open Folder, choose a music folder, and grant read access.
  2. Go to Local Music Browser. The selected folder will appear there.
  3. To support real system paths, right-click a root folder and set its absolute path.

Picture-in-Picture Players

MiuPlayer Box provides two Picture-in-Picture players: a compact controller and a lyric player.

Steps

  1. The compact player button is in the bottom player controls:
  2. The lyric player button is in the lyric view:
  3. If nothing happens after clicking either button, check browser compatibility first.

Reveal in File Explorer

This feature lets the web app open a system file explorer through a custom protocol.

Requirements

  • Windows 10 or later
  • pwa-enhancer.exe installed
  • Absolute system path configured for the music root folder

Install pwa-enhancer.exe

  1. Download pwa-enhancer below or from GitHub, then place it in a fixed folder.
  2. Run pwa-enhancer.exe --install in a terminal.
  3. Go to the root path of Local Music Browser, right-click a non-temporary folder, and choose "Set absolute path".
  4. Fill in the absolute system directory for that music folder. If the path is wrong, reveal-in-file-explorer may not work correctly.
pwa-enhancer.exe registers the explorerlink: protocol, allowing controlled Explorer launches from the web app. Uninstall it any time with pwa-enhancer.exe --uninstall.

PWA Installation

You can install MiuPlayer Box as a standalone PWA window.

Requirements

Chromium-based browser, version above 110.

Steps

  1. Open the browser menu and look for Install App or Install MiuPlayer Box.
  2. Confirm the prompt, and the app will open in its own standalone window.
  3. After installation, you can launch it from the system app list, taskbar, or desktop shortcut.
  4. If updates are available, the PWA will refresh resources automatically the next time you open it.

{{ i18n.pages.compatibility.eyebrow }}

{{ i18n.pages.compatibility.title }}

{{ i18n.pages.compatibility.intro }}

{{ i18n.pages.compatibility.available }} {{ i18n.pages.compatibility.limited }} {{ i18n.pages.compatibility.unavailable }}

{{group.title}}

{{group.description}}

{{item.name}}

{{item.description}}

{{item.detail}}
{{item.statusText}}

关于项目

MiuPlayer Box

一个主打轻量、灵活和本地优先的网页音乐播放器。它尽量把浏览器的新能力用到音乐管理、歌词播放和歌单整理上,同时保留网页应用的低负担体验。 Web Platform New API 实验性项目, light but not slight!

v{{ version }} {{ builtTime }} Web Music Player

开发进度

当前应用界面和主要能力仍在持续完善。MiuPlayer Box 已经可以承担日常本地音乐播放,但歌单、设置、历史记录和高级歌词体验还会持续演进。

  • 已完成WebDAV 支持
  • 已完成基于文件夹的本地音乐浏览优化
  • 进行中灵活歌单
  • 进行中应用设置
  • 初步听歌历史
  • 规划中听歌统计
  • 初步国际化支持
  • 进行中高级歌词LRCX初步支持

又一音乐播放器?

我通常每周都会花大量时间听歌。在项目启动之初,我对当时的桌面音乐播放器感到沮丧,因为它们要么操作笨拙、设计过时,要么功能不符合个人习惯。 我对本地音乐做了大致文件夹分类,希望至少有直观的类文件浏览器式的音乐导航并且支持播放列表。 同时,我需要歌词渲染。

当时(2024年末)桌面端也有现成方案,但往往基于Electron,安装包重、占用偏高、灵活度一般。没有满足我设想的期望。 大概我很挑剔吧,何不自己造一个呢? 基于一些Web平台新的实验性API,MiuPlayer Box从自用需求初步,逐步把设想变为现实。

目标

  • 轻量:极致轻量,应用体积未压缩情况下不到2MB
  • 平滑升级:无需厚重安装,更新和回退都自然。
  • 多音乐来源:支持本地、和远程音乐。以文件夹为核心组织音乐,并提供歌词支持。
  • 流畅:尽量减少 UI 渲染和媒体解析的负担
  • 开放:允许本地、WebDAV 和更多来源并存。逐步开放自定义API
  • 歌单:提供更自由、可备份、可迁移的歌单体验。
  • 无侵入:细节高度可控,选择权交给用户
  • 安全:所有权限受浏览器沙箱保护,随时可便捷地撤销。
  • 绿色:纯粹无广无后台网络请求,统计可关。个人自用,直到倒闭初心不变

个人私心

MiuPlayer Box是一款按个人喜好随心所欲的音乐播放器,也是拒绝循规蹈矩的 Web Experiment Project。

作者想做点不一样的东西,目标是最强网页本地音乐播放器;(据说代码非常优雅ヾ(≧▽≦*)o)
同时也是 LRCX 高级歌词播放器示例项目。(作者也绝对不会告诉你大费周章设计歌词格式写播放器只是为了方便学喜欢的歌的!! ̄へ ̄)

致谢

SoberJS

WebComponent响应式前端组件库,其极致轻量低侵入的设计理念与MiuPlayer Box高度一致

WebDAV

面向 NodeJS 与 Web 的 WebDAV 客户端,代码质量不错

About

MiuPlayer Box

A lightweight, flexible, local-first web music player. It brings modern browser capabilities into music browsing, lyric playback, and playlist management while keeping the app easy to open and update.

v{{ version }} {{ builtTime }} Web Music Player

Development Status

The interface and major features are still evolving. MiuPlayer Box is already useful for daily local playback, while playlist editing, settings, listening history, and advanced lyric tools will keep improving.

  • DoneWebDAV support
  • DoneFolder-based local music browser polish
  • In progressFlexible playlists
  • In progressApplication settings
  • PlannedListening history
  • PlannedListening stats
  • BootstrapInternationalization support
  • PlannedAdvanced lyric support, planned for a later major release

Why Another Music Player?

I spend a lot of time listening to music every week. When this project started, I was frustrated with the desktop music players I had at the time: they were either awkward to use, visually dated, or just did not fit my own habits. I had already organized my local music roughly by folders, so I wanted at least an intuitive file-browser-style way to navigate music, with proper playlist support. I also needed lyric rendering.

Back then, around late 2024, there were workable desktop options, but many were based on Electron: heavier install packages, higher resource use, and only average flexibility. None of them really matched what I had in mind. Maybe I am just picky, but then why not build one myself? With a few experimental new APIs from the web platform, MiuPlayer Box started as a tool for my own use and gradually turned those ideas into a web app.

Goals

  • Lightweight: aggressively small, with the compressed app ideally staying under 2MB.
  • Smooth upgrades: no heavy installer, and updates or rollbacks should feel natural.
  • Multiple music sources: support both local and remote music, organized around folders with lyric support.
  • Fluid: reduce the overhead of UI rendering and media parsing wherever possible.
  • Open: let local music, WebDAV, and more future sources coexist, and gradually open custom APIs.
  • Playlists: offer a freer playlist experience that is easy to back up and migrate.
  • Non-intrusive: keep the details highly controllable and leave the choice to the user.
  • Safe: all permissions stay inside the browser sandbox and can be revoked conveniently at any time.
  • Clean: no ads, no background network noise, stats can be turned off, and the original intent stays the same as long as the project lives.

A Personal Motive

MiuPlayer Box is a music player built around personal taste and freedom, and also a distinct Web experiment plus an advanced LRCX lyric-playback ecosystem project. Rumor says the code is very elegant (show-off work, maybe)

Thanks

SoberJS

A responsive WebComponent front-end component library whose extremely lightweight, low-intrusion design philosophy aligns closely with MiuPlayer Box.

WebDAV

A WebDAV client for NodeJS and the web, with solid code quality.

使用帮助

常见问题

MiuPlayer Box 把本地文件、浏览器权限与 PWA 能力组合在一起,因此部分行为与传统桌面播放器不同。 这里按实际任务解释最常遇到的问题。

导入、权限与数据

从选择音乐到长期保存曲库,遵循浏览器为本地文件设置的边界。

选择“文件”和“文件夹”有什么区别?

选择文件适合快速加入一首或少量音乐;选择文件夹会建立一个曲库入口并扫描其中的音频。是否继续扫描子文件夹由导入区的“包含子文件夹”选项决定。不同浏览器提供的文件夹能力不同,支持 File System Access API的浏览器以文件夹打开方可解锁完整体验。功能受限时仍可退回临时播放。

为什么选过文件夹后,还可能需要重新授权?

文件访问权限由浏览器保存和恢复,而不是由播放器绕过系统长期持有。重启浏览器、使用隐私模式、清理站点数据、浏览器策略变化,或移动和重命名文件夹,都可能让原授权失效。重新选择同一目录只是恢复访问关系,不会复制或上传目录内容。

导入的本地音乐会上传到服务器吗?

不会因为“选择文件”或“选择文件夹”而自动上传。本地音频由浏览器直接读取并播放。在线媒体、在线歌词或其他网络来源可能各自发起网络请求,但这与本地导入是不同的数据路径。

文件能看到,为什么仍然无法播放?

扩展名只说明文件声称的格式,真正能否播放还取决于音频编码、文件是否损坏,以及当前浏览器和系统提供的解码器。同一种容器也可能装入不同编码。可以先查看兼容性检测的格式声明,再用其他已知正常的音频交叉验证。

为什么清理站点数据后,歌单或授权记录消失了?

歌单、设置、文件句柄与离线资源都可能保存在浏览器的站点存储中。清理站点数据、重装浏览器配置或使用临时会话,可能一并删除这些资料。重要歌单与配置应定期从设置页的本地数据区域导出备份;备份不包含原始音乐文件。

设备、权限与安装

系统设备与离线能力会同时受到浏览器、操作系统和当前安全上下文影响。

选择输出设备为什么可能请求麦克风权限?

受Chromium系浏览器API限制,缺乏细粒度获取输出设备的API。只能一次性请求包含麦克风的全部音频权限来取得可辨认的输出设备列表。MiuPlayer Box 只用这一步解锁设备枚举,取得结果后会立即停止临时音频轨道,不使用麦克风。Firefox浏览器上则不需申请麦克风。

安装为 PWA 后,就一定能完全离线使用吗?

不一定。安装只表示应用可以像独立窗口一样启动;离线可用还依赖 Service Worker 是否控制当前页面、所需资源是否已经缓存,以及缓存是否被系统回收。首次使用或版本切换后,可关闭应用重新后再次打开确认离线资源状态。

歌词与播放队列

播放相关工具将保持连续工作,同时允许用户随时覆盖自动行为。

歌词为什么缺失、错位或匹配到别的歌曲?

歌词来源可能依赖文件内嵌信息、同名歌词或在线匹配;不完整的标题、艺人和时长会降低匹配准确度。先检查音乐元数据和歌词来源,再手动替换或校正歌词。逐词时间轴本身有误时,需要在歌词工具中重新调整。

LRC → LRCX 转换会修改原歌词文件吗?

不会。转换器只处理你粘贴到页面中的文本,并把结果显示在输出区;除非你主动复制并覆盖自己的文件,否则原文件不会被写入或替换;
若需要自动化批量转换,可使用LRC to LRCX服务的高级转换模式。

播放队列为什么会自动展开、收缩,按钮又为什么消失?

“自动展开/收缩”控制队列面板是否响应右侧边缘;收缩后的按钮自动隐藏是另一套保持界面整洁的逻辑,即使关闭自动展开/收缩也仍会生效。把鼠标移到右侧或在移动端轻触按钮附近可再次唤出按钮。手动点击按钮后,自动行为会暂停十秒,优先保留你的选择。若不喜欢,选项中可在关闭该行为。

如何排查兼容性

用检测结果缩小范围,而不是把一个绿色状态当作绝对保证。

兼容性检测中的“可用”“受限”与“不可用”分别代表什么?

“可用”表示当前环境暴露了预期能力或已确认相应状态;“受限”表示存在回退方案、尚未获得持久状态,或只能确认 API 入口;“不可用”表示当前快照没有发现所需入口。检测不会主动申请权限,也不能保证每个文件、设备和系统策略都成功,仍需结合实际操作判断。

Help

Questions & answers

MiuPlayer Box combines local files, browser permissions, and PWA capabilities, so some behavior differs from a traditional desktop player. These answers are organized around the tasks people most often need to complete.

Imports, permissions, and data

From choosing music to keeping a library, it helps to understand the boundaries browsers place around local files.

What is the difference between choosing files and choosing a folder?

Choosing files is useful for adding one track or a small selection quickly. Choosing a folder creates a library entry and scans it for audio. The “include subfolders” option decides whether that scan continues into nested folders. Folder capabilities differ between browsers, so a limited environment can still fall back to selecting individual files.

Why might I need to grant access to a folder again?

The browser stores and restores file permissions; the player cannot bypass the system and keep permanent access by itself. Restarting the browser, using a private session, clearing site data, changing browser policy, or moving or renaming the folder can invalidate a previous grant. Selecting the same folder again only restores that relationship—it does not copy or upload its contents.

Are imported local tracks uploaded to a server?

No upload happens automatically when you choose files or a folder. The browser reads and plays local audio directly. Online media, online lyrics, or other network providers may make their own requests, but those use a different data path from local import.

Why is a visible file still unplayable?

A filename extension only says what the file claims to contain. Playback also depends on the audio codec, file integrity, and the decoders supplied by the browser and operating system. The same container can hold different codecs. Check the format declarations on the compatibility page, then compare with another file that is known to work.

Why did playlists or permission records disappear after site data was cleared?

Playlists, settings, file handles, and offline resources may all live in browser site storage. Clearing that storage, rebuilding a browser profile, or using a temporary session can remove them together. Export important playlists and configuration regularly from the Local Data area in Settings. A backup does not include the original music files.

Devices, permissions, and installation

System devices and offline behavior depend on the browser, operating system, and current security context.

Why can choosing an output device request microphone permission?

Some browsers hide audio-device names until media permission has been granted, so the player may request audio access once to obtain a recognizable output-device list. MiuPlayer Box uses this step only to unlock device enumeration and immediately stops the temporary audio tracks afterward; it is not intended to record. You can decline, but device names or switching may remain limited.

Does installing the PWA guarantee full offline use?

No. Installation means the app can launch in its own window. Offline use also depends on whether a Service Worker controls the page, whether required resources have already been cached, and whether the system has reclaimed that cache. After first use or a version change, open the app online once and check its offline-resource state.

Lyrics and the playback queue

Playback tools try to stay out of the way while still letting your explicit choice override automation.

Why are lyrics missing, out of sync, or matched to another song?

Lyrics may come from embedded metadata, a matching local lyric, or an online match. Incomplete title, artist, and duration data reduces matching accuracy. Check the track metadata and lyric source first, then replace or correct the lyric manually. If word-level timing is wrong, adjust it with the lyric tools.

Does the LRC → LRCX converter modify my original lyric file?

No. The converter only processes text pasted into the page and shows the result in its output area. Your original file is not written or replaced unless you deliberately copy the result and overwrite it yourself.

Why does the queue expand or collapse automatically, and why does its button disappear?

Automatic expand and collapse controls whether the queue panel responds to the right edge. Hiding the button after the panel collapses is a separate tidiness behavior and remains active even if panel automation is disabled. Move the pointer to the right edge, or tap near the button on a touch device, to reveal it again. After you click the button manually, automatic behavior pauses for ten seconds so your choice takes priority.

Troubleshooting compatibility

Use the results to narrow the search, not as an absolute promise that a feature will work.

What do “available,” “limited,” and “unavailable” mean?

“Available” means the expected capability is exposed or its relevant state was confirmed. “Limited” means a fallback exists, persistence has not been granted, or only the API entry point can be confirmed. “Unavailable” means the current snapshot did not find the required entry point. The check never requests permission and cannot account for every file, device, or system policy, so confirm the result with the real task.

{{ i18n.pages.localMusic.title }}

{{ i18n.actions.playAll }}
{{ i18n.pages.localMusic.searchMusic }}

{{ i18n.pages.playlists.title }}

{{ target }}
{{ i18n.pages.playlists.sortBy }} 
playlist-cover

{{pItem.name}}

{{pItem.desc}}

{{ i18n.pages.onlineLibrary.title }}

{{ i18n.pages.onlineLibrary.newTab }}

{{ i18n.pages.onlineLibrary.chooseType }}

WebDAVNeteaseNavidrome

://
://
{{ i18n.actions.playAll }}{{ i18n.pages.onlineLibrary.showCover }}
{{ i18n.labels.cover }}
{{ i18n.labels.title }}
{{ i18n.labels.artist }}
{{ i18n.labels.marks }}
{{ i18n.actions.playAll }} {{ i18n.actions.refresh }}
{{ i18n.pages.localMusic.loadMeta }}
{{ i18n.actions.playAll }}{{ i18n.pages.onlineLibrary.showCover }}
{{ i18n.labels.cover }}
{{ i18n.labels.title }}
{{ i18n.labels.artist }}
{{ i18n.labels.marks }}

{{ i18n.pages.playHistory.title }}

{{historyCount}}
{{ i18n.status.loading }}
{{ i18n.pages.playHistory.emptyTitle }} {{ i18n.pages.playHistory.emptyText }}
{{ i18n.pages.playHistory.filteredEmpty }}

{{row.group}}

{{ i18n.pages.playStats.title }}

{{ i18n.pages.playStats.localOnly }}
{{ i18n.pages.playStats.rangeLabel }}{{range.label}}
{{ i18n.pages.playStats.libraryOverview }} {{libraryNote}} {{indexUpdatedText}}
{{metric.label}} {{metric.value}}
{{indexProgressText}}

{{emptyTitle}}

{{emptyText}}

{{ i18n.pages.playStats.hourlyTitle }}

{{hourReadout}}
{{tick.label}}

{{ i18n.pages.playStats.weeklyTitle }}

{{rangeLabel}}
{{item.label}} {{item.display}}

{{ i18n.pages.playStats.libraryTitle }}

{{libraryNote}}

{{ i18n.pages.playStats.libraryAudio }}

{{segment.name}} {{segment.value}} · {{segment.percentText}}

{{ i18n.pages.playStats.libraryLyric }}

{{segment.name}} {{segment.value}} · {{segment.percentText}}

{{ i18n.pages.playStats.genreTitle }}

{{ i18n.pages.playStats.genreDesc }}
{{genre.name}}

{{ i18n.pages.playStats.rankingTitle }}

{{ i18n.pages.playStats.topListened }}{{ i18n.pages.playStats.topPlayed }}
{{index + 1}}
{{song.title}} {{song.artist || i18n.status.unknown}}
{{formatRankingValue(song)}}
{{ i18n.pages.playStats.specialDaysTitle }} {{ i18n.pages.playStats.specialDaysSubtitle }}
{{item.title}} {{item.day}}

{{item.reason}}

{{item.value}}
{{fragment.prefix}} {{fragment.value}} {{fragment.suffix}}

{{ i18n.pages.settings.title }}

{{ i18n.pages.settings.basic }}

{{ i18n.pages.settings.language }} {{ i18n.pages.settings.languageTrigger }}
{{ i18n.pages.settings.persistentStorage }} {{ i18n.pages.settings.persistentDesc }}

{{ i18n.pages.settings.ui }}

{{themeBackgroundDetailSummary}} {{themeBrightnessSummary}}
{{ i18n.pages.settings.themeColor }} {{ i18n.pages.settings.themeColorDesc }}
{{themeCoverColor}} {{themeCoverStatus}}
{{themeColor}}
{{ i18n.pages.settings.themePaletteLight }}
{{ i18n.pages.settings.themePaletteDark }}
{{ i18n.pages.settings.themeBrightness }} {{themeBrightnessSummary}}
{{ i18n.pages.settings.themeBackground }} {{themeBackgroundDetailSummary}}
{{themeSolidCustomColor}}
{{ i18n.pages.settings.themeSourceUpload }} {{ i18n.pages.settings.themeImageDesc }}

{{ i18n.pages.settings.playback }}

{{ i18n.pages.settings.audioDevice }} {{audioDeviceStatus}}

{{ i18n.pages.settings.features }}

{{ i18n.pages.settings.localFileSection }}

{{ i18n.pages.settings.shortcuts }}

{{ i18n.pages.settings.shortcutsDesc }}
{{shortcut.title}}
{{shortcut.bindingText}}
{{shortcut.statusText}}

{{ i18n.pages.settings.advanced }}

{{ i18n.pages.settings.cacheSize }}

{{ i18n.pages.settings.cacheSizeDesc }}
{{ i18n.pages.settings.cacheUsage }} {{LRU_usage}}/{{LRU_SIZE}}
{{ i18n.pages.settings.cacheCountUnit }}
{{LRU_SIZE}}

{{ i18n.pages.settings.serviceWorker }}

{{swStatusText}}
{{ i18n.pages.settings.registration }} {{swRegistrationText}} {{ i18n.pages.settings.controller }}: {{swControllerText}}
{{ i18n.pages.settings.active }} {{swActiveVersionText}} {{ i18n.pages.settings.stayed }}: {{swPinnedVersionText}}
{{ i18n.pages.settings.update }} {{swUpdateText}} {{ i18n.pages.settings.integrity }}: {{swIntegrityText}}
{{ i18n.pages.settings.clients }} {{swClientText}} {{ i18n.pages.settings.conflicts }}: {{swConflictText}}
{{ i18n.pages.settings.support }}{{swSupportedText}} {{ i18n.pages.settings.savedStay }}{{swStoredStayText}} {{ i18n.pages.settings.versions }}{{swVersionCount}} {{ i18n.pages.settings.caches }}{{swCacheCount}}
{{ i18n.pages.settings.versionTarget }} {{ i18n.pages.settings.integrity }}: {{swIntegrityText}}
{{swVersionActionHintText}}

{{ i18n.pages.settings.localData }}

{{ i18n.pages.settings.storageUsage }} {{ dataMB }} MB

{{ i18n.pages.settings.exportPlaylist }}

{{ i18n.pages.settings.exportPlaylistDesc }}

{{ i18n.pages.settings.clearOfflineCache }}

{{ i18n.pages.settings.clearOfflineCacheDesc }}

{{ i18n.pages.settings.deleteDatabase }}

{{ i18n.pages.settings.deleteDatabaseDesc }}

{{appVersion}} {{ i18n.pages.settings.updateLastCheck }}: {{updateLastCheckText}} {{updateStatusText}}