Preface
Ever since I canceled my NetEase Cloud Music subscription, every time I open the app to listen to music I have to endure five or more VIP pop-ups, and a huge chunk of my playlists has gone gray.
So does paying money to capital actually solve the problem? Not really. Even when I still had VIP, it was constantly throwing SVIP ads at me anyway, and the splash ads never became any fewer. It is not that I cannot afford the fee. It is that I am paying, still getting ads, and still watching the licensing catalog shrink. What exactly am I paying for?
As an Apple user, I also tried the 5 RMB student plan for Apple Music, but too much of the music I actually listen to is locked up by domestic streaming platforms. Downloading everything myself and importing it into Apple Music is just too much trouble.
As a spiritually tech-obsessed Virgo, I absolutely refuse to accept ads shoved in my face inside software and devices I already paid for. I had been too lazy to build my own music library before, and the third-party music services floating around online, especially the ones without proper licenses, are unstable anyway. At this point I really have no choice but to start cleaning up the mess myself.
There are many ways to build a personal music library, but since I have already decided to clean house, I might as well do it thoroughly.
This is not only about music. I used to sync photos with Aliyun Drive and left some in Baidu Netdisk. As for movies and TV shows, storage on my everyday devices was limited, so only my Mac mini M4 had a few hundred gigabytes from PT, and even that was not much. My books were even worse, scattered between cloud drives and local folders with no real synchronization, amounting to several hundred volumes.
As it happened, I had an old laptop lying around: a Thinkbook 16+ 2022 with an i5-12500H, RTX 2050, 512 GB SSD, and 2 TB SSD. It felt almost wasteful not to turn it into an all-flash NAS.
As for the NAS system, fnOS was the obvious choice. It is currently very popular, has an active community, and even offers 2 Mb of free relay service.
System Installation
Installing fnOS is actually simple. If you follow the official guide, there is usually no problem.
The issue I ran into was this: my USB drive had already been turned into a multi-boot drive with Ventoy. Since fnOS is based on Debian, in theory I should have been able to just drop the ISO into it. But after plugging in the USB stick and selecting the fnOS installer through Ventoy, it kept saying that no hard drive could be found, and changing modes did not help. In the end I followed the official guide, rebuilt the boot disk with Rufus, and it worked on the first try.
Special Reminder
When running Docker, make sure to configure storage paths properly. Map your data folders, such as your music folder, into the container storage space, and set file permissions in the file manager so they apply to child items as well.
Building a Music Library with Navidrome
Navidrome is a web-based open-source music collection server and streaming service.
In system settings, under app settings, add the music folder so Navidrome is allowed to access it. The default port is 4533.
After setting up the account and password, open the web interface. In most cases Navidrome can directly scan accessible folders and import your music.
music_tag_web
This is a Docker-based multifunction music tag editor with a web interface. Common features include metadata scraping, library organization, duplicate checking, and format conversion.
Its most important background scraping feature requires version 2, which is paid. I paid 10 RMB on Aifadian for a one-month activation code just to try it out first.
Most of my music files came from NetEase Cloud Music. Because I never had any real sense of organization before, the filenames were a mess. There were duplicates all over my iPhone, Redmi, Mac, and Baidu Drive, and a lot of songs existed in multiple versions or multiple cover versions, such as 《アイロニ (双声道版)》 by 鹿乃 and *菜乃. Many songs I used to listen to years ago have already gone gray on NetEase, such as 双笙’s old version of 道姑 or 封茗囧菌’s 《静悄悄》.
The first step is to choose the music files you want to scrape and organize the file structure into artist - album - track.
For automatic scraping, I usually start with standard mode, matching title, artist, and album. For the data source, I choose the platform the song mostly came from, for example NetEase Cloud Music in my case. I restrict modifications to cover art, lyrics, and lyric files. If title and artist information were not already messed up, most tracks match perfectly.
For songs that cannot be scraped normally, such as very obscure tracks or tracks that have gone unavailable, I switch to loose mode and enable several sources at once, such as NetEase, QQ Music, Kugou, and iTunes, while keeping the modification scope unchanged.
If you let the software modify the artist field as well, it can easily replace lesser-known cover singers with the original performer.
Sometimes the same piece of music exists in different albums. In some cases the actual audio file is identical, such as Merry Christmas Mr. Lawrence; in others it is not, such as TV-size anime inserts versus full-length versions. If album data is also allowed to change, this can easily lead to bad matches.
After scraping everything, I organize the files once more and delete empty folders.
If there are duplicates, I run duplicate checking and strongly recommend enabling acoustic fingerprint comparison. When the fingerprints match, the files are usually just the same song in different formats, such as mp3 and flac, and I normally keep the larger-bitrate or otherwise preferred version and delete the smaller one.
Then I organize the files again and clean up the empty folders one last time.
Once paid for, music_tag_web can also function as the music library itself. It comes with a built-in Subsonic server, and its interface looks more modern and polished than Navidrome.
That said, I am still cautious about the long-term operational reliability of a solo developer project, so for now I am just watching.
Playlist Matcher
Someone on LINUX DO made a Windows tool for importing playlists from streaming platforms into Navidrome: 分享一个适配Navidrome的歌单匹配器.
It supports importing playlists from NetEase Cloud Music, QQ Music, and Apple Music into Navidrome, and also outputs a list of unmatched tracks.
Clients
After the music library is built, the next question is how to listen on mobile and desktop devices.
There are many clients that support Navidrome, and they are easy enough to find online.
I am currently using 音流 (1.3.9), which supports most of the platforms I care about, including Android, iOS, iPadOS, Windows, and macOS. It costs under 60 RMB as a one-time purchase and supports up to seven devices at once.
As a player, it basically meets my needs: a fairly decent-looking interface, the ability to download songs from the NAS for local playback, desktop lyrics, playlists, likes, ratings, and shuffle playback.
There are still issues. It crashes sometimes. Background playback occasionally fails to move on to the next track after finishing one song, though not in a reliably reproducible way. Connection to the NAS can feel slow. And when the client cannot connect to the NAS, it only shows already-downloaded tracks and downloaded playlists. If one song appears in multiple playlists, offline it will appear only in the playlist through which it was originally downloaded.
Since it is a non-open-source app by an individual developer, I would still recommend caution before paying. Try the regular version first.
Building a Book Library with talebook
talebook is a Docker-based open-source project and a compact but powerful private book management system. It is built on calibre and offers book management, online reading and delivery, user management, SSO login, and metadata fetching from Baidu and Douban.
Most configuration is straightforward if you just go through the talebook web admin page item by item. The one thing worth noting is the set of user permissions. Some clients cannot log in normally, and in those cases you need to enable “allow arbitrary download” so that downloads will work.
In book management, you can manually edit some metadata and add tags. My reading is all over the place, so I prefer to classify both the physical folders and the tags according to the Chinese Library Classification.
douban-api-rs
This is the Douban plugin for talebook, and there is an image for it in fnOS. After running the Docker container, copy the corresponding API address into talebook’s “internet book metadata source” setting. Only then will the automatic metadata update function in book management work properly.
For most well-known literary books, Douban scraping works well. But for unpublished materials such as 《业余无线电爱好者的道德和操作守则》 or very obscure or older books such as 《中国的野菜》 from Hainan Publishing House in 2008, Douban either cannot find anything or matches the wrong thing.
I even have a whole pile of “barefoot doctor manuals, militia training guides, martial arts collections, and transmigrator survival texts” sitting in Baidu Drive, a full 120 GB plus.
Most of the martial arts and military manuals are impossible to scrape properly, but historical and literary works fare much better.
Clients
For talebook, or rather OPDS clients in general, genuinely good and modern apps are surprisingly rare.
On Android, I currently download books through the fnOS Android client and then read them locally in eBoox, which can still sync through Google.
tachiyomi is dead because of copyright issues, and its successor Mihon, or similar tools, are much better suited to manga than to books. Their design logic just is not built for ordinary reading. I even ran into a problem where the address could not be set at all when trying to import my self-hosted Komaga source through the komaga plugin.
That said, Kahon, which is derived from Mihon, becomes almost hilariously useful for R18 image sources after you import plugin libraries. As a no-ad way to browse porn, it is honestly pretty great.
On iOS and iPadOS, it is hard for any reading app to beat the built-in iBooks experience. Right now I am trying KyBook 3, though it does not support account login.
When entering the OPDS address, be sure to include both the correct port and the /opds/ path.
Building a Video Library
For me, the built-in fnOS media app is already good enough. It can scrape metadata and classify content. There are clients for Android, iOS, iPadOS, macOS, and Windows. It can also import video resources from Baidu Drive and remotely mounted disks, such as an external drive connected to a Mac and then imported into the fnOS media library over the LAN. Subtitle matching also works online.
If it could also connect to the Bangumi API and the Douban API, that would be even better.
PT
When it comes to acquiring resources, PT is still king. My first recommendation remains qBittorrent from the fnOS app center.
As for how to use the software and where to find torrents, that is left to your own exploration. In any case, it is best to maintain a decent share ratio and seeding time.
One for all, all for one.
Photos
Image management is even easier.
Upload or download photos from all your cloud drives and local devices into the NAS Photos folder. There is no need to carefully organize physical folders beforehand. Once you open the album, it can scan and import automatically. You can also add other local or externally mounted folders under Album - Settings - Folder Management.
In the AI album settings, download the required models first, then run analysis on the unrecognized photos and videos. Classification will happen automatically in the background. All of this runs locally, so if privacy matters more, you can simply leave it disabled.
If you enable GPU acceleration, recognition becomes significantly faster, though that does require installing the proper graphics driver.
I backed up photos from my iPhone, Redmi, and iPad at the same time, which left me with a huge number of duplicates under different filenames. After AI-based recognition and then reviewing similar photos for deduplication, the results were excellent.
Other Handy Small Tools
HivisionIDPhoto
For making your own ID photos. Available as a Docker app in the app center.
peazip
Compression and decompression through Docker. The built-in archive tool in fnOS file management is currently extremely bare-bones and does not even support split archives properly.
singbox
Docker-based. An occasionally necessary little miraculous tool.
fnOS Sync
Synchronizes folders from other devices to the NAS. Supports bidirectional sync, download-only, and upload-only.
You need to install the matching client on the other devices first.
Text Editor
After installing it, you can open txt, yml, log, html, js, md, nfo, and other plain-text files directly from the file manager.
Office Preview
Lets you open Office files up to 500 MB directly inside the file manager.
OmniTools
A toolbox that bundles more than ten small utilities together.
Baidu Netdisk for fnOS
“Almost” ad-free, fairly clean, but you cannot copy file URLs, there is no proper file or folder details page, and it does not seem to show folder sizes either.
Selling the NAS membership separately is terrible.
Not Recommended: the Browser in the App Center
This is basically a Dockerized Google Chrome. The web image is blurry because it is streaming the interface instead of rendering pages directly. Chinese input methods do not work properly, downloaded files have to be moved out manually from the app folder, the default Google search engine requires a proxy, though you can switch it to Bing, and download speed is still poor.
So if you need to download something, I strongly recommend first finding the direct link in your local browser, then adding the download task through the fnOS client instead.
Summary
After several days of initial tinkering, this laptop “NAS” can already manage video, music, photos, and books, while also backing up critical files such as manuals, documentation, manuscripts, PCB files, code, certificates, and passwords.
The next things I want to play with are dashboards, domain names, reverse proxying, IPv6, RSSHub, and an off-site triple-backup setup.
And finally, NetEase Cloud Music can go to hell.
When will I have a drink and discuss the details again?