For people who follow too many channels
Read your subscriptions.
Huginn transcribes every new upload from the channels you follow and distills it into something you can read. Forty-seven minutes of someone talking becomes a summary you finish in two.
Every video is transcribed and summarised once, however many accounts subscribe to the same channel.
Why we moved off Postgres LISTEN/NOTIFY
- NOTIFY payloads are capped at 8 KB, undocumented in their tooling.
- Each listener pins a connection, so worker count fights the pool.
- Broke down at roughly 400 events/sec — his estimate, not measured.
- Migrated to Redis Streams over six weeks.
The problem
A channel’s back catalogue is hours of audio nobody has time to watch.
YouTube’s own captions are patchy, unpunctuated and impossible to query. So the archive you nominally follow stays unread, and the one thing you needed stays buried in it.
How it works
Five stages, one row, no broker
A video moves through a twelve-state pipeline. There is no Redis and no message broker: the state lives in a single Postgres row, so the row is the work. A crash leaves a stale lease to reap, not a message to redeliver. Each stage scales on its own concurrency cap.
Resolve
A channel URL becomes one canonical channel record, keyed on platform and external id through the YouTube Data API.
Download
The video is fetched at the smallest fidelity that still carries the speech.
Extract
ffmpeg strips the audio track and normalises it for the transcriber.
Transcribe
ElevenLabs Scribe v2 returns punctuated, timestamped text — queryable, unlike auto-captions.
Summarise
OpenRouter produces the summary, key points and topics against a fixed output contract.
Retries happen on their own
Transient failures come back with backoff, and say roughly when.
Failures say which kind they are
Permanent, transient, or waiting on quota — never a bare error.
Stages scale apart
Transcription can run wide while downloads stay polite.
Processed once, shared globally
However many accounts follow a channel, each video is processed exactly once
Channels and videos are global, deduplicated records — there are no per-account copies. What your library shows is derived at read time from your subscriptions plus the account videos you added yourself.
One video record
One transcript. One summary.
Built for agents
The reading can be delegated
An MCP integration exposes the library over streamable HTTP, with fourteen tools. Mint, rotate and revoke it from the app — only the hash is stored, never the token itself. The same credential authenticates the REST API.
MCP tools
subscribe_channelunsubscribe_channelbackfill_channeladd_videoremove_videolist_library_channelslist_library_videoslist_channel_videosget_library_videoget_video_transcriptget_video_intelligencelist_new_summarieslibrary_statsget_usageGET /v1/videos/:id/intelligence
{
"summary": "The talk argues that retrieval…",
"topics": [
{ "name": "retrieval", "relevance": 0.94 },
{ "name": "chunking", "relevance": 0.81 },
{ "name": "evaluation", "relevance": 0.67 }
]
}Additive only, and versioned: give it a video, get back this exact shape — forever. Transcripts come as JSON, WebVTT, SRT or Markdown artifacts; summaries as JSON or Markdown.
JSONWebVTTSRTMarkdownThe app
Add a hundred videos by typing
Paste a list of channels and videos and Huginn parses it, tells you what it skipped, and backfills the archive in the background. The progress screen fills in as the pipeline moves — you can leave and come back.
⌘Kopens the same actions from anywhereesc- Add a channel
- Start a backfill
- Retry the videos that failed
- Mint an MCP integration
- Check this month’s meters
Under the hood
Postgres, and nothing else
No broker, no cache tier to keep in sync. One row holds the state of one video.
An API you can generate against
OpenAPI 3.1, with RFC 9457 problem responses on every error path.
Boundaries enforced in CI
Clean-architecture import rules are checked by the build, not just written down.
Start reading your subscriptions.
Subscribe to a channel and every new upload arrives as a summary you can read in a couple of minutes. Nothing plays — Huginn tells you what was said.