Skip to main content

unread

Read your Telegram unread. Without reading it.

PyPI CI Python License: Apache 2.0

Website · Docs · PyPI

unread turns Telegram chats, YouTube videos, web pages, voice messages and files into short reports, with every claim linked back to the message, paragraph or timestamp it came from. It runs on your own machine or server, with whichever AI you have a key for: OpenAI, Anthropic, Google Gemini, OpenRouter or a local model.

Use it two ways:

  • Command line: unread @somegroup --last-days 7 gives you a report on the week.
  • Telegram bot: forward it a voice message, a PDF, a link or a YouTube video, and it replies with the summary.

unread analyzing a Telegram channel into a Markdown report

Command line

curl -fsSL https://raw.githubusercontent.com/maxbolgarin/unread/main/scripts/install.sh | bash
unread init          # pick an AI provider and paste its key; Telegram is optional
unread @somegroup --last-days 7                  # a Telegram chat, channel or forum
unread "https://youtu.be/jmzoJCn8evU"            # a YouTube video
unread "https://paulgraham.com/greatwork.html"   # a web page
unread ./meeting.mp3                             # a file: audio, video, PDF, DOCX, image…
unread ask <any of the above> "your question"    # ask instead of summarize
unread dump <any of the above>                   # save the original text, no AI

Here is a real report: two weeks of @thehackernews, 99 messages, $0.016.

More: install options · sources · every command

Telegram bot

One command on a server (a small VM is plenty). It installs Docker if needed, asks a few questions and starts the bot:

curl -fsSL https://raw.githubusercontent.com/maxbolgarin/unread/main/scripts/install-bot-docker.sh | bash

You need a bot token from @BotFather, an AI key, and a Telegram API id + hash (free at my.telegram.org). You don't need to log in to your own Telegram account; do that later only if you want the bot to read t.me/… chat links too. Afterwards, unread-bot status | logs | update | config manages it.

Already use the CLI? Skip Docker and run the bot from it; it becomes a systemd service where the machine has one:

unread bot setup && unread bot start

The bot replying to a voice message with a summary and a PDF report

More: what the bot does · other ways to deploy it (Compose by hand, systemd, your own computer)

Highlights

  • Citations on every claim. Each point links to its Telegram message, web paragraph or video timestamp.
  • Any language in, any language out. A Russian chat can become an English digest.
  • Voice and video. Voice messages, video notes, podcasts and recorded meetings are transcribed, then summarized.
  • Your data stays yours. Everything is kept in SQLite under ~/.unread/, and keys can be encrypted at rest. Only your AI provider sees the text you analyze, and --redact strips phone numbers, emails and card numbers first.
  • Cheap to run. Results are cached, long inputs are split and summarized in parallel, and --max-cost / --dry-run keep the bill in check.

AI providers

Provider Notes
OpenAI The default. Also transcribes voice and video.
Anthropic, Google Gemini Analysis and images. Add an OpenAI key for voice and video.
OpenRouter One key, many models.
Local (Ollama, LM Studio, vLLM) Any OpenAI-compatible server; the AI runs on your own hardware.

Switch any time with unread settings, or /settings in the bot.

Documentation

Guide What's in it
Install Install options, first-run setup, where files live
Sources Telegram, YouTube, web pages, files, presets, fact-checking
CLI reference Every command and flag
Configuration Languages, models, cost and caching, troubleshooting
Telegram bot What it does, its commands and settings
Deploying the bot Docker installer, Compose, systemd, Telegram session
Security Threat model, encrypted secrets, PII redaction

The same guides are on the website.

Contributing

Pull requests are welcome. CONTRIBUTING.md covers the dev setup, lint and tests; report vulnerabilities as described in SECURITY.md. Issues and ideas: https://github.com/maxbolgarin/unread/issues.

Built on Telethon, yt-dlp, trafilatura, Typer, Rich and uv.

License

Apache 2.0, see LICENSE.

Metadata

Release files for unread 1.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for unread 1.11.0
File Size Uploaded Provenance
unread-1.11.0.tar.gz 5.1 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for unread 1.11.0
File Interpreter ABI Platform
unread-1.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 6.0 MB

Release files / unread-1.11.0.tar.gz

Download URL unread-1.11.0.tar.gz
Size 5.1 MB
Tags Source
SHA-256 checksum
How to use checksums
318272208304f678345284441fc25c55e6bb8c7da4842604b0dd004c2e2cfca2
BLAKE2b-256 checksum
How to use checksums
cf61f7b1639ee08d818cfda4c94ec41e133d2527750bfe9ea13c8abd7d4b00c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / unread-1.11.0-py3-none-any.whl

Download URL unread-1.11.0-py3-none-any.whl
Size 876.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fa590bdc5400fa3a7e19a7105a6f6fa1457bd23dfe0230870e3af946d80648f5
BLAKE2b-256 checksum
How to use checksums
e6020d170ab3ce524e070fb7a10f2f43c19e78a04bd54baa1b31d4395f34b9b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for unread 1.11.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page