<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects on Linux Colorado</title><link>https://www.linuxcolorado.com/categories/projects/</link><description>Recent content in Projects on Linux Colorado</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.linuxcolorado.com/categories/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>Speaker-Diarized Call Transcription on a CPU — No Cloud, No GPU, No Hugging Face Token</title><link>https://www.linuxcolorado.com/post/2026-08-18-speaker-diarized-call-transcription/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-speaker-diarized-call-transcription/</guid><description>&lt;p&gt;I wanted a speaker-labeled, timestamped transcript of a two-person phone call — the kind an LLM can actually reason about (&amp;ldquo;what did the customer commit to?&amp;rdquo;, &amp;ldquo;when did the price come up?&amp;rdquo;) — without shipping the audio to a cloud speech-to-text service.&lt;/p&gt;
&lt;p&gt;One hard constraint shaped every decision: &lt;strong&gt;it all had to run on hardware already in the rack.&lt;/strong&gt; No new GPU, no API keys, no &amp;ldquo;just use the cloud for the hard part.&amp;rdquo; A 35-watt desktop chip that already earns its keep running other things.&lt;/p&gt;
&lt;p&gt;It worked. And, as usual, the interesting parts weren&amp;rsquo;t in the happy path — they were in &lt;em&gt;why the whisper I already had running couldn&amp;rsquo;t do the job&lt;/em&gt;, how to diarize speakers on a CPU with no Hugging Face token, and a genuinely great debugging story that ends with a &lt;strong&gt;114-byte file&lt;/strong&gt; quietly corrupting every timestamp in the system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on the transcript examples below:&lt;/strong&gt; the real test call involved an actual third-party business and named individuals who never agreed to be quoted. Every name, company, and phone number in the excerpts here is &lt;strong&gt;synthetic&lt;/strong&gt; — invented for illustration. In many US states, Colorado included, recording calls and reusing what was said carries real legal weight. If you build one of these, redact before you publish. I&amp;rsquo;m practicing what I preach.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Teaching an AI to Develop My RAW Photos: A Self-Hosted Linux Pipeline</title><link>https://www.linuxcolorado.com/post/2026-08-18-ai-raw-photo-pipeline/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.linuxcolorado.com/post/2026-08-18-ai-raw-photo-pipeline/</guid><description>&lt;p&gt;I wanted to answer a specific question: could an AI agent do the &lt;em&gt;boring, careful&lt;/em&gt; parts of my photography workflow — the parts I actually skip because they take too long?&lt;/p&gt;
&lt;p&gt;Not &amp;ldquo;make my photos look good&amp;rdquo; in the Instagram-filter sense. I mean the tedious, correct-but-thankless work: pulling the right RAW off my server, applying the exact lens-correction data for the exact lens I used, denoising only the frames that need it, keeping the EXIF intact, filing everything under the right date, and getting a print onto photo paper without fighting a driver. The stuff a careful darkroom tech would do and a busy human never quite gets around to.&lt;/p&gt;
&lt;p&gt;So I built it. A local, self-hosted pipeline where &lt;strong&gt;Claude Code&lt;/strong&gt; can reach into my &lt;a href="https://immich.app"&gt;Immich&lt;/a&gt; library, pull original Canon CR3 RAW files, develop them in &lt;strong&gt;darktable&lt;/strong&gt; with camera- and lens-specific corrections, retouch in &lt;strong&gt;GIMP&lt;/strong&gt;, print on a networked Canon photo printer, and push finished JPEGs back into Immich as new assets — all driven through the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>