<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jellyfin on Linux Colorado</title><link>https://www.linuxcolorado.com/tags/jellyfin/</link><description>Recent content in Jellyfin on Linux Colorado</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 12 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.linuxcolorado.com/tags/jellyfin/index.xml" rel="self" type="application/rss+xml"/><item><title>After the Rip: Auto-Naming a Home Media Library for Jellyfin with Python, TMDB, and ffprobe</title><link>https://www.linuxcolorado.com/post/2026-08-18-jellyfin-media-automation-arm/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-jellyfin-media-automation-arm/</guid><description>&lt;p&gt;Getting video &lt;em&gt;off&lt;/em&gt; a disc is the part everyone talks about. The part that actually eats your evenings is everything &lt;em&gt;after&lt;/em&gt;: a folder full of &lt;code&gt;title_t00.mkv&lt;/code&gt;, &lt;code&gt;disc1/&lt;/code&gt;, &lt;code&gt;C3_t01.mkv&lt;/code&gt; files that mean nothing to a media server. &lt;a href="https://jellyfin.org"&gt;Jellyfin&lt;/a&gt; wants very specific names and folder layouts, and if you don&amp;rsquo;t give them to it, you get &amp;ldquo;Unknown Movie,&amp;rdquo; mismatched episodes, and bonus features scattered as phantom entries.&lt;/p&gt;
&lt;p&gt;So I extended a post-processing step into a proper Python pipeline that takes whatever came out of my ripping setup and turns it into a Jellyfin-perfect library: correct movie names with IMDb IDs, TV episodes matched to the right &lt;code&gt;SxxExx&lt;/code&gt;, extras bucketed into the folders Jellyfin recognizes, then rsynced to the NAS and scanned in — with an ntfy ping at the end. This post is about that pipeline. &lt;strong&gt;It is deliberately not about disc decryption&lt;/strong&gt; — it starts the moment you have plain &lt;code&gt;.mkv&lt;/code&gt; files.&lt;/p&gt;</description></item><item><title>jf-barcode-search: Scanning Barcodes to Query Jellyfin — and a Checklist for Open-Sourcing a Homelab Repo</title><link>https://www.linuxcolorado.com/post/2026-08-18-jf-barcode-search-open-source/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-jf-barcode-search-open-source/</guid><description>&lt;p&gt;Here&amp;rsquo;s a problem specific to people who rip their own discs: you&amp;rsquo;re standing in a thrift store holding a $3 Blu-ray, and you genuinely cannot remember whether it&amp;rsquo;s already in your library. Pull out your phone, squint at a media app, type the title, hope you spelled it like the metadata does… by which point you&amp;rsquo;ve put it back.&lt;/p&gt;
&lt;p&gt;So I built &lt;strong&gt;jf-barcode-search&lt;/strong&gt;: point your phone camera at the barcode on the case, and it tells you instantly whether that title is already in your &lt;a href="https://jellyfin.org"&gt;Jellyfin&lt;/a&gt; library. It&amp;rsquo;s a small Flask app, and this post covers both what it does and — because I decided to open-source it — the &lt;strong&gt;pre-flight review that makes a homelab repo safe to publish&lt;/strong&gt;, which is a checklist worth having regardless of what you&amp;rsquo;re releasing.&lt;/p&gt;</description></item><item><title>Aiming an OTA Antenna With Data: Prometheus + Grafana on an HDHomeRun FLEX 4K</title><link>https://www.linuxcolorado.com/post/2026-08-15-hdhomerun-antenna-aiming-grafana/</link><pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-15-hdhomerun-antenna-aiming-grafana/</guid><description>&lt;p&gt;Aiming an over-the-air TV antenna is traditionally a two-person job with a lot of yelling: one person on the roof rotating the mast, one inside shouting &amp;ldquo;better… worse… BETTER… no, worse again.&amp;rdquo; The feedback loop is slow, the signal bar in the tuner&amp;rsquo;s web UI updates lazily, and you can never quite tell whether that last nudge helped.&lt;/p&gt;
&lt;p&gt;I wanted a &lt;em&gt;tight&lt;/em&gt; feedback loop: a live graph, updating every few seconds, of the exact signal metrics that matter — so I could rotate the antenna and watch a line move in real time. My tuner is an &lt;strong&gt;HDHomeRun FLEX 4K&lt;/strong&gt;, and it turns out you can scrape per-tuner signal quality straight into &lt;strong&gt;Prometheus&lt;/strong&gt; and chart it in &lt;strong&gt;Grafana&lt;/strong&gt;. This post is how I built that, the one exporter that actually does the job, and the surprise ending where the data explained a &amp;ldquo;broken&amp;rdquo; channel that wasn&amp;rsquo;t broken at all.&lt;/p&gt;</description></item><item><title>Building a Headless AI Workstation: Ubuntu Server + RTX 3060 + Ollama, Zero-Touch from a USB Stick</title><link>https://www.linuxcolorado.com/post/2026-08-05-ai-workstation-rtx3060-ollama/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-05-ai-workstation-rtx3060-ollama/</guid><description>&lt;p&gt;Several of my homelab projects want a local GPU for inference — running a vision LLM for OCR, offloading work that would otherwise hit a cloud API, keeping a small model resident and fast. So I built a dedicated box for it: a &lt;strong&gt;Dell Precision 3640&lt;/strong&gt; (i3-10105F, 16 GB) with a &lt;strong&gt;Gigabyte RTX 3060 12 GB&lt;/strong&gt;, running &lt;strong&gt;Ubuntu Server&lt;/strong&gt; and serving a vision model through &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Two things made this worth writing up. First, the actual GPU-serving setup has a few non-obvious choices (which driver, no CUDA Toolkit, exposing the port safely). Second — the fun part — I made the whole install &lt;strong&gt;zero-touch&lt;/strong&gt;: plug in a USB stick, walk away, and the box comes up on a &lt;strong&gt;static IP with SSH pubkey auth ready&lt;/strong&gt;, no monitor or keyboard ever attached. This post covers both, and both live as reusable docs/scripts in my &lt;a href="https://github.com/vlouvet/infra-config"&gt;&lt;code&gt;infra-config&lt;/code&gt;&lt;/a&gt; repo.&lt;/p&gt;</description></item><item><title>"My NAS Is Out of RAM and My Download Is Stuck" — Two Homelab Myths, Debunked</title><link>https://www.linuxcolorado.com/post/2026-08-03-nas-ram-and-stuck-arr-imports/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-03-nas-ram-and-stuck-arr-imports/</guid><description>&lt;p&gt;Two things happened on the same day that &lt;em&gt;looked&lt;/em&gt; like problems and weren&amp;rsquo;t — at least not the problems they appeared to be. My NAS was reporting almost all its RAM in use, which sounds like a leak or an imminent crash. And a TV show I&amp;rsquo;d grabbed through &lt;a href="https://www.lunasea.app/"&gt;LunaSea&lt;/a&gt; on my phone had downloaded fine but then &amp;ldquo;wouldn&amp;rsquo;t import&amp;rdquo; into the library, which sounds like a broken automation pipeline.&lt;/p&gt;
&lt;p&gt;Both are among the most common false alarms in a self-hosted media stack. Neither was what it looked like. Here&amp;rsquo;s what was actually going on, and the real fixes.&lt;/p&gt;</description></item></channel></rss>