jev.tg
Local Telegram filter that batches channel messages to Jev or a local Laya model and keeps only those matching your conditions.
Overview
JEV Telegram filter is a local FastAPI and SQLite application with a web UI, packaged as a Windows exe or macOS app with a system tray. You log in with one Telegram account (QR or phone code), choose which channels to listen to, and create tasks with a name, a natural-language prompt describing the condition, a batch size (default 50), a hit threshold, bound channels and up to 254 labels, with other reserved automatically.
Messages are stored locally and, once a task's batch fills within the day window, sent to the analysis backend: TypeSafe Jev with your API key, or Laya running locally through Ollama or Unsloth Desktop on a /v1/systemone endpoint. Only hits are shown in the results column, and images are downloaded only after a match. Search and filters by task, type and minimum noul are applied server-side. Concurrency and a recent-days window are configurable. The UI supports Traditional Chinese, Simplified Chinese and English; the README is in Traditional Chinese.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this message match the task's natural-language condition?(inferred) | — |
| Choice | Which label (or other) applies to this message?(inferred) | — |
How it works
- Receive messages from subscribed channels into local SQLite
- When a task's batch fills, send it to Jev or local Laya
- Keep messages above the hit threshold; label them
- Show hits only, downloading images after a match
Strengths
- Messages stay local; a fully local Laya option exists
- Batching reduces calls
- Packaged desktop builds via CI releases
Caveats
- Uses a personal Telegram account session
- Documentation in Chinese
- Laya quality not compared with Jev in the README
Getting started
uv sync && uv run python -m server, then `cd web && npm install && npm run dev` and open http://localhost:5173.At a glance
- Type
- Project
- Status
- beta
- Language
- Python
- Runtime
- Desktop app (FastAPI + web UI)
- Has code
- yes
Use cases and integrations
How curated lists describe it
Local Telegram filter stores channel messages locally and sends them in batches to Jev or a local model to keep only messages matching natural-language conditions.
logicrw/awesome-jev-projects
Frequently asked questions
Can it run without TypeSafe?
Yes, it can use a local Laya model through Ollama or Unsloth Desktop.
Which messages are shown?
Only messages that match a task above its threshold; misses are not listed.
Where is data stored?
Locally, in a data directory such as %APPDATA%\jev_tg on Windows.
Related projects
Multi-user Telegram bot that judges every new post in public channels with Jev templates and routes matches to your DM or channels.
ProjectbetaPythonTelegram channel X-ray: Jev judges up to 1,500 public posts for kind, paid ads, clickbait and pressure, producing a shareable card.
ProjectbetaJavaScriptLocal-first feed that merges arXiv, GitHub, Hacker News and Bilibili results, with optional Jev title-relevance scores as a filter.
ProjectbetaTypeScriptSelf-hosted podcast ad remover that transcribes episodes and uses an LLM or System One to detect and cut ad segments.
ServicebetamacOS menu bar screen-time app that asks Kev or Jev whether each screen breaks your rules and steps in with a pop-up.
ServicebetaPythonChrome extension that scores loaded X posts against your reading goal with Jev and ranks top matches pairwise.
ProjectbetaJavaScript