메뉴
HN
Hacker News • 53일 전

화면과 카메라만으로 파일 전송하는 웹 QR 코드 기술

IMP
7/10
핵심 요약

네트워크 연결이나 앱 설치 없이 화면에 연속으로 재생되는 QR 코드를 카메라로 인식해 파일을 전송하는 기술입니다. 송신 측의 화면을 수신 측의 카메라로 촬영해 빛으로 데이터를 전달하므로, 폐쇄망이나 네트워크 권한 없이 최대 64MB의 파일을 안전하게 전송할 수 있다는 것이 핵심입니다. 오류 복원 기술인 파운테인 코드(Fountain code)를 적용해 중간에 프레임이 누락되더라도 파일을 온전히 복원할 수 있는 것이 주요 특징입니다.

번역된 본문

Decimen Optical Transfer: 파운테인 코드가 적용된 QR 파일 전송

오직 화면과 카메라만을 이용해 두 기기 간에 파일을 전송하세요. 한 기기의 화면에 파일을 끊임없이 흐르는 애니메이션 QR 코드로 표시하면, 다른 기기에서 카메라를 이를 향해 켜고 파일을 재구성합니다. 기기 간의 네트워크 연결이 필요 없고, 앱 설치도, 페어링도, 카메라 권한 외의 다른 권한도 필요하지 않습니다. 페이로드(데이터)는 빛으로 전송됩니다.

지금 바로 사용해보기 → decimen.app 설치할 것 없이 양쪽 기기에서 웹사이트를 열고 바로 시작하면 됩니다. 최초 1회 접속 이후에는 오프라인으로도 작동하며, 홈 화면에 추가하면 iOS 및 Android에서 앱처럼 설치할 수 있습니다. 최대 64MB(또는 복사한 텍스트 조각)까지 지원되며, 파일 이름과 미디어 유형이 보존되고, 효율적인 경우에만 gzip 압축을 사용합니다. 모든 데이터는 제공되기 전에 SHA-256으로 무결성이 검증되며, 수신된 동영상은 페이지 내에서 바로 재생됩니다.

이 프로젝트는 휴대폰 간 128 KB/s 속도를 달성했던 더 큰 규모의 실험에서 파생되었습니다. 전송 중인 상태에서: 휴대폰이 공기 중에서 파일을 130 KB/s 속도로 가져오는 중입니다. 두 모드 모두 암호화되지 않으므로, 송신 화면에 있는 모든 것은 그 화면을 향하는 어떤 카메라로든 읽을 수 있습니다. 이 기능이 제공하는 것은 '네트워크 없음'이지 '기밀성'이 아닙니다 — 개인정보 보호(privacy)를 참조하세요.

문서 사용법 - 빠른 시작 · 보내기 · 받기 · 문제 해결 · 설치 및 오프라인 · 개인정보 보호 구축 방식 - 아키텍처 · 프로토콜 · 플랫폼 특징 · 빌드 및 릴리스

프로토콜의 요약: 화면 대 카메라 링크에는 역방향 채널(back-channel)이 없으므로, 송신자는 파운테인 코드( Luby transform )가 적용된 프레임을 스트리밍합니다. 수신자는 순서에 상관없이 약 K·1.15개의 고유한 프레임을 수집하기만 하면 파일을 깎아내어 복원할 수 있습니다. 프레임 누락은 시간 지연을 유발할 뿐, 데이터의 정확성을 훼손하지는 않습니다.

직접 실행해 보기 npm install npm run dev # HMR을 지원하는 https 개발 서버 npm run serve # 빌드 후 프로덕션 번들 제공 npm run demo # 데모 모드: 번들된 페이로드만 전송 가능 npm test # 골든 와이어포맷 벡터 및 단위 테스트 npm run build # 호스팅되는 사이트 빌드 → dist/ npm run build:standalone # 두 개의 독립적인 페이지 → dist-standalone/ npm run build:all # 전체 빌드 송신 기기에서는 https://localhost:5173/send/ 를 열고, 수신 휴대폰에서는 출력된 네트워크 URL을 엽니다 (자체 서명된 인증서를 한 번 수락해야 합니다). 자세한 안내: 빠른 시작.

유사한 프로젝트 이 개념은 독립적으로 도달한 것입니다. 알고 보니 여러 사람들이 비슷한 아이디어를 가지고 있었으며, 그들의 접근 방식도 모두 살펴볼 만합니다: mohankumarelec/airgapped-qr-code-transfer: 압축 및 순차적 청킹을 사용하는 브라우저 기반 QR 파일 전송. 이 프로젝트를 공개적으로 데모한 후에 발견했으며, 수렴 진화의 좋은 예시입니다. divan/txqr (2018): Go로 작성된 애니메이션 QR과 파운테인 코드. 파운테인 코딩이 순차적 루핑보다 왜 더 나은지에 대한 훌륭한 설명 두 편이 있습니다. sz3/libcimbar: 이 채널에 맞게 특별히 제작된 고밀도 컬러 코드를 사용하여 QR 코드를 완전히 대체합니다.

node-qrcode 및 zxing-wasm을 사용하여 Evan Crawley (Bash Alarmist)가 제작했습니다. 라이선스 MIT.

원문 보기
원문 보기 (영어)
Decimen Optical Transfer: fountain-coded QR file transfer Send a file between two devices using nothing but a screen and a camera . One page displays the file as an endless stream of animated QR codes; another device points its camera at it and reconstructs the file. No network path between the devices, no app, no pairing, no permissions beyond the camera. The payload travels as light. Try it → decimen.app Open it on both devices and go — nothing to install. Works offline after the first visit, and installs as an app on both iOS and Android if you want it on a home screen. Files up to 64 MB (or a pasted text snippet), filename and media type preserved, gzip only when it helps, SHA-256 verified before anything is offered — and received video plays right in the page. Extracted from a larger experiment that reached 128 KB/s phone-to-phone . Mid-transfer: a phone pulling a file out of the air at 130 KB/s. Neither mode is encrypted: whatever is on the sending screen is readable by any camera pointed at it. The property this gives you is no network, not confidentiality — see privacy . Documentation Using it — quick start · sending · receiving · troubleshooting · install & offline · privacy How it's built — architecture · protocol · platform quirks · build & release The short version of the protocol: a screen-to-camera link has no back-channel, so the sender streams fountain-coded frames ( Luby transform ) — the receiver collects any ~K·1.15 distinct frames in any order and peels the file out. Dropped frames cost time, never correctness. Run it yourself npm install npm run dev # https dev server with HMR npm run serve # build, then serve the production bundle npm run demo # demo mode: only the bundled payloads can be sent npm test # golden wire-format vectors and unit tests npm run build # the hosted site → dist/ npm run build:standalone # both self-contained pages → dist-standalone/ npm run build:all # everything Open https://localhost:5173/send/ on the sending device and the printed Network URL on the receiving phone (accept the self-signed certificate once). Walkthrough: quick start . Similar projects The concept here was arrived at independently. It turns out several people have had similar ideas, and their takes are all worth a look: mohankumarelec/airgapped-qr-code-transfer : browser-based QR file transfer with compression and sequential chunking. Discovered after publicly demoing this project; convergent evolution in action. divan/txqr (2018): animated QR plus fountain codes in Go, with two excellent write-ups on why fountain coding beats sequential looping. sz3/libcimbar : goes past QR entirely with a custom high-density color code purpose-built for this channel. Built by Evan Crawley (Bash Alarmist) , with node-qrcode and zxing-wasm . License MIT