Skip to content

Repository files navigation

Memos Clipper

Highlight · Clip · Save to Memos — now with one-tap X (Twitter) bookmarks.

English | 简体中文

License: MIT Manifest No Build

Homepage · Privacy Policy · Terms

一个 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 时间流就是你的记录。

📋 前置要求

  1. 一个运行中的 Memos 实例(自托管或托管服务)。
  2. 在 Memos → Settings → Access Tokens 创建一个 Personal Access Token。
  3. 推荐使用较新的 Memos 版本(≥ 0.22)。存图与推文图片依赖附件上传接口(POST /api/v1/memos + POST /api/v1/attachments);v0.26.2 起 Memos 仅支持 multipart/form-data 上传附件,本扩展已按 multipart 实现。

🚀 安装

  1. 构建产物:
    pnpm build      # 或:node scripts/build.mjs chrome
    产物在 dist/chrome/。开发时也可直接加载仓库根目录(源码即产物,无打包器)。
  2. 打开 chrome://extensions,开启右上角 Developer mode
  3. Load unpacked,选择 dist/chrome(或仓库根目录)。

⚙️ 配置

  1. 点击扩展图标打开侧边栏。
  2. 进入设置:
    • Host:你的 Memos 地址,如 https://memos.example.com(带不带 https://、结尾斜杠、/api/v1 都会自动归一)。
    • Access token:粘贴上一步生成的 token。
    • Default visibility:新 memo 的默认可见性(Private / Workspace / Public)。X 推文也沿用此项。
    • Right-click images to save:开启后注册图片右键菜单。
  3. 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 renderMemoMarkdownPOST /api/v1/memos → 返回给 UI。

X 推文数据流:点击收藏按钮(捕获阶段事件委托)→ extractTweetContent + downloadTweetImages(content script 上下文)→ SAVE_TWEET → service worker saveTweet(逐张上传图片附件)→ renderTweetMarkdownPOST /api/v1/memos

⚠️ 已知限制

  • X 选择器依赖:X 推文提取依赖其内部 data-testid DOM 属性(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: ..."

📄 License

MIT © 2026 Foolgry

About

一个 Chrome 扩展:在任意网页划线(选中文字)、剪藏整页正文、右键保存图片,把内容直接存到你的 Memos 实例。在 x.com 上,点击推文自带的「收藏」按钮即可把整条推文(正文 / 引用 / 互动数据 / 图片)同步到 Memos。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages