The Sheley Media Lab
Running Emby, Immich, and Pinchflat on a Proxmox Homelab
My entire home lab runs on Proxmox, hosting a mix of VMs and containers. At the center of it is Emby for movies, TV, and archived YouTube channels, with Immich handling family photos and video as a Google Photos replacement. Here's how it's put together, and some tips if you're thinking about setting up your own.
The Stack, and Where It Runs
Everything runs on Proxmox — a mix of VMs and LXC containers, with most services running in Docker inside a VM for easy management. Emby's official Linux packages support Ubuntu, CentOS, Fedora, openSUSE, and Arch, which also makes it a good fit for a lightweight native LXC container if you'd rather skip Docker for that one service.
🎬 Emby
My media server of choice for streaming movies, TV shows, and archived YouTube content to any device in the house — phones, smart TVs, tablets, you name it. Jellyfin and Plex are solid alternatives if you'd rather go a different direction.
📸 Immich
My replacement for a Google Photos subscription. Immich backs up photos and video automatically from everyone's phones, with face recognition, search, and a timeline view that feels a lot like what it's replacing — just self-hosted.
⚙️ Radarr / Sonarr
Automation tools for managing and monitoring movie (Radarr) and TV show (Sonarr) libraries — keeps everything named and organized correctly, automatically.
Archiving YouTube Channels
One of my favorite parts of the setup: I archive YouTube channels the family actually watches and host them locally through Emby, right alongside movies and TV shows. It plays like any other library — no ads, no algorithm, no worrying about a channel or video disappearing later.
This pairs well with the archivist mindset I cover on my Data Hoarding page — if a video matters to your family, a local copy is a lot more permanent than a bookmark.
How It Works, Roughly
- ▸ Pinchflat handles the downloading — a self-hosted YouTube manager (built on yt-dlp under the hood) where you set rules per channel or playlist and it keeps everything up to date automatically.
- ▸ It writes files out in a folder structure Emby recognizes as a TV-style library, one "show" per channel, and can strip sponsored segments using SponsorBlock data.
- ▸ New videos from favorite channels just show up in Emby automatically, no manual downloading involved.
Tips for Organizing Family Media
Consistency is key. A well-structured file system is essential for any media stack.
1. Standardized Naming Conventions
Use tools like Filebot or the built-in renaming features of the *arr stack to ensure all files follow a standard format (e.g., Movie Name (Year) or Show Name S01E01).
2. Separate Data Volumes
Map separate Docker volumes for configuration data (/config), media files (/data/media), and temporary files (/downloads). Makes migrations and backups much simpler.
3. Handle Duplicates Immediately
For photo collections, use Immich's built-in duplicate detection. Consolidating family photos into one source of truth prevents headaches later on.
4. The "Common Media Root" Strategy
Establish a single top-level directory (e.g., /mnt/media) with subdirectories per media type (Movies, TV Shows, YouTube, Photos). Mount this single root into all your Docker containers to avoid complex path mappings.
Tips for Setting Up Your Own Home Media Server
A few things I'd tell anyone getting started, beyond just "pick a media server app":
Use Hardware Transcoding
If your server has an Intel CPU with Quick Sync or an Nvidia GPU with NVENC, enable hardware transcoding in Emby/Jellyfin/Plex. Software transcoding on a CPU alone will bottleneck fast once more than one device is streaming.
Secure Remote Access Properly
Don't just port-forward your media server directly to the internet. Put it behind a reverse proxy with HTTPS, or better, access it through a VPN like Tailscale or WireGuard so it's never directly exposed.
Use Hardlinks, Not Copies
Configure the *arr stack to use hardlinks/atomic moves instead of copying files between your download and media folders. Saves disk space and avoids doubling your storage needs for every file.
Set Up Separate User Profiles
Give each family member their own profile with appropriate content restrictions. Makes watch history, recommendations, and parental controls actually useful instead of one shared mess.
Automate Subtitles
Bazarr integrates with the *arr stack to automatically find and download subtitles for your library, which is a lot less tedious than doing it manually per file.
Plan Storage Growth Ahead of Time
Media libraries grow faster than people expect. Look into MergerFS + SnapRAID or a proper NAS OS like TrueNAS early, rather than scrambling to migrate a full drive later — more on this on my Data Hoarding page.
Robust Backup and Recovery
The most important part of any lab: never lose data. A 3-2-1 strategy is non-negotiable for irreplaceable family media — original, purchased, or archived.
The original on the server, a local backup copy, and an offsite copy.
Store copies on different types of hardware (e.g., internal SSD for the original, external HDD for the local backup).
A cloud provider (Backblaze B2, AWS S3 Glacier) or an offsite physical drive rotation for crucial data, especially family photos.
Regularly back up the /config folders for Emby, Immich, and the *arrs, so the whole stack can be rebuilt quickly if the server fails.
Related Resources
Official install packages and docs for running Emby natively on Linux.
Jellyfin DocumentationSetup guides for the free, open-source alternative.
Plex SupportOfficial guides for setting up and optimizing the proprietary alternative.
Immich DocumentationSetup, mobile backup, and features for the Google Photos alternative.
PinchflatThe self-hosted app I use to archive YouTube channels for Emby.
Proxmox VE DocumentationThe virtualization platform behind everything in this lab.
My Data Hoarding PageMore on backup philosophy, storage tech, and archival tools.