ShadowCat v1:无需网络与USB,用摄像头实现跨设备离线文件直传

你有没有遇到过这种抓狂的场景?

  • 两台电脑都没连 WiFi,也没有 U 盘,急着传个配置文件过去。
  • 手机没装某个 App,电脑也没登录网盘,照片就是倒腾不过去。
  • 身处内网或完全离线的环境,却必须把文档从 A 设备送到 B 设备。

大多数人这时候只能去找数据线,或者临时开个热点传微信。但如果这些都用不了呢?

今天给大家介绍一个有点“黑科技”味道的方案 —— ShadowCat v1。它不需要网络、不需要蓝牙、不需要 USB 线,甚至不需要安装任何 App。只要两台设备都有浏览器和摄像头,就能通过“光信号”把文件传过去。

它到底怎么做到的?

ShadowCat 的核心思路非常直接:把文件变成一连串快速变化的图像,让屏幕来“发光”,让摄像头来“读光”

你可以把它理解成“加强版活码”或者“现代传真机”:

  • 发送端把文件切割、编码,生成一连串特殊的动态图案(类似超高频 QR 码)。
  • 这些图案在发送设备的屏幕上以极快的速度闪烁。
  • 接收端用摄像头对准屏幕,捕捉这些图案并实时解码。
  • 解码完成后,文件就在本地重建了。

整个过程完全在浏览器里完成,收发双方都只是打开一个网页而已。

具体怎么用?四步走

  1. 打开发送端:在发送设备(电脑或手机)的浏览器里打开 ShadowCat 页面,选择你要发送的文件(建议几 MB 以内的小文件)。
  2. 开始编码:网页会自动把文件转换成高速闪烁的图像帧,你的屏幕会变成“发光源”。
  3. 打开接收端:在接收设备上也打开同样的 ShadowCat 页面,切换到接收模式,把摄像头对准发送端的屏幕。
  4. 自动重建:接收端识别到光信号后,会自动解码并在本地把文件拼好,直接下载保存。

就这么简单。不需要配对,不需要登录,也不需要关心双方是什么系统。

代码长什么样?

下面是一段发送端的伪代码,帮你理解它的核心逻辑:

// Sender side (pseudocode for illustration) —— 发送端逻辑示例(伪代码)
const file = await selectFile(); // 让用户选择本地文件
const encodedFrames = await ShadowCat.encode(file); // 将文件编码成一系列图像帧

for (const frame of encodedFrames) {
  displayFrameOnScreen(frame); // 在屏幕上显示当前这一帧图像
  await delay(200); // 每帧显示 200 毫秒,实际使用时可根据摄像头帧率调整
}

你看,逻辑非常干净:选文件 -> 编码成帧 -> 逐帧显示。接收端则是反过来:逐帧捕获 -> 解码 -> 合并成文件

为什么开发者应该关注?

ShadowCat 并不是为了替代微信或网盘而生的,它在下面这些场景里简直是救命稻草:

  • 物理隔离环境:内网机、工控机、涉密设备,根本不允许联网。ShadowCat 只需要视线可见,完美适配“气隙环境”(Air-Gapped)。
  • 跨平台救急:Linux 笔记本要给 iPhone 传个配置文件?没有隔空投送、没有蓝牙配对,打开浏览器就能传。
  • 零依赖部署:整个工具是单页面应用,随便丢到任何一个能跑浏览器的设备上就能用,非常适合应急脚本包或运维工具箱。
  • 天然防窃听:没有网络流量,就不存在网络嗅探。只要保证物理上只有接收方的摄像头能看到屏幕,数据就不会被中间人截获。

它的局限你要知道

当然,这项技术也不是万能的,使用前得先管理好自己的预期:

  • 速度有限:受摄像头帧率和图像识别效率限制,传输速度大概在每秒 100 KB 左右。传个大视频会很痛苦,但传文档、图片、配置文件完全没问题。
  • 文件别太大:官方建议控制在几 MB 以内。太大的文件会导致传输时间过长,容错率也会下降。
  • 需要一定光线和对焦:环境太暗、摄像头太差、或者屏幕反光严重,都可能影响识别成功率。

总结

ShadowCat v1 提供了一种非常优雅的“兜底方案”:当网络、蓝牙、USB 全部失效时,我们还有

它用最底层的屏幕加摄像头做数据链路,把复杂的跨设备传输问题,简化成了“你闪、我看”的动作。对于开发者来说,无论是临时应急、离线运维,还是研究光学传输的玩法,这个工具都值得放进收藏夹。

直达网址:ShadowCat v1 – Optical File Transfer

类似文章