├── .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
--------------------------------------------------------------------------------