和 AI 一起读书的电子书阅读器
"读到精彩的段落,随手圈起来和 AI 讨论;每本书都有独立的对话历史,就像为每本书配了一位专属读书伙伴。"
CoRead 是一个专注沉浸式阅读与 AI 协作的开源电子书阅读器。支持 EPUB、TXT、Markdown 格式,提供精心调校的排版主题,并内置与 AI 的深度对话能力——选中任意段落即可发起讨论,每本书的对话独立保存,切换书籍时自动恢复上下文。
当前实现为 Operit 平台的 ToolPkg 插件(Android),核心阅读逻辑采用纯前端技术(HTML + CSS + JavaScript),未来计划适配独立 Web 版。
传统阅读器的痛点:
- 看到想讨论的段落,需要切换 App、复制粘贴、再回来继续读,打断沉浸感
- 批注和讨论混在一起,找不到上次和 AI 聊了什么
- 切换书籍后,AI 不记得你们之前讨论过这本书的内容
CoRead 的解决方案:
- ✅ 零切换讨论:选中段落 → 弹出菜单 → 直接与 AI 对话,全程不离开阅读界面
- ✅ 每书独立历史:《虐杀器官》的讨论不会混进《索拉里斯星》,清晰有序
- ✅ 智能上下文恢复:切换到新对话时,AI 会自动看到"你们之前讨论过这本书的这些内容"
- 滚动 + 翻页双模式:喜欢连续滚动?还是传统翻页?随你选
- 9 套精心调校的配色主题:浅色 6 款(纸墨、秋日、蜜桃、杏林、雾蓝、森野)、深色 2 款(暖夜、夜潭)、墨水屏特典 1 款,每套都经过 92%+ 明度浅色底、去荧光深色的视觉优化
- 无级排版调节:字号、行距、段间距、页边距独立控制,找到最舒适的阅读参数
- 多字体支持:内置多种字体,支持切换
- 4 种标记样式:下划线 / 波浪线 / 直线 / 高亮块,满足不同标记习惯
- 批注与划线分离:划线只是视觉标记,批注可以随时添加、编辑、删除
- 书签面板统一管理:所有批注一目了然,点击即可跳转到原文位置
- 翻页模式精准定位:即使在翻页模式下,也能准确跳转到批注所在页
- 选中即讨论:看到想聊的段落?选中 → 点击"发送给 AI" → 开始对话,流式回复实时显示
- 每本书独立对话历史:《虐杀器官》讨论了 20 条,《索拉里斯星》讨论了 15 条,互不干扰,切换书籍时自动加载对应历史
- 智能上下文注入:切换到新对话时,AI 会自动看到"之前你们讨论过这本书的内容摘要(最近 8 条)",无需手动复述
- 本地留存:所有讨论记录本地保存为 JSON,随时回顾
使用场景举例:
- 读到《虐杀器官》里"这种杀人的意念,是出于自我吗?",选中发给 AI,讨论自由意志与暴力的关系
- 读完一章《索拉里斯星》,选中某段关于"索拉里斯海"的描述,让 AI 帮你梳理这个科幻概念
- 遇到不理解的哲学术语,选中后问 AI"这段话是什么意思?"
每套主题都经过精心调校,确保长时间阅读的舒适性:
| 主题 | 类型 | 背景 | 强调色 | 墨色 | 特点 |
|---|---|---|---|---|---|
| 纸墨 | 浅色 | #F4F1EA |
#C25946 |
#2C2A28 |
经典米白(默认) |
| 秋日 | 浅色 | #F7F3ED |
#BF6430 |
#2F403E |
暖米 + 橙棕 |
| 蜜桃 | 浅色 | #FFF5F1 |
#447F8F |
#59221D |
粉底 + 蓝绿 |
| 杏林 | 浅色 | #FAF6EE |
#315955 |
#012626 |
杏黄 + 深绿 |
| 雾蓝 | 浅色 | #E9EBEB |
#5B84AE |
#141A2B |
灰白 + 蓝调 |
| 森野 | 浅色 | #F4F4F0 |
#8CC152 |
#0E2E1B |
灰白 + 草绿 |
| 暖夜 | 深色 | #1C1C1E |
#F09B6E |
#F2D9A4 |
暖橙 + 米黄墨 |
| 夜潭 | 深色 | #0F2C30 |
#D98566 |
#E5C3B2 |
墨绿黑 + 暖橙 |
| 墨水屏 | 特典 | #FFFFFF |
#000000 |
#000000 |
纯黑白极简 |
设计原则:
- 浅色主题:底色统一保持 92%+ 明度,容器背景仅比底色深一档,保证过渡平滑
- 深色主题:去荧光,避免高饱和度大面积铺陈,降低视觉疲劳
- 框线取文字色而非强调色,保持视觉统一
- 已安装 Operit Android 版
- 需要下载 JSZip(EPUB 解析依赖):
curl -L -o dist/ui/reader/jszip.min.js \ https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js
-
克隆仓库
git clone <your-repo-url> cd CoRead
-
下载依赖
curl -L -o dist/ui/reader/jszip.min.js \ https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js
-
调整路径
编辑dist/ui/reader/index.ui.js,修改顶部的READER_HTML_PATH为你的仓库绝对路径:var READER_HTML_PATH = "file:///<你的仓库绝对路径>/dist/ui/reader/reader.html";
-
安装到 Operit
让 AI 执行:use_package operit_editor debug_install_toolpkg source_path="/path/to/CoRead" -
配置 AI 共读
首次使用需绑定对话,让 AI 执行:set_coread_config chat_id="<你的对话ID>" card_name="<可选角色卡名>"
配置文件保存在 /sdcard/Download/Operit/CoRead2/_coread_config.json。
CoRead/
├── manifest.json # ToolPkg 清单(toolpkg_id = coread2)
├── dist/
│ ├── main.js # 注册 UiRoute + 侧边栏入口
│ ├── subpkg/
│ │ ├── coread_config.js # AI 配置读写子包
│ │ └── coread_tools.js # AI 批注工具子包
│ └── ui/reader/
│ ├── index.ui.js # WebView 宿主 + JS 桥(AI 通信、文件读写)
│ ├── reader.html # 页面结构
│ ├── reader.css # 全部样式
│ ├── reader.js # 全部逻辑
│ └── jszip.min.js # EPUB 解析(需自行下载)
└── LICENSE
架构亮点:
- 阅读器核心(
reader.html/reader.css/reader.js)完全独立,不依赖 Operit API,可在浏览器里直接运行 - 平台耦合集中在
main.js、index.ui.js和subpkg/,这也是未来适配独立 Web 版的切分线 - 数据存储:IndexedDB 库
CoRead_V2(书籍数据),localStorage(阅读偏好和划线,前缀cr_/cr-)
踩过的坑,留给后来者参考:
- WebView 缓存问题:CSS / JS 通过
?v=Date.now()绕过缓存。改了不生效就重启 Operit - ToolPkg screen 注册:
screen函数必须从独立.ui.js文件 require 进来,不能在main.js内联定义 - 进度保存顺序:
closeReader()里必须先saveProgress()再移除active类,否则display:none会把scrollTop重置为 0 - EPUB 样式隔离:
sanitizeEpubCss()给所有选择器加.page-text前缀,防止电子书自带样式泄漏污染阅读器 UI - 内联
</陷阱:JS 若回退到内联<script>,所有</需写成\x3C/避免被浏览器错误解析
近期计划:
- 批注汇总页面(数据层已就绪,只差 UI)
- 导出对话记录为 Markdown / JSON
- 批注搜索与筛选功能
长期计划:
- 独立 Web 版适配(去除 Operit 平台依赖)
- 漫画 / CBZ 支持
- 高亮恢复改用 TreeWalker 或 Range 序列化(替代当前的正则方案)
- PDF 支持探索
社区期待:
- 欢迎提交 Issue / PR
- 欢迎贡献新的配色主题
- 欢迎适配到其他 AI 平台
- 高亮恢复机制:当前使用正则替换 innerHTML 恢复高亮,如果划线文本跨越多个 HTML 标签,可能会把
<mark>插进已有标签的属性里,导致标签源码直接显示为文字(计划用 TreeWalker 重构) - 批注弹窗可见性:部分主题下按钮可能存在对比度不足的情况(持续优化中)
遇到问题欢迎提 Issue!
本项目采用 GNU Affero General Public License v3.0 开源。
这意味着:
- ✅ 你可以自由使用、修改、分发本项目
- ✅ 你可以基于它构建商业项目
⚠️ 如果你修改后通过网络提供服务(如 Web 版),必须向使用者公开你的修改后源码⚠️ 修改后的衍生作品也必须使用 AGPLv3 许可
选择 AGPLv3 是为了确保 CoRead 及其衍生项目始终保持开源,让更多人受益。
- JSZip — EPUB 解包的核心依赖
- Material Symbols — 图标系统
- Operit — 提供 AI 集成能力与运行平台
- 所有测试用户和贡献者 — 感谢你们的反馈和支持
- Issues:遇到 Bug 或有功能建议?[提交 Issue](你的仓库 Issues 链接)
- 讨论:加入我们的讨论区分享阅读心得和使用技巧
- 贡献:欢迎提交 PR!无论是修复 Bug、新增功能还是改进文档
用 CoRead 开启你的 AI 共读之旅 📖✨
如果这个项目对你有帮助,欢迎 Star ⭐ 支持!