Show HN: JPEG.rocks – Privacy-aware JPEG optimizer built with WebAssembly

61 points by neslinesli93 4 years ago | 25 comments
  • fireattack 4 years ago
    IMHO these JPEG optimizers need to explain what optimization they actually do.

    At the very least, it should mention if the optimization is lossless (by dropping metadata, optimizing Huffman table/progressive scan parameters etc.) or lossy: because they have very different use cases (sometimes you need the image to be pixel-wise identical).

    Even better, if lossy, "how lossy" it is.

    I'm aware it's using mozjpeg [1] which is pretty good (guetzli [2] is another good one for the interested); still, it comes with many settings and routines (both lossless and lossy) that can be configured.

    [1] https://github.com/mozilla/mozjpeg

    [2] https://github.com/google/guetzli

    • neslinesli93 4 years ago
      That's a very good point, thank you.

      I could add some explanation on github and offer two kinds of optimization (lossless and lossy) and add a quality slider for the lossy one

      • purplecats 4 years ago
        is there a standard of proof these sites can provide about not sending data back to the servers? besides checking the network data, which it could delay to another visit or obfuscate easily
        • neslinesli93 4 years ago
          I don't know, sorry.

          I mean, you can be completely sure that the website works offline by unplugging the cable/turning off your wifi connection after it's completely loaded. But that's just a functional test, not something you can expect users to do during a normal browsing session

          • londons_explore 4 years ago
            This is something the web platform is missing.

            I'd like some API for a page to load, then become "offline". Then I can use it, and have the browser block any attempts to send/receive data from anywhere except local storage.

            • franga2000 4 years ago
              How exactly could it obfuscate it? You can see every request in its entirety and if you see a request that you can't read, that's already enough reason to not use it. As for delaying it, it would have to store it somewhere like localStorage, which is just as easily inspectable.

              If you're worried about that, loading it in a private window and switching to offline mode, then closing it after you're done makes any exfiltration impossible.

              • freedomben 4 years ago
                If you're this concerned that the app might delay sending until later, I would probably suggest you just use ImageMagick or GraphicsMagick locally instead. I use it all the time for processing photos. If you want to clean exif data look at exiftool. It's in most repos.
            • usr1106 4 years ago
              > At the very least, it should mention if the optimization is lossless [...] or lossy

              True, the UI is optimized a bit too much :)

              By looking very carefully at some test image I see that it is not lossless, there are more compression artifacts. Well, lossless would have been a miracle, it reduced the size of my photo from nearly 600 KB to just a bit over 180 KB.

              • treszkai 4 years ago
                Absolutely. Until now I had no idea what a JPEG optimizer is, and even the About page of jpeg.rocks said exactly nothing about what it does.
              • edualm 4 years ago
                Ahhhh the times we live in, when it specifically needs to be said that something like a image optimizer is privacy-aware. :(

                Anyway - looks nice and something I'll use from time to time, thanks!

                • usrusr 4 years ago
                  It's a very unique property. Not among image optimizers, but among tools that can be accessed with any web browser simply by typing a domain name in the address bar. Most of those tools are merely frontends for a server doing the work and as such something that wouldn't even be allowed in many lines of work.

                  I see what irks you, calling it "privacy-aware" and not something more technical like "installation-free client side", but it can be a pretty cool approach to many rarely-encountered problems.

                  I'm not much into "JPEG optimization" (whatever that is, I just bite the bullet and wait those ten seconds GIMP takes for startup on my otherwise comically fast Ryzen 9 Windows box whenever I feel like tweaking JPEG compression), but https://hexed.it/ has been a friend for many years: i rarely need a hex editor, but even if I happen to run into a "guess it's time for a hex editor!"-situation twice on the same OS installation (unlikely), the last time would be so long ago that I would have forgotten what I installed. hexed.it is a godsend. Jpeg optimziation is perhaps not quite the same level of problem/solution fit, but it doesn't have to be.

                  • rouxz 4 years ago
                    Not just that, it is a "webapp". When did ImageMagick became old?
                    • emteycz 4 years ago
                      When my grandma couldn't figure it out. I personally think there is space for both tools, though, it's not necessary to replace one with the other.
                      • kaushikt 4 years ago
                        Most designers will end up use this
                    • cliffyton 4 years ago
                      Looks nice! There’s more featureful tools like Squoosh. Built with the same tech, has side by side pre-post results, a CLI tool,, also done in the browser, OS & maintained by Google’s engineering team - https://squoosh.app/ - https://github.com/GoogleChromeLabs/squoosh
                      • bertman 4 years ago
                        This looks nice, bookmarked! Maybe expose some simple quality setting to the user? As far as I can tell after glancing at the code, the only optimization that's done is re-encoding the image with quality set to 75, so a quality slider would be nice imho.
                        • neslinesli93 4 years ago
                          Thank you :)

                          My initial plan was to replicate the functionality of tools like tinyjpg, thus just offering users a simple interface with good defaults. But I already had in mind the lossy/lossless re-encoding functionality, as well as the quality slider, which I plan to add sometimes in the future

                        • bsenftner 4 years ago
                          Okay, privacy is achieved by never leaving one's browser. But how secure is that? One's browser is the home of an unknown number of trackers, as well as heavy interest and efforts in breaching tab boundaries. The browser has turned into something we need to completely start over, without Google or any of the FAANG crowds' participation.
                          • MaxBarraclough 4 years ago
                            > The browser has turned into something we need to completely start over, without Google or any of the FAANG crowds' participation.

                            That's very roughly what Gemini is going for. Related reading:

                            * https://news.ycombinator.com/item?id=23161922

                            * https://news.ycombinator.com/item?id=23597834

                            • usrusr 4 years ago
                              How many far more interesting (for an attacker, any attacker!) things we do in a browser are subject to those exact same attack surfaces? That's a bit like saying that a school library has weak security because the checkout desk wouldn't stand a chance against a focused attack of the Red Army.
                            • p5v 4 years ago
                              This looks promising. I would be interested to learn more about the experience you have had while building this service.

                              Yesterday, I released https://goart.netlify.app It's an experiment at using WASM-compiled Go code to create complex generative art drawings in the browser. Sounds cool, but I have had quite a few unexpected issues while building it. Especially, the part about having to use Web Workers to do the communication to and from the WASM instance.