Live data from Hacker News

Show HN: Cimbar – File transfer via color barcodes and the Android camera

github.com

21–27 of 27 posts

Re: Show HN: Cimbar – File transfer via color barcodes and the Android camera

#22
post #17
post #2

Hello all, You've seen QR codes, maybe Microsoft HCCB [0], maybe jabcode [1] – well, here's a prototype of something new for the pile. :) I saw txqr [2] a while back and was impressed, but also curious about how much throughput was possible with animated bar codes. I may have gotten carried away in my research into the question. cimbar is a single and multi-frame color barcode format using reed solomon (for now) and…

Amazing! Do you know any variants of these which squeeze out the maximum transfer rate over a high quality connection? Thinking about data transfer from a VPN/RDP remote desktop where I want to grab the screen output on the client with very little loss in quality (basically only limited by the chosen video encoder).

Using it to transfer files over a remote desktop connection is like a graphical version of zmodem [0].

[0] https://en.wikipedia.org/wiki/ZMODEM

Re: Show HN: Cimbar – File transfer via color barcodes and the Android camera

#24

Very interesting but couldn't get it to work with my smartphone. Even with a 250Ko image file, I got bored before it finished ! My camera may be too low quality and/or my monitor too small. A barcode size parameter may be useful (even though it reduces throughput) so that it is easier to scan on all devices.

Multiple sizes isn't a bad idea. I'm not sure I know enough about what sizes would be appropriate though. :)

Transfers getting stuck like that usually is an indication that the decoder can't reliably find the 3+1 corner pattern. I might add a toggle to the decoder app that trades speed for more reliability.

That said, there are some failure modes that are harder to fix: I had a mysteriously slow transfer that was driving me nuts, until I noticed that my mouse cursor was on top of one of the corners.

Re: Show HN: Cimbar – File transfer via color barcodes and the Android camera

#25

Is it really phone CPU performance that limits the bandwidth? I expected it would be the camera.

Right now, it's both.

The decoder has a lot of image processing work to do (intriguingly well-suited for the GPU), and also lots of popcnts. I've optimized it a fair bit, but there's probably some tricks I still need to learn. It turns out that mobile processors don't like heat very much, and blow out their cache much quicker than you'd hope. :)

In the long run, I think your intuition is correct. The hard physics of the camera constraints (exposure time, etc) will put a hard upper bound on FPS+fidelity, and thus bandwidth.

Re: Show HN: Cimbar – File transfer via color barcodes and the Android camera

#26
post #21

I heard ordinary QR codes can hold up to 3KB of data. How much data can this one hold?

The simple answer is:

4-color (standard): 7500 bytes

8-color: 8750 bytes

monochrome: 5000 bytes

Those numbers are with the standard, fairly high ECC setting (~20% of the image) that I settled on for video-based transfer. If we want to be more aggressive and use half the error correction:

4-color (standard): 8400 bytes

8-color: 9800 bytes

monochrome: 5600 bytes

Re: Show HN: Cimbar – File transfer via color barcodes and the Android camera

#27
post #17
post #2

Hello all, You've seen QR codes, maybe Microsoft HCCB [0], maybe jabcode [1] – well, here's a prototype of something new for the pile. :) I saw txqr [2] a while back and was impressed, but also curious about how much throughput was possible with animated bar codes. I may have gotten carried away in my research into the question. cimbar is a single and multi-frame color barcode format using reed solomon (for now) and…

Amazing! Do you know any variants of these which squeeze out the maximum transfer rate over a high quality connection? Thinking about data transfer from a VPN/RDP remote desktop where I want to grab the screen output on the client with very little loss in quality (basically only limited by the chosen video encoder).

I don't think I do?

I'm not 100% sure I understand your example. Is it RDP server (remote) -> RDP client (local) -> cell phone?

Post reply on HN