Skip to content

feat: add browser-based sender and receiver (qrl_web) - #2

Open
minimike86 wants to merge 21 commits into
mainfrom
qrl_web
Open

minimike86 wants to merge 21 commits into
mainfrom
qrl_web

Conversation

@minimike86

Copy link
Copy Markdown
Owner

Summary

  • Adds qrl_web/ — a zero-install, browser-only implementation of the QRL
    sender and receiver that can be hosted on GitHub Pages or served locally.
  • Updates README.md with the web use case, GitHub Pages URLs, and a local
    serve command.

What's in qrl_web/

File Role
index.html Landing page with links and how-it-works
sender.html File/folder picker → gzip → chunk → QR loop display
receiver.html Webcam scanner → chunk reassembly → auto-download

How it works

Uses the same 9-byte wire format as the Python server
([stream_id | seq(4 BE) | total(4 BE) | payload]) and the same manifest
QR (stream_id 255) so the protocol is compatible.

  • Compression: pako (gzip), skipped if it doesn't shrink by ≥5%
  • QR generation: qrcode@1.5.1 in byte mode
  • QR decoding: jsQR@1.4.0 with inversionAttempts: 'attemptBoth'
  • Folders: packed as .zip via JSZip (download and unzip on arrival)
  • All four CDN libraries load from jsDelivr — no npm, no build step

Notes

  • Camera access (getUserMedia) requires HTTPS or localhost — GitHub Pages
    satisfies this automatically.
  • Practical limit is roughly 500 KB at default settings (600-byte chunks,
    3 FPS). Larger files work but take more cycles.

Test plan

  • Open sender.html, select a small text file, verify QR codes cycle
  • Open receiver.html, point camera at sender, verify file downloads
  • Open sender.html, select a folder, verify .zip downloads correctly
  • Verify GitHub Pages deployment serves all three pages over HTTPS

@minimike86 minimike86 self-assigned this May 8, 2026
@minimike86 minimike86 added documentation Improvements or additions to documentation enhancement New feature or request labels May 8, 2026
- Updated sender.html to improve user instructions for missing chunk input.
- Moved JavaScript code from sender.html to sender.js for better organization.
- Introduced receiver.js to handle incoming data and manage camera interactions.
- Implemented chunk parsing logic to support numbers, ranges, and comparisons for replaying missing chunks.
- Added functionality to calculate estimated time of arrival (ETA) for data transfer.
- Enhanced UI feedback for transfer status and chunk reception.
…section during transfer and replay; enhance layout and styling for improved user experience.
…anifest chunks; adjust cycle count display for fountain mode
…client

- Deleted test files for parallel encoder, QR density, QR generation, QR reader, round trip, UI functionality, and UI theme.
- Introduced a new `ui_theme.py` module in the QRL client to manage shared visual themes, including color palettes, font configurations, and ttk style settings.

This branch was successfully deployed

1 active deployment
github-pages — 217f20e5 Deployed May 9, 2026 by minimike86 via deploy #19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant