MCPcopy Index your code
hub / github.com/dqsq2e2/ting-reader

github.com/dqsq2e2/ting-reader @v1.5.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.5.1 ↗ · + Follow
2,909 symbols 8,985 edges 283 files 697 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Ting Reader

Ting Reader 是一个轻量级的自托管有声书平台,专为有声书爱好者打造。它支持自动刮削元数据、多端播放进度同步、极致的视觉体验以及多架构 Docker 部署。后端现已完全重写为 Rust,带来更强的性能和更低的资源占用。

🌐 官方网站:https://www.tingreader.cn

访问官网查看最新文档、下载客户端及在线演示。

License Docker Pulls GitHub Release Official Website

📸 界面展示

📱 移动端与响应式界面 (点击展开)

🔹 登录认证

用户登录

🔹 主菜单

首页 书架 搜索 收藏

🔹 沉浸式播放

播放界面 章节列表 智能跳过

🔹 书籍详情与管理

详情概览 章节管理 元数据编辑

🔹 后台管理

存储库管理 刮削配置 任务日志 插件管理

🔹 用户与设置

用户管理 创建账号 账号设置 播放偏好

🖥️ 桌面端界面 (点击展开)

🔹 主菜单

首页
书架
搜索
收藏

🔹 书籍详情与管理

书籍详情(含章节列表与播放小窗)
编辑书籍元数据
章节管理

🔹 后台管理

存储库管理
编辑存储库
系统日志
插件管理

🔹 用户与设置

用户管理
创建用户
系统设置 - 账号与外观
系统设置 - 播放偏好

✨ 功能特性

  • Rust 核心:后端采用 Rust 编写,资源占用低,响应速度快。
  • 📚 自动刮削:集成强大的元数据刮削,自动获取书名、作者、演播者、简介及标签。
  • 🔌 插件系统:支持 JS、WASM 和 Native 插件,轻松扩展刮削源和格式支持。
  • 🎨 自适应主题:根据书籍封面自动提取主色调并实时调整书籍详情页背景与按钮颜色,视觉体验极致沉浸。
  • ☁️ 多源支持:支持本地目录挂载及 WebDAV(如 Alist、PikPak)远程存储,并支持 .strm 流媒体文件。
  • 🎵 格式兼容:支持多种音频格式,包括 MP3, M4A, M4B, WAV, FLAC, OGG, OPUS, AAC, WMA 等。
  • 🎧 沉浸播放:支持跳过片头/片尾,支持播放速度调节及进度记忆,支持服务端转码播放。
  • 🏷️ 智能管理:支持标签筛选、系列管理,支持本地媒体库自动检测,交互体验极佳。
  • 🧩 外挂组件:支持将播放器以 Widget 形式嵌入博客、Notion 或个人网站,支持吸底、悬浮等多种布局及自定义 CSS。
  • 🌓 深色模式:完美的深色模式适配,夜间听书更护眼。
  • 🐳 Docker 部署:支持 amd64 和 arm64 多架构构建,一键启动。
  • 🔐 权限管理:完善的登录系统与管理员后台,支持多用户数据隔离。

🚀 快速开始

使用 Docker Compose (推荐)

创建 docker-compose.yml 文件:

services:
  ting-reader:
    image: dqsq2e2/ting-reader:latest
    container_name: ting-reader
    ports:
      - "0.0.0.0:3000:3000"
      # 如需 IPv6 访问,请先确认 Docker 主机已启用 IPv6,再取消下一行注释:
      # - "[::]:3000:3000"
    volumes:
      - ./data:/app/data        # 数据库和配置
      - ./storage:/app/storage  # 有声书文件目录
      - ./plugins:/app/plugins  # 插件目录
      - ./temp:/app/temp        # 临时缓存目录
    restart: unless-stopped
    environment:
      - RUST_LOG=info
      - TING_SERVER__HOST=0.0.0.0
      - TING_SERVER__PORT=3000
      # 可选:未配置时服务端会自动生成并持久化 JWT 密钥。
      # 固定密钥仅在迁移实例或多副本共享登录状态时需要。
      # - TING_SECURITY__JWT_SECRET=change_me_in_prod

IPv6 访问需要 Docker 守护进程和宿主机网络同时启用 IPv6。直接运行二进制时,也可以将 TING_SERVER__HOST 设为 :: 监听 IPv4/IPv6 双栈。

启动容器:

docker-compose up -d

飞牛 fnOS 部署 (FPK)

如果您使用的是飞牛 fnOS 系统,可以通过官方应用中心的“手动导入”功能快速一键部署:

  1. 下载安装包:前往 GitHub Releases 下载最新版本的 ting-reader-[版本号].fpk 文件。
  2. 手动安装
    • 进入飞牛 fnOS 的 应用中心
    • 点击右上角的 手动安装 按钮。
    • 选择并上传下载好的 .fpk 文件。
  3. 完成向导:按照图形化引导界面配置访问端口以及有声书存储路径,点击“完成”后应用将自动创建容器并添加桌面启动图标。

访问 http://localhost:3000 (或您自定义的端口) 即可开始使用。

⚠️ 注意:首次登录请使用管理员账号:admin,密码:admin123。登录后请务必及时在设置页面修改密码以保证安全。

🛠️ 开发指南

环境要求

  • Node.js 20+
  • Rust 1.75+
  • SQLite3

项目结构

ting-reader/
├── backend/    # Rust 后端源代码
├── frontend/   # React 前端源代码
├── plugins/    # 官方插件源码
└── .github/    # GitHub 工作流与 FPK 配置

本地开发

  1. 克隆仓库bash git clone https://github.com/dqsq2e2/ting-reader.git cd ting-reader

  2. 启动后端bash cd backend # 确保 config.toml 配置正确 cargo run

  3. 启动前端bash cd ../frontend npm install npm run dev

💬 交流与支持

如果您在安装或使用过程中遇到任何问题,或者有功能建议,欢迎加入我们的社群:

点击链接即可快速加入群聊,获得最新动态、技术支持及使用技巧分享。

📜 更新日志

关于项目的详细版本变更记录,请参考 CHANGELOG.md

📄 开源协议

本项目采用 MIT License 协议。

🤝 贡献指南

欢迎提交 Issue 或 Pull Request!请参考 CONTRIBUTING.md 了解更多细节。

Extension points exported contracts — how you extend this code

Plugin (Interface)
(no doc) [6 implementers]
backend/src/plugin/types/mod.rs
Book (Interface)
(no doc)
frontend/src/core/types/book.ts
Repository (Interface)
(no doc) [6 implementers]
backend/src/db/repository/base.rs
BookMetadata (Interface)
(no doc)
frontend/src/core/types/book.ts
PluginLogger (Interface)
Plugin logger trait [2 implementers]
backend/src/plugin/types/mod.rs
PluginDependency (Interface)
(no doc)
frontend/src/core/types/plugin.ts
PluginEventBus (Interface)
Plugin event bus trait [2 implementers]
backend/src/plugin/types/mod.rs
PluginStats (Interface)
(no doc)
frontend/src/core/types/plugin.ts

Core symbols most depended-on inside this repo

to_string
called by 1764
backend/src/api/middleware/trace.rs
clone
called by 1166
backend/src/db/manager.rs
get
called by 564
backend/src/plugin/store.rs
is_empty
called by 403
backend/src/core/common/lru_cache.rs
iter
called by 199
backend/src/core/common/lru_cache.rs
execute
called by 194
backend/src/db/manager.rs
insert
called by 179
backend/src/core/common/lru_cache.rs
get
called by 170
backend/src/plugin/registry/mod.rs

Shape

Function 1,460
Method 920
Class 374
Interface 115
Enum 40

Languages

Rust76%
TypeScript24%

Modules by API surface

backend/src/api/handlers/plugins.rs65 symbols
backend/src/plugin/js/bindings.rs48 symbols
backend/src/core/library_scanner/shared.rs48 symbols
backend/src/plugin/wasm/plugin.rs44 symbols
backend/src/core/task_queue/mod.rs42 symbols
backend/src/plugin/manager/lifecycle.rs41 symbols
backend/src/plugin/native/loader.rs39 symbols
backend/src/plugin/manager/capabilities.rs39 symbols
frontend/src/shared/modals/scrapeDiffHelpers.tsx35 symbols
frontend/src/features/admin/PluginCard.tsx35 symbols
backend/src/core/services/scraper_service.rs35 symbols
backend/src/plugin/types/metadata.rs33 symbols

For agents

$ claude mcp add ting-reader \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact