louislam/navifsp
GitHub: louislam/navifsp
基于 WinFSP 将 Navidrome 音乐服务器挂载为 Windows 本地驱动器,使 Foobar2000 等传统播放器能直接管理远程音乐库。
Stars: 2 | Forks: 0
# NaviFSP
将 Navidrome 服务器挂载为驱动器或文件夹。让你可以将 Navidrome 音乐库添加到 Windows 上的 Foobar2000 中。
它应该也适用于其他音乐播放器。
## 功能
- 将所有音乐作为普通文件公开(*.mp3、*.flac 等)
- 将专辑封面公开为 `cover.jpg`
- 支持缓存
- 扫描所有文件时节省带宽 - 仅读取歌曲数据的一小块来获取 metadata。
## 预览
在文件资源管理器中挂载的文件夹:
在 Foobar2000 中的样子(与本地音乐库基本没有区别):
## 要求
- Windows 10 或 11 (x64)
- WinFSP([下载](https://github.com/winfsp/winfsp/releases/latest))
- foobar2000(或其他音乐播放器)
## 基本用法
1. 从 https://github.com/louislam/navifsp/releases/latest 下载最新版本。
2. 解压
3. 打开 `.env` 文件并设置你的 Navidrome `username`、`password` 和你的 `Navidrome base URL`。
4. 确保你确实安装了 WinFSP。
5. 运行 `navifsp.exe` 挂载你的 Navidrome 音乐库,默认情况下它会挂载到 `N:\` 驱动器。
6. 将 `N:\` 添加到你的 foobar2000 音乐库,然后点击“Apply”。
7. 建议关闭 `Rescan on startup` 和 `Monitor for changes while running` 以获得更好的性能。
### 命令行用法
如果你不想使用 `.env` 文件,你也可以使用命令行 flag 运行该 exe 文件:
```
navifsp.exe --username abc --password 123 --base-url https://yournavidrome.com --mount N:
```
### Flag 和环境变量
| Flag | Env Var | Default | Required | Description |
|------------------------|------------------------------|-------------------------------|----------|---------------------------------------------------------------|
| `--username` | `NAVIFSP_USERNAME` | | Yes | Navidrome 用户名 |
| `--password` | `NAVIFSP_PASSWORD` | | Yes | Navidrome 密码 |
| `--base-url` | `NAVIFSP_BASE_URL` | | Yes | Navidrome base URL(例如 https://yournavidrome.com) |
| `--mount` | `NAVIFSP_MOUNT` | `N:` | No | 要挂载的驱动器号或文件夹路径(`N:` 或 `C:\navidrome`) |
| `--enable-music-cache` | `NAVIFSP_ENABLE_MUSIC_CACHE` | `false` | No | 启用歌曲数据的磁盘缓存 |
| `--enable-cover-cache` | `NAVIFSP_ENABLE_COVER_CACHE` | `false` | No | 启用基于磁盘的封面图缓存 |
| `--cache-dir` | `NAVIFSP_CACHE_DIR` | `AppData\Local\navifsp\cache` | No | 磁盘缓存目录(仅在启用缓存时使用) |
| `--verbose` | `NAVIFSP_VERBOSE` | `false` | No | 启用 debug 日志 |
| `--no-window` | `NAVIFSP_NO_WINDOW` | `false` | No | 隐藏控制台窗口 |
| `--startup-at-login` | `NAVIFSP_STARTUP_AT_LOGIN` | `false` | No | Windows 登录时自动启动(配合 `--no-window` 使用) |
环境变量也可以通过 exe 文件旁边的 `.env` 文件进行设置。
### 添加到开机启动
1. 你必须使用 `.env` 文件进行配置,不支持 flag。
2. NAVIFSP_NO_WINDOW=true
3. NAVIFSP_STARTUP_AT_LOGIN=true
4. 运行 `navifsp.exe`,现在它应该在后台运行,下次你登录时,它也会自动启动。
## 问答
### 为什么音乐文件的创建/修改日期时间是错误的?
默认情况下,Navidrome 不会返回实际时间。
在你的 Navidrome 服务器上设置 `ND_RECENTLYADDEDBYMODTIME=true` 以使用实际的文件修改时间。
### 为什么有些艺术家文件夹是空的?
为了避免重复的专辑,NaviFSP 只显示艺术家作为主要专辑艺术家的专辑。仅作为合作艺术家或客串表演者出现的艺术家将拥有空文件夹。
### 为什么文件夹和文件名是随机 ID,而不是艺术家/专辑/歌曲名称?
使用真实名称需要处理 Windows 文件路径中的非法字符,这可能会导致冲突。我不想去深究这个问题。
而且这个项目并不是为了在文件资源管理器中使用而设计的,添加到 Foobar2000 后,一切都会在 Foobar2000 中得到很好的组织和显示。
## 动机
作为 Foobar2000 的长期用户,老实说,我无法适应任何现有的 Navidrome 桌面客户端。它们大多数都非常像 Spotify,并且缺少 Foobar2000 的专业功能。
## 仅作分享
在我最终决定使用 WinFSP 编写之前,该项目最初是使用 TypeScript 和 WebDAV 开发的,但令人惊讶的是,使用 WebDAV 是一个非常糟糕的决定:
- 尽管 Foobar2000 原生支持 WebDAV,但不知出于何故它无法显示专辑封面。
- Windows 能够将 WebDAV 映射为网络驱动器,但有些文件不知为何会丢失。(相比之下,它们在 WinSCP 中是正常的)
- 与 Golang 相比,Node.js 或 Deno 真的很慢,尽管看起来我已经用 async 的方式编写了所有代码,但不知为何仍然会发生阻塞 I/O。
对于 WinFsp(或者文件资源管理器?),我简直不明白为什么相同的文件操作会在非常短的时间间隔内被多次触发,这让我别无选择,我不得不在 Navidrome 请求中添加 10 秒的缓存,这虽然很奇怪,但确实有效。
## 未来的可能功能?
- 音乐转码?(文件大小问题,如果不编码整个文件,无法获得完整的文件大小?)
- 添加一个选项,在文件路径中使用艺术家/专辑/曲目名称而不是 ID(但这可能包含 Windows 文件路径中不允许的字符)
- 能够离线播放缓存的音乐,缓存整个文件夹结构?
- 播放列表?
- Foobar2000 组件?
## 相关项目
- foo_opensubsonic (https://github.com/michioxd/foo_opensubsonic)
如果你满足于你的歌曲仅被添加到播放列表,而不是添加到你的音乐库中,这应该是一个更简单的解决方案。
标签:EVTX分析, Navidrome, 文件系统, 日志审计, 系统工具, 虚拟磁盘, 音乐