QRFerry 通过实时动态二维码流在设备之间传输文件,整个过程完全在浏览器中完成,文件不会上传到应用服务器。

Stars

40

7 天增长

暂无数据

Fork 数

10

开放 Issue

0

开源协议

暂无数据

最近更新

2026-07-31

AI 仓库情报摘要
FR-AI / ANALYSIS

为什么值得关注

它将二维码传输重新构想为连续高速光学通道,结合 RaptorQ 喷泉码、双通道二维码渲染和 WebAssembly 编解码器,实现可靠的纯浏览器气隙文件传输。

适合谁使用

  • 需要在气隙或网络受限设备间传输文件的隐私敏感用户
  • 研究二维码、喷泉码或 WebAssembly 的开发者
  • 需要在无网络基础设施下完成离线设备到手机传输的团队
  • 评估光学侧信道传输方法的安全研究人员

典型使用场景

  • 在气隙或网络受限环境中将文件从屏幕传输到手机
  • 在不向应用服务器上传文件的情况下传输文件
  • 使用实验室 1 Mbps 配置测试高吞吐二维码流传输
  • 在摄像头模糊、丢帧或二维码乱序时仍能恢复文件

项目优势

  • 传输完全在浏览器中完成,文件不会上传到应用服务器
  • RaptorQ 交织让接收端可中途加入、丢弃模糊帧、接受乱序帧,并在收到足够唯一符号后重建数据
  • 多层校验:逐帧 CRC、RaptorQ 对象 CRC、压缩载荷 CRC 和原始文件 CRC
  • 测试工具使用真实 WebAssembly 渲染器和扫码器并加入曝光噪声,同时验证生产构建

使用前须知

  • 高速双通道模式要求发送端全屏播放、接收端启用双通道模式,并让手机横向靠近且保持稳定
  • 吞吐量受摄像头采集能力和二维码密度限制;1 Mbps 是实验室中摄像头损耗前的标称值
  • 需要支持 WebAssembly 和摄像头访问的现代浏览器,不适用于所有设备

README 快速开始

QRFerry

QRFerry moves a file from one device to another as a live animated QR stream. The sender and receiver run entirely in the browser; the file is never uploaded to an application server.

Use it

  1. Open the root page on the sending screen and choose a file.
  2. Open /scan on the receiving phone and allow rear-camera access.
  3. Start the QR stream and keep the complete code inside the phone's guide.
  4. Save the file when RaptorQ recovery and the whole-file checksum reach 100%.

Robust through Turbo 30 use one stable QR target. Turbo 60 uses two V30-L lanes, updating them alternately at 30 fps each so one remains stable during every display transition. The opt-in 1 Mbps laboratory profile uses the same dual-lane design with V40-L for a nominal 1.40 Mbps optical payload channel before camera loss. Dual modes require fullscreen sender playback, the receiver's Dual lane option, and a landscape phone held close and steady.

Demo

This inline preview is generated from the final privacy-redacted demo. The full-resolution recording remains local at videos/qrferrydemo_timed_redacted.mov and is intentionally excluded from Git.

Protocol

  • Brotli quality 11 and gzip level 9 are both attempted; only the smallest representation is retained, and only when it saves optical bytes.
  • QR frames use raw byte mode, avoiding the Base45 expansion of the previous protocol.
  • Every frame carries a compact binary header, a RaptorQ symbol, and CRC-32.
  • File metadata is inside the protected RaptorQ object instead of repeating in descriptor beacons.
  • Source and repair symbols are interleaved. The receiver can join mid-cycle, discard blur, accept frames out of order, and reconstruct after receiving enough unique symbols.
  • Turbo 15 uses one V30-L code held for four refreshes on a 60 Hz screen. Turbo 30 holds one code for two refreshes. Turbo 60 alternates updates across two V30-L lanes, so each lane remains stable for two refreshes while their combined stream carries 60 symbols per second. The 1 Mbps laboratory profile applies the same scheme to two denser V40-L lanes.
  • Playback is synchronized to browser display refreshes. The sender reports its measured render rate; the receiver reports negotiated and delivered camera fps, completed scans per second, and decoder p50/p95 latency.
  • Dual scanning acquires at most two codes per exposure and

相关仓库与替代方案

根据分类、Topic 和编程语言匹配的相似项目。

TanStack
精选
TanStack GitHub avatar

router

TanStack Router is a type-safe, data-driven React router with built-in caching, prefetching, and nested layouts, while TanStack Start extends it into a full-stack SSR framework.

Web 开发前端框架
14,861
vercel-labs
精选
vercel-labs GitHub avatar

scriptc

scriptc compiles ordinary TypeScript into small, fast native executables without needing Node.js, V8, or any JavaScript runtime in the binary.

开发者工具代码质量与构建
1,985
Jakubantalik
精选
Jakubantalik GitHub avatar

thinking-orbs

A React component library that renders six hand-tuned animated thought orb loading indicators on a plain 2D canvas, with two purpose-tuned sizes and automatic theme detection for AI and agent UIs.

AI 与机器学习AI 智能体
1,191