Riocloud Reader
Universal content reader — fetch, transcribe, and digest content from 30+ platforms. Combines the best of x-reader and OpenClaw-DeepReeder.
Supported Platforms
| Platform | Text Fetch | Video/Audio Transcript | API Key Required | Notes |
|---|---|---|---|---|
| 🐦 Twitter/X | ✅ | — | ❌ | FxTwitter API + Nitter fallback |
| ✅ | — | ❌ | Native .json API | |
| 🎬 YouTube | ✅ | ✅ | ❌ | transcripts in multiple languages |
| 📰 WeChat (微信公众号) | ✅ | — | ❌ | Jina + Playwright fallback |
| 📕 Xiaohongshu (小红书) | ✅ | — | ❌ | Playwright with session |
| 📕 Bilibili (B站) | ✅ | ✅ | ❌ | Video metadata + subtitles |
| 📡 RSS/Atom | ✅ | — | ❌ | feedparser |
| 💬 Telegram | ✅ | — | ✅ | Telethon (requires API credentials) |
| 🌐 Generic (any URL) | ✅ | — | ❌ | Trafilatura + Jina Reader |
| 📓 NotebookLM | — | ✅ | ✅ | Google authentication |
Platform Details
🐦 Twitter/X
- Regular tweets with engagement stats (likes, RTs, views, bookmarks)
- Long tweets (Twitter Blue)
- X Articles (long-form content)
- Quoted tweets (nested content)
- Reply threads (up to 5 via Nitter fallback)
- Profile snapshots
- Self posts (full markdown body)
- Link posts (URL + metadata)
- Top comments (up to 15, sorted by score)
- Nested reply threads (up to 3 levels deep)
- Media URLs (images, galleries, videos)
- Post stats (score, comment count, upvote ratio)
- Flair tags
🎬 YouTube
- Video transcripts in multiple languages
- Metadata (title, description, channel)
- Support for
youtube.com,youtu.be,youtube.com/embed
📰 WeChat (微信公众号)
- Articles from official accounts
- Jina Reader as primary fetcher
- Playwright fallback for anti-scraping pages
📕 Xiaohongshu (小红书)
- Notes and posts
- Images and media URLs
- Playwright with session for authenticated requests
📕 Bilibili (B站)
- Video metadata
- Subtitles
- Support for
bilibili.comandb23.tvshort links
📡 RSS/Atom
- Any standard RSS or Atom feed
- Auto-detection of feed URLs
💬 Telegram
- Channel messages
- Requires
TG_API_IDandTG_API_HASHfrom my.telegram.org
🌐 Generic (Any URL)
- Any webpage via Trafilatura
- Jina Reader as fallback
- Best effort content extraction
📓 NotebookLM (Integration)
- Upload content as sources
- Generate Audio Overview (podcast-style)
- Requires Google authentication
Installation
Basic Install
pip install git+https://github.com/Riocloud/riocloud-reader.git
With All Dependencies
pip install "riocloud-reader[all] @ git+https://github.com/Riocloud/riocloud-reader.git"
playwright install chromium
Optional Dependencies
# Browser support (WeChat, Xiaohongshu)
pip install "riocloud-reader[browser]"
# YouTube transcripts
pip install "riocloud-reader[youtube]"
# Telegram support
pip install "riocloud-reader[telegram]"
# NotebookLM integration
pip install "riocloud-reader[notebooklm]"
# Generic URL parsing
pip install "riocloud-reader[generic]"
# Development
pip install "riocloud-reader[dev]"
Usage
CLI
# Single URL
riocloud-reader https://twitter.com/user/status/123456
riocloud-reader https://youtube.com/watch?v=dQw4w9WgXcQ
riocloud-reader https://reddit.com/r/python/comments/abc123
# Multiple URLs
riocloud-reader https://url1.com https://url2.com
# Save to file
riocloud-reader https://example.com/article --output article.md
Python Library
import asyncio
from riocloud_reader import Reader
async def main():
reader = Reader()
# Single URL
content = await reader.read("https://twitter.com/user/status/123456")
print(content.title)
print(content.content[:500])
# Batch
results = await reader.read_batch([
"https://twitter.com/user/status/1",
"https://reddit.com/r/python/comments/abc",
])
asyncio.run(main())
OpenClaw Skill
from skills.reader import run
# Read content directly into agent memory
result = run("Check out this: https://x.com/elonmusk/status/123456")
MCP Server
# Start MCP server
python -m riocloud_reader.mcp
# Configure in claude_desktop_config.json
{
"mcpServers": {
"riocloud-reader": {
"command": "python",
"args": ["-m", "riocloud_reader.mcp"]
}
}
}
Configuration
Environment Variables
| Variable | Required | Description |
|---|---|---|
TG_API_ID |
Telegram only | From my.telegram.org |
TG_API_HASH |
Telegram only | From my.telegram.org |
GROQ_API_KEY |
Whisper only | Free from console.groq.com |
FIRECRAWL_API_KEY |
Optional | For paywalled content |
DEEPREEDER_MEMORY_PATH |
Optional | Where to save content |
.env File
cp .env.example .env
# Edit with your credentials
Architecture
riocloud_reader/
├── parsers/
│ ├── base.py # Base parser + ParseResult
│ ├── twitter.py # Twitter/X (FxTwitter + Nitter)
│ ├── reddit.py # Reddit (.json API)
│ ├── youtube.py # YouTube transcripts
│ ├── wechat.py # WeChat articles
│ ├── xhs.py # Xiaohongshu
│ ├── bilibili.py # Bilibili
│ ├── rss.py # RSS/Atom
│ ├── telegram.py # Telegram channels
│ └── generic.py # Any URL (Trafilatura)
├── core/
│ ├── router.py # URL → Parser routing
│ ├── storage.py # File I/O
│ └── config.py # Settings
├── skills/
│ └── reader/ # OpenClaw skill
├── integrations/
│ └── notebooklm.py # NotebookLM API
├── mcp/
│ └── server.py # MCP server
├── reader.py # Main Reader class
└── schema.py # Data models
Development
# Clone and install
git clone https://github.com/Riocloud/riocloud-reader.git
cd riocloud-reader
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black .
ruff check --fix .
License
MIT — Riocloud
Metadata
Release files for riocloud-reader 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| riocloud_reader-1.0.0.tar.gz | 22.0 kB | Without provenance | Details for riocloud_reader-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| riocloud_reader-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for riocloud_reader-1.0.0-py3-none-any.whl |
Total release size: 46.6 kB
Release files / riocloud_reader-1.0.0.tar.gz
| Download URL | riocloud_reader-1.0.0.tar.gz |
|---|---|
| Size | 22.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee2c3b943b5101fbe56340b89e13073bb95b0301cc0e40d12e94aca896374f62
|
|
BLAKE2b-256 checksum How to use checksums |
d9d0bc2a0c830fff8ca8cd7e03864bfe88e983c6a1e394b9961919983620161d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.2
|
Release files / riocloud_reader-1.0.0-py3-none-any.whl
| Download URL | riocloud_reader-1.0.0-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b6a996d98a6e02d512910f879df1d1672f45f5ad6a41df9afcb900f86c331f1
|
|
BLAKE2b-256 checksum How to use checksums |
fbd623f4be617f95323e13599d595b27e1a37b1c805d68c1b30ba3702305375f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.2
|
Security for riocloud-reader 1.0.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.