https://github.com/makelinux/news-speaker
News reader with multi-engine text-to-speech
https://github.com/makelinux/news-speaker
atom-feed-reader news-reader rss rss-feed-reader rtl text-to-speech tts
Last synced: about 1 month ago
JSON representation
News reader with multi-engine text-to-speech
- Host: GitHub
- URL: https://github.com/makelinux/news-speaker
- Owner: makelinux
- Created: 2026-03-01T16:55:57.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-17T19:35:30.000Z (about 1 month ago)
- Last Synced: 2026-04-17T21:28:08.308Z (about 1 month ago)
- Topics: atom-feed-reader, news-reader, rss, rss-feed-reader, rtl, text-to-speech, tts
- Language: Python
- Homepage:
- Size: 152 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: news-speaker.py
Awesome Lists containing this project
README
# news-speaker
News reader with multi-engine text-to-speech.
## Usage
Normal mode - display latest news items:
```bash
./news-speaker.py
```
Polling mode - continuous monitoring with TTS and popup:
```bash
./news-speaker.py -p
```
Filter by source:
```bash
./news-speaker.py -s techmeme
```
Custom RSS URL or HTML page:
```bash
./news-speaker.py -u https://example.com/feed
```
Statistics - mean time between messages per source:
```bash
./news-speaker.py --stat
```
Word frequency analysis:
```bash
./news-speaker.py --word-freq
```
## Options
- `-p, --poll` - polling mode, checks every 60 seconds
- `-d, --debug` - enable debug output
- `-s, --source` - filter by source name
- `-u, --url` - RSS URL or HTML page
- `-c, --config` - path to config file
- `-D, --use-description` - include description in display and TTS
- `-w, --width` - output width (default: MANWIDTH env or 110)
- `--stat` - show mean time statistics for all sources
- `--word-freq` - show word frequencies across all sources
- `--no-tts` - disable TTS
- `--audio-active` - check if audio playback is active
## Features
- Multi-source RSS/Atom feed parsing
- RTL formatting - proper alignment for Hebrew, Arabic, Persian, Urdu, Yiddish
- TTS - Gemini 3.1 Flash (cloud) -> Piper (offline) -> gTTS fallback chain
- Popup window - shows new items on screen
- GUID-based deduplication - handles edited headlines
- HAR file support for bot-protected sources
- Global + local config merge (~/.config/news-speaker/ + local)
- Per-source exponential backoff on 429/5xx/timeout errors
- Network-aware backoff - skips penalty on general outages
- Per-source `min_interval` config for rate-limited sources
- Config hot-reload in polling mode
- Block words filtering (global and per-source)
- Inline status line during fetch and wait
## Dependencies
```bash
pip install lxml requests gtts pydub pasimple langdetect pyyaml screeninfo python-bidi
```
Optional: `pip install google-genai` (Gemini TTS), `pip install piper-tts` (offline TTS)\
System: playerctl (media pause/resume)