DEV Community

Ilya Roger
Ilya Roger

Posted on

I Processed 190,000 Podcast Episodes on a GPU Server in My Apartment

There is a server in my apartment that processed around 190,000 podcast episodes in three months. That is roughly 253,000 hours of audio.

If I had pushed that through public transcription APIs, the transcription bill alone could have run anywhere from about $10,000 to well over $250,000 depending on the provider.

But here is the part that actually matters, and the part everyone gets wrong:

Transcription was never the expensive step.

The expensive step is everything that happens after the transcript exists. That is the realization that turned local AI from an internet hobby into the only way this project made financial sense.

I was not trying to run a chatbot in my bedroom. A chatbot is a demo. I was building a pipeline, and a pipeline is a machine. The moment you feed a machine hundreds of thousands of files, the cost structure stops being a footnote and becomes the product. The boring question buries every flashy one:

Can you afford to run the thing often enough for it to become useful?

With a normal API approach, my honest answer was: not comfortably. So I bought GPUs.

The transcript is raw material, not the product

Start with the number that annoyed me. Not a million episodes. 100,000.

In podcast data, 100,000 episodes is a starting point, not a finish line. A small dataset gives you anecdotes. A large dataset gives you signals: mentions, brands, recurring guests, sponsors, cultural spikes, topics that move over time. To see those, you need volume.

My current dataset is about 190,000 processed episodes, averaging roughly 80 minutes each. That is 15.2 million minutes of audio, or about 253,333 hours.

Now lay public transcription pricing next to that. Here is what 190,000 episodes would cost across the common providers:

  • Groq Whisper Large v3 Turbo — $0.04/hour, about $10,133
  • Groq Whisper V3 Large — $0.111/hour, about $28,120
  • OpenAI gpt-4o-mini-transcribe — $0.003/minute, about $45,600
  • OpenAI gpt-4o-transcribe — $0.006/minute, about $91,200
  • OpenAI gpt-realtime-whisper — $0.017/minute, about $258,400

This is where people start arguing about the cheapest line in the list. And yes, Groq is genuinely cheap for ASR. If transcription is all you need, that pricing is impressive.

But chasing the cheapest transcription number is optimizing the wrong number, because the transcript is raw material.

Once it exists, you still have to clean it, store it, chunk it, preserve timestamps, run search, extract topics, detect brands, identify people, generate summaries, classify entities, retry broken files, change schemas, and reprocess old episodes when your first extraction logic turns out to be naive.

That is where the money actually goes. Every failed run has a cost. Every schema mistake has a cost. Every new extraction idea, multiplied across your whole dataset, has a cost. And the multiplication is brutal: across 190,000 episodes, extra processing at just 3 cents an episode is $5,700. At 10 cents it is $19,000. At 30 cents it is $57,000. At a dollar it is $190,000.

Look at those numbers again. A single reprocessing pass at thirty cents an episode is $57,000. The cheapest transcription line was ten grand. The transcript was never the bill. The workflow was the bill, and the workflow runs more than once.

This is why I say owning the stack saved me real money. Not because the cheapest API would have cost a fortune on the first pass. It would not. The savings came from the part nobody quotes you a price on: the second pass, the third pass, the reprocessing after you realize your first version was wrong.

Because the first version of your pipeline is always wrong somewhere. The only question is whether being wrong is cheap enough that you can keep going.

I did not want to rent the permission to experiment

I am not anti-API. For most early products, APIs are the right answer. Validating an idea, processing one upload at a time, small workloads: use APIs. There is no prize for buying hardware before you know anyone cares.

But when the product needs to process messy data continuously, renting the most expensive repeated step forever starts to feel wrong, because of what you are actually renting.

You are renting the permission to experiment.

The API bill does not care whether a run was useful. It charges you the same whether you were shipping a feature users asked for or recovering from a job that died halfway through. So you get conservative in the exact phase where conservatism kills you.

Early on you need to be wrong fast. Change the data shape. Run ugly experiments. Stare at the output and accept that half your assumptions were dumb. If every correction feels expensive, you quietly start protecting yourself from learning. That is the trap.

I did not want my core bottleneck living on someone else's pricing page. So I decided to own the audio processing.

The server

It is not a beautiful enterprise rig. It is a working box that has slowly become less cursed over time. The build: a TRX40 Aorus Master motherboard, a Threadripper 3960X, 64GB of RAM, 2TB of storage, and the GPUs — three RTX 4060 Ti 16GB cards plus one NVIDIA A30 24GB. Rough hardware cost: €3,000 to €4,000.

The A30 is the funny one. I bought it on eBay in 2024 for around €1,000, back when nobody wanted it and local AI was not yet a cult. Best hardware purchase I ever made.

I will not pretend €3,000 to €4,000 is nothing. For a solo builder, that is a real decision. But it is a fundamentally different decision from renting a GPU every month, because a rented GPU looks cheap by the hour and brutal by the year.

Take RunPod's on-demand pricing. An A40 at $0.44/hour is about $321 a month or $3,854 a year running 24/7. An RTX A6000 at $0.49/hour is about $358 a month, $4,292 a year. An RTX 4090 at $0.69/hour is about $504 a month, $6,044 a year. An A100 SXM at $1.49/hour is about $1,088 a month, $13,052 a year.

One GPU for a year roughly equals my entire four-GPU box. And one rented GPU is not the same as a local machine you can hammer without watching a meter. Add storage, idle time, orchestration, and mistakes, and the gap widens.

A local server is front-loaded pain. A rental is a meter that never stops. For experimentation, I will take the pain.

Server with 3x 4060TI's (16GB) and 1x A30 (24GB)

The part that is not romantic

The A30 has no active cooling. That sounds like a detail until the card starts cooking itself in a normal case. I had to duct blower fans straight into it. Not pretty. The actual question on those days was: does the GPU survive now? Yes? Keep moving.

That is local AI in practice. Not benchmarks and clean homelab photos. Airflow, CUDA versions, NVIDIA drivers, queue behavior, broken downloads, three-hour episodes that need chunking, and workers that must not retry the same dead job forever.

Remote access is not optional either. Tailscale saved me more than once while I was away from the machine. Build a VPN, add a remote power switch, set up monitoring, whatever fits, but have a plan for the moment it breaks and you are not standing next to it.

If you want the clean version, use an API. If you want the leverage, you eat the mess.

The pipeline that came out of it

The pipeline is boring now, which is exactly what I wanted.

An episode arrives from an RSS feed. The audio is downloaded, normalized with FFmpeg, and queued in RabbitMQ. Go workers pull jobs and send them to whichever GPU is free. WhisperX handles transcription with timestamped output. The transcript is stored, cleaned, chunked, and indexed for Postgres full-text search. Then cloud LLM inference handles the structured extraction layer: topics, entities, brand mentions, questions, summaries, and other fields that have to land in a predictable shape.

That predictable shape is the whole point. A cute AI summary looks nice once and is impossible to build on. I want tables, timestamps, slugs, entities. Fields that can power search, alerts, exports, and whatever the next feature turns out to be.

That is the line between using AI to generate text and using AI to build infrastructure.

I also tested embeddings with Pinecone for semantic search and Cohere for reranking, which worked well. I paused that work because users were not asking for the elegant version first. They wanted the useful version: where was this mentioned, what did they say, which episode, can I export it, can I track it over time. Builders love beautiful architecture. Users love the problem disappearing.

Right now the box processes roughly 50 to 120 episodes every 30 minutes depending on length and audio quality. The nice part is that scaling is understandable. Add another similar server and throughput roughly doubles. Not magic, not free, but predictable. That predictability matters more than I expected.

Telegram sentry report which runs every 30 mins, providing critical insights about the applications status such as processed episodes

What I still pay the cloud for, and what it costs

I do not run everything locally. I tried local LLMs early because I thought I was being clever, and the smaller models I could run comfortably produced too much garbage for structured output. Bad structured output is worse than none, because it quietly poisons your database.

So I split the stack along one question: which part gets expensive enough that owning it changes the economics?

The local server takes the part where volume kills you: transcription and repeated audio processing. Cloud inference takes the part where quality beats ownership: structured extraction with stronger models. I use Nebius AI with Qwen models for that, plus the usual boring cloud pieces, AWS, Postgres, app hosting.

This is the cost line most teardowns skip, so here it is plainly: cloud extraction is the one step I still pay per-run, and keeping it per-run is a deliberate choice. The local box already absorbed the part that scales with raw volume, so the remaining cloud cost stays bounded to the work that genuinely benefits from a better model, instead of every retry and reprocess. That split is the entire economic argument in one decision.

Local AI does not mean running everything under your desk like a purist. That is nerd religion. The practical version is surgical: own the bottleneck, rent the rest.

The moat is just being able to afford to be wrong

People make moats sound mystical. Sometimes the moat is simply being able to afford the thing other people cannot afford to keep doing.

Put two builders on the same data-heavy problem. One pays retail for every processing step. The other owns the expensive bottleneck. They are not playing the same game. One asks the invoice for permission before every experiment. The other just runs the job.

That difference compounds into behavior. You try more things. You reprocess without feeling like an idiot. You can be wrong about the first schema. You can add an extraction field and test it across real volume. You build features straight off the dataset because the dataset already exists.

The server did not just make processing cheaper. It made being wrong cheaper. Early products are wrong constantly: wrong feature, wrong schema, wrong query, wrong assumption. If every correction is expensive, you learn slower. Drop the cost of being wrong and you move with less fear. That is the real leverage, and it is the whole reason I bought hardware.

Where this became a product

The infrastructure eventually became the backend for [PodZeus](https://www.podzeus.com). I am mentioning it this late on purpose, because the product is not the lesson. The cost structure is.

[PodZeus](https://www.podzeus.com) is a podcast intelligence tool: search and monitor podcasts, track brands or keywords, understand what was said in an episode, follow topics across the space. It is viable for me as a solo builder not because I found a magic prompt, but because I can process enough audio to make it useful without the bill becoming absurd.

There are more mature tools here. Podscan is the obvious one, and Arvid Kahl has been at podcast monitoring longer and is further along. I am not going to pretend otherwise. My angle is different: a focused middle ground, a sane cost structure, and early customers pulling the product toward the features that matter. That only works because the core processing bill stopped scaring me.

Dashboard of PodZeus

What I would do differently

I would lock down the extraction schema before processing serious volume. I ran a lot of episodes with questions that turned out to be wrong or incomplete, which meant reprocessing. Not catastrophic, but it is the hidden cost in every AI pipeline: not the first run, but the second run after you realize the first was dumb. Once you process a large dataset, your schema becomes gravity. Changing it later is possible but never free.

I would also stand up the second GPU server earlier. Once the pipeline works, more throughput is not a mystery. It is mostly capital, space, and airflow.

When I would not do this

I would not reach for local AI on every SaaS. Small workload: APIs. Occasional single-file processing: APIs. No customers yet: APIs. Infrastructure work stopping you from selling: absolutely APIs.

Local AI gets interesting in exactly one situation: when data volume is the product. When you have to process messy data constantly and the value comes from having a lot of it structured and searchable, owning part of the stack becomes real leverage. Not because it is trendy. Because the math changes.

The bigger lesson

Most of local AI is obsessed with chatbots. Run a model, talk to it, build an agent. Fine. But the more interesting opportunity is less flashy: use local AI to process painful data at scale.

Audio, video, images, PDFs, legal documents, market reports, scientific papers, product catalogs. There are countless spaces where the data already exists but is too messy, expensive, or annoying to turn into something useful. Make that processing cheap enough and you can build products that look impossible from the outside.

That is what local AI became for me. Not a chatbot in my bedroom. A machine that made being wrong cheap enough to keep going.


References: Groq pricing page (ASR section, Whisper V3 Large and Whisper Large v3 Turbo); OpenAI API pricing page (transcription models, gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-realtime-whisper); RunPod GPU pricing page (on-demand hourly examples).

Top comments (0)