-
Notifications
You must be signed in to change notification settings - Fork 4
/
48871c12-58f4-4ea4-8739-5d180021c3cb.py
277 lines (253 loc) · 16.5 KB
/
48871c12-58f4-4ea4-8739-5d180021c3cb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
# This program was generated by "Generative Art Synthesizer"
# Generation date: 2021-11-28 04:17:38 UTC
# GAS change date: 2021-11-28 03:58:45 UTC
# GAS md5 hash: fa4b9db8bcdb760d7fde2be64723fca2
# Python version: 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)]
# For more information visit: https://github.com/volotat/GAS
#import python libraries
import os #OS version: default
import numpy as np #Numpy version: 1.19.5
from PIL import Image #PIL version: 8.1.2
#set initial params
SIZE = 768
GRID_CHANNELS = 16
def test_values(arr):
if np.isnan(arr).any():
raise Exception('Array has None elements!')
if np.amin(arr) < -1 or np.amax(arr) > 1:
raise Exception('Values went to far! [ %.2f : %.2f ]'%(np.amin(arr), np.amax(arr)) )
return arr
#define grid transformation methods
def transit(x, t_indx, s_indx, alphas):
res = x.copy()
res[:,:,t_indx] = np.sum(x[:,:,s_indx] * alphas, axis = -1)
return test_values(res.clip(-1,1))
def sin(x, t_indx, s_indx, scale = 1, shift = 0):
res = x.copy()
res[:,:,t_indx] = np.sin(x[:,:,s_indx] * 0.5 * np.pi * scale + shift)
return test_values(res)
def magnitude(x, t_indx, s_indx, ord = 2):
res = x.copy()
res[:,:,t_indx] = np.linalg.norm(x[:,:,s_indx], axis = -1, ord = ord) / np.sqrt(len(s_indx))
return test_values(res)
def shift(x, t_indx, s_indx, shift):
res = x.copy()
if shift > 0: res[:,:,t_indx] = (-np.abs(((x[:,:,s_indx] + 1) / 2) ** (1 + shift) - 1) ** (1 / (1 + shift)) + 1) * 2 - 1
if shift < 0: res[:,:,t_indx] = np.abs((1 - (x[:,:,s_indx] + 1) / 2) ** (1 - shift) - 1) ** (1 / (1 - shift)) * 2 - 1
return test_values(res)
def inverse(x, t_indx, s_indx):
res = x.copy()
res[:,:,t_indx] = -x[:,:,s_indx]
return test_values(res)
def smooth_max(x, t_indx, s1_indx, s2_indx, p = 10):
res = x.copy()
res[:,:,t_indx] = np.log((np.exp(x[:,:,s1_indx] * p) + np.exp(x[:,:,s2_indx] * p)) ** (1/p)) / 1.07
return test_values(res)
def smooth_min(x, t_indx, s1_indx, s2_indx, p = 10):
res = x.copy()
res[:,:,t_indx] = -np.log((np.exp(-x[:,:,s1_indx] * p) + np.exp(-x[:,:,s2_indx] * p)) ** (1/p)) / 1.07
return test_values(res)
def shift_mod_abs(x, t_indx, s_indx, shift):
res = x.copy()
res[:,:,t_indx] = np.abs(np.mod((x[:,:,s_indx] + 3)/4 + shift/2, 1) * 2 - 1) * 2 - 1
return test_values(res)
#set initial grid
grid = np.zeros((SIZE, SIZE, GRID_CHANNELS))
x = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((1, SIZE)).repeat(SIZE, 0)
y = ((np.arange(SIZE)/(SIZE-1) - 0.5) * 2).reshape((SIZE, 1)).repeat(SIZE, 1)
grid[:,:,0] = (x * 0.8643418060594885 + y * 0.6002740205725097) / 2
grid[:,:,1] = (x * 0.01183721078650768 + y * -0.7074877558164501) / 2
grid[:,:,2] = (x * -0.48643728170863887 + y * 0.7203274908191206) / 2
grid[:,:,3] = (x * 0.7658582693960334 + y * 0.14941321785247208) / 2
grid[:,:,4] = (x * 0.9210916218391232 + y * 0.37140846720931764) / 2
grid[:,:,5] = (x * 0.39136156737873007 + y * -0.06549676689056216) / 2
grid[:,:,6] = (x * 0.9324751771973863 + y * -0.19588844971222885) / 2
grid[:,:,7] = (x * 0.06023978890473192 + y * -0.6815582001062757) / 2
grid[:,:,8] = (x * -0.6993118954667219 + y * 0.961464040384854) / 2
grid[:,:,9] = (x * 0.37138346094417707 + y * -0.7566733584213707) / 2
grid[:,:,10] = (x * 0.3387057689135291 + y * 0.25721938764502617) / 2
grid[:,:,11] = (x * 0.12753054557270316 + y * -0.3413646845394549) / 2
grid[:,:,12] = (x * -0.21127520837749425 + y * -0.43789418122650203) / 2
grid[:,:,13] = (x * -0.7360271671180054 + y * -0.5198570345042122) / 2
grid[:,:,14] = (x * -0.2137488758947239 + y * 0.7151440164025549) / 2
grid[:,:,15] = (x * 0.525452161570175 + y * 0.5170838810547953) / 2
#apply transformations to the grid
grid = transit(grid, 15, [13], [1.0])
grid = transit(grid, 10, [11], [1.0])
grid = sin(grid, 4, 11, -0.4444423048102142, 35.65739417712658)
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])
grid = smooth_max(grid, 14, 9, 3)
grid = transit(grid, 1, [9, 1, 6, 8], [0.14573383219711986, 0.393261614716585, 0.15407042203575053, 0.30693413105054457])
grid = transit(grid, 0, [4], [1.0])
grid = sin(grid, 9, 9, -5.765185023221378, -23.854260608016958)
grid = sin(grid, 1, 9, -0.33074858378172944, 91.43915934995829)
grid = sin(grid, 1, 7, -4.982895483158001, 48.43015311176555)
grid = sin(grid, 6, 7, -1.7456277778753302, 3.926104632214674)
grid = sin(grid, 14, 3, 3.305921145055031, -31.657818640866523)
grid = shift(grid, 14, 1, -2.6212449917673943)
grid = smooth_max(grid, 0, 0, 3)
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])
grid = shift(grid, 12, 9, 0.36751997503782186)
grid = transit(grid, 4, [4, 9, 12, 7, 10, 0], [0.08770778747211616, 0.09593413274026749, 0.23234191159814382, 0.126984092857562, 0.10311293499781625, 0.35391914033409433])
grid = shift(grid, 6, 0, -1.9200863577873768)
grid = sin(grid, 11, 6, 1.6330255345117486, -70.55485909823724)
grid = sin(grid, 4, 11, -0.5439503976289264, 24.7429940222911)
grid = transit(grid, 11, [0, 3, 12], [0.34493542013146294, 0.07278577552061351, 0.5822788043479236])
grid = sin(grid, 0, 8, 1.981791111856539, -96.88530536213638)
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])
grid = transit(grid, 8, [11], [1.0])
grid = magnitude(grid, 9, [13], 2)
grid = transit(grid, 7, [11, 14, 4, 2, 5], [0.14285083640050433, 0.5138220113235002, 0.2579219249756841, 0.0803923066261222, 0.0050129206741891235])
grid = sin(grid, 8, 3, 1.3931664732885778, -3.724387817881265)
grid = sin(grid, 8, 6, -0.954690388096839, 35.09448745343994)
grid = transit(grid, 3, [1], [1.0])
grid = transit(grid, 2, [1, 15, 9, 12, 4, 6], [0.2970104511612839, 0.003279012448931442, 0.2050035986523211, 0.24701548425854256, 0.009530709859697197, 0.23816074361922382])
grid = sin(grid, 3, 14, -3.3144941485476886, -42.4303697717481)
grid = magnitude(grid, 9, [15, 4, 12, 5, 3, 10], 2)
grid = sin(grid, 15, 9, 4.547902292406539, 83.8756521228238)
grid = shift(grid, 0, 12, 1.2324692631612622)
grid = sin(grid, 2, 14, 0.32836645319750335, 34.46251296479076)
grid = transit(grid, 14, [12, 2], [0.3301537209031698, 0.6698462790968301])
grid = smooth_min(grid, 8, 15, 1)
grid = sin(grid, 1, 15, -3.3930087007904044, 21.990775461510424)
grid = shift(grid, 15, 10, 3.6187636992158665)
grid = magnitude(grid, 6, [15, 9, 1, 4, 11], 2)
grid = smooth_max(grid, 7, 12, 12)
grid = transit(grid, 13, [1, 2, 14, 12, 13, 9], [0.206909825776135, 0.04050828088920256, 0.020124179936011094, 0.22475748713682211, 0.3909909418368703, 0.11670928442495897])
grid = shift_mod_abs(grid, 1, 1, -0.24436878593502764)
grid = sin(grid, 9, 15, 0.8962775652252415, -16.279405125108482)
grid = sin(grid, 12, 3, -0.8067929001139547, 21.547631900551025)
grid = transit(grid, 13, [8], [1.0])
grid = smooth_max(grid, 8, 1, 0)
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])
grid = magnitude(grid, 15, [12, 7], 2)
grid = shift_mod_abs(grid, 3, 0, -0.2831739773781732)
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])
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])
grid = magnitude(grid, 8, [5, 8, 13, 2], 2)
grid = transit(grid, 8, [15, 4, 1], [0.37982726077268364, 0.22616272774920443, 0.39401001147811193])
grid = transit(grid, 0, [8], [1.0])
grid = smooth_min(grid, 4, 12, 1)
grid = transit(grid, 12, [2, 5, 12, 14, 6], [0.17781196954895062, 0.3262422646004365, 0.06582208521728561, 0.10591846581260655, 0.32420521482072084])
grid = transit(grid, 15, [1], [1.0])
grid = magnitude(grid, 6, [3, 8, 6, 14, 5, 11], 2)
grid = transit(grid, 14, [8], [1.0])
grid = sin(grid, 10, 2, 2.8352218772954103, -68.71223416442535)
grid = sin(grid, 10, 5, 2.1605893217401637, 15.929709365059637)
grid = transit(grid, 14, [10], [1.0])
grid = magnitude(grid, 15, [12, 6, 9, 10, 11, 13, 5, 4, 7, 14, 3, 15, 1, 8], 2)
grid = magnitude(grid, 7, [3, 1, 2, 0, 9, 10, 4, 12, 5, 14, 11], 2)
grid = sin(grid, 5, 15, -2.964350843818491, 79.55949456789938)
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])
grid = sin(grid, 7, 5, -3.1708631377557053, 68.46601940157458)
grid = sin(grid, 4, 5, -1.2008185900051624, 68.54171145511123)
grid = shift_mod_abs(grid, 2, 4, -0.7698084808562446)
grid = sin(grid, 6, 13, 0.7424973991974434, 53.967869150298554)
grid = transit(grid, 11, [11, 9, 15, 14], [0.20036149487541682, 0.04141279144276572, 0.03464545826401203, 0.7235802554178055])
grid = transit(grid, 1, [5, 0], [0.7040503780721827, 0.29594962192781726])
grid = sin(grid, 0, 15, 1.8649566058562463, 21.461980150441562)
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])
grid = sin(grid, 13, 4, -4.399009503963816, 66.4315857086151)
grid = transit(grid, 4, [10, 8, 6], [0.1846929629170967, 0.6078893325738195, 0.2074177045090838])
grid = transit(grid, 1, [9, 8, 11, 6, 12], [0.47152135139216217, 0.14311287840521997, 0.011608525234345538, 0.05536041617613505, 0.3183968287921372])
grid = transit(grid, 13, [7, 2], [0.9821695367485404, 0.017830463251459792])
grid = magnitude(grid, 2, [8, 10, 1], 2)
grid = transit(grid, 15, [6], [1.0])
grid = shift(grid, 1, 8, 2.2967671237669007)
grid = sin(grid, 1, 7, 0.10649088313103464, 98.8910603178364)
grid = transit(grid, 3, [0, 10], [0.3881288639719622, 0.6118711360280378])
grid = transit(grid, 7, [4, 6, 2, 15, 13], [0.26491654094685124, 0.07140941403011514, 0.31071632433752855, 0.2442434068406789, 0.10871431384482616])
grid = transit(grid, 10, [12, 0], [0.14533502815984384, 0.8546649718401562])
grid = transit(grid, 6, [3, 6, 1, 12, 14], [0.04339976408966444, 0.1071204469621808, 0.5453782310120199, 0.08783005496708463, 0.21627150296905026])
grid = transit(grid, 6, [10, 6, 13], [0.22419455101864633, 0.13008753544075727, 0.6457179135405964])
grid = sin(grid, 8, 11, 1.6539538766142892, -47.038813670826364)
grid = transit(grid, 8, [11, 7, 10, 8, 3, 0], [0.1963951062356543, 0.046014545280806035, 0.3265714138391151, 0.07178180618294111, 0.24538439358253197, 0.11385273487895149])
grid = shift(grid, 6, 2, 5.881308612722795)
grid = shift(grid, 7, 0, -0.019202909087152793)
grid = sin(grid, 5, 12, 0.31694238903875316, -3.233795531409015)
grid = sin(grid, 8, 7, -0.33608442637489877, -71.58463378044921)
grid = transit(grid, 12, [6, 12], [0.2375837503300028, 0.7624162496699971])
grid = transit(grid, 2, [15, 4], [0.7096415729282884, 0.29035842707171167])
grid = magnitude(grid, 9, [12], 2)
grid = transit(grid, 0, [4, 15, 7, 9, 3], [0.08554231371381717, 0.2728357537506513, 0.19024564886103396, 0.1079452932459428, 0.3434309904285548])
grid = shift_mod_abs(grid, 10, 0, -0.45488639128774455)
grid = transit(grid, 1, [14, 11, 15, 10, 4, 6], [0.34310478585871124, 0.2850522365459595, 0.12082091807595094, 0.20672890654080242, 0.015096662669016409, 0.029196490309559422])
grid = transit(grid, 3, [1, 0, 8, 14, 9], [0.019274577938263752, 0.052792687396621664, 0.536974093270921, 0.12992441155335122, 0.2610342298408423])
grid = transit(grid, 1, [2, 12, 7, 15, 11, 6], [0.3968004274130147, 0.1524052948446302, 0.06963697400590556, 0.17716800847108594, 0.18972239876678001, 0.014266896498583545])
grid = sin(grid, 2, 11, -4.326786621243502, 79.41593080870732)
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])
grid = shift(grid, 13, 3, 2.4093814514158725)
grid = smooth_min(grid, 13, 0, 14)
grid = transit(grid, 11, [10], [1.0])
grid = shift(grid, 4, 7, 3.5546783833684685)
grid = sin(grid, 13, 5, -0.7760984824914829, 93.92923422345075)
grid = transit(grid, 1, [7, 13, 2], [0.3997621274866039, 0.03237536935820857, 0.5678625031551874])
grid = magnitude(grid, 3, [13, 7], 2)
grid = sin(grid, 3, 2, 3.053392675882956, 85.87323630747014)
grid = transit(grid, 2, [0, 1, 8], [0.635417492645503, 0.12065217241495814, 0.24393033493953883])
grid = sin(grid, 7, 10, 0.01984882825835476, 32.6390766179679)
grid = transit(grid, 12, [0, 11, 1, 10], [0.37404261495423835, 0.15018069696859296, 0.2852305991482461, 0.1905460889289226])
grid = sin(grid, 12, 12, -0.783622286060866, 60.796038516038266)
grid = sin(grid, 4, 0, 0.9202607929605592, 50.60080339642664)
grid = magnitude(grid, 8, [14, 15, 9, 13, 11], 2)
grid = sin(grid, 0, 7, -0.5484589035400347, 91.19276342376912)
grid = transit(grid, 12, [2, 9, 14, 7], [0.21556005740890646, 0.5704984675306708, 0.0670744449747471, 0.14686703008567573])
grid = shift_mod_abs(grid, 10, 6, 0.6939165629400947)
grid = sin(grid, 1, 4, -1.8208999273846458, 56.008744869832185)
grid = shift_mod_abs(grid, 0, 11, 0.6427921466703721)
grid = shift(grid, 6, 2, 0.34713644837039526)
grid = smooth_max(grid, 9, 13, 6)
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])
grid = sin(grid, 10, 7, 4.316772531765781, -96.41095941878208)
grid = magnitude(grid, 12, [13, 5, 11, 9, 8, 4, 14, 12], 2)
grid = sin(grid, 1, 7, 3.670662837502202, -9.671342511665571)
grid = sin(grid, 1, 6, -0.6580324202659389, -56.22533850788125)
grid = transit(grid, 7, [10, 6, 8, 1, 3], [0.02048003691326924, 0.18614064631410482, 0.14324824041009226, 0.2832528419381784, 0.36687823442435513])
grid = transit(grid, 0, [13, 8], [0.4478804209396015, 0.5521195790603984])
grid = sin(grid, 0, 6, 2.080077748457945, 82.47806511148684)
grid = sin(grid, 7, 7, 4.062385643542771, -79.15800536389561)
grid = sin(grid, 1, 8, -4.20908133426767, -75.82246694036505)
grid = sin(grid, 12, 12, -0.6578534013079593, 81.57949367948908)
grid = smooth_min(grid, 0, 7, 10)
grid = sin(grid, 8, 6, 5.191110412839802, -34.79955376647112)
grid = magnitude(grid, 14, [4, 3, 7, 12], 2)
grid = sin(grid, 1, 1, -0.7842185152414949, 51.3894344124252)
grid = sin(grid, 6, 6, 2.254906748283988, 24.07820781500743)
grid = magnitude(grid, 5, [7], 2)
grid = sin(grid, 2, 11, -2.6046413831226727, -56.13370662492196)
grid = transit(grid, 5, [14], [1.0])
grid = shift(grid, 4, 1, 0.5686746583570609)
grid = smooth_max(grid, 15, 1, 13)
grid = shift(grid, 10, 2, -5.309185976153751)
grid = sin(grid, 15, 13, -5.735523741847674, -16.865091601299625)
grid = shift(grid, 3, 10, 0.12135859612631647)
grid = shift_mod_abs(grid, 5, 7, -0.9572908675655298)
grid = sin(grid, 9, 1, 0.7294080416804347, -49.31020377326873)
grid = sin(grid, 1, 4, 1.1329614072124552, -94.00139174909971)
grid = transit(grid, 8, [5, 9], [0.36967294209271545, 0.6303270579072846])
grid = sin(grid, 7, 5, -0.8978425971656077, 11.193619774449132)
grid = shift_mod_abs(grid, 13, 12, -0.3688937668775716)
grid = transit(grid, 3, [8, 1, 5], [0.2928245751240868, 0.06829042199853974, 0.6388850028773735])
grid = sin(grid, 11, 4, 1.9765702782027827, -59.2554274901459)
#create color space
colors = np.zeros((3, 3))
colors[0] = [8, 186, 121]
colors[1] = [166, 107, 197]
colors[2] = [155, 215, 222]
res = np.zeros((SIZE, SIZE, 3))
res += (grid[:,:,0:0+1].repeat(3, -1) + 1) / 2 * colors[0]
res += (grid[:,:,1:1+1].repeat(3, -1) + 1) / 2 * colors[1]
res += (grid[:,:,2:2+1].repeat(3, -1) + 1) / 2 * colors[2]
res = (res / 3 * 1.9331820449317627).clip(0,255)
#save results
im = Image.fromarray(np.uint8(res))
im.save(os.path.basename(__file__) + '.png')
#save layers
img = np.zeros((SIZE * 4, SIZE * 4))
for j in range(GRID_CHANNELS):
x = j % 4
y = j // 4
img[x*SIZE:(x + 1)*SIZE, y*SIZE:(y+1)*SIZE] = grid[:,:,j]
img = (img + 1) * 127.5
im = Image.fromarray(np.uint8(img))
im.save(os.path.basename(__file__) + '_layers.png')