Show HN:ShadowCat – 通过浏览器中的二维码传输文件

Hacker News Top 工具

摘要

ShadowCat 是一个离线单文件HTML页面,用于通过二维码在设备间传输数据,适用于摄像头和浏览器功能正常但无线电损坏的老款手机。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/22 12:23

unprovable/ShadowCat 来源:https://github.com/unprovable/ShadowCat

ShadowCat

一个完全离线、单文件 HTML 页面,通过二维码在两台设备之间传输数据——专为那些无线功能(BLE、NFC 等)已损坏,但摄像头和浏览器仍能工作的旧手机设计。

选项卡

  • 生成 — 将文本编码为单个二维码。
  • 扫描 — 通过摄像头解码单个二维码。
  • 发送文件 — 选择文件,设置分块大小 / 帧率 / 纠错等级,点击开始。以所选帧率无限循环播放 [文件头, 数据块1…数据块N]。支持暂停 / 继续 / 停止。
  • 从…开始 — 从指定的帧索引开始循环;之后正常向前播放并回到文件头。
  • 显示帧 + 显示 / / + — 静态显示某一帧,用于重新发送丢失的特定数据块。显示的帧序号与接收端缺失块网格中的序号一致(0 表示文件头)。
  • 接收文件 — 启动摄像头对准发送端。文件头自动检测,进度条填充,缺失块网格显示尚未到达的块。传输完成后验证文件的 CRC 并显示下载按钮。

协议

  • 文件头:QRX1|H||||
  • 数据块:QRX1|D||(序号从 1 开始)
  • Base64 字母表中不含 |,因此直接使用 split('|') 解析。
  • 接收端按索引追踪数据块,忽略重复块,并通过 CRC 去重文件头。

旧手机实用提示

  • 摄像头需要 HTTPS 或 localhost——file:// 无法获取 getUserMedia 权限。可使用 python3 -m http.server 8000 提供服务,然后通过局域网访问 http://<IP>:8000/qrcode.html。iOS Safari 跨设备访问还需要 HTTPS——局域网环境下可使用 caddy 或自签名证书。
  • 如果某一帧渲染失败(“code length overflow”),请减小数据块大小或降低纠错等级。
  • 每块 500 字符 × 3 fps ≈ 1.1 KB/s(Base64 编码)≈ 0.83 KB/s(原始数据)。一个 100 KB 的文件每轮循环约需 2 分钟;接收端通常需要 1–2 轮循环。
  • 如果旧设备解码困难:降低帧率,将纠错等级提升至 Q,将数据块缩小到约 300 字符——这样生成的二维码更小、密度更低。

相似文章

Show HN: Files.md —— Obsidian 的开源替代品

Hacker News Top

Files.md 是一款免费、开源的 Markdown 笔记应用,运行于浏览器中,文件存储在本地,支持同步功能,并配有 Telegram 聊天机器人,方便随时随地访问。

二维码生成器

Simon Willison's Blog

一款可自定义样式的二维码生成工具,借助Claude构建。支持网址、文本和WiFi网络码。