Show HN:ShadowCat – 通过浏览器中的二维码传输文件
摘要
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: Kage – 将任意网站快照为单个二进制文件,支持离线浏览
Kage 是一个 Go 工具,它通过无头 Chrome 渲染页面、快照 DOM 并剥离 JavaScript,将网站克隆为可离线访问的文件夹。它输出静态 HTML 文件,无需网络即可浏览。
Show HN: Antenna – 内置 MCP 服务器的 RSS 阅读器
Antenna 是一款本地优先的 RSS 阅读器,使用 SQLite 存储订阅源,并通过邮件摘要和面向 AI 代理的 MCP 服务器提供内容,完全基于 MIT 许可证开源。
Show HN: Files.md —— Obsidian 的开源替代品
Files.md 是一款免费、开源的 Markdown 笔记应用,运行于浏览器中,文件存储在本地,支持同步功能,并配有 Telegram 聊天机器人,方便随时随地访问。
通过USB/IP将浏览器内Linux虚拟机与WebUSB桥接,复活旧扫描仪
介绍yes-we-scan.app,一款使用浏览器内Linux虚拟机(v86)和WebUSB的网络应用,通过浏览器中运行SANE,让用户无需原生驱动即可复活旧USB扫描仪。
二维码生成器
一款可自定义样式的二维码生成工具,借助Claude构建。支持网址、文本和WiFi网络码。