Back to Projects

Project case study / 2026

Transly

Live

An asynchronous Telegram transcription bot for audio, video, and supported public media URLs, using FFmpeg, Groq speech models, and a persistent SQLite job queue.

Pythonpython-telegram-botGroq WhisperFFmpegyt-dlpSQLite
Transly cover

Overview

Transly is an asynchronous Telegram bot that turns audio, video, and supported public media URLs into timestamped English transcripts. It uses FFmpeg to extract and normalize audio, Groq Whisper for transcription, and a Groq language model to translate non-English segments into English.

The bot accepts Telegram media uploads as well as supported public URLs. Longer transcripts are split into Telegram-safe messages and can be delivered as a text file. A persistent SQLite job store tracks work across the processing flow.

The engineering problem

Media transcription is a pipeline rather than a single API call. Files need to be validated, audio extracted, requests kept within provider limits, long-running jobs managed without blocking the chat, and temporary files cleaned up after processing.

URL ingestion adds a separate security boundary. A URL submitted by a user can point at private network services or other destinations that should not be fetched by a server-side application.

How the pipeline works

  1. The bot receives a Telegram upload or a supported public media URL.
  2. Input and URL checks reject several unsafe or unsupported cases.
  3. The downloader retrieves supported URL media, and FFmpeg extracts or normalizes audio.
  4. The transcription provider produces text and timestamps.
  5. Non-English segments can be translated into English.
  6. The bot returns the transcript in messages or a text document and removes temporary job files.

The code includes provider-routing logic and a persistent job queue. Actual behavior still depends on the configured credentials, provider availability, supported media, and external platform changes.

Security boundary and limitations

The repository documents URL preflight checks, including rejection of private or non-global addresses. It also explicitly warns that preflight checks alone do not fully prevent server-side request forgery: yt-dlp can make additional network requests, and DNS rebinding remains a concern. The hardened deployment guide therefore calls for network egress restrictions that block private, loopback, link-local, and metadata destinations.

That distinction matters. URL validation is one layer of defense, not proof that arbitrary media URLs are safe. The deployment's isolation controls must be configured and maintained as well.

Telegram's default bot API limits also constrain direct file uploads; the README documents a 20 MB default for incoming files and recommends URLs for larger media. The bot cannot guarantee that every URL, language, file, or provider request will succeed.

What the project demonstrates

Transly is a practical example of asynchronous bot workflows, media conversion, provider integration, persistent job tracking, and defensive URL handling. Its repository documents both the implemented workflow and the remaining operational constraints.

Related Projects