Ever since I built my first Network-Attached Storage server, I’ve been using it to house all sorts of media. On the backup front, I’ve got dedicated pools that store all the snapshots from my everyday machines and PVE clusters. Then there’s the ebook library I’ve been building for years, which is managed by a Calibre-Web instance. Likewise, I’ve been archiving photos and screenshots with Immich, while Paperless-ngx and its companion apps take care of my documents.
However, my collection of ripped CDs, DVDs, and Blu-rays is by far the largest of the bunch, and Jellyfin is the sole reason my video library has remained organized all these years. And now that I’ve started archiving YouTube playlists and channels, Jellyfin has become even more necessary for keeping everything under control. Fortunately, I came across Pinchflat the other day, and with a little bit of self-hosting finesse, my Jellyfin library has grown tremendously – all without turning my files into a disorganized mess.
These 7 self-hosted apps cater to my data-hoarding needs
From managing my images to storing essential backups, these apps satisfy the data-hoarding gremlin in my head
Pinchflat is great for bulk-downloading YouTube media
And I can filter out videos when I don't want to archive entire channels
Pinchflat can technically download individual videos, but its strength lies in archiving entire channels and playlists at a time. For starters, Pinchflat lets me add channel and playlist URLs as sources, and I can modify the indexing frequency, download cutoff days, and retention settings. On conventional YouTube downloaders, I’d have to pull new videos manually every so often, while Pinchflat can archive fresh uploads after detecting them with its indexing algorithms.
Pinchflat also includes dedicated media profiles, and that’s where the bulk of the video archival settings remain. I can choose the subtitle language, force Pinchflat to pull autogenerated subs, and even embed them directly into videos. I can also decide whether Pinchflat grabs the NFO, metadata, or thumbnail images for each video, and filter out shorts and livestreams if I only want to archive conventional videos. Heck, Pinchflat can also detect sponsor segments and mark them as chapters on the video timeline, or get rid of them altogether.
Since I can create different profiles for multiple channels, I don’t have to worry about low-resolution streams making my academic videos and software walkthroughs blurry. Pinchflat also shows detailed logs of the pending archival tasks, so I can modify certain settings before the videos are downloaded. Or even cancel certain downloads, if I wanted to. It’s a really powerful tool for data hoarders like yours truly, and it gets even better when paired with Jellyfin.
I’ve paired Pinchflat with my Jellyfin server
Deploying Pinchflat was fairly simple with Docker
Considering that I’d have to deal with network shares when setting up my automated Pinchflat pipeline, I tried to remove as many points of failure as I could. My game plan was to use a virtual machine deployed on a TrueNAS dataset to not only set up Pinchflat, but also house the videos it’d eventually download. Then, I’d map the entire folder to an SMB share and pair it with my Jellyfin instance. A bit convoluted, yes, but it sounds simple enough to implement, and shouldn’t give me too much trouble even if I have to troubleshoot broken videos once I start archiving my favorite YouTube channels.
Anyway, I went with a simple Docker container, though I have to give the Pinchflat team kudos for including a config file for Podman. Obviously, I modified the downloads and config path variables in the compose.yml file to reflect the new directories I’d created for Pinchflat. Then, I ran docker compose up -d to get Pinchflat up and running, before using the VM’s IP address and port 8945 to access the app’s web UI. After I’d added a couple of channels as Sources and fine-tuned their Media Profiles per my needs, Pinchflat began its archival tasks, and I turned my attention to the network share aspect of this project.
SMB shares and Proxmox shell wizardry were the secret ingredients for this setup
Truth be told, NFS shares would probably have been the better option here, but having spent hours debugging their permissions in the past, I went with simpler SMB shares instead. I opened the config file for my shares by running sudo nano /etc/samba/smb.conf, and added the following block to the file:
[jellyfin-pinchflat-share]
comment = An SMB share for Jellyfin-Pinchflat
path = /home/ayush/docker/pinchflat/downloads
read only = no
browsable = yes
I also created a password for this share by running sudo smbpasswd -a ayush and restarted the SMB service via sudo systemctl restart smbd. With the SMB share all set up, I switched to the Proxmox node housing my Jellyfin LXC. Specifically, I headed to the Storage tab of the Datacenter section and added the SMB share details to the SMB/CIFS option. But since I wanted the LXC to gain access to the Pinchflat share, I entered the pct set 114 -mp0 /mnt/pve/jellyfin-pinchflat,mp=/mnt/pinchflat command within the Shell tab of the Jellyfin-hosting node. Finally, I headed to Jellyfin’s web UI, and the freshly-configured share appeared right under the Library section, and I was able to access the videos archived by Pinchflat without any issues.
Navidrome's new plugin system adds useful Spotify-like features to the self-hosted app
Another win for Navidrome lovers
Be careful you don’t run out of space when archiving YouTube videos
Before starting the bulk downloads on Pinchflat, I’d set 1080p as the standard format for the videos, which resulted in the app pulling 200GB worth of videos over the next couple of hours. I’ve got ample space in my NAS for a few more TBs, but I’d vastly underestimated how many GBs my archived videos might occupy. Once my library gets past the critical point, I might have to run them through compression algorithms to keep some space free for other NAS experiments.
Jellyfin
- iOS compatible
- Yes
- Android compatible
- Yes
- Desktop compatible
- Yes
