Start with a subject, question, or concept.
A short prompt can become a complete research-backed episode. Topic mode treats the prompt as the subject to investigate rather than as source text to summarize.
Herald is designed to turn both ideas and source material into finished podcasts while keeping the important choices in your hands: where it runs, which AI providers it uses, how the content is handled, and how the audio is generated.
Herald can act as a researcher and podcast writer, a source-bounded adapter, or a literal reader. A job can begin with a topic you want explored or with material you already have. Telegram is the current remote interface, while the generation pipeline runs on your own server.
The input determines what Herald has to work with; the generation mode determines what Herald is allowed to do with it.
A short prompt can become a complete research-backed episode. Topic mode treats the prompt as the subject to investigate rather than as source text to summarize.
Herald extracts the article and can either stay strictly grounded in that material or use it as the foundation for broader contextual research.
Notes, newsletters, copied articles, reports, and other text can be pasted into Telegram without requiring a public URL.
A forwarded Telegram message can become the source for a new job, keeping intake convenient when the content is already in your conversations.
Modes are explicit so the same platform can be used for research, adaptation, expansion, or direct reading.
Herald researches a topic seed, builds a grounded narrative plan, and writes a long-form episode around the subject. This is the mode that makes Herald an open-ended podcast generator rather than only a source converter.
The supplied material is the factual boundary. Herald can organize and narrate it, but does not add outside facts or research.
The submitted source remains the anchor while Herald performs bounded web research to add context, background, and supporting information.
Herald deterministically cleans and chunks the supplied text and sends it to local TTS without an LLM rewriting the content or making an AI API call.
Herald treats the model provider as a configurable component rather than the product itself.
Configure a provider chain so Herald can fail over when a service is unavailable, rate-limited, or otherwise cannot complete the job.
Current provider support includes Gemini, Groq, Cloudflare, OpenAI, OpenRouter, Mistral, Anthropic, and local Ollama models.
Literal mode remains available when the goal is simply to turn supplied text into speech without an LLM in the path.
Herald uses Telegram for more than intake. It is the current user interface for configuring, starting, checking, and retrieving podcast jobs.
/settingsVoice, speed, default mode, providers, and models/modelsBrowse the live model catalog for configured providers/statusRuntime, TTS, AI, queue, disk, and uptime information/queueSee pending, scripting, and synthesizing jobs/diagnosticsInspect job diagnostics and retrieve a redacted support bundle/downloadRetrieve a completed podcast MP3The current deployment separates intake, generation, state, and speech so individual pieces can change without redefining the whole product.
The installer targets Ubuntu 24.04 on AMD64 or ARM64 and deploys Herald with Docker Compose. Telegram long polling is outbound, so the bot can operate without exposing inbound webhooks, public ports, a domain, or an HTTPS certificate.
The stack uses PostgreSQL for durable state, Kokoro for local neural speech synthesis, and FFmpeg for final spoken-word audio processing. Owner pairing uses a one-time code so a private installation can be bound to the intended Telegram account.
Ubuntu 24.04
↓
Docker Compose
├─ Telegram bot
├─ Herald worker
├─ PostgreSQL
└─ Kokoro TTS
Outbound Telegram long polling
No inbound webhook required
Herald is released under the MIT License and is structured so intake, AI providers, research, narration, state, and delivery are distinct concerns.
That separation is what gives Herald room to grow. Telegram is the supported remote interface today, but it is not meant to define the limits of the underlying generation engine. Likewise, hosted AI services are supported components rather than mandatory dependencies, and local models can participate in the same provider architecture.
The goal is a podcast generation system that remains useful whether you want a researched episode on a new subject, an adaptation of a specific source, or a straightforward local reading of text you already trust.
The source code, installer, configuration, and project documentation are available on GitHub.