Project · Home server

Xenticorp-4 Server

A self-hosted media stack fed by my own DVD and Blu-ray rips. It lives on X4, a bench-built Ubuntu server, and the ripping and encoding automation around it is still being built.

Work in progress. X4 and this page are both still being built, so the plans below will change as they turn into hardware and code.

Updated Ubuntu Server Docker Jellyfin ErsatzTV MakeMKV x265

Sorted by status: Running now Planned Ideas

Running now

Running now

Current setup

HostX4: Ubuntu server, bench build, reachable remotely over Tailscale
ContainersDocker: Jellyfin, ErsatzTV, Portainer, cloudflared
Media serverJellyfin with Movies, TV Shows and Music libraries, exposed through a Cloudflare Tunnel
Live TVErsatzTV: custom channels and schedules built from my own library
MusicJellyfin as a Spotify replacement: a Spotify playlist ripped to MP3 with CSVMusic to match the existing MP3 library
DashboardMy own control dashboard for X4: service status and restarts, Jellyfin stats, importer status, system health, updates and power. Private, behind a login
StorageNVMe for the OS and Jellyfin config; a 2.0 TB external drive for media
RippingMakeMKV on a laptop for now; moving it to X4 is planned. Tried ARM (Automatic Ripping Machine) and dropped it; building my own instead
EncodingHandBrake on X1, software x265
OutputMKV with soft subtitles (not burned in) and multiple audio tracks
Old hostJellyfin, ErsatzTV and the cloudflared connector moved over from X2, whose copies are retired

Hardware

CPU / board / RAMi5-10400F, MSI MAG Z490 Tomahawk, 32 GB DDR4 (reused from an old rig)
GPUGT 1030, for display only (no hardware encoder)
PSUCorsair CX650M
Storage~250 GB NVMe + 2 TB Seagate external

No hardware encoding on X4. The 10400F has no integrated graphics (so no Quick Sync) and the GT 1030 has no NVENC, so every encode is CPU x265.

How media gets onto X4

LAPTOP OR X1 · RIP + NAME + ENCODE X4 · LIBRARY + SERVING Disc DVD · Blu-ray · UHD MakeMKV rip to MKV Ripnamer TV naming · TMDb HandBrake MKV · subs kept Shared encode queue X4 + X1 · planned read raw MKV named later copy to X4 planned: straight in Media Importer USB drive → library Library movies · shows sorted in Jellyfin streams to devices ErsatzTV live TV channels serves feeds running planned moves between machines
LAPTOP OR X1 · RIP + ENCODE X4 · LIBRARY + SERVING Disc DVD · Blu-ray · UHD read MakeMKV rip to MKV raw MKV Ripnamer TV naming · TMDb named HandBrake MKV · subs kept Shared queue X4 + X1 · planned copy to X4 planned Library movies · shows Media Importer USB drive → library sorted Jellyfin streams to devices ErsatzTV live TV channels serves feeds running planned machine handoff
Discs are ripped, named and encoded on a laptop or the Ryzen desktop (X1), then copied to X4, where the Media Importer sorts them into one library that Jellyfin and ErsatzTV both read. Copying straight into the library is planned.

How a website change goes live

You idea + review Claude plan + spec Claude Code writes the change brainstorm task GITHUB · PRIVATE REPO X4 testing main pushes merge after review Sandbox site private preview Live site xenticorp.net pull pull secure tunnel Visitors
You idea + review brainstorm Claude plan + spec task Claude Code writes the change GITHUB X4 testing main pushes merge after review Sandbox site private preview Live site xenticorp.net pull pull secure tunnel Visitors
Changes are brainstormed with Claude, built by Claude Code and pushed to a testing branch. X4 previews that branch on a private sandbox. Merging to main is the manual step, and only main reaches the public site.

Planned

Decided, not built

Rip-to-library pipeline

Rip (MakeMKV, X4) → /incoming → Name (Ripnamer) → /staging → Encode (Tdarr: X4 + X1) → /library → Jellyfin scans

Naming is handled by Ripnamer. A few lessons borrowed from Riparr:

Encoding: one shared queue (Tdarr)

Optical drive bay (1U)

Only ever two drives:

Bay 1LG BU40N (9.5 mm slim) for 4K UHD. Slim SATA to an ATAPI-capable USB bridge (or SATA direct).
Bay 2The current 8-in-1 USB Blu-ray drive (hub and card reader combo) for DVD and regular Blu-ray, on a USB extension to X4’s rear port.

4K UHD is a drive decision, not a setting. It only works through MakeMKV LibreDrive on specific drives and firmware, so the plan is to check LibreDrive status in MakeMKV the day the drive arrives, and return it if it isn’t supported.

Control and alerts

One control service on X4 does the real work, with Discord, ntfy and Claude as front ends, so I can check on rips and get a ping on my phone when a disc needs swapping or something fails. The Claude side is a remote MCP connector, so it’s there from any device.

Ideas

Maybe, someday