Help I accidentally a wigglegram

Hacker News Top Tools

Summary

The author describes accidentally creating wigglegrams (stereoscopic GIFs) by taking multiple similar photos, and wrote a script using perceptual hashing to automatically detect and stitch them together from their iCloud photo library.

No content available
Original Article
View Cached Full Text

Cached at: 06/22/26, 04:30 AM

# help i accidentally a wigglegram Source: [https://lmao.center/blog/wiggle-accidents/](https://lmao.center/blog/wiggle-accidents/) Do you know what a[wigglegram](https://en.wikipedia.org/wiki/Wiggle_stereoscopy)is? [![c.](https://lmao.center/blog/wiggle-accidents/i/wg_sc2-d500.gif)](https://lmao.center/blog/wiggle-accidents/wg_sc2.gif)↳ c\. "suavecorn" on redditIt is a kind of stereo image you make by looping frames together, like as a GIF\. [![c.](https://lmao.center/blog/wiggle-accidents/i/wg_hs1-d500.gif)](https://lmao.center/blog/wiggle-accidents/wg_hs1.gif)↳ c\. "aka\_hochstapler" on redditThe effect is quite convincing\. [![c.](https://lmao.center/blog/wiggle-accidents/i/wg_sc1-d500.gif)](https://lmao.center/blog/wiggle-accidents/wg_sc1.gif)↳ c\. "suavecorn" on redditI am something of an indecisive photographer and when I like an angle I will take a lot of frames, from slightly different angles etc\., looking for "the shot"\. And since I am also a bit of a hoarder I never clear out my camera roll\. "Same shot from different angles"? You know what that sounds a bit familiar\. [![scrollin'](https://lmao.center/blog/wiggle-accidents/i/accident_raw-d500.gif)](https://lmao.center/blog/wiggle-accidents/accident_raw.gif)↳ scrollin'Sure enough my phone is full of wigglegrams that I took by accident\. Years' worth, waiting for me to sit down and stitch them together\. Or, perhaps, for*something*to stitch them together\. It occurred to me last weekend that I can use[perceptual hashing](https://en.wikipedia.org/wiki/Perceptual_hashing)\- what TinEye \(et al\.\) uses for reverse image search \- to try and find runs of similar images and pull them out from my library automatically\. So I wrote a little script to hash all my pictures: [![slowly, slowly](https://lmao.center/blog/wiggle-accidents/i/hashes-d500.gif)](https://lmao.center/blog/wiggle-accidents/hashes.png)↳ slowly, slowlyHashing is quick but downloading photos from iCloud is not\. The result is a hash that \- unlike a cryptographic function like sha1 \- will share more bits with hashes of similar\-looking images than with dissimilar ones\. We can use that to calculate the hamming distance between pairs of images and find a threshold: [![ten seems like a good boundary](https://lmao.center/blog/wiggle-accidents/i/hamming-d500.gif)](https://lmao.center/blog/wiggle-accidents/hamming.png)↳ ten seems like a good boundaryAnd extract pairs: [![plausible...](https://lmao.center/blog/wiggle-accidents/i/runs-d500.gif)](https://lmao.center/blog/wiggle-accidents/runs.png)↳ plausible\.\.\.And hundreds of wigglegrams spew forth\. [![space mountain?](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-06-23_16-40-51-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-06-23_16-40-51.gif)↳ space mountain?[![block island](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-07-27_18-38-37-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-07-27_18-38-37.gif)↳ block island[![deland](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-05-04_13-21-17-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-05-04_13-21-17.gif)↳ deland[![probably also disney?](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-06-24_18-32-47-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-06-24_18-32-47.gif)↳ probably also disney?A few of them I am guilty of taking intentionally\. But most are true accidents\. As such many of them come out as less "stereoscopic" and more "kinescopic" \- like little unintentional movies\. [![notting hill](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-06-14_19-35-14-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-06-14_19-35-14.gif)↳ notting hill[![perugia](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-06-18_18-13-08-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-06-18_18-13-08.gif)↳ perugiaAnimals are a natural fit for the concept, unpredictable as they are: [![cat](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-02-08_13-13-17-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-02-08_13-13-17.gif)↳ cat[![another cat](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-08-07_18-20-31-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-08-07_18-20-31.gif)↳ another cat[![dog](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-07-06_17-52-46-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-07-06_17-52-46.gif)↳ dog[![pigeon](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-06-12_08-48-45-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-06-12_08-48-45.gif)↳ pigeonDesign\-work also\. \(I am always indecisive\.\) [![ipad sidecar I should write on](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-12-11_15-23-48-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-12-11_15-23-48.gif)↳ ipad sidecar I should write on[![baby book](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-06-20_02-41-49-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-06-20_02-41-49.gif)↳ baby book[![same but doing a rad flip](https://lmao.center/blog/wiggle-accidents/i/wiggle_2024-06-07_04-06-21-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2024-06-07_04-06-21.gif)↳ same but doing a rad flip[![resistor bridge](https://lmao.center/blog/wiggle-accidents/i/wiggle_2025-11-23_03-14-34-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2025-11-23_03-14-34.gif)↳ resistor bridge[![leg in pieces](https://lmao.center/blog/wiggle-accidents/i/wiggle_2026-03-08_15-37-55-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2026-03-08_15-37-55.gif)↳ leg in piecesAnd sculpture: [![olivetti](https://lmao.center/blog/wiggle-accidents/i/wiggle_2026-02-03_15-41-19-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2026-02-03_15-41-19.gif)↳ olivetti[![charlotte?](https://lmao.center/blog/wiggle-accidents/i/wiggle_2023-01-08_14-26-44-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2023-01-08_14-26-44.gif)↳ charlotte?[![frog with a joint](https://lmao.center/blog/wiggle-accidents/i/wiggle_2023-01-05_23-22-27-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2023-01-05_23-22-27.gif)↳ frog with a jointWhat fun\. I have the script up on[Github](https://github.com/JCLemme/wiggle-wiggle)if you want to play with it \- it'll work on your iCloud photos library if you're on a Mac, or you can point it at a directory of pictures otherwise\. Cheers~ [![and happy birthday ig](https://lmao.center/blog/wiggle-accidents/i/wiggle_2026-01-24_10-34-29-d500.gif)](https://lmao.center/blog/wiggle-accidents/wiggle_2026-01-24_10-34-29.gif)↳ and happy birthday ig --- [home](https://lmao.center/)~ posted june 04 2026

Similar Articles

Google Pics is a new app that tries to fix AI image editing

The Verge

Google launches Pics, a new AI image generation app for Workspace that allows users to click on elements and leave notes to modify images, powered by Gemini and Nano Banana 2 models. It aims to simplify iterative AI image editing.