一个 Chrome 扩展:在任意网页划线(选中文字)、剪藏整页正文、右键保存图片,把内容直接存到你的 Memos 实例。在 x.com 上,点击推文自带的「收藏」按钮即可把整条推文(正文 / 引用 / 互动数据 / 图片)同步到 Memos。 Memos 是唯一的存储与展示后端。
- 🐦 X 推文收藏同步:在 x.com 点击推文原生的「收藏」按钮,除 X 自身收藏外,同时把推文正文、作者、引用推文、互动数据(回复 / 转发 / 点赞 / 浏览)、永久链接和**图片(作为附件上传)**存成一条 Memos memo,自动带
#clip/x.com #tweet #tweet/<作者>标签。 - ✍️ 划线存 memo:选中网页文字 → 浮动按钮(或
Ctrl+E)→ 填笔记 / 标签 / 颜色 → 存成一条 memo。 - 📄 整页剪藏:按
Ctrl+O,用 Defuddle 提取正文转 Markdown。 - 🖼️ 右键存图:图片上右键 → “Save image to Memos”,上传为 Memos 附件。
- 🏷️ 所有内容自动带来源链接和
#clip/<域名>标签,在 Memos 内可按站点检索。
不在网页上持久化或复原高亮——Memos 时间流就是你的记录。
- 一个运行中的 Memos 实例(自托管或托管服务)。
- 在 Memos → Settings → Access Tokens 创建一个 Personal Access Token。
- 推荐使用较新的 Memos 版本(≥ 0.22)。存图与推文图片依赖附件上传接口(
POST /api/v1/memos+POST /api/v1/attachments);v0.26.2 起 Memos 仅支持 multipart/form-data 上传附件,本扩展已按 multipart 实现。
- 构建产物:
产物在
pnpm build # 或:node scripts/build.mjs chromedist/chrome/。开发时也可直接加载仓库根目录(源码即产物,无打包器)。 - 打开
chrome://extensions,开启右上角 Developer mode。 - 点 Load unpacked,选择
dist/chrome(或仓库根目录)。
- 点击扩展图标打开侧边栏。
- 进入设置:
- Host:你的 Memos 地址,如
https://memos.example.com(带不带https://、结尾斜杠、/api/v1都会自动归一)。 - Access token:粘贴上一步生成的 token。
- Default visibility:新 memo 的默认可见性(Private / Workspace / Public)。X 推文也沿用此项。
- Right-click images to save:开启后注册图片右键菜单。
- Host:你的 Memos 地址,如
- 点 Test 验证连接(返回实例地址与用户名即成功),再点 Save。
| 操作 | 触发方式 |
|---|---|
| 同步 X 推文 | 在 x.com 推文上点击 X 自带的「收藏」(书签)按钮 |
| 划线存 memo | 选中文字后点浮动按钮 ✦,或按快捷键(默认 Ctrl+E) |
| 整页剪藏 | 按快捷键(默认 Ctrl+O) |
| 保存图片 | 在图片上右键 → “Save image to Memos” |
| 关闭弹窗 | Esc |
快捷键、是否显示浮动按钮均可在设置里改。
推文保存后在 Memos 里的样子
**Elon Musk** (@elonmusk)
Saving Twitter was 80% of the reason I bought it.
💬 12 🔁 34 ❤️ 56 👁 789
🔗 [Source](https://x.com/elonmusk/status/123456789)
#clip/x.com #tweet #tweet/elonmusk图片作为 Memos 附件渲染缩略图,正文 Markdown 里的链接可直接点回原推文。
pnpm install # 可选:项目零运行时依赖,仅用于脚本
pnpm test # 单元测试(renderMarkdown / dataUrlToBlob 等)
pnpm check # 语法检查两个核心 JS
pnpm build # 打包到 dist/chrome源码即产物(无打包器)。三层结构,UI 永远不直接访问 chrome.storage 或网络,全部通过 service worker 消息中转:
content/content-script.js— 划线捕获、浮动按钮、编辑器、标签选择器、Defuddle 剪藏、图片抓取、X 推文 DOM 提取与收藏劫持。background/service-worker.js— 消息中枢、设置、Memos API(memosRequest/createMemo/uploadAttachment)、右键菜单、Markdown 渲染(renderMemoMarkdown/renderClippingMarkdown/renderImageMemoMarkdown/renderTweetMarkdown)。sidepanel/— 设置面板 + 选区编辑(页面内编辑器之外的输入入口)。
数据流(划线为例):选中文字 → content script 构造 draft → SAVE_ANNOTATION → service worker renderMemoMarkdown → POST /api/v1/memos → 返回给 UI。
X 推文数据流:点击收藏按钮(捕获阶段事件委托)→ extractTweetContent + downloadTweetImages(content script 上下文)→ SAVE_TWEET → service worker saveTweet(逐张上传图片附件)→ renderTweetMarkdown → POST /api/v1/memos。
- X 选择器依赖:X 推文提取依赖其内部
data-testidDOM 属性(bookmark/tweetText/User-Name等),X 改版可能导致提取失败;失败时仍尽量保存能拿到的字段(至少含链接)。 - X 图片跨域:图片在页面上下文
fetch,偶发被拒时单张跳过、文字照存。 - 跨域图片:右键存图同样通过页面上下文
fetch,少数严格 CORS / 防盗链图片可能下载失败。 - 大图:单张图片上限 15MB。
- 附件关联兼容性:不同 Memos 版本附件字段名略有差异,优先使用
attachments[].name。若存图后 memo 没有内联图片,请升级到最新 Memos。
欢迎提 Issue 和 PR。请先在 Issue 里描述你想解决的问题或新增的功能,便于讨论方向。
git checkout -b feat/your-feature
# 改代码
pnpm test && pnpm check && pnpm build
git commit -m "feat: ..."MIT © 2026 Foolgry