Show HN: I made a tool to generate photomosaics with your pictures

pictiler.com

107 points by jakemanger 9 hours ago

Hi HN!

I wanted to make some photomosaics for an anniversary gift, but I ended up building this tool and turning it into a website that anyone can use.

For those who don’t know, a photomosaic is an image made up of many smaller tile images, arranged in a way that forms a larger, recognisable picture.

The best part? Everything runs directly in your browser. No files are uploaded, and there’s no sign-up required.

ColinEberhardt 7 hours ago

Very cool. I actually created a shareware application that rendered Photomosaics 25 years ago! Here is a link to "Mosaic Magic" from the Wayback Engine:

https://web.archive.org/web/20010405175706/http://fishsoft.c...

I managed to make a decent amount of spending money from that application during my University years.

One interesting lesson I learnt was about enterprise pricing. I think I charged ~$20 for Mosaic Magic, however, I started to get emails from organisations asking about pricing for commercial use. Nothing on my pricing page suggested that commercial use was prohibited, I guess they just thought $20 was rather cheap. From there-on, I charged $150 for "commercial use". Basically, anyone who thought they should be paying more, did!

Finally, Robert Silvers filed a patent and trademark for Photomosaics in ~2000, and was, for a while aggressively pursuing organisations that he felt was infringing. I assume this has all died down now.

  • bryanthompson 5 hours ago

    I used Mosaic Magic back in my high school journalism class to design a yearbook cover 20+ years ago! Turned out great - it won some kind of award iirc.

  • jakemanger 7 hours ago

    Thanks for sharing! Both the link and the story. As a University student and someone that has here also made a photomosaic app, that is super relatable.

    That's good to know about the pricing. It's free for now. Honestly didn't expect this level of interest (there's 307 people on the site right now according to analytics).

    With that interest, I may add some plans - potentially for the commercial use in particular

  • teiferer 4 hours ago

    Kudos to OP for not immediately thinking about how he best could monetize this.

    I'm glad FOSS made Shareware die out, but now web apps requiring me to create an account first have taken its place. Kudos to OP for resisting that too.

  • verelo 6 hours ago

    I just read up on Robert Silvers based on this. He had an interesting career. Really unfortunate he was a patent troll...

bazzargh 8 hours ago

While this is nice enough, it bothers me that these don't look much like "art". If you look at real roman mosaics, they do not place points in a grid - they use a technique called "opus vermiculatum" https://en.wikipedia.org/wiki/Opus_vermiculatum ... snaking the tiles around so that there is a flow to it; the overall effect is much better.

I think that'd be possible to automate too. I was doing something related over here: https://hachyderm.io/@bazzargh/112767548339559102 - in that I was trying to generate sketch-like renderings from photographs. What I did was to pick random points, look at the brightness gradient (taken from the Sobel operator, there are other ways to do this), move up the gradient a bit and sketch some parallel lines (and then various experiments with hatching for shading the flatter areas)

In a similar way you could start with a grid of tiles _with some separation_, and allow them to move and align better with the gradient of the underlying picture, and not lie _on_ edges, if possible. If they overlap, allow the tessera to be cut, and only then choose images to colour-match the average on the tile, leaving some "grout" in the image (I'd probably speckle that a bit so it didn't look too uniform). Then the result might look more like real mosaics.

I might give this a go...

  • wvlia5 8 hours ago

    It could be better sometimes for tiles to lie over edges. For example, there might be an edge dividing red and green areas, and one of your tiles is mostly half red and half green.

  • Theodores 3 hours ago

    Whilst you are at it...

    https://github.com/openseadragon/openseadragon

    A photo mosaic demands to have photos that are high resolution. You don't want to zoom in to find blurry jpegs, it just isn't right!

    I have had great fun with OpenSeadragon in the past and now there is the VIPS image processing library for writing out a massive set of image tiles.

    Hence it is possible to work with thumbnails and then render out the thing with OpenSeadragon and VIPS.

    OpenSeadragon was amazing when it was a Microsoft demo a few decades ago, but time has moved on. I wonder what can be done with tilesets in HTML5 with picture tags or in SVG to present a infinitely zoomable montage.

    I like your suggestion and the options for rotating and clipping images with SVG methods. I always confuse mask and clip, but, in SVG, much could be done.

    For me, the starting point would be to do an SVG with thousands of images in it, to just watch my computer crash as I step up the resolution. Really I want to recreate OpenSeadragon in SVG...

  • wang_li 5 hours ago

    There is a naive approach to making this kind of thing that reduces the component images to such a small size (2-3 pixels in large image) that turns this into more of a dithering exercise than looking for artifacts in each component image to match up lines. It's still a nice effect, but it's quite different when the component images are > 10% the size of the final image, instead of < 1% the size.

btbuildem 7 hours ago

A friend of mine made this in the late 90s -- we were in highschool at the time. Of course he used it to make renditions of scantily-clad ladies out of thousands of pictures of, you guessed it.

  • jakemanger 7 hours ago

    haha there's a few similar stories coming on here now. Great to hear.

    Hey, if you want to do that with this software, I can't see any files you upload (it's all local processing in your web browser), so go for it.

mentalgear 7 hours ago

Nice! Almost 20 years ago I paid good money to get this done.

I see that your method also uses a lot of tinting and even overlaying the original image.

Would be great though if this was adjustable via sliders!

Thank You for making this available local-/privacy-first & in-browser!

  • jakemanger 6 hours ago

    No worries! This is adjustable via sliders (in the bottom left area)

    Thanks for the kind words!

pimlottc 8 hours ago

Small suggestion: in the "Try These Examples" section, the call-to-action is click a button that is not initially visible. Users have to hover over the image to see the "recreate" button, which is not obvious. You should add a dedicate "Recreate" button below each example so it's immediately clear what to do.

Also it would a good idea to have a detail view of a sample image at 100% to show that the images are made up of other photos. Maybe even an interactive zoom window. At monitor resolutions, the full images mostly just look like smudgy photos, and not all users may be familiar with photomosiacs. Even the "view" option on the sample mosiacs does not let you see the detail of the individual tiles very well.

  • jakemanger 8 hours ago

    Thank you for the feedback! I actually just did a quick change to add that recreate button CTA like you said. Much better and easy to understand.

    I'll work on that detailed sample image view too. That's a great idea - job for tomorrow.

the_arun 8 hours ago

If we combine this with canvas printing, we have an art business.

  • codingdave 6 hours ago

    There are a plethora of print shops with API access to set this kind of thing up. The problem these days is pricing, specifically shipping. While people may be willing to pay for the work itself, shipping canvasses or framed prints gets expensive fast. This is why so many artists and photographers who sell their photos just sell posters... they are cheap to ship and don't give people sticker shock.

  • jakemanger 7 hours ago

    I suppose you could make an art business. Or at least do what a few camera stores do

darod 4 hours ago

why does this require uploading my photos? can't something like this run native?

  • waltbosz 4 hours ago

    The website says it runs locally. In browser JavaScript , you can import a file from local file system to JavaScript's local scope without sending it to a server. I'm guessing that's how this app works.

    If you want to know for sure, open your browser's dev tools, switch to the network tab, import a file and watch to see if a network request is made.

    • jakemanger 3 hours ago

      Yes, that's exactly right. All your images are processed locally and don't leave your device. They are all processed in the web browser with javascript and your dev tools like you say should show that.

      • wvlia5 2 hours ago

        I think he means "why does it have to upload to the browser, can't it just read from the filesystem?" it should work, but browsers make it more complicated.

jnovacho 8 hours ago

How exactly does this work? The example I chose is a mosaic of photos, over which is overlayed the original image with alpha set to 50%.

So it does not use the submitted photos as tiles, right?

  • jakemanger 7 hours ago

    If you adjust the overlay alpha to 0% you'll see it does use the submitted photos as tiles.

    Click the "Create Mosaic" button and you should see it arrange the tiles live in the best possible way to reproduce the image. The overlay is a common technique people use to make the main image more visible. It's a personal preference thing.

    Generally, the more diverse or colours you select for your tile images, the more clear and "good" the main mosaic image will be

aosaigh 6 hours ago

Excited to check this out. Did you write your own library for this or use something like OpenSeaDragon behind-the-scenes?

  • jakemanger 6 hours ago

    This is completely my own library running in the cloud. Started as a little experiment for myself and now it's blown out into this

    • aosaigh 5 hours ago

      I would potentially pay a licensing fee for the library if it could be used in other apps (and commercial settings).

wvlia5 8 hours ago

Will you implement a recursive mosaic feature (some tiles bigger than others)?

  • jakemanger 7 hours ago

    I could. That sounds like a great idea! Was thinking about uneven sized tiles. I just tried to make the basic photo mosaic with even sized tiles for now

cactusplant7374 9 hours ago

How hard is it to get something like this to work with HEIC?

  • jakemanger 8 hours ago

    Are you on Mac? If you right click a file/s > Quick Actions > Convert Image then you should be able to convert to JPEG or PNG.

    Funnily enough I also made a universal file converter app which could do it for you on other platforms. Its at https://howtoconvert.co