开源 · 自部署 · 跨设备暂存

shotsync:截图和文字,换台设备接着用。

shotsync 是一个图片与文字暂存工具,可以直接使用在线版,也可以部署在自己的 Cloudflare 账号中。在电脑上传截图,稍后从手机保存;在手机发一段文字,回到电脑复制。两台设备无需同时在线,也无需连接同一个 Wi-Fi。

直接使用在线版查看只读演示部署自己的 shotsync

演示站只有公开样例,不提供访客上传。自己部署是默认方式,无需注册账号或配置 Supabase;公共账号服务是另一个独立入口。

自己部署,还是直接使用服务?

自己部署:内容存放在你自己的 Cloudflare,输入一个访问令牌即可使用,无需邮箱、账号数据库或 Supabase。

公共托管服务:在运营方提供的地址注册登录,文件按账号隔离,适用运营方的限额和保留时间。打开在线版,邮箱+密码注册,无需邮件验证,请保存恢复码。当前限 100 个账号试用,新账号默认保留 7 天;查看可用状态与说明。两种方式的账号、访问令牌和文件不互通。

手机使用在线版,可按手机快捷入口设置添加到主屏幕,以后点图标就能进入相册。

适合什么场景?

它需要互联网连接,适合个人或可信的小圈子。它不是多人网盘、长期备份服务,也不适合视频和任意类型的大文件传输。

手机和电脑怎么用?

主界面是浏览器中的 PWA,无需安装原生应用。手机和电脑打开同一个部署地址,输入相同的访问 token,就可以访问同一份图片和文字。当前界面使用中文。

  1. 在电脑打开自己的 shotsync,输入部署时设置的 token。
  2. 点击「+ 图片」上传截图,或点击「✎ 文字」发送文字片段。
  3. 在手机浏览器打开相同地址并输入 token。图片池约每 20 秒自动刷新一次。
  4. 点开内容,选择「保存」或「复制」。也可以从 Safari 分享菜单添加到主屏幕。

可选的 macOS 菜单栏客户端支持自动上传新截图,需要 macOS 13+ 和本地构建。iPhone 上可按 iOS 快捷指令教程从其他 App 分享图片到池子。

如何自部署 shotsync?

默认自部署后端只有一个 Cloudflare Worker 和一个 R2 存储桶,不需要 D1、Supabase 或邮件服务。你需要自己的 Cloudflare 账号、启用 R2,以及 Node.js 22+ 环境。

  1. GitHub 仓库克隆源码,安装依赖,使用 Wrangler 登录自己的 Cloudflare 账号。
  2. 创建 R2 存储桶,使其名称与项目的 wrangler.toml 配置一致。
  3. 生成足够长的随机 token,通过 Wrangler secret 设置 AUTH_TOKEN,然后部署 Worker。
  4. 在每台设备打开部署地址,输入同一个 token。
  5. 在 R2 的 Object lifecycle rules 中设置创建 30 天后删除对象。

30 天删除需要你配置 R2 生命周期规则,Worker 本身不会自动建立这条规则。重要文件请保留其他副本。完整命令及配置以 仓库部署说明为准。

代码采用 MIT 许可证。运行费用由你的 Cloudflare 用量和当前套餐决定,免费额度并不代表无限使用;部署前查看 WorkersR2 官方计费说明

数据、访问权限与限制

常见问题

发送设备必须一直开着吗?

不用。上传完成后,另一台设备可以稍后通过互联网取回,直到内容被手动删除或被 R2 生命周期规则清理。

能直接用公开演示同步自己的截图吗?

不能。演示是只读样例池;自己的数据应放在自己部署的实例中。

自部署需要注册账号或申请 Supabase 密钥吗?

不需要。默认部署使用你设置的访问 token;它不是 Cloudflare API Token。账号体系只用于独立的多用户托管服务。

token 泄露了怎么办?

在自己的 Worker 上更新 AUTH_TOKEN,并在各设备重新输入。更新 token 也会使此前签发的分享链接失效。

为什么上传后另一台设备看不到?

先确认两台设备打开的是同一个部署地址,token 一致,上传已成功。等待一次自动刷新;如果仍失败,检查浏览器请求及 Worker 日志。仅打开网页不能完成设备间同步,内容必须先上传成功。

What is shotsync?

shotsync is an open-source, self-hosted image and text pool built with Cloudflare Workers and R2. Upload a screenshot or text snippet on one device and retrieve it later on another. The browser/PWA client uses one shared access token; optional macOS and iOS Shortcut integrations are available. Configure R2 lifecycle rules for 30-day retention. The default self-hosted mode is a personal transit pool. You can also use the hosted service with an individual account, without deploying; its quotas and retention differ.