https://jk-keller.com/o__o/rotational_growth/ [?] Turning into Turing, an Informal Inquiry, 2022 Seriously... 2K or 4K it. Rainbow gradient rotated by 1deg for 90'000 iterations (250 revolutions). TL;DR: If you repeatedly rotate an image (100's or 1000's of times) in Photoshop(r) using one of the bicubic interpolation methods, it will produce a Turing pattern. Rotational Growth in Photoshop(r) I stumbled into this one while working on a different project where I scripted the rotation of an image in preparation for an animation. When I looked at the last frame though, I noticed the image looked washed out and with odd patterning. Some sort of generational loss was happening to the image and I remembered previous exmaples of exploiting and celebrating the degradation process, like Alvin Lucier's I Am Sitting in a Room, saving a jpeg hundreds of times, and the like; I knew I needed to push the rotational distorion as far as I could. black white checker none The Inquiry: Let's use this image of a rainbow gradient: --------------------------------------------------- and rotate it 72 times in 5 degree increments so we've done a full rotation and should be back to the original: [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-] As you should be able to see in the animation, the gradient no longer looks the same after 360deg. If we then take only the frames from multiples of 360deg, the image begins to grow and show the characteristics of a Turing pattern: [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-45rev_anim] Interpolation Algorithm Differences Depending on the interpolation method you use, a different result occurs. Interpolation 5deg x 72 iterations = 1 revolution (360deg) 5deg x 3240 iterations = 45 revolutions (16200deg) Algorithm Bicubic [jk_keller--hsb_rainbow-361x10--5deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--5deg-bicubic-45rev-trimmed] Bicubic [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-45rev-trimmed] Sharper Bicubic [jk_keller--hsb_rainbow-361x10--5deg-bicubicsmoother] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsmoother-4] Smoother Bilinear [jk_keller--hsb_rainbow-361x10--5deg-bilinear-1rev] [jk_keller--hsb_rainbow-361x10--5deg-bilinear-45rev] Nearest [jk_keller--hsb_rainbow-361x10--5deg-nearestneighbor] [jk_keller--hsb_rainbow-361x10--5deg-nearestneighbor-45rev] Neighbor Interpolation Algorithms Not Included in Photoshop(r) Adobe Photoshop(r) only has the above 5 interpolation methods to choose from (we'll mostly ignore Bilinear and Nearest Neighbor from here on as they don't produce Turing patterns). The utility software suite ImageMagick contains a whole host of other interpolation (11) & filtering (31) algorithms that can be used when rotating images. Too many to fit on this page, so see 5 degrees of ImageMagick rotation: [jk_keller--imagemagick_page] What about the pixel rotation popularized in Matt Parker's "Rotation without rotating" video? Well, even the three-shear rotation that Matt use degrades the image over repeated rotations, though it does keep the same number and color of pixels as the original. The key to the entropy process is that each image rotation uses the resulting image of the previous rotation's interpolation calculations, not repeatedly using the starting image. That means pixel placements are a moving target, and iterative degradation ensues similar to nearest neighbor. What about "my esoteric / favorite" method? Let's find out! Send them my way and add to the list... Interpolation 5deg x 72 iterations = 1 revolution (360deg) 5deg x 3240 iterations = 45 revolutions (16200deg) Algorithm Three-Shear [jk_keller--hsb_rainbow-361x10--5deg-three_shear-1re] [jk_keller--hsb_rainbow-361x10--5deg-three_shear-45rev] RotSprite ------------------------------------------------- ------------------------------------------------- all pixels got eaten after 575deg Degrees per Rotation Differences Let's have a look at how the patterns change based on the degree that you execute each rotation iteration. I've done all the integer degrees that evenly split 360o as well two small decimal degrees. Note that rotating by 90deg or 180deg have no effect as they are lossless transformations. Rotation Bicubic Bicubic Sharper Bicubic Smoother Info 0.25deg 1440 iterations [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] 1 revolution 360deg 0.25deg 4320 iterations [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] 3 revolutions 1440deg 0.5deg 720 iterations [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] 1 revolution 360deg 0.5deg 3600 iterations [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] [jk_keller--hsb_rainbow-361x10--0] 5 revolutions 1800deg 1deg 360 iterations [jk_keller--hsb_rainbow-361x10--1deg-bicubic-1rev-trim] [jk_keller--hsb_rainbow-361x10--1deg-bicubicsharper-1] [jk_keller--hsb_rainbow-361x10--1deg-bicubicsmoother-] 1 revolution 360deg 1deg 3240 iterations [jk_keller--hsb_rainbow-361x10--1deg-bicubic-9rev-trimmed] [jk_keller--hsb_rainbow-361x10--1deg-bicubicsharper-9rev-trimmed] [jk_keller--hsb_rainbow-361x10--1deg-bicubicsmoother-9r] 9 revolutions 3240deg 2deg 180 iterations [jk_keller--hsb_rainbow-361x10--2deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--2deg-bicubicsharper-1] [jk_keller--hsb_rainbow-361x10--2deg-bicubicsmoother] 1 revolution 360deg 2deg 3240 iterations [jk_keller--hsb_rainbow-361x10--2deg-bicubic-18rev-trim] [jk_keller--hsb_rainbow-361x10--2deg-bicubicsharper-18rev-tri] [jk_keller--hsb_rainbow-361x10--2deg-bicubicsmoother-] 18 revolutions 6480deg 3deg 120 iterations [jk_keller--hsb_rainbow-361x10--3deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--3deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--3deg-bicubicsmoother] 1 revolution 360deg 3deg 3240 iterations [jk_keller--hsb_rainbow-361x10--3deg-bicubic-27rev-trimme] [jk_keller--hsb_rainbow-361x10--3deg-bicubicsharper-27rev-trimmed] [jk_keller--hsb_rainbow-361x10--3deg-bicubicsmoother-2] 27 revolutions 9720deg 4deg 90 iterations [jk_keller--hsb_rainbow-361x10--4deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--4deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--4deg-bicubicsmoother] 1 revolution 360deg 4deg 3240 iterations [jk_keller--hsb_rainbow-361x10--4deg-bicubic-36rev-trimm] [jk_keller--hsb_rainbow-361x10--4deg-bicubicsharper-36rev-trimme] [jk_keller--hsb_rainbow-361x10--4deg-bicubicsmoother-3] 36 revolutions 12960deg 5deg 72 iterations [jk_keller--hsb_rainbow-361x10--5deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsmoother] 1 revolution 360deg 5deg 3240 iterations [jk_keller--hsb_rainbow-361x10--5deg-bicubic-45rev-trimmed] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-45rev-trimmed] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsmoother-4] 45 revolutions 16200deg 6deg 60 iterations [jk_keller--hsb_rainbow-361x10--6deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--6deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--6deg-bicubicsmoother] 1 revolution 360deg 6deg 3240 iterations [jk_keller--hsb_rainbow-361x10--6deg-bicubic-54rev-trimmed] [jk_keller--hsb_rainbow-361x10--6deg-bicubicsharper-54rev-trimmed] [jk_keller--hsb_rainbow-361x10--6deg-bicubicsmoother-5] 54 revolutions 19440deg 8deg 45 iterations [jk_keller--hsb_rainbow-361x10--8deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--8deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--8deg-bicubicsmoother] 1 revolution 360deg 8deg 3240 iterations [jk_keller--hsb_rainbow-361x10--8deg-bicubic-72rev-trimmed] [jk_keller--hsb_rainbow-361x10--8deg-bicubicsharper-72rev-trimmed] [jk_keller--hsb_rainbow-361x10--8deg-bicubicsmoother-] 72 revolutions 25920deg 9deg 40 iterations [jk_keller--hsb_rainbow-361x10--9deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--9deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--9deg-bicubicsmoother] 1 revolution 360deg 9deg 3240 iterations [jk_keller--hsb_rainbow-361x10--9deg-bicubic-81rev-trimmed] [jk_keller--hsb_rainbow-361x10--9deg-bicubicsharper-81rev-trimmed] [jk_keller--hsb_rainbow-361x10--9deg-bicubicsmoother-8] 81 revolutions 29160deg 10deg 36 iterations [jk_keller--hsb_rainbow-361x10--10deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--10deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--10deg-bicubicsmoothe] 1 revolution 360deg 10deg 3240 iterations [jk_keller--hsb_rainbow-361x10--10deg-bicubic-90rev-trimmed] [jk_keller--hsb_rainbow-361x10--10deg-bicubicsharper-90rev-trimmed] [jk_keller--hsb_rainbow-361x10--10deg-bicubicsmoother-] 90 revolutions 32400deg 12deg 30 iterations [jk_keller--hsb_rainbow-361x10--12deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--12deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--12deg-bicubicsmoothe] 1 revolution 360deg 12deg 3240 iterations [jk_keller--hsb_rainbow-361x10--12deg-bicubic-108rev-trimme] [jk_keller--hsb_rainbow-361x10--12deg-bicubicsharper-108rev-trimmed] [jk_keller--hsb_rainbow-361x10--12deg-bicubicsmoother] 108 revolutions 38880deg 15deg 24 iterations [jk_keller--hsb_rainbow-361x10--15deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--15deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--15deg-bicubicsmoothe] 1 revolution 360deg 15deg 3240 iterations [jk_keller--hsb_rainbow-361x10--15deg-bicubic-135rev-trimme] [jk_keller--hsb_rainbow-361x10--15deg-bicubicsharper-135rev-trimmed] [jk_keller--hsb_rainbow-361x10--15deg-bicubicsmoother] 135 revolutions 54600deg 18deg 20 iterations [jk_keller--hsb_rainbow-361x10--18deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--18deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--18deg-bicubicsmoothe] 1 revolution 360deg 18deg 3240 iterations [jk_keller--hsb_rainbow-361x10--18deg-bicubic-162rev-trimm] [jk_keller--hsb_rainbow-361x10--18deg-bicubicsharper-162rev-trimmed] [jk_keller--hsb_rainbow-361x10--18deg-bicubicsmoother] 162 revolutions 58320deg 20deg 18 iterations [jk_keller--hsb_rainbow-361x10--20deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--20deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--20deg-bicubicsmoothe] 1 revolution 360deg 20deg 3240 iterations [jk_keller--hsb_rainbow-361x10--20deg-bicubic-180rev-trimm] [jk_keller--hsb_rainbow-361x10--20deg-bicubicsharper-180rev-trimmed] [jk_keller--hsb_rainbow-361x10--20deg-bicubicsmoother] 180 revolutions 64800deg 24deg 15 iterations [jk_keller--hsb_rainbow-361x10--24deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--24deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--24deg-bicubicsmoothe] 1 revolution 360deg 24deg 3240 iterations [jk_keller--hsb_rainbow-361x10--24deg-bicubic-216rev-trim] [jk_keller--hsb_rainbow-361x10--24deg-bicubicsharper-216rev-trimm] [jk_keller--hsb_rainbow-361x10--24deg-bicubicsmoother] 216 revolutions 77760deg 30deg 12 iterations [jk_keller--hsb_rainbow-361x10--30deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--30deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--30deg-bicubicsmoothe] 1 revolution 360deg 30deg 3240 iterations [jk_keller--hsb_rainbow-361x10--30deg-bicubic-270rev-trim] [jk_keller--hsb_rainbow-361x10--30deg-bicubicsharper-270rev-trimm] [jk_keller--hsb_rainbow-361x10--30deg-bicubicsmoother-] 270 revolutions 109200deg 36deg 10 iterations [jk_keller--hsb_rainbow-361x10--36deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--36deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--36deg-bicubicsmoothe] 1 revolution 360deg 36deg 3240 iterations [jk_keller--hsb_rainbow-361x10--36deg-bicubic-324rev-trimm] [jk_keller--hsb_rainbow-361x10--36deg-bicubicsharper-324rev-trimmed] [jk_keller--hsb_rainbow-361x10--36deg-bicubicsmoother] 324 revolutions 116640deg 40deg 9 iterations [jk_keller--hsb_rainbow-361x10--40deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--40deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--40deg-bicubicsmoothe] 1 revolution 360deg 40deg 3240 iterations [jk_keller--hsb_rainbow-361x10--40deg-bicubic-360rev-trimm] [jk_keller--hsb_rainbow-361x10--40deg-bicubicsharper-360rev-trimmed] [jk_keller--hsb_rainbow-361x10--40deg-bicubicsmoother] 360 revolutions 129600deg 45deg 8 iterations [jk_keller--hsb_rainbow-361x10--45deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--45deg-bicubicsharper] [jk_keller--hsb_rainbow-361x10--45deg-bicubicsmoothe] 1 revolution 360deg 45deg 3240 iterations [jk_keller--hsb_rainbow-361x10--45deg-bicubic-405rev-trimm] [jk_keller--hsb_rainbow-361x10--45deg-bicubicsharper-405rev-trimme] [jk_keller--hsb_rainbow-361x10--45deg-bicubicsmoother-] 405 revolutions 54600deg 60deg 6 iterations [jk_keller--hsb_rainbow-361x10--60deg-bicubic-1rev] ---------------------------------------------------- [jk_keller--hsb_rainbow-361x10--60deg-bicubicsmoothe] 1 revolution 360deg 60deg 3240 iterations [jk_keller--hsb_rainbow-361x10--60deg-bicubic-540rev-trim] [jk_keller--hsb_rainbow-361x10--60deg-bicubicsharper-540rev-trimme] [jk_keller--hsb_rainbow-361x10--60deg-bicubicsmoother] 540 revolutions 109200deg 72deg 5 iterations [jk_keller--hsb_rainbow-361x10--72deg-bicubic-1rev] [jk_keller--hsb_rainbow-361x10--72deg-bicubicsharpe] [jk_keller--hsb_rainbow-361x10--72deg-bicubicsmooth] 1 revolution 360deg 72deg 3240 iterations [jk_keller--hsb_rainbow-361x10--72deg-bicubic-648rev-trim] [jk_keller--hsb_rainbow-361x10--72deg-bicubicsharper-648rev-trimm] [jk_keller--hsb_rainbow-361x10--72deg-bicubicsmoother] 648 revolutions 116640deg 120deg 3 iterations ---------------------------------------------------- ---------------------------------------------------- [jk_keller--hsb_rainbow-361x10--120deg-bicubicsmoot] 1 revolution 360deg 120deg 3240 iterations [jk_keller--hsb_rainbow-361x10--120deg-bicubic-1080rev-trimm] [jk_keller--hsb_rainbow-361x10--120deg-bicubicsharper-1080rev-trimm] [jk_keller--hsb_rainbow-361x10--120deg-bicubicsmoothe] 1080 what's this guy doing?!? revolutions 109200deg Single Color I think the pattern that Bicubic makes is the same no matter what color is being used (to research more), while the other two are different based on color Rotation Bicubic Bicubic Sharper Bicubic Smoother Info 5deg 72 iterations [jk_keller--single_color-361x10--5deg-bicubic-1rev] [jk_keller--single_color-361x10--5deg-bicubicsharper] [jk_keller--single_color-361x10--5deg-bicubicsmoothe] 1 revolution 360deg 5deg 3240 iterations [jk_keller--single_color-361x10--5deg-bicubic-45rev-trimmed] [jk_keller--single_color-361x10--5deg-bicubicsharper-45rev-trimmed] [jk_keller--single_color-361x10--5deg-bicubicsmoother] 45 revolutions 16200deg Two Colors When two flat colors are used, there is an interesting reaction based on the differences between the RGB values of the two colors. Rotation Correlation of RGB and color 60 iterations / 1 revolution (360deg) values 3240 iterations / 54 revolutions (19440deg) info 6deg [jk_keller--red_ma] Red & [jk_keller--red_magenta-200x10--6deg-bicubic] only the two colors [jk_keller--red_magenta-200x10--6deg-bicubicsharper-54rev-tr] Magenta 6deg [jk_keller--red_ye] Red & [jk_keller--red_yellow-200x10--6deg-bicubics] only the two colors [jk_keller--red_yellow-200x10--6deg-bicubicsharper-54rev-tri] Yellow 6deg [jk_keller--green_] Green & [jk_keller--green_yellow-200x10--6deg-bicubi] only the two colors [jk_keller--green_yellow-200x10--6deg-bicubicsharper-54rev-t] Yellow 6deg [jk_keller--blue_m] Blue & [jk_keller--blue_magenta-200x10--6deg-bicubi] only the two colors [jk_keller--blue_magenta-200x10--6deg-bicubicsharper-54rev-t] Magenta 6deg [jk_keller--red_re] Red & [jk_keller--red_red-200x10--6deg-bicubicshar] only one color and [jk_keller--red_red-200x10--6deg-bicubicsharper-54rev-trimme] Dark Red black 6deg [jk_keller--green_] Green & [jk_keller--green_green-200x10--6deg-bicubic] only one color and [jk_keller--green_green-200x10--6deg-bicubicsharper-54rev-tr] Light white Green 6deg [jk_keller--red_bl] Red & [jk_keller--red_blue-200x10--6deg-bicubicsha] the two colors, [jk_keller--red_blue-200x10--6deg-bicubicsharper-54rev-trimm] Blue their secondary color, and black 6deg [jk_keller--green_] Green & [jk_keller--green_blue-200x10--6deg-bicubics] the two colors, [jk_keller--green_blue-200x10--6deg-bicubicsharper-54rev-tri] Blue their secondary color, and black 6deg [jk_keller--red_gr] Red & [jk_keller--red_green-200x10--6deg-bicubicsh] the two colors, [jk_keller--red_green-200x10--6deg-bicubicsharper-54rev-trim] Green their secondary color, and black 6deg [jk_keller--green_] Green & [jk_keller--green_magenta-200x10--6deg-bicub] the two colors, [jk_keller--green_magenta-200x10--6deg-bicubicsharper-54rev-] Magenta white, and black 6deg [jk_keller--blue_y] Blue & [jk_keller--blue_yellow-200x10--6deg-bicubic] the two colors, [jk_keller--blue_yellow-200x10--6deg-bicubicsharper-54rev-tr] Yellow white, and black 6deg [jk_keller--grey_s] Greyish & [jk_keller--grey_salmon-200x10--6deg-bicubic] primary colors, [jk_keller--grey_salmon-200x10--6deg-bicubicsharper-54rev-tr] Salmonish secondary colors, white, and black 6deg [jk_keller--grey_s] Greyish & primary colors, Salmonish [jk_keller--grey_salmon-200x10-16bit--6deg-b] secondary colors, [jk_keller--grey_salmon-200x10-16bit--6deg-bicubicsharper-54rev] (16-bit white, and black color) Has somebody already done this? Since this is one of those super simple things that anyone can do--they just need to be the first to find it,--I was worried I had spent a whole bunch of time repeating something someone else had done already. I was also aware of other projects that use repeated actions to expose generational loss that I mentioned earlier, but nothing that focused specifically on rotation as the impetus, and nothing that ended up with Turing patterns. After some cybersearching, I could only find things that were close, but nothing that hit on the Turing pattern aspect. I think the closest was all the way back in 1999 when Helmut Dersch tested the quality of different interpolation algorithms by rotating images in 5deg increments 36 times to 180deg of the original (I chose 5deg for my original samples in their honor). I am including a resampling of the images they used in the tests to give a look at what Helmet might have discovered back then. The second closest was a variation on something I was aware of (resaving jpegs), rotational jpeg compression. Here I think the degradation relies more on the unique qualities of jpegs, and doesn't result in the novel patterning. I did also come across another artist who found a way to make Turing patterns in Photoshop(r) using repeated blurring and sharpening of images. Given the way this method works, you have much greater control over the resulting Turing pattern. My method relies on the reaction-diffusion system happening at a pixel level, and so the variety of end results is pretty limited. Revising Helmet Monument Test Ken Turkowski's Zone Plate Dersch's tests The original [jk_keller--helmut_dersch-mo] [jk_keller--helmut_dersch-te] [jk_keller--ken_turkowski-zone_plate] images Same settings as original experiment, except 1deg instead of 5deg Bicubic, 1deg [jk_keller--helmut_dersch-mon] [jk_keller--helmut_dersch-tes] [jk_keller--ken_turkowski-zone_plate-] 180 iterations 0.5 revolutions 180deg then flipped 180deg Bicubic, 5deg 72 iterations [jk_keller--helmut_dersch-mon] [jk_keller--helmut_dersch-tes] [jk_keller--ken_turkowski-zone_plate-] 1 revolution 360deg Bicubic, 5deg 3240 iterations [jk_keller--helmut_dersch-monument-200] [jk_keller--helmut_dersch-test-200x200] [jk_keller--ken_turkowski-zone_plate-256x256--5] 45 revolution 16'200deg Bicubic Sharper, 5deg 72 iterations [jk_keller--helmut_dersch-mon] [jk_keller--helmut_dersch-tes] [jk_keller--ken_turkowski-zone_plate-] 1 revolution 360deg Bicubic Sharper, 5deg 3240 iterations [jk_keller--helmut_dersch-monument-200x200--5de] [jk_keller--helmut_dersch-test-200x200--5deg-bi] [jk_keller--ken_turkowski-zone_plate-256x256--5deg-bicu] 45 revolution 16'200deg Bicubic Smoother, 5deg 72 [jk_keller--helmut_dersch-monu] [jk_keller--helmut_dersch-test] [jk_keller--ken_turkowski-zone_plate-] iterations 1 revolution 360deg Bicubic Smoother, 5deg 3240 [jk_keller--helmut_dersch-monume] [jk_keller--helmut_dersch-test-2] [jk_keller--ken_turkowski-zone_plate-256] iterations 45 revolution 16'200deg A note about the size of the images on this page: The rotated images often contain a vast network of pixels that extend around the visible patterns. These pixels are 99/100% transparent, making them virtually imperceptible. They also added a lot of extraneous bloat to the page. As a fix, I have trimmed many of the resulting images to only show the visible pixels. I'm including here an example of the true extent of one image and, to show the hidden network of pixels, another version where I have removed the alpha (transparency) channel. Rotation Original Info result of Original with no transparency rotations Bicubic, 5deg 3240 iterations [jk_keller-] [jk_keller--hsb_rainbow-361x10--5deg-bicubic-45rev-opaque] 45 revolutions 16200deg What about if we rotate the image 5 degrees and then immediately rotate it -5 degrees over and over? Interpolation 72 iterations 3240 iterations algorithm Bicubic [jk_keller--hsb_rainbow-361x10--flipflop--5deg-bicub] [jk_keller--hsb_rainbow-361x10--flipflop--5deg-bicubicsharper-3240-trimmed] Sharper Or rotate 5 degrees for one full revolution (360deg) and then rotate it -5 degrees for a full revolution (-360deg)? Interpolation 144 iterations (since 72 wil be the same as original) 3240 iterations algorithm Bicubic Sharper [jk_keller--hsb_rainbow-361x10--backforth--5deg-bicu] [jk_keller--hsb_rainbow-361x10--backforth--5deg-bicubicsharper-45] back and forth Bicubic Sharper [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-] [jk_keller--hsb_rainbow-361x10--5deg-bicubicsharper-45rev-trimmed] one direction Photoshop(r) Script: I'm working on a script that allows people to create their own Turing patterns and animations. You can find it on github. References / Related / Further Reading / etc.: * So much ImageMagick info on interpolation and filters * Helmut Dersch's Testing Interpolator Quality from 1999 * PetaPixel on Repeated JPEG Rotation * Degrading jpeg images with repeated rotation * PetaPixel on Saving JPEGs hundreds of times * Lossy jpgs * Degradation by rotation in ImageMagick * Andrew Werth's Turing Patterns in Photoshop(r) * Any number of Photoshop(r) Turing pattern tutorials on YouTube * Video feedback and how it works * Alvin Lucier's I Am Sitting in a Room * Cory Arcangel's Untitled homage to Lucier * PetaPixel on I Am Sitting in a Video Room canzona's YouTube take * MKBHD's update of I Am Sitting in a Video Room (above), with decent explanation * Sitting In Stagram by Pete Ashton * Reregrammer by Patrick Koziol - first image * reaction diffusion playground great list of references links too! * Recursive image rotation with source code by r_vizzz * banana -\_(tsu)_/- * Turing pattern (wikipedia) * Generation Loss (wikipedia) * Emergence (wikipedia) * Reaction-diffusion system (wikipedia) * Bicubic interpolation (wikipedia) To research further: * Rotate around corners vs center: images get wildly off center, but how different are they? * Combining different degrees, filters, etc. * Does scaling up and down ever achieve similar results? Neil Cicierega covered content aware scaling with his updated script, but doesn't create Turing patterns. Assorted other images from the process: [jk_keller--frog--1deg-bicubic-0002] [jk_keller--hsb_rainbow-361x10--1deg-nearestneighbor] [jk_keller--beiber_anim--3deg-bicubicsmoother] Bicubic, 1deg for 720 iterations Nearest Neighbor, 1deg for 360 iterations Hi Neil! [jk_keller--hsb_rainbow-361x10--1_deg-three_shear] [jk_keller--mario-10_deg-three_shear] [jk_keller--mario-10_deg-] Three-Shear Rotation, 1deg for 360 iterations Three-Shear Rotation, 10deg for 36 iterations Rotsprite Rotation, 10deg for 36 iterations All the pixels are there... but still mixed up [jk_keller--portrait] [jk_keller--black_square-274x274--0] original Bicubic Smoother, .3333deg [jk_keller--portrait--1deg-rotsprit] Rotsprite Rotation, 1deg for 360 iterations loading