├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── examples ├── 0b02b172-ad67-449b-b4a2-ff645b28c508.py ├── 0b02b172-ad67-449b-b4a2-ff645b28c508.py.png ├── 0b02b172-ad67-449b-b4a2-ff645b28c508.py_layers.png ├── 2e1c805f-4412-4836-89cf-099ed0ea6b1a.py ├── 2e1c805f-4412-4836-89cf-099ed0ea6b1a.py.png ├── 2e1c805f-4412-4836-89cf-099ed0ea6b1a.py_layers.png ├── 48871c12-58f4-4ea4-8739-5d180021c3cb.py ├── 48871c12-58f4-4ea4-8739-5d180021c3cb.py.png ├── 48871c12-58f4-4ea4-8739-5d180021c3cb.py_layers.png ├── 5b078a1d-acf6-4fda-acf8-320dbd5f371c.py ├── 5b078a1d-acf6-4fda-acf8-320dbd5f371c.py.png ├── 5b078a1d-acf6-4fda-acf8-320dbd5f371c.py_layers.png ├── 6a586378-063a-427c-92b2-87d6236615c6.py ├── 6a586378-063a-427c-92b2-87d6236615c6.py.png ├── 6a586378-063a-427c-92b2-87d6236615c6.py_layers.png ├── 8815aca8-9614-49b1-addd-89815561f8ac.py ├── 8815aca8-9614-49b1-addd-89815561f8ac.py.png ├── 8815aca8-9614-49b1-addd-89815561f8ac.py_layers.png ├── d59b01f1-b30a-4414-be7e-6912d556bf9c.py ├── d59b01f1-b30a-4414-be7e-6912d556bf9c.py.png ├── d59b01f1-b30a-4414-be7e-6912d556bf9c.py_layers.png ├── e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py ├── e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py.png └── e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py_layers.png ├── gas.py ├── methods.py ├── poetry.lock ├── pyproject.toml ├── rate_model.h5 └── requirements.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | Run* 2 | NFT/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Alex K 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GAS - Generative Art Synthesizer 2 | 3 | Generative Art Synthesizer - a python program that generates python programs that generates generative art. 4 | 5 | 6 | 7 | *Examples of images that could be generated with GAS. You can see source code of python programs that reproduce these images by clicking on them.* 8 | 9 | ## Idea 10 | 11 | In general generative art is mostly produced by stochastic processes. If in the process of generating art piece there was no storage of initial seeds for all random processes and complete information of methods that was used to produce it, there is no way to reproduce the result again. Such possibility comes handy when you want to produce some variation of particularly good results. GAS solves this problem by applying a different approach to art generation. Instead of storing seeds and methods in some sort of artificial data format, GAS generates the entire fully deterministic program that itself produces the image. This allows complete reproducibility for generative art alongside with ease of modification for artistic control. 12 | 13 | ## Dependencies 14 | 15 | All dependencies for running gas.py contained in requirements.txt. To set them automatically run 16 | 17 | ``` bash 18 | pip install -r requirements.txt 19 | ``` 20 | 21 | Generated programs depend only on three packages: **numpy**, **os** and **PIL**. Exact versions of these packages indicated in the programs themselves, as well as version of python they were created on. 22 | 23 | ## How to start 24 | 25 | To start generative session simply run 26 | 27 | ``` bash 28 | gas.py 29 | ``` 30 | 31 | At the start of the session there will be created a run's folder with time of start of the run as its name. Inside the folder there will be created another folder called "backup" that contains the current version of project files. After that new programs will be generated and executed automatically one by one. Generated programs will create two files - the resulting image and an image of final layers that produced the result (see "Generation method" for more details). There also will be a score at the start of the name of the file that is given by a machine learning model that tries to estimate how beautiful an image is to help to sort them. 32 | 33 | ## Gallery 34 | 35 | You can see some of the most interesting images generated with GAS here: [https://opensea.io/collection/genas](https://opensea.io/collection/genas) 36 | 37 | ## Generation method 38 | 39 | In its core GAS image generation process is very similar to other math driven generative art projects where randomly generated functions are used to produce an image. However, GAS uses some strict boundaries for transformation methods, specifically - all methods always defined on [-1,1] range of values and returns only the values within that range. Also, all methods are called in a similar fashion: "x = method(x, **params)". It allows generating programs without too complicated rules that are guaranteed to always terminate. 40 | 41 | At the start of the generation process we have some tensor x in shape of (w, h, c) where w and h are width and height of the image we want to produce, and c is an amount of channels we have to store temporary values. We initialize this tensor with a linear combination of x and y that correspond to positions in space. After that we randomly apply methods from a predefined set of methods that transform channels one by one depending on values from other channels. 42 | 43 | Finally we take a random number of channels and for each channel define the corresponding color, combine them into a single image and save it. 44 | 45 | There are two core methods in use: 46 | 47 | **Transit** - takes a batch of channels and produces a linear combination of them in a way that sum of all channels never escapes [-1,1] range. 48 | 49 | **Sin** - takes single channel and produce 50 | 51 | 52 | Similarly to Fourier series these two methods can approximate any function that is defined within [-1, 1] range. So, theoretically, we already can generate any possible image with these two methods only, although, probability of getting any interesting result is pretty low. To battle that there are several additional methods defined. 53 | -------------------------------------------------------------------------------- /examples/0b02b172-ad67-449b-b4a2-ff645b28c508.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 09:21:40 UTC 3 | # GAS change date: 2021-11-28 09:20:21 UTC 4 | # GAS md5 hash: ad55481e87ca5a7e9a8e92cd336d1cad 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | def inverse(x, t_indx, s_indx): 50 | res = x.copy() 51 | res[:,:,t_indx] = -x[:,:,s_indx] 52 | return test_values(res) 53 | 54 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 57 | return test_values(res) 58 | 59 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 60 | res = x.copy() 61 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 62 | return test_values(res) 63 | 64 | def prod(x, t_indx, s_indx): 65 | res = x.copy() 66 | res[:,:,t_indx] = np.prod(x[:,:,s_indx], -1) 67 | return test_values(res) 68 | 69 | def power(x, t_indx, s_indx, p = 1): 70 | res = x.copy() 71 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 72 | return test_values(res) 73 | 74 | #set initial grid 75 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 76 | 77 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 78 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 79 | 80 | grid[:,:,0] = (x * 0.9386329219527516 + y * -0.45147169454413794) / 2 81 | grid[:,:,1] = (x * 0.8090860808441245 + y * 0.2914526739617249) / 2 82 | grid[:,:,2] = (x * 0.9804797761207309 + y * -0.5063344373124843) / 2 83 | grid[:,:,3] = (x * -0.8484277738516293 + y * -0.5155435342135386) / 2 84 | grid[:,:,4] = (x * -0.6644350461377522 + y * 0.1739322518414499) / 2 85 | grid[:,:,5] = (x * -0.5986715486203882 + y * 0.9515468928881716) / 2 86 | grid[:,:,6] = (x * 0.2265055481768512 + y * 0.4365452266748293) / 2 87 | grid[:,:,7] = (x * 0.5049774961793401 + y * 0.05113255120007798) / 2 88 | grid[:,:,8] = (x * -0.3391983246964396 + y * -0.5135707069423852) / 2 89 | grid[:,:,9] = (x * -0.4075423366723827 + y * 0.5388833863473126) / 2 90 | grid[:,:,10] = (x * -0.4262457935185371 + y * -0.6817079327248272) / 2 91 | grid[:,:,11] = (x * 0.8435706697714382 + y * 0.7746597063144072) / 2 92 | grid[:,:,12] = (x * -0.5303146721156469 + y * -0.41048419195488317) / 2 93 | grid[:,:,13] = (x * -0.5864100240508576 + y * -0.9425245660964123) / 2 94 | grid[:,:,14] = (x * -0.7665883618456049 + y * -0.3867357840809138) / 2 95 | grid[:,:,15] = (x * 0.49037959172682255 + y * -0.7671554143072785) / 2 96 | 97 | #apply transformations to the grid 98 | grid = transit(grid, 4, [7, 6, 12, 8, 9, 0, 1], [0.05863158300898051, 0.3467981515651057, 0.262107802795733, 0.038001653167336905, 0.2112967596903696, 0.002128256606899112, 0.08103579316557531]) 99 | grid = shift(grid, 3, 3, 2.4622222565241207) 100 | grid = sin(grid, 10, 0, 0.5112825397666086, 37.95950546335726) 101 | grid = sin(grid, 12, 13, 3.6938747278005737, 76.37702042567852) 102 | grid = magnitude(grid, 15, [5, 3, 8, 0, 15], 2) 103 | grid = prod(grid, 2, [3, 11, 1]) 104 | grid = smooth_min(grid, 3, 2, 7) 105 | grid = smooth_max(grid, 8, 10, 6) 106 | grid = prod(grid, 3, [2, 6, 10, 7, 4]) 107 | grid = smooth_min(grid, 7, 12, 0) 108 | grid = transit(grid, 2, [1, 2], [0.9078557995211777, 0.09214420047882232]) 109 | grid = smooth_max(grid, 1, 0, 1) 110 | grid = sin(grid, 9, 4, 3.0281102269529683, 11.185401112275173) 111 | grid = sin(grid, 10, 4, 1.2844464834351186, -45.836492724169695) 112 | grid = sin(grid, 1, 2, -1.5301674594368837, -60.29431568717391) 113 | grid = transit(grid, 2, [13, 11, 5], [0.421270391024163, 0.5054038923567993, 0.07332571661903758]) 114 | grid = transit(grid, 11, [1, 15, 5, 0, 6, 12, 2, 7, 4], [0.03047869593495055, 0.024092687676923453, 0.02665655056773558, 0.17667886361751853, 0.15211061797378253, 0.016462544099609754, 0.0072484377164178625, 0.4477791048998878, 0.11849249751317383]) 115 | grid = transit(grid, 10, [5, 11, 15, 8, 2, 13, 12, 3, 6], [0.1020239434902293, 0.05405846145210329, 0.11525379082942891, 0.11556721863292163, 0.12372657123165616, 0.1356897031789931, 0.20047556686480725, 0.09921434949484752, 0.05399039482501285]) 116 | grid = transit(grid, 9, [5], [1.0]) 117 | grid = transit(grid, 15, [12, 0, 1, 11], [0.01847979792505241, 0.33442336387003857, 0.15192425697494277, 0.4951725812299663]) 118 | grid = sin(grid, 4, 8, 3.386521226555936, 60.95572898751007) 119 | grid = shift(grid, 14, 2, 2.55681173849493) 120 | grid = sin(grid, 10, 14, 0.8649185298731181, 3.1973516320924773) 121 | grid = sin(grid, 9, 7, -2.4657577404884132, 72.95418196004374) 122 | grid = transit(grid, 12, [7, 4, 10, 5], [0.5076634403621766, 0.003404332378773421, 0.04142944289977586, 0.4475027843592742]) 123 | grid = inverse(grid, 4, 5) 124 | grid = transit(grid, 1, [4, 14, 0, 13], [0.2785496566747933, 0.004915230889640017, 0.30146401859790545, 0.4150710938376613]) 125 | grid = sin(grid, 3, 11, -6.496603906160505, -73.75617586359363) 126 | grid = transit(grid, 6, [6, 14], [0.7201753385758813, 0.2798246614241187]) 127 | grid = prod(grid, 4, [10, 0, 2, 4, 8, 5, 6, 7]) 128 | grid = transit(grid, 8, [3], [1.0]) 129 | grid = inverse(grid, 8, 5) 130 | grid = smooth_max(grid, 10, 5, 13) 131 | grid = sin(grid, 9, 10, -1.8565532127479274, -54.75186223635349) 132 | grid = transit(grid, 10, [14], [1.0]) 133 | grid = transit(grid, 15, [11, 4, 10], [0.6926745567135898, 0.1831142410590532, 0.12421120222735695]) 134 | grid = magnitude(grid, 7, [6, 12, 7, 13, 8], 2) 135 | grid = transit(grid, 8, [3, 15, 9, 6, 11], [0.036102265915692405, 0.1224495166624379, 0.2384660328868578, 0.3357862916746864, 0.2671958928603256]) 136 | grid = smooth_min(grid, 1, 1, 11) 137 | grid = transit(grid, 5, [11, 4, 2, 1, 13, 12, 0, 8], [0.08486049729383285, 0.15069099224942706, 0.024923245737924458, 0.07191051851248272, 0.25942601829807205, 0.16834508849259286, 0.14540219911263502, 0.094441440303033]) 138 | grid = transit(grid, 11, [12], [1.0]) 139 | grid = power(grid, 3, 5, 0.10200689258338674) 140 | grid = transit(grid, 2, [10, 11, 4, 15, 0, 6], [0.24973877983541862, 0.3378766591098989, 0.15974656746239488, 0.027776085211312595, 0.02330072841260748, 0.20156117996836745]) 141 | grid = smooth_min(grid, 0, 5, 1) 142 | grid = magnitude(grid, 0, [5, 0], 2) 143 | grid = transit(grid, 6, [15, 8], [0.5303803951305812, 0.4696196048694189]) 144 | grid = inverse(grid, 0, 0) 145 | grid = magnitude(grid, 13, [8], 2) 146 | grid = transit(grid, 13, [15, 5, 9, 4, 6, 12], [0.18067242214638962, 0.12939497982917472, 0.08164480089591167, 0.24583958083442445, 0.2244518823086713, 0.13799633398542827]) 147 | grid = transit(grid, 11, [0], [1.0]) 148 | grid = magnitude(grid, 0, [4, 13], 2) 149 | grid = transit(grid, 8, [5, 4, 15, 6, 14, 0, 3, 11], [0.13835365002720226, 0.008781149737259792, 0.24627334258742545, 0.04870190081124998, 0.049950480577274, 0.15123046752435387, 0.31255198044446264, 0.04415702829077187]) 150 | grid = transit(grid, 1, [3], [1.0]) 151 | grid = magnitude(grid, 14, [4], 2) 152 | grid = sin(grid, 1, 5, 8.18216846853571, -6.729427492311089) 153 | grid = magnitude(grid, 11, [8, 2], 2) 154 | grid = transit(grid, 7, [12, 11, 13, 4], [0.1713900685471786, 0.14082681623065177, 0.19859698568682838, 0.4891861295353413]) 155 | grid = transit(grid, 13, [12, 15, 9, 2, 0, 1, 5], [0.18796556626817826, 0.19260744772691155, 0.11226112831146452, 0.08161640805634696, 0.08706050582840198, 0.2243337708440404, 0.11415517296465624]) 156 | grid = sin(grid, 11, 13, -6.909579361872105, 70.84834564082374) 157 | grid = transit(grid, 2, [11, 7, 13], [0.3629247592109436, 0.10073172896374764, 0.5363435118253088]) 158 | grid = sin(grid, 1, 5, 0.6814927249849106, 30.75954926767548) 159 | grid = inverse(grid, 8, 7) 160 | grid = prod(grid, 10, [5, 2]) 161 | grid = transit(grid, 15, [0, 3], [0.29345909580747953, 0.7065409041925205]) 162 | grid = sin(grid, 12, 4, -1.6398586072056767, 84.51374680259704) 163 | grid = sin(grid, 1, 1, -0.183401440709518, -88.40242580975152) 164 | grid = transit(grid, 12, [3, 13, 2, 9, 0], [0.24803411847529433, 0.2425397323068922, 0.0904752958055755, 0.11683555248582808, 0.30211530092641004]) 165 | grid = sin(grid, 5, 2, -2.2972705471452146, -12.522748365129786) 166 | grid = smooth_min(grid, 12, 9, 11) 167 | grid = sin(grid, 4, 15, -1.9527829039221054, 20.537776250912316) 168 | grid = transit(grid, 7, [11, 9, 2], [0.5001532946669459, 0.42070604285213226, 0.07914066248092186]) 169 | grid = inverse(grid, 5, 12) 170 | grid = sin(grid, 10, 2, 0.9155140652310594, -34.1653400637653) 171 | grid = transit(grid, 8, [14], [1.0]) 172 | grid = transit(grid, 4, [1, 12, 15, 13, 3], [0.32356965941479515, 0.022696478437764827, 0.2132573540073865, 0.11957266769813353, 0.3209038404419199]) 173 | grid = transit(grid, 6, [1, 7, 0, 2, 9, 4, 8], [0.06904450551777742, 0.12680650314665426, 0.1756104206123629, 0.013987480750913602, 0.1337935702206657, 0.39097327478734406, 0.08978424496428203]) 174 | grid = smooth_min(grid, 9, 9, 10) 175 | grid = shift(grid, 8, 1, -0.2952350240798842) 176 | grid = sin(grid, 11, 6, 1.576100090732909, -21.508000199215132) 177 | grid = shift(grid, 11, 5, 1.0526879494498724) 178 | grid = transit(grid, 1, [14], [1.0]) 179 | grid = transit(grid, 8, [9, 10, 2, 15, 13], [0.3265190472987195, 0.21568397721657098, 0.06226802479442838, 0.0028158122366541832, 0.39271313845362693]) 180 | grid = magnitude(grid, 11, [13, 10, 12, 2, 11, 14], 2) 181 | grid = transit(grid, 12, [8, 11, 3], [0.2717231795161624, 0.38648847983305307, 0.3417883406507845]) 182 | grid = transit(grid, 15, [7, 3], [0.9172074355564371, 0.08279256444356292]) 183 | grid = transit(grid, 13, [1, 2, 7, 5, 8, 9, 15], [0.085742434722219, 0.4119764535375412, 0.08377067725345017, 0.13045782410775286, 0.02917564277599849, 0.12489006625007311, 0.13398690135296518]) 184 | grid = transit(grid, 2, [2, 0, 11, 10, 5, 4, 15, 13], [0.1869735689344564, 0.06343641920215143, 0.038951322931441136, 0.04613309733662021, 0.19750663742298355, 0.16072124228620793, 0.15869932715876592, 0.14757838472737334]) 185 | grid = transit(grid, 2, [1, 7], [0.18247956114317448, 0.8175204388568255]) 186 | grid = transit(grid, 8, [11, 15, 0], [0.08195235243098883, 0.6796005904358621, 0.23844705713314918]) 187 | grid = power(grid, 14, 0, 0.10854801586669052) 188 | grid = shift(grid, 8, 9, 2.766857264282361) 189 | grid = transit(grid, 3, [6, 14, 0, 3, 15, 4, 2, 11, 13], [0.03597236183123865, 0.04938629068404894, 0.08457069101219464, 0.014801187461296406, 0.3649334871683411, 0.28062233683539095, 0.08637063851194285, 0.06076815802338077, 0.022574848472165728]) 190 | grid = transit(grid, 4, [11, 4, 15, 10, 8, 5, 2, 3], [0.23701292672659616, 0.08316792464084911, 0.017867439461611043, 0.36417402420248035, 0.02841485585755143, 0.19916101840344472, 0.03422984110049058, 0.03597196960697647]) 191 | grid = magnitude(grid, 13, [11, 7], 2) 192 | grid = sin(grid, 4, 8, 4.28026157040775, -75.14180284322572) 193 | grid = prod(grid, 3, [14, 15]) 194 | grid = inverse(grid, 5, 5) 195 | grid = transit(grid, 4, [8, 4, 15, 9, 10], [0.10267794314653868, 0.019022820046952493, 0.061606568183823145, 0.4832751235896067, 0.33341754503307897]) 196 | grid = transit(grid, 13, [10, 8, 9, 12, 2], [0.031587088727564654, 0.024264739611302585, 0.0306940545567164, 0.19611241111174804, 0.7173417059926683]) 197 | grid = transit(grid, 0, [7, 1, 11, 0, 15], [0.036901331671075975, 0.5054281720479712, 0.13288430351514774, 0.10820806749406277, 0.21657812527174225]) 198 | grid = transit(grid, 3, [7, 3, 12, 9], [0.13643904772292245, 0.38438336340747, 0.15936221296996333, 0.31981537589964426]) 199 | grid = sin(grid, 10, 3, -2.5681840787633137, -30.256455817944243) 200 | grid = sin(grid, 8, 2, 3.501615294498545, -75.50049353340206) 201 | grid = prod(grid, 9, [1, 4, 0, 6]) 202 | grid = transit(grid, 8, [9, 3], [0.30088974760959275, 0.6991102523904072]) 203 | grid = transit(grid, 8, [2, 11, 15, 4, 1, 0, 14], [0.29712982335534416, 0.2526657169525107, 0.08415696601637544, 0.18541009701166816, 0.011062110917544764, 0.017334502896306194, 0.1522407828502505]) 204 | grid = prod(grid, 2, [8, 7, 11, 10, 15, 0, 5]) 205 | grid = transit(grid, 11, [7, 2, 3, 9, 5], [0.24039798004748805, 0.2886075990223525, 0.18742374307846998, 0.11615833154358073, 0.16741234630810867]) 206 | grid = prod(grid, 0, [0, 1, 2, 14]) 207 | grid = prod(grid, 9, [10, 11, 8, 15, 0, 12, 3]) 208 | grid = transit(grid, 13, [5, 15, 10], [0.13237609957996088, 0.22944646977966682, 0.6381774306403722]) 209 | grid = transit(grid, 6, [15], [1.0]) 210 | grid = sin(grid, 15, 0, -0.033265790773207085, 51.94880270063618) 211 | grid = smooth_min(grid, 13, 10, 15) 212 | grid = transit(grid, 1, [12, 8, 10, 4, 2], [0.43102537693091664, 0.25433300797798253, 0.21618454566402304, 0.046743011673522995, 0.05171405775355483]) 213 | grid = sin(grid, 10, 10, 0.9558311639914843, -47.618914508652054) 214 | grid = shift(grid, 9, 8, -1.1449289879251126) 215 | grid = transit(grid, 7, [4, 10, 1, 13, 5, 0, 7, 8, 9, 12, 6, 11, 14], [0.10006330804326793, 0.03891760159161208, 0.005474465860804227, 0.12962618248625338, 0.03090992138168193, 0.016043163973997736, 0.13259375374543056, 0.09920705802758992, 0.1415090600653345, 0.09597789664069131, 0.06106766497801195, 0.14032187015082653, 0.008288053054498123]) 216 | grid = prod(grid, 15, [12, 15]) 217 | grid = prod(grid, 8, [11, 7, 4, 12]) 218 | grid = transit(grid, 7, [15, 6, 2, 7], [0.45073658968521574, 0.16060948991238613, 0.12949271785123345, 0.2591612025511646]) 219 | grid = transit(grid, 10, [11, 4, 2, 8, 14], [0.3705316303566195, 0.1755951969700656, 0.043989590834687294, 0.22866693087969006, 0.1812166509589377]) 220 | grid = sin(grid, 4, 2, -3.329894296119046, -76.41676919069447) 221 | grid = smooth_min(grid, 11, 8, 12) 222 | grid = transit(grid, 1, [1, 14, 8], [0.38986786543390084, 0.40057743619803005, 0.20955469836806906]) 223 | grid = transit(grid, 9, [5], [1.0]) 224 | grid = shift(grid, 9, 13, -5.367438086043798) 225 | grid = magnitude(grid, 13, [2, 0], 2) 226 | grid = transit(grid, 13, [6, 2, 3, 15, 5, 7], [0.06492287400539203, 0.21223490901058306, 0.36311130408652753, 0.09994467226348329, 0.12833432959710458, 0.1314519110369097]) 227 | grid = transit(grid, 8, [6, 2], [0.6857167761482571, 0.31428322385174284]) 228 | grid = shift(grid, 6, 15, 4.115946851379848) 229 | grid = transit(grid, 15, [13, 3], [0.5897775709748927, 0.41022242902510725]) 230 | grid = sin(grid, 12, 14, 1.097917736937588, 58.87772371184383) 231 | grid = transit(grid, 11, [9, 11], [0.37033495928182997, 0.6296650407181701]) 232 | grid = smooth_min(grid, 4, 1, 8) 233 | grid = sin(grid, 4, 4, 3.47544933993972, -37.11795195118333) 234 | grid = sin(grid, 11, 7, -0.3409112713023047, 75.93313567333723) 235 | grid = transit(grid, 11, [5, 10, 7], [0.22694849313985146, 0.5162695719847235, 0.25678193487542517]) 236 | grid = sin(grid, 9, 9, -4.261918262131112, 18.680580924548693) 237 | grid = smooth_max(grid, 2, 2, 11) 238 | grid = sin(grid, 13, 13, 7.718114740496995, 55.242200715207815) 239 | grid = sin(grid, 12, 10, -3.1151555334821888, 17.571856948335267) 240 | grid = prod(grid, 6, [2, 4, 13]) 241 | grid = transit(grid, 5, [1, 9, 3, 10, 4], [0.24075568684771534, 0.02527375632067568, 0.4828116495090197, 0.09546712897709621, 0.15569177834549294]) 242 | grid = sin(grid, 6, 3, -0.1377650382373763, -96.34412250071645) 243 | grid = sin(grid, 7, 3, 1.6405444007982959, -37.09230830685477) 244 | grid = transit(grid, 9, [8], [1.0]) 245 | grid = sin(grid, 5, 10, -1.5052434957207308, 24.900059771988836) 246 | grid = sin(grid, 8, 10, 2.5947698108630664, -90.74050288622541) 247 | grid = sin(grid, 9, 8, -0.8743741598911887, 15.92872484723533) 248 | grid = transit(grid, 4, [3, 13, 9, 8, 5, 2, 12], [0.05731677054419865, 0.08527765171582982, 0.33929504571762287, 0.1932983536368378, 0.0036374435750729187, 0.12289545051895708, 0.19827928429148084]) 249 | grid = transit(grid, 8, [13, 9, 5, 7, 14], [0.05801706264076675, 0.341923243761946, 0.0494872820880747, 0.29583940098242745, 0.2547330105267852]) 250 | grid = inverse(grid, 11, 5) 251 | grid = magnitude(grid, 14, [4, 6, 1, 0], 2) 252 | grid = transit(grid, 13, [11, 0], [0.6569516962992897, 0.3430483037007103]) 253 | grid = sin(grid, 14, 5, 0.053526366336325744, 4.147364704932215) 254 | grid = transit(grid, 4, [3], [1.0]) 255 | grid = sin(grid, 3, 12, -4.078686662791614, 24.459526349523884) 256 | grid = inverse(grid, 15, 10) 257 | grid = shift(grid, 6, 1, -1.115193397983063) 258 | grid = smooth_max(grid, 13, 3, 8) 259 | grid = transit(grid, 13, [13, 0, 5, 14], [0.09662806703796267, 0.1621478194912538, 0.21548762580464817, 0.5257364876661353]) 260 | grid = inverse(grid, 1, 0) 261 | grid = smooth_max(grid, 1, 15, 12) 262 | grid = prod(grid, 11, [3]) 263 | grid = smooth_max(grid, 8, 11, 15) 264 | grid = sin(grid, 12, 6, -3.621533174445339, 24.02414911462421) 265 | grid = sin(grid, 1, 11, 0.5071121900678415, 10.950101187785563) 266 | grid = shift(grid, 13, 3, 5.677279514103952) 267 | grid = transit(grid, 3, [15, 11, 2, 8, 0], [0.28772794692354614, 0.1935939805514465, 0.06024872230823076, 0.13457223936247906, 0.32385711085429764]) 268 | grid = transit(grid, 1, [7, 2, 6, 1, 4, 0], [0.2070905138265326, 0.06562120796792839, 0.17355051228662716, 0.05514926535269553, 0.0829726599151083, 0.41561584065110807]) 269 | grid = transit(grid, 2, [0, 4, 2], [0.010597803396528332, 0.7371576932264431, 0.25224450337702853]) 270 | grid = sin(grid, 11, 8, 4.303514875116891, -67.11152580467314) 271 | grid = prod(grid, 5, [3, 9, 2]) 272 | grid = sin(grid, 5, 1, 2.0751861425380627, 63.37681521624819) 273 | grid = smooth_min(grid, 11, 10, 9) 274 | grid = sin(grid, 13, 2, 4.295107938126156, 57.378601701270014) 275 | grid = sin(grid, 10, 2, -0.010214061334835559, 20.43114218394348) 276 | grid = transit(grid, 8, [1], [1.0]) 277 | grid = sin(grid, 4, 9, 0.2366252211469413, -40.63773874328931) 278 | grid = sin(grid, 9, 15, -2.507870105026106, -89.43842740853354) 279 | grid = transit(grid, 0, [12, 6, 4, 9, 1, 0, 14], [0.36336761526831185, 0.17372789204937897, 0.08036453739500136, 0.09747098994785518, 0.040818441056887325, 0.16796111771248814, 0.07628940657007711]) 280 | grid = transit(grid, 3, [11, 1, 12, 9, 0, 8, 15, 2, 10, 14], [0.20381942291270427, 0.07753380798970702, 0.11445683149439734, 0.08475226158626031, 0.1416941580568898, 0.020968563089492034, 0.0847896752697893, 0.0921589665387646, 0.008240731277180186, 0.17158558178481512]) 281 | grid = transit(grid, 5, [11, 10], [0.9817011300708863, 0.018298869929113594]) 282 | grid = sin(grid, 14, 8, -0.4693746108213766, -98.17810769380118) 283 | grid = sin(grid, 12, 10, 3.6427863324838423, 99.297524709649) 284 | grid = sin(grid, 5, 14, -1.45141083652418, -99.85812912291547) 285 | grid = transit(grid, 0, [4, 3, 8], [0.23275058190778222, 0.49901982570530873, 0.2682295923869092]) 286 | grid = magnitude(grid, 8, [10, 9, 12, 4, 7, 15], 2) 287 | grid = sin(grid, 12, 7, 1.439019575760617, 13.126437741104823) 288 | grid = transit(grid, 10, [15, 8, 13, 2], [0.32464063956303774, 0.20922781529873477, 0.16179927966914437, 0.30433226546908315]) 289 | grid = magnitude(grid, 6, [14, 5, 13, 11, 2, 9], 2) 290 | grid = sin(grid, 9, 5, -5.606152225672729, -35.928477282758536) 291 | grid = transit(grid, 0, [7, 11, 15, 8, 12, 0, 4, 14, 3, 5], [0.11084510086381213, 0.003439701966452383, 0.10819642722960272, 0.15371289739415475, 0.25812192912399506, 0.005727171643985687, 0.14633649245899077, 0.033890406689391105, 0.05550396325806974, 0.1242259093715456]) 292 | grid = smooth_max(grid, 10, 15, 10) 293 | grid = transit(grid, 11, [9, 0, 11, 7, 3, 8], [0.03500911832175082, 0.03265868671024263, 0.3248025339288217, 0.4234363710484886, 0.13338109758306646, 0.050712192407629864]) 294 | grid = transit(grid, 7, [14, 2, 13, 1, 11, 3, 8, 7], [0.207462236904601, 0.11516125867317799, 0.12240760599022518, 0.05066197369764289, 0.13869178538077429, 0.09948828746526778, 0.16686217850764798, 0.09926467338066268]) 295 | grid = transit(grid, 6, [6, 13, 7], [0.16813621041531998, 0.42150135317124293, 0.410362436413437]) 296 | grid = inverse(grid, 6, 6) 297 | grid = sin(grid, 7, 15, -4.9164570678736865, 86.15931416043557) 298 | grid = sin(grid, 1, 7, 1.6265187305620117, -97.13150019385894) 299 | grid = transit(grid, 11, [0, 9], [0.1290607634325389, 0.8709392365674611]) 300 | grid = transit(grid, 14, [14, 13, 15], [0.530662002197574, 0.1082014600047566, 0.36113653779766947]) 301 | grid = transit(grid, 14, [10, 14, 4, 9, 13, 6], [0.3199750359220948, 0.07376266150860299, 0.03622483092076182, 0.09070212266434277, 0.4030414045204916, 0.07629394446370606]) 302 | grid = magnitude(grid, 13, [7, 4, 15], 2) 303 | grid = transit(grid, 13, [6, 15, 11, 9, 12], [0.21908823570589997, 0.1636179110868493, 0.03797238284324163, 0.29532957711092916, 0.2839918932530799]) 304 | grid = sin(grid, 4, 3, 2.634465399239887, 62.07538440217337) 305 | grid = sin(grid, 7, 2, 3.41043792019894, 65.36615977552518) 306 | grid = transit(grid, 0, [14, 3, 11, 10, 7], [0.5203714128788618, 0.068511863728177, 0.10141059844877331, 0.2728285912351676, 0.036877533709020166]) 307 | grid = transit(grid, 7, [11], [1.0]) 308 | grid = transit(grid, 5, [9, 13, 3, 14], [0.28064413535886806, 0.5181512474389621, 0.1504742947642479, 0.050730322437922]) 309 | grid = prod(grid, 1, [12, 13]) 310 | grid = sin(grid, 6, 14, -1.927951619591129, -65.3028706482776) 311 | grid = prod(grid, 14, [13]) 312 | grid = sin(grid, 1, 12, -0.5111321725063378, 18.261359970959475) 313 | grid = power(grid, 6, 5, 0.9223892145169746) 314 | grid = transit(grid, 2, [9, 11, 10], [0.2662646690994658, 0.2460545507972383, 0.4876807801032959]) 315 | grid = transit(grid, 2, [7], [1.0]) 316 | grid = sin(grid, 10, 9, 6.219381309190064, -71.03631884776823) 317 | grid = sin(grid, 9, 6, 1.6821417847846682, -64.12547446801875) 318 | grid = sin(grid, 13, 3, -0.15800274281797377, 90.63950889076133) 319 | grid = sin(grid, 14, 14, -1.842523240371888, 74.23947694195837) 320 | grid = inverse(grid, 7, 8) 321 | grid = smooth_max(grid, 10, 3, 15) 322 | grid = magnitude(grid, 9, [15, 7], 2) 323 | grid = transit(grid, 4, [4, 12, 14, 15, 7, 1], [0.20378471182464508, 0.038241020379710625, 0.16903312106740406, 0.3387613981701764, 0.11303295854369695, 0.13714679001436697]) 324 | grid = transit(grid, 4, [14, 11, 12, 13, 4, 7], [0.23221079251346607, 0.3307147367708056, 0.26199556841553734, 0.018127231672754242, 0.13788777275073352, 0.01906389787670339]) 325 | grid = sin(grid, 4, 7, 3.7705302330112063, 56.91558505626969) 326 | grid = sin(grid, 3, 9, 1.4275963527158242, -76.78247379244436) 327 | grid = sin(grid, 2, 5, -5.225820110717917, 57.71107021356826) 328 | grid = transit(grid, 2, [12], [1.0]) 329 | grid = prod(grid, 14, [11, 10]) 330 | grid = transit(grid, 2, [0, 15, 10], [0.005204838856346087, 0.5116602651328436, 0.48313489601081044]) 331 | grid = transit(grid, 10, [10], [1.0]) 332 | grid = transit(grid, 1, [8, 10, 15, 14, 9], [0.33493798319460544, 0.14040206011900094, 0.3010385316537353, 0.07412413198773361, 0.14949729304492473]) 333 | grid = magnitude(grid, 10, [11, 0, 5], 2) 334 | grid = magnitude(grid, 9, [15, 3, 11, 0, 14], 2) 335 | grid = sin(grid, 4, 5, -1.8457292172108153, -53.43885199947502) 336 | grid = sin(grid, 10, 0, 7.741409383532979, -12.082110529508299) 337 | grid = prod(grid, 11, [9]) 338 | grid = sin(grid, 4, 3, 0.10154488887533689, 12.479110491961137) 339 | grid = magnitude(grid, 1, [7], 2) 340 | grid = smooth_min(grid, 7, 4, 13) 341 | grid = magnitude(grid, 5, [7], 2) 342 | grid = transit(grid, 6, [9, 11, 2, 13], [0.381505247910628, 0.12073241493361198, 0.3454992433435407, 0.15226309381221942]) 343 | grid = magnitude(grid, 10, [7, 15, 5], 2) 344 | grid = magnitude(grid, 9, [12, 14, 4], 2) 345 | grid = shift(grid, 3, 9, 3.0393348894939773) 346 | grid = shift(grid, 2, 4, 2.1961962516242517) 347 | grid = prod(grid, 15, [3, 5, 0, 1]) 348 | grid = sin(grid, 6, 11, -0.7697482296056479, 23.55348445076298) 349 | grid = sin(grid, 7, 7, 0.5492744322205282, 35.873568370773654) 350 | grid = transit(grid, 7, [13], [1.0]) 351 | grid = sin(grid, 3, 12, 6.470760426148978, -53.62090724330151) 352 | grid = sin(grid, 10, 10, 0.7827958631857042, -90.82177259964699) 353 | grid = transit(grid, 6, [8, 6, 5, 7, 4, 2], [0.39579476392315127, 0.3200094081197146, 0.06439062651950353, 0.03284446726347166, 0.04732779189481446, 0.13963294227934445]) 354 | grid = smooth_min(grid, 0, 13, 15) 355 | grid = smooth_max(grid, 5, 8, 4) 356 | grid = transit(grid, 10, [1], [1.0]) 357 | grid = transit(grid, 15, [15], [1.0]) 358 | grid = prod(grid, 13, [6, 3, 7]) 359 | grid = sin(grid, 0, 3, -3.561651028660104, 11.539889679902203) 360 | grid = power(grid, 10, 5, 0.12539493928522222) 361 | grid = power(grid, 0, 12, 2.5526439221510495) 362 | grid = sin(grid, 4, 10, -3.680544885171134, 30.633332441673872) 363 | grid = transit(grid, 11, [12, 6, 9], [0.1597221050818672, 0.523275926379751, 0.31700196853838186]) 364 | grid = sin(grid, 14, 7, 5.409920766787869, -58.09956716630187) 365 | grid = sin(grid, 2, 15, -2.5319898824657017, -45.01904701883333) 366 | grid = shift(grid, 5, 5, 3.1584260780059252) 367 | grid = transit(grid, 10, [9, 8], [0.7777441717493406, 0.22225582825065934]) 368 | grid = transit(grid, 3, [9], [1.0]) 369 | grid = transit(grid, 11, [2], [1.0]) 370 | 371 | #create color space 372 | def shift_colors(x, shift): 373 | res = x.copy() 374 | for i in range(x.shape[-1]): 375 | if shift[i] > 0: res[:,:,i] = (-np.abs(((x[:,:,i] + 1) / 2) ** (1 + shift[i]) - 1) ** (1 / (1 + shift[i])) + 1) * 2 - 1 376 | if shift[i] < 0: res[:,:,i] = np.abs((1 - (x [:,:,i]+ 1) / 2) ** (1 - shift[i]) - 1) ** (1 / (1 - shift[i])) * 2 - 1 377 | return test_values(res) 378 | 379 | res = np.zeros((SIZE, SIZE, 3)) 380 | res += shift_colors(grid[:,:,0:1].repeat(3, -1), [1.9355805467383669, 1.4677093499726706, 1.2451388311186942]) 381 | 382 | res = res / 1 383 | res = ((res + 1) / 2 * 255).clip(0,255) 384 | 385 | #save results 386 | im = Image.fromarray(np.uint8(res)) 387 | im.save(os.path.basename(__file__) + '.png') 388 | 389 | #save layers 390 | img = np.zeros((SIZE * 4, SIZE * 4)) 391 | for j in range(GRID_CHANNELS): 392 | x = j % 4 393 | y = j // 4 394 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 395 | 396 | img = (img + 1) * 127.5 397 | im = Image.fromarray(np.uint8(img)) 398 | im.save(os.path.basename(__file__) + '_layers.png') 399 | 400 | -------------------------------------------------------------------------------- /examples/0b02b172-ad67-449b-b4a2-ff645b28c508.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/0b02b172-ad67-449b-b4a2-ff645b28c508.py.png -------------------------------------------------------------------------------- /examples/0b02b172-ad67-449b-b4a2-ff645b28c508.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/0b02b172-ad67-449b-b4a2-ff645b28c508.py_layers.png -------------------------------------------------------------------------------- /examples/2e1c805f-4412-4836-89cf-099ed0ea6b1a.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 09:21:40 UTC 3 | # GAS change date: 2021-11-28 09:20:21 UTC 4 | # GAS md5 hash: ad55481e87ca5a7e9a8e92cd336d1cad 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | def inverse(x, t_indx, s_indx): 50 | res = x.copy() 51 | res[:,:,t_indx] = -x[:,:,s_indx] 52 | return test_values(res) 53 | 54 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 57 | return test_values(res) 58 | 59 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 60 | res = x.copy() 61 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 62 | return test_values(res) 63 | 64 | def prod(x, t_indx, s_indx): 65 | res = x.copy() 66 | res[:,:,t_indx] = np.prod(x[:,:,s_indx], -1) 67 | return test_values(res) 68 | 69 | def power(x, t_indx, s_indx, p = 1): 70 | res = x.copy() 71 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 72 | return test_values(res) 73 | 74 | #set initial grid 75 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 76 | 77 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 78 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 79 | 80 | grid[:,:,0] = (x * -0.9772301245363628 + y * 0.8284220097588726) / 2 81 | grid[:,:,1] = (x * 0.7420413787751454 + y * 0.6273879040295758) / 2 82 | grid[:,:,2] = (x * 0.569970194339448 + y * 0.8920712193380254) / 2 83 | grid[:,:,3] = (x * -0.8884570765949966 + y * -0.44881538298591384) / 2 84 | grid[:,:,4] = (x * -0.24512827958625172 + y * -0.6422190420422715) / 2 85 | grid[:,:,5] = (x * -0.404753905826309 + y * 0.16725757576209088) / 2 86 | grid[:,:,6] = (x * 0.6457454463473065 + y * -0.102285521023467) / 2 87 | grid[:,:,7] = (x * -0.7875394814390695 + y * 0.9770767057810901) / 2 88 | grid[:,:,8] = (x * -0.15177977570233758 + y * 0.1422174133569869) / 2 89 | grid[:,:,9] = (x * -0.4267695017023727 + y * -0.8589723135588523) / 2 90 | grid[:,:,10] = (x * -0.11839373318029556 + y * 0.5454291761338037) / 2 91 | grid[:,:,11] = (x * 0.3152114096183598 + y * 0.7262805774814525) / 2 92 | grid[:,:,12] = (x * -0.8954804985897968 + y * -0.22413306137159172) / 2 93 | grid[:,:,13] = (x * -0.3133199738581147 + y * 0.20507786648133308) / 2 94 | grid[:,:,14] = (x * -0.6839754616903377 + y * -0.7946186897127587) / 2 95 | grid[:,:,15] = (x * 0.7959679193241125 + y * 0.5522310099131351) / 2 96 | 97 | #apply transformations to the grid 98 | grid = transit(grid, 3, [5, 7, 6], [0.3962714411774644, 0.16006533786274288, 0.4436632209597928]) 99 | grid = transit(grid, 3, [2, 8], [0.8282175584710026, 0.1717824415289974]) 100 | grid = smooth_min(grid, 11, 4, 10) 101 | grid = sin(grid, 15, 10, -2.81187111779213, 30.578741710847567) 102 | grid = transit(grid, 14, [0, 14, 3, 5, 4, 1, 15, 7, 2, 12], [0.04492951531949313, 0.1032769741585513, 0.008554626273320575, 0.1844301483989783, 0.05155668920945148, 0.04160566130789678, 0.17616204890719003, 0.017987918391588635, 0.12047709102397088, 0.25101932700955903]) 103 | grid = transit(grid, 10, [12, 2, 7], [0.36511568140482437, 0.17439221854571188, 0.46049210004946384]) 104 | grid = transit(grid, 10, [7, 4], [0.6535874824116772, 0.34641251758832287]) 105 | grid = sin(grid, 2, 12, -0.4758589463774113, -99.12584391135941) 106 | grid = sin(grid, 4, 2, -0.3858384440513433, -22.882493543511416) 107 | grid = magnitude(grid, 13, [0, 12, 10, 6, 1], 2) 108 | grid = transit(grid, 11, [14, 11, 8, 10, 0, 12, 4, 7, 2, 6], [0.15295981848089954, 0.012265148075395487, 0.028653751554135645, 0.019861051798936002, 0.15738431647714352, 0.01838775936004726, 0.2751820776499543, 0.14441436721151604, 0.04884491772421227, 0.14204679166776002]) 109 | grid = sin(grid, 6, 4, -1.7715712770765584, 35.838852883924886) 110 | grid = transit(grid, 1, [6], [1.0]) 111 | grid = power(grid, 7, 13, 3.8529210059457264) 112 | grid = transit(grid, 6, [7, 1, 15], [0.26181749491390116, 0.44583064675686784, 0.292351858329231]) 113 | grid = transit(grid, 2, [10, 3, 14, 2, 8, 15], [0.3138760563225663, 0.08548117913572588, 0.10909271963915138, 0.1612205187685257, 0.22185421791229454, 0.10847530822173618]) 114 | grid = transit(grid, 3, [5, 13, 0, 7, 8, 15, 1, 12, 14], [0.013130821893185684, 0.03351546264980958, 0.184946934997818, 0.016233123832323462, 0.01274956107925013, 0.01784086973040233, 0.142833895109279, 0.35051313075699164, 0.2282361999509403]) 115 | grid = prod(grid, 3, [5, 1]) 116 | grid = prod(grid, 3, [8, 4, 10, 12, 3, 6, 7]) 117 | grid = sin(grid, 15, 14, -2.711991836272408, -98.867794982127) 118 | grid = magnitude(grid, 7, [13, 9, 7, 3, 5, 0, 6, 1, 10], 2) 119 | grid = smooth_min(grid, 8, 1, 10) 120 | grid = transit(grid, 11, [1, 2, 12, 8, 7, 0, 13, 5, 15], [0.03461378270853012, 0.033625481496332855, 0.009577141463165411, 0.17942247888813548, 0.18105482324212022, 0.1330544067747384, 0.18510522700685425, 0.12534656935894029, 0.11820008906118286]) 121 | grid = power(grid, 2, 15, 0.1345840652634475) 122 | grid = transit(grid, 4, [13, 10, 0, 5, 9, 15], [0.008304139432492776, 0.09554106242163109, 0.3389598745022655, 0.34268645275649734, 0.1217193848856375, 0.09278908600147577]) 123 | grid = sin(grid, 8, 7, 1.6442128032227346, 65.42553772291257) 124 | grid = sin(grid, 5, 2, -0.04306960778476998, 12.448419977394536) 125 | grid = sin(grid, 11, 14, 0.9129834873789532, 73.0640350263852) 126 | grid = magnitude(grid, 7, [15, 4, 5, 13, 10, 2], 2) 127 | grid = sin(grid, 14, 11, 2.5402909421728, -86.32824677979416) 128 | grid = shift(grid, 4, 11, 2.3925964888020284) 129 | grid = shift(grid, 15, 4, -0.7372708631479445) 130 | grid = sin(grid, 0, 2, 1.594891222212393, 16.628278092846458) 131 | grid = sin(grid, 11, 13, -0.9327674147516039, -15.541013282637977) 132 | grid = sin(grid, 11, 4, -4.993775143892229, 80.96747762431698) 133 | grid = smooth_max(grid, 10, 0, 15) 134 | grid = transit(grid, 12, [6, 10, 14, 12, 15, 2, 13], [0.09985103750264886, 0.026949378786003914, 0.06087019157286385, 0.3158303216282256, 0.14013677674605268, 0.12826012256120262, 0.22810217120300252]) 135 | grid = prod(grid, 8, [8, 5, 9, 2, 0, 14, 7, 1]) 136 | grid = transit(grid, 9, [3, 9], [0.876452537375533, 0.12354746262446699]) 137 | grid = smooth_min(grid, 8, 10, 6) 138 | grid = transit(grid, 1, [1, 0], [0.9538810320364223, 0.046118967963577756]) 139 | grid = sin(grid, 1, 12, 3.3410290205031137, -25.743804847404974) 140 | grid = prod(grid, 10, [2, 14, 11, 12, 0, 9]) 141 | grid = transit(grid, 11, [13, 2, 11, 7, 6, 5, 0, 12], [0.09281695951990547, 0.17624088228853832, 0.05634762625525204, 0.07896014369556593, 0.19702354876600972, 0.13125843806948617, 0.10069656855488293, 0.1666558328503595]) 142 | grid = smooth_max(grid, 11, 6, 15) 143 | grid = sin(grid, 2, 15, 5.785514504408521, -40.611858718726836) 144 | grid = transit(grid, 3, [11, 5, 15, 1, 0], [0.6162699269604909, 0.14424572769193936, 0.11500148040195407, 0.09365692467494352, 0.03082594027067211]) 145 | grid = magnitude(grid, 6, [2, 12, 13, 6, 7], 2) 146 | grid = inverse(grid, 2, 1) 147 | grid = transit(grid, 3, [5, 14], [0.770391387127944, 0.22960861287205592]) 148 | grid = sin(grid, 6, 6, 3.825749251323949, 72.27777003146554) 149 | grid = smooth_max(grid, 12, 1, 9) 150 | grid = shift(grid, 0, 5, -1.2130539541947831) 151 | grid = transit(grid, 13, [0, 15], [0.23162618407149907, 0.768373815928501]) 152 | grid = transit(grid, 9, [15, 14, 7], [0.1907238497173048, 0.6292726762874267, 0.18000347399526861]) 153 | grid = sin(grid, 8, 2, 0.7430484736508824, -84.25954782421516) 154 | grid = sin(grid, 13, 6, -3.810046988818433, -6.789933138061684) 155 | grid = inverse(grid, 12, 1) 156 | grid = transit(grid, 12, [8, 10, 5, 9], [0.11929585185006639, 0.2114953692273783, 0.3136928001595172, 0.35551597876303814]) 157 | grid = transit(grid, 4, [12, 0, 5, 6, 4, 3, 7, 2, 1], [0.0921941943931091, 0.10658398655979018, 0.0646849340879924, 0.09549054900098725, 0.23000054506202997, 0.23265792933019552, 0.12639406038563974, 0.02418055928965866, 0.027813241890597123]) 158 | grid = transit(grid, 4, [5, 6, 15], [0.23673895494297528, 0.6875264015472036, 0.0757346435098213]) 159 | grid = sin(grid, 4, 15, 0.3689412417509138, -37.286150237665) 160 | grid = transit(grid, 3, [1, 14, 13, 8], [0.235968430357205, 0.15181596313120294, 0.19728935279429996, 0.4149262537172921]) 161 | grid = smooth_min(grid, 5, 7, 13) 162 | grid = prod(grid, 7, [7, 14, 5, 10, 8, 1, 12, 15]) 163 | grid = sin(grid, 3, 15, -5.303372135627032, -5.401797547977694) 164 | grid = shift(grid, 3, 2, 1.380193201302221) 165 | grid = smooth_max(grid, 6, 9, 11) 166 | grid = sin(grid, 3, 2, 1.657099047995458, 5.329745854466708) 167 | grid = transit(grid, 5, [7], [1.0]) 168 | grid = transit(grid, 13, [14, 10], [0.5104299213419905, 0.48957007865800956]) 169 | grid = transit(grid, 6, [0], [1.0]) 170 | grid = sin(grid, 0, 4, -3.4755676589778726, 99.66914198550933) 171 | grid = smooth_max(grid, 2, 5, 12) 172 | grid = transit(grid, 14, [8, 5, 2, 0], [0.047685592444889555, 0.2957771390129271, 0.05485968745584492, 0.6016775810863384]) 173 | grid = magnitude(grid, 9, [15, 7, 3, 11, 1, 4], 2) 174 | grid = transit(grid, 10, [10, 1, 14, 2], [0.0607648494329387, 0.24910648467704677, 0.4496685682218551, 0.24046009766815934]) 175 | grid = sin(grid, 6, 3, 0.653008433613337, 33.71713045387867) 176 | grid = transit(grid, 14, [7, 4, 14], [0.20393075692366466, 0.7529736670046318, 0.04309557607170369]) 177 | grid = prod(grid, 10, [12, 0]) 178 | grid = inverse(grid, 14, 2) 179 | grid = transit(grid, 3, [14, 5, 7, 3, 6, 11, 9, 0], [0.012782892992306005, 0.15559435318009912, 0.2758108968961064, 0.15486897377007164, 0.04523192685450211, 0.13927008110407843, 0.021799097251099814, 0.19464177795173665]) 180 | grid = transit(grid, 15, [13, 14, 15, 6, 11, 7, 1], [0.013919282562548017, 0.09782138883553308, 0.1308854042757214, 0.6092743828389294, 0.11162819771299519, 0.012793015529680568, 0.02367832824459244]) 181 | grid = smooth_min(grid, 9, 9, 9) 182 | grid = transit(grid, 2, [11, 1, 0, 15, 4], [0.04702513907218175, 0.318517576849402, 0.2814043059854424, 0.3154096212746778, 0.03764335681829592]) 183 | grid = transit(grid, 6, [11, 1, 7], [0.04510956031341787, 0.35511310456409917, 0.5997773351224829]) 184 | grid = sin(grid, 15, 5, 0.9883101573863393, -37.3437977042536) 185 | grid = prod(grid, 5, [14, 4, 7, 8, 5, 13]) 186 | grid = transit(grid, 5, [4, 10, 5, 8, 1, 11], [0.32489867493040925, 0.3362994099063879, 0.046680592691049426, 0.02112029936330436, 0.2515686471980886, 0.01943237591076041]) 187 | grid = transit(grid, 2, [11], [1.0]) 188 | grid = magnitude(grid, 13, [10, 0], 2) 189 | grid = sin(grid, 14, 5, -5.763208987860649, 94.20330525879137) 190 | grid = transit(grid, 6, [9], [1.0]) 191 | grid = sin(grid, 7, 11, -8.84500530111595, -58.29896256555682) 192 | grid = transit(grid, 14, [9, 2], [0.14230405067145288, 0.8576959493285471]) 193 | grid = shift(grid, 11, 3, 1.544958311497465) 194 | grid = transit(grid, 8, [2, 15, 0, 4], [0.4606724063937241, 0.2206630536445932, 0.20489739294445614, 0.1137671470172266]) 195 | grid = smooth_max(grid, 11, 8, 7) 196 | grid = power(grid, 4, 11, 1.1319193363708844) 197 | grid = prod(grid, 15, [12]) 198 | grid = smooth_min(grid, 15, 1, 9) 199 | grid = transit(grid, 6, [4, 3, 8, 0, 11, 12, 15], [0.010549788917157453, 0.18404065180598841, 0.2879562353292947, 0.10965135100883056, 0.0725963939057477, 0.24645070652561327, 0.08875487250736798]) 200 | grid = transit(grid, 13, [7, 2], [0.49160032249040264, 0.5083996775095974]) 201 | grid = smooth_min(grid, 1, 1, 14) 202 | grid = transit(grid, 13, [13, 3, 4, 5, 0, 6, 9], [0.21194370824350384, 0.011478684104207342, 0.1519043464651473, 0.14476204498461465, 0.04460174478278611, 0.20540186584060885, 0.22990760557913184]) 203 | grid = transit(grid, 8, [13, 0, 10, 7, 2], [0.5385504708834093, 0.044172458841539246, 0.04366081223568676, 0.11616993757552775, 0.25744632046383686]) 204 | grid = transit(grid, 12, [15, 9, 11, 12], [0.16194724377074177, 0.12902497945453706, 0.3681130099978702, 0.3409147667768509]) 205 | grid = power(grid, 12, 6, 0.9621146449655409) 206 | grid = smooth_max(grid, 14, 11, 7) 207 | grid = transit(grid, 14, [14], [1.0]) 208 | grid = transit(grid, 4, [3], [1.0]) 209 | grid = transit(grid, 15, [15, 11, 1], [0.25981354505300397, 0.36158746021347316, 0.3785989947335229]) 210 | grid = shift(grid, 9, 6, 0.2646088334554064) 211 | grid = magnitude(grid, 5, [7, 6, 4, 5, 0, 12, 14], 2) 212 | grid = smooth_min(grid, 7, 3, 14) 213 | grid = transit(grid, 13, [14, 1, 13, 10], [0.10088451891396819, 0.191510273997324, 0.16770397506443765, 0.5399012320242702]) 214 | grid = transit(grid, 14, [3, 2, 4, 6, 14, 1], [0.0447180143489295, 0.030004114341812396, 0.1377420890427628, 0.057861671084617955, 0.35208161347577965, 0.3775924977060977]) 215 | grid = transit(grid, 6, [15], [1.0]) 216 | grid = shift(grid, 0, 6, -2.1754833096430093) 217 | grid = transit(grid, 12, [1, 7], [0.31906778199631697, 0.680932218003683]) 218 | grid = sin(grid, 11, 2, 1.0463363397045784, -55.290321984273724) 219 | grid = shift(grid, 7, 13, -1.635025558164322) 220 | grid = smooth_max(grid, 7, 15, 4) 221 | grid = sin(grid, 7, 5, 4.217003134290231, -84.7301553073353) 222 | grid = transit(grid, 4, [15, 7, 3, 4, 10, 11, 12, 9, 13], [0.14459404046513513, 0.06662190811089809, 0.3257782176528333, 0.08510574215017955, 0.03851679873396843, 0.03959221341358759, 0.0017117638203937083, 0.2171987456103738, 0.0808805700426305]) 223 | grid = transit(grid, 7, [14, 2, 8, 3, 9], [0.14789215616692392, 0.08132548488741291, 0.4243347973822542, 0.05721250589223747, 0.2892350556711714]) 224 | grid = transit(grid, 5, [2, 14, 6], [0.23510882498789704, 0.06989671383890285, 0.6949944611732001]) 225 | grid = sin(grid, 0, 12, 1.2684010385313085, -92.48198248560789) 226 | grid = transit(grid, 11, [2, 7, 12, 8, 6, 3, 4, 10, 9, 0], [0.11106492437454482, 0.05600616904896314, 0.09321759037849306, 0.07124725465228712, 0.13302311545062054, 0.10410707635655471, 0.0008459850928252534, 0.024169112249513364, 0.269571164213665, 0.13674760818253293]) 227 | grid = sin(grid, 2, 10, 2.023632188543528, -71.8702439215892) 228 | grid = shift(grid, 2, 2, 3.406225898683278) 229 | grid = sin(grid, 6, 2, -3.3618705129783546, -39.213874352584256) 230 | grid = transit(grid, 14, [0, 2, 5], [0.3659014258755244, 0.4323842841373779, 0.20171428998709778]) 231 | grid = shift(grid, 1, 2, -5.647145403350814) 232 | grid = sin(grid, 4, 13, 2.6059959458332056, -58.410181334666575) 233 | grid = sin(grid, 10, 14, 2.525267990241818, -95.25636060128892) 234 | grid = smooth_min(grid, 15, 13, 14) 235 | grid = transit(grid, 13, [2, 7, 14, 9, 3, 1, 13], [0.023217692150903795, 0.2401269372064785, 0.17734519398666324, 0.02487077158943781, 0.30256180051785053, 0.13633537841896037, 0.09554222612970566]) 236 | grid = sin(grid, 5, 9, -3.325439136617531, 8.703841767152753) 237 | grid = transit(grid, 14, [15, 5], [0.4668899818773747, 0.5331100181226254]) 238 | grid = prod(grid, 0, [4, 15, 7, 11, 13, 1, 12]) 239 | grid = transit(grid, 10, [11], [1.0]) 240 | grid = transit(grid, 3, [1, 12, 3, 9], [0.15876603964988217, 0.13272525418652648, 0.22770018072143047, 0.48080852544216085]) 241 | grid = shift(grid, 14, 9, -1.113818326564914) 242 | grid = prod(grid, 11, [2]) 243 | grid = smooth_min(grid, 3, 0, 10) 244 | grid = transit(grid, 10, [2, 6, 5, 4, 10, 15, 14], [0.19084700942372185, 0.019369652278004294, 0.15410393107320866, 0.036098992104869075, 0.12546925942495724, 0.12257684354138026, 0.35153431215385855]) 245 | grid = transit(grid, 14, [3, 6, 9], [0.041399596899217225, 0.2109512829238257, 0.7476491201769572]) 246 | grid = smooth_max(grid, 4, 0, 5) 247 | grid = sin(grid, 14, 11, -0.7952185031848616, -79.99369531590408) 248 | grid = transit(grid, 10, [0, 11, 9, 10, 1, 2], [0.08145512193146691, 0.2868271498726411, 0.13627367938772128, 0.11207872460565382, 0.18298945170154962, 0.2003758725009674]) 249 | grid = transit(grid, 15, [8], [1.0]) 250 | grid = transit(grid, 11, [11, 3, 10, 6, 15, 14, 2], [0.06129458688285442, 0.22780033189136034, 0.03825330316791381, 0.24796776203265053, 0.11058960275282681, 0.12130111200710307, 0.192793301265291]) 251 | grid = prod(grid, 7, [12]) 252 | grid = sin(grid, 11, 10, -4.012921031273755, 70.94281048828063) 253 | grid = shift(grid, 8, 1, -0.8586049100713232) 254 | grid = transit(grid, 14, [4, 8, 15], [0.5840522031602384, 0.3621879750179246, 0.05375982182183693]) 255 | grid = sin(grid, 1, 7, 1.714333532241929, -40.10125111372134) 256 | grid = magnitude(grid, 2, [4], 2) 257 | grid = transit(grid, 2, [2, 8, 14], [0.602784809951269, 0.1442339594287627, 0.25298123061996836]) 258 | grid = transit(grid, 4, [12], [1.0]) 259 | grid = inverse(grid, 12, 9) 260 | grid = transit(grid, 8, [3], [1.0]) 261 | grid = transit(grid, 8, [8, 10, 9, 5, 4], [0.13739802796429007, 0.029174991157951916, 0.3192116565569712, 0.25920089446219136, 0.25501442985859546]) 262 | grid = sin(grid, 6, 4, 0.09945772643448075, -63.133807920697) 263 | grid = power(grid, 1, 0, 0.06129416878021343) 264 | grid = transit(grid, 8, [13, 14, 7, 5, 3, 8, 1, 4, 11, 9], [0.07703142154634139, 0.16266889493733563, 0.13191674140440357, 0.09780108874613608, 0.07526278695252407, 0.10469583394640247, 0.0932457243037449, 0.07229262736530592, 0.07707470235555856, 0.10801017844224726]) 265 | grid = power(grid, 7, 8, 2.3799816592943026) 266 | grid = sin(grid, 5, 12, 0.600042994377764, 85.6006702545412) 267 | grid = inverse(grid, 15, 0) 268 | grid = sin(grid, 8, 9, 0.39707616958377756, 37.16231712661943) 269 | grid = sin(grid, 2, 1, -3.7466085680717587, 14.928025674343061) 270 | grid = shift(grid, 10, 12, 0.28681375211832794) 271 | grid = power(grid, 5, 8, 0.5281544557364306) 272 | grid = sin(grid, 5, 11, -0.673144440372863, -62.38079972341439) 273 | grid = prod(grid, 0, [8, 9, 2, 7, 6, 1]) 274 | grid = transit(grid, 12, [4, 10, 9, 2, 14, 12, 11], [0.042234521151971745, 0.1825153522795678, 0.27103762596433184, 0.1972788079034748, 0.0478327512153379, 0.25214964239312443, 0.006951299092191472]) 275 | grid = sin(grid, 8, 6, 3.6461117148651674, -40.3336348480567) 276 | grid = prod(grid, 3, [3, 1, 9, 11]) 277 | grid = shift(grid, 6, 15, -2.7207456861641095) 278 | grid = transit(grid, 15, [13, 6, 9], [0.17274476801488867, 0.426932810471596, 0.40032242151351544]) 279 | grid = inverse(grid, 11, 15) 280 | grid = power(grid, 4, 15, 2.3965766145617677) 281 | grid = smooth_min(grid, 11, 1, 8) 282 | grid = prod(grid, 5, [5, 15, 14, 8]) 283 | grid = transit(grid, 6, [2], [1.0]) 284 | grid = transit(grid, 13, [4, 13, 8], [0.6264014322482245, 0.23408187641511977, 0.13951669133665576]) 285 | grid = shift(grid, 8, 9, 3.2979491477758076) 286 | grid = sin(grid, 3, 12, -0.22767319641770223, 25.172435804994507) 287 | grid = sin(grid, 9, 10, 3.812194119158854, 85.20583394681466) 288 | grid = sin(grid, 13, 9, 5.189712115668549, -13.305870307783124) 289 | grid = sin(grid, 0, 8, -0.2813081531876115, -75.10210391258016) 290 | grid = power(grid, 6, 6, 0.014486046165856086) 291 | grid = transit(grid, 5, [8], [1.0]) 292 | grid = shift(grid, 7, 5, -1.1255176290174376) 293 | grid = smooth_min(grid, 6, 11, 0) 294 | grid = sin(grid, 12, 6, -1.9933856549781392, -92.96707943737457) 295 | grid = transit(grid, 11, [5, 14, 0, 3, 4, 6], [0.07615720765810789, 0.2740313709752172, 0.1695088237133496, 0.15056584856178212, 0.1023181376751256, 0.2274186114164175]) 296 | grid = magnitude(grid, 9, [12], 2) 297 | grid = sin(grid, 5, 7, -1.3757024785248675, 59.84981388202152) 298 | grid = sin(grid, 10, 8, -1.8368871551516843, 48.34484312367812) 299 | grid = sin(grid, 3, 2, 3.219692657170689, -64.98291420859309) 300 | grid = transit(grid, 13, [12, 15, 13, 8, 7, 14], [0.2094178163064464, 0.30372804325002756, 0.10053726491291264, 0.05904258280511587, 0.243184512882807, 0.08408977984269055]) 301 | grid = transit(grid, 11, [10, 2, 8, 6], [0.49301795913463026, 0.1703152662436898, 0.12537686739465687, 0.21128990722702298]) 302 | grid = transit(grid, 15, [14, 12, 13, 6, 7], [0.13115926220768984, 0.08738453404434984, 0.30427221698395557, 0.23352930208594314, 0.24365468467806153]) 303 | grid = transit(grid, 2, [12], [1.0]) 304 | grid = transit(grid, 12, [12, 15], [0.6109006629753452, 0.3890993370246548]) 305 | grid = transit(grid, 6, [8], [1.0]) 306 | grid = smooth_max(grid, 4, 11, 9) 307 | grid = sin(grid, 9, 5, 2.876588672199383, -44.64391319385035) 308 | grid = transit(grid, 0, [8], [1.0]) 309 | grid = transit(grid, 11, [13, 6, 1], [0.24505903920792102, 0.6308705794553203, 0.12407038133675873]) 310 | grid = sin(grid, 9, 2, 6.091547476402439, -77.65159648242383) 311 | grid = transit(grid, 12, [7, 5], [0.575373906963971, 0.4246260930360291]) 312 | grid = magnitude(grid, 5, [4, 9, 13, 7, 6, 11], 2) 313 | grid = transit(grid, 1, [5, 14, 1], [0.20685662464461516, 0.10579996578325454, 0.6873434095721301]) 314 | grid = sin(grid, 13, 11, 1.2258799593667475, 66.95275606227898) 315 | grid = transit(grid, 12, [6], [1.0]) 316 | grid = magnitude(grid, 4, [13, 0], 2) 317 | grid = transit(grid, 10, [7, 4, 5, 8], [0.7205785380543926, 0.009231986010664349, 0.12794486645116065, 0.14224460948378234]) 318 | grid = prod(grid, 14, [7]) 319 | grid = sin(grid, 3, 5, 0.30667750866689003, 18.936754339100844) 320 | grid = power(grid, 11, 6, 0.1456176305678269) 321 | grid = sin(grid, 8, 9, 1.1255264770511006, -11.691221682084944) 322 | grid = prod(grid, 3, [6, 5]) 323 | grid = shift(grid, 0, 0, 4.463591781267054) 324 | grid = prod(grid, 12, [11, 0, 13, 9, 10, 8, 15, 12, 6]) 325 | grid = smooth_min(grid, 12, 6, 6) 326 | grid = sin(grid, 10, 12, -3.3508969910353423, -36.53264276524335) 327 | grid = transit(grid, 14, [14, 7, 8, 6], [0.2615532961267899, 0.11026330817273189, 0.2509703115400265, 0.3772130841604517]) 328 | grid = sin(grid, 4, 11, 0.0750148025545996, 93.84599316019552) 329 | grid = smooth_max(grid, 0, 8, 11) 330 | grid = transit(grid, 13, [11, 8, 9, 1, 2], [0.2372813659609297, 0.18167551157095235, 0.23406729038854324, 0.12369839158806627, 0.22327744049150858]) 331 | grid = sin(grid, 4, 9, 3.495327924160875, 10.227452077836688) 332 | grid = sin(grid, 14, 13, 2.568004319763818, 24.83561217811088) 333 | grid = sin(grid, 6, 5, 0.34670102481582077, -66.80409962054111) 334 | grid = transit(grid, 1, [3, 9, 1, 4, 14, 6, 15], [0.24085381178311666, 0.19868712524155435, 0.1931281722954742, 0.06818440244804039, 0.10253104782054577, 0.014695173481133111, 0.1819202669301355]) 335 | grid = transit(grid, 3, [15, 13, 1, 12, 6], [0.3256800441662938, 0.19983220068945678, 0.06443045193626011, 0.19949050142523514, 0.2105668017827542]) 336 | grid = shift(grid, 0, 1, -4.307585146992545) 337 | grid = sin(grid, 7, 7, 0.6433604744635049, 94.62579973437443) 338 | grid = inverse(grid, 4, 4) 339 | grid = sin(grid, 8, 0, 6.018585249436265, -73.2299442192341) 340 | grid = smooth_min(grid, 14, 1, 12) 341 | grid = sin(grid, 7, 0, 5.19319245142954, -44.42210897068386) 342 | grid = transit(grid, 14, [15, 12], [0.761893761228318, 0.238106238771682]) 343 | grid = shift(grid, 10, 6, -4.110865704722827) 344 | grid = power(grid, 8, 15, 0.19675250069085287) 345 | grid = power(grid, 6, 14, 0.07985978686246452) 346 | grid = prod(grid, 4, [8]) 347 | grid = smooth_max(grid, 7, 13, 0) 348 | grid = transit(grid, 0, [5, 8], [0.7468716048283879, 0.2531283951716122]) 349 | grid = sin(grid, 2, 7, 4.16268292668652, 30.095159521521737) 350 | grid = sin(grid, 13, 9, 2.0858388135828045, 44.680503064208295) 351 | grid = sin(grid, 11, 8, -3.4706236432180173, -34.68959492936648) 352 | grid = prod(grid, 5, [7, 4, 8, 12, 10]) 353 | grid = sin(grid, 13, 1, 6.772999801907664, -63.54794841520024) 354 | grid = sin(grid, 12, 10, -0.9151194110588524, -50.46442188002447) 355 | grid = transit(grid, 2, [14, 3], [0.4992385335693942, 0.5007614664306058]) 356 | grid = power(grid, 10, 2, 4.405835897888022) 357 | grid = sin(grid, 2, 15, -4.847790644661658, 61.42197387208125) 358 | grid = inverse(grid, 5, 14) 359 | grid = shift(grid, 1, 9, 2.258578365823189) 360 | grid = transit(grid, 13, [0, 3, 14], [0.20104552368290016, 0.5083446151706453, 0.29060986114645454]) 361 | grid = sin(grid, 7, 3, -2.1533327733234042, -43.212882475223125) 362 | grid = sin(grid, 13, 2, 1.4460613196662622, 23.566675328257716) 363 | grid = sin(grid, 3, 7, 1.5600908324936626, -10.392517190428023) 364 | grid = sin(grid, 15, 1, 0.754836725743574, -36.254615941212975) 365 | grid = sin(grid, 3, 9, 5.346260639976991, -94.98595087539259) 366 | grid = transit(grid, 10, [1, 2, 10], [0.2048295087403088, 0.5066609513955465, 0.28850953986414474]) 367 | grid = prod(grid, 7, [5, 14, 2, 13, 7, 4]) 368 | grid = inverse(grid, 0, 13) 369 | grid = transit(grid, 7, [1, 3, 10], [0.4215127886394601, 0.26365878035519397, 0.31482843100534597]) 370 | grid = smooth_min(grid, 14, 11, 3) 371 | grid = inverse(grid, 0, 3) 372 | grid = transit(grid, 0, [1], [1.0]) 373 | grid = sin(grid, 13, 0, 4.370439674943002, -72.63638415196019) 374 | grid = prod(grid, 13, [10, 3, 8, 12]) 375 | grid = sin(grid, 0, 14, 2.405670543347627, -92.32346530007302) 376 | grid = smooth_max(grid, 8, 2, 0) 377 | grid = smooth_max(grid, 13, 3, 15) 378 | grid = transit(grid, 8, [15, 14, 4, 13, 12, 8, 6, 2, 0], [0.1816853377356766, 0.10628231530365687, 0.04922158875006307, 0.08462331317148171, 0.015790078903641945, 0.20140965909960548, 0.1530504636735908, 0.17862010860654676, 0.029317134755736832]) 379 | grid = transit(grid, 15, [15, 6, 4], [0.40802982725562104, 0.38776980509326714, 0.2042003676511118]) 380 | grid = sin(grid, 8, 6, 2.19002447343762, -50.159110582502024) 381 | grid = sin(grid, 3, 13, 0.27911730457679623, 23.35078784249032) 382 | grid = transit(grid, 7, [7, 12, 14, 4], [0.4082646425578374, 0.1395125577125453, 0.09274463629776601, 0.3594781634318512]) 383 | grid = transit(grid, 10, [2, 11], [0.552836640754652, 0.447163359245348]) 384 | grid = sin(grid, 8, 12, -4.921074975923396, -76.56325185919412) 385 | grid = sin(grid, 3, 11, 2.396730907064764, -45.489703528808654) 386 | grid = transit(grid, 7, [13, 12, 10, 11, 5], [0.2691564773555254, 0.1562406026121113, 0.2031011659541174, 0.10462477857280658, 0.2668769755054394]) 387 | grid = smooth_max(grid, 8, 13, 14) 388 | grid = sin(grid, 10, 12, 2.081029840009405, 29.023667501364827) 389 | grid = magnitude(grid, 8, [4, 7, 8, 12, 13], 2) 390 | grid = smooth_max(grid, 13, 4, 3) 391 | grid = sin(grid, 6, 13, 6.014244513337356, 23.792371580401124) 392 | grid = transit(grid, 4, [5, 8, 11, 4, 10, 0], [0.2652108310768467, 0.12501591792933145, 0.05306508014114585, 0.09184867496126753, 0.19409245806743697, 0.27076703782397155]) 393 | grid = sin(grid, 9, 6, 1.5720266582834044, -21.38262791904306) 394 | grid = prod(grid, 3, [12, 9, 7, 14, 11, 8, 10, 13, 4, 6, 2]) 395 | grid = transit(grid, 13, [12, 10, 4, 2, 5, 15], [0.21621335691645346, 0.28279135813056944, 0.014981969691295885, 0.15390489793126802, 0.30459146214168054, 0.027516955188732664]) 396 | grid = sin(grid, 14, 6, 2.3273089488618877, -74.11919953293327) 397 | grid = sin(grid, 13, 3, 1.4387104885316502, -86.76001806481185) 398 | grid = power(grid, 7, 6, 0.23433211995567746) 399 | grid = sin(grid, 8, 2, -1.0666413219189432, 23.271683590871618) 400 | grid = sin(grid, 2, 11, -2.4337219024975423, 75.68193288075088) 401 | grid = transit(grid, 13, [4, 12, 15, 13, 5], [0.1351951960002691, 0.27050934040204805, 0.32992666534526716, 0.2569574621335345, 0.007411336118881272]) 402 | grid = smooth_min(grid, 3, 10, 4) 403 | grid = sin(grid, 1, 4, -4.160732453838902, 93.43381060424588) 404 | 405 | #create color space 406 | def shift_colors(x, shift): 407 | res = x.copy() 408 | for i in range(x.shape[-1]): 409 | if shift[i] > 0: res[:,:,i] = (-np.abs(((x[:,:,i] + 1) / 2) ** (1 + shift[i]) - 1) ** (1 / (1 + shift[i])) + 1) * 2 - 1 410 | if shift[i] < 0: res[:,:,i] = np.abs((1 - (x [:,:,i]+ 1) / 2) ** (1 - shift[i]) - 1) ** (1 / (1 - shift[i])) * 2 - 1 411 | return test_values(res) 412 | 413 | res = np.zeros((SIZE, SIZE, 3)) 414 | res += shift_colors(grid[:,:,0:1].repeat(3, -1), [1.7859972913733364, 1.510517025328302, 0.23840626088533767]) 415 | res += shift_colors(grid[:,:,1:2].repeat(3, -1), [0.9036737398969701, 0.802208108691278, 0.38530357122395253]) 416 | res += shift_colors(grid[:,:,2:3].repeat(3, -1), [1.0588456492992533, 0.6034242559988638, 0.8316279682917929]) 417 | 418 | res = res / 3 419 | res = ((res + 1) / 2 * 255).clip(0,255) 420 | 421 | #save results 422 | im = Image.fromarray(np.uint8(res)) 423 | im.save(os.path.basename(__file__) + '.png') 424 | 425 | #save layers 426 | img = np.zeros((SIZE * 4, SIZE * 4)) 427 | for j in range(GRID_CHANNELS): 428 | x = j % 4 429 | y = j // 4 430 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 431 | 432 | img = (img + 1) * 127.5 433 | im = Image.fromarray(np.uint8(img)) 434 | im.save(os.path.basename(__file__) + '_layers.png') 435 | 436 | -------------------------------------------------------------------------------- /examples/2e1c805f-4412-4836-89cf-099ed0ea6b1a.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/2e1c805f-4412-4836-89cf-099ed0ea6b1a.py.png -------------------------------------------------------------------------------- /examples/2e1c805f-4412-4836-89cf-099ed0ea6b1a.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/2e1c805f-4412-4836-89cf-099ed0ea6b1a.py_layers.png -------------------------------------------------------------------------------- /examples/48871c12-58f4-4ea4-8739-5d180021c3cb.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 04:17:38 UTC 3 | # GAS change date: 2021-11-28 03:58:45 UTC 4 | # GAS md5 hash: fa4b9db8bcdb760d7fde2be64723fca2 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | def inverse(x, t_indx, s_indx): 50 | res = x.copy() 51 | res[:,:,t_indx] = -x[:,:,s_indx] 52 | return test_values(res) 53 | 54 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 57 | return test_values(res) 58 | 59 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 60 | res = x.copy() 61 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 62 | return test_values(res) 63 | 64 | def shift_mod_abs(x, t_indx, s_indx, shift): 65 | res = x.copy() 66 | res[:,:,t_indx] = np.abs(np.mod((x[:,:,s_indx] + 3)/4 + shift/2, 1) * 2 - 1) * 2 - 1 67 | return test_values(res) 68 | 69 | #set initial grid 70 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 71 | 72 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 73 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 74 | 75 | grid[:,:,0] = (x * 0.8643418060594885 + y * 0.6002740205725097) / 2 76 | grid[:,:,1] = (x * 0.01183721078650768 + y * -0.7074877558164501) / 2 77 | grid[:,:,2] = (x * -0.48643728170863887 + y * 0.7203274908191206) / 2 78 | grid[:,:,3] = (x * 0.7658582693960334 + y * 0.14941321785247208) / 2 79 | grid[:,:,4] = (x * 0.9210916218391232 + y * 0.37140846720931764) / 2 80 | grid[:,:,5] = (x * 0.39136156737873007 + y * -0.06549676689056216) / 2 81 | grid[:,:,6] = (x * 0.9324751771973863 + y * -0.19588844971222885) / 2 82 | grid[:,:,7] = (x * 0.06023978890473192 + y * -0.6815582001062757) / 2 83 | grid[:,:,8] = (x * -0.6993118954667219 + y * 0.961464040384854) / 2 84 | grid[:,:,9] = (x * 0.37138346094417707 + y * -0.7566733584213707) / 2 85 | grid[:,:,10] = (x * 0.3387057689135291 + y * 0.25721938764502617) / 2 86 | grid[:,:,11] = (x * 0.12753054557270316 + y * -0.3413646845394549) / 2 87 | grid[:,:,12] = (x * -0.21127520837749425 + y * -0.43789418122650203) / 2 88 | grid[:,:,13] = (x * -0.7360271671180054 + y * -0.5198570345042122) / 2 89 | grid[:,:,14] = (x * -0.2137488758947239 + y * 0.7151440164025549) / 2 90 | grid[:,:,15] = (x * 0.525452161570175 + y * 0.5170838810547953) / 2 91 | 92 | #apply transformations to the grid 93 | grid = transit(grid, 15, [13], [1.0]) 94 | grid = transit(grid, 10, [11], [1.0]) 95 | grid = sin(grid, 4, 11, -0.4444423048102142, 35.65739417712658) 96 | grid = transit(grid, 10, [1, 2, 4, 8, 9, 0, 10], [0.2927929546388831, 0.007718693357680838, 0.1477469663745506, 0.1884644790734973, 0.07933081836191454, 0.24288926896501908, 0.041056819228454486]) 97 | grid = smooth_max(grid, 14, 9, 3) 98 | grid = transit(grid, 1, [9, 1, 6, 8], [0.14573383219711986, 0.393261614716585, 0.15407042203575053, 0.30693413105054457]) 99 | grid = transit(grid, 0, [4], [1.0]) 100 | grid = sin(grid, 9, 9, -5.765185023221378, -23.854260608016958) 101 | grid = sin(grid, 1, 9, -0.33074858378172944, 91.43915934995829) 102 | grid = sin(grid, 1, 7, -4.982895483158001, 48.43015311176555) 103 | grid = sin(grid, 6, 7, -1.7456277778753302, 3.926104632214674) 104 | grid = sin(grid, 14, 3, 3.305921145055031, -31.657818640866523) 105 | grid = shift(grid, 14, 1, -2.6212449917673943) 106 | grid = smooth_max(grid, 0, 0, 3) 107 | grid = transit(grid, 15, [4, 6, 5, 0, 13, 8, 15], [0.04937993016981887, 0.07189523311876035, 0.23372017215677587, 0.1656381009260223, 0.1916512415519109, 0.20046789503690882, 0.08724742703980289]) 108 | grid = shift(grid, 12, 9, 0.36751997503782186) 109 | grid = transit(grid, 4, [4, 9, 12, 7, 10, 0], [0.08770778747211616, 0.09593413274026749, 0.23234191159814382, 0.126984092857562, 0.10311293499781625, 0.35391914033409433]) 110 | grid = shift(grid, 6, 0, -1.9200863577873768) 111 | grid = sin(grid, 11, 6, 1.6330255345117486, -70.55485909823724) 112 | grid = sin(grid, 4, 11, -0.5439503976289264, 24.7429940222911) 113 | grid = transit(grid, 11, [0, 3, 12], [0.34493542013146294, 0.07278577552061351, 0.5822788043479236]) 114 | grid = sin(grid, 0, 8, 1.981791111856539, -96.88530536213638) 115 | grid = transit(grid, 8, [8, 13, 7, 10, 2, 4, 12], [0.013377714988077825, 0.19541608896814838, 0.197856200897302, 0.2086602147047826, 0.3315204916185357, 0.04105121980046602, 0.01211806902268753]) 116 | grid = transit(grid, 8, [11], [1.0]) 117 | grid = magnitude(grid, 9, [13], 2) 118 | grid = transit(grid, 7, [11, 14, 4, 2, 5], [0.14285083640050433, 0.5138220113235002, 0.2579219249756841, 0.0803923066261222, 0.0050129206741891235]) 119 | grid = sin(grid, 8, 3, 1.3931664732885778, -3.724387817881265) 120 | grid = sin(grid, 8, 6, -0.954690388096839, 35.09448745343994) 121 | grid = transit(grid, 3, [1], [1.0]) 122 | grid = transit(grid, 2, [1, 15, 9, 12, 4, 6], [0.2970104511612839, 0.003279012448931442, 0.2050035986523211, 0.24701548425854256, 0.009530709859697197, 0.23816074361922382]) 123 | grid = sin(grid, 3, 14, -3.3144941485476886, -42.4303697717481) 124 | grid = magnitude(grid, 9, [15, 4, 12, 5, 3, 10], 2) 125 | grid = sin(grid, 15, 9, 4.547902292406539, 83.8756521228238) 126 | grid = shift(grid, 0, 12, 1.2324692631612622) 127 | grid = sin(grid, 2, 14, 0.32836645319750335, 34.46251296479076) 128 | grid = transit(grid, 14, [12, 2], [0.3301537209031698, 0.6698462790968301]) 129 | grid = smooth_min(grid, 8, 15, 1) 130 | grid = sin(grid, 1, 15, -3.3930087007904044, 21.990775461510424) 131 | grid = shift(grid, 15, 10, 3.6187636992158665) 132 | grid = magnitude(grid, 6, [15, 9, 1, 4, 11], 2) 133 | grid = smooth_max(grid, 7, 12, 12) 134 | grid = transit(grid, 13, [1, 2, 14, 12, 13, 9], [0.206909825776135, 0.04050828088920256, 0.020124179936011094, 0.22475748713682211, 0.3909909418368703, 0.11670928442495897]) 135 | grid = shift_mod_abs(grid, 1, 1, -0.24436878593502764) 136 | grid = sin(grid, 9, 15, 0.8962775652252415, -16.279405125108482) 137 | grid = sin(grid, 12, 3, -0.8067929001139547, 21.547631900551025) 138 | grid = transit(grid, 13, [8], [1.0]) 139 | grid = smooth_max(grid, 8, 1, 0) 140 | grid = transit(grid, 0, [15, 14, 10, 0, 9, 11, 7], [0.12824519497883966, 0.27285308658758683, 0.44964500699032284, 0.03316312243208985, 0.06105158540571516, 0.012985248602454048, 0.04205675500299165]) 141 | grid = magnitude(grid, 15, [12, 7], 2) 142 | grid = shift_mod_abs(grid, 3, 0, -0.2831739773781732) 143 | grid = transit(grid, 0, [6, 9, 12, 14, 11, 2, 1], [0.21841151908620762, 0.11614622569561107, 0.037635469691718354, 0.150990060908644, 0.25731079541536744, 0.14578674672827358, 0.07371918247417789]) 144 | grid = transit(grid, 4, [6, 1, 0, 8, 5, 2, 11, 7], [0.009418247628517213, 0.2570245493759903, 0.1853964299583011, 0.1261384320857871, 0.14576422976948764, 0.04924153312389252, 0.1204166275898214, 0.10659995046820268]) 145 | grid = magnitude(grid, 8, [5, 8, 13, 2], 2) 146 | grid = transit(grid, 8, [15, 4, 1], [0.37982726077268364, 0.22616272774920443, 0.39401001147811193]) 147 | grid = transit(grid, 0, [8], [1.0]) 148 | grid = smooth_min(grid, 4, 12, 1) 149 | grid = transit(grid, 12, [2, 5, 12, 14, 6], [0.17781196954895062, 0.3262422646004365, 0.06582208521728561, 0.10591846581260655, 0.32420521482072084]) 150 | grid = transit(grid, 15, [1], [1.0]) 151 | grid = magnitude(grid, 6, [3, 8, 6, 14, 5, 11], 2) 152 | grid = transit(grid, 14, [8], [1.0]) 153 | grid = sin(grid, 10, 2, 2.8352218772954103, -68.71223416442535) 154 | grid = sin(grid, 10, 5, 2.1605893217401637, 15.929709365059637) 155 | grid = transit(grid, 14, [10], [1.0]) 156 | grid = magnitude(grid, 15, [12, 6, 9, 10, 11, 13, 5, 4, 7, 14, 3, 15, 1, 8], 2) 157 | grid = magnitude(grid, 7, [3, 1, 2, 0, 9, 10, 4, 12, 5, 14, 11], 2) 158 | grid = sin(grid, 5, 15, -2.964350843818491, 79.55949456789938) 159 | grid = transit(grid, 11, [8, 6, 15, 2, 13, 11, 7, 14, 1], [0.10410188133129882, 0.09411926975331028, 0.021286579663242513, 0.20005967989551154, 0.023693160608102434, 0.10561321311022807, 0.06987343835019526, 0.2660121392156408, 0.1152406380724702]) 160 | grid = sin(grid, 7, 5, -3.1708631377557053, 68.46601940157458) 161 | grid = sin(grid, 4, 5, -1.2008185900051624, 68.54171145511123) 162 | grid = shift_mod_abs(grid, 2, 4, -0.7698084808562446) 163 | grid = sin(grid, 6, 13, 0.7424973991974434, 53.967869150298554) 164 | grid = transit(grid, 11, [11, 9, 15, 14], [0.20036149487541682, 0.04141279144276572, 0.03464545826401203, 0.7235802554178055]) 165 | grid = transit(grid, 1, [5, 0], [0.7040503780721827, 0.29594962192781726]) 166 | grid = sin(grid, 0, 15, 1.8649566058562463, 21.461980150441562) 167 | grid = transit(grid, 1, [6, 14, 0, 12, 11, 8, 4, 10], [0.017878104396502854, 0.059820743249574114, 0.015383990845209635, 0.3884224161547507, 0.029071088744650062, 0.13199942726502703, 0.11377303925881853, 0.24365119008546693]) 168 | grid = sin(grid, 13, 4, -4.399009503963816, 66.4315857086151) 169 | grid = transit(grid, 4, [10, 8, 6], [0.1846929629170967, 0.6078893325738195, 0.2074177045090838]) 170 | grid = transit(grid, 1, [9, 8, 11, 6, 12], [0.47152135139216217, 0.14311287840521997, 0.011608525234345538, 0.05536041617613505, 0.3183968287921372]) 171 | grid = transit(grid, 13, [7, 2], [0.9821695367485404, 0.017830463251459792]) 172 | grid = magnitude(grid, 2, [8, 10, 1], 2) 173 | grid = transit(grid, 15, [6], [1.0]) 174 | grid = shift(grid, 1, 8, 2.2967671237669007) 175 | grid = sin(grid, 1, 7, 0.10649088313103464, 98.8910603178364) 176 | grid = transit(grid, 3, [0, 10], [0.3881288639719622, 0.6118711360280378]) 177 | grid = transit(grid, 7, [4, 6, 2, 15, 13], [0.26491654094685124, 0.07140941403011514, 0.31071632433752855, 0.2442434068406789, 0.10871431384482616]) 178 | grid = transit(grid, 10, [12, 0], [0.14533502815984384, 0.8546649718401562]) 179 | grid = transit(grid, 6, [3, 6, 1, 12, 14], [0.04339976408966444, 0.1071204469621808, 0.5453782310120199, 0.08783005496708463, 0.21627150296905026]) 180 | grid = transit(grid, 6, [10, 6, 13], [0.22419455101864633, 0.13008753544075727, 0.6457179135405964]) 181 | grid = sin(grid, 8, 11, 1.6539538766142892, -47.038813670826364) 182 | grid = transit(grid, 8, [11, 7, 10, 8, 3, 0], [0.1963951062356543, 0.046014545280806035, 0.3265714138391151, 0.07178180618294111, 0.24538439358253197, 0.11385273487895149]) 183 | grid = shift(grid, 6, 2, 5.881308612722795) 184 | grid = shift(grid, 7, 0, -0.019202909087152793) 185 | grid = sin(grid, 5, 12, 0.31694238903875316, -3.233795531409015) 186 | grid = sin(grid, 8, 7, -0.33608442637489877, -71.58463378044921) 187 | grid = transit(grid, 12, [6, 12], [0.2375837503300028, 0.7624162496699971]) 188 | grid = transit(grid, 2, [15, 4], [0.7096415729282884, 0.29035842707171167]) 189 | grid = magnitude(grid, 9, [12], 2) 190 | grid = transit(grid, 0, [4, 15, 7, 9, 3], [0.08554231371381717, 0.2728357537506513, 0.19024564886103396, 0.1079452932459428, 0.3434309904285548]) 191 | grid = shift_mod_abs(grid, 10, 0, -0.45488639128774455) 192 | grid = transit(grid, 1, [14, 11, 15, 10, 4, 6], [0.34310478585871124, 0.2850522365459595, 0.12082091807595094, 0.20672890654080242, 0.015096662669016409, 0.029196490309559422]) 193 | grid = transit(grid, 3, [1, 0, 8, 14, 9], [0.019274577938263752, 0.052792687396621664, 0.536974093270921, 0.12992441155335122, 0.2610342298408423]) 194 | grid = transit(grid, 1, [2, 12, 7, 15, 11, 6], [0.3968004274130147, 0.1524052948446302, 0.06963697400590556, 0.17716800847108594, 0.18972239876678001, 0.014266896498583545]) 195 | grid = sin(grid, 2, 11, -4.326786621243502, 79.41593080870732) 196 | grid = transit(grid, 8, [14, 10, 1, 8, 9, 3, 13, 0], [0.08733704436513581, 0.2763650889224452, 0.3434528972768334, 0.02169407915491428, 0.12884075605202375, 0.06335090207138272, 0.05883868494322188, 0.020120547214042817]) 197 | grid = shift(grid, 13, 3, 2.4093814514158725) 198 | grid = smooth_min(grid, 13, 0, 14) 199 | grid = transit(grid, 11, [10], [1.0]) 200 | grid = shift(grid, 4, 7, 3.5546783833684685) 201 | grid = sin(grid, 13, 5, -0.7760984824914829, 93.92923422345075) 202 | grid = transit(grid, 1, [7, 13, 2], [0.3997621274866039, 0.03237536935820857, 0.5678625031551874]) 203 | grid = magnitude(grid, 3, [13, 7], 2) 204 | grid = sin(grid, 3, 2, 3.053392675882956, 85.87323630747014) 205 | grid = transit(grid, 2, [0, 1, 8], [0.635417492645503, 0.12065217241495814, 0.24393033493953883]) 206 | grid = sin(grid, 7, 10, 0.01984882825835476, 32.6390766179679) 207 | grid = transit(grid, 12, [0, 11, 1, 10], [0.37404261495423835, 0.15018069696859296, 0.2852305991482461, 0.1905460889289226]) 208 | grid = sin(grid, 12, 12, -0.783622286060866, 60.796038516038266) 209 | grid = sin(grid, 4, 0, 0.9202607929605592, 50.60080339642664) 210 | grid = magnitude(grid, 8, [14, 15, 9, 13, 11], 2) 211 | grid = sin(grid, 0, 7, -0.5484589035400347, 91.19276342376912) 212 | grid = transit(grid, 12, [2, 9, 14, 7], [0.21556005740890646, 0.5704984675306708, 0.0670744449747471, 0.14686703008567573]) 213 | grid = shift_mod_abs(grid, 10, 6, 0.6939165629400947) 214 | grid = sin(grid, 1, 4, -1.8208999273846458, 56.008744869832185) 215 | grid = shift_mod_abs(grid, 0, 11, 0.6427921466703721) 216 | grid = shift(grid, 6, 2, 0.34713644837039526) 217 | grid = smooth_max(grid, 9, 13, 6) 218 | grid = transit(grid, 1, [0, 11, 1, 8, 3, 14, 4, 10], [0.10218917313265939, 0.15195995576286386, 0.38873312423491985, 0.08300167783394967, 0.12478870057462985, 0.060691799898575156, 0.08392035096539706, 0.004715217597005273]) 219 | grid = sin(grid, 10, 7, 4.316772531765781, -96.41095941878208) 220 | grid = magnitude(grid, 12, [13, 5, 11, 9, 8, 4, 14, 12], 2) 221 | grid = sin(grid, 1, 7, 3.670662837502202, -9.671342511665571) 222 | grid = sin(grid, 1, 6, -0.6580324202659389, -56.22533850788125) 223 | grid = transit(grid, 7, [10, 6, 8, 1, 3], [0.02048003691326924, 0.18614064631410482, 0.14324824041009226, 0.2832528419381784, 0.36687823442435513]) 224 | grid = transit(grid, 0, [13, 8], [0.4478804209396015, 0.5521195790603984]) 225 | grid = sin(grid, 0, 6, 2.080077748457945, 82.47806511148684) 226 | grid = sin(grid, 7, 7, 4.062385643542771, -79.15800536389561) 227 | grid = sin(grid, 1, 8, -4.20908133426767, -75.82246694036505) 228 | grid = sin(grid, 12, 12, -0.6578534013079593, 81.57949367948908) 229 | grid = smooth_min(grid, 0, 7, 10) 230 | grid = sin(grid, 8, 6, 5.191110412839802, -34.79955376647112) 231 | grid = magnitude(grid, 14, [4, 3, 7, 12], 2) 232 | grid = sin(grid, 1, 1, -0.7842185152414949, 51.3894344124252) 233 | grid = sin(grid, 6, 6, 2.254906748283988, 24.07820781500743) 234 | grid = magnitude(grid, 5, [7], 2) 235 | grid = sin(grid, 2, 11, -2.6046413831226727, -56.13370662492196) 236 | grid = transit(grid, 5, [14], [1.0]) 237 | grid = shift(grid, 4, 1, 0.5686746583570609) 238 | grid = smooth_max(grid, 15, 1, 13) 239 | grid = shift(grid, 10, 2, -5.309185976153751) 240 | grid = sin(grid, 15, 13, -5.735523741847674, -16.865091601299625) 241 | grid = shift(grid, 3, 10, 0.12135859612631647) 242 | grid = shift_mod_abs(grid, 5, 7, -0.9572908675655298) 243 | grid = sin(grid, 9, 1, 0.7294080416804347, -49.31020377326873) 244 | grid = sin(grid, 1, 4, 1.1329614072124552, -94.00139174909971) 245 | grid = transit(grid, 8, [5, 9], [0.36967294209271545, 0.6303270579072846]) 246 | grid = sin(grid, 7, 5, -0.8978425971656077, 11.193619774449132) 247 | grid = shift_mod_abs(grid, 13, 12, -0.3688937668775716) 248 | grid = transit(grid, 3, [8, 1, 5], [0.2928245751240868, 0.06829042199853974, 0.6388850028773735]) 249 | grid = sin(grid, 11, 4, 1.9765702782027827, -59.2554274901459) 250 | 251 | #create color space 252 | colors = np.zeros((3, 3)) 253 | colors[0] = [8, 186, 121] 254 | colors[1] = [166, 107, 197] 255 | colors[2] = [155, 215, 222] 256 | 257 | res = np.zeros((SIZE, SIZE, 3)) 258 | res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0] 259 | res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1] 260 | res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2] 261 | 262 | res = (res / 3 * 1.9331820449317627).clip(0,255) 263 | 264 | #save results 265 | im = Image.fromarray(np.uint8(res)) 266 | im.save(os.path.basename(__file__) + '.png') 267 | 268 | #save layers 269 | img = np.zeros((SIZE * 4, SIZE * 4)) 270 | for j in range(GRID_CHANNELS): 271 | x = j % 4 272 | y = j // 4 273 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 274 | 275 | img = (img + 1) * 127.5 276 | im = Image.fromarray(np.uint8(img)) 277 | im.save(os.path.basename(__file__) + '_layers.png') 278 | -------------------------------------------------------------------------------- /examples/48871c12-58f4-4ea4-8739-5d180021c3cb.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/48871c12-58f4-4ea4-8739-5d180021c3cb.py.png -------------------------------------------------------------------------------- /examples/48871c12-58f4-4ea4-8739-5d180021c3cb.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/48871c12-58f4-4ea4-8739-5d180021c3cb.py_layers.png -------------------------------------------------------------------------------- /examples/5b078a1d-acf6-4fda-acf8-320dbd5f371c.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 02:06:28 UTC 3 | # GAS change date: 2021-11-28 01:31:12 UTC 4 | # GAS md5 hash: c291ffb9de6ad6dea37797c00163f591 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 30 16 | def test_values(arr): 17 | if np.isnan(arr).any(): 18 | raise Exception('Array has None elements!') 19 | 20 | if np.amin(arr) < -1 or np.amax(arr) > 1: 21 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 22 | 23 | return arr 24 | 25 | #define grid transformation methods 26 | 27 | def transit(x, t_indx, s_indx, alphas): 28 | res = x.copy() 29 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 30 | return test_values(res.clip(-1,1)) 31 | 32 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 33 | res = x.copy() 34 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 35 | return test_values(res) 36 | 37 | def power(x, t_indx, s_indx, p = 1): 38 | res = x.copy() 39 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 40 | return test_values(res) 41 | 42 | def magnitude(x, t_indx, s_indx, ord = 2): 43 | res = x.copy() 44 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 45 | return test_values(res) 46 | 47 | #set initial grid 48 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 49 | 50 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 51 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 52 | 53 | phi = np.pi / 4 54 | rx = (x * np.cos(phi) - y * np.sin(phi)) / 1.5 55 | ry = (x * np.cos(phi) + y * np.sin(phi)) / 1.5 56 | 57 | 58 | for i in range(15): 59 | grid[:,:,i * 2 + 0] = x 60 | grid[:,:,i * 2 + 1] = y 61 | 62 | #apply transformations to the grid 63 | grid = transit(grid, 9, [5, 24, 15, 3], [0.5342212021626492, 0.18147076392900563, 0.055633740504602715, 0.22867429340374243]) 64 | grid = transit(grid, 26, [22, 26, 29, 19, 8, 21, 7, 10, 11, 25, 9, 0], [0.05696102197584366, 0.26285222924225504, 0.0919079612051198, 0.1687527806884494, 0.11085010574249453, 0.05902176129124312, 0.011214159943138803, 0.04445927335667039, 0.12588318336806506, 0.017264056162267945, 0.02253705125837301, 0.02829641576607929]) 65 | grid = transit(grid, 11, [18, 5, 27, 23, 0, 28, 1, 7, 10, 6, 22, 20, 12, 14], [0.13683569469872395, 0.016959388954744067, 0.03663160854125827, 0.002847112263463712, 0.1157918799233711, 0.08397448090630324, 0.14414551091367567, 0.0021601192347748058, 0.03820829976675248, 0.24869202059053816, 0.03239972241226923, 0.03675275934433129, 0.02289243524271101, 0.08170896720708293]) 66 | grid = magnitude(grid, 12, [18], 2) 67 | grid = sin(grid, 9, 24, -0.5197749708846731, 15.854217887574976) 68 | grid = sin(grid, 0, 24, -0.9837158181933741, -71.02392680503814) 69 | grid = transit(grid, 13, [26, 3, 15, 22, 9], [0.06742451457475923, 0.12281320801630513, 0.04161211333159292, 0.35567601456345893, 0.41247414951388384]) 70 | grid = transit(grid, 18, [28, 8, 19, 23, 5, 10, 22, 4, 0], [0.19499065845684085, 0.16530700785043909, 0.023804434336736176, 0.11381052492943354, 0.025890588409873856, 0.03293541341724035, 0.19677542129271589, 0.07944659605729233, 0.16703935524942787]) 71 | grid = sin(grid, 15, 3, -7.8029197241866, 87.90196568906993) 72 | grid = transit(grid, 5, [27, 22, 1], [0.23158505830919715, 0.6081254056813405, 0.16028953600946239]) 73 | grid = sin(grid, 29, 16, 2.873804394920092, 27.43482722191908) 74 | grid = transit(grid, 8, [22, 8, 3, 2, 15, 27, 4, 0], [0.07040696946829501, 0.09245037606429185, 0.08572118214761944, 0.07904402889523246, 0.17642651560212103, 0.02251048152604197, 0.2642463926831366, 0.2091940536132616]) 75 | grid = transit(grid, 23, [21], [1.0]) 76 | grid = transit(grid, 23, [23, 9, 24, 8, 22, 26, 21, 14, 10], [0.08134327652223117, 0.19291722683799986, 0.009130363704744729, 0.06972659674300093, 0.07539663295186692, 0.10945404198606352, 0.055844354010005634, 0.25921661695123077, 0.14697089029285645]) 77 | grid = transit(grid, 11, [16, 22, 0, 6, 23], [0.11937697094300885, 0.06582896844008528, 0.10741157627327866, 0.3116438045579353, 0.395738679785692]) 78 | grid = transit(grid, 6, [17, 7, 11, 15, 14, 2, 28, 10, 12], [0.1769994584035045, 0.06251707636911402, 0.24665496513570134, 0.06595276596590365, 0.11364312885348776, 0.13900251803789462, 0.07609885164897781, 0.014977661375232813, 0.10415357421018354]) 79 | grid = transit(grid, 18, [13, 28], [0.18237735040537398, 0.817622649594626]) 80 | grid = sin(grid, 14, 21, -3.2769715256005334, 33.341014144234634) 81 | grid = transit(grid, 27, [22, 10, 0], [0.37903105988216274, 0.027903296061249153, 0.5930656440565881]) 82 | grid = sin(grid, 13, 19, -1.0083057747035085, 45.32663709059881) 83 | grid = sin(grid, 21, 29, -2.033902738635562, 83.18637055692568) 84 | grid = sin(grid, 21, 20, 3.724200166863936, 64.11265315372938) 85 | grid = power(grid, 5, 28, 0.5040698006520863) 86 | grid = transit(grid, 27, [15, 13, 0, 23, 4, 12], [0.16836214550922596, 0.09088633645917937, 0.12832532709494834, 0.19428442145545552, 0.11551692680955276, 0.3026248426716379]) 87 | grid = transit(grid, 26, [8, 28, 19, 12], [0.12254915908883034, 0.049158806834715456, 0.2548836014126827, 0.5734084326637715]) 88 | grid = sin(grid, 8, 22, 0.28963704045629785, 14.642974186104624) 89 | grid = transit(grid, 4, [1, 6, 11, 9, 16, 5, 7], [0.2908557143577597, 0.26104994960954353, 0.10617777722136651, 0.08395560557363395, 0.0755743561440244, 0.02055115744063781, 0.161835439653034]) 90 | grid = transit(grid, 0, [9, 29, 2, 21, 0, 11, 26, 8, 24, 28, 12, 14, 5, 27], [0.11751323724268951, 0.08606364240186842, 0.08258664640517607, 0.14599005593016762, 0.023503498981713042, 0.09960938327534487, 0.10311378807858956, 0.049182823549559086, 0.07706454488212051, 0.03182325629530442, 0.0026883278635587552, 0.09205206091316889, 0.04997214485121891, 0.03883658932952038]) 91 | grid = magnitude(grid, 4, [3, 15, 14, 4, 24], 2) 92 | grid = power(grid, 20, 21, 0.8369247988654179) 93 | grid = transit(grid, 19, [0, 5], [0.09676039555415433, 0.9032396044458456]) 94 | grid = sin(grid, 29, 29, -0.9643673506468063, 8.967437246119388) 95 | grid = sin(grid, 14, 1, 0.15139570426619076, -40.59378530824198) 96 | grid = transit(grid, 28, [26, 27, 3, 25, 9, 14, 16, 19, 21, 22, 10, 7, 6, 11], [0.03846283630801191, 0.003611165070086529, 0.016386375670539105, 0.03325226481143111, 0.07248141408219415, 0.07574051112729943, 0.025136664847969954, 0.09140666537823693, 0.11688378406685693, 0.13391881271054026, 0.19792069866332154, 0.0069953919558150965, 0.10553327699478507, 0.08227013831291184]) 97 | grid = sin(grid, 14, 17, -1.6536754594921832, -38.27968476791121) 98 | grid = transit(grid, 3, [24, 4, 21, 13, 15, 20, 5, 2, 18, 10, 8, 26, 25, 0, 22, 29], [0.043261455138004605, 0.09701099620993626, 0.02330623238287478, 0.002034833032158639, 0.07579485773048504, 0.11071509824560882, 0.009774323938956175, 0.04781055561128071, 0.048216338072515415, 0.18253805904361245, 0.12137806592285647, 0.06336045759588786, 0.0289834486908499, 0.002438501994089762, 0.08636165041317383, 0.057015125977709254]) 99 | grid = transit(grid, 4, [23, 29, 21, 2, 3], [0.13700876091088077, 0.2143789960591354, 0.21815790353798725, 0.38176010336713523, 0.04869423612486131]) 100 | grid = transit(grid, 5, [5, 0, 12, 10, 26, 1, 3, 14, 2, 15, 7, 29, 25, 16, 8], [0.08299901497093495, 0.0007990389558318802, 0.0398269346802915, 0.09815788008041128, 0.003191584435749173, 0.016639034177236122, 0.10558028964441604, 0.05996226828205053, 0.036106635758057615, 0.13934965910622088, 0.059254497545744876, 0.1279429548882897, 0.07666322625023604, 0.03461467798520952, 0.11891230323931992]) 101 | grid = magnitude(grid, 13, [13, 18, 2, 6, 0, 24], 2) 102 | grid = transit(grid, 3, [7, 22], [0.7008249200828205, 0.2991750799171795]) 103 | grid = transit(grid, 8, [16, 14, 0, 8, 23, 12, 13, 28], [0.054554519558812804, 0.0634083121537979, 0.061763274064731144, 0.22655341867476142, 0.26362052667155217, 0.06293326171754145, 0.024153690767067026, 0.24301299639173612]) 104 | grid = transit(grid, 12, [2, 0, 25, 4, 11, 20], [0.2135727198690867, 0.2602478929854192, 0.036054564699847955, 0.029549321664014874, 0.19439620047101405, 0.26617930031061726]) 105 | grid = sin(grid, 12, 29, -2.0606158867391033, 49.041181245520846) 106 | grid = transit(grid, 2, [1, 18, 25, 7, 4, 28, 22, 0, 2, 29, 11, 14, 8, 21, 16, 13, 3, 9, 20, 10, 27, 26, 23, 5, 6], [0.022961767783264937, 0.05216151564895142, 0.06700378538854872, 0.004868404084079884, 0.031119815532516526, 0.06817549828378006, 0.06589765610348139, 0.06192301312443225, 0.0010172298968791822, 0.05043368611785926, 0.012663403673358928, 0.04345946859628934, 0.036083635881321866, 0.017571690463611844, 0.026917561776311466, 0.03758362471596475, 0.023367838545381096, 0.05901741741171624, 0.0377305636240221, 0.1341011079951387, 0.014123583108795754, 0.06457810005715973, 0.02429131114943675, 0.008081204440561181, 0.0348671165971368]) 107 | grid = transit(grid, 15, [27, 1, 5, 2, 22, 3, 0, 12, 8, 25, 6, 15, 23, 16, 26], [0.09276096236215951, 0.055987479578727545, 0.03389928739157258, 0.10048460322530173, 0.18808250644766542, 0.15052093262678393, 0.010305629775380134, 0.02733510312887793, 0.01962295296713035, 0.058735304839641365, 0.10684676338951316, 0.0385674598842383, 0.06631728140180648, 0.031899953317147636, 0.01863377966405387]) 108 | grid = power(grid, 17, 11, 0.6101129604159466) 109 | grid = magnitude(grid, 24, [1, 12, 11, 17, 10, 21, 25, 4, 28, 19, 20, 3, 7, 0, 15, 27, 22, 29, 9, 18, 14, 2, 6], 2) 110 | grid = sin(grid, 12, 19, -1.2971484605178953, 43.6253219584718) 111 | grid = transit(grid, 2, [8, 7, 29, 26, 24], [0.050019232441529594, 0.20552781686115407, 0.20508495691807016, 0.33655248905731455, 0.20281550472193155]) 112 | grid = transit(grid, 22, [26, 4, 9, 6, 28, 23], [0.12501784549867087, 0.17854573410869207, 0.151199454897825, 0.15354236191147705, 0.282732246330031, 0.10896235725330396]) 113 | grid = transit(grid, 22, [17, 6, 27, 25, 26], [0.17138763442513022, 0.385897807116071, 0.1332857834306504, 0.1272177111376481, 0.18221106389050015]) 114 | grid = magnitude(grid, 9, [26, 13, 11, 28, 7, 18, 6, 19, 5, 25, 21, 27, 16, 9, 1, 20, 0, 15, 23], 2) 115 | grid = sin(grid, 22, 5, 4.201204510461814, 40.04612040712763) 116 | grid = sin(grid, 19, 23, -2.014006414093969, 82.36876582998593) 117 | grid = transit(grid, 27, [22, 23, 7], [0.45404412320349574, 0.5035642851999552, 0.042391591596549094]) 118 | grid = transit(grid, 19, [19, 28, 27], [0.06178259935534135, 0.30030960742588425, 0.6379077932187743]) 119 | grid = sin(grid, 2, 11, -1.71578256308278, -82.65630005314819) 120 | grid = sin(grid, 19, 21, 3.1366867450792912, -84.93839154346348) 121 | grid = sin(grid, 3, 28, 1.37302236191729, 98.05962588321242) 122 | grid = sin(grid, 20, 13, -2.7518816568996365, 83.8982567146225) 123 | grid = transit(grid, 11, [22, 15, 17], [0.5298249864464857, 0.2568271935470114, 0.21334782000650296]) 124 | grid = power(grid, 14, 5, 2.4408262676094887) 125 | grid = transit(grid, 24, [24, 6, 4, 10, 17], [0.0027748240616344835, 0.10747526529365764, 0.6622610259702931, 0.13287454330184686, 0.09461434137256781]) 126 | grid = magnitude(grid, 29, [11, 14, 6, 22], 2) 127 | grid = sin(grid, 28, 12, 1.927354608713083, -12.448015373326655) 128 | grid = power(grid, 17, 5, 1.0690152536243072) 129 | grid = power(grid, 7, 26, 0.6113556322136905) 130 | grid = transit(grid, 14, [7], [1.0]) 131 | grid = power(grid, 25, 21, 0.4864252475968893) 132 | grid = sin(grid, 1, 6, -2.310875140198122, 56.63605560916508) 133 | grid = sin(grid, 12, 14, 6.572104367096143, 19.46422100511556) 134 | grid = power(grid, 2, 6, 1.2452134857106352) 135 | grid = transit(grid, 4, [13, 10, 7, 27, 2, 4, 5, 24], [0.22348141167591426, 0.051871327264774066, 0.3198301502833227, 0.12951440211074308, 0.013943677208805948, 0.247897746708903, 0.0024775594076404026, 0.010983725339896614]) 136 | grid = magnitude(grid, 4, [17, 3, 7, 15, 23, 14, 0, 13, 24, 19, 16, 29], 2) 137 | grid = sin(grid, 16, 19, -0.009890625113838244, -31.62952349347117) 138 | grid = transit(grid, 29, [2, 1, 15, 13, 29, 20, 12, 28, 21, 14, 10, 24, 26, 3, 27, 25, 4, 16], [0.001913611310610904, 0.0221974839291764, 0.07249649100798512, 0.008225058795441931, 0.00936969956452074, 0.14055153571214585, 0.1421614608769809, 0.07696603874677749, 0.057585891195947134, 0.04310781483768589, 0.04904595273956045, 0.027316489600972826, 0.05579697380780524, 0.018415247618446293, 0.09690732924674401, 0.08248550422431089, 0.041493619291884, 0.053963797493003916]) 139 | grid = sin(grid, 19, 25, -1.5749947127413462, 5.481985056952851) 140 | grid = transit(grid, 9, [8, 20, 4, 5, 7, 27, 6, 3, 2, 10, 22, 13, 18, 16, 14], [0.11171580697226094, 0.14779148171284562, 0.005323991760959894, 0.0448445090169912, 0.24211415311353443, 0.012879192736877453, 0.004273108435920738, 0.00374224842115929, 0.09488639826891304, 0.11402526834535591, 0.03957742921442171, 0.0852190153472913, 0.04074236777321982, 0.04134830299661409, 0.01151672588363467]) 141 | grid = transit(grid, 7, [3, 29, 28, 11, 27, 6], [0.01626174954585564, 0.25125489958964903, 0.07731079995542785, 0.2335606296983943, 0.15261875930168334, 0.2689931619089899]) 142 | grid = sin(grid, 2, 14, 0.6800552619819925, 17.47211561715551) 143 | grid = sin(grid, 19, 11, 4.667405774561584, -1.6287784849059506) 144 | grid = sin(grid, 28, 2, -5.847665232494359, 82.95526347971136) 145 | grid = sin(grid, 12, 27, 0.20923825702377147, 32.4656754705087) 146 | grid = power(grid, 11, 0, 1.1690162913803896) 147 | grid = sin(grid, 27, 14, 2.1386433074177598, 77.44144993392325) 148 | grid = sin(grid, 7, 23, 1.6125644901529133, 14.599926260775703) 149 | grid = sin(grid, 2, 7, 1.9082351588825568, 75.9511802229386) 150 | grid = transit(grid, 13, [26, 3, 25, 15, 18, 19, 4, 11, 28, 23, 12, 29, 16, 24], [0.060484483354069675, 0.025691031942958072, 0.03327745410834752, 0.08000433814480484, 0.021342842326285413, 0.12263805286192847, 0.09568926638221639, 0.03533862945127015, 0.05836067922149172, 0.04040146920803522, 0.20909243356931775, 0.039391367148685345, 0.0037599226906523562, 0.17452802958993713]) 151 | grid = magnitude(grid, 18, [28], 2) 152 | grid = sin(grid, 12, 28, -0.7138080657232817, -25.17896160309101) 153 | grid = sin(grid, 10, 25, 0.16452173461063874, 20.53144957567801) 154 | grid = sin(grid, 24, 28, 1.7114257185269648, -16.88035665276564) 155 | grid = sin(grid, 27, 2, 3.772271500164768, -82.70880061137858) 156 | grid = transit(grid, 22, [26, 15, 28, 24, 9, 3, 10, 5], [0.03269781016679069, 0.10397323748266908, 0.10903911878980321, 0.24320164141735232, 0.026864124080134992, 0.037925178814216406, 0.17562538722899665, 0.27067350202003665]) 157 | grid = power(grid, 7, 25, 0.10901004341184871) 158 | grid = sin(grid, 14, 5, -3.660166312732688, -6.696959977237952) 159 | grid = power(grid, 13, 0, 0.49166855595544295) 160 | grid = magnitude(grid, 28, [1, 27, 12, 17, 26, 2, 23], 2) 161 | grid = sin(grid, 22, 19, -2.124284967368472, -2.880355919250576) 162 | grid = transit(grid, 28, [16], [1.0]) 163 | grid = sin(grid, 12, 18, -0.34014345030008813, 60.16824179990223) 164 | grid = sin(grid, 21, 10, -3.483170917523271, -41.903219565975114) 165 | grid = sin(grid, 16, 16, 3.2128490769277525, -25.33424213982451) 166 | grid = sin(grid, 26, 8, 6.849418376842019, -67.74330285285896) 167 | grid = transit(grid, 10, [20], [1.0]) 168 | grid = transit(grid, 8, [4, 19, 1, 5, 11, 2, 23, 16, 21, 22], [0.05179731974708694, 0.12403092406110004, 0.19485036904948164, 0.10466934508452978, 0.118165512092452, 0.018467170306217893, 0.02692436478214138, 0.09593037433546091, 0.11750715806289998, 0.1476574624786296]) 169 | grid = sin(grid, 1, 22, -1.2165246282521964, 76.78894839247019) 170 | grid = magnitude(grid, 4, [18, 4, 17, 15, 19, 27, 6, 25, 26, 3, 5, 21, 11, 12, 2, 10], 2) 171 | grid = sin(grid, 15, 3, 0.4699840466161701, -82.17071358913408) 172 | grid = transit(grid, 16, [11, 29, 26, 25, 9, 4, 17], [0.31066945264072526, 0.10355519610573115, 0.19982221616784535, 0.11306962683213102, 0.1381097182228766, 0.08128993039410773, 0.05348385963658277]) 173 | grid = transit(grid, 3, [16, 20, 10, 19, 21, 26, 3], [0.15369433642334232, 0.22109928006710988, 0.25923631422461896, 0.0008868462982403476, 0.06972289678696271, 0.2597049701670489, 0.03565535603267668]) 174 | grid = magnitude(grid, 7, [7, 28, 27, 4, 26, 12, 16, 19, 3, 25, 14, 5, 17, 21, 11, 9, 23, 15, 1, 24, 13, 29, 6], 2) 175 | grid = transit(grid, 7, [17, 1, 7, 27, 26, 19], [0.23911136462030186, 0.2907280268094017, 0.0033374280741183494, 0.14814090799869886, 0.17425260420686484, 0.14442966829061465]) 176 | grid = sin(grid, 3, 12, -1.6920423533626339, -92.59904388935958) 177 | grid = power(grid, 19, 12, 0.388695862448389) 178 | grid = transit(grid, 24, [26, 2, 4, 20, 1, 22, 7, 14, 12, 16, 19, 6, 28], [0.03965288117909151, 0.08428158704717979, 0.05827316032627775, 0.15304473246425426, 0.11726383499640346, 0.02567204148012234, 0.08960560106280817, 0.08901190002917868, 0.051855543967372776, 0.05451549903363306, 0.06284211682978409, 0.032607385938685826, 0.1413737156452082]) 179 | grid = transit(grid, 18, [28, 12, 9, 14], [0.18464670109203463, 0.2279692779262029, 0.14517286510575678, 0.44221115587600573]) 180 | grid = transit(grid, 24, [13, 14, 21, 1, 2, 23, 16, 26, 28], [0.13610824889750922, 0.162667601398381, 0.0005027495393632268, 0.15090122658014907, 0.010027448237896362, 0.15202952044395532, 0.04235107233813056, 0.28324879645148465, 0.062163336113130734]) 181 | grid = sin(grid, 25, 3, 2.4166406413169588, -3.3426483067969315) 182 | grid = power(grid, 11, 0, 1.162518996377438) 183 | grid = transit(grid, 1, [7, 9, 21], [0.04496820000408554, 0.4307233308539091, 0.5243084691420052]) 184 | grid = sin(grid, 15, 17, 3.315514373963203, -4.671422634747472) 185 | grid = sin(grid, 15, 17, -2.5156762865779276, -10.281620078059774) 186 | grid = sin(grid, 22, 1, 2.150755584348058, 48.74011455570499) 187 | grid = transit(grid, 19, [26, 15, 9, 3, 24, 19, 21, 8, 11, 6, 5, 13], [0.08197490696106627, 0.04242603630671729, 0.2513682413592857, 0.09438465710411338, 0.033170193730531004, 0.009296339537185058, 0.17257610274908144, 0.002094607329782745, 0.02076842886674546, 0.04741398789342127, 0.06740722805445759, 0.17711927010761286]) 188 | grid = power(grid, 5, 11, 2.200137777544162) 189 | grid = magnitude(grid, 22, [15, 11, 5, 20, 17], 2) 190 | grid = transit(grid, 15, [14, 7, 13, 23, 18, 22], [0.39711790660305935, 0.10005764641302994, 0.020004629332074846, 0.10136997101855946, 0.3314049281636426, 0.050044918469633895]) 191 | grid = sin(grid, 9, 15, 4.845773199913624, -25.290397520285197) 192 | grid = sin(grid, 16, 12, -2.6676997280502635, 28.00430465697923) 193 | grid = magnitude(grid, 14, [29, 20, 10, 21, 19, 12, 13, 3, 8], 2) 194 | grid = transit(grid, 27, [3, 1], [0.3703813968764175, 0.6296186031235825]) 195 | grid = transit(grid, 17, [24, 6, 10, 16], [0.32014210004756527, 0.12652169108460948, 0.16777994913747443, 0.38555625973035085]) 196 | grid = sin(grid, 25, 7, -2.1426266195134454, -3.1644476332626255) 197 | grid = transit(grid, 26, [22, 3, 19, 2], [0.009839566520220533, 0.289566642991817, 0.07746006519602204, 0.6231337252919403]) 198 | grid = sin(grid, 25, 24, 1.7620189533790476, -76.2560115530672) 199 | grid = sin(grid, 8, 29, -5.838374035074204, 29.05291375876763) 200 | grid = transit(grid, 28, [18, 24, 0, 14, 5], [0.11469465373343145, 0.20300150934525973, 0.3718974944510403, 0.201419646915071, 0.1089866955551974]) 201 | grid = magnitude(grid, 21, [19, 7, 24], 2) 202 | grid = sin(grid, 0, 8, 8.0892340494222, 12.285628383225841) 203 | grid = transit(grid, 1, [22, 1, 11], [0.06574989917865341, 0.18358002642339144, 0.7506700743979552]) 204 | grid = sin(grid, 21, 5, -5.242848986604367, -51.41853035167971) 205 | grid = magnitude(grid, 13, [24, 17, 20, 16], 2) 206 | grid = transit(grid, 26, [24, 25, 11, 22, 29, 8, 0, 15, 10, 26, 20, 17, 5, 21, 4], [0.005413789359371113, 0.026237865700660983, 0.03704805318109931, 0.023128801366330942, 0.07651102576538484, 0.2378008180256055, 0.01361783518301368, 0.06528900735130828, 0.05119881415330483, 0.006446599815310911, 0.11653528032841295, 0.13829919754660122, 0.14014303788419089, 0.04530810796146451, 0.017021766377940128]) 207 | grid = sin(grid, 14, 15, -0.4701982983600904, 82.11017985179095) 208 | grid = transit(grid, 16, [11, 28, 24], [0.23650122993595926, 0.020704964799899486, 0.7427938052641412]) 209 | grid = transit(grid, 7, [10, 1, 8, 18, 5, 9, 29, 13, 17, 22, 12, 11, 24, 21, 15, 0, 27], [0.018616470504328953, 0.0850825911475122, 0.06264982377106698, 0.05495042450686669, 0.14906080454116932, 0.03208384440226264, 0.1683480881841215, 0.10921953567714807, 0.0206889408055928, 0.033974978185684096, 0.049782447160823064, 0.024808945476424628, 0.07924381952889503, 0.061513164223337365, 0.004364614930180321, 0.029102584202264768, 0.016508922752321607]) 210 | grid = transit(grid, 2, [25, 19, 11, 26, 17], [0.3331085125628427, 0.36646885049052763, 0.10160012193132573, 0.12168127271994268, 0.07714124229536128]) 211 | grid = sin(grid, 9, 14, 0.4522229355665633, 85.36781156545163) 212 | grid = sin(grid, 20, 23, -0.9816627988417208, -25.13689221271966) 213 | grid = transit(grid, 17, [18, 27, 15, 7, 21, 12, 9, 24, 10, 6, 8, 20, 28, 26, 4, 23, 19, 25, 3, 13, 0], [0.0031304472263436168, 0.11805321689864362, 0.05226820388182516, 0.1095229536466883, 0.09250835427168942, 0.028423035248341444, 0.10829727679690478, 0.0028656031715649914, 0.09392784028558183, 0.012228914939457335, 0.04326590538390119, 0.0022328628959505893, 0.022471276748842677, 0.013318908584401356, 0.022023162870308522, 0.02154515310751177, 0.09525739784831798, 0.009014365863849311, 0.0021387009223962678, 0.058049635860689834, 0.08945678354679001]) 214 | grid = sin(grid, 8, 20, -2.6082879093598965, -15.094623220398475) 215 | grid = transit(grid, 17, [10], [1.0]) 216 | grid = sin(grid, 26, 29, 3.9435062432103756, -51.366228755226295) 217 | grid = sin(grid, 2, 5, 2.036747443527743, 6.785740714186645) 218 | grid = magnitude(grid, 17, [12, 16, 3], 2) 219 | grid = sin(grid, 18, 3, -4.272266427000106, -54.717820157263944) 220 | grid = sin(grid, 18, 1, 2.4457711347664963, -51.28470707041639) 221 | grid = transit(grid, 6, [2, 26, 4, 28, 16, 5, 12, 27], [0.12700985113389443, 0.24850060617928724, 0.1197479461359056, 0.007895343344571494, 0.1500836097942013, 0.17793701202102927, 0.01584950566092926, 0.15297612573018132]) 222 | grid = transit(grid, 14, [8, 13, 24, 22, 4, 26, 2, 27, 20, 5], [0.05825211206013498, 0.1410750013698368, 0.07263428193394306, 0.2421839076160714, 0.07850795537465025, 0.09223295850374925, 0.04979683940020267, 0.13890294600267694, 0.07964834384668122, 0.04676565389205355]) 223 | grid = sin(grid, 3, 20, -7.1425621146458145, 4.892433390073748) 224 | grid = power(grid, 16, 25, 1.025757091779618) 225 | grid = sin(grid, 11, 11, -8.447680084430345, 78.52009884396466) 226 | grid = transit(grid, 18, [1, 27, 4, 19, 13, 28, 22], [0.196090596431969, 0.2018563830995427, 0.1189151454845919, 0.05079997619106926, 0.04833898450983503, 0.09698775845128751, 0.2870111558317045]) 227 | grid = transit(grid, 16, [11], [1.0]) 228 | grid = transit(grid, 17, [11, 16], [0.4116681157073475, 0.5883318842926525]) 229 | grid = transit(grid, 5, [16, 19, 11, 7, 5, 0, 21, 14, 18, 29], [0.16216328534137447, 0.24569063104536942, 0.15914116909915269, 0.05272753527396052, 0.09259366556354813, 0.03266106454259135, 0.10914794659694485, 0.08860345191584623, 0.026935921009559344, 0.030335329611652785]) 230 | grid = magnitude(grid, 20, [27, 23, 11, 6, 8, 15, 2, 13, 19], 2) 231 | grid = transit(grid, 20, [4, 8, 1], [0.46168072428263146, 0.24143517148156987, 0.2968841042357987]) 232 | grid = sin(grid, 23, 17, -2.1638272435241466, 93.38310327710718) 233 | grid = magnitude(grid, 5, [24, 1, 23, 12, 28, 9, 13, 8, 26, 0, 5, 10, 20, 14, 11, 18, 21], 2) 234 | grid = sin(grid, 14, 22, -2.4834258236409097, 97.49833284539238) 235 | grid = transit(grid, 18, [25, 5, 27, 22, 20, 9], [0.0468039257280891, 0.00809238891341741, 0.22495444766030293, 0.09705113964245915, 0.27079524236424124, 0.35230285569149017]) 236 | grid = power(grid, 10, 12, 1.0024212830073127) 237 | grid = power(grid, 5, 22, 1.837699138651208) 238 | grid = sin(grid, 1, 3, 3.0024272635345137, -95.97067350805959) 239 | grid = magnitude(grid, 14, [6, 18, 10, 0, 26, 29, 5, 2, 27, 9, 17, 20], 2) 240 | grid = sin(grid, 24, 7, 6.958235774066301, 4.628116719561319) 241 | grid = transit(grid, 15, [2, 6, 15, 18, 23, 1, 28, 24, 14, 22], [0.17703640737274956, 0.08311029650225686, 0.07183782826709151, 0.054512704538237235, 0.1534980594626415, 0.11473336723071016, 0.030291353565728107, 0.030421240416718228, 0.27031479327461033, 0.01424394936925648]) 242 | grid = sin(grid, 16, 9, 2.092059200648034, -35.061231977767775) 243 | grid = magnitude(grid, 26, [27, 17, 1, 25, 23, 22, 11, 16, 19, 21, 0, 2, 3], 2) 244 | grid = sin(grid, 16, 20, 4.16750169637843, -53.41381174523414) 245 | grid = magnitude(grid, 20, [21, 10, 8, 26, 2, 9, 16, 15, 6, 12, 4, 29, 3], 2) 246 | grid = transit(grid, 20, [10, 18, 29, 12, 16], [0.2079732389363055, 0.14527005489531053, 0.24222500251977908, 0.12969262232167655, 0.2748390813269283]) 247 | grid = sin(grid, 7, 27, -5.7039103474444675, -19.058567630893634) 248 | grid = magnitude(grid, 10, [22], 2) 249 | grid = sin(grid, 9, 22, -3.2160711310705272, -0.8050221946792107) 250 | grid = sin(grid, 4, 25, -0.6969889566422832, -28.21644604065628) 251 | grid = transit(grid, 23, [21, 29, 2], [0.035626894390122406, 0.9272325789006544, 0.03714052670922327]) 252 | grid = sin(grid, 16, 26, 4.977958185190646, -0.15346992630449563) 253 | grid = sin(grid, 18, 19, -6.446822726205655, 94.7855991829299) 254 | grid = transit(grid, 20, [0, 1, 9, 20, 14, 26, 18, 5, 4, 16, 8, 24, 15, 2], [0.09562367699583423, 0.05672983324495797, 0.01192007008068175, 0.08323890376727346, 0.10592086296679877, 0.21901647636221555, 0.0009477208258769893, 0.0223254869745743, 0.057054665210135795, 0.03541847517137981, 0.1903240416581729, 0.04763137894358527, 0.02803546961753482, 0.0458129381809781]) 255 | grid = sin(grid, 9, 19, -0.9889407635315997, 24.32223504232182) 256 | grid = transit(grid, 21, [29, 4, 21, 7, 15, 0, 13, 27, 8, 12, 20], [0.02931192383935373, 0.11326032441391376, 0.11384896296954296, 0.24833032184524134, 0.07421714804443659, 0.05365568156932437, 0.036650758808108475, 0.11508028273903272, 0.06904537043614142, 0.10180592228267629, 0.044793303052228374]) 257 | grid = transit(grid, 15, [3, 13, 15, 28, 0], [0.04085868247981523, 0.4484006513318543, 0.18051139221944262, 0.18346257178667422, 0.14676670218221363]) 258 | grid = transit(grid, 15, [25, 7], [0.6081811323140845, 0.3918188676859154]) 259 | grid = sin(grid, 23, 10, -6.256511306103249, -35.41258532396398) 260 | grid = sin(grid, 12, 14, -3.8142072543587258, 35.75088567228087) 261 | grid = transit(grid, 4, [10, 12], [0.33950231443636597, 0.6604976855636341]) 262 | grid = sin(grid, 1, 25, 2.1238759299125336, -95.2772852561495) 263 | grid = transit(grid, 28, [20, 4, 10, 6, 3], [0.24386150402992404, 0.15083838184066112, 0.19145797791305272, 0.231388093318498, 0.1824540428978642]) 264 | grid = transit(grid, 7, [23, 20, 1, 3, 5, 21, 18, 22], [0.2643626857088969, 0.17890685721579894, 0.025896044460318558, 0.10305550968903582, 0.2548598553727854, 0.0091183872375849, 0.15564238270552389, 0.008158277610055642]) 265 | grid = sin(grid, 3, 10, 1.3177330564237129, 3.436191387952121) 266 | grid = magnitude(grid, 3, [0], 2) 267 | grid = sin(grid, 2, 28, -2.1078293203826273, -38.32707680384144) 268 | grid = sin(grid, 29, 3, -1.8519001404778574, 21.391270525290523) 269 | grid = magnitude(grid, 18, [15, 3, 18], 2) 270 | grid = sin(grid, 27, 7, -0.741508015430276, -59.172393162176775) 271 | grid = transit(grid, 16, [23, 17, 10, 29, 2, 24, 27, 14, 11, 19, 1, 25, 3], [0.028284392921879394, 0.09248669714949621, 0.07629963173374153, 0.11958563867035837, 0.06331300364143823, 0.12683701963124, 0.13706866229790357, 0.04854820218014781, 0.05555529013136957, 0.03160357709775702, 0.0327764774225656, 0.09784788734120979, 0.08979351978089281]) 272 | grid = transit(grid, 1, [26, 0, 6, 17, 10], [0.06217982216364069, 0.2448818450171405, 0.40205528499611776, 0.04345678434204177, 0.2474262634810594]) 273 | grid = transit(grid, 10, [22, 23, 29, 8, 17, 2, 24, 5, 7, 13, 16], [0.2923197003634031, 0.059325477314616994, 0.022532656935592647, 0.04827298683511306, 0.01578784289561123, 0.10869131288817775, 0.07784359217687828, 0.005317767037424362, 0.2765407366466122, 0.04658414908139094, 0.04678377782517926]) 274 | grid = sin(grid, 3, 10, -2.563250603835555, 37.68747610223792) 275 | grid = transit(grid, 14, [13, 1, 2, 25, 23, 19, 29, 20, 7, 16], [0.10347867546749172, 0.10182010237832942, 0.14518952349182726, 0.13743973384655242, 0.09283496444207104, 0.04013363918377447, 0.11958930930931748, 0.18383099423083896, 0.027931754754189842, 0.047751302895607445]) 276 | grid = sin(grid, 3, 23, -0.669123040236616, -73.9005998275474) 277 | grid = sin(grid, 8, 6, -3.4364449595645326, 25.26944475114898) 278 | grid = sin(grid, 2, 17, -1.1044062857252217, 16.022709129911078) 279 | grid = transit(grid, 8, [14, 6], [0.4427928490122833, 0.5572071509877168]) 280 | grid = sin(grid, 25, 25, 4.114118730619426, -75.73021632807873) 281 | grid = sin(grid, 0, 28, -9.708116354819225, 19.160241130900317) 282 | grid = power(grid, 27, 27, 1.525781728991106) 283 | grid = sin(grid, 3, 18, 1.680577421028848, -46.169300857594294) 284 | grid = transit(grid, 20, [26, 27, 23, 11, 28, 4, 13, 12, 1, 5, 29, 2, 10, 22, 15, 21, 8, 16, 20], [0.028084441209066276, 0.006259971084431649, 0.027063434117946285, 0.03486914632592155, 0.03654381456247338, 0.05552629583909025, 0.0032695820503744104, 0.1834631119964957, 0.015094506595672857, 0.09317512760338292, 0.05100820726496779, 0.17003283759270368, 0.006918955745280075, 0.06734682325401618, 0.06827919669634373, 0.021449237264485353, 0.008557632690829358, 0.0434659287920166, 0.07959174931450201]) 285 | grid = transit(grid, 17, [16, 21, 27, 24, 22, 28, 9, 6, 17], [0.03521761284024365, 0.07969755614506543, 0.0773436660834768, 0.027110136972014073, 0.1697255914479216, 0.20818803434545932, 0.05850781462721889, 0.11498139432959012, 0.22922819320901003]) 286 | grid = transit(grid, 28, [26, 6, 7, 12, 16, 27, 14, 20, 28, 22, 24, 5, 11], [0.011503310922571066, 0.06263571972519069, 0.017516312864647086, 0.07772195647587006, 0.060786304620057734, 0.005102874660561754, 0.09536418752753578, 0.15382181939337042, 0.08268799064115688, 0.19094629043596623, 0.04274665791736918, 0.04618872222882754, 0.15297785258687563]) 287 | grid = sin(grid, 20, 26, 1.6333639445725903, -69.99629469026834) 288 | grid = sin(grid, 27, 26, -2.8211364001313566, -73.97947283656535) 289 | grid = transit(grid, 15, [11, 26, 16, 28, 4, 6, 18, 3, 21], [0.09479591838217964, 0.09484897523056462, 0.058845377456096325, 0.10215818594255374, 0.014456892855759598, 0.1818239455393452, 0.2121602694605715, 0.09960044042963573, 0.1413099947032936]) 290 | grid = power(grid, 11, 19, 0.9545621173071043) 291 | grid = sin(grid, 6, 0, 1.2826764156706694, 55.5398480966673) 292 | grid = sin(grid, 13, 3, -2.6051028087843267, 65.23875144284764) 293 | grid = transit(grid, 1, [6, 22, 20, 10, 8, 19, 29], [0.22477925819925032, 0.047409236636423546, 0.31772687710097247, 0.052123849475215936, 0.017518542847333143, 0.10547836203202665, 0.23496387370877808]) 294 | grid = magnitude(grid, 29, [27, 5, 20, 22, 24], 2) 295 | grid = transit(grid, 10, [7, 19, 14, 8], [0.33287816520381924, 0.38739356132482355, 0.01770059017686533, 0.2620276832944919]) 296 | grid = sin(grid, 25, 25, 4.9339749392627725, -97.54179613138774) 297 | grid = sin(grid, 27, 9, 0.38977199023001213, 99.96740219350474) 298 | grid = sin(grid, 5, 11, -2.4079595816059536, -80.86349376864504) 299 | grid = transit(grid, 8, [1, 23, 28], [0.7036639741604288, 0.16488488844590868, 0.13145113739366246]) 300 | grid = sin(grid, 28, 4, -1.6662852066507081, 22.657126178267987) 301 | grid = transit(grid, 11, [8, 6, 19, 24, 5, 29, 26, 21, 3, 23, 28, 25], [0.03763013654395128, 0.24415654984814908, 0.009186407123997854, 0.14619135231446456, 0.029468755293756744, 0.06835034032523098, 0.08331975590337455, 0.13510926534242243, 0.0428256881909377, 0.09152253462748772, 0.010604166283933125, 0.10163504820229385]) 302 | grid = sin(grid, 15, 1, -6.64220650090924, -80.19775246945564) 303 | grid = magnitude(grid, 4, [24, 8, 9, 7, 4, 15], 2) 304 | grid = transit(grid, 1, [24, 5, 8], [0.21817408181873374, 0.32566519402893235, 0.45616072415233394]) 305 | grid = magnitude(grid, 24, [14, 8, 3], 2) 306 | grid = sin(grid, 3, 9, -0.3062533276448923, -60.40574503692417) 307 | grid = sin(grid, 17, 27, 5.283304841208537, 82.14067946313853) 308 | grid = power(grid, 2, 11, 1.2927564970430212) 309 | grid = transit(grid, 18, [10, 29, 13, 9, 0, 2, 6, 5, 18, 26], [0.02531468958376917, 0.016789326058894778, 0.17772249485394337, 0.14517264053179316, 0.11578285385887466, 0.0653914329125764, 0.04626672091661157, 0.16440181274889515, 0.19167007016333454, 0.051487958371307214]) 310 | grid = sin(grid, 18, 2, 0.2377595491927969, -99.29084282877308) 311 | grid = magnitude(grid, 19, [4, 27, 22, 1], 2) 312 | grid = sin(grid, 6, 7, 0.23433369863255094, 14.665137912357508) 313 | grid = sin(grid, 23, 15, -4.728776108215347, 71.80674278119216) 314 | grid = sin(grid, 4, 14, 2.6743276188199734, 75.37941941718435) 315 | grid = power(grid, 29, 16, 1.1886328571343379) 316 | grid = sin(grid, 19, 20, 0.6062610723991769, 57.7576888548671) 317 | grid = transit(grid, 13, [29, 25, 28, 21, 12, 26, 14, 13, 20], [0.2557589734151183, 0.06583027144046429, 0.07260037473733175, 0.0031073691438477475, 0.012450800772617447, 0.24742685061689768, 0.2557195778015838, 0.03282764907261528, 0.054278132999523734]) 318 | grid = sin(grid, 14, 10, 0.8632150815184519, 86.26962497483444) 319 | grid = transit(grid, 12, [16, 7, 1, 18, 28, 9, 13, 26, 25, 11, 8, 24, 14, 21, 19, 15], [0.04998261297506361, 0.03624109475375478, 0.03424093518899223, 0.02735940466262786, 0.04245673029336434, 0.023675680646149812, 0.10178164969111354, 0.06248496567742079, 0.08723395665092128, 0.09571027247832861, 0.040855625717354925, 0.20231524643713716, 0.05267423212164201, 0.020266163247286063, 0.00418363575539533, 0.11853779370344768]) 320 | grid = transit(grid, 7, [23, 20, 3, 28, 2, 14, 9, 15, 25, 7, 11, 22, 27, 10, 19, 12], [0.1804825552768306, 0.010752469938652594, 0.0028390517562462583, 0.05449051744958575, 0.07647333925114896, 0.13475822323643974, 0.07317928900540165, 0.05357189222306655, 0.06986874617499345, 0.008251614292606567, 0.04853486560425, 0.022738193629601337, 0.06349499086529246, 0.013802159998896467, 0.06022405620371503, 0.1265380350932726]) 321 | grid = transit(grid, 9, [14, 29, 18, 11, 2, 28, 16, 9], [0.18292851891328793, 0.05334857863475463, 0.04320581626342237, 0.10804959687882061, 0.1140582554373515, 0.18627081896924289, 0.23154555195458051, 0.08059286294853947]) 322 | grid = transit(grid, 15, [13, 27, 6, 7, 17, 21, 8], [0.20764123608155, 0.21265909496049265, 0.029155935926625146, 0.22815119958479604, 0.05399973475040578, 0.24183718877187962, 0.026555609924250583]) 323 | grid = transit(grid, 7, [21], [1.0]) 324 | grid = sin(grid, 15, 13, 0.8705494942458696, 67.81551923425155) 325 | grid = sin(grid, 12, 7, -1.602518324636846, 94.44039664621485) 326 | grid = sin(grid, 20, 21, -2.4276731880559006, 1.822895606421767) 327 | grid = sin(grid, 8, 29, 5.5789670329542735, -16.668684876071154) 328 | grid = power(grid, 6, 3, 0.4431743752457683) 329 | grid = sin(grid, 3, 8, -0.988333831693139, 18.13473990483365) 330 | grid = transit(grid, 14, [17, 27, 29, 13, 9, 3, 0, 11], [0.0898903523466139, 0.1481810324875896, 0.14426080818014916, 0.10131421875105391, 0.22640591283349126, 0.07816349748645574, 0.14309141898623393, 0.06869275892841248]) 331 | grid = magnitude(grid, 24, [11, 29, 28], 2) 332 | grid = power(grid, 15, 17, 1.4180504704167114) 333 | grid = sin(grid, 26, 28, -0.984055927889663, 5.942245509342243) 334 | grid = power(grid, 6, 2, 1.397099763106119) 335 | grid = power(grid, 5, 29, 0.15952033553068445) 336 | grid = power(grid, 27, 9, 0.6132580874099702) 337 | grid = transit(grid, 23, [12, 15, 16, 6, 25, 14, 27, 4, 24, 18, 29, 28, 1, 23, 21, 17, 5], [0.07771264616773704, 0.09506901656991516, 0.06970063239215112, 0.008308933100567956, 0.02336269874831405, 0.01571850961324773, 0.012838839969123866, 0.03224820852612018, 0.08875649450256343, 0.08699160603840679, 0.010264410829392183, 0.11052666280336272, 0.065318557138721, 0.03976395316148982, 0.13214305502101165, 0.11526553215629681, 0.01601024326157849]) 338 | grid = transit(grid, 26, [26, 2, 8], [0.006154499932582719, 0.2188664121026967, 0.7749790879647206]) 339 | grid = sin(grid, 28, 13, 3.8788679529924632, -33.8187097952287) 340 | grid = sin(grid, 16, 7, 3.280658024461874, -88.42823819060912) 341 | grid = sin(grid, 24, 8, 2.2875375614066145, 35.88943385470159) 342 | grid = power(grid, 28, 17, 0.5639477614239823) 343 | grid = sin(grid, 18, 5, -2.366398758178388, -81.62121762443883) 344 | 345 | #create color space 346 | colors = np.zeros((6, 3)) 347 | colors[0] = [120, 15, 53] 348 | colors[1] = [108, 238, 2] 349 | colors[2] = [92, 148, 205] 350 | colors[3] = [233, 190, 48] 351 | colors[4] = [165, 190, 85] 352 | colors[5] = [23, 16, 102] 353 | 354 | res = np.zeros((SIZE, SIZE, 3)) 355 | res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0] 356 | res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1] 357 | res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2] 358 | res += (grid[:,:,3:3+1].repeat(3, -1) + 1) / 2 * colors[3] 359 | res += (grid[:,:,4:4+1].repeat(3, -1) + 1) / 2 * colors[4] 360 | res += (grid[:,:,5:5+1].repeat(3, -1) + 1) / 2 * colors[5] 361 | 362 | res = res / colors.sum(0) * 255 363 | 364 | #save results 365 | im = Image.fromarray(np.uint8(res)) 366 | im.save(os.path.basename(__file__) + '.png') 367 | 368 | #save layers 369 | img = np.zeros((SIZE * 6, SIZE * 6)) 370 | for j in range(GRID_CHANNELS): 371 | x = j % 6 372 | y = j // 6 373 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 374 | 375 | img = (img + 1) * 127.5 376 | im = Image.fromarray(np.uint8(img)) 377 | im.save(os.path.basename(__file__) + '_layers.png') 378 | 379 | -------------------------------------------------------------------------------- /examples/5b078a1d-acf6-4fda-acf8-320dbd5f371c.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/5b078a1d-acf6-4fda-acf8-320dbd5f371c.py.png -------------------------------------------------------------------------------- /examples/5b078a1d-acf6-4fda-acf8-320dbd5f371c.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/5b078a1d-acf6-4fda-acf8-320dbd5f371c.py_layers.png -------------------------------------------------------------------------------- /examples/6a586378-063a-427c-92b2-87d6236615c6.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 02:06:28 UTC 3 | # GAS change date: 2021-11-28 01:31:12 UTC 4 | # GAS md5 hash: c291ffb9de6ad6dea37797c00163f591 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 30 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def power(x, t_indx, s_indx, p = 1): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 41 | return test_values(res) 42 | 43 | def magnitude(x, t_indx, s_indx, ord = 2): 44 | res = x.copy() 45 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 46 | return test_values(res) 47 | 48 | #set initial grid 49 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 50 | 51 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 52 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 53 | 54 | phi = np.pi / 4 55 | rx = (x * np.cos(phi) - y * np.sin(phi)) / 1.5 56 | ry = (x * np.cos(phi) + y * np.sin(phi)) / 1.5 57 | 58 | 59 | for i in range(15): 60 | grid[:,:,i * 2 + 0] = x 61 | grid[:,:,i * 2 + 1] = y 62 | 63 | #apply transformations to the grid 64 | grid = transit(grid, 29, [19, 22], [0.162570065071097, 0.837429934928903]) 65 | grid = magnitude(grid, 12, [27, 0, 11, 8, 21, 25, 22], 2) 66 | grid = power(grid, 16, 19, 0.6832593210243594) 67 | grid = magnitude(grid, 5, [12, 29, 19, 16, 25, 5, 22, 20, 13, 18, 2, 17, 1, 7], 2) 68 | grid = transit(grid, 19, [29, 17, 18, 24, 6, 12, 13, 11, 8, 20, 0], [0.11956496211881872, 0.05013356366149157, 0.13305054541369926, 0.15246500360275328, 0.05802002562963354, 0.04238582486905315, 0.19554926469073888, 0.08033490218765624, 0.04525393101315875, 0.03341790476201002, 0.08982407205098653]) 69 | grid = sin(grid, 29, 4, -2.803277175027569, 43.39456443062289) 70 | grid = sin(grid, 23, 24, 2.0425954175290886, 11.358624030534827) 71 | grid = magnitude(grid, 24, [0, 5, 18, 17, 29, 1, 10, 11, 14], 2) 72 | grid = sin(grid, 3, 16, 0.08116001882496733, 29.607535899235273) 73 | grid = transit(grid, 9, [24, 19], [0.14255129423463317, 0.8574487057653668]) 74 | grid = sin(grid, 3, 12, -2.4201168205485177, -42.76220889484386) 75 | grid = transit(grid, 23, [0, 17, 16, 10, 1, 29, 12, 24, 11, 6, 23, 14, 2, 3], [0.04185852737464411, 0.0718958562209562, 0.04144628951866288, 0.06440992347220259, 0.05504490607061211, 0.06002707501087633, 0.14086245922498628, 0.05953422331122396, 0.13174771512588848, 0.09554676788043852, 0.054710845949554616, 0.07072254937205642, 0.046008773998673064, 0.06618408746922441]) 76 | grid = sin(grid, 28, 4, -1.1167240340353377, -33.51597872481756) 77 | grid = sin(grid, 6, 16, -5.309685991010303, -73.84592367786468) 78 | grid = sin(grid, 9, 23, -2.6796169840930895, -40.5412027819841) 79 | grid = sin(grid, 15, 6, 1.6192227145410403, 18.29042695814111) 80 | grid = sin(grid, 27, 3, 3.67033472109074, -92.21663905335483) 81 | grid = transit(grid, 3, [4, 7, 29], [0.3386535705350276, 0.5538253330679384, 0.10752109639703403]) 82 | grid = sin(grid, 12, 28, 3.3754171464010443, 72.59735794386486) 83 | grid = sin(grid, 28, 23, 3.9592736322225717, -28.872965332555125) 84 | grid = magnitude(grid, 23, [16, 3, 27, 0, 21], 2) 85 | grid = transit(grid, 14, [12, 6, 0, 10], [0.030935598884591263, 0.5285731990934327, 0.3402810463602381, 0.10021015566173799]) 86 | grid = transit(grid, 22, [19, 7, 5, 29, 6, 26], [0.14337063648845627, 0.24142817057917984, 0.11685279951452533, 0.023075679344775824, 0.2754286905791286, 0.19984402349393413]) 87 | grid = sin(grid, 26, 6, -2.4091211781495296, -82.64154311894532) 88 | grid = magnitude(grid, 14, [3, 10, 14, 23, 26, 21, 20, 13, 17], 2) 89 | grid = magnitude(grid, 7, [23, 6, 2], 2) 90 | grid = sin(grid, 10, 22, 2.050315504251981, 89.5744631928493) 91 | grid = transit(grid, 20, [25, 29, 1, 6, 12, 8, 14, 17, 23], [0.004899579789304808, 0.09314319527557183, 0.03998202780338693, 0.19272244068492897, 0.34501737224324885, 0.17740036381342622, 0.06353176938513716, 0.03203715570193849, 0.05126609530305695]) 92 | grid = sin(grid, 11, 20, 4.390960200726324, -71.44216611954899) 93 | grid = magnitude(grid, 7, [20, 16, 1, 25, 13], 2) 94 | grid = magnitude(grid, 22, [20, 27, 16, 11, 23, 15, 29, 25, 0, 17, 2, 5, 1, 28, 12], 2) 95 | grid = transit(grid, 19, [20, 4, 3, 16], [0.1526830825248949, 0.7081439352898777, 0.06775906310079587, 0.07141391908443141]) 96 | grid = sin(grid, 26, 26, -3.0877394923548906, 44.03402898112404) 97 | grid = transit(grid, 23, [15, 24, 12, 22, 19, 23], [0.2974634270268527, 0.18571837778194167, 0.22122718321511456, 0.05894778995186554, 0.19810172312674557, 0.03854149889747992]) 98 | grid = sin(grid, 11, 9, 1.0239782977935226, 65.26260230502231) 99 | grid = sin(grid, 9, 25, -7.566790267054586, -75.63082272426975) 100 | grid = transit(grid, 15, [9, 15, 26, 2, 24, 28, 19, 12, 5, 13, 1, 4, 16, 23, 20, 6, 10, 18], [0.06616516411967799, 0.09777590819145016, 0.0002712313941477737, 0.09746330541437898, 0.005397802149808619, 0.07718643014961299, 0.13148160411157372, 0.09102197762563803, 0.03185803109227711, 0.0241181740051075, 0.034195430141271195, 0.03951611394918786, 0.0787746792428292, 0.03692743163524459, 0.002994098366014297, 0.062803596094192, 0.08020173317182712, 0.041847289145760795]) 101 | grid = transit(grid, 4, [25, 29, 22, 1, 6, 9, 19, 21, 18, 16, 17, 5, 20, 0, 12], [0.08432611754036021, 0.009140664239356671, 0.08060088757913146, 0.06166245074953199, 0.1638729657005139, 0.034479801216239156, 0.014854982191717304, 0.08772065521432443, 0.043708056308515354, 0.11043876578842901, 0.12519722186516116, 0.023175558417975587, 0.01018347967163066, 0.1176477109575453, 0.032990682559567955]) 102 | grid = sin(grid, 12, 7, -1.7660206046047084, -85.28896741511835) 103 | grid = transit(grid, 14, [18, 28, 1, 25, 26, 15, 16, 19, 12, 14, 5, 8], [0.061399029075051736, 0.16128653484720623, 0.04238018700257984, 0.07363074210463408, 0.09276563659827074, 0.044181324827153534, 0.1458446676143112, 0.002814862772849515, 0.12681141102429905, 0.09165683421119886, 0.05453631469851343, 0.10269245522393174]) 104 | grid = power(grid, 28, 29, 0.3779782940331584) 105 | grid = sin(grid, 19, 27, -2.5705555933884487, 80.63298070706631) 106 | grid = transit(grid, 25, [0, 5, 12, 29, 27, 7, 2, 25, 18, 8], [0.13649589534415188, 0.014678989258920187, 0.07847237192131681, 0.11124864055343385, 0.08219416634833716, 0.04507998114443801, 0.1618879569706191, 0.2700382467691338, 0.05609092564881936, 0.043812826040829804]) 107 | grid = sin(grid, 27, 5, 2.9386845297236146, -8.401158648822786) 108 | grid = transit(grid, 9, [29, 10, 7, 18, 25, 11, 16, 21], [0.029167418654736797, 0.003595910474137072, 0.29287241571346795, 0.07022515471929672, 0.10158497813413986, 0.059246305191391915, 0.32077383459013076, 0.12253398252269886]) 109 | grid = power(grid, 4, 27, 2.403332922052619) 110 | grid = sin(grid, 12, 27, -6.706458142837571, -67.86915645909208) 111 | grid = sin(grid, 12, 16, -2.708811323493574, 61.963825635946876) 112 | grid = sin(grid, 27, 21, 2.979990355413568, 55.608556726719144) 113 | grid = transit(grid, 10, [25, 12], [0.917610969357756, 0.08238903064224394]) 114 | grid = sin(grid, 7, 7, 1.3211939890122422, 72.76020788877838) 115 | grid = sin(grid, 14, 4, 0.5306507527772861, 80.17684312260022) 116 | grid = sin(grid, 3, 10, -0.5503493938868814, -5.962185131409427) 117 | grid = transit(grid, 15, [25, 28, 1, 5], [0.321600534827853, 0.10542445081098709, 0.3304333599084767, 0.2425416544526832]) 118 | grid = magnitude(grid, 20, [6, 9], 2) 119 | grid = sin(grid, 18, 25, 1.3894004680099752, 89.25662087299591) 120 | grid = transit(grid, 20, [4, 17, 22, 9, 2, 3], [0.28470977015474064, 0.11783602510587528, 0.14947881924125034, 0.07641898119264072, 0.299966212618196, 0.07159019168729713]) 121 | grid = sin(grid, 2, 12, -0.5867291269053801, 28.167611255741008) 122 | grid = transit(grid, 16, [17, 27, 6, 23, 19, 25, 16, 9, 14, 4, 0], [0.10447719623269758, 0.048407918591629864, 0.007763166119990237, 0.0022140470040574907, 0.24849459533294363, 0.12023286519064905, 0.17871974770364935, 0.05735132208762337, 0.036326220968249515, 0.10867143758787537, 0.08734148318063453]) 123 | grid = transit(grid, 1, [7, 23, 26, 14, 20, 19, 28, 8, 9, 17, 22, 0, 5], [0.013121733291342785, 0.11301130736686454, 0.01352586294053668, 0.15913305810858402, 0.11915145281306491, 0.0006517312319511964, 0.008548387417477, 0.0904394241347426, 0.01789058436883307, 0.07037753745683703, 0.07076335166856433, 0.07800578985114522, 0.24537977935005661]) 124 | grid = sin(grid, 18, 28, -1.9841443767920823, -69.03014320058003) 125 | grid = transit(grid, 5, [22, 19, 25, 27, 20, 21, 18, 3], [0.13269119455929568, 0.13927419514581135, 0.2353360212273103, 0.05358973946883631, 0.11709248299854554, 0.05695975943841826, 0.03345046365270227, 0.2316061435090803]) 126 | grid = sin(grid, 1, 9, -3.8143949239238193, -90.24439830058608) 127 | grid = magnitude(grid, 22, [13, 26, 6, 9, 7, 15, 8, 21, 12, 25, 29, 5, 23, 19], 2) 128 | grid = magnitude(grid, 7, [15, 10, 23], 2) 129 | grid = transit(grid, 18, [29, 8, 1, 11, 13, 9, 27, 6, 21, 4, 10, 15, 19, 5, 0], [0.1772994331856414, 0.068125216107354, 0.18999349792890638, 0.019818681800181075, 0.04415831002215933, 0.03035314916143176, 0.019871427752056706, 0.17461556101263392, 0.043587710771764196, 0.037194038159689476, 0.05795222455290955, 0.022431635860234538, 0.07352074703380847, 0.020324565267279607, 0.020753801383949444]) 130 | grid = magnitude(grid, 28, [27, 11, 1, 5, 28], 2) 131 | grid = sin(grid, 10, 29, 0.9754517253039042, 19.167473301905645) 132 | grid = sin(grid, 12, 27, -2.8452733457996318, 79.15482610320453) 133 | grid = transit(grid, 23, [23, 19, 27, 29, 5, 2, 20, 0, 6, 14, 28], [0.08798444677572927, 0.12029606201225304, 0.10947313847863878, 0.12859008053676993, 0.045403922186473065, 0.12432237963799758, 0.14016659493536382, 0.04300443803477972, 0.01734694652028419, 0.0981174832644981, 0.0852945076172126]) 134 | grid = magnitude(grid, 23, [12, 14, 19, 21, 9], 2) 135 | grid = power(grid, 29, 5, 1.817083710798804) 136 | grid = magnitude(grid, 2, [13, 6, 29, 24, 27, 21, 16, 14, 22, 4], 2) 137 | grid = transit(grid, 8, [3], [1.0]) 138 | grid = sin(grid, 18, 29, 0.6389415083446274, 80.8749712491909) 139 | grid = transit(grid, 14, [25, 2, 18, 8, 3, 15, 1, 16, 14, 5, 6, 13, 20, 0, 26, 9, 22, 28, 10, 17, 4, 29, 24, 11, 7, 23], [0.005871309937873514, 0.018003505494664063, 0.004367270790055393, 0.02131452056580914, 0.04892744693923117, 0.058471392811199306, 0.07048395159287357, 0.017318473991941724, 0.07994321420066938, 0.05394716631490228, 0.03519745217167912, 0.02235005759125536, 0.04715412242850838, 0.02747045659126205, 0.07155917229027325, 0.060822977475415284, 0.04361415578730645, 0.0354280883191885, 0.005739110717730895, 0.04491271555615977, 0.04349743113332699, 0.026095715559849145, 0.026899299768024996, 0.037327346757871395, 0.012878407330765023, 0.080405237882164]) 140 | grid = sin(grid, 10, 6, 1.615810670294585, 6.059030950147061) 141 | grid = transit(grid, 4, [21], [1.0]) 142 | grid = transit(grid, 0, [9, 6, 21, 23, 10, 25, 5, 29], [0.008407947275370496, 0.22332672029591105, 0.17669528269181908, 0.061943871236512044, 0.00631614100316715, 0.04896761458648364, 0.219980694309923, 0.25436172860081346]) 143 | grid = transit(grid, 7, [28, 3, 8, 24, 5, 26, 16, 25, 20], [0.008076733658800364, 0.13788018636125093, 0.047745229040943256, 0.08590191794838145, 0.3359021344945731, 0.13627021446299625, 0.07199274602464636, 0.05807097072801425, 0.11815986728039397]) 144 | grid = magnitude(grid, 5, [13, 16], 2) 145 | grid = sin(grid, 23, 19, -0.6582224493825697, 87.34462867779135) 146 | grid = sin(grid, 28, 10, 2.201883125073067, 80.07621747819877) 147 | grid = magnitude(grid, 10, [12, 0, 4, 21, 8, 20, 3, 27, 7, 13, 6], 2) 148 | grid = magnitude(grid, 26, [12, 16, 6, 22, 27, 20, 14, 26, 19, 18, 8], 2) 149 | grid = transit(grid, 21, [10, 1, 21, 23, 6, 22, 7, 24, 15], [0.14098959190193464, 0.16885649738040365, 0.21508280162861007, 0.08756191883026329, 0.06797141331659777, 0.040586793475855774, 0.07556426350656567, 0.13577049344872752, 0.06761622651104154]) 150 | grid = sin(grid, 19, 21, -1.7650391823704892, 89.53123311944441) 151 | grid = sin(grid, 27, 20, 4.102907734657698, -18.506040345024942) 152 | grid = sin(grid, 8, 16, -3.2047717871756047, 50.031074019769875) 153 | grid = sin(grid, 1, 3, -1.2298315940257807, 67.92621901520556) 154 | grid = transit(grid, 10, [5, 12, 6, 7, 21], [0.04017259629004803, 0.035935993838594436, 0.38852998766486463, 0.39464597353448644, 0.14071544867200647]) 155 | grid = transit(grid, 17, [9, 22, 0, 8], [0.07232347283831883, 0.23909484436189507, 0.16476406248235922, 0.523817620317427]) 156 | grid = sin(grid, 11, 23, 3.4291605572557367, 77.65408388973503) 157 | grid = sin(grid, 20, 27, 1.9438852600878178, -69.26160333661483) 158 | grid = transit(grid, 19, [13, 7, 14, 12, 29], [0.15078244000703844, 0.30329951250855647, 0.052826921314074654, 0.014009457594495888, 0.47908166857583445]) 159 | grid = magnitude(grid, 4, [13, 5, 9, 16, 11, 6, 24, 14, 12, 1, 3, 22, 20, 8, 7, 15], 2) 160 | grid = power(grid, 5, 12, 0.32534340921919336) 161 | grid = sin(grid, 10, 18, -1.5546372261064723, 79.40807200485779) 162 | grid = transit(grid, 0, [2, 17, 23, 0, 9, 10, 6, 20, 26, 22, 25, 11, 27, 21, 13, 12, 1, 16], [0.04666741358409691, 0.10041235530271467, 0.13656890415482237, 0.0505888093029676, 0.07654195022307062, 0.18419004471071113, 0.05046245679380782, 0.007552503418946401, 0.0004481713476168337, 0.011885682921671083, 0.032088980266198504, 0.0023404498982659153, 0.03348183036453658, 0.045952614669238355, 0.10372072735870042, 0.01789271596791753, 0.04799484234941445, 0.05120954736530277]) 163 | grid = transit(grid, 5, [25, 27], [0.5725941398341273, 0.4274058601658726]) 164 | grid = transit(grid, 19, [15, 29, 23, 21, 11, 10, 20, 4, 17, 2, 0, 13, 3, 1, 5, 8], [0.031537796589242675, 0.02689608568216389, 0.006352970412025167, 0.02945197836138472, 0.004733254055032123, 0.031841731262449186, 0.09701814809592517, 0.021578470501320998, 0.0071680768933244385, 0.11952705984922679, 0.05536518282979036, 0.06581861347697791, 0.2343306944232139, 0.10779797912646302, 0.09300120880000046, 0.06758074964145924]) 165 | grid = sin(grid, 11, 0, 2.563909435379265, 0.4450018649816627) 166 | grid = magnitude(grid, 27, [16, 11, 8, 0, 28, 12, 17, 15, 18, 20, 26], 2) 167 | grid = sin(grid, 19, 21, -3.4132246278785883, 84.16701903091374) 168 | grid = sin(grid, 28, 13, -2.3675718627702755, 41.175741022703875) 169 | grid = transit(grid, 7, [10, 9, 27, 23, 19, 5, 1, 22, 7], [0.14363062171830737, 0.01687188812140151, 0.13196113638415463, 0.17866921525288296, 0.07172903294369104, 0.1268434984434265, 0.09262190525507281, 0.13843366504033602, 0.09923903684072709]) 170 | grid = sin(grid, 1, 17, 0.4190217510777763, -96.31752118334663) 171 | grid = sin(grid, 4, 25, -3.0130782974573114, 0.045638670109738655) 172 | grid = sin(grid, 23, 16, -6.362468253360612, 24.730444687537883) 173 | grid = sin(grid, 17, 14, -2.3747658845203916, -57.23440657206675) 174 | grid = sin(grid, 19, 19, 2.4592230816940326, -51.76853764043066) 175 | grid = magnitude(grid, 26, [4], 2) 176 | grid = sin(grid, 0, 26, 2.879410066683457, 5.223173332129804) 177 | grid = sin(grid, 10, 6, -3.2555765761277127, -17.443575197843472) 178 | grid = transit(grid, 25, [24, 2, 25, 0, 12, 4], [0.03568795619526225, 0.08500737200701228, 0.05240229364632595, 0.603980978240824, 0.17712678127987705, 0.04579461863069845]) 179 | grid = sin(grid, 6, 29, -0.12051802831906497, 89.64443842624468) 180 | grid = transit(grid, 5, [27, 16, 23, 9, 17], [0.22131895230663756, 0.07144315447485797, 0.49736096611646524, 0.13402807138531572, 0.07584885571672335]) 181 | grid = transit(grid, 12, [22, 8, 29, 16], [0.25792429467789524, 0.25168913008212207, 0.38751847922685195, 0.10286809601313074]) 182 | grid = magnitude(grid, 24, [12], 2) 183 | grid = sin(grid, 21, 18, 6.904882453110925, 43.76686597000625) 184 | grid = sin(grid, 27, 12, -2.3149706703321784, 91.4634229451533) 185 | grid = transit(grid, 11, [18, 8, 23], [0.9456048289219839, 0.02282944678495521, 0.031565724293060864]) 186 | grid = sin(grid, 3, 22, -5.427035197241231, 70.63770520279803) 187 | grid = sin(grid, 27, 15, -0.8306409707765449, 16.388610614890496) 188 | grid = magnitude(grid, 22, [19, 20, 0, 14, 29, 16, 13, 11, 12, 7], 2) 189 | grid = sin(grid, 22, 2, -0.2131858223375026, 23.110302271816437) 190 | grid = transit(grid, 15, [26, 17, 18, 3, 20, 6], [0.26298407289730785, 0.036929318879447975, 0.21956318893577373, 0.12140448131206344, 0.2932362214654605, 0.06588271650994641]) 191 | grid = transit(grid, 6, [10, 0, 14, 4, 16, 26, 29], [0.3266526570756889, 0.010367316493219989, 0.06038405155138366, 0.18542143850276785, 0.15350917236048142, 0.1066459060285463, 0.1570194579879119]) 192 | grid = transit(grid, 3, [29, 9, 12, 18, 10, 17], [0.30897372209328766, 0.10630103874152365, 0.15658027364196273, 0.29474023685015555, 0.1326016707345515, 0.0008030579385190207]) 193 | grid = magnitude(grid, 11, [16, 7, 25, 22, 3, 17, 13, 0, 12, 27], 2) 194 | grid = sin(grid, 13, 1, 2.9658129882147084, -41.317540719432344) 195 | grid = magnitude(grid, 2, [19, 13, 16, 27, 26], 2) 196 | grid = sin(grid, 1, 8, 6.699130217836646, 5.293135687331116) 197 | grid = sin(grid, 0, 27, -6.580745881619362, 70.25836976864827) 198 | grid = transit(grid, 24, [5], [1.0]) 199 | grid = sin(grid, 10, 7, -3.7620909835549288, -17.85297224969564) 200 | grid = sin(grid, 18, 17, 6.374775580070441, -82.34320143877852) 201 | grid = transit(grid, 27, [21, 3, 19, 27, 10, 17, 13], [0.03817904844946292, 0.12948414697169902, 0.02053094019023183, 0.17470975944365325, 0.2705479342577574, 0.164395301382941, 0.20215286930425458]) 202 | 203 | #create color space 204 | colors = np.zeros((6, 3)) 205 | colors[0] = [51, 169, 182] 206 | colors[1] = [8, 23, 138] 207 | colors[2] = [93, 97, 239] 208 | colors[3] = [98, 25, 66] 209 | colors[4] = [60, 71, 233] 210 | colors[5] = [191, 187, 173] 211 | 212 | res = np.zeros((SIZE, SIZE, 3)) 213 | res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0] 214 | res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1] 215 | res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2] 216 | res += (grid[:,:,3:3+1].repeat(3, -1) + 1) / 2 * colors[3] 217 | res += (grid[:,:,4:4+1].repeat(3, -1) + 1) / 2 * colors[4] 218 | res += (grid[:,:,5:5+1].repeat(3, -1) + 1) / 2 * colors[5] 219 | 220 | res = res / colors.sum(0) * 255 221 | 222 | #save results 223 | im = Image.fromarray(np.uint8(res)) 224 | im.save(os.path.basename(__file__) + '.png') 225 | ''' 226 | #save layers 227 | img = np.zeros((SIZE * 6, SIZE * 6)) 228 | for j in range(GRID_CHANNELS): 229 | x = j % 6 230 | y = j // 6 231 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 232 | 233 | img = (img + 1) * 127.5 234 | im = Image.fromarray(np.uint8(img)) 235 | im.save(os.path.basename(__file__) + '_layers.png') 236 | ''' 237 | -------------------------------------------------------------------------------- /examples/6a586378-063a-427c-92b2-87d6236615c6.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/6a586378-063a-427c-92b2-87d6236615c6.py.png -------------------------------------------------------------------------------- /examples/6a586378-063a-427c-92b2-87d6236615c6.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/6a586378-063a-427c-92b2-87d6236615c6.py_layers.png -------------------------------------------------------------------------------- /examples/8815aca8-9614-49b1-addd-89815561f8ac.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 09:21:40 UTC 3 | # GAS change date: 2021-11-28 09:20:21 UTC 4 | # GAS md5 hash: ad55481e87ca5a7e9a8e92cd336d1cad 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import numpy as np #Numpy version: 1.19.5 10 | import os #OS version: default 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | def inverse(x, t_indx, s_indx): 50 | res = x.copy() 51 | res[:,:,t_indx] = -x[:,:,s_indx] 52 | return test_values(res) 53 | 54 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 57 | return test_values(res) 58 | 59 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 60 | res = x.copy() 61 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 62 | return test_values(res) 63 | 64 | def prod(x, t_indx, s_indx): 65 | res = x.copy() 66 | res[:,:,t_indx] = np.prod(x[:,:,s_indx], -1) 67 | return test_values(res) 68 | 69 | def power(x, t_indx, s_indx, p = 1): 70 | res = x.copy() 71 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 72 | return test_values(res) 73 | 74 | #set initial grid 75 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 76 | 77 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 78 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 79 | 80 | grid[:,:,0] = (x * -0.804494034555918 + y * -0.7713127749846067) / 2 81 | grid[:,:,1] = (x * 0.8546131056912982 + y * -0.5181626052928658) / 2 82 | grid[:,:,2] = (x * 0.08113550489677235 + y * -0.7425956892534649) / 2 83 | grid[:,:,3] = (x * -0.983886726570967 + y * 0.7881487907666291) / 2 84 | grid[:,:,4] = (x * 0.992607408490457 + y * -0.5388791681568157) / 2 85 | grid[:,:,5] = (x * -0.5191284100463418 + y * 0.053419810278731106) / 2 86 | grid[:,:,6] = (x * -0.5126335741584209 + y * 0.5429722036766274) / 2 87 | grid[:,:,7] = (x * 0.1755163303198619 + y * 0.07240814350196234) / 2 88 | grid[:,:,8] = (x * -0.0043555257380114565 + y * -0.9920551979196799) / 2 89 | grid[:,:,9] = (x * -0.38436576308855286 + y * -0.11089423936717213) / 2 90 | grid[:,:,10] = (x * 0.9221154582658591 + y * 0.8979694542805641) / 2 91 | grid[:,:,11] = (x * -0.35612353730671886 + y * 0.18059949305986223) / 2 92 | grid[:,:,12] = (x * -0.5482392576708981 + y * -0.8938644075104336) / 2 93 | grid[:,:,13] = (x * -0.9406946438949866 + y * 0.9920290391761293) / 2 94 | grid[:,:,14] = (x * -0.8997815489400753 + y * 0.2817133194771111) / 2 95 | grid[:,:,15] = (x * 0.9602274402822617 + y * 0.16625883302826439) / 2 96 | 97 | #apply transformations to the grid 98 | grid = transit(grid, 13, [8], [1.0]) 99 | grid = smooth_min(grid, 0, 13, 2) 100 | grid = sin(grid, 0, 1, 3.2482968305918973, 53.84979498278949) 101 | grid = magnitude(grid, 4, [6, 11, 14, 13, 5, 2, 7, 3, 12], 2) 102 | grid = transit(grid, 13, [4], [1.0]) 103 | grid = transit(grid, 8, [7, 1, 13, 8, 15, 14], [0.1663311320128742, 0.05112746724958218, 0.08775348923945508, 0.0019657295977636886, 0.33753890903650896, 0.3552832728638158]) 104 | grid = transit(grid, 6, [15, 11, 6, 12, 13, 7, 5, 14], [0.14758114505801948, 0.08144192181822946, 0.12633868888098, 0.12281345148886451, 0.037132543961562674, 0.2024768393935871, 0.24210947048777196, 0.04010593891098492]) 105 | grid = transit(grid, 13, [9, 13, 6, 14], [0.09219025566125422, 0.08347011059265387, 0.31183222499775126, 0.5125074087483406]) 106 | grid = sin(grid, 3, 15, -0.5204486614349288, -84.56499786115597) 107 | grid = sin(grid, 13, 15, 0.6330677471886501, 21.21197307010381) 108 | grid = transit(grid, 13, [15, 14, 10, 13], [0.12487343915294342, 0.44796857198478746, 0.2782586760974327, 0.14889931276483642]) 109 | grid = smooth_min(grid, 6, 4, 9) 110 | grid = smooth_max(grid, 15, 9, 3) 111 | grid = transit(grid, 14, [9, 0, 7, 3, 10], [0.18003513335194174, 0.14430074578557558, 0.05278192595186322, 0.3420095372318055, 0.28087265767881414]) 112 | grid = transit(grid, 6, [9, 2], [0.8300092221448799, 0.16999077785512]) 113 | grid = transit(grid, 2, [7, 11, 5], [0.5020610904494475, 0.2000649367262514, 0.29787397282430106]) 114 | grid = shift(grid, 9, 3, 1.8629741166698146) 115 | grid = sin(grid, 9, 12, 0.4717771305421241, 46.79433508777157) 116 | grid = transit(grid, 6, [5, 1, 3], [0.3308455554710138, 0.004560540434116812, 0.6645939040948694]) 117 | grid = transit(grid, 10, [14, 9, 11, 0, 4], [0.1571721076257657, 0.22232953177362882, 0.3439261449563993, 0.14828263571889963, 0.12828957992530649]) 118 | grid = transit(grid, 5, [7, 12, 9, 8, 10, 0, 4, 6, 1], [0.15194097979748547, 0.0731663817454797, 0.02428989867658961, 0.024720955392025123, 0.17320282754123556, 0.13074629331998922, 0.18740253645197494, 0.018517981754445516, 0.21601214532077495]) 119 | grid = power(grid, 1, 8, 0.0943305761741278) 120 | grid = smooth_min(grid, 6, 15, 11) 121 | grid = transit(grid, 9, [6], [1.0]) 122 | grid = shift(grid, 15, 2, 6.924399414306213) 123 | grid = magnitude(grid, 8, [4, 9, 10, 14, 8, 1, 7, 2], 2) 124 | grid = inverse(grid, 5, 2) 125 | grid = sin(grid, 1, 7, -2.4331893396140662, 13.129089247560827) 126 | grid = transit(grid, 2, [2, 12, 3], [0.031953972707128867, 0.45489589946336373, 0.5131501278295074]) 127 | grid = sin(grid, 12, 0, 1.653702230061592, 32.0922100966462) 128 | grid = prod(grid, 10, [3, 11]) 129 | grid = smooth_min(grid, 6, 10, 10) 130 | grid = transit(grid, 14, [9], [1.0]) 131 | grid = magnitude(grid, 2, [6, 4, 13, 9, 11, 1], 2) 132 | grid = transit(grid, 1, [2, 7, 5, 3, 0, 11, 4, 9], [0.16624228335863997, 0.07936608352041907, 0.3513993412818298, 0.021188094622008487, 0.08386192174365024, 0.1282194955272333, 0.12001002397822418, 0.04971275596799479]) 133 | grid = sin(grid, 4, 12, 2.544642090871637, -40.39439248709369) 134 | grid = prod(grid, 9, [13, 8]) 135 | grid = shift(grid, 8, 5, -5.360670765139654) 136 | grid = sin(grid, 3, 2, -4.454511987713595, -92.7327386105613) 137 | grid = prod(grid, 13, [15]) 138 | grid = magnitude(grid, 2, [15, 0, 14], 2) 139 | grid = prod(grid, 2, [0, 1]) 140 | grid = smooth_min(grid, 10, 10, 0) 141 | grid = power(grid, 12, 14, 0.15311324529261486) 142 | grid = transit(grid, 1, [7, 6, 10, 13, 15, 3, 5, 0], [0.17662121794190266, 0.08052433410094585, 0.24028897664842197, 0.12013847564476617, 0.07880093772139096, 0.028428215371324846, 0.22560259031543914, 0.04959525225580831]) 143 | grid = smooth_max(grid, 7, 5, 13) 144 | grid = magnitude(grid, 7, [13, 15, 1, 3, 6, 11, 4], 2) 145 | grid = inverse(grid, 12, 7) 146 | grid = sin(grid, 11, 4, 3.639967122867514, -93.25232115081823) 147 | grid = transit(grid, 6, [4, 6, 15, 9, 1, 5, 3, 13, 2, 8], [0.026786860129860358, 0.11669543950887244, 0.18899826136984468, 0.1561593743428404, 0.21214890178462398, 0.0032322415512920128, 0.11780529129425855, 0.07068719121249566, 0.028013694139160984, 0.07947274466675097]) 148 | grid = sin(grid, 14, 14, 2.215524766553189, -87.96551270810866) 149 | grid = transit(grid, 14, [14, 1, 2, 13], [0.0481687144675238, 0.19589986923400593, 0.45398843466717564, 0.3019429816312946]) 150 | grid = prod(grid, 0, [15, 8]) 151 | grid = transit(grid, 10, [13, 12, 1, 0, 15, 4, 9], [0.1348467046623781, 0.17044589597313262, 0.007342850565982377, 0.19789678520686874, 0.0940675105296504, 0.18412048892510044, 0.21127976413688732]) 152 | grid = transit(grid, 10, [2, 9, 5, 0, 14, 12, 1, 3, 13], [0.15564199158931152, 0.14582803947048112, 0.0008957976861989731, 0.1152454952632943, 0.09943207305711574, 0.18287730405477473, 0.00913893001260882, 0.07207484105842567, 0.218865527807789]) 153 | grid = magnitude(grid, 15, [3, 0, 2, 13, 6], 2) 154 | grid = transit(grid, 1, [6, 9], [0.6099200010253524, 0.3900799989746476]) 155 | grid = magnitude(grid, 2, [15, 0, 6, 3, 8], 2) 156 | grid = smooth_max(grid, 12, 0, 1) 157 | grid = sin(grid, 7, 15, 0.995912265887857, -42.72193746278157) 158 | grid = sin(grid, 11, 1, 6.730556665812658, 11.99275258901909) 159 | grid = prod(grid, 1, [12]) 160 | grid = transit(grid, 6, [12, 11], [0.5943124150151232, 0.4056875849848768]) 161 | grid = transit(grid, 5, [4, 13], [0.9954188040576598, 0.004581195942340257]) 162 | grid = sin(grid, 2, 12, 0.06755576945439984, -33.27889049774262) 163 | grid = transit(grid, 13, [9, 14, 6], [0.05762580370684737, 0.06539615096633812, 0.8769780453268146]) 164 | grid = transit(grid, 4, [12, 14, 9], [0.057473524463482584, 0.1816114235071543, 0.760915052029363]) 165 | grid = transit(grid, 11, [15, 1, 12, 6, 8, 3], [0.01730030878630351, 0.28262419300280045, 0.27552078196418794, 0.05545201033978391, 0.34057443950514193, 0.028528266401782323]) 166 | grid = transit(grid, 2, [13, 12, 6, 5], [0.06742478950343775, 0.09157173041702017, 0.22592916170606878, 0.6150743183734734]) 167 | grid = sin(grid, 5, 7, 0.899990639356419, -67.22532606663947) 168 | grid = transit(grid, 11, [8, 15, 14, 4], [0.04384833051132965, 0.11258860613922468, 0.3589511099193461, 0.48461195343009955]) 169 | grid = transit(grid, 8, [12, 7, 8, 0, 1, 4], [0.06527062303145298, 0.23886184749184514, 0.11950142545937255, 0.1454854825076062, 0.04705358747881213, 0.38382703403091095]) 170 | grid = magnitude(grid, 6, [5], 2) 171 | grid = transit(grid, 1, [12], [1.0]) 172 | grid = transit(grid, 13, [3, 4], [0.1386633127049261, 0.8613366872950738]) 173 | grid = sin(grid, 15, 6, 1.5112860228043752, 7.805984878306305) 174 | grid = shift(grid, 0, 2, 4.6695496786727535) 175 | grid = power(grid, 1, 2, 6.322252217914226) 176 | grid = smooth_min(grid, 0, 9, 13) 177 | grid = sin(grid, 7, 1, -2.6805374675529468, 66.08998525903917) 178 | grid = transit(grid, 6, [13, 14, 12], [0.08382508029699674, 0.5253371028191618, 0.39083781688384134]) 179 | grid = power(grid, 1, 5, 0.5509283585660674) 180 | grid = sin(grid, 6, 3, 0.4257741243882235, -78.4511925789604) 181 | grid = sin(grid, 1, 15, -6.6236794165645705, 25.0799064162281) 182 | grid = sin(grid, 0, 5, -0.9793141922393116, -0.25413130839717724) 183 | grid = transit(grid, 11, [1, 3], [0.4607880974645301, 0.5392119025354699]) 184 | grid = transit(grid, 9, [8, 15, 12], [0.4114867284146482, 0.19071267395959135, 0.3978005976257605]) 185 | grid = shift(grid, 4, 14, -2.274191212393563) 186 | grid = sin(grid, 12, 4, 2.245710751981959, -17.933388977683265) 187 | grid = inverse(grid, 11, 7) 188 | grid = smooth_max(grid, 12, 12, 14) 189 | grid = magnitude(grid, 10, [10, 12, 5, 15, 2], 2) 190 | grid = prod(grid, 2, [7, 1, 4]) 191 | grid = transit(grid, 6, [11, 10], [0.07051514782964032, 0.9294848521703598]) 192 | grid = transit(grid, 5, [1, 5, 6, 14, 3], [0.11205604818998932, 0.08386730810695489, 0.4071639642171069, 0.0015705752423438564, 0.395342104243605]) 193 | grid = sin(grid, 6, 8, -3.521191032420945, -85.69322219031608) 194 | grid = sin(grid, 1, 5, -4.217683503855911, -27.29078656669786) 195 | grid = sin(grid, 14, 4, -3.4077706520574096, -18.639948219156537) 196 | grid = sin(grid, 2, 5, 0.7433438764027143, 62.47135549470258) 197 | grid = sin(grid, 14, 0, 0.9816804555197611, 29.315522353634407) 198 | grid = transit(grid, 3, [12, 0, 1, 8], [0.27182466622662327, 0.291055898922016, 0.0989179660060851, 0.33820146884527563]) 199 | grid = smooth_min(grid, 4, 13, 5) 200 | grid = transit(grid, 5, [9, 11, 5, 12, 13, 2, 3], [0.20422918703666249, 0.15550454751307252, 0.0364658341041663, 0.04210549012795923, 0.3661057902920009, 0.15326974358384457, 0.042319407342293947]) 201 | grid = sin(grid, 0, 2, -2.437508892522133, 61.582745038997274) 202 | grid = smooth_min(grid, 13, 0, 0) 203 | grid = sin(grid, 2, 12, 2.925577493384024, -45.43639521989875) 204 | grid = transit(grid, 5, [3, 9, 10, 6, 5], [0.3997724194252252, 0.2289130982509136, 0.006994254165943302, 0.16018532729200793, 0.20413490086591002]) 205 | grid = shift(grid, 8, 9, 5.472606415606266) 206 | grid = transit(grid, 8, [10, 0, 5, 8, 11, 12, 2, 15, 14], [0.01864297895499834, 0.029385574497955702, 0.10509264795261554, 0.04561952641174259, 0.11213313423625489, 0.10446086722286875, 0.00325702113446219, 0.37372410301152353, 0.20768414657757858]) 207 | grid = sin(grid, 11, 3, 2.236984614777189, -9.406949686971885) 208 | grid = sin(grid, 5, 5, 5.826905328776672, -95.0372602132718) 209 | grid = smooth_max(grid, 3, 10, 12) 210 | grid = power(grid, 7, 15, 0.592123043635334) 211 | grid = transit(grid, 0, [10, 9, 4, 8, 2], [0.2454469210268065, 0.25308745235919194, 0.20097298922239554, 0.2968001399618873, 0.0036924974297186694]) 212 | 213 | #create color space 214 | def shift_colors(x, shift): 215 | res = x.copy() 216 | for i in range(x.shape[-1]): 217 | if shift[i] > 0: res[:,:,i] = (-np.abs(((x[:,:,i] + 1) / 2) ** (1 + shift[i]) - 1) ** (1 / (1 + shift[i])) + 1) * 2 - 1 218 | if shift[i] < 0: res[:,:,i] = np.abs((1 - (x [:,:,i]+ 1) / 2) ** (1 - shift[i]) - 1) ** (1 / (1 - shift[i])) * 2 - 1 219 | return test_values(res) 220 | 221 | res = np.zeros((SIZE, SIZE, 3)) 222 | res += shift_colors(grid[:,:,0:1].repeat(3, -1), [1.2153247881717355, 0.7048120319236504, 0.04328930814125709]) 223 | res += shift_colors(grid[:,:,1:2].repeat(3, -1), [1.8068412865525474, 1.561304542108936, 1.3529768190139977]) 224 | res += shift_colors(grid[:,:,2:3].repeat(3, -1), [0.42739449246421524, 1.8199847366846467, 0.01605219702211569]) 225 | 226 | res = res / 3 227 | res = ((res + 1) / 2 * 255).clip(0,255) 228 | 229 | #save results 230 | im = Image.fromarray(np.uint8(res)) 231 | im.save(os.path.basename(__file__) + '.png') 232 | 233 | #save layers 234 | img = np.zeros((SIZE * 4, SIZE * 4)) 235 | for j in range(GRID_CHANNELS): 236 | x = j % 4 237 | y = j // 4 238 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 239 | 240 | img = (img + 1) * 127.5 241 | im = Image.fromarray(np.uint8(img)) 242 | im.save(os.path.basename(__file__) + '_layers.png') 243 | 244 | -------------------------------------------------------------------------------- /examples/8815aca8-9614-49b1-addd-89815561f8ac.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/8815aca8-9614-49b1-addd-89815561f8ac.py.png -------------------------------------------------------------------------------- /examples/8815aca8-9614-49b1-addd-89815561f8ac.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/8815aca8-9614-49b1-addd-89815561f8ac.py_layers.png -------------------------------------------------------------------------------- /examples/d59b01f1-b30a-4414-be7e-6912d556bf9c.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 04:17:38 UTC 3 | # GAS change date: 2021-11-28 03:58:45 UTC 4 | # GAS md5 hash: fa4b9db8bcdb760d7fde2be64723fca2 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | def inverse(x, t_indx, s_indx): 50 | res = x.copy() 51 | res[:,:,t_indx] = -x[:,:,s_indx] 52 | return test_values(res) 53 | 54 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 57 | return test_values(res) 58 | 59 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 60 | res = x.copy() 61 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 62 | return test_values(res) 63 | 64 | def shift_mod_abs(x, t_indx, s_indx, shift): 65 | res = x.copy() 66 | res[:,:,t_indx] = np.abs(np.mod((x[:,:,s_indx] + 3)/4 + shift/2, 1) * 2 - 1) * 2 - 1 67 | return test_values(res) 68 | 69 | #set initial grid 70 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 71 | 72 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 73 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 74 | 75 | grid[:,:,0] = (x * 0.8643418060594885 + y * 0.6002740205725097) / 2 76 | grid[:,:,1] = (x * 0.01183721078650768 + y * -0.7074877558164501) / 2 77 | grid[:,:,2] = (x * -0.48643728170863887 + y * 0.7203274908191206) / 2 78 | grid[:,:,3] = (x * 0.7658582693960334 + y * 0.14941321785247208) / 2 79 | grid[:,:,4] = (x * 0.9210916218391232 + y * 0.37140846720931764) / 2 80 | grid[:,:,5] = (x * 0.39136156737873007 + y * -0.06549676689056216) / 2 81 | grid[:,:,6] = (x * 0.9324751771973863 + y * -0.19588844971222885) / 2 82 | grid[:,:,7] = (x * 0.06023978890473192 + y * -0.6815582001062757) / 2 83 | grid[:,:,8] = (x * -0.6993118954667219 + y * 0.961464040384854) / 2 84 | grid[:,:,9] = (x * 0.37138346094417707 + y * -0.7566733584213707) / 2 85 | grid[:,:,10] = (x * 0.3387057689135291 + y * 0.25721938764502617) / 2 86 | grid[:,:,11] = (x * 0.12753054557270316 + y * -0.3413646845394549) / 2 87 | grid[:,:,12] = (x * -0.21127520837749425 + y * -0.43789418122650203) / 2 88 | grid[:,:,13] = (x * -0.7360271671180054 + y * -0.5198570345042122) / 2 89 | grid[:,:,14] = (x * -0.2137488758947239 + y * 0.7151440164025549) / 2 90 | grid[:,:,15] = (x * 0.525452161570175 + y * 0.5170838810547953) / 2 91 | 92 | #apply transformations to the grid 93 | grid = sin(grid, 2, 8, 0.25835015172321396, 21.926278243121033) 94 | grid = sin(grid, 9, 2, -2.0587278631511223, -13.714042922610375) 95 | grid = sin(grid, 2, 6, 1.7139745932070736, -4.643371114330151) 96 | grid = transit(grid, 10, [5], [1.0]) 97 | grid = inverse(grid, 14, 4) 98 | grid = transit(grid, 3, [15, 2, 4], [0.03247658803244306, 0.38545593380145043, 0.5820674781661065]) 99 | grid = magnitude(grid, 15, [15, 11], 2) 100 | grid = sin(grid, 15, 15, -3.253602321442124, -3.0985528409208882) 101 | grid = magnitude(grid, 6, [10, 11, 5, 0, 1, 6], 2) 102 | grid = sin(grid, 3, 1, 1.1235142164006418, 1.51467460366068) 103 | grid = sin(grid, 8, 11, -3.37504357213741, 44.68116651400874) 104 | grid = sin(grid, 7, 14, 0.4447217762204615, 93.13418937590188) 105 | grid = transit(grid, 6, [6, 12, 15, 3, 7, 4, 10], [0.06297423637167997, 0.03744988443931329, 0.3650503980527056, 0.09940753870849321, 0.1221871068090384, 0.1794107207938837, 0.13352011482488577]) 106 | grid = transit(grid, 6, [1, 8, 15, 10, 5], [0.10050817394019121, 0.040893968335904814, 0.47121559436798194, 0.12456955105829291, 0.2628127122976291]) 107 | grid = transit(grid, 11, [8, 9, 10, 1], [0.1741870817351788, 0.4296821339947654, 0.2592226287922774, 0.13690815547777838]) 108 | grid = sin(grid, 9, 11, 6.097916247045983, -70.8957881028912) 109 | grid = sin(grid, 4, 15, -2.339002647277993, 41.615905892741296) 110 | grid = sin(grid, 8, 11, 1.2434848286606566, 21.6237943811725) 111 | grid = transit(grid, 11, [15, 9], [0.070251274216773, 0.9297487257832269]) 112 | grid = sin(grid, 15, 11, -0.8555545495423866, -79.31183209188053) 113 | grid = transit(grid, 1, [2, 11, 5, 10, 1, 14, 0], [0.22879040917375634, 0.021771653373915942, 0.08945373188395699, 0.03139252269478689, 0.13974229914963618, 0.0006454380025782731, 0.48820394572136944]) 114 | grid = sin(grid, 13, 12, -1.0802856451916583, 72.77003783382975) 115 | grid = shift_mod_abs(grid, 3, 1, -0.012532722033949506) 116 | grid = shift(grid, 5, 12, -2.1150798109327225) 117 | grid = transit(grid, 15, [8, 12, 9], [0.28436606994946934, 0.6885905502984891, 0.02704337975204158]) 118 | grid = smooth_max(grid, 10, 15, 6) 119 | grid = transit(grid, 1, [10, 14, 4, 15, 1, 5, 6], [0.2495066295298203, 0.11468510633252497, 0.18785735489376995, 0.21136745589024844, 0.0964692952292473, 0.04260437960684226, 0.09750977851754668]) 120 | grid = sin(grid, 3, 1, -4.0560493416166175, 95.81416817425202) 121 | grid = smooth_min(grid, 8, 11, 2) 122 | grid = smooth_min(grid, 1, 4, 9) 123 | grid = transit(grid, 8, [11], [1.0]) 124 | grid = sin(grid, 9, 15, -0.44933023328502564, -24.232082701600262) 125 | grid = shift(grid, 5, 5, 0.32284439059108283) 126 | grid = transit(grid, 6, [13, 7, 4, 15], [0.4974867376535544, 0.122001688608576, 0.264153347409728, 0.11635822632814159]) 127 | grid = smooth_max(grid, 5, 8, 11) 128 | grid = sin(grid, 15, 1, 3.770783199305386, -43.59702742584115) 129 | grid = shift(grid, 14, 4, 0.9626752538173012) 130 | grid = shift(grid, 11, 4, 0.2986356924688961) 131 | grid = transit(grid, 6, [6, 3, 9], [0.25337956571267745, 0.6686201014198824, 0.07800033286744022]) 132 | grid = sin(grid, 11, 4, -2.174418438809594, -54.49746971586607) 133 | grid = sin(grid, 14, 5, 3.355412283064952, -96.00248310659103) 134 | grid = transit(grid, 14, [12, 4], [0.20390434823030096, 0.7960956517696991]) 135 | grid = sin(grid, 0, 12, -3.2677897638310442, 90.64652490830457) 136 | grid = transit(grid, 2, [5], [1.0]) 137 | grid = magnitude(grid, 5, [1, 3, 4], 2) 138 | grid = shift_mod_abs(grid, 11, 11, 0.036778005118671686) 139 | grid = smooth_max(grid, 13, 15, 6) 140 | grid = shift(grid, 12, 3, -2.4651939565062495) 141 | grid = shift(grid, 6, 14, -0.37870084323956843) 142 | grid = sin(grid, 14, 0, -4.328018669612688, 83.36714104275745) 143 | grid = transit(grid, 3, [13, 10, 8, 15, 14, 7, 11], [0.1944986624492616, 0.07486992256727688, 0.231134536265638, 0.10482295336029568, 0.23146487356687384, 0.15903518116768317, 0.004173870622970833]) 144 | grid = sin(grid, 4, 13, 1.752132294661211, 71.31434471438615) 145 | grid = sin(grid, 6, 0, -0.9548000503320968, 40.365867704964245) 146 | grid = sin(grid, 10, 10, -4.939739936965214, -67.4768415587308) 147 | grid = sin(grid, 15, 5, 3.699809545048698, 29.060835724196096) 148 | grid = transit(grid, 2, [6, 5, 11, 10], [0.18704063266917545, 0.40027016568536794, 0.38958390250734687, 0.023105299138109676]) 149 | grid = transit(grid, 13, [1, 12], [0.5856329592081684, 0.41436704079183173]) 150 | grid = transit(grid, 4, [11, 2], [0.6681946567337378, 0.3318053432662622]) 151 | grid = transit(grid, 7, [13], [1.0]) 152 | grid = transit(grid, 13, [7, 15, 14, 1, 4, 13, 8, 5], [0.0651212397067138, 0.08141617223168503, 0.16370117204908682, 0.05749699627211134, 0.040133892841632726, 0.23195806583657988, 0.1891085902638602, 0.17106387079833013]) 153 | grid = smooth_min(grid, 6, 1, 2) 154 | grid = shift(grid, 0, 2, 1.7297995294615762) 155 | grid = transit(grid, 10, [11, 10, 1, 7], [0.5051037285536154, 0.03972966200442982, 0.010248478752532954, 0.44491813068942176]) 156 | grid = sin(grid, 4, 15, 0.8114196615621545, 33.63335810627916) 157 | grid = transit(grid, 12, [1, 4], [0.17812517814724027, 0.8218748218527597]) 158 | grid = magnitude(grid, 1, [5, 13, 9, 8, 4, 0, 1, 12], 2) 159 | grid = sin(grid, 12, 15, 1.052413439431268, 36.85244986848153) 160 | grid = sin(grid, 3, 14, 2.2265558341365272, 58.678344201412585) 161 | grid = shift(grid, 10, 15, -1.191003896319024) 162 | grid = transit(grid, 9, [0], [1.0]) 163 | grid = transit(grid, 8, [7], [1.0]) 164 | grid = transit(grid, 3, [14, 15, 0], [0.8324348548693109, 0.10090260553984436, 0.06666253959084477]) 165 | grid = transit(grid, 4, [1, 11, 6], [0.6951764313394179, 0.15807485986386538, 0.14674870879671675]) 166 | grid = sin(grid, 5, 8, -0.5388929584442547, -40.951045799188975) 167 | grid = transit(grid, 0, [14, 12, 7, 15, 1, 5, 2], [0.0717952669114225, 0.18497158257756685, 0.18028069287744894, 0.040369480659820135, 0.2844136813127787, 0.029472127023213723, 0.20869716863774904]) 168 | grid = transit(grid, 3, [7, 0, 11, 5, 3, 10, 2, 12, 9, 14], [0.1532552642217957, 0.052082540513404836, 0.10456226084242329, 0.24222079213756853, 0.08192888875012067, 0.05087687641485665, 0.0593378546226986, 0.10434054332655823, 0.07649277311127953, 0.07490220605929412]) 169 | grid = sin(grid, 12, 11, 1.5813522349204758, -62.901105458887294) 170 | grid = smooth_max(grid, 15, 5, 10) 171 | grid = transit(grid, 9, [7, 1, 3, 13, 12, 15, 14, 9, 10, 4], [0.10962082360967332, 0.19053125615890631, 0.007498748298648956, 0.08816972127292766, 0.022108372600841662, 0.09155352349652587, 0.22688313608684876, 0.0990170623345669, 0.0399082096247022, 0.12470914651635842]) 172 | grid = sin(grid, 1, 12, -3.377197075812285, 91.81363199388284) 173 | grid = sin(grid, 11, 4, 4.088354335292304, 17.471191356978437) 174 | grid = sin(grid, 1, 9, 3.9750551181423828, -38.07369088660142) 175 | grid = transit(grid, 9, [6, 4, 0, 14, 15, 7, 5, 9, 2], [0.15072414902669207, 0.016115151222039378, 0.21635379624035503, 0.09258664461187874, 0.07041863207187138, 0.18595251578398936, 0.08747389527715435, 0.15161056370630907, 0.028764652059710613]) 176 | grid = smooth_min(grid, 6, 10, 12) 177 | grid = transit(grid, 6, [14, 12, 4, 0, 8], [0.019392835029131125, 0.052779084304161325, 0.6519161877101358, 0.1513185999987104, 0.12459329295786135]) 178 | grid = transit(grid, 4, [7, 3, 1], [0.14722074771812224, 0.4297314900167701, 0.4230477622651076]) 179 | grid = shift_mod_abs(grid, 1, 1, -0.6172636229141508) 180 | grid = transit(grid, 15, [2, 3, 14, 7], [0.1845131860494681, 0.4988627618028293, 0.18005727801502275, 0.13656677413267973]) 181 | grid = sin(grid, 4, 3, 2.341721772936374, 93.14683704647129) 182 | grid = transit(grid, 12, [3, 9, 6], [0.7994910272394715, 0.006846176789205516, 0.19366279597132302]) 183 | grid = sin(grid, 6, 14, -1.7929160237288677, 31.293746081333893) 184 | grid = shift(grid, 12, 8, -1.9404984616312757) 185 | grid = transit(grid, 14, [11], [1.0]) 186 | grid = transit(grid, 6, [6, 15], [0.5041461806949813, 0.49585381930501876]) 187 | grid = sin(grid, 0, 8, -2.266948121830639, -1.1518625113740057) 188 | grid = transit(grid, 3, [10, 8, 14], [0.005914755244404283, 0.3474144230365773, 0.6466708217190185]) 189 | grid = sin(grid, 7, 7, -5.456915147396615, 85.27127765743711) 190 | grid = transit(grid, 0, [11], [1.0]) 191 | grid = shift(grid, 13, 14, 2.7325419662813806) 192 | grid = transit(grid, 7, [2, 7, 5, 0, 14, 8], [0.15042155054028075, 0.13210423196800344, 0.38072446016471123, 0.028952560227987104, 0.08423664460117544, 0.22356055249784204]) 193 | grid = sin(grid, 2, 4, -1.6480877840655301, 76.00607107062402) 194 | grid = transit(grid, 10, [13, 1, 4], [0.2959827043708235, 0.6675905062669568, 0.0364267893622195]) 195 | grid = transit(grid, 5, [14], [1.0]) 196 | grid = smooth_min(grid, 11, 5, 12) 197 | grid = transit(grid, 11, [4, 9], [0.0414241817853843, 0.9585758182146157]) 198 | grid = sin(grid, 7, 2, -5.131910581877072, -78.47100231216919) 199 | grid = transit(grid, 0, [12, 4, 14, 7, 3, 13, 10], [0.17790933722356692, 0.16361663972063273, 0.055062694716432256, 0.03457850774889348, 0.17804031568953546, 0.37672133851192235, 0.014071166389016693]) 200 | grid = transit(grid, 8, [0, 13, 14, 8, 10], [0.1598266111835022, 0.12709196443400606, 0.3831321974706776, 0.2732362617687772, 0.056712965143037114]) 201 | grid = sin(grid, 14, 14, 2.827375960857153, -20.639387817820335) 202 | grid = sin(grid, 14, 2, 1.4860061918580802, -42.78420050467888) 203 | grid = sin(grid, 15, 14, 0.018329907799037693, -95.64144589957225) 204 | grid = sin(grid, 9, 10, 4.112614360938578, 69.82339276605475) 205 | grid = magnitude(grid, 5, [2, 11, 10, 5, 1], 2) 206 | grid = sin(grid, 4, 14, 3.1210073945273855, 38.905295821442905) 207 | grid = smooth_max(grid, 13, 14, 6) 208 | grid = sin(grid, 6, 11, -3.037900911862603, -41.0210573164032) 209 | grid = transit(grid, 13, [6, 10, 0, 3, 2, 5, 15, 1, 8, 13], [0.14458514805634057, 0.06277120423567376, 0.04501475076653843, 0.2686104020212368, 0.034997235626152125, 0.06538207662054918, 0.11842986397869752, 0.16490812357449247, 0.058322167537226376, 0.036979027583092815]) 210 | grid = sin(grid, 7, 11, 2.869626213337865, 74.40437688303828) 211 | grid = sin(grid, 12, 15, 1.1174220644733124, 53.91153672547625) 212 | grid = magnitude(grid, 10, [5, 10, 9, 15], 2) 213 | grid = shift_mod_abs(grid, 13, 11, 0.8154777646703879) 214 | grid = transit(grid, 1, [3, 1, 2], [0.09070339866389106, 0.11035232864788158, 0.7989442726882273]) 215 | grid = sin(grid, 8, 0, -1.9070787965881668, -27.79434470565772) 216 | grid = transit(grid, 14, [13, 8, 5, 0, 3, 4, 1, 10, 6, 14, 15], [0.14822502205506907, 0.02300773844849466, 0.12691643624383514, 0.13647656943918957, 0.05676955927731482, 0.049161479697029754, 0.06655624850662041, 0.09125188322203971, 0.044386864366051035, 0.18829084764843304, 0.06895735109592303]) 217 | grid = sin(grid, 6, 3, 2.2897047356489, -53.45998887926924) 218 | grid = magnitude(grid, 4, [7, 8, 11, 13, 14, 4, 5, 10, 1, 0, 6, 3, 15], 2) 219 | grid = sin(grid, 11, 13, -0.1814613020335019, -2.8508454113726316) 220 | grid = magnitude(grid, 0, [11, 0, 8, 13, 14, 4, 12, 3], 2) 221 | grid = smooth_max(grid, 6, 2, 11) 222 | grid = sin(grid, 9, 5, -0.18692398669078705, 85.3474252103604) 223 | grid = shift(grid, 6, 6, -0.43484582555426854) 224 | grid = sin(grid, 15, 11, -0.7837863833509879, 50.36233031416694) 225 | grid = sin(grid, 8, 11, -1.9337995907751608, 21.163769561969346) 226 | grid = transit(grid, 1, [8], [1.0]) 227 | grid = magnitude(grid, 9, [2, 10, 12, 11], 2) 228 | grid = transit(grid, 14, [5], [1.0]) 229 | grid = transit(grid, 2, [8, 3, 4, 2, 13], [0.18498519947711267, 0.2302544048382734, 0.2086334555132189, 0.3225390759303082, 0.05358786424108684]) 230 | grid = magnitude(grid, 14, [14], 2) 231 | grid = sin(grid, 8, 2, 5.076940832355406, 32.423288865905306) 232 | grid = transit(grid, 9, [10, 2, 9, 12, 0, 7, 13], [0.12335535828902748, 0.08147455120491619, 0.2835136525720616, 0.11805389463803133, 0.0378112141423774, 0.059296312113284025, 0.296495017040302]) 233 | grid = transit(grid, 11, [4, 5, 10, 9], [0.02996345096592542, 0.48969977025851535, 0.42213340811300837, 0.05820337066255086]) 234 | grid = sin(grid, 2, 2, 2.2884523199401094, -27.726937767680553) 235 | grid = sin(grid, 11, 0, 0.521768702657551, -36.14223206396525) 236 | grid = transit(grid, 13, [4, 10, 12, 5, 0, 8], [0.2980635462987921, 0.17179733779951878, 0.09786381529303359, 0.24122469062670912, 0.08143600789808472, 0.10961460208386163]) 237 | grid = sin(grid, 10, 13, -0.7808301922947212, -56.925522550689855) 238 | grid = sin(grid, 12, 8, -0.925860745567602, -19.750482963953715) 239 | grid = sin(grid, 9, 6, 0.3475244586593385, 50.86089760282346) 240 | grid = inverse(grid, 0, 9) 241 | grid = sin(grid, 2, 12, 5.028535534609008, -54.43133346629676) 242 | grid = transit(grid, 13, [0, 8, 15], [0.12565659207849286, 0.7129538168259533, 0.1613895910955539]) 243 | grid = sin(grid, 15, 15, 6.8822694780228275, -41.458924758553664) 244 | grid = sin(grid, 2, 12, 7.07921736485995, -37.3282028950211) 245 | grid = transit(grid, 2, [2, 6], [0.4961167548365782, 0.5038832451634218]) 246 | grid = sin(grid, 2, 9, -0.24890892305397372, 55.189675163034394) 247 | grid = transit(grid, 7, [2], [1.0]) 248 | grid = smooth_max(grid, 8, 10, 14) 249 | grid = smooth_min(grid, 13, 6, 14) 250 | grid = smooth_min(grid, 10, 15, 5) 251 | grid = sin(grid, 5, 14, -3.59787328637373, -4.6003362534814585) 252 | grid = smooth_min(grid, 12, 9, 7) 253 | grid = shift(grid, 15, 2, 5.183497681208784) 254 | grid = transit(grid, 13, [2], [1.0]) 255 | grid = sin(grid, 13, 11, -0.804329014613692, -46.91284611395681) 256 | grid = transit(grid, 0, [7, 3, 11, 1, 14], [0.03145191813181808, 0.09071377345604954, 0.09547112600182535, 0.726698465422093, 0.055664716988213944]) 257 | grid = sin(grid, 6, 0, 3.8685190352084877, 18.48968352998257) 258 | grid = shift(grid, 10, 0, 1.0851721995280201) 259 | grid = sin(grid, 10, 10, -0.9668205128176128, 76.20329901100277) 260 | grid = transit(grid, 1, [10, 0, 3, 6, 14, 7], [0.20549491073638246, 0.08574509427186884, 0.14079815063964976, 0.25920977005745516, 0.21534948779848698, 0.09340258649615688]) 261 | grid = transit(grid, 1, [6, 2, 9], [0.23347264141429105, 0.06856874594440747, 0.6979586126413015]) 262 | grid = transit(grid, 10, [3, 2, 1, 14], [0.22007742709217595, 0.06231621565934076, 0.43619923427690077, 0.2814071229715825]) 263 | grid = transit(grid, 12, [11, 1, 14, 12, 6, 10], [0.3374943865594992, 0.22350558268536735, 0.14353397264572443, 0.08296470440224331, 0.008257687774290553, 0.20424366593287513]) 264 | grid = sin(grid, 9, 2, 1.0830299059228978, -77.74979102909612) 265 | grid = smooth_max(grid, 0, 9, 13) 266 | grid = transit(grid, 12, [8, 4, 11, 2, 13, 1, 14, 9, 3, 12], [0.035372198910961127, 0.02728831715545566, 0.07999987463180491, 0.038325806496588385, 0.16805977626186341, 0.1611280343306679, 0.20996326459408754, 0.060803673993692776, 0.1169179936754737, 0.10214105994940464]) 267 | grid = magnitude(grid, 2, [4, 2], 2) 268 | grid = transit(grid, 3, [7], [1.0]) 269 | grid = smooth_max(grid, 5, 7, 7) 270 | grid = transit(grid, 4, [14, 7, 1], [0.20823326496530067, 0.6788107794212056, 0.11295595561349375]) 271 | grid = sin(grid, 8, 6, -0.530789542928052, 64.54735922524384) 272 | grid = transit(grid, 13, [13, 4], [0.7308590707137472, 0.2691409292862528]) 273 | grid = shift(grid, 1, 13, 1.4999684528302675) 274 | grid = transit(grid, 11, [1, 12, 10], [0.12013853509276692, 0.849543204936108, 0.0303182599711251]) 275 | grid = transit(grid, 4, [1, 12], [0.6875857680991523, 0.3124142319008477]) 276 | grid = sin(grid, 4, 1, -3.363226773250937, 25.5343752054072) 277 | grid = magnitude(grid, 0, [1, 3], 2) 278 | grid = transit(grid, 3, [0, 11, 10, 14], [0.09841561254146537, 0.5674100590476, 0.11773837778094363, 0.216435950629991]) 279 | grid = shift(grid, 1, 3, 0.01661279567605323) 280 | grid = shift_mod_abs(grid, 3, 2, -0.2133332440524478) 281 | grid = sin(grid, 15, 0, -5.2272318986280615, -53.96578944083943) 282 | grid = transit(grid, 6, [1, 12, 8, 9], [0.09213199280762226, 0.4910336047652721, 0.19210131195162689, 0.22473309047547882]) 283 | grid = sin(grid, 0, 15, -1.3179897820273345, -89.46947544983148) 284 | grid = sin(grid, 1, 5, 3.9607874764176705, 96.06170319096557) 285 | grid = smooth_min(grid, 9, 14, 9) 286 | grid = transit(grid, 0, [14, 1], [0.34428647723613853, 0.6557135227638614]) 287 | grid = sin(grid, 9, 2, 3.306126522965714, 6.304127258578674) 288 | grid = transit(grid, 0, [5], [1.0]) 289 | grid = sin(grid, 11, 9, 1.7706450796781383, -82.77411170538574) 290 | grid = smooth_min(grid, 1, 7, 11) 291 | grid = sin(grid, 2, 11, -0.7203008355220097, -61.794878694986096) 292 | grid = sin(grid, 1, 3, -1.3852579257158861, 70.39932523840088) 293 | grid = magnitude(grid, 10, [14, 8, 11], 2) 294 | grid = transit(grid, 5, [2, 14, 8, 11, 10], [0.34629003014977483, 0.20697322274098853, 0.1697190192780604, 0.2744661411144167, 0.002551586716759634]) 295 | grid = smooth_max(grid, 13, 13, 13) 296 | grid = sin(grid, 7, 7, -6.271142920686637, 6.17693903742564) 297 | grid = magnitude(grid, 10, [3, 12], 2) 298 | grid = transit(grid, 9, [10, 9, 8, 6, 15], [0.18043834954968205, 0.020353471497975763, 0.30145354183405304, 0.35221597982728914, 0.14553865729100013]) 299 | grid = smooth_max(grid, 3, 8, 14) 300 | grid = sin(grid, 15, 15, -2.525502336973101, 17.598001537890923) 301 | grid = transit(grid, 9, [9, 2, 8, 11, 5, 13], [0.2744797838047736, 0.24368188521775427, 0.09678712104547853, 0.056223222791167864, 0.20091882659532662, 0.12790916054549908]) 302 | grid = sin(grid, 13, 7, -6.92218269746812, -34.12441968918432) 303 | grid = transit(grid, 8, [2, 3, 4, 15], [0.22994236448114524, 0.2820709490900832, 0.44201739393738093, 0.04596929249139073]) 304 | grid = transit(grid, 2, [0, 5, 6, 3], [0.03614323335547806, 0.1641470595904913, 0.4891505143646568, 0.3105591926893739]) 305 | grid = transit(grid, 6, [3, 1, 6, 2, 14, 7], [0.1994852509936342, 0.007843849882205234, 0.2462946588511506, 0.11138973783235838, 0.23018633587503146, 0.20480016656562033]) 306 | grid = shift(grid, 3, 14, 3.376567837033712) 307 | grid = sin(grid, 7, 10, -0.46800156615938016, -65.81474725672227) 308 | grid = smooth_max(grid, 12, 15, 15) 309 | grid = sin(grid, 4, 5, 1.5605201423298307, 41.257060583287625) 310 | grid = transit(grid, 10, [0, 4, 7], [0.8767866735738928, 0.10056650618889666, 0.022646820237210628]) 311 | grid = smooth_min(grid, 3, 13, 1) 312 | grid = sin(grid, 0, 15, -2.3963170699361074, -93.13858100326142) 313 | grid = sin(grid, 12, 13, 0.29594346639174257, 63.55851019939223) 314 | grid = transit(grid, 10, [10, 6], [0.9723022461605464, 0.027697753839453502]) 315 | grid = sin(grid, 12, 5, 1.8907728163627338, 65.20958420244952) 316 | grid = sin(grid, 4, 9, -1.006090982255747, -39.50983346190293) 317 | grid = sin(grid, 8, 10, -3.150783570642279, 34.78200133754518) 318 | grid = sin(grid, 0, 14, 5.032058303624256, -72.55400365793456) 319 | grid = smooth_min(grid, 5, 13, 13) 320 | grid = sin(grid, 0, 4, 4.2120558589601576, -22.168073827353282) 321 | grid = smooth_max(grid, 8, 6, 11) 322 | grid = sin(grid, 7, 0, -3.3710387114054736, 51.65233042745939) 323 | grid = sin(grid, 3, 14, -3.828171624184156, 0.24088929185863606) 324 | grid = sin(grid, 7, 0, -0.3925996355496973, 20.355897476026996) 325 | grid = magnitude(grid, 13, [1, 7, 8, 14, 15, 2], 2) 326 | grid = sin(grid, 14, 2, 1.2350070154005643, 37.818516321038175) 327 | grid = sin(grid, 13, 15, -0.6470355376804856, 84.84663719027833) 328 | grid = transit(grid, 10, [8, 10, 15, 7], [0.5046292600947969, 0.25534987589462593, 0.0028301273345001494, 0.2371907366760769]) 329 | grid = sin(grid, 14, 1, -3.5857841599782088, 73.19056294384069) 330 | grid = transit(grid, 5, [2], [1.0]) 331 | grid = sin(grid, 11, 9, 0.09611404275583257, -93.75557402038382) 332 | grid = transit(grid, 7, [8, 14, 4, 12, 13], [0.019814682351872896, 0.07726972684300765, 0.3598208110321618, 0.40441827399198005, 0.13867650578097765]) 333 | grid = transit(grid, 5, [13, 10], [0.4811921528927294, 0.5188078471072707]) 334 | grid = sin(grid, 14, 0, 2.051426169780874, 63.76246527159026) 335 | grid = shift_mod_abs(grid, 6, 3, -0.4755431113627433) 336 | grid = magnitude(grid, 6, [12, 8], 2) 337 | grid = smooth_max(grid, 10, 11, 10) 338 | grid = smooth_max(grid, 11, 8, 1) 339 | grid = sin(grid, 9, 6, -5.630441048669049, -86.9465298420423) 340 | grid = magnitude(grid, 6, [14, 4], 2) 341 | grid = smooth_max(grid, 15, 14, 3) 342 | grid = magnitude(grid, 7, [12, 2, 13, 5, 15], 2) 343 | grid = sin(grid, 13, 5, 0.7180577239258917, -37.68450320125265) 344 | grid = shift_mod_abs(grid, 15, 0, 0.39740628783756393) 345 | grid = sin(grid, 3, 7, -2.881653747960443, -94.77525107179954) 346 | grid = transit(grid, 5, [5, 7, 14, 6, 4], [0.005949232124648486, 0.5161432759242179, 0.09511905036065257, 0.16343482834023207, 0.21935361325024894]) 347 | grid = transit(grid, 3, [14, 9, 1, 7, 4, 2, 8, 5], [0.05585679808011971, 0.06674136180595235, 0.2137030916852326, 0.02559947287617969, 0.1956946752117402, 0.15675988536650867, 0.1800095813240246, 0.10563513365024214]) 348 | grid = sin(grid, 4, 2, -5.169611770787436, -44.95148680576768) 349 | grid = transit(grid, 8, [3, 0, 14], [0.1566308589079141, 0.7970637677355046, 0.046305373356581254]) 350 | grid = transit(grid, 0, [8], [1.0]) 351 | grid = sin(grid, 5, 0, 4.638114296229324, -63.89290552408961) 352 | grid = transit(grid, 3, [6, 5, 15, 10, 9, 8, 4, 7], [0.16960256336629126, 0.06864962307071441, 0.2158620377888371, 0.10901843462467302, 0.010434896725598823, 0.010169751774402854, 0.21059986384926022, 0.20566282880022224]) 353 | grid = transit(grid, 8, [10, 13, 12, 11, 15, 4], [0.4435802804003096, 0.07242751759704737, 0.021444958364808572, 0.1946574509998237, 0.029735516697332025, 0.23815427594067873]) 354 | grid = transit(grid, 8, [13, 1, 10], [0.10611200537562752, 0.2372006097404753, 0.6566873848838972]) 355 | grid = magnitude(grid, 7, [8, 5], 2) 356 | grid = transit(grid, 7, [1, 15, 9, 12, 14, 13], [0.00044952045854961177, 0.048141123875975626, 0.3018330391335465, 0.2586521054236143, 0.22603082380374503, 0.164893387304569]) 357 | grid = shift(grid, 1, 14, 0.021266437525674597) 358 | grid = sin(grid, 0, 11, 1.9798653884460715, 67.43517932958545) 359 | grid = transit(grid, 0, [2, 14, 10, 9, 15, 0, 4, 13, 7, 11, 8, 5, 12, 3], [0.10467592362317106, 0.04951546823907811, 0.023540294958541385, 0.05473962503770174, 0.08641215885733243, 0.13050979276288038, 0.129145679319401, 0.09449095720988115, 0.04887414236750689, 0.07727784070060024, 0.07436487349092359, 0.01533190945217298, 0.020605028028148124, 0.09051630595266091]) 360 | grid = sin(grid, 2, 1, 0.7695685465372705, -69.89732340107402) 361 | grid = smooth_max(grid, 2, 2, 0) 362 | grid = sin(grid, 7, 9, 4.5894276567977235, 30.091535668201317) 363 | grid = sin(grid, 14, 7, 7.17752751641597, -34.944651993686975) 364 | grid = transit(grid, 15, [2], [1.0]) 365 | grid = sin(grid, 13, 10, -0.5138392230865213, -8.296600184086273) 366 | grid = transit(grid, 2, [14, 0, 12, 1], [0.2451888160620973, 0.365448425773462, 0.22025822155063365, 0.1691045366138071]) 367 | grid = sin(grid, 14, 14, -0.6726555888607855, -21.091093780269603) 368 | grid = transit(grid, 13, [1, 0, 3, 4, 15, 10, 13, 9, 7, 5, 8, 11], [0.14608526514904863, 0.020944804084935098, 0.09216879117058731, 0.10953739375783059, 0.055820452153338834, 0.11491241549210994, 0.10824017885860414, 0.10864201759636412, 0.053077483312846466, 0.07271493285596015, 0.10795392203849626, 0.009902343529878422]) 369 | grid = sin(grid, 8, 5, -0.5836489194167, 0.15143369187518374) 370 | grid = shift(grid, 14, 8, 3.290480403699842) 371 | grid = sin(grid, 2, 10, -0.9803255007144543, 58.51296497813692) 372 | grid = magnitude(grid, 2, [8, 3, 14], 2) 373 | grid = transit(grid, 10, [14, 6, 13, 12, 9, 2], [0.051345785750632554, 0.07450141282093097, 0.20375372721426818, 0.16081935101075182, 0.08256917443949278, 0.42701054876392364]) 374 | grid = transit(grid, 13, [1, 12], [0.6148308098174511, 0.38516919018254886]) 375 | grid = transit(grid, 2, [15, 7], [0.17419753869885962, 0.8258024613011403]) 376 | grid = sin(grid, 1, 9, -0.30841944164827667, -88.99318840002482) 377 | grid = sin(grid, 8, 9, 1.3672667398837988, 80.26581078508241) 378 | grid = sin(grid, 8, 10, -12.303390582494227, -51.014346141847525) 379 | grid = shift(grid, 2, 9, -1.037982047475446) 380 | grid = sin(grid, 11, 13, -3.421112814272899, -84.69633212781906) 381 | grid = transit(grid, 9, [6, 3], [0.3057675990182092, 0.6942324009817907]) 382 | grid = shift_mod_abs(grid, 13, 8, -0.3326423690411051) 383 | grid = smooth_max(grid, 3, 13, 8) 384 | grid = smooth_max(grid, 0, 5, 7) 385 | grid = magnitude(grid, 4, [2, 9], 2) 386 | grid = sin(grid, 11, 0, -1.5579018776057265, -1.954556483139399) 387 | grid = transit(grid, 9, [3, 9, 2, 4, 6], [0.10995575679803808, 0.46426804432023183, 0.0604444076660765, 0.32820573807710823, 0.03712605313854538]) 388 | grid = transit(grid, 1, [7, 3], [0.9403287956779426, 0.059671204322057386]) 389 | grid = sin(grid, 9, 6, 3.319747886522862, 72.47031470870365) 390 | grid = sin(grid, 8, 15, 1.6585061250903068, -31.80271171290275) 391 | grid = sin(grid, 15, 3, -2.9647600710162014, -8.123234032378491) 392 | grid = sin(grid, 2, 12, 4.214209488676055, 20.72219281761059) 393 | grid = sin(grid, 10, 10, -5.0365926976698745, -86.66890376959748) 394 | grid = sin(grid, 5, 14, -2.853073739010866, -96.16514750314258) 395 | grid = transit(grid, 2, [12], [1.0]) 396 | grid = shift(grid, 11, 15, -0.7693891099582622) 397 | 398 | #create color space 399 | colors = np.zeros((5, 3)) 400 | colors[0] = [214, 253, 80] 401 | colors[1] = [71, 246, 91] 402 | colors[2] = [158, 120, 242] 403 | colors[3] = [19, 82, 205] 404 | colors[4] = [106, 100, 43] 405 | 406 | res = np.zeros((SIZE, SIZE, 3)) 407 | res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0] 408 | res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1] 409 | res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2] 410 | res += (grid[:,:,3:3+1].repeat(3, -1) + 1) / 2 * colors[3] 411 | res += (grid[:,:,4:4+1].repeat(3, -1) + 1) / 2 * colors[4] 412 | 413 | res = (res / 5 * 2.626527804403767).clip(0,255) 414 | 415 | #save results 416 | im = Image.fromarray(np.uint8(res)) 417 | im.save(os.path.basename(__file__) + '.png') 418 | 419 | #save layers 420 | img = np.zeros((SIZE * 4, SIZE * 4)) 421 | for j in range(GRID_CHANNELS): 422 | x = j % 4 423 | y = j // 4 424 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 425 | 426 | img = (img + 1) * 127.5 427 | im = Image.fromarray(np.uint8(img)) 428 | im.save(os.path.basename(__file__) + '_layers.png') 429 | -------------------------------------------------------------------------------- /examples/d59b01f1-b30a-4414-be7e-6912d556bf9c.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/d59b01f1-b30a-4414-be7e-6912d556bf9c.py.png -------------------------------------------------------------------------------- /examples/d59b01f1-b30a-4414-be7e-6912d556bf9c.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/d59b01f1-b30a-4414-be7e-6912d556bf9c.py_layers.png -------------------------------------------------------------------------------- /examples/e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py: -------------------------------------------------------------------------------- 1 | # This program was generated by "Generative Art Synthesizer" 2 | # Generation date: 2021-11-28 04:09:37 UTC 3 | # GAS change date: 2021-11-28 03:58:45 UTC 4 | # GAS md5 hash: fa4b9db8bcdb760d7fde2be64723fca2 5 | # Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] 6 | # For more information visit: https://github.com/volotat/GAS 7 | 8 | #import python libraries 9 | import os #OS version: default 10 | import numpy as np #Numpy version: 1.19.5 11 | from PIL import Image #PIL version: 8.1.2 12 | 13 | #set initial params 14 | SIZE = 768 15 | GRID_CHANNELS = 16 16 | 17 | def test_values(arr): 18 | if np.isnan(arr).any(): 19 | raise Exception('Array has None elements!') 20 | 21 | if np.amin(arr) < -1 or np.amax(arr) > 1: 22 | raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) 23 | 24 | return arr 25 | 26 | #define grid transformation methods 27 | 28 | def transit(x, t_indx, s_indx, alphas): 29 | res = x.copy() 30 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 31 | return test_values(res.clip(-1,1)) 32 | 33 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 34 | res = x.copy() 35 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 36 | return test_values(res) 37 | 38 | def magnitude(x, t_indx, s_indx, ord = 2): 39 | res = x.copy() 40 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx)) 41 | return test_values(res) 42 | 43 | def shift(x, t_indx, s_indx, shift): 44 | res = x.copy() 45 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 46 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 47 | return test_values(res) 48 | 49 | #set initial grid 50 | grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) 51 | 52 | x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) 53 | y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) 54 | 55 | grid[:,:,0] = (x * 0.880703549247527 + y * 0.11226912666059086) / 2 56 | grid[:,:,1] = (x * 0.72222465726219 + y * -0.2655218248501834) / 2 57 | grid[:,:,2] = (x * -0.7041108984829598 + y * -0.12998385826349068) / 2 58 | grid[:,:,3] = (x * -0.5412708261945978 + y * 0.45155554458906755) / 2 59 | grid[:,:,4] = (x * -0.735093345757937 + y * 0.2208148166983943) / 2 60 | grid[:,:,5] = (x * 0.4938229505679772 + y * 0.5264760552251331) / 2 61 | grid[:,:,6] = (x * -0.8188097413844881 + y * 0.33444456031307057) / 2 62 | grid[:,:,7] = (x * -0.03917331267793145 + y * -0.21063802048855074) / 2 63 | grid[:,:,8] = (x * 0.29756740482761224 + y * -0.3730506743077353) / 2 64 | grid[:,:,9] = (x * -0.6268661645255467 + y * 0.2224235794170064) / 2 65 | grid[:,:,10] = (x * 0.08733100173782127 + y * 0.7486830681367214) / 2 66 | grid[:,:,11] = (x * -0.6859393692071114 + y * -0.1927412743289585) / 2 67 | grid[:,:,12] = (x * 0.052329831084386935 + y * -0.4304374921048626) / 2 68 | grid[:,:,13] = (x * 0.5776859725339458 + y * 0.13186677598461793) / 2 69 | grid[:,:,14] = (x * 0.3257911908472251 + y * -0.3741770996527638) / 2 70 | grid[:,:,15] = (x * -0.010989835106052892 + y * -0.13643427913830553) / 2 71 | 72 | #apply transformations to the grid 73 | grid = shift(grid, 13, 12, 0.4045727846245524) 74 | grid = sin(grid, 11, 4, 0.9075060985779413, 48.10253693605321) 75 | grid = transit(grid, 4, [1, 15, 5, 2, 9, 13, 0], [0.05370224794631401, 0.21397133227430115, 0.3375549613251897, 0.07751569632684119, 0.03501798271598436, 0.22437967324808208, 0.05785810616328756]) 76 | grid = transit(grid, 10, [0, 5, 10, 8], [0.07517675781812172, 0.6833959049684463, 0.16061560391250318, 0.08081173330092878]) 77 | grid = transit(grid, 9, [15], [1.0]) 78 | grid = sin(grid, 6, 3, -2.467079740058216, -54.25541635882733) 79 | grid = transit(grid, 1, [4, 11, 5], [0.0010199061127296359, 0.8601675318875391, 0.1388125619997312]) 80 | grid = sin(grid, 3, 13, -2.4463584509797696, 9.91617785215621) 81 | grid = shift(grid, 10, 11, -0.5875482628082206) 82 | grid = transit(grid, 1, [7, 2, 6, 4], [0.5587543622067485, 0.14713609827068802, 0.17781304294369862, 0.11629649657886505]) 83 | grid = sin(grid, 15, 14, -3.065299235239031, 12.981181894273618) 84 | grid = sin(grid, 12, 11, 1.1602129817908904, -44.473045421240954) 85 | grid = transit(grid, 15, [6, 13, 12], [0.42301037219759696, 0.29823381821374056, 0.2787558095886625]) 86 | grid = transit(grid, 5, [11], [1.0]) 87 | grid = transit(grid, 14, [1], [1.0]) 88 | grid = sin(grid, 15, 9, 6.107496785782841, 3.567363734480793) 89 | grid = transit(grid, 8, [0, 14, 2, 6], [0.23971377453401077, 0.22810405254353705, 0.201772051660236, 0.33041012126221614]) 90 | grid = transit(grid, 1, [14, 11, 2, 7], [0.18069946199038936, 0.2117619018324126, 0.40196824929067565, 0.2055703868865224]) 91 | grid = shift(grid, 0, 2, 0.6831787131411833) 92 | grid = shift(grid, 8, 3, -3.842411146295273) 93 | grid = sin(grid, 5, 10, 1.954944490187949, -96.14276497402801) 94 | grid = sin(grid, 9, 0, -1.373938741338193, 35.32096496277177) 95 | grid = transit(grid, 6, [9], [1.0]) 96 | grid = sin(grid, 11, 14, -2.419333281287012, -29.53499711875645) 97 | grid = sin(grid, 6, 11, -1.4330491970112915, -51.8232659419118) 98 | grid = transit(grid, 9, [10, 11, 8, 5, 0, 12], [0.136073472500635, 0.04716222826533003, 0.08921457906413062, 0.10595338155702602, 0.3539339234261745, 0.26766241518670375]) 99 | grid = sin(grid, 3, 1, -2.818078208776297, -36.71178090727465) 100 | grid = transit(grid, 11, [9], [1.0]) 101 | grid = sin(grid, 6, 8, -6.767765295672068, -72.7599675668916) 102 | grid = shift(grid, 9, 10, -2.1173678802336937) 103 | grid = sin(grid, 4, 12, -2.4461012769063686, 17.248864545920156) 104 | grid = shift(grid, 4, 2, 0.6069681704348787) 105 | grid = sin(grid, 6, 13, 4.209484837321972, 12.502167592439605) 106 | grid = shift(grid, 2, 9, -3.31546400822878) 107 | grid = transit(grid, 2, [13], [1.0]) 108 | grid = sin(grid, 4, 12, 1.6486918943540654, -73.15320210020045) 109 | grid = sin(grid, 1, 6, 1.9319307607477374, 8.081415759709017) 110 | grid = transit(grid, 3, [7, 2, 4], [0.14338893888561466, 0.16736219155835286, 0.6892488695560325]) 111 | grid = sin(grid, 10, 6, 0.7449398572990629, -95.79198599308674) 112 | grid = transit(grid, 14, [2, 3, 5], [0.1884724717919949, 0.6427405018131251, 0.16878702639487997]) 113 | grid = sin(grid, 13, 13, -2.5270575490907214, -42.40911379830807) 114 | grid = shift(grid, 9, 0, -2.323687270992069) 115 | grid = sin(grid, 2, 8, -1.2217554076786428, -79.97011445131733) 116 | grid = shift(grid, 8, 9, 0.9257577705487434) 117 | grid = transit(grid, 14, [1, 10, 14, 6, 8, 12, 11], [0.10457384653692132, 0.17046411526232946, 0.20097673414641926, 0.17281598372568743, 0.0766000687621522, 0.11757262100231915, 0.15699663056417132]) 118 | grid = transit(grid, 3, [0, 14, 12], [0.01689094298769405, 0.2343591983170122, 0.7487498586952938]) 119 | grid = magnitude(grid, 2, [15, 8, 5, 10, 6, 11, 13, 4, 14, 9, 0], 2) 120 | grid = magnitude(grid, 5, [8, 5, 10], 2) 121 | grid = transit(grid, 7, [12, 11, 15, 3, 1], [0.1706040219424114, 0.06779494613982316, 0.18318036367449872, 0.36364198974345496, 0.2147786784998119]) 122 | grid = sin(grid, 12, 11, 0.5285020834828165, 61.36273083690341) 123 | grid = magnitude(grid, 6, [0], 2) 124 | grid = sin(grid, 14, 3, 1.4997811022335275, 58.14349707786397) 125 | grid = sin(grid, 13, 7, -3.399164127997562, -19.672517685806397) 126 | grid = sin(grid, 15, 15, 1.2387289665321017, 27.943612081077134) 127 | grid = shift(grid, 15, 7, -3.710728652417229) 128 | grid = transit(grid, 4, [4, 0, 3, 9, 7], [0.5361679527521497, 0.02111295326985725, 0.012868635849893444, 0.36976952872012125, 0.060080929407978205]) 129 | grid = shift(grid, 0, 13, -0.37049300095142695) 130 | grid = magnitude(grid, 2, [9, 11, 6, 14, 4, 15, 5], 2) 131 | grid = transit(grid, 9, [11, 3, 15, 4], [0.2282059105837712, 0.13586810797692248, 0.269112130738718, 0.3668138507005883]) 132 | grid = transit(grid, 0, [4], [1.0]) 133 | grid = sin(grid, 2, 5, -0.7279409684330373, -37.06225994981362) 134 | grid = transit(grid, 10, [14, 11, 0, 1, 15, 7, 6, 9], [0.17786393704008105, 0.06302860293273459, 0.24022581868510642, 0.06846853581458119, 0.08613329329595742, 0.09961085641417876, 0.0585726014293584, 0.20609635438800217]) 135 | grid = transit(grid, 10, [9], [1.0]) 136 | grid = sin(grid, 9, 6, 8.102929193901593, -36.643051289177684) 137 | grid = sin(grid, 1, 14, -2.365103924212311, -73.17663030787858) 138 | grid = sin(grid, 2, 2, 1.2261280456871613, -4.519913138371919) 139 | grid = transit(grid, 6, [2, 3, 6], [0.934905528865338, 0.0541295821137118, 0.01096488902095021]) 140 | grid = transit(grid, 12, [12, 4, 2, 6], [0.42401900669930737, 0.2833739233430186, 0.029067575261479784, 0.26353949469619414]) 141 | grid = transit(grid, 6, [12, 15, 11, 10, 1, 5], [0.15136672768423895, 0.1887713068959719, 0.058012553821586564, 0.2686100009405377, 0.09906089330562604, 0.23417851735203885]) 142 | grid = transit(grid, 9, [13, 6, 12, 14, 11, 15, 10, 4], [0.05576877952378252, 0.31189170830627305, 0.059597919364088876, 0.08283703880318968, 0.20307384516637172, 0.1880770506511924, 0.06469088170144041, 0.03406277648366136]) 143 | grid = transit(grid, 12, [0, 9, 5, 6, 11, 1], [0.07963964477668949, 0.08458701391864935, 0.3594587053320302, 0.03430938926944228, 0.14611056127183966, 0.29589468543134895]) 144 | grid = transit(grid, 1, [4, 14, 10], [0.30127500594897483, 0.3378428757813772, 0.36088211826964794]) 145 | grid = transit(grid, 5, [2, 5, 3, 4, 10, 8, 15], [0.20223926672000514, 0.048537632330807434, 0.20413094296843354, 0.1553143787934316, 0.09797645693490119, 0.13194560180479045, 0.15985572044763066]) 146 | grid = transit(grid, 0, [3], [1.0]) 147 | grid = transit(grid, 0, [6], [1.0]) 148 | grid = transit(grid, 5, [12, 1], [0.573663415615231, 0.42633658438476885]) 149 | grid = sin(grid, 10, 15, 2.6236673260323196, 8.507292078840905) 150 | grid = transit(grid, 3, [2, 13, 3, 1], [0.3399173441239701, 0.1359616614732491, 0.23277124436149976, 0.29134975004128105]) 151 | grid = transit(grid, 9, [7, 13, 3], [0.054116255565990694, 0.3217299619548907, 0.6241537824791186]) 152 | grid = sin(grid, 0, 10, -2.5606261532755616, -85.86130311061564) 153 | grid = transit(grid, 13, [15], [1.0]) 154 | grid = sin(grid, 9, 7, 0.46507439874705847, -60.569947980556634) 155 | grid = sin(grid, 3, 2, 8.266021191696606, 79.17603435050862) 156 | grid = sin(grid, 0, 4, 1.2560956861254562, 82.48734755078726) 157 | grid = sin(grid, 6, 15, 2.9297792187044456, 70.0137313133929) 158 | grid = transit(grid, 6, [1], [1.0]) 159 | grid = sin(grid, 13, 15, 4.575102453160294, 6.920201839524637) 160 | grid = transit(grid, 14, [5, 8, 15, 6, 11, 0], [0.22780067006419621, 0.1601321841187978, 0.27867031779847556, 0.1332670930614115, 0.023030950174850427, 0.1770987847822685]) 161 | grid = sin(grid, 14, 3, -2.9930872804241218, -79.88222474304422) 162 | grid = transit(grid, 11, [12, 7, 15], [0.38679464307454436, 0.4570933390412692, 0.15611201788418633]) 163 | grid = sin(grid, 9, 11, -2.169509137344126, 1.7204822412435021) 164 | grid = sin(grid, 4, 6, -2.3914316239777493, -64.24503813514167) 165 | grid = sin(grid, 1, 9, -1.0865785508003218, -49.8053036429585) 166 | grid = transit(grid, 12, [9, 5], [0.695190378841733, 0.30480962115826704]) 167 | grid = transit(grid, 7, [15, 11], [0.6292974994132439, 0.3707025005867561]) 168 | grid = shift(grid, 1, 4, 1.677555036042155) 169 | grid = transit(grid, 8, [2, 8], [0.35609661887577687, 0.6439033811242232]) 170 | grid = sin(grid, 8, 5, -1.1045370509593484, 91.13674535061253) 171 | grid = sin(grid, 2, 4, -4.651329756508084, 27.195989977563542) 172 | grid = transit(grid, 2, [9], [1.0]) 173 | grid = transit(grid, 1, [8, 14, 5, 11, 10], [0.0036056097184175196, 0.26843485137220063, 0.13612640835091008, 0.26464934056208983, 0.3271837899963818]) 174 | grid = transit(grid, 13, [7, 5, 1, 3], [0.6195656466191442, 0.08455535623028687, 0.03506669441819395, 0.26081230273237493]) 175 | grid = sin(grid, 13, 14, -0.943677409208133, -92.57944082061601) 176 | grid = magnitude(grid, 11, [14, 7, 8, 12, 5, 3, 9, 2, 13, 6, 11], 2) 177 | grid = sin(grid, 0, 3, -3.7694589381262453, -92.64806144708102) 178 | grid = transit(grid, 9, [5, 11, 14, 10, 15, 2, 0], [0.2864809773361196, 0.3152671070491731, 0.013532461690342784, 0.13060565078099493, 0.02846280290664508, 0.22038770323098716, 0.005263297005737318]) 179 | grid = transit(grid, 8, [13, 1, 4], [0.060726242579363106, 0.41927169928348135, 0.5200020581371556]) 180 | grid = transit(grid, 6, [14, 0, 7, 3, 12], [0.29659781376406125, 0.18072399769175265, 0.20119026337730675, 0.13721212712953798, 0.18427579803734132]) 181 | grid = sin(grid, 7, 11, 1.7610839276380672, 32.173478472197814) 182 | grid = magnitude(grid, 15, [0, 4, 2, 11, 1, 6, 5], 2) 183 | grid = transit(grid, 7, [1, 4, 15], [0.3450079990977312, 0.48161990655088716, 0.1733720943513817]) 184 | grid = transit(grid, 6, [0], [1.0]) 185 | grid = magnitude(grid, 2, [5, 6, 7], 2) 186 | grid = sin(grid, 8, 15, -2.2936036860078732, -23.075119803431733) 187 | grid = sin(grid, 4, 10, -0.014352287126650817, 17.901093980222043) 188 | grid = transit(grid, 13, [13, 4], [0.22235491674177973, 0.7776450832582203]) 189 | grid = transit(grid, 0, [13, 14, 9, 2], [0.3300830669379811, 0.5208911661142294, 0.021589310728717788, 0.1274364562190717]) 190 | grid = transit(grid, 11, [7], [1.0]) 191 | grid = sin(grid, 11, 5, 1.4924250552630598, 34.576375408140336) 192 | grid = sin(grid, 2, 15, 0.9001056995485989, -56.0238771397064) 193 | grid = sin(grid, 15, 11, 2.396513843251605, -0.6135271444075414) 194 | grid = shift(grid, 1, 7, -3.981581349030889) 195 | grid = transit(grid, 8, [3, 4, 1, 0, 2, 10, 7, 15, 14, 6, 11], [0.08094575700814126, 0.006669985979154416, 0.11829290434205557, 0.14290315839816176, 0.10977950389980953, 0.10283570313590296, 0.07625041773689309, 0.06108500199329909, 0.007556613873409271, 0.26739925905534706, 0.026281694577825858]) 196 | grid = sin(grid, 8, 2, -0.3953402123546056, -78.21814629995238) 197 | grid = shift(grid, 2, 12, 2.9256908872555525) 198 | grid = transit(grid, 9, [8, 6, 15, 2, 4, 9, 3, 5, 11, 13, 14, 10, 0, 12, 7, 1], [0.07479239159175546, 0.025143480551557715, 0.10071307784533971, 0.09050793371189689, 0.06370637427099979, 0.07565208261314132, 0.0600292257725359, 0.0026120570462946193, 0.22817678679604422, 0.024773617651825897, 0.024964125522554455, 0.09002585041377784, 0.0044767793672124715, 0.016729513680344896, 0.07151664345209585, 0.04618005971262284]) 199 | grid = magnitude(grid, 0, [13, 9, 2, 1, 5, 3, 11], 2) 200 | grid = transit(grid, 4, [4, 3, 10, 2, 13, 0, 12, 11, 14, 7], [0.12579500133190447, 0.1448541829426306, 0.0755757352916395, 0.10401439991541316, 0.12261343931548446, 0.01876330949745519, 0.03352705000131652, 0.07514184425846966, 0.09280086881030668, 0.20691416863537976]) 201 | grid = transit(grid, 13, [5], [1.0]) 202 | grid = transit(grid, 15, [1, 7, 9, 10, 3, 14, 6, 13, 8], [0.13619120558118283, 0.003474831952158296, 0.04166027176105831, 0.13563283836809417, 0.2668642392408856, 0.15955409312258237, 0.06286323032903726, 0.03522267225394151, 0.15853661739105956]) 203 | grid = transit(grid, 1, [13, 8, 7, 5, 14], [0.14789317815662228, 0.27563568440812725, 0.15971104365401195, 0.3350655198154108, 0.08169457396582785]) 204 | grid = transit(grid, 2, [11], [1.0]) 205 | grid = transit(grid, 12, [3, 1, 4, 2, 14], [0.3717182370596017, 0.05310998388425516, 0.13055160644256986, 0.24968533079601152, 0.1949348418175617]) 206 | grid = sin(grid, 2, 4, -5.698197778539194, -11.306359206327315) 207 | grid = sin(grid, 14, 4, -5.265107359546434, -95.27300187895757) 208 | grid = sin(grid, 9, 9, 7.034687693627124, 85.41486840573378) 209 | grid = sin(grid, 4, 9, 5.911225254257176, -33.560950087554374) 210 | grid = transit(grid, 12, [7, 3, 9, 6, 14, 5, 11, 8, 1, 13, 15, 12, 0, 4, 10, 2], [0.02217282351980389, 0.048577661491812536, 0.07944783296545752, 0.057605178784852405, 0.05115043417016954, 0.022751461905389608, 0.031100472980389322, 0.05783842545671054, 0.05272976684000393, 0.12906556978256925, 0.07014702064208232, 0.08476978484189245, 0.15091190523119283, 0.0448016857804275, 0.04778767258053978, 0.04914230302670646]) 211 | grid = transit(grid, 0, [8], [1.0]) 212 | grid = transit(grid, 9, [6, 0, 12, 4], [0.09726599672336637, 0.4312764207006278, 0.25686320685779757, 0.21459437571820825]) 213 | grid = transit(grid, 15, [1], [1.0]) 214 | grid = sin(grid, 8, 9, 2.566846240104397, 22.96097663158845) 215 | grid = transit(grid, 5, [13, 7, 10, 11], [0.14613853006253308, 0.3143444271983619, 0.35435557745814006, 0.18516146528096503]) 216 | grid = transit(grid, 3, [15], [1.0]) 217 | grid = sin(grid, 15, 12, 0.6382870190616097, 25.870547651929243) 218 | grid = sin(grid, 13, 11, 0.9820052935540515, 30.57423505911379) 219 | grid = transit(grid, 14, [11, 1, 0], [0.006924094387170437, 0.6542176476197824, 0.33885825799304725]) 220 | grid = transit(grid, 7, [7, 13, 15], [0.06959228398928544, 0.5296906826035634, 0.4007170334071511]) 221 | grid = transit(grid, 8, [8, 4, 0, 12, 7, 14], [0.2281714771429918, 0.24598915467600604, 0.02860266720633082, 0.4218100098899747, 0.013219763509333344, 0.06220692757536336]) 222 | grid = sin(grid, 6, 15, 2.596859161415219, -70.78871834954799) 223 | grid = sin(grid, 6, 6, 1.6823912205172569, 81.31933246941023) 224 | grid = sin(grid, 8, 6, -0.4245385905213675, -2.5313341336448616) 225 | grid = sin(grid, 14, 2, -2.0738447943193044, -5.345940741751164) 226 | grid = transit(grid, 8, [3], [1.0]) 227 | grid = magnitude(grid, 15, [11], 2) 228 | grid = transit(grid, 11, [11, 13, 2, 6, 3], [0.29345475212279004, 0.1302697941620325, 0.033042813734151834, 0.019047943637312117, 0.5241846963437135]) 229 | grid = transit(grid, 11, [3], [1.0]) 230 | grid = shift(grid, 11, 12, 3.362951067765744) 231 | grid = sin(grid, 11, 9, 7.143900558131273, -24.000770402452304) 232 | grid = sin(grid, 2, 13, -1.000083976749733, 58.03599950779824) 233 | grid = sin(grid, 15, 8, 3.4044517835736903, -63.36516808694144) 234 | grid = shift(grid, 14, 12, -3.4206993351134347) 235 | grid = sin(grid, 12, 10, -1.5055361700529282, 13.868686271208276) 236 | grid = sin(grid, 1, 13, -0.673686153905948, -20.094950794738736) 237 | grid = magnitude(grid, 11, [8, 13, 15, 6, 7, 11, 2, 10, 5], 2) 238 | grid = transit(grid, 13, [1, 12, 3, 6, 9, 10], [0.0020503773234260346, 0.14575822302067934, 0.27419762027731015, 0.21033002095982942, 0.29912193442151697, 0.06854182399723824]) 239 | grid = sin(grid, 5, 8, -1.8932466041324059, 93.73114685012351) 240 | grid = sin(grid, 15, 6, 4.7072717310799925, -44.90301712742202) 241 | grid = magnitude(grid, 14, [6, 8], 2) 242 | grid = shift(grid, 3, 0, 1.7946965281459208) 243 | grid = transit(grid, 11, [4, 13, 1], [0.45757594313323957, 0.2828137542275761, 0.2596103026391845]) 244 | grid = transit(grid, 1, [14, 1, 7, 11, 12, 10, 15], [0.10009869309798085, 0.010234816243677398, 0.14417051045245705, 0.24281508592952442, 0.07328851803131534, 0.09064518892483588, 0.338747187320209]) 245 | grid = shift(grid, 3, 10, -1.0454375008242347) 246 | grid = transit(grid, 1, [15], [1.0]) 247 | grid = sin(grid, 14, 11, -2.0910228696429245, 47.90635541176135) 248 | grid = sin(grid, 14, 11, 1.2704046960728341, 6.859480228989639) 249 | grid = sin(grid, 1, 15, 1.4519963123024275, -87.68929718868964) 250 | grid = sin(grid, 4, 4, -0.9310976892952434, -94.3310806264615) 251 | grid = sin(grid, 4, 4, 0.7722857755647808, 23.636190952189168) 252 | grid = shift(grid, 8, 15, 2.4573170196533978) 253 | grid = shift(grid, 15, 1, 0.2749854463329272) 254 | grid = sin(grid, 14, 4, -3.9696624844285555, 9.61600453014502) 255 | grid = sin(grid, 3, 5, 1.0908898603058697, 98.73073894492785) 256 | grid = transit(grid, 5, [9, 12], [0.8041224197394823, 0.19587758026051763]) 257 | grid = sin(grid, 9, 6, -2.4745565606768434, 9.400580603774728) 258 | grid = transit(grid, 4, [1, 11, 6], [0.2839081418067015, 0.6857780272425941, 0.030313830950704404]) 259 | grid = shift(grid, 6, 6, 1.9561184286941287) 260 | grid = magnitude(grid, 6, [9, 5, 4], 2) 261 | 262 | #create color space 263 | colors = np.zeros((12, 3)) 264 | colors[0] = [85, 167, 80] 265 | colors[1] = [66, 226, 87] 266 | colors[2] = [112, 152, 217] 267 | colors[3] = [5, 3, 239] 268 | colors[4] = [103, 40, 193] 269 | colors[5] = [15, 145, 136] 270 | colors[6] = [125, 117, 193] 271 | colors[7] = [77, 44, 71] 272 | colors[8] = [229, 7, 192] 273 | colors[9] = [219, 98, 208] 274 | colors[10] = [173, 194, 202] 275 | colors[11] = [252, 128, 239] 276 | 277 | res = np.zeros((SIZE, SIZE, 3)) 278 | res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0] 279 | res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1] 280 | res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2] 281 | res += (grid[:,:,3:3+1].repeat(3, -1) + 1) / 2 * colors[3] 282 | res += (grid[:,:,4:4+1].repeat(3, -1) + 1) / 2 * colors[4] 283 | res += (grid[:,:,5:5+1].repeat(3, -1) + 1) / 2 * colors[5] 284 | res += (grid[:,:,6:6+1].repeat(3, -1) + 1) / 2 * colors[6] 285 | res += (grid[:,:,7:7+1].repeat(3, -1) + 1) / 2 * colors[7] 286 | res += (grid[:,:,8:8+1].repeat(3, -1) + 1) / 2 * colors[8] 287 | res += (grid[:,:,9:9+1].repeat(3, -1) + 1) / 2 * colors[9] 288 | res += (grid[:,:,10:10+1].repeat(3, -1) + 1) / 2 * colors[10] 289 | res += (grid[:,:,11:11+1].repeat(3, -1) + 1) / 2 * colors[11] 290 | 291 | res = (res / 12 * 4.44128606984584).clip(0,255) 292 | 293 | #save results 294 | im = Image.fromarray(np.uint8(res)) 295 | im.save(os.path.basename(__file__) + '.png') 296 | 297 | #save layers 298 | img = np.zeros((SIZE * 4, SIZE * 4)) 299 | for j in range(GRID_CHANNELS): 300 | x = j % 4 301 | y = j // 4 302 | img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] 303 | 304 | img = (img + 1) * 127.5 305 | im = Image.fromarray(np.uint8(img)) 306 | im.save(os.path.basename(__file__) + '_layers.png') 307 | -------------------------------------------------------------------------------- /examples/e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py.png -------------------------------------------------------------------------------- /examples/e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/examples/e2d4bae6-6597-44ff-a733-3665fd2b2fa2.py_layers.png -------------------------------------------------------------------------------- /gas.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import os 3 | import sys 4 | import uuid 5 | import datetime 6 | import hashlib 7 | import time 8 | import shutil 9 | import PIL 10 | from tensorflow.keras.models import load_model 11 | from PIL import Image 12 | import matplotlib.pyplot as plt 13 | from subprocess import call 14 | from methods import * 15 | 16 | NUM_SAMPLES = 1000 17 | 18 | rate_model = load_model('rate_model.h5'); 19 | rate_size = 224 20 | 21 | project_files = ['gas.py', 'methods.py'] 22 | 23 | #create run's folder 24 | generation_date = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") 25 | folder_name = ('Run %s' % generation_date.replace(':', '-')).replace(' ', '_') # 26 | os.mkdir(folder_name) 27 | 28 | #save copy of project files into run's backup folder (useful if you ever want to modify the project) 29 | backup_folder = os.path.join(folder_name,'backup') 30 | os.mkdir(backup_folder) 31 | for file in project_files: 32 | shutil.copyfile(file, os.path.join(backup_folder,file)) 33 | 34 | #finds the date of last modified file, so we know when the project was modified last time 35 | #finds hash of all main files of the project, to know to which iteration of it the generated program belongs to 36 | gas_date = 0 37 | binary_gas_hash = bytes.fromhex('00000000000000000000000000000000') 38 | for file_path in project_files: 39 | file_date = os.path.getmtime(file_path) 40 | if file_date > gas_date: gas_date = file_date 41 | with open(file_path, "r") as file: 42 | data = file.read().encode('utf-8') 43 | file_hash = hashlib.md5(data).hexdigest() 44 | binary_file_hash = bytes.fromhex(file_hash) 45 | binary_gas_hash = bytes(x ^ y for x, y in zip(binary_gas_hash, binary_file_hash)) 46 | 47 | gas_hash = binary_gas_hash.hex() 48 | 49 | gas_date = datetime.datetime.utcfromtimestamp(gas_date).strftime("%Y-%m-%d %H:%M:%S UTC") 50 | 51 | print ('Current GAS hash:', gas_hash) 52 | print ('Current GAS date:', gas_date) 53 | 54 | methods = {k: v for k, v in methods.items() if v['active']} 55 | methods_names = list(methods.keys()) 56 | 57 | #set probabilities for different methods, if they are not defined already 58 | methods_prob = np.abs(np.random.normal(0, 1, size = len(methods))) 59 | 60 | for ind in range(len(methods_names)): 61 | method = methods[methods_names[ind]] 62 | if 'weight' in method: 63 | methods_prob[ind] = method['weight'] 64 | 65 | methods_prob = methods_prob / np.sum(methods_prob) 66 | 67 | 68 | fig = plt.figure() 69 | ax = fig.add_axes([0,0,1,1]) 70 | ax.barh(methods_names, methods_prob) 71 | plt.savefig(os.path.join(backup_folder,'probs.png'), bbox_inches='tight') 72 | 73 | scores = [] 74 | 75 | for i in range(NUM_SAMPLES): 76 | file_uuid = str(uuid.uuid4()) 77 | script_name = os.path.join(folder_name, file_uuid + ".py") 78 | 79 | with open(script_name, "w") as file: 80 | step_1 = """# This program was generated by "Generative Art Synthesizer" \n""" 81 | step_1 += """# Generation date: %s \n""" % (generation_date) 82 | step_1 += """# GAS change date: %s \n""" % (gas_date) 83 | step_1 += """# GAS md5 hash: %s \n""" % (gas_hash) 84 | step_1 += """# Python version: %s \n""" % "".join(list(s for s in sys.version if s. isprintable())) 85 | step_1 += """# For more information visit: https://github.com/volotat/GAS \n""" 86 | step_1 += """\n""" 87 | step_1 += """#import python libraries \n""" 88 | step_1 += """import os #%s \n""" % ('OS version: default' ) 89 | step_1 += """import numpy as np #%s \n""" % ('Numpy version: ' + np.__version__) 90 | step_1 += """from PIL import Image #%s \n""" % ('PIL version: ' + PIL.__version__) 91 | step_1 += """\n""" 92 | file.write(step_1) 93 | 94 | step_2 = """#set initial params \n""" 95 | step_2 += """SIZE = 384 \n""" 96 | step_2 += """GRID_CHANNELS = %d \n""" % (GRID_CHANNELS) 97 | step_2 += """\n""" 98 | file.write(step_2) 99 | 100 | step_3 = """#define utility methods \n""" 101 | step_3 += """def test_values(arr): \n""" 102 | step_3 += """ if np.isnan(arr).any(): \n""" 103 | step_3 += """ raise Exception('Array has None elements!') \n""" 104 | step_3 += """ \n""" 105 | step_3 += """ if np.amin(arr) < -1 or np.amax(arr) > 1: \n""" 106 | step_3 += """ raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) ) \n""" 107 | step_3 += """ \n""" 108 | step_3 += """ return arr \n""" 109 | step_3 += """\n""" 110 | step_3 += """#define grid transformation methods""" 111 | 112 | for method in methods: 113 | step_3 += methods[method]['define'] 114 | step_3 += """\n""" 115 | 116 | step_3 += """\n""" 117 | file.write(step_3) 118 | 119 | step_4 = """#set initial grid \n""" 120 | step_4 += """grid = np.zeros((SIZE, SIZE, GRID_CHANNELS)) \n""" 121 | step_4 += """\n""" 122 | step_4 += """x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0) \n""" 123 | step_4 += """y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1) \n""" 124 | step_4 += """\n""" 125 | 126 | for j in range(GRID_CHANNELS): 127 | ma, mb = np.random.uniform(-1, 1, 2) 128 | step_4 += """grid[:,:,%s] = (x * %s + y * %s) / 2 \n""" % (repr(j), repr(ma), repr(mb)) 129 | 130 | step_4 += """\n""" 131 | file.write(step_4) 132 | 133 | step_5 = """#apply transformations to the grid \n""" 134 | 135 | steps = np.random.randint(MIN_DEEP, MAX_DEEP) 136 | for j in range(steps): 137 | method_ind = np.random.choice(len(methods_names), None, replace=False, p = methods_prob) 138 | method_name = methods_names[method_ind] 139 | step_5 += methods[method_name]['transform']() 140 | 141 | step_5 += """\n""" 142 | file.write(step_5) 143 | 144 | step_6 = """#create color space \n""" 145 | step_6 += """def shift_colors(x, shift): \n""" 146 | step_6 += """ res = x.copy() \n""" 147 | step_6 += """ for i in range(x.shape[-1]): \n""" 148 | step_6 += """ shift[i] = -shift[i] \n""" 149 | step_6 += """ if shift[i] > 0: res[:,:,i] = (-np.abs(((x[:,:,i] + 1) / 2) ** (1 + shift[i]) - 1) ** (1 / (1 + shift[i])) + 1) * 2 - 1 \n""" 150 | step_6 += """ if shift[i] < 0: res[:,:,i] = np.abs((1 - (x [:,:,i]+ 1) / 2) ** (1 - shift[i]) - 1) ** (1 / (1 - shift[i])) * 2 - 1 \n""" 151 | step_6 += """ return test_values(res) \n""" 152 | step_6 += """\n""" 153 | 154 | step_6 += """res = np.zeros((SIZE, SIZE, 3)) \n""" 155 | count = random_normal_int(GRID_CHANNELS) + 1 156 | for k in range(count): 157 | step_6 += """res += shift_colors(grid[:,:,%s:%s].repeat(3, -1), %s) \n""" % (repr(k), repr(k+1), repr(list(np.abs(np.random.normal(0, 3, 3))))) 158 | 159 | step_6 += """\n""" 160 | step_6 += """res = res / %s \n""" % count 161 | step_6 += """res = ((res + 1) / 2) ** 2.5 \n""" 162 | step_6 += """res = (res * 255).clip(0,255) \n""" 163 | step_6 += """\n""" 164 | file.write(step_6) 165 | 166 | step_7 = """#save results \n""" 167 | step_7 += """im = Image.fromarray(np.uint8(res)) \n""" 168 | step_7 += """im.save(os.path.basename(__file__) + '.png') \n""" 169 | step_7 += """\n""" 170 | step_7 += """#save layers \n""" 171 | step_7 += """img = np.zeros((SIZE * 4, SIZE * 4)) \n""" 172 | step_7 += """for j in range(GRID_CHANNELS): \n""" 173 | step_7 += """ x = j % 4 \n""" 174 | step_7 += """ y = j // 4 \n""" 175 | step_7 += """ img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j] \n""" 176 | step_7 += """\n""" 177 | step_7 += """img = (img + 1) * 127.5 \n""" 178 | step_7 += """im = Image.fromarray(np.uint8(img)) \n""" 179 | step_7 += """im.save(os.path.basename(__file__) + '_layers.png') \n""" 180 | file.write(step_7) 181 | 182 | call(["python", file_uuid + ".py"], cwd=folder_name) 183 | 184 | img = Image.open(os.path.join(folder_name, file_uuid + ".py.png")).convert('RGB').resize((rate_size, rate_size), Image.BILINEAR); 185 | data = np.array(img) / 127.5 - 1 186 | score = rate_model.predict(data.reshape((1, rate_size, rate_size, 3)))[0] 187 | 188 | os.rename(os.path.join(folder_name, "%s.py"%file_uuid), os.path.join(folder_name, "[%.2f] %s.py"%(score, file_uuid))) 189 | os.rename(os.path.join(folder_name, "%s.py.png"%file_uuid), os.path.join(folder_name, "[%.2f] %s.py.png"%(score, file_uuid))) 190 | os.rename(os.path.join(folder_name, "%s.py_layers.png"%file_uuid), os.path.join(folder_name, "[%.2f] %s.py_layers.png"%(score, file_uuid))) 191 | 192 | print("%d : %s [%.2f]" % (i + 1, file_uuid, score)) 193 | scores.append(score) 194 | print("Average score : %.2f" % np.mean(scores)) 195 | print("Max score : %.2f" % np.amax(scores)) -------------------------------------------------------------------------------- /methods.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | GRID_CHANNELS = 16 4 | MIN_DEEP = 32 5 | MAX_DEEP = 320 6 | SIZE = 256 7 | 8 | # UTILS 9 | def random_normal_int(max): 10 | return int(min(np.abs(np.random.normal(0, 0.3 * (max - 1))), max - 1)) 11 | 12 | 13 | # The main rule for all methods: range of inputs and output values should always be within [-1,1] 14 | methods = {} 15 | 16 | 17 | def transit_transform (): 18 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 19 | count = random_normal_int(GRID_CHANNELS) + 1 20 | s_indx = np.random.choice(GRID_CHANNELS, count, replace=False) 21 | alphas = np.abs(np.random.normal(0, 1, count)) 22 | alphas = alphas / np.sum(alphas) 23 | return 'grid = transit(grid, %s, %s, %s)\n'%(repr(t_indx), repr(list(s_indx)), repr(list(alphas))) 24 | 25 | methods['transit'] = { 26 | 'active': True, 27 | 'weight': 1, 28 | 'define': """ 29 | def transit(x, t_indx, s_indx, alphas): 30 | res = x.copy() 31 | res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1) 32 | return test_values(res.clip(-1,1)) 33 | """, 34 | 'transform': transit_transform 35 | } 36 | 37 | 38 | def sin_transform(): 39 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 40 | s_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 41 | 42 | p = np.random.normal(2, 3) 43 | if p >= 0 : p += 1 44 | else: p = np.exp(p) 45 | 46 | scale = p 47 | shift = np.random.uniform(-100, 100) 48 | return 'grid = sin(grid, %s, %s, %s, %s)\n'%(repr(t_indx), repr(s_indx), repr(scale), repr(shift)) 49 | 50 | methods['sin'] = { 51 | 'active': True, 52 | 'weight': 0.75, 53 | 'define': """ 54 | def sin(x, t_indx, s_indx, scale = 1, shift = 0): 55 | res = x.copy() 56 | res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift) 57 | return test_values(res) 58 | """, 59 | 'transform': sin_transform 60 | } 61 | 62 | 63 | def magnitude_transform(): 64 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 65 | count = random_normal_int(GRID_CHANNELS) + 1 66 | s_indx = np.random.choice(GRID_CHANNELS, count, replace=False) 67 | 68 | p = np.random.normal(0, 0.5) 69 | if p >= 0 : p += 1 70 | else: p = np.exp(p) 71 | 72 | ord = 2 * p 73 | return 'grid = magnitude(grid, %s, %s, %s)\n'%(repr(t_indx), repr(list(s_indx)), repr(ord)) 74 | 75 | methods['magnitude'] = { 76 | 'active': True, 77 | 'weight': 0.45, 78 | 'define': """ 79 | def magnitude(x, t_indx, s_indx, ord = 2): 80 | res = x.copy() 81 | res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.power(len(s_indx), 1 / ord) * 2 - 1 82 | return test_values(res) 83 | """, 84 | 'transform': magnitude_transform 85 | } 86 | 87 | #Provides: shifting image by distorting it 88 | #positive sphere: (1 - abs(((x + 1) / 2) ^ (1 + p) - 1) ^ (1 / (1 + p))) * 2 - 1 89 | #negative sphere: abs((1 - (x + 1) / 2) ^ (1 + p) - 1) ^ (1 / (1 + p)) * 2 - 1 90 | 91 | def shift_transform(): 92 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 93 | s_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 94 | shift = np.random.normal(0, 3) 95 | return 'grid = shift(grid, %s, %s, %s)\n'%(repr(t_indx), repr(s_indx), repr(shift)) 96 | 97 | methods['shift'] = { 98 | 'active': True, 99 | 'weight': 0.35, 100 | 'define': """ 101 | def shift(x, t_indx, s_indx, shift): 102 | res = x.copy() 103 | if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1 104 | if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1 105 | return test_values(res) 106 | """, 107 | 'transform': shift_transform 108 | } 109 | 110 | 111 | def inverse_transform(): 112 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 113 | s_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 114 | 115 | return 'grid = inverse(grid, %s, %s)\n'%(repr(t_indx), repr(s_indx)) 116 | 117 | methods['inverse'] = { 118 | 'active': True, 119 | 'weight': 0.1, 120 | 'define': """ 121 | def inverse(x, t_indx, s_indx): 122 | res = x.copy() 123 | res[:,:,t_indx] = -x[:,:,s_indx] 124 | return test_values(res) 125 | """, 126 | 'transform': inverse_transform 127 | } 128 | 129 | 130 | 131 | def smooth_max_transform(): 132 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 133 | s1_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 134 | s2_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 135 | return 'grid = smooth_max(grid, %s, %s, %s)\n'%(repr(t_indx), repr(s1_indx), repr(s2_indx)) 136 | 137 | methods['smooth_max'] = { 138 | 'active': True, 139 | 'weight': 0.2, 140 | 'define': """ 141 | def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10): 142 | res = x.copy() 143 | res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 144 | return test_values(res) 145 | """, 146 | 'transform': smooth_max_transform 147 | } 148 | 149 | 150 | def smooth_min_transform(): 151 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 152 | s1_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 153 | s2_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 154 | return 'grid = smooth_min(grid, %s, %s, %s)\n'%(repr(t_indx), repr(s1_indx), repr(s2_indx)) 155 | 156 | methods['smooth_min'] = { 157 | 'active': True, 158 | 'weight': 0.2, 159 | 'define': """ 160 | def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10): 161 | res = x.copy() 162 | res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07 163 | return test_values(res) 164 | """, 165 | 'transform': smooth_min_transform 166 | } 167 | 168 | def prod_transform(): 169 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 170 | count = random_normal_int(GRID_CHANNELS) + 1 171 | s_indx = np.random.choice(GRID_CHANNELS, count, replace=False) 172 | return 'grid = prod(grid, %s, %s)\n'%(repr(t_indx), repr(list(s_indx))) 173 | 174 | methods['prod'] = { 175 | 'active': True, 176 | 'weight': 0.25, 177 | 'define': """ 178 | def prod(x, t_indx, s_indx): 179 | res = x.copy() 180 | res[:,:,t_indx] = np.prod(x[:,:,s_indx], -1) 181 | return test_values(res) 182 | """, 183 | 'transform': prod_transform 184 | } 185 | 186 | 187 | def power_transform(): 188 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 189 | s_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 190 | 191 | p = np.random.normal(-0.5, 2) 192 | if p >= 0 : p += 1 193 | else: p = np.exp(p) 194 | 195 | return 'grid = power(grid, %s, %s, %s)\n'%(repr(t_indx), repr(s_indx), repr(p)) 196 | 197 | methods['power'] = { 198 | 'active': True, 199 | 'weight': 0.25, 200 | 'define': """ 201 | def power(x, t_indx, s_indx, p = 1): 202 | res = x.copy() 203 | res[:,:,t_indx] = np.sign(x[:,:,s_indx]) * np.abs(x[:,:,s_indx]) ** p 204 | return test_values(res) 205 | """, 206 | 'transform': power_transform 207 | } 208 | 209 | 210 | # INACTIVE # 211 | 212 | def shift_mod_abs_transform(): 213 | t_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 214 | s_indx = np.random.choice(GRID_CHANNELS, None, replace=False) 215 | shift = np.random.uniform(-1, 1) 216 | return 'grid = shift_mod_abs(grid, %s, %s, %s)\n'%(repr(t_indx), repr(s_indx),repr(shift)) 217 | 218 | methods['shift_mod_abs'] = { 219 | 'active': False, 220 | 'weight': 0.1, 221 | 'define': """ 222 | def shift_mod_abs(x, t_indx, s_indx, shift): 223 | res = x.copy() 224 | res[:,:,t_indx] = np.abs(np.mod((x[:,:,s_indx] + 3)/4 + shift/2, 1) * 2 - 1) * 2 - 1 225 | return test_values(res) 226 | """, 227 | 'transform': shift_mod_abs_transform 228 | } 229 | 230 | 231 | # DISCARDED # 232 | 233 | #This method produce infenetly sharp edges 234 | #Shifting image by repeating it 235 | def shift_mod_transform(): 236 | count = np.random.randint(1, GRID_CHANNELS + 1) 237 | indx = np.random.choice(GRID_CHANNELS, count, replace=False) 238 | shift = np.random.uniform(-1, 1) 239 | return 'grid = shift_mod(grid, %s, %s)\n'%(repr(list(indx)),repr(shift)) 240 | 241 | methods['shift_mod'] = { 242 | 'active': False, 243 | 'weight': 0.1, 244 | 'define': """ 245 | def shift_mod(x, indx, shift): 246 | res = x.copy() 247 | res[:,:,indx] = np.mod((x[:,:,indx] + 1)/2 + shift, 1) * 2 - 1 248 | return test_values(res) 249 | """, 250 | 'transform': shift_mod_transform 251 | } 252 | 253 | 254 | #This method depends on external data 255 | def img_as_func_transform(): 256 | t_indx = np.random.choice(GRID_CHANNELS, 3, replace=False) 257 | s_indx = np.random.choice(GRID_CHANNELS, 2, replace=False) 258 | 259 | imgs = ['../img1.jpg', '../img2.jpg', '../img3.jpg', '../img4.jpg', '../img5.jpg', '../img6.jpg'] 260 | img_name = np.random.choice(imgs, None) 261 | return 'grid = img_as_func(grid, %s, %s, %s)\n'%(repr(list(t_indx)), repr(list(s_indx)), repr(img_name)) 262 | 263 | methods['img_as_func'] = { 264 | 'active': False, 265 | 'weight': 2, 266 | 'define': """ 267 | def img_as_func(x, t_indx, s_indx, img_name): 268 | res = x.copy() 269 | 270 | img = Image.open( img_name ).convert('RGB') 271 | sx = (img.size[1] - 1) / 2 272 | sy = (img.size[0] - 1) / 2 273 | img_arr = np.asarray( img, dtype="float32" ) / 127.5 - 1 274 | 275 | 276 | f_x = np.floor((x[:,:,s_indx[0]] + 1) * sx).astype("int32").reshape(x.shape[0] * x.shape[1]) 277 | c_x = np.ceil((x[:,:,s_indx[0]] + 1) * sx).astype("int32").reshape(x.shape[0] * x.shape[1]) 278 | fr_x = (((x[:,:,s_indx[0]] + 1) * sx) % 1).reshape((x.shape[0] * x.shape[1], 1)) 279 | 280 | f_y = np.floor((x[:,:,s_indx[1]] + 1) * sy).astype("int32").reshape(x.shape[0] * x.shape[1]) 281 | c_y = np.ceil((x[:,:,s_indx[1]] + 1) * sy).astype("int32").reshape(x.shape[0] * x.shape[1]) 282 | fr_y = (((x[:,:,s_indx[1]] + 1) * sy) % 1).reshape((x.shape[0] * x.shape[1], 1)) 283 | 284 | colors = img_arr[f_x, f_y] * (1 - fr_x) * (1 - fr_y) + \ 285 | img_arr[c_x, f_y] * ( fr_x) * (1 - fr_y) + \ 286 | img_arr[f_x, c_y] * (1 - fr_x) * ( fr_y) + \ 287 | img_arr[c_x, c_y] * ( fr_x) * ( fr_y) 288 | colors = colors.clip(-1, 1) # it is necessary because of float rounding errors 289 | 290 | res[:,:,t_indx] = (colors).reshape((x.shape[0], x.shape[1], 3)) 291 | return test_values(res) 292 | """, 293 | 'transform': img_as_func_transform 294 | } 295 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "gas" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Alexey Borsky "] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.8" 9 | numpy = "<1.21.4" 10 | Pillow = "^8.4.0" 11 | matplotlib = "^3.5.1" 12 | tensorflow = "<2.7.0" 13 | 14 | [tool.poetry.dev-dependencies] 15 | 16 | [build-system] 17 | requires = ["poetry-core>=1.0.0"] 18 | build-backend = "poetry.core.masonry.api" 19 | -------------------------------------------------------------------------------- /rate_model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/volotat/GAS/79f416345bdbe6dc1e23629da27d6dc771611c90/rate_model.h5 -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | hashlib 3 | PIL 4 | tensorflow 5 | matplotlib --------------------------------------------------------------------------------