A Telegram bot that converts YouTube videos and other online content into podcast feeds. Voxify allows you to create personalized RSS podcast feeds from your favorite video content, making it easy to listen to educational videos, interviews, and other content in podcast format.
Voxify transforms your favorite video content into audio-only podcast episodes that you can listen to anywhere. It's built for personal setups and small shared use—great for you, your family, or a few friends. Simply send YouTube links or other supported video URLs to the Telegram bot, and it will:
- Download the video content using yt-dlp
- Extract high-quality audio in your preferred format (MP3, M4A, etc.)
- Generate episode thumbnails and metadata
- Add episodes to your personal RSS podcast feed
- Create a landing page with episode cards
- Make the content accessible through any podcast player
The bot maintains a single RSS feed for your deployment, collecting episodes from the allowed users you configure. Perfect for listening to educational content, tech talks, interviews, or any video content during commutes, workouts, or while multitasking.
- Get your Telegram user ID: Message @userinfobot on Telegram to find your user ID
- Create a Telegram bot: Message @BotFather to create a new bot and get the bot token
- Configure and deploy the Voxify bot (see Installation section below)
- Start using the bot:
- Send YouTube or other supported video URLs to your bot
- The bot will process the video and add it to your podcast feed
- View your episodes at
https://yourdomain.com/(landing page with episode cards) - Access your RSS feed at
https://yourdomain.com/rss.xml - Subscribe to the feed in your favorite podcast player
- /start — Shows a quick introduction and how to use the bot.
- /info — Displays current feed details: title, description, author, language, categories, keywords, explicit flag, website and artwork links (if set), episodes count, and your RSS URL.
- /build — Manually rebuilds the RSS feed file (rss.xml) from all stored episodes. Useful after changing feed metadata or if you need to regenerate the file. If there are no episodes yet, you'll get a notice instead.
Note: Only users listed in TELEGRAM_ALLOWED_USERS can interact with the bot.
- YouTube
More platforms will be added in future releases.
The easiest way to deploy Voxify is using the pre-built Docker image with Docker Compose.
-
Create a data directory:
mkdir -p /path/to/voxify-data/{db,public,downloads} -
Download the example docker-compose.yaml:
wget https://raw.githubusercontent.com/ofstudio/voxify/main/docker-compose-example.yaml -O docker-compose.yaml
-
Create environment file:
wget https://raw.githubusercontent.com/ofstudio/voxify/main/.env-example -O .env
-
Edit the configuration:
- Update
.envwith your bot token, user IDs, and other settings - Modify
docker-compose.yamlto replace placeholders with your actual values:- Replace
</path/to/data>with your actual data directory path (e.g.,/path/to/voxify-data) - Replace
</path/to/letsencrypt/data>with path for Let's Encrypt certificates storage - Replace
<mydomain.com>with your domain name - Replace
<[email protected]>with your email for Let's Encrypt - Set
VERSIONto the latest release version
- Replace
- Update
-
Deploy:
docker-compose up -d
The example includes Traefik reverse proxy and Nginx for serving files over HTTPS with automatic Let's Encrypt certificates.
Pre-built images are available at:
ghcr.io/ofstudio/voxify:latest- Latest stable releaseghcr.io/ofstudio/voxify:v1.x.x- Specific version tags
Check packages for the latest version.
| Variable | Description |
|---|---|
TELEGRAM_BOT_TOKEN |
Required. Telegram bot token from @BotFather. Example: 123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ |
TELEGRAM_ALLOWED_USERS |
Required. Comma-separated list of allowed Telegram user IDs. Example: 123456789,987654321. Note: you can find your user ID using @userinfobot |
PUBLIC_URL |
Required. Public URL where feed and media files are accessible. Example: https://example.com/podcasts |
DB_FILEPATH |
Required. Path to SQLite database file. Default: ./data/voxify.db |
PUBLIC_DIR |
Required. Path to public directory for feed and media files. Default: ./data/public |
DOWNLOAD_DIR |
Required. Path to temporary download directory. Default: ./data/downloads |
DOWNLOAD_TIMEOUT |
Optional. Timeout for downloading media. Default: 1h (formats: 30s, 10m, 1h) |
DOWNLOAD_FORMAT |
Optional. Media download format. Default: mp3 (options: mp3, m4a, etc.) |
DOWNLOAD_QUALITY |
Optional. Audio quality for downloaded media. Default: 192k |
DOWNLOAD_WORKERS |
Optional. Number of concurrent download workers. Default: 2 |
THUMBNAIL_SIZE |
Optional. Size of square thumbnail in pixels. Default: 3000 |
YT_DLP_PATH |
Optional. Path to yt-dlp executable. Default: yt-dlp |
FFMPEG_PATH |
Optional. Path to ffmpeg executable. Default: ffmpeg |
FEED_FILENAME |
Optional. Name of the RSS feed file. Default: rss.xml |
FEED_TITLE |
Optional. Title of the RSS feed. Default: Voxify Podcast |
FEED_DESC |
Optional. Description of the RSS feed. Default: Voxify Podcast description |
FEED_IMAGE |
Optional. URL of the RSS feed cover image. Example: https://example.com/cover.jpg |
FEED_LANGUAGE |
Optional. Language code for the RSS feed. Default: en |
FEED_CATEGORIES |
Optional. Primary categories (comma-separated). Default: Technology |
FEED_CATEGORIES2 |
Optional. Additional categories (comma-separated). Example: Science,Astronomy |
FEED_CATEGORIES3 |
Optional. Additional categories (comma-separated). Example: Education |
FEED_IS_EXPLICIT |
Optional. Whether feed contains explicit content. Default: false (options: true, false) |
FEED_AUTHOR |
Optional. Author of the RSS feed. Example: John Doe |
FEED_LINK |
Optional. Link to the website of the RSS feed. Default: https://github.com/ofstudio/voxify |
FEED_KEYWORDS |
Optional. Comma-separated keywords for the RSS feed. Example: podcast,tech,news,interviews |
- Built with Go
- Uses yt-dlp for video downloading
- Telegram bot powered by go-telegram/bot
Apache License 2.0
Feel free to open an issue or a pull request.
Oleg Fomin @ofstudio