{"id":3712,"date":"2025-05-25T21:57:00","date_gmt":"2025-05-26T01:57:00","guid":{"rendered":"https:\/\/patorjk.com\/blog\/?p=3712"},"modified":"2026-01-11T21:38:32","modified_gmt":"2026-01-12T01:38:32","slug":"and-now-25-years-later-version-3-0","status":"publish","type":"post","link":"https:\/\/patorjk.com\/blog\/2025\/05\/25\/and-now-25-years-later-version-3-0\/","title":{"rendered":"And now, 25 years later, version 3.0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">25 years ago this month I released version 2.0 of my Mosaicer program. Today I release <a href=\"https:\/\/github.com\/patorjk\/mosaicer\" data-type=\"link\" data-id=\"https:\/\/github.com\/patorjk\/mosaicer\">version 3.0<\/a>. I hadn&#8217;t anticipated waiting 25 years, and I was originally going to do a follow-up much sooner, but when I was originally thinking about a version 3.0 the holder of a patent on photo mosaics was <a href=\"https:\/\/web.archive.org\/web\/20110718125636\/https:\/\/www.kirchgessner.net\/photo-mosaic.html\">issuing cease and desist<\/a> requests to developers working in the space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I never got a cease and desist for Mosaicer 2.0, but I didn&#8217;t want to bring any extra attention to myself in the off chance I would come onto the patent holder&#8217;s radar. At the time I remember reading through the patent and finding it overly broad, and looking <a href=\"https:\/\/patents.google.com\/patent\/US6137498A\/en\">at it again today<\/a>, I feel the same way. I don&#8217;t see any way to create photo mosaic software without violating Claim 1 in this patent. And the guy who filed the patent wasn&#8217;t even the <a href=\"https:\/\/digitalartform.com\/2017\/01\/05\/history-of-photo-mosaics\/\">first person<\/a> to make a photo mosaic. The whole thing just seems absurd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But the past is the past. The patent expired in 2017. I could have released a version 3.0 then, but I had moved on by that time and was busy doing other things.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I had always wanted to revisit the app though, and a few weeks ago I remembered an idea I had for a photo mosaic app that used an <a href=\"https:\/\/eprints.cs.univie.ac.at\/5035\/1\/2002_-_full_search_content.pdf\">FFT block matching algorithm<\/a>. I had read about it in grad school and always thought it would be a good fit for a photo mosaic program. So I got to work and wrote a new photo mosaic app in Java &#8211; Mosaicer 3.0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, when I got to the part on writing a tile matcher that used the FFT algorithm I came to the sad realization that it was a poor fit. It did way more calculations than necessary and was more expensive than the standard sum-of-squared-differences calculation. Coming to this realization was a huge bummer, though since I was 90% done at this point, I decided to carry on and just finish up the app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mosaicer 3.0 isn&#8217;t really anything special &#8211; with the patent having been expired for 8 years now there are a lot of free and commercial options out there. However, one more free photo mosaic app can&#8217;t hurt, and one thing I thought I could provide that seemed to be missing was some good info on how to get images. That&#8217;s actually the hardest part about making a photo mosaic. So I put together a short list of <a href=\"https:\/\/github.com\/patorjk\/mosaicer?tab=readme-ov-file#where-to-get-images\">resources and datasets<\/a> that one can use when creating mosaics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The albums dataset is especially cool. You can make album covers out of album covers. I made a <a href=\"https:\/\/www.flickr.com\/photos\/40423570@N07\/albums\/72177720326356535\/\">Flickr Gallery<\/a> of some of my favorites. Below you can see one of Metallica&#8217;s Master of Puppets.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-1024x1024.jpg\" alt=\"\" class=\"wp-image-3715\" srcset=\"https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-1024x1024.jpg 1024w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-300x300.jpg 300w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-150x150.jpg 150w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-768x768.jpg 768w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-1536x1536.jpg 1536w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k-810x810.jpg 810w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543496420_a7962c53ae_k.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another idea I had was making YouTube thumbnails out of YouTube thumbnails. The <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\">yt-dlp<\/a> app allows one to easily get thumbnails, and I was able to make some VSauce thumbnails entirely out of other VSauce thumbnails (example below). The only problem with this idea is that photo mosaics require a lot of images, and most channels don&#8217;t have enough videos. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.flickr.com\/photos\/40423570@N07\/54543495245\/in\/album-72177720326356525\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-1024x567.jpg\" alt=\"\" class=\"wp-image-3714\" srcset=\"https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-1024x567.jpg 1024w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-300x166.jpg 300w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-768x425.jpg 768w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-1536x850.jpg 1536w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-672x372.jpg 672w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k-1038x576.jpg 1038w, https:\/\/patorjk.com\/blog\/wp-content\/uploads\/2025\/05\/54543495245_61c3f4a261_k.jpg 2047w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Photo Mosaic of VSauce&#8217;s &#8220;Mistakes&#8221; thumbnail, made up of other VSauce thumbnails<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m not sure if I&#8217;ll continue development on this app, but it&#8217;s been kind of fun to play around with.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lastly, I made a short video on photo mosaics. If you&#8217;re interested you can watch it below.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"I Made an App That Creates Photo Mosaics\" width=\"474\" height=\"267\" src=\"https:\/\/www.youtube.com\/embed\/Fk6DJC0C6jw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>25 years ago this month I released version 2.0 of my Mosaicer program. Today I release version 3.0. I hadn&#8217;t anticipated waiting 25 years, and I was originally going to do a follow-up much sooner, but when I was originally thinking about a version 3.0 the holder of a patent on photo mosaics was issuing &hellip; <a href=\"https:\/\/patorjk.com\/blog\/2025\/05\/25\/and-now-25-years-later-version-3-0\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">And now, 25 years later, version 3.0<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,56],"tags":[],"class_list":["post-3712","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","category-youtube"],"_links":{"self":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/3712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/comments?post=3712"}],"version-history":[{"count":8,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/3712\/revisions"}],"predecessor-version":[{"id":3783,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/3712\/revisions\/3783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/media\/3716"}],"wp:attachment":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/media?parent=3712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/categories?post=3712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/tags?post=3712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}