https://codeberg.org/blast/blastqr

Hello! I’ve been working on blastQR for a couple of years now and I thought this community might find it useful. Feel free to try it and ask me anything!

blastQR is a fully open-source file transfer app and protocol that works completely offline. You can even use it in airplane mode. Data is transferred through sequences of QR codes displayed on a sender device and scanned by a receiver device’s camera. It uses RaptorQ codes so the receiver can recover the file from any sufficiently large subset of frames.

Note that although I have made use of AI as a coding assistant I do not consider this to be a vibe-coded app and I do plan to continue improving it and supporting it in the future.

See video of blastQR in action: https://github.com/user-attachments/assets/038a2567-70c8-47c8-b165-dea858d1aef3

Here are some of the key features:

  • Works fully offline: No internet, Wi-Fi, Bluetooth or servers. Your data stays offline.
  • One-to-many distribution: Share the same file with multiple devices simultaneously using a single blastQR broadcast.
  • Cross-platform: Android, iOS, macOS, Linux and Windows, plus a command-line tool that can send from a terminal, even over SSH.
  • Password encryption: You can optionally encrypt files with an auto-generated password or a custom one.
  • Media compression: The app supports lossy image compression and video transcoding for quicker transfers.
  • Multiple codes on screen: Shows multiple QR codes at once for higher speed. With 8 codes at 60 fps, transfers peak at around 1.4 MB/s.
  • Send multiple files in one go: They’re zipped into one transfer and unpacked into separate files on the receiver.
  • Sound feedback: The receiver plays a short tone when it has the whole file, and the sender stops automatically when it hears it.
  • Start scanning at any point: No need to catch every code, just keep the camera on the screen until it’s done. Blurry or missed codes don’t matter.
  • Regular QR scanner: You can also scan normal QR codes and save them.
  • Open protocol that other apps can implement
  • Built-in file manager

I’m trying to build a small community around the project so it can be improved and maintained and so it can reach more people in the future.

Downloads for all platforms can be found here: https://codeberg.org/blast/blastqr/releases/latest

  • rmuk@feddit.uk
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 hour ago

    Seems finicky. Keeping the camera and screen aligned during the transfer. Someone should research if it’s possible for two phones to send data acoustically. Then they don’t need to be kept perfectly aligned. Hell, they could even transfer data over a phone call or something.

  • phtheven@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    3 hours ago

    Does this mean an IP cam pointing to a monitor can compromise an air gap? I guess it always could, just at 1.4mbps now

  • LeftReddit2@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    4 hours ago

    Note that although I have made use of AI as a coding assistant I do not consider this to be a vibe-coded app

    1. What KIND of AI did you use? Was it a local model or a cloud sourced one?

    2. Where exactly and what exactly was the AI used on?

  • Fmstrat@lemmy.world
    link
    fedilink
    arrow-up
    16
    ·
    7 hours ago

    So a fun use case you may not have considered is back country GPX sharing. A plugin for Osmand (a very popular FOSS mapping app for back country use) would be neat. Sharing when airplane mode between devices is always needed.

    • blast@lemmy.dbzer0.comOP
      link
      fedilink
      arrow-up
      15
      ·
      edit-2
      6 hours ago

      That is a fenomenal idea! I hadn’t thought about it and these are the exact kind of situations it could solve well. I’ll definitely add it to the roadmap. Thank you

  • LiamBox@lemmy.ml
    link
    fedilink
    English
    arrow-up
    3
    ·
    6 hours ago

    Reminds of removedat, odd but apparently used in india because their goverment is lowkey evil again?

  • Domi@lemmy.secnd.me
    link
    fedilink
    arrow-up
    15
    ·
    10 hours ago

    Is this the future version of holding two phones together to transmit files via infrared?

  • neon_nova@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    7
    ·
    8 hours ago

    I started working on something like this years ago, but I didn’t have the coding skills to pull it off. This is really awesome.

      • BradleyUffner@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        ·
        edit-2
        2 hours ago

        Yeah, we get it, he used AI. You anti-AI absolutists aren’t actually changing anyone’s minds with this behavior, and actually seem to be annoying a lot of people in to the opposite direction.

      • dx1@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        4 hours ago

        It’s not that hard. Loop the QR, index the frames without the QR payload, do it ~10fps so you account for camera error, then when all frames/packets are completed, you’re good. There’s a ton of QR scanning libraries out there already.

  • trailee@sh.itjust.works
    link
    fedilink
    arrow-up
    4
    ·
    7 hours ago

    I don’t see a lot of use cases where blastQR beats LocalSend. The ones I do see are mostly about surreptitious data exfiltration against the will of device and/or data owners, and those are still complicated by the need to install your client on the sending side.

    • Zaktor@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      9
      ·
      5 hours ago

      If you’re in an environment where turning on your cell radios could compromise you then you’d like something that operates through something other than radio. Two people sharing data at a protest for example.

      • trailee@sh.itjust.works
        link
        fedilink
        arrow-up
        2
        ·
        3 hours ago

        LocalSend uses wifi rather than cell but you’re right that a protest could be a good place not to turn on any radios. It’s also a good place not to bring a phone at all, even if you’ve thought in advance to install a visual data transfer program like this. But you have a good point.

        • Zaktor@sopuli.xyz
          link
          fedilink
          English
          arrow-up
          2
          ·
          2 hours ago

          There’s a wide range of threat levels someone could be managing at a protest. Lots of people don’t feel particularly at risk from being grabbed and having their phone cracked, but still don’t want to be added into a database of people opposed to a regime because an automated mass surveillance system sniffed their radio signature. If you’re not expecting a personal assault phones can be useful for documenting police, promoting the event afterward, and accessing emergency services.

          I don’t think the “don’t bring a phone to a protest” advice is good unless you think it’s likely you could be in a position to lose control of it. The tradeoffs for that level of safety don’t make it worth doing for random citizen protesters. I do think concealing your face and turning off your radios is a good idea, because those are very realistic threat vectors for a generic citizen protester. Of course you could have the best of both worlds by getting a burner phone, but I don’t think many people are that prepared.

      • trailee@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        3 hours ago

        Sure, that’s covered by my commentary about data exfiltration against the wishes of data or device owners, and about the difficulty of installing the client on the airgapped device.

        I believe there are a few legitimate use cases that don’t have a faster/better alternative, but they’re very niche.

    • asap@lemmy.world
      link
      fedilink
      English
      arrow-up
      23
      ·
      edit-2
      5 hours ago

      You’re a cunt. It’s clearly not slop based on OP’s responses in this post. You’re just making the life of an open source developer harder.

  • captcha@lemmy.frozeninferno.xyz
    link
    fedilink
    English
    arrow-up
    4
    ·
    8 hours ago

    A couple of months ago I searched for a tool like this, there are a few but all with some flaws: the most polished one did not cycle the codes, the most usable one failed to initiate file download from web UI they had. Have you researched existing implementations?

    Also, maybe an app is better for stability, but have you thought about having a web UI, too, so that one can use it to receive or send the file (the page itself would be pretty lightweight, considering it doesn’t send or receive the data itself)? Such a UI could also be served from localhost

    • blast@lemmy.dbzer0.comOP
      link
      fedilink
      arrow-up
      7
      ·
      6 hours ago

      Yes, over the years I’ve tried many solutions. The latest popular one being Decimen and others mentioned in the readme.

      Since it seems you are interested in the field I’d be very happy if you tried it and told me how it compares to the rest. blastQR is still a work in progress so any feedback would be very helpful!

      A web UI is also possible. I’m not working on it right now but it’s something the project should support in the future.

  • carrylex@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    8 hours ago

    Hmm I’m not sure about the usecase. The same problem has been around for nearly 2 decades and the only other information exchange method that screens are used for (except human readable stuff) are normal QR codes.

    Nothing else sticked around.

    If you want to sync larger amount of files reguarily you usually take something like WebDAV, Syncthing, Cloud Storage…

    If you want to just drop files once then there is USB or wireless transmission like NFC or Bluetooth.

    Or you just scan some QR code that relays you to a download site.

    Your app needs to be present on both devices and that’s a big requirement because it is not out of the box there - especially in air gapped environments.

    It might fit a niche but that niche will be extremely small.

    • hirihit640@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 hours ago

      you could install it onto the airgapped machine befpre taking it offline, or transfer the apk to the airgapped machine via usb, and then remove the usb port.

      USB and Wifi have had vulnerabilities, so airgapped environments often disable them. This of course shifts the attack surface to the app, but it might be a smaller attack surface.

  • taco_shale032@lemmy.ml
    link
    fedilink
    arrow-up
    33
    ·
    14 hours ago

    Note that although I have made use of AI as a coding assistant this is not a vibe-coded app

    Can you elaborate more on how AI was used?

    • blast@lemmy.dbzer0.comOP
      link
      fedilink
      arrow-up
      64
      ·
      14 hours ago

      For context, I’m a software developer with around 15 years of experience. Most of it writing Android and iOS apps in Java, Kotlin, Swift and lately Dart (Flutter) + Rust which is what this project is written in.

      Although I did start the project from scratch I have lately been using Claude Code as a coding assistant. I write code myself but I also let it write or refactor parts of it. The CLI tool is the part that Claude has mostly written from scratch because it’s not something I had experience in writing before. That being said I also review all the code that Claude writes.

      Thanks for asking! there’s also some disclosure about this in the readme file

      • taco_shale032@lemmy.ml
        link
        fedilink
        arrow-up
        20
        ·
        14 hours ago

        The CLI tool is the part that Claude has mostly written from scratch because it’s not something I had experience in writing before.

        This seems like the perfect opportunity to learn something new in my opinion, CLIs aren’t difficult to make. And you may want to consider moving to GitHub because of Codeberg’s ToS.

        • blast@lemmy.dbzer0.comOP
          link
          fedilink
          arrow-up
          25
          ·
          edit-2
          13 hours ago

          I totally agree and I’m very open to welcome anyone who wants to rewrite that part or I might go for it myself in the future. The reason I went for it is that I really wanted to be able to use the CLI tool right away and the AI produced a good result so I left it in the project for now.

          About Codeberg I did read their blog post and I didn’t think my project falls into any of the cases they mention:

          spoiler

          Projects that are created by LLM “agents” in autonomous ways Projects written and maintained with heavy use of LLMs Projects where the amount of resources (e.g. storage, CI/CD) is significantly larger than what the involved amount of people could have created by hand Projects heavily tied to the LLM ecosystem, e.g. LLM-written tools to ease LLM usage Users sending LLM contributions in violation of project’s custom policies

          If they ever consider it infringing their ToS I could move it to GitHub where there’s already a mirror of the repo.