Decimen Optical Transfer: QR-файлы по свету
Браузерный PoC передачи файлов через экран и камеру с fountain-кодами без сети и приложений.
privacy
Эта заметка участвует в semantic memory.
AI Summary
🚀 TL;DR
Decimen Optical Transfer — минималистичный proof-of-concept, позволяющий передавать файлы (512 КБ или 2 МБ) между устройствами исключительно через экран и камеру с помощью fountain-кодов и QR-кодов. Скорость до 129 КБ/с, без сети, приложений и ручного сопряжения.
📖 Что это такое
Проект реализует односторонний оптический канал: отправитель отображает файл как бесконечный поток анимированных QR-кодов, получатель снимает их камерой и восстанавливает файл. Используется Luby Transform (LT) coding с robust-soliton distribution, что делает передачу устойчивой к потерям кадров.
🔑 Ключевые факты
- Передача 512 КБ или 2 МБ изображения
- Скорость ~129 КБ/с (handheld), до 186 КБ/с (propped)
- Нет handshake, receiver подхватывает поток mid-flight
- Каждый кадр имеет 20-байтный заголовок (session id, seq, block count/size, hash)
- Fountain-коды: получатель собирает ~K·1.15 кадров в любом порядке
- QR-коды версии v27 (1465 байт) или v40 (2953 байт)
- Декодирование через zxing-cpp → WASM
- Safari: BarcodeDetector отсутствует (WebKit bug 281848)
⚙️ Как это работает
- Отправитель: файл разбивается на блоки; каждый кадр — XOR псевдослучайного подмножества блоков (deterministic из seq).
- Получатель: собирает кадры, применяет LT-peeling, восстанавливает файл.
- Нет необходимости в retransmission — потерянные кадры просто игнорируются.
- Настройки: tx fps (24), bytes/frame, ECC level (L), capture width/fps, worker count.
- HTTPS обязателен для getUserMedia; dev-сервер использует self-signed сертификат.
💡 Вывод и значение
Проект демонстрирует практическую передачу данных по оптическому каналу без инфраструктуры. Fountain-коды решают проблему отсутствия обратного канала и потерь кадров. Подходит для air-gapped сценариев, обмена данными между устройствами без Bluetooth/Wi-Fi/NFC.
📌 Важные детали
- JS-движки по-разному реализуют Math.log — используется детерминированный IEEE-754 логарифм
- iOS: frameRate: {exact: 60} обязателен, иначе камера даёт 30 fps
- requestVideoFrameCallback требует generation counter, иначе утечка zombie capture loop
- Прогресс измеряется по собранным кадрам, а не по решённым блокам (LT-peeling back-loads)
- QR ECC level L — оптимальный компромисс между плотностью и надёжностью
Автор: bashalarmistalt (https://github.com/bashalarmistalt/decimen-optical-transfer)