aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/examples
diff options
context:
space:
mode:
Diffstat (limited to 'externals/gridflow/examples')
-rw-r--r--externals/gridflow/examples/binary_operations.pd73
-rw-r--r--externals/gridflow/examples/blob.pd106
-rw-r--r--externals/gridflow/examples/bounce.pd32
-rw-r--r--externals/gridflow/examples/cellular_1d.pd170
-rw-r--r--externals/gridflow/examples/color_correction.pd151
-rw-r--r--externals/gridflow/examples/color_detect.pd218
-rw-r--r--externals/gridflow/examples/convolve.pd90
-rw-r--r--externals/gridflow/examples/cross_fade.pd76
-rw-r--r--externals/gridflow/examples/doodle.pd51
-rw-r--r--externals/gridflow/examples/drag_rectangle.pd106
-rw-r--r--externals/gridflow/examples/eclipse.pd77
-rw-r--r--externals/gridflow/examples/epicycloid.pd125
-rw-r--r--externals/gridflow/examples/feedback_fractal.pd147
-rw-r--r--externals/gridflow/examples/fire.pd300
-rw-r--r--externals/gridflow/examples/frequency_mask.pd160
-rw-r--r--externals/gridflow/examples/game_of_life.pd65
-rw-r--r--externals/gridflow/examples/game_of_life_gem.pd291
-rw-r--r--externals/gridflow/examples/goop.pd138
-rw-r--r--externals/gridflow/examples/heat.pd173
-rw-r--r--externals/gridflow/examples/hello-world.pd39
-rw-r--r--externals/gridflow/examples/image_stats.pd62
-rw-r--r--externals/gridflow/examples/instant_blur.pd142
-rw-r--r--externals/gridflow/examples/linear_transform.pd225
-rw-r--r--externals/gridflow/examples/markov.pd133
-rw-r--r--externals/gridflow/examples/mechanics.pd121
-rw-r--r--externals/gridflow/examples/motion_detect.pd44
-rw-r--r--externals/gridflow/examples/nervous_video.pd155
-rw-r--r--externals/gridflow/examples/photo_pianoroll.pd158
-rw-r--r--externals/gridflow/examples/play_video.pd44
-rw-r--r--externals/gridflow/examples/plot.pd73
-rw-r--r--externals/gridflow/examples/polygon.pd123
-rw-r--r--externals/gridflow/examples/polygon_editor.pd23
-rw-r--r--externals/gridflow/examples/postdigital.pd67
-rw-r--r--externals/gridflow/examples/ripple.pd184
-rw-r--r--externals/gridflow/examples/sand.pd392
-rw-r--r--externals/gridflow/examples/scratch_video.pd43
-rw-r--r--externals/gridflow/examples/slitscanning.pd54
-rw-r--r--externals/gridflow/examples/spectrogram.pd108
-rw-r--r--externals/gridflow/examples/threshold.pd78
-rw-r--r--externals/gridflow/examples/transform.pd61
-rw-r--r--externals/gridflow/examples/translation_tracker.pd162
-rw-r--r--externals/gridflow/examples/translation_tracker2.pd126
-rw-r--r--externals/gridflow/examples/videodev_effects.pd264
-rw-r--r--externals/gridflow/examples/wave_1d.pd173
-rw-r--r--externals/gridflow/examples/waves.pd416
-rw-r--r--externals/gridflow/examples/wobble.pd56
46 files changed, 6075 insertions, 0 deletions
diff --git a/externals/gridflow/examples/binary_operations.pd b/externals/gridflow/examples/binary_operations.pd
new file mode 100644
index 00000000..cf4df98a
--- /dev/null
+++ b/externals/gridflow/examples/binary_operations.pd
@@ -0,0 +1,73 @@
+#N canvas 401 211 734 490 10;
+#X text 163 212 posterize;
+#X obj 99 187 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 143 187 hsl 59 15 2 8 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 65 103 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 87 361 # ^;
+#X obj 135 336 hsl 137 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 99 237 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 124 144 negative;
+#X obj 39 121 #in;
+#X text 146 361 munchies (XOR effect) in the colour domain;
+#X obj 39 187 shunt 2;
+#X obj 39 338 shunt 2;
+#X text 157 297 color wrapping;
+#X obj 88 261 # %;
+#X obj 98 338 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 87 164 # inv+ 255;
+#X obj 99 142 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 65 54 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 89 304 # /;
+#X obj 39 142 shunt 2;
+#X obj 39 423 #out window;
+#X obj 88 283 # * 255;
+#X obj 166 265 hsl 137 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 39 237 shunt 2;
+#X text 88 105 image loader;
+#X msg 65 121 open r001.jpg \, bang;
+#X obj 65 78 metro 33.3667;
+#X obj 87 212 #posterize;
+#X obj 8 456 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 463 GridFlow 0.8.0;
+#X obj 8 5 cnv 15 720 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 11 5 binary_operations.pd;
+#X text 222 143 <-- try various combinations of checkboxes and settings.
+then click on the image loader to see the result.;
+#X text 11 19 Copyright Mathieu Bouchard;
+#X connect 1 0 10 1;
+#X connect 2 0 27 1;
+#X connect 3 0 25 0;
+#X connect 4 0 20 0;
+#X connect 5 0 4 1;
+#X connect 6 0 23 1;
+#X connect 8 0 19 0;
+#X connect 10 0 23 0;
+#X connect 10 1 27 0;
+#X connect 11 0 20 0;
+#X connect 11 1 4 0;
+#X connect 13 0 21 0;
+#X connect 14 0 11 1;
+#X connect 15 0 10 0;
+#X connect 16 0 19 1;
+#X connect 17 0 26 0;
+#X connect 18 0 11 0;
+#X connect 19 0 10 0;
+#X connect 19 1 15 0;
+#X connect 21 0 18 0;
+#X connect 22 0 18 1;
+#X connect 22 0 13 1;
+#X connect 23 0 11 0;
+#X connect 23 1 13 0;
+#X connect 25 0 8 0;
+#X connect 26 0 3 0;
+#X connect 27 0 23 0;
diff --git a/externals/gridflow/examples/blob.pd b/externals/gridflow/examples/blob.pd
new file mode 100644
index 00000000..c131ded5
--- /dev/null
+++ b/externals/gridflow/examples/blob.pd
@@ -0,0 +1,106 @@
+#N canvas 19 81 792 575 10;
+#X floatatom 398 265 5 0 0 0 - - -;
+#X obj 368 225 r move;
+#X obj 56 129 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 56 162 240 320 3 # 0;
+#X msg 461 407 300;
+#X obj 398 392 # * 300;
+#X obj 261 475 # cos*;
+#X msg 461 369 1600;
+#X msg 513 299 25;
+#X obj 368 263 +;
+#X msg 513 318 100;
+#X obj 505 244 hsl 128 15 100 2600 0 1 empty empty empty -2 -6 0 8
+-260818 -1 -1 2297 1;
+#X text 314 474 make circular orbit of variable radius;
+#X floatatom 502 261 5 0 0 0 - - -;
+#X msg 461 388 800;
+#X text 294 375 frequency of the orbit;
+#X text 501 229 increment;
+#X msg 368 244 1;
+#X obj 58 108 s move;
+#X obj 73 128 loadbang;
+#X obj 19 50 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 75 427 #out window;
+#X obj 186 236 # +;
+#X obj 437 345 # + 50;
+#X text 394 250 counter;
+#X obj 19 91 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 19 354 #store;
+#X text 65 147 blank image to start with;
+#X text 212 237 translate the square;
+#X text 546 297 make a wavy radius (50-100) \; the 1100 is its frequency
+\; tune it for fun and profit.;
+#X obj 19 108 t b b;
+#X obj 368 282 t a a a;
+#X msg 186 198 4 2 # -1 -1 -1 1 1 1 1 -1;
+#X obj 8 541 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 548 GridFlow 0.8.0;
+#X obj 8 12 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 12 Blob.pd;
+#X msg 514 337 10;
+#X obj 437 307 # * 1000;
+#X obj 101 265 #color;
+#X obj 101 221 loadbang;
+#X text 385 432 duplicate the angle \; make the 2nd 90 degrees apart
+(required for a circle \; else it'll be an oval or a line);
+#X text 21 25 Copyright 2002 Mathieu Bouchard and Alexandre Castonguay
+;
+#X text 185 182 a 2x2 square's coordinates;
+#X text 228 218 scale factor;
+#X obj 186 217 # * 8;
+#X obj 75 402 #solarize;
+#X text 400 49 This is the classic "Shadebob" effect of the demoscene
+;
+#X msg 101 243 12 24 36;
+#X text 6 331 superimpose the light of many squares;
+#X obj 437 326 # cos* 100;
+#X obj 261 444 #outer + (0 9000);
+#X obj 75 354 #draw_polygon + (3 #);
+#X obj 261 494 # + (120 160);
+#X obj 19 72 metro 33.367;
+#X connect 0 0 9 1;
+#X connect 1 0 17 0;
+#X connect 2 0 3 0;
+#X connect 3 0 26 1;
+#X connect 4 0 5 1;
+#X connect 5 0 51 0;
+#X connect 6 0 53 0;
+#X connect 7 0 5 1;
+#X connect 8 0 50 1;
+#X connect 9 0 0 0;
+#X connect 9 0 31 0;
+#X connect 10 0 50 1;
+#X connect 11 0 13 0;
+#X connect 13 0 38 1;
+#X connect 14 0 5 1;
+#X connect 17 0 9 0;
+#X connect 19 0 2 0;
+#X connect 20 0 54 0;
+#X connect 22 0 52 2;
+#X connect 23 0 6 1;
+#X connect 25 0 30 0;
+#X connect 26 0 52 0;
+#X connect 30 0 26 0;
+#X connect 30 1 18 0;
+#X connect 31 0 32 0;
+#X connect 31 1 5 0;
+#X connect 31 2 38 0;
+#X connect 32 0 45 0;
+#X connect 37 0 50 1;
+#X connect 38 0 50 0;
+#X connect 39 0 52 1;
+#X connect 40 0 48 0;
+#X connect 45 0 22 0;
+#X connect 46 0 21 0;
+#X connect 48 0 39 0;
+#X connect 50 0 23 0;
+#X connect 51 0 6 0;
+#X connect 52 0 26 1;
+#X connect 52 0 46 0;
+#X connect 53 0 22 1;
+#X connect 54 0 25 0;
diff --git a/externals/gridflow/examples/bounce.pd b/externals/gridflow/examples/bounce.pd
new file mode 100644
index 00000000..46421cad
--- /dev/null
+++ b/externals/gridflow/examples/bounce.pd
@@ -0,0 +1,32 @@
+#N canvas 0 0 450 300 10;
+#X obj 34 284 #out window;
+#X floatatom 48 71 5 0 0 0 - - -;
+#X obj 34 16 metro 30;
+#X obj 6 19 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1;
+#X obj 34 42 f;
+#X obj 95 34 + 1;
+#X msg 34 265 set_geometry \$1 \$2 200 200;
+#X obj 34 93 t f f;
+#X obj 34 246 pack 0 0;
+#X obj 64 136 expr $f1-int($f1);
+#X obj 64 156 expr 2*if($f1>=.5 \, $f1 \, (1-$f1));
+#X obj 64 176 expr $f1*400;
+#X obj 64 115 / 200;
+#X obj 95 53 % 1000;
+#X obj 34 206 expr 400-200*abs(sin($f1/3.1416/5));
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 4 0 1 0;
+#X connect 4 0 7 0;
+#X connect 5 0 13 0;
+#X connect 6 0 0 0;
+#X connect 7 0 14 0;
+#X connect 7 1 12 0;
+#X connect 8 0 6 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 8 1;
+#X connect 12 0 9 0;
+#X connect 13 0 4 1;
+#X connect 14 0 8 0;
diff --git a/externals/gridflow/examples/cellular_1d.pd b/externals/gridflow/examples/cellular_1d.pd
new file mode 100644
index 00000000..5fa34551
--- /dev/null
+++ b/externals/gridflow/examples/cellular_1d.pd
@@ -0,0 +1,170 @@
+#N canvas 104 110 783 543 10;
+#X obj 33 103 loadbang;
+#X obj 124 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 139 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 154 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 169 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 184 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 199 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 214 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 229 361 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 124 452 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-241291 -1 -1 86 256;
+#X obj -1 215 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X msg 17 312 1 256 # 1;
+#X msg 33 122 1 256 # 2;
+#X obj -1 77 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X text 92 465 characteristic number;
+#X obj 221 166 nbx 2 14 1 99 0 0 empty empty empty 0 -6 0 10 -241291
+-1 -1 1 256;
+#X text 79 141 randomizer;
+#X text 246 360 specify behaviour here;
+#X text 24 234 compute new state;
+#X text 245 233 make scrollie;
+#X text 297 263 convert bit matrix to rgb image;
+#X text 243 246 (window height = 128);
+#X obj 159 74 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 172 324 loadbang;
+#X obj 75 182 t a a;
+#X obj 444 53 loadbang;
+#X msg 329 54 3 # 0;
+#X msg 505 55 3 # 255;
+#X text 370 55 background;
+#X text 558 57 foreground;
+#X obj 17 272 t a a;
+#X obj 33 141 # rand;
+#X obj 17 214 #store;
+#X obj 17 292 #finished;
+#X obj 17 332 # <<;
+#X obj 17 352 # &;
+#X obj 17 372 # != 0;
+#X obj 124 414 #fold +;
+#X obj 124 433 #export;
+#X obj 159 91 #for 0 256 1;
+#X obj 159 110 # == 128;
+#X obj 281 296 #store;
+#X obj 329 74 #color;
+#X obj 505 74 #color;
+#X obj 423 135 #pack 6;
+#X obj 17 252 #convolve (1 3 # 1 2 4);
+#X obj 124 395 # << (0 1 2 3 4 5 6 7);
+#X obj -4 510 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 4 517 GridFlow 0.8.0;
+#X obj -7 0 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 281 334 #out window;
+#X text -3 15 Copyright 2002 Mathieu Bouchard;
+#X text -3 1 Cellular_1d;
+#X text 253 166 <-- number of new lines per frame;
+#X text 178 73 <-- make single dot;
+#X text 100 123 restart;
+#X obj 281 277 #outer ignore (0);
+#X obj 327 296 #redim (2 3);
+#X obj 329 134 #unpack 3;
+#X obj 505 134 #unpack 3;
+#X obj 159 129 #redim (1 256);
+#X obj 281 315 #scale_by 2;
+#N canvas 79 42 450 300 make_scrollie 0;
+#X obj 41 30 inlet one_line;
+#X obj 290 30 inlet number_of_lines;
+#X obj 42 258 outlet grid;
+#X obj 205 205 loadbang;
+#X msg 205 224 1 256 # 0;
+#X msg 256 87 \$1 256;
+#X msg 142 82 set \$1;
+#X obj 156 125 t a a;
+#X obj 156 144 #finished;
+#X obj 142 167 #for 1 128 1;
+#X obj 142 205 #store;
+#X obj 142 224 @join 0;
+#X obj 142 62 max 1;
+#X obj 142 186 #outer ignore (0);
+#X obj 156 106 #import (1 256);
+#X connect 0 0 14 0;
+#X connect 1 0 12 0;
+#X connect 3 0 4 0;
+#X connect 4 0 10 1;
+#X connect 5 0 14 1;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 7 1 11 1;
+#X connect 8 0 9 0;
+#X connect 9 0 13 0;
+#X connect 10 0 11 0;
+#X connect 11 0 10 1;
+#X connect 11 0 2 0;
+#X connect 12 0 6 0;
+#X connect 12 0 5 0;
+#X connect 13 0 10 0;
+#X connect 14 0 7 0;
+#X restore 114 182 pd make_scrollie;
+#X obj 17 76 metro 33.3667;
+#X obj 124 376 #pack 8 \, \, \, \, \, \, \, \, \,;
+#X connect 0 0 12 0;
+#X connect 1 0 64 0;
+#X connect 2 0 64 1;
+#X connect 3 0 64 2;
+#X connect 4 0 64 3;
+#X connect 5 0 64 4;
+#X connect 6 0 64 5;
+#X connect 7 0 64 6;
+#X connect 8 0 64 7;
+#X connect 9 0 35 1;
+#X connect 10 0 32 0;
+#X connect 11 0 34 0;
+#X connect 12 0 31 0;
+#X connect 13 0 63 0;
+#X connect 15 0 62 1;
+#X connect 22 0 39 0;
+#X connect 23 0 2 0;
+#X connect 23 0 3 0;
+#X connect 23 0 7 0;
+#X connect 23 0 5 0;
+#X connect 24 0 32 1;
+#X connect 24 1 62 0;
+#X connect 25 0 26 0;
+#X connect 25 0 27 0;
+#X connect 26 0 42 0;
+#X connect 27 0 43 0;
+#X connect 30 0 33 0;
+#X connect 30 1 34 1;
+#X connect 31 0 24 0;
+#X connect 32 0 45 0;
+#X connect 33 0 11 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 24 0;
+#X connect 37 0 38 0;
+#X connect 38 0 9 0;
+#X connect 39 0 40 0;
+#X connect 40 0 60 0;
+#X connect 41 0 61 0;
+#X connect 42 0 58 0;
+#X connect 43 0 59 0;
+#X connect 44 0 57 0;
+#X connect 45 0 30 0;
+#X connect 46 0 37 0;
+#X connect 56 0 41 0;
+#X connect 57 0 41 1;
+#X connect 58 0 44 0;
+#X connect 58 1 44 1;
+#X connect 58 2 44 2;
+#X connect 59 0 44 3;
+#X connect 59 1 44 4;
+#X connect 59 2 44 5;
+#X connect 60 0 24 0;
+#X connect 61 0 50 0;
+#X connect 62 0 56 0;
+#X connect 63 0 32 0;
+#X connect 64 0 46 0;
diff --git a/externals/gridflow/examples/color_correction.pd b/externals/gridflow/examples/color_correction.pd
new file mode 100644
index 00000000..93b1d9fe
--- /dev/null
+++ b/externals/gridflow/examples/color_correction.pd
@@ -0,0 +1,151 @@
+#N canvas 37 349 672 521 10;
+#X text 360 136 sigma (extremes);
+#X obj 134 465 #out window;
+#X text 361 211 linear (contrast);
+#X obj 134 404 shunt 2;
+#N canvas 1 96 188 188 color 0;
+#X obj 25 105 # inv+;
+#X obj 25 67 # inv+ 255;
+#X obj 85 86 inlet;
+#X obj 25 31 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 25 12 inlet;
+#X obj 25 86 #outer <;
+#X obj 25 124 # & 255;
+#X obj 25 48 #for 0 256 1;
+#X obj 25 143 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 1;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 1 0;
+#X restore 194 425 pd color correction graph generator;
+#X obj 59 285 #in;
+#X text 360 284 constant (brightness);
+#N canvas 352 112 370 429 color-correction 0;
+#X obj 23 191 # + 128;
+#X obj 23 172 # /;
+#X obj 23 95 # *;
+#X obj 89 270 # +;
+#X obj 77 95 # max 32;
+#X obj 77 134 # tanh* 512;
+#X obj 23 57 # gamma;
+#X obj 77 114 # << 5;
+#X obj 23 76 # - 128;
+#X obj 23 153 # tanh* 65535;
+#X obj 23 115 # >> 2;
+#X obj 95 232 inlet linear;
+#X obj 114 270 inlet constant;
+#X obj 49 232 # *>>8;
+#X obj 77 76 inlet sigma;
+#X obj 67 38 inlet gamma;
+#X obj 23 19 inlet image;
+#X obj 89 308 outlet image;
+#X obj 89 289 #clip;
+#X connect 0 0 13 0;
+#X connect 1 0 0 0;
+#X connect 2 0 10 0;
+#X connect 3 0 18 0;
+#X connect 4 0 2 1;
+#X connect 4 0 7 0;
+#X connect 5 0 1 1;
+#X connect 6 0 8 0;
+#X connect 7 0 5 0;
+#X connect 8 0 2 0;
+#X connect 9 0 1 0;
+#X connect 10 0 9 0;
+#X connect 11 0 13 1;
+#X connect 12 0 3 1;
+#X connect 13 0 3 0;
+#X connect 14 0 4 0;
+#X connect 15 0 6 1;
+#X connect 16 0 6 0;
+#X connect 18 0 17 0;
+#X restore 176 314 pd color-correction;
+#X obj 134 425 #store;
+#X obj 29 45 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 29 81 #for 0 256 1;
+#X obj 168 340 #finished;
+#X obj 29 62 metro 33.3667;
+#X obj 59 247 loadbang;
+#X obj 256 92 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 277 93 regular;
+#X text 276 108 solarize;
+#X text 277 122 solarize 2;
+#X obj 29 119 shunt 3;
+#X obj 29 173 t a;
+#X obj 119 174 # sin* 255;
+#X obj 120 155 # / 255;
+#X obj 120 136 # * 18000;
+#X obj 190 391 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 209 391 see picture;
+#X text 209 406 see graph;
+#X obj 8 221 spigot;
+#X obj 57 222 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 13 204 enable stream;
+#X text 361 60 gamma (midtones);
+#X msg 254 183 3 # 256;
+#X obj 253 163 loadbang;
+#X msg 238 212 3 # 0;
+#X obj 8 310 #camera;
+#X obj 362 77 #color 0 1024 1;
+#X obj 362 152 #color 0 1024 1;
+#X obj 362 226 #color 0 1024 1;
+#X obj 362 298 #color -256 256 1;
+#X obj 51 140 #solarize;
+#X obj 134 445 #apply_colormap_channelwise;
+#X obj 2 2 cnv 15 720 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 15 Copyright 2002 Mathieu Bouchard;
+#X obj 2 487 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 15 2 color_correction.pd;
+#X obj 29 100 #outer ignore (3 #);
+#X text 10 494 GridFlow 0.8.3;
+#X msg 59 266 load bluemarble.jpg;
+#X connect 3 0 8 0;
+#X connect 3 1 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 1;
+#X connect 7 0 11 0;
+#X connect 7 0 4 1;
+#X connect 7 0 39 1;
+#X connect 8 0 39 0;
+#X connect 9 0 12 0;
+#X connect 10 0 44 0;
+#X connect 11 0 3 0;
+#X connect 12 0 10 0;
+#X connect 12 0 26 0;
+#X connect 13 0 46 0;
+#X connect 14 0 18 1;
+#X connect 18 0 19 0;
+#X connect 18 1 38 0;
+#X connect 18 2 22 0;
+#X connect 19 0 7 0;
+#X connect 20 0 19 0;
+#X connect 21 0 20 0;
+#X connect 22 0 21 0;
+#X connect 23 0 3 1;
+#X connect 26 0 33 0;
+#X connect 27 0 26 1;
+#X connect 30 0 34 0;
+#X connect 30 0 36 0;
+#X connect 31 0 30 0;
+#X connect 31 0 32 0;
+#X connect 32 0 37 0;
+#X connect 32 0 35 0;
+#X connect 33 0 8 1;
+#X connect 34 0 7 1;
+#X connect 35 0 7 2;
+#X connect 36 0 7 3;
+#X connect 37 0 7 4;
+#X connect 38 0 19 0;
+#X connect 39 0 1 0;
+#X connect 44 0 18 0;
+#X connect 46 0 5 0;
diff --git a/externals/gridflow/examples/color_detect.pd b/externals/gridflow/examples/color_detect.pd
new file mode 100644
index 00000000..91610cdb
--- /dev/null
+++ b/externals/gridflow/examples/color_detect.pd
@@ -0,0 +1,218 @@
+#N canvas 562 75 668 715 10;
+#X obj 14 262 # > 0;
+#X obj 68 284 # + 128;
+#X obj 383 135 hsl 222 15 0 442 0 0 empty empty tolerance 8 8 0 8 -260818
+-1 -1 10300 1;
+#X obj 224 530 #out window;
+#X obj 68 262 # tanh* 127;
+#X obj 86 2 #store;
+#X obj 277 177 tgl 15 1 empty empty empty 0 -6 0 8 -261689 -258699
+-1 1 1;
+#X obj 31 -64 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 14 179 # inv+;
+#X obj 14 284 # << 8;
+#X obj 14 160 #fold +;
+#X obj 315 360 loadbang;
+#X obj 298 398 #checkers;
+#X obj 224 468 # +;
+#X obj 224 445 # *;
+#X obj 297 446 # *;
+#X obj 224 489 # >> 8;
+#X obj 297 424 # inv+ 256;
+#X obj 271 490 # min 255;
+#X obj 298 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 380 76 #color;
+#X obj 72 22 s image;
+#X obj 240 426 r image;
+#X text 374 46 select a point in the color cube \; and a radius of
+accepted similarity.;
+#X obj 277 196 #pack 3;
+#X obj 299 177 tgl 15 1 empty empty empty 0 -6 0 8 -225271 -24198 -1
+1 1;
+#X obj 321 177 tgl 15 1 empty empty empty 0 -6 0 8 -228992 -62784 -1
+1 1;
+#X text 271 161 enable selection on:;
+#X text 339 178 all three = select sphere in color cube \; pick two
+= select circle in a color square \; pick one = select range in one
+channel;
+#X text 377 360 make background;
+#X obj 57 217 # inv+;
+#X obj 295 229 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -66577
+-1 0;
+#X text 314 228 erase nonselected;
+#X text 314 245 erase selected;
+#X obj 295 269 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -66577
+-1 1;
+#X text 317 268 strict;
+#X text 316 284 fuzzy;
+#X obj 296 325 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -66577
+-1 0;
+#X text 318 324 see filtered image on checkers;
+#X text 318 339 see opacity mask;
+#X obj 224 406 t a a;
+#N canvas 414 518 450 216 color 0;
+#X obj 25 3 inlet bang;
+#X obj 26 182 outlet image;
+#X obj 26 144 # min 255;
+#X obj 26 163 # max 0;
+#X obj 178 31 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 25 25 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 178 88 #outer + ( 0 0 9000 );
+#X obj 48 24 t b b;
+#X obj 26 81 #outer * ( 1 0 0 );
+#X obj 26 105 # +;
+#X obj 178 132 # + ( 0 128 128 );
+#X obj 178 48 #for 0 320 1;
+#X obj 179 67 # * 113;
+#X obj 26 62 #outer + ( 320 # 0 );
+#X obj 26 43 #for -120 360 2;
+#X obj 178 155 #redim ( 240 320 3 );
+#X obj 178 109 # cos* ( 0 128 128 );
+#X obj 26 124 #yuv_to_rgb;
+#X connect 0 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 11 0;
+#X connect 5 0 14 0;
+#X connect 6 0 16 0;
+#X connect 7 0 5 0;
+#X connect 7 1 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 17 0;
+#X connect 10 0 15 0;
+#X connect 11 0 12 0;
+#X connect 12 0 6 0;
+#X connect 13 0 8 0;
+#X connect 14 0 13 0;
+#X connect 15 0 9 1;
+#X connect 16 0 10 0;
+#X connect 17 0 2 0;
+#X restore 133 21 pd color panorama;
+#X obj 133 2 loadbang;
+#X obj 210 -53 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -66577
+-1 1;
+#X text 229 -54 on video;
+#X text 229 -38 on color panorama;
+#X floatatom 336 136 5 0 0 0 - - -;
+#X obj 76 240 # *>>8 256;
+#X obj 338 302 hsl 129 15 4 4096 1 1 empty empty empty -2 -6 0 8 -260818
+-1 -1 7000 1;
+#X floatatom 295 302 5 0 0 0 - - -;
+#X obj 58 87 #rgb_to_yuv;
+#X obj 90 55 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 107 55 RGB;
+#X text 107 70 YUV;
+#X text 141 55 warning: in YUV mode \,;
+#X text 140 81 green slider = U chroma;
+#X text 147 94 blue slider = V chroma;
+#X text 154 68 red slider = Y luma;
+#X obj 31 -39 metro 33.3667;
+#X obj 31 22 t a a;
+#X obj 31 1 #camera;
+#X obj 332 446 spigot;
+#X obj 379 447 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 398 448 recurrent layering;
+#X obj 224 511 t a;
+#X obj 14 141 # &;
+#X obj 40 141 # inv+;
+#X obj 36 397 # >> 6;
+#X obj 14 198 shunt 2;
+#X obj 14 241 shunt 2;
+#X obj 14 55 shunt 2;
+#X obj 14 306 shunt 2;
+#X obj 68 308 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 87 302 sort-of feather;
+#X obj 224 385 shunt 2;
+#X text 87 317 (8x8 square blur on mask);
+#X obj 31 -18 shunt 2;
+#X obj 36 377 # + 32;
+#X obj -2 561 cnv 15 740 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 6 568 GridFlow 0.8.0;
+#X obj 1 -118 cnv 15 740 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 14 -118 color_detect.pd;
+#X text 13 -105 Copyright 2001-2004 Mathieu Bouchard;
+#X obj 14 122 # sq-;
+#X obj 61 179 # sq-;
+#X obj 36 337 #convolve (8 1 # 1);
+#X obj 36 357 #convolve (1 8 # 1);
+#X obj 14 457 #outer ignore (3 # 0);
+#X obj 298 379 #for (0 0) (240 320) (1 1);
+#X connect 0 0 9 0;
+#X connect 1 0 71 0;
+#X connect 2 0 46 0;
+#X connect 4 0 1 0;
+#X connect 5 0 59 0;
+#X connect 6 0 24 0;
+#X connect 7 0 58 0;
+#X connect 8 0 68 0;
+#X connect 9 0 71 0;
+#X connect 10 0 8 0;
+#X connect 11 0 19 0;
+#X connect 12 0 15 1;
+#X connect 13 0 16 0;
+#X connect 14 0 13 0;
+#X connect 15 0 13 1;
+#X connect 16 0 64 0;
+#X connect 17 0 15 0;
+#X connect 18 0 64 0;
+#X connect 19 0 88 0;
+#X connect 20 0 83 1;
+#X connect 22 0 14 1;
+#X connect 24 0 66 0;
+#X connect 25 0 24 1;
+#X connect 26 0 24 2;
+#X connect 30 0 69 0;
+#X connect 31 0 68 1;
+#X connect 34 0 69 1;
+#X connect 37 0 74 1;
+#X connect 40 0 14 0;
+#X connect 40 1 17 0;
+#X connect 41 0 5 1;
+#X connect 42 0 41 0;
+#X connect 43 0 76 1;
+#X connect 46 0 84 0;
+#X connect 47 0 4 0;
+#X connect 48 0 49 0;
+#X connect 49 0 47 1;
+#X connect 50 0 83 0;
+#X connect 51 0 70 1;
+#X connect 58 0 76 0;
+#X connect 59 0 70 0;
+#X connect 59 1 21 0;
+#X connect 60 0 59 0;
+#X connect 61 0 15 1;
+#X connect 62 0 61 1;
+#X connect 64 0 3 0;
+#X connect 64 0 61 0;
+#X connect 65 0 10 0;
+#X connect 66 0 65 1;
+#X connect 67 0 87 0;
+#X connect 68 0 69 0;
+#X connect 68 1 30 0;
+#X connect 69 0 0 0;
+#X connect 69 1 47 0;
+#X connect 70 0 83 0;
+#X connect 70 1 50 0;
+#X connect 71 0 87 0;
+#X connect 71 1 85 0;
+#X connect 72 0 71 1;
+#X connect 74 0 40 0;
+#X connect 74 1 18 0;
+#X connect 76 0 60 0;
+#X connect 76 1 5 0;
+#X connect 77 0 67 0;
+#X connect 83 0 65 0;
+#X connect 84 0 8 1;
+#X connect 85 0 86 0;
+#X connect 86 0 77 0;
+#X connect 87 0 74 0;
+#X connect 88 0 12 0;
diff --git a/externals/gridflow/examples/convolve.pd b/externals/gridflow/examples/convolve.pd
new file mode 100644
index 00000000..4b6aeb67
--- /dev/null
+++ b/externals/gridflow/examples/convolve.pd
@@ -0,0 +1,90 @@
+#N canvas 17 90 652 511 10;
+#X obj 40 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 40 220 #store;
+#X obj 136 306 # / 9;
+#X obj 31 300 #out window;
+#X obj 78 175 #in;
+#X obj 40 66 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X text 351 75 step 1: select one of those six grids;
+#X obj 78 135 loadbang;
+#X obj 40 83 metro 33.3667;
+#X obj 78 197 t a;
+#X obj 136 287 #convolve \, seed 4;
+#X obj 352 95 loadbang;
+#X text 13 239 feedback loop;
+#X obj 136 325 shunt 2;
+#X obj 191 327 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 307 205 0;
+#X obj 183 365 # + 128;
+#X msg 317 365 1;
+#X obj 31 319 fps;
+#X obj 31 338 print;
+#X obj 5 481 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 13 488 GridFlow 0.8.0;
+#X text 13 488 GridFlow 0.8.0;
+#X obj 7 5 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 20 18 Copyright 2002 Mathieu Bouchard;
+#X text 20 5 convolve.pd;
+#X text 526 282 Laplacian masks;
+#X text 416 352 Sharpen;
+#X text 527 107 Blurs;
+#X obj 183 346 # << 4;
+#X msg 78 155 open babbage.jpg \, bang;
+#X obj 136 344 # abs-;
+#X obj 136 392 #clip;
+#X msg 416 370 3 3 # -1 -1 -1 -1 17;
+#X msg 416 325 3 3 # -1 -1 -1 -1 8;
+#X msg 419 302 3 3 # 0 1 0 1 -4 1 0 1 0;
+#X msg 413 246 1 3 # 0 9 -9;
+#X msg 413 227 1 3 # 0 2 -2;
+#X msg 401 127 3 3 # 1 1 1 1 1 1 1 1 1;
+#X msg 407 147 3 3 # 4 0 0 0 1 0 0 0 4;
+#X msg 397 187 3 3 # 2 2 2 2 -7 2 2 2 2;
+#X msg 402 207 3 3 # 0 4 0 4 9 -4 0 -4 0;
+#X text 420 170 Simple edge detection;
+#X obj 134 197 display;
+#X obj 277 186 t a b;
+#X obj 287 346 t a b;
+#X obj 210 217 # +;
+#X connect 0 0 1 0;
+#X connect 1 0 10 0;
+#X connect 2 0 13 0;
+#X connect 3 0 18 0;
+#X connect 4 0 9 0;
+#X connect 5 0 8 0;
+#X connect 7 0 30 0;
+#X connect 8 0 0 0;
+#X connect 9 0 1 1;
+#X connect 9 0 3 0;
+#X connect 10 0 2 0;
+#X connect 11 0 38 0;
+#X connect 13 0 31 0;
+#X connect 13 1 29 0;
+#X connect 14 0 13 1;
+#X connect 15 0 14 0;
+#X connect 16 0 32 0;
+#X connect 17 0 14 0;
+#X connect 18 0 19 0;
+#X connect 29 0 16 0;
+#X connect 30 0 4 0;
+#X connect 31 0 32 0;
+#X connect 32 0 9 0;
+#X connect 33 0 44 0;
+#X connect 34 0 45 0;
+#X connect 35 0 45 0;
+#X connect 36 0 45 0;
+#X connect 37 0 44 0;
+#X connect 38 0 44 0;
+#X connect 39 0 44 0;
+#X connect 40 0 44 0;
+#X connect 41 0 44 0;
+#X connect 44 0 46 0;
+#X connect 44 1 15 0;
+#X connect 45 0 46 0;
+#X connect 45 1 17 0;
+#X connect 46 0 10 1;
+#X connect 46 0 43 0;
diff --git a/externals/gridflow/examples/cross_fade.pd b/externals/gridflow/examples/cross_fade.pd
new file mode 100644
index 00000000..c612e1db
--- /dev/null
+++ b/externals/gridflow/examples/cross_fade.pd
@@ -0,0 +1,76 @@
+#N canvas 344 101 680 501 10;
+#X obj 13 229 # *>>8;
+#X text 40 253 first picture plus a fraction of the difference;
+#X obj 13 251 # +;
+#X obj 13 210 #store;
+#X obj 211 157 # inv+;
+#X obj 68 271 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 12 372 note: the #layer/#join objects can make the crossfade
+process simpler but it's still not faster.;
+#X obj 13 46 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 264 130 #in;
+#X obj 13 191 #finished;
+#X text 85 271 click to clip out-of-range colours;
+#X text 60 229 multiply by a N/256 fraction;
+#X obj 211 111 #in;
+#X obj 13 353 #out window;
+#X text 61 213 keep the difference between both pictures;
+#X obj 249 91 t b b;
+#X obj 249 72 loadbang;
+#X obj 13 270 shunt 2;
+#X obj 13 82 float;
+#X obj 25 101 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 2784 256;
+#X obj 52 82 + 4;
+#X obj 13 117 pingpong 256;
+#X obj 21 136 hsl 129 15 0 256 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 11200 1;
+#X text 11 406 also #draw_image/#join is a possibility;
+#X obj 0 1 cnv 15 680 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 14 14 Copyright 2002 Mathieu Bouchard;
+#X text 14 -2 cross_fade.pd;
+#X obj 0 469 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 8 477 GridFlow 0.8.0;
+#X obj 57 308 #clip;
+#X msg 237 111 load b001.jpg;
+#X msg 289 130 load r001.jpg;
+#X obj 264 149 #cast s;
+#X obj 211 130 #cast s;
+#X obj 13 172 t a a;
+#X obj 13 63 metro 33.3667;
+#X obj 57 289 #cast i;
+#X obj 13 153 #cast s;
+#X connect 0 0 2 0;
+#X connect 2 0 17 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 1;
+#X connect 5 0 17 1;
+#X connect 7 0 35 0;
+#X connect 8 0 32 0;
+#X connect 9 0 3 0;
+#X connect 12 0 33 0;
+#X connect 15 0 30 0;
+#X connect 15 1 31 0;
+#X connect 16 0 15 0;
+#X connect 17 0 13 0;
+#X connect 17 1 36 0;
+#X connect 18 0 19 0;
+#X connect 18 0 20 0;
+#X connect 18 0 21 0;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 21 0 37 0;
+#X connect 29 0 13 0;
+#X connect 30 0 12 0;
+#X connect 31 0 8 0;
+#X connect 32 0 4 1;
+#X connect 33 0 4 0;
+#X connect 33 0 2 1;
+#X connect 34 0 9 0;
+#X connect 34 1 0 1;
+#X connect 35 0 18 0;
+#X connect 36 0 29 0;
+#X connect 37 0 34 0;
diff --git a/externals/gridflow/examples/doodle.pd b/externals/gridflow/examples/doodle.pd
new file mode 100644
index 00000000..8999b273
--- /dev/null
+++ b/externals/gridflow/examples/doodle.pd
@@ -0,0 +1,51 @@
+#N canvas 0 0 450 427 10;
+#X obj 22 22 metro 33.3667;
+#X obj 1 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1;
+#X obj 183 74 t b l;
+#X obj 270 93 loadbang;
+#X msg 222 74 put_at ( \$1 \$2 0 );
+#X msg 270 112 0 192 255;
+#X obj 22 133 #scale_by 8;
+#X obj 22 262 #out window;
+#X obj 22 295 #mouse;
+#X obj 22 314 # / 8;
+#X obj 22 333 #export_list;
+#X obj 183 93 #store;
+#X obj 270 131 #color;
+#X obj 22 114 #store (64 64 3 #);
+#X obj 200 225 #for (0 0) (8 8) (1 1);
+#X obj 200 263 #fold &;
+#X obj 211 203 loadbang;
+#X obj 189 205 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 196 168 0 0;
+#X obj 22 167 #draw_image *>>8 \, tile 1;
+#X obj 200 244 # !=;
+#X obj 200 282 # * 128;
+#X obj 200 301 #outer + (3 # 127);
+#X connect 0 0 13 0;
+#X connect 1 0 0 0;
+#X connect 2 0 11 0;
+#X connect 2 1 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 13 1;
+#X connect 5 0 12 0;
+#X connect 5 0 18 0;
+#X connect 6 0 19 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 11 0 13 1;
+#X connect 12 0 11 1;
+#X connect 13 0 6 0;
+#X connect 14 0 20 0;
+#X connect 15 0 21 0;
+#X connect 16 0 14 0;
+#X connect 17 0 14 0;
+#X connect 18 0 19 2;
+#X connect 19 0 7 0;
+#X connect 20 0 15 0;
+#X connect 21 0 22 0;
+#X connect 22 0 19 1;
diff --git a/externals/gridflow/examples/drag_rectangle.pd b/externals/gridflow/examples/drag_rectangle.pd
new file mode 100644
index 00000000..4d5bd6b7
--- /dev/null
+++ b/externals/gridflow/examples/drag_rectangle.pd
@@ -0,0 +1,106 @@
+#N canvas 420 110 647 484 10;
+#X obj 274 73 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 274 197 #out window;
+#X obj 64 224 hsl 128 15 0 319 0 0 x1_o x1_i empty -2 -8 1 10 -262144
+-1 -1 8560 1;
+#X obj 64 76 hsl 128 15 0 319 0 0 x0_o x0_i empty 0 8 1 10 -262144
+-66577 -258699 5215 0;
+#X obj 46 93 vsl 15 128 239 0 0 0 y0_o y0_i empty 0 -8 1 10 -262144
+-1 -1 10840 1;
+#X obj 194 93 vsl 15 128 239 0 0 0 y1_o y1_i empty 0 -8 1 10 -262144
+-1 -1 7439 1;
+#N canvas 463 375 452 302 make_rectangle 0;
+#X obj 27 16 inlet;
+#X text 25 -3 image;
+#X obj 93 17 inlet;
+#X text 92 0 start pos;
+#X obj 172 18 inlet;
+#X text 172 1 end pos;
+#X obj 27 244 outlet;
+#X text 27 264 image;
+#X obj 125 81 #export_list;
+#X msg 95 135 4 2 # \$1 \$2 \$1 \$4 \$3 \$4 \$3 \$2;
+#X obj 27 177 #draw_polygon >> (1 1 1) (4 2 #);
+#X obj 90 37 #unpack;
+#X obj 154 42 #unpack;
+#X obj 125 62 #pack 4;
+#X connect 0 0 10 0;
+#X connect 2 0 11 0;
+#X connect 4 0 12 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 2;
+#X connect 10 0 6 0;
+#X connect 11 0 13 0;
+#X connect 11 1 13 1;
+#X connect 12 0 13 2;
+#X connect 12 1 13 3;
+#X connect 13 0 8 0;
+#X restore 274 177 pd make_rectangle;
+#X obj 274 123 metro 33.3667;
+#X text 21 75 start;
+#X text 198 224 end;
+#X obj 371 103 loadbang;
+#X obj 274 152 #store;
+#X obj 436 105 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 358 197 #mouse \, ...;
+#X obj 421 145 loadbang;
+#X msg 421 164 0 0;
+#X obj 385 241 t a;
+#X obj 90 402 #out window;
+#X obj 129 301 t b a;
+#X obj 90 366 #store;
+#X msg 91 323 set ( \$1 \$2 );
+#X obj 370 123 #in b001.jpg;
+#X text 73 115 drag the mouse;
+#X text 99 100 step 2:;
+#X text 82 131 inside the;
+#X text 80 146 first window;
+#X text 261 55 step 1: turn on;
+#X text 95 384 cropping (to 2nd window);
+#X obj 2 453 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 10 460 GridFlow 0.8.0;
+#X text 10 460 GridFlow 0.8.0;
+#X obj 3 3 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 16 16 Copyright 2002 Mathieu Bouchard;
+#X text 16 3 drag_rectangle.pd;
+#X obj 90 347 #for (0 0) (0 0) (1 1);
+#X obj 358 359 unpack;
+#X obj 493 354 unpack;
+#X obj 395 378 s x0_i;
+#X obj 493 392 s y1_i;
+#X obj 530 373 s x1_i;
+#X obj 358 397 s y0_i;
+#X connect 0 0 7 0;
+#X connect 1 0 13 0;
+#X connect 6 0 1 0;
+#X connect 7 0 11 0;
+#X connect 10 0 21 0;
+#X connect 11 0 6 0;
+#X connect 12 0 21 0;
+#X connect 13 0 6 1;
+#X connect 13 0 20 0;
+#X connect 13 0 16 0;
+#X connect 13 0 35 0;
+#X connect 13 1 16 0;
+#X connect 13 2 16 0;
+#X connect 13 2 18 0;
+#X connect 14 0 15 0;
+#X connect 15 0 6 1;
+#X connect 15 0 6 2;
+#X connect 16 0 6 2;
+#X connect 16 0 36 0;
+#X connect 18 0 34 0;
+#X connect 18 1 34 1;
+#X connect 19 0 17 0;
+#X connect 20 0 34 0;
+#X connect 21 0 11 1;
+#X connect 21 0 19 1;
+#X connect 34 0 19 0;
+#X connect 35 0 40 0;
+#X connect 35 1 37 0;
+#X connect 36 0 38 0;
+#X connect 36 1 39 0;
diff --git a/externals/gridflow/examples/eclipse.pd b/externals/gridflow/examples/eclipse.pd
new file mode 100644
index 00000000..068b1e7d
--- /dev/null
+++ b/externals/gridflow/examples/eclipse.pd
@@ -0,0 +1,77 @@
+#N canvas 246 45 635 533 10;
+#X floatatom 342 279 5 0 0 0 - - -;
+#X obj 61 -35 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 294 237 loadbang;
+#X floatatom 294 281 5 0 0 0 - - -;
+#X obj 38 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 61 -6 metro 33.3667;
+#X text 289 214 size of subimages;
+#X obj 61 17 #camera;
+#X obj 61 91 #finished;
+#X obj 61 183 # /;
+#X obj 61 202 # *;
+#X obj 61 229 #store;
+#X obj 61 294 #out window;
+#X obj 294 299 #pack 2;
+#X obj 127 219 #store;
+#X obj 127 196 # *;
+#X obj 1 418 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X obj 3 -85 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 121 17 <-- open this;
+#X text 16 -85 eclipse.pd;
+#X obj 61 72 t a a;
+#X obj 61 110 t b b;
+#X obj 61 332 print;
+#X obj 61 313 fps detailed;
+#X text 9 425 GridFlow 0.8.3;
+#X msg 294 259 6;
+#X msg 342 259 8;
+#X obj 294 318 # inv* (240 320);
+#X text 16 -72 Copyright 2002 \, 2006 Mathieu Bouchard;
+#X obj 164 114 #for (0 0) (240 320) (1 1);
+#X obj 61 164 #store;
+#X obj 127 174 #store;
+#X obj 61 275 #clip;
+#X obj 164 95 loadbang;
+#X obj 61 256 # *>>8;
+#X obj 61 36 #gamma 600;
+#X text 183 145 this is actually like #remap_image but faster;
+#X connect 0 0 13 1;
+#X connect 1 0 5 0;
+#X connect 2 0 26 0;
+#X connect 2 0 25 0;
+#X connect 3 0 13 0;
+#X connect 4 0 7 0;
+#X connect 5 0 7 0;
+#X connect 7 0 35 0;
+#X connect 8 0 21 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 34 0;
+#X connect 12 0 23 0;
+#X connect 13 0 15 1;
+#X connect 13 0 27 0;
+#X connect 14 0 34 1;
+#X connect 15 0 14 0;
+#X connect 20 0 8 0;
+#X connect 20 1 11 1;
+#X connect 20 1 14 1;
+#X connect 21 0 30 0;
+#X connect 21 1 31 0;
+#X connect 23 0 22 0;
+#X connect 25 0 3 0;
+#X connect 26 0 0 0;
+#X connect 27 0 9 1;
+#X connect 27 0 10 1;
+#X connect 29 0 30 1;
+#X connect 29 0 31 1;
+#X connect 30 0 9 0;
+#X connect 31 0 15 0;
+#X connect 32 0 12 0;
+#X connect 33 0 29 0;
+#X connect 34 0 32 0;
+#X connect 35 0 20 0;
diff --git a/externals/gridflow/examples/epicycloid.pd b/externals/gridflow/examples/epicycloid.pd
new file mode 100644
index 00000000..000bc8c0
--- /dev/null
+++ b/externals/gridflow/examples/epicycloid.pd
@@ -0,0 +1,125 @@
+#N canvas 301 73 904 550 10;
+#X text 158 43 epicycloid;
+#X text 168 56 x(t) = (R+r) cos(t) - p*cos((R+r)t/r);
+#X text 168 69 y(t) = (R+r) sin(t) - p*sin((R+r)t/r);
+#X obj 24 273 #draw_polygon put 1;
+#X obj 24 292 #out window;
+#X obj -22 68 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 297 428 pack f f f f;
+#X msg 297 447 \$2 \$1 \$4 \$1 \$4 \$3 \$2 \$3;
+#X text 304 403 x;
+#X text 364 405 y;
+#X text 391 407 y+1;
+#X text 327 405 x+1;
+#X floatatom 303 381 5 0 0 0 - - -;
+#X obj 345 379 + 1;
+#X floatatom 390 382 5 0 0 0 - - -;
+#X obj 432 379 + 1;
+#X obj 303 358 t f f;
+#X obj 390 361 t f f;
+#X obj -16 108 s met;
+#X obj 258 428 r met;
+#X obj 388 197 hsl 128 15 5 100 0 1 empty empty empty -2 -6 0 8 -24198
+-1 -1 5500 1;
+#X obj 515 238 hsl 128 15 -100 100 0 1 empty empty empty -2 -6 0 8
+-44926 -1 -1 4000 1;
+#X obj 665 263 hsl 128 15 -150 150 0 1 empty empty empty -2 -6 0 8
+-258699 -1 -1 3200 1;
+#X text 313 155 t = valeur en angles de 0 a 360;
+#X obj 385 241 t f f;
+#X obj 512 270 t f f;
+#X obj 662 283 t f f;
+#X obj 303 217 * 6.28319;
+#X obj 303 196 / 360;
+#X floatatom 303 178 5 0 0 0 - - -;
+#X obj 303 236 t f f;
+#X obj -22 273 #store;
+#X obj -14 129 loadbang;
+#X obj 390 323 expr ($f2+$f3)*sin($f1) - $f4*sin(($f2+$f3)*$f1/$f3)
+;
+#X obj 303 302 expr ($f2+$f3)*cos($f1) - $f4*cos(($f2+$f3)*$f1/$f3)
+;
+#X obj 303 135 + 1;
+#X msg 303 111 1;
+#X floatatom 335 138 5 0 0 0 - - -;
+#X msg 335 119 0;
+#X text 366 122 reset count;
+#X text 100 147 reset image;
+#X text 470 216 r = Rayon du deuxieme cercle -100 a 100;
+#X obj 390 342 + 150;
+#X obj 303 339 + 150;
+#X floatatom 397 223 5 0 0 0 - - -;
+#X floatatom 563 263 5 0 0 0 - - -;
+#X floatatom 712 286 5 0 0 0 - - -;
+#X obj -22 85 metro 1;
+#X obj 25 68 hsl 128 15 0 15 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X text 360 178 R = Rayon du premier cercle 5 a 100;
+#X obj -38 515 cnv 15 900 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -29 522 GridFlow 0.8.0;
+#X text -29 522 GridFlow 0.8.0;
+#X obj -35 5 cnv 15 800 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 88 213 #color;
+#X obj 88 175 loadbang;
+#X msg 88 194 230 224 0;
+#X msg -14 148 300 300 3 # 0;
+#X text -22 18 Copyright 2004 Alexandre Castonguay;
+#X text -22 5 epicycloid.pd;
+#X text 51 128 start with a blank \, black image;
+#X text 660 248 deuxieme cercle - 150 a 150;
+#X text 660 233 p = distance du centre du;
+#X obj 297 466 #import (4 2);
+#X connect 3 0 4 0;
+#X connect 3 0 31 1;
+#X connect 5 0 47 0;
+#X connect 6 0 7 0;
+#X connect 7 0 63 0;
+#X connect 12 0 6 0;
+#X connect 13 0 6 2;
+#X connect 14 0 6 1;
+#X connect 15 0 6 3;
+#X connect 16 0 12 0;
+#X connect 16 1 13 0;
+#X connect 17 0 14 0;
+#X connect 17 1 15 0;
+#X connect 19 0 6 0;
+#X connect 20 0 24 0;
+#X connect 20 0 44 0;
+#X connect 21 0 25 0;
+#X connect 21 0 45 0;
+#X connect 22 0 26 0;
+#X connect 22 0 46 0;
+#X connect 24 0 34 1;
+#X connect 24 1 33 1;
+#X connect 25 0 34 2;
+#X connect 25 1 33 2;
+#X connect 26 0 34 3;
+#X connect 26 1 33 3;
+#X connect 27 0 30 0;
+#X connect 28 0 27 0;
+#X connect 29 0 28 0;
+#X connect 30 0 34 0;
+#X connect 30 1 33 0;
+#X connect 31 0 3 0;
+#X connect 32 0 57 0;
+#X connect 33 0 42 0;
+#X connect 34 0 43 0;
+#X connect 35 0 37 0;
+#X connect 35 0 29 0;
+#X connect 36 0 35 0;
+#X connect 37 0 35 1;
+#X connect 38 0 37 0;
+#X connect 42 0 17 0;
+#X connect 43 0 16 0;
+#X connect 47 0 18 0;
+#X connect 47 0 31 0;
+#X connect 47 0 36 0;
+#X connect 48 0 47 1;
+#X connect 54 0 3 1;
+#X connect 55 0 56 0;
+#X connect 56 0 54 0;
+#X connect 57 0 31 1;
+#X connect 63 0 3 2;
diff --git a/externals/gridflow/examples/feedback_fractal.pd b/externals/gridflow/examples/feedback_fractal.pd
new file mode 100644
index 00000000..abb70e80
--- /dev/null
+++ b/externals/gridflow/examples/feedback_fractal.pd
@@ -0,0 +1,147 @@
+#N canvas 609 30 779 549 10;
+#N canvas 0 0 450 300 experimental 0;
+#X obj 32 212 outlet 0;
+#X obj 39 81 @for ( 0 0 ) ( 256 256 ) ( 1 1 );
+#X obj 39 55 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 207 64 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 206 87 @for ( 0 0 ) ( 256 256 ) ( 1 1 );
+#X obj 206 109 @ >> ( 4 6 );
+#X obj 39 104 @ << ( 4 2 );
+#X obj 198 140 @inner & ^ 1 ( 2 2 # 85 170 170 85 );
+#X obj 39 126 @ +;
+#X obj 39 33 inlet;
+#X connect 1 0 6 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 1;
+#X connect 6 0 8 0;
+#X connect 8 0 0 0;
+#X connect 9 0 2 0;
+#X restore 545 260 pd experimental features;
+#X text 515 193 Choose Julia Mapping or Rotation;
+#X obj 31 53 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 414 145 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 135 196 apply transform (with feedback);
+#X floatatom 430 363 5 0 0 0 - - -;
+#X floatatom 518 387 5 0 0 0 - - -;
+#X text 434 375 zoom;
+#X text 518 397 move x;
+#X msg 518 368 -45;
+#X msg 430 344 128;
+#X obj 119 197 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 444 119 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 497 193 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X floatatom 472 387 5 0 0 0 - - -;
+#X text 471 398 move y;
+#X msg 472 368 193;
+#X obj 31 80 metro 33.3667;
+#X obj 442 191 shunt 2;
+#X obj 77 365 loadbang;
+#X obj 414 91 t b b;
+#X obj 414 67 loadbang;
+#X obj 31 338 t a;
+#X obj 131 220 loadbang;
+#X obj 131 239 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 119 317 t a;
+#X obj 31 108 t b b;
+#X obj 73 109 float;
+#X obj 73 128 + 1;
+#X obj 84 148 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 57 256;
+#X obj 486 323 t b;
+#X text 149 240 reset transform;
+#X obj 99 128 mod 60;
+#X obj 73 168 sel 59;
+#X obj 31 200 #store;
+#X obj 31 276 # << 7;
+#X obj 31 295 #fade 10;
+#X obj 31 314 # >> 7;
+#X obj 31 422 #store;
+#X obj 31 451 #out window;
+#X obj 414 478 # -;
+#X obj 438 454 # - 128;
+#X obj 414 390 # /;
+#X obj 414 296 #store;
+#X obj 442 172 #for ( -128 -128 ) ( 128 128 ) ( 1 1 );
+#X obj 442 210 @complex_sq;
+#X obj 485 229 #inner (2 2 # 120 30 -30 120);
+#X obj -13 0 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -15 518 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 525 GridFlow 0.8.0;
+#X text -7 525 GridFlow 0.8.0;
+#X text 0 0 feedback_fractal.pd;
+#X text 0 13 Copyright 2001 Mathieu Bouchard;
+#X obj 131 258 #for (0 0) (256 256) (1 1);
+#X obj 119 298 #store;
+#X obj 119 279 #store;
+#X obj 77 422 #cast b;
+#X obj 77 403 #in;
+#X msg 77 384 load teapot.png;
+#X obj 438 432 #pack;
+#X text 431 145 apply coords;
+#X text 462 118 apply type of transform;
+#X connect 0 0 43 1;
+#X connect 2 0 17 0;
+#X connect 3 0 43 0;
+#X connect 5 0 42 1;
+#X connect 6 0 59 1;
+#X connect 9 0 6 0;
+#X connect 10 0 5 0;
+#X connect 11 0 55 0;
+#X connect 12 0 44 0;
+#X connect 13 0 18 1;
+#X connect 14 0 59 0;
+#X connect 16 0 14 0;
+#X connect 17 0 26 0;
+#X connect 18 0 45 0;
+#X connect 18 1 46 0;
+#X connect 19 0 58 0;
+#X connect 20 0 3 0;
+#X connect 20 1 12 0;
+#X connect 20 1 30 0;
+#X connect 21 0 20 0;
+#X connect 22 0 38 0;
+#X connect 23 0 24 0;
+#X connect 24 0 53 0;
+#X connect 25 0 34 1;
+#X connect 25 0 54 1;
+#X connect 26 0 34 0;
+#X connect 26 1 27 0;
+#X connect 27 0 28 0;
+#X connect 28 0 29 0;
+#X connect 28 0 32 0;
+#X connect 28 0 33 0;
+#X connect 30 0 10 0;
+#X connect 30 0 16 0;
+#X connect 30 0 9 0;
+#X connect 32 0 27 1;
+#X connect 33 0 11 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 37 0;
+#X connect 37 0 22 0;
+#X connect 38 0 39 0;
+#X connect 40 0 55 1;
+#X connect 41 0 40 1;
+#X connect 42 0 40 0;
+#X connect 43 0 42 0;
+#X connect 44 0 18 0;
+#X connect 45 0 43 1;
+#X connect 46 0 43 1;
+#X connect 53 0 34 1;
+#X connect 53 0 54 1;
+#X connect 54 0 25 0;
+#X connect 55 0 54 0;
+#X connect 56 0 38 1;
+#X connect 57 0 56 0;
+#X connect 58 0 57 0;
diff --git a/externals/gridflow/examples/fire.pd b/externals/gridflow/examples/fire.pd
new file mode 100644
index 00000000..f9aa2ea8
--- /dev/null
+++ b/externals/gridflow/examples/fire.pd
@@ -0,0 +1,300 @@
+#N canvas 588 0 632 527 10;
+#X obj 377 355 loadbang;
+#X text 243 362 palette generator;
+#X obj 100 383 fps detailed;
+#X obj 264 400 #for 0 256 1;
+#X obj 19 240 #store;
+#X obj 100 402 print;
+#X msg 56 200 \$1 \$2 # 0;
+#X obj 264 379 #finished;
+#X obj 19 35 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 200 39 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 332 379 t a a;
+#X text 258 62 height width;
+#X obj 100 364 #out window;
+#X text 97 308 applying palette;
+#N canvas 127 200 450 300 circle 0;
+#X obj 47 146 #fold +;
+#X obj 47 203 # << 7;
+#X obj 47 165 # >> 6;
+#X obj 47 184 # == 10;
+#X obj 47 15 inlet size;
+#X obj 47 222 outlet matrix;
+#X obj 77 108 inlet pos;
+#X obj 47 53 t b a;
+#X obj 47 127 # sq-;
+#X obj 47 79 #for (0 0) (0 0) (1 1);
+#X obj 90 53 #export_list;
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 7 0;
+#X connect 6 0 8 1;
+#X connect 7 0 9 0;
+#X connect 7 1 10 0;
+#X connect 8 0 0 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 1;
+#X restore 222 200 pd circle generator;
+#N canvas 498 387 361 260 baseline 0;
+#X obj 18 116 #fold +;
+#X obj 127 148 - 4;
+#X obj 18 56 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 18 135 # ==;
+#X obj 127 129 listelement 0;
+#X text 93 10 line generator;
+#X obj 18 154 # << 7;
+#X obj 127 110 #export_list;
+#X obj 18 9 inlet size;
+#X obj 18 173 outlet matrix;
+#X obj 18 33 t a a;
+#X text 154 150 four pixels from bottom;
+#X obj 18 78 #for (0 0) (0 0) (1 1);
+#X obj 18 97 # & (-1 0);
+#X connect 0 0 3 0;
+#X connect 1 0 3 1;
+#X connect 2 0 12 0;
+#X connect 3 0 6 0;
+#X connect 4 0 1 0;
+#X connect 6 0 9 0;
+#X connect 7 0 4 0;
+#X connect 8 0 10 0;
+#X connect 10 0 2 0;
+#X connect 10 1 7 0;
+#X connect 10 1 12 1;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X restore 200 220 pd baseline generator;
+#X text 45 183 make blank image;
+#X text 26 223 feedback loop;
+#X obj 377 393 #color 0 800 1;
+#X msg 377 374 600 200 75;
+#X obj 220 38 loadbang;
+#N canvas 624 360 400 289 fire 0;
+#X obj 174 180 #store;
+#X obj 61 196 #export_list;
+#X obj 6 65 # >> 2;
+#X obj 6 235 # & 255;
+#X obj 6 103 # / 80;
+#X msg 174 138 \$1 1 # 256;
+#X obj 174 97 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 174 78 route grid;
+#X obj 60 155 inlet;
+#X obj 274 146 # + 32;
+#X obj 60 177 #dim;
+#X obj 6 214 # +;
+#X obj 6 258 outlet 0;
+#X msg 274 101 256 \$2 # 64;
+#X obj 6 84 # *;
+#X obj 6 7 inlet image;
+#X obj 274 79 inlet size;
+#X text 102 8 this fire algorithm;
+#X text 101 22 was designed by matju in 1994;
+#X text 264 167 makes a cache of;
+#X text 264 180 random numbers;
+#X obj 174 159 # rand;
+#X obj 274 123 # rand;
+#X obj 6 46 #convolve (3 3 # 1 0 0 0 1 0 1 1 1);
+#X obj 174 115 list;
+#X obj 6 26 t a a;
+#X obj 160 215 display;
+#X connect 0 0 14 1;
+#X connect 1 0 24 1;
+#X connect 2 0 14 0;
+#X connect 3 0 12 0;
+#X connect 4 0 11 0;
+#X connect 5 0 21 0;
+#X connect 6 0 24 0;
+#X connect 7 0 6 0;
+#X connect 8 0 11 1;
+#X connect 8 0 10 0;
+#X connect 8 0 26 0;
+#X connect 9 0 0 1;
+#X connect 10 0 1 0;
+#X connect 11 0 3 0;
+#X connect 13 0 22 0;
+#X connect 14 0 4 0;
+#X connect 15 0 25 0;
+#X connect 16 0 13 0;
+#X connect 21 0 0 0;
+#X connect 22 0 9 0;
+#X connect 23 0 2 0;
+#X connect 24 0 5 0;
+#X connect 25 0 23 0;
+#X connect 25 1 7 0;
+#X restore 65 240 pd fire generator;
+#X text 166 108 note: reset the size if you change the generator;
+#X obj 19 67 metro 33.3667;
+#X obj 5 -4 cnv 15 620 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 -4 fire.pd;
+#X obj 5 483 cnv 15 620 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 13 491 GridFlow 0.8.0;
+#X obj 139 402 route position;
+#N canvas 268 301 442 406 cursor 0;
+#X obj 107 48 listsublist 0 2;
+#X obj 107 10 inlet;
+#X obj 132 151 listsublist 0 48;
+#X obj 30 49 t a a;
+#X obj 30 284 outlet;
+#X obj 30 151 listappend 0 0;
+#X obj 107 29 #export_list;
+#X obj 30 79 # -;
+#X obj 115 86 #finished;
+#X obj 115 105 #store (0 0);
+#X obj 30 170 #redim (25 2);
+#X obj 30 189 # sq-;
+#X obj 30 208 #fold +;
+#X obj 30 227 # sqrt;
+#X obj 30 246 #fold +;
+#X obj 30 265 # / 5;
+#X obj 30 9 r metro;
+#X obj 30 131 #export_list;
+#X obj 30 29 list;
+#X connect 0 0 18 1;
+#X connect 1 0 6 0;
+#X connect 2 0 5 1;
+#X connect 3 0 7 0;
+#X connect 3 1 9 1;
+#X connect 5 0 2 0;
+#X connect 5 0 10 0;
+#X connect 6 0 0 0;
+#X connect 7 0 8 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 4 0;
+#X connect 16 0 18 0;
+#X connect 17 0 5 0;
+#X connect 18 0 3 0;
+#X restore 371 162 pd cursor motion detector;
+#X obj 139 460 s cursor;
+#X msg 20 341 hidecursor;
+#N canvas 238 140 484 503 fuzzy 0;
+#X obj 47 281 outlet;
+#X obj 47 68 #for (0 0) (0 0) (1 1);
+#X obj 47 13 inlet size;
+#X obj 47 32 t b a;
+#X obj 86 32 #export_list;
+#X obj 47 91 # sq-;
+#X obj 47 262 # - 10;
+#X obj 47 243 # max 10;
+#X obj 47 224 # min 255;
+#X obj 47 205 # + 64;
+#X obj 47 186 # tanh* 64;
+#X obj 47 167 # << 8;
+#X obj 47 148 # inv+ 2;
+#X obj 47 129 # >> 2;
+#X obj 104 125 inlet radius;
+#X obj 229 89 inlet pos;
+#X obj 47 110 #fold +;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 1 4 0;
+#X connect 4 0 1 1;
+#X connect 5 0 16 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 1;
+#X connect 15 0 5 1;
+#X connect 16 0 13 0;
+#X restore 276 181 pd fuzzy disk seed generator;
+#X text 177 440 #scale_by compensation;
+#X msg 139 421 \$1 \$2;
+#X obj 99 345 #scale_by 2;
+#X obj 139 440 # / 2;
+#X text 15 294 (height \, width \, 1) grid = grey image;
+#X text 16 260 (height \, width) grid = matrix;
+#X obj 200 123 shunt 3;
+#X obj 253 125 hradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X obj 501 203 r cursor;
+#X obj 501 223 t a;
+#X obj 58 86 spigot;
+#X obj 19 86 t b b;
+#X obj 115 86 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 1 1
+;
+#X obj 49 105 s metro;
+#X obj 67 277 #outer ignore (0);
+#X text 15 9 Copyright 2001 \, 2005 Mathieu Bouchard;
+#X msg 200 62 120 160;
+#X obj 500 247 display;
+#X obj 99 326 #store;
+#X obj 264 422 #outer gamma;
+#X obj 204 90 list;
+#X obj 115 67 loadbang;
+#X obj 71 27 f;
+#X obj 96 27 + 1;
+#X obj 71 46 sel 100;
+#X floatatom 128 48 5 0 0 0 - - -;
+#X connect 0 0 19 0;
+#X connect 2 0 5 0;
+#X connect 3 0 52 0;
+#X connect 4 0 21 0;
+#X connect 6 0 4 1;
+#X connect 7 0 3 0;
+#X connect 8 0 23 0;
+#X connect 9 0 49 0;
+#X connect 10 0 7 0;
+#X connect 10 1 52 1;
+#X connect 12 0 2 0;
+#X connect 12 0 28 0;
+#X connect 14 0 21 1;
+#X connect 15 0 21 1;
+#X connect 18 0 10 0;
+#X connect 19 0 18 0;
+#X connect 20 0 49 0;
+#X connect 21 0 4 1;
+#X connect 21 0 47 0;
+#X connect 23 0 44 0;
+#X connect 28 0 34 0;
+#X connect 29 0 32 1;
+#X connect 31 0 12 0;
+#X connect 32 0 21 1;
+#X connect 34 0 36 0;
+#X connect 35 0 12 0;
+#X connect 36 0 30 0;
+#X connect 39 0 15 0;
+#X connect 39 1 14 0;
+#X connect 39 2 32 0;
+#X connect 40 0 39 1;
+#X connect 41 0 42 0;
+#X connect 42 0 29 0;
+#X connect 42 0 14 1;
+#X connect 42 0 32 2;
+#X connect 42 0 50 0;
+#X connect 43 0 53 0;
+#X connect 44 0 4 0;
+#X connect 44 1 43 0;
+#X connect 44 1 46 0;
+#X connect 45 0 43 1;
+#X connect 47 0 51 0;
+#X connect 49 0 6 0;
+#X connect 49 0 21 2;
+#X connect 49 0 53 1;
+#X connect 51 0 35 0;
+#X connect 52 0 51 1;
+#X connect 53 0 39 0;
+#X connect 54 0 45 0;
+#X connect 55 0 56 0;
+#X connect 55 0 57 0;
+#X connect 56 0 55 1;
+#X connect 57 0 8 0;
+#X connect 57 1 58 0;
diff --git a/externals/gridflow/examples/frequency_mask.pd b/externals/gridflow/examples/frequency_mask.pd
new file mode 100644
index 00000000..c5a08b52
--- /dev/null
+++ b/externals/gridflow/examples/frequency_mask.pd
@@ -0,0 +1,160 @@
+#N canvas 608 0 612 689 10;
+#X obj 33 12 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X obj 33 432 t a a;
+#X obj 33 457 # -;
+#X obj 33 476 t a a;
+#X obj 33 501 # -;
+#X obj 33 520 t a a;
+#X obj 33 545 # -;
+#X obj 33 612 #clip;
+#X obj 33 631 #out window;
+#X obj 33 593 # + 128;
+#X obj 33 574 # << 2;
+#X obj 33 650 fps;
+#X floatatom 33 669 5 0 0 0 - - -;
+#X obj 33 212 #fft \, real;
+#X obj 33 193 #cast f;
+#X obj 33 250 #fft \, real \, sign 1;
+#X obj 33 269 #cast i;
+#X obj 33 288 # / 76800;
+#X obj 314 55 # sq-;
+#X obj 314 74 #fold +;
+#X obj 314 169 #out window;
+#X obj 314 17 #cast i;
+#X obj 314 112 #clip;
+#X obj 314 150 #remap_image;
+#X obj 402 150 # - (120 160);
+#X obj 33 29 metro 10;
+#X obj 314 93 # sqrt;
+#X obj 314 36 # / 277;
+#X text 42 398 2nd derivative effects;
+#X text 42 412 chosen because they emphasise noise;
+#X obj 33 357 shunt;
+#X obj 79 544 #convolve (3 3 # 0 1 0 1 -4 1);
+#X obj 72 358 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 314 131 #gamma 768;
+#X obj 63 86 #greyscale_to_rgb;
+#X obj 33 48 #camera 0 \, size 240 320;
+#X obj 314 188 #mouse \, \, \, \,;
+#X obj 439 230 sel 1;
+#X obj 478 230 sel 1;
+#X msg 478 249 0;
+#X msg 439 249 1;
+#X obj 346 307 pack 0 0 0;
+#X obj 33 231 # * (2 f # 1 0);
+#X obj 65 333 #out window;
+#X obj 33 307 #clip;
+#X obj 304 473 #inner (1 0);
+#X obj 304 492 # * 255;
+#X obj 304 454 #cast i;
+#X obj 314 211 t b a;
+#X obj 249 230 gf.oneshot;
+#X obj 33 67 shunt;
+#X obj 72 68 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0 1
+;
+#X obj 456 304 display;
+#X obj 33 112 t a b;
+#X obj 304 530 #out window \, title mask;
+#X msg 346 326 put_at ( \$1 \$2 0 0 ) \, 1 1 3 2 f # \$3 \$3;
+#X obj 239 302 #unpack;
+#X obj 239 264 # * -1;
+#X obj 239 283 # % (240 320);
+#X obj 308 372 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 325 370 loadbang;
+#X obj 239 321 pack 0 0 0;
+#X obj 304 435 #store (240 320 3 2 f # 1);
+#X obj 439 273 t a;
+#X msg 339 408 reassign \, 240 320 3 2 f # 1;
+#X obj 309 389 t b b;
+#X obj 344 230 # + (120 160);
+#X obj 344 258 #unpack;
+#X obj 304 511 #remap_image;
+#X obj 392 511 # - (120 160);
+#X connect 0 0 25 0;
+#X connect 1 0 2 1;
+#X connect 1 1 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 3 1 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 5 1 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 8 0 11 0;
+#X connect 9 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 13 0 21 0;
+#X connect 13 0 42 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 19 0 26 0;
+#X connect 20 0 36 0;
+#X connect 21 0 27 0;
+#X connect 22 0 33 0;
+#X connect 23 0 20 0;
+#X connect 23 1 24 0;
+#X connect 24 0 23 1;
+#X connect 25 0 35 0;
+#X connect 26 0 22 0;
+#X connect 27 0 18 0;
+#X connect 30 0 1 0;
+#X connect 30 1 31 0;
+#X connect 31 0 10 0;
+#X connect 32 0 30 1;
+#X connect 33 0 23 0;
+#X connect 34 0 53 0;
+#X connect 35 0 50 0;
+#X connect 36 0 48 0;
+#X connect 36 1 48 0;
+#X connect 36 4 37 0;
+#X connect 36 6 38 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 63 0;
+#X connect 40 0 63 0;
+#X connect 41 0 55 0;
+#X connect 41 0 52 0;
+#X connect 42 0 15 0;
+#X connect 44 0 43 0;
+#X connect 44 0 30 0;
+#X connect 45 0 46 0;
+#X connect 46 0 68 0;
+#X connect 47 0 45 0;
+#X connect 48 0 49 1;
+#X connect 48 1 66 0;
+#X connect 49 0 62 0;
+#X connect 50 0 53 0;
+#X connect 50 1 34 0;
+#X connect 51 0 50 1;
+#X connect 53 0 14 0;
+#X connect 53 1 49 0;
+#X connect 55 0 62 1;
+#X connect 56 0 61 0;
+#X connect 56 1 61 1;
+#X connect 57 0 58 0;
+#X connect 58 0 56 0;
+#X connect 59 0 65 0;
+#X connect 60 0 65 0;
+#X connect 61 0 55 0;
+#X connect 62 0 42 1;
+#X connect 62 0 47 0;
+#X connect 63 0 61 2;
+#X connect 63 0 41 2;
+#X connect 64 0 62 1;
+#X connect 65 0 62 0;
+#X connect 65 1 64 0;
+#X connect 66 0 57 0;
+#X connect 66 0 67 0;
+#X connect 67 0 41 0;
+#X connect 67 1 41 1;
+#X connect 68 0 54 0;
+#X connect 68 1 69 0;
+#X connect 69 0 68 1;
diff --git a/externals/gridflow/examples/game_of_life.pd b/externals/gridflow/examples/game_of_life.pd
new file mode 100644
index 00000000..425ee065
--- /dev/null
+++ b/externals/gridflow/examples/game_of_life.pd
@@ -0,0 +1,65 @@
+#N canvas 429 0 654 368 10;
+#X obj 36 46 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 31 237 #out window;
+#X text 48 122 this is the feedback loop;
+#X obj 143 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 262 87 loadbang;
+#X obj 141 103 #store;
+#X obj 161 68 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 31 275 print;
+#X obj 31 256 fps detailed;
+#X obj 31 143 t a a;
+#X text 179 68 next;
+#N canvas 0 0 450 210 game 0;
+#X obj 28 64 inlet matrix;
+#X obj 28 141 outlet matrix;
+#X text 18 14 this part at the left defines the rule of the game (this
+is my own rewriting of the rules. it is equivalent to the original
+but faster to compute.);
+#X obj 28 83 # << (b # 1);
+#X obj 28 122 # < (b # 3);
+#X obj 28 103 #convolve (3 3 b # 0 0 0 0 1) \, op >> \, seed (b # 251)
+;
+#X connect 0 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X restore 31 102 pd game of life;
+#X text 260 60 init with a random map;
+#X text 261 72 10% white dots;
+#X text 33 169 convert this 1-bit matrix to standard RGB \; 1 becomes
+-1 becomes 255 \, but 0 stays 0;
+#X obj 53 45 metro 5;
+#X obj 5 329 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 13 336 GridFlow 0.8.0;
+#X text 13 336 GridFlow 0.8.0;
+#X obj 7 5 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 20 5 game_of_life.pd;
+#X text 20 18 Copyright 2001 Mathieu Bouchard;
+#X obj 262 125 # rand (b #);
+#X obj 262 144 # == (b # 0);
+#X msg 262 106 240 320 b # 10;
+#X obj 31 199 # inv+ (b # 0);
+#X obj 31 218 #outer ignore (3 b #);
+#X obj 161 49 for 0 100 1;
+#X connect 0 0 15 0;
+#X connect 1 0 8 0;
+#X connect 3 0 27 0;
+#X connect 4 0 24 0;
+#X connect 5 0 11 0;
+#X connect 6 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 25 0;
+#X connect 9 1 5 1;
+#X connect 11 0 9 0;
+#X connect 15 0 5 0;
+#X connect 22 0 23 0;
+#X connect 23 0 9 0;
+#X connect 24 0 22 0;
+#X connect 25 0 26 0;
+#X connect 26 0 1 0;
+#X connect 27 0 6 0;
diff --git a/externals/gridflow/examples/game_of_life_gem.pd b/externals/gridflow/examples/game_of_life_gem.pd
new file mode 100644
index 00000000..5032ca9e
--- /dev/null
+++ b/externals/gridflow/examples/game_of_life_gem.pd
@@ -0,0 +1,291 @@
+#N canvas 608 0 588 612 10;
+#X obj 368 33 loadbang;
+#X obj 23 48 gemhead;
+#N canvas 610 247 578 360 GOL 0;
+#X text 48 122 this is the feedback loop;
+#X obj 143 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 161 49 for 0 10 1;
+#X obj 262 87 loadbang;
+#X obj 141 103 #store;
+#X obj 161 68 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 31 143 fork;
+#X text 179 68 next;
+#N canvas 0 0 450 210 game 0;
+#X obj 28 64 inlet matrix;
+#X obj 28 141 outlet matrix;
+#X text 18 14 this part at the left defines the rule of the game (this
+is my own rewriting of the rules. it is equivalent to the original
+but faster to compute.);
+#X obj 28 83 # << (b # 1);
+#X obj 28 122 # < (b # 3);
+#X obj 28 103 #convolve (3 3 b # 0 0 0 0 1) \, op >> \, seed (b # 251)
+;
+#X connect 0 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X restore 31 102 pd game of life;
+#X text 260 60 init with a random map;
+#X obj 5 329 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 13 336 GridFlow 0.8.0;
+#X text 13 336 GridFlow 0.8.0;
+#X obj 7 5 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 20 5 game_of_life.pd;
+#X text 20 18 Copyright 2001 Mathieu Bouchard;
+#X obj 262 165 # rand (b #);
+#X obj 262 184 # == (b # 0);
+#X obj 24 41 inlet metro;
+#X obj 22 69 route bang reset;
+#X obj 31 295 outlet RGB;
+#X obj 31 181 #cast i;
+#X obj 31 238 #clip;
+#X obj 41 257 #apply_colormap_channelwise;
+#X obj 207 239 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 31 200 # << 10;
+#X obj 234 238 #for 0 256 1;
+#X obj 234 257 #outer gamma (3 # 333 555 999);
+#X text 261 72 20% white dots;
+#X obj 31 162 #outer ignore (4 b #);
+#X obj 279 117 t b b;
+#X obj 31 276 #scale_by;
+#X msg 261 146 128 128 b # 5;
+#X obj 31 219 #fade (16 4 1 1);
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 0 30 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 29 0;
+#X connect 6 1 4 1;
+#X connect 8 0 6 0;
+#X connect 16 0 17 0;
+#X connect 17 0 6 0;
+#X connect 18 0 19 0;
+#X connect 19 0 4 0;
+#X connect 19 1 32 0;
+#X connect 21 0 25 0;
+#X connect 22 0 31 0;
+#X connect 24 0 26 0;
+#X connect 25 0 33 0;
+#X connect 26 0 27 0;
+#X connect 27 0 23 1;
+#X connect 29 0 21 0;
+#X connect 30 0 32 0;
+#X connect 30 1 26 0;
+#X connect 31 0 20 0;
+#X connect 32 0 16 0;
+#X connect 33 0 22 0;
+#X restore 144 363 pd GOL;
+#X obj 127 278 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X msg 154 336 reset;
+#X obj 23 429 rotateXYZ;
+#X obj 32 406 #unpack 3;
+#X obj 32 349 # +;
+#X obj 57 349 t a;
+#X obj 32 368 #cast f;
+#X obj 32 387 # / (f # 100);
+#X floatatom 108 67 5 0 0 0 - - -;
+#X obj 76 48 bang;
+#X obj 108 48 fps \, period 5;
+#X obj 23 215 pix_texture;
+#X obj 285 516 #out window;
+#X obj 285 63 gemhead 74;
+#X obj 53 158 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X msg 53 172 yflip \$1;
+#X obj 285 312 t a b;
+#X obj 360 133 vsl 15 128 0 512 0 0 empty empty empty 0 -8 0 8 -241291
+-1 -1 3175 1;
+#X obj 375 133 vsl 15 128 0 512 0 0 empty empty empty 0 -8 0 8 -241291
+-1 -1 3175 1;
+#X obj 414 133 vsl 15 128 0 512 0 0 empty empty empty 0 -8 0 8 -241291
+-1 -1 6350 1;
+#X obj 429 133 vsl 15 128 0 512 0 0 empty empty empty 0 -8 0 8 -241291
+-1 -1 6350 1;
+#X msg 324 312 snap;
+#X obj 360 110 #unpack;
+#X obj 413 110 #unpack;
+#X obj 285 364 pix_snap;
+#X obj 350 267 #pack;
+#X obj 404 267 #pack;
+#X obj 300 404 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 300 418 yflip \$1;
+#X msg 360 90 128 128;
+#X msg 413 91 256 256;
+#X obj 23 528 cube 4;
+#X obj 179 298 + 1;
+#X obj 154 317 sel 0;
+#X obj 154 298 f;
+#X msg 307 437 help;
+#X obj 407 289 #to_list;
+#X obj 347 289 #to_list;
+#X obj 23 196 #to_pix;
+#X obj 4 1 cnv 15 500 18 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 5 1 [#to_pix];
+#X text 401 2 GridFlow 0.9.3;
+#X obj 62 106 separator;
+#X obj 23 106 t a a;
+#X msg 368 52 create \, 1 \, lighting 1;
+#X msg 32 330 60 42 30;
+#X obj 144 277 metro 33.3667;
+#X floatatom 204 317 5 0 0 0 - - -;
+#N canvas 0 0 450 300 lighting 0;
+#X obj 22 28 inlet gem;
+#X obj 152 210 light;
+#X obj 282 210 light;
+#X obj 22 47 t a a a;
+#X obj 66 66 separator;
+#X obj 44 85 separator;
+#X obj 22 210 light;
+#X obj 133 251 loadbang;
+#X obj 22 191 translateXYZ 0 4 4;
+#X obj 152 191 translateXYZ 4 0 4;
+#X obj 282 191 translateXYZ 4 4 0;
+#X msg 61 210 1 0 0;
+#X msg 191 210 0 1 0;
+#X msg 321 210 0 0 1;
+#X connect 0 0 3 0;
+#X connect 3 0 8 0;
+#X connect 3 1 5 0;
+#X connect 3 2 4 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 7 0 11 0;
+#X connect 7 0 12 0;
+#X connect 7 0 13 0;
+#X connect 8 0 6 0;
+#X connect 9 0 1 0;
+#X connect 10 0 2 0;
+#X connect 11 0 6 1;
+#X connect 12 0 1 1;
+#X connect 13 0 2 1;
+#X restore 62 125 pd lighting;
+#X obj 23 509 color 1 1 1;
+#X obj 144 382 # inv+ 255;
+#X obj 368 71 gemwin 29.97;
+#X obj 23 457 shunt;
+#X obj 62 458 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 1 1
+;
+#N canvas 0 0 450 300 eight_cubes 0;
+#X obj 33 29 inlet gem;
+#X obj 33 48 t a a;
+#X obj 163 48 separator;
+#X obj 33 86 t a;
+#X obj 33 105 t a a;
+#X obj 163 105 separator;
+#X obj 33 143 t a;
+#X obj 33 162 t a a;
+#X obj 163 162 separator;
+#X obj 33 200 t a;
+#X obj 33 219 cube 2;
+#X obj 33 67 translateXYZ 4 0 0;
+#X obj 33 124 translateXYZ 0 4 0;
+#X obj 33 181 translateXYZ 0 0 4;
+#X obj 163 181 translateXYZ 0 0 -4;
+#X obj 163 124 translateXYZ 0 -4 0;
+#X obj 163 67 translateXYZ -4 0 0;
+#X connect 0 0 1 0;
+#X connect 1 0 11 0;
+#X connect 1 1 2 0;
+#X connect 2 0 16 0;
+#X connect 3 0 4 0;
+#X connect 4 0 12 0;
+#X connect 4 1 5 0;
+#X connect 5 0 15 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 7 1 8 0;
+#X connect 8 0 14 0;
+#X connect 9 0 10 0;
+#X connect 11 0 3 0;
+#X connect 12 0 6 0;
+#X connect 13 0 9 0;
+#X connect 14 0 9 0;
+#X connect 15 0 6 0;
+#X connect 16 0 3 0;
+#X restore 53 476 pd eight_cubes;
+#X obj 285 482 #remap_image;
+#X obj 204 298 % 256;
+#X obj 390 463 % 32;
+#X obj 23 239 translateXYZ 0 0 -7;
+#X obj 285 457 #import_pix;
+#X obj 374 482 # ^;
+#X connect 0 0 47 0;
+#X connect 0 0 32 0;
+#X connect 0 0 33 0;
+#X connect 1 0 12 0;
+#X connect 1 0 46 0;
+#X connect 2 0 53 0;
+#X connect 3 0 49 0;
+#X connect 4 0 2 0;
+#X connect 5 0 55 0;
+#X connect 6 0 5 1;
+#X connect 6 1 5 2;
+#X connect 6 2 5 3;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 1;
+#X connect 9 0 10 0;
+#X connect 10 0 6 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 14 0 61 0;
+#X connect 16 0 19 0;
+#X connect 17 0 18 0;
+#X connect 18 0 41 0;
+#X connect 19 0 27 0;
+#X connect 19 1 24 0;
+#X connect 20 0 28 0;
+#X connect 21 0 28 1;
+#X connect 22 0 29 0;
+#X connect 23 0 29 1;
+#X connect 24 0 27 0;
+#X connect 25 0 20 0;
+#X connect 25 1 21 0;
+#X connect 26 0 22 0;
+#X connect 26 1 23 0;
+#X connect 27 0 62 0;
+#X connect 28 0 40 0;
+#X connect 29 0 39 0;
+#X connect 30 0 31 0;
+#X connect 31 0 62 0;
+#X connect 32 0 25 0;
+#X connect 33 0 26 0;
+#X connect 35 0 59 0;
+#X connect 36 0 4 0;
+#X connect 37 0 35 0;
+#X connect 37 0 36 0;
+#X connect 38 0 62 0;
+#X connect 39 0 27 2;
+#X connect 40 0 27 1;
+#X connect 41 0 14 0;
+#X connect 45 0 51 0;
+#X connect 46 0 41 0;
+#X connect 46 1 45 0;
+#X connect 47 0 54 0;
+#X connect 48 0 7 0;
+#X connect 49 0 2 0;
+#X connect 49 0 37 0;
+#X connect 49 0 48 0;
+#X connect 52 0 34 0;
+#X connect 53 0 41 1;
+#X connect 55 0 52 0;
+#X connect 55 1 57 0;
+#X connect 56 0 55 1;
+#X connect 58 0 15 0;
+#X connect 58 1 63 0;
+#X connect 59 0 37 1;
+#X connect 59 0 50 0;
+#X connect 59 0 60 0;
+#X connect 60 0 63 1;
+#X connect 61 0 5 0;
+#X connect 62 0 58 0;
+#X connect 63 0 58 1;
diff --git a/externals/gridflow/examples/goop.pd b/externals/gridflow/examples/goop.pd
new file mode 100644
index 00000000..8f96d2c4
--- /dev/null
+++ b/externals/gridflow/examples/goop.pd
@@ -0,0 +1,138 @@
+#N canvas 481 120 730 701 10;
+#X obj 91 -43 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 91 8 #camera;
+#X obj 38 113 t a a;
+#X msg 96 114 240 320 3 #;
+#X obj 95 92 loadbang;
+#N canvas 286 95 450 300 analysis 0;
+#X obj 46 17 inlet;
+#X obj 49 236 outlet;
+#X obj 64 67 spigot;
+#X obj 46 44 t a a;
+#X obj 114 68 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 114 15 inlet;
+#X obj 49 86 # -;
+#X obj 49 129 # - 30;
+#X obj 49 154 # max 0;
+#X obj 49 182 # * 20;
+#X obj 49 211 # min 256;
+#X obj 49 108 @! abs;
+#X connect 0 0 3 0;
+#X connect 2 0 6 1;
+#X connect 3 0 2 0;
+#X connect 3 1 6 0;
+#X connect 4 0 2 1;
+#X connect 5 0 4 0;
+#X connect 6 0 11 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 11 0 7 0;
+#X restore 192 94 pd analysis;
+#X obj 275 94 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 123 433 r cam;
+#X obj 113 67 s cam;
+#X obj 91 33 t a a b;
+#X obj 340 65 loadbang;
+#X msg 307 66 1;
+#X obj 417 85 loadbang;
+#X msg 306 88 0;
+#X obj 150 484 loadbang;
+#X msg 150 504 set_geometry 0 0 480 640 \, hidecursor;
+#X obj 338 89 delay 5000;
+#X obj 91 -17 metro 33.3667;
+#X obj -15 -84 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -17 582 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -6 592 GridFlow 0.8.0;
+#X text 157 9 <-- open this and set your camera up;
+#X obj 38 92 #store;
+#X obj 71 143 # put 63;
+#X obj 71 164 # rand;
+#X obj 38 184 # +;
+#X obj 161 144 # *>>8;
+#X obj 192 121 # inv+ 256;
+#X obj 38 211 #convolve (1 5 # 1);
+#X obj 39 233 #convolve (5 1 # 1);
+#X obj 39 306 # max -128;
+#X obj 39 325 # min 127;
+#X obj 39 344 # + 128;
+#X obj 39 365 #inner (3 3 # 3 0 1 1 3 0 0 1 3);
+#X obj 39 387 # >> 2;
+#X obj 113 383 # inv+ 255;
+#X obj 39 407 # *>>8;
+#X obj 39 431 # +;
+#X obj 70 431 # *>>8;
+#X obj 39 457 #clip;
+#X obj 337 209 #rgb_to_greyscale;
+#X obj 337 235 # +;
+#X obj 337 256 #convolve (1 3 # 1);
+#X obj 337 278 #convolve (3 1 # 1);
+#X obj 337 324 # min 255;
+#X obj 337 345 #greyscale_to_rgb;
+#X obj 116 547 #out window;
+#X text 1 -85 goop.pd;
+#X obj 39 478 #scale_by 2;
+#X obj 71 185 # - 31;
+#X obj 337 301 # *>>8 27;
+#X obj 39 287 # *>>8 25;
+#X text 1 -71 Copyright 2004 Mathieu Bouchard;
+#X obj 39 261 # + 5;
+#X connect 0 0 17 0;
+#X connect 1 0 9 0;
+#X connect 2 0 25 0;
+#X connect 2 1 23 0;
+#X connect 3 0 22 1;
+#X connect 4 0 3 0;
+#X connect 5 0 27 0;
+#X connect 5 0 40 0;
+#X connect 6 0 5 1;
+#X connect 7 0 38 0;
+#X connect 9 0 5 0;
+#X connect 9 1 8 0;
+#X connect 9 2 22 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 16 0;
+#X connect 13 0 6 0;
+#X connect 14 0 15 0;
+#X connect 15 0 46 0;
+#X connect 16 0 13 0;
+#X connect 17 0 1 0;
+#X connect 22 0 2 0;
+#X connect 23 0 24 0;
+#X connect 24 0 49 0;
+#X connect 25 0 28 0;
+#X connect 26 0 22 1;
+#X connect 27 0 26 1;
+#X connect 28 0 29 0;
+#X connect 29 0 53 0;
+#X connect 30 0 31 0;
+#X connect 31 0 26 0;
+#X connect 31 0 32 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 0;
+#X connect 34 0 36 0;
+#X connect 35 0 36 1;
+#X connect 36 0 37 0;
+#X connect 37 0 39 0;
+#X connect 38 0 37 1;
+#X connect 39 0 48 0;
+#X connect 40 0 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 43 0 50 0;
+#X connect 44 0 41 1;
+#X connect 44 0 45 0;
+#X connect 45 0 35 0;
+#X connect 45 0 38 1;
+#X connect 48 0 46 0;
+#X connect 49 0 25 1;
+#X connect 50 0 44 0;
+#X connect 51 0 30 0;
+#X connect 53 0 51 0;
diff --git a/externals/gridflow/examples/heat.pd b/externals/gridflow/examples/heat.pd
new file mode 100644
index 00000000..743fc4e6
--- /dev/null
+++ b/externals/gridflow/examples/heat.pd
@@ -0,0 +1,173 @@
+#N canvas 59 155 741 486 10;
+#X obj 228 23 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 199 246 450 453 heat 1;
+#X obj 129 23 inlet mask;
+#X obj 22 42 t a a;
+#X obj 22 224 # +;
+#X obj 22 23 inlet heatmap;
+#X obj 24 394 outlet heatmap;
+#X obj 241 154 #greyscale_to_rgb;
+#X obj 241 175 #out window;
+#X obj 22 80 #store;
+#X obj 22 61 #finished;
+#X obj 52 167 # + 128;
+#X obj 52 186 # >> 8;
+#X obj 52 134 # *;
+#X obj 52 103 #convolve (3 3 # 0 1 0 1 -4 1);
+#X obj 52 205 # + 2;
+#X obj 52 225 # >> 4;
+#X connect 0 0 11 1;
+#X connect 1 0 8 0;
+#X connect 1 1 7 1;
+#X connect 1 1 12 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 5 0 6 0;
+#X connect 7 0 2 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 13 0;
+#X connect 11 0 9 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 2 1;
+#X restore 27 81 pd heat;
+#X obj 27 61 #store;
+#X obj 94 42 loadbang;
+#X obj 27 16 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 27 363 #out window;
+#X obj 227 157 #greyscale_to_rgb;
+#X obj 227 138 # >> 2;
+#X obj 48 23 s metro;
+#X obj 27 382 #mouse \, ...;
+#X obj 120 382 # >> 1;
+#X obj 27 344 #scale_by 2;
+#X msg 94 61 240 320 1 # 0;
+#N canvas 205 52 520 286 finger 0;
+#X obj 28 62 shunt 2;
+#X msg 289 71 4 2 # 0 0 0 1 1 1 1 0;
+#X obj 289 90 # * 8;
+#X obj 289 109 # - 4;
+#X obj 289 128 # +;
+#X obj 28 23 inlet;
+#X obj 28 142 outlet;
+#X obj 289 14 inlet position;
+#X obj 72 23 inlet button;
+#X obj 289 33 #export_list;
+#X obj 289 52 t b a;
+#X obj 72 81 #draw_polygon + (4000);
+#X connect 0 0 6 0;
+#X connect 0 1 11 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 11 2;
+#X connect 5 0 0 0;
+#X connect 7 0 9 0;
+#X connect 8 0 0 1;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X connect 10 1 4 1;
+#X connect 11 0 6 0;
+#X restore 27 163 pd finger;
+#X obj 15 436 fps detailed;
+#X obj 16 456 display;
+#X obj 27 119 shunt 2;
+#X obj 90 104 f;
+#X obj 115 104 + 1;
+#X obj 27 100 t a b;
+#X obj 140 123 ==;
+#X obj 140 104 % 4;
+#N canvas 340 133 341 379 render 0;
+#X obj 12 285 # +;
+#X obj 26 23 inlet heatmap;
+#X obj 12 323 outlet rgb;
+#X obj 123 23 inlet mask;
+#X obj 26 53 t a a;
+#X obj 26 80 #inner (1 3 # 2 4 6) \, op >>;
+#X obj 82 161 t a a;
+#X obj 88 189 # -;
+#X obj 88 227 # + 128;
+#X obj 12 304 #clip;
+#X obj 88 208 # << 6;
+#X obj 26 108 shunt 2;
+#X obj 79 109 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X connect 0 0 9 0;
+#X connect 1 0 4 0;
+#X connect 3 0 0 1;
+#X connect 4 0 5 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 1;
+#X connect 6 1 7 0;
+#X connect 7 0 10 0;
+#X connect 8 0 0 0;
+#X connect 9 0 2 0;
+#X connect 10 0 8 0;
+#X connect 11 0 0 0;
+#X connect 11 1 6 0;
+#X connect 12 0 11 1;
+#X restore 28 271 pd render;
+#X obj 295 232 #fold +;
+#X obj 295 251 #fold +;
+#X obj 295 289 #fold +;
+#X obj 245 23 loadbang;
+#X obj 227 100 # max;
+#X obj 227 81 # << 1;
+#X obj 227 119 # min 256;
+#X obj 227 62 # - 40;
+#X obj 295 270 # / 320;
+#X obj 295 308 # / 240;
+#X obj 295 327 #export;
+#X floatatom 294 356 5 0 0 0 - - -;
+#X obj 27 42 metro 12;
+#X text 542 3 heat propagation simulation;
+#X text 396 43 use a greyscale image here;
+#X text 493 17 Copyright 2005 by Mathieu Bouchard;
+#X obj 227 43 #in ../images/pmask.png;
+#X text 396 57 as a heat conduction map;
+#X connect 0 0 39 0;
+#X connect 1 0 19 0;
+#X connect 2 0 1 0;
+#X connect 3 0 12 0;
+#X connect 4 0 35 0;
+#X connect 5 0 9 0;
+#X connect 5 0 14 0;
+#X connect 6 0 22 1;
+#X connect 7 0 6 0;
+#X connect 9 0 10 0;
+#X connect 9 1 10 0;
+#X connect 9 4 13 1;
+#X connect 10 0 13 2;
+#X connect 11 0 5 0;
+#X connect 12 0 2 1;
+#X connect 13 0 2 1;
+#X connect 13 0 22 0;
+#X connect 14 0 15 0;
+#X connect 16 0 2 1;
+#X connect 16 1 13 0;
+#X connect 17 0 18 0;
+#X connect 18 0 21 0;
+#X connect 19 0 16 0;
+#X connect 19 1 17 0;
+#X connect 20 0 16 1;
+#X connect 21 0 17 1;
+#X connect 21 0 20 0;
+#X connect 22 0 11 0;
+#X connect 23 0 24 0;
+#X connect 24 0 31 0;
+#X connect 25 0 32 0;
+#X connect 26 0 39 0;
+#X connect 27 0 29 0;
+#X connect 28 0 27 0;
+#X connect 29 0 1 1;
+#X connect 29 0 7 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 0;
+#X connect 35 0 2 0;
+#X connect 35 0 8 0;
+#X connect 39 0 30 0;
diff --git a/externals/gridflow/examples/hello-world.pd b/externals/gridflow/examples/hello-world.pd
new file mode 100644
index 00000000..6b8306a3
--- /dev/null
+++ b/externals/gridflow/examples/hello-world.pd
@@ -0,0 +1,39 @@
+#N canvas 580 223 489 466 10;
+#X obj 21 68 # / 320;
+#X obj 21 188 # * 255;
+#X obj 21 154 # != 0;
+#X obj 21 -11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 21 100 # inv+ 7;
+#X obj 21 16 #for 0 320 1;
+#X obj 21 49 # * 7;
+#X obj 21 -33 loadbang;
+#X text 41 -11 make one line:;
+#X text 29 32 numbers 0 to 319;
+#X text 30 85 numbers 0 to 6 repeated 45 or 46 times;
+#X text 31 117 numbers 7 down to 1 ...;
+#X text 28 173 3*1-bit rgb image line;
+#X text 28 206 3*8-bit rgb image line;
+#X text 150 224 repeat line 240 times;
+#X obj 2 -84 cnv 15 500 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 -85 hello-world.pd;
+#X obj 21 135 #outer & (2 4 1);
+#X obj 21 223 #redim (240 320 3);
+#X obj 1 348 cnv 15 500 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 8 354 GridFlow 0.8.0;
+#X text 8 354 GridFlow 0.8.0;
+#X text 15 -71 Copyright 2001 Mathieu Bouchard;
+#X obj 21 281 #out window;
+#X text 64 321 this is also covered by a new class named [#hello];
+#X connect 0 0 4 0;
+#X connect 1 0 18 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 17 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 7 0 3 0;
+#X connect 17 0 2 0;
+#X connect 18 0 23 0;
diff --git a/externals/gridflow/examples/image_stats.pd b/externals/gridflow/examples/image_stats.pd
new file mode 100644
index 00000000..b53220fd
--- /dev/null
+++ b/externals/gridflow/examples/image_stats.pd
@@ -0,0 +1,62 @@
+#N canvas 308 151 716 426 10;
+#X obj 214 261 print total_value;
+#X obj 473 191 #dim;
+#X obj 42 220 #export_list;
+#X obj 278 231 print number_of_values;
+#X obj 473 229 print number_of_dimensions;
+#X obj 473 210 #export;
+#X obj 205 181 #fold +;
+#X obj 205 301 /;
+#X obj 205 219 #fold +;
+#X obj 42 239 print total_pixel;
+#X obj 205 147 t a a;
+#X obj 265 118 #in;
+#X obj 420 166 print dimensions;
+#X obj 205 320 print average_value;
+#X obj 205 238 #export;
+#X obj 205 200 #fold +;
+#X obj 420 147 #export_list;
+#X obj 420 128 #dim;
+#X obj 278 174 #dim;
+#X obj 278 212 #export;
+#X msg 291 55 open bluemarble.jpg \, bang;
+#X msg 291 75 open teapot.png \, bang;
+#X msg 291 95 open r001.jpg \, bang;
+#X obj 5 394 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 13 401 GridFlow 0.8.0;
+#X text 13 401 GridFlow 0.8.0;
+#X obj 7 5 cnv 15 720 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 18 Copyright 2001 Mathieu Bouchard;
+#X text 15 4 image_stats.pd;
+#X obj 42 201 #fold + \, seed (3 #);
+#X obj 42 182 #fold + \, seed (3 #);
+#X text 480 54 <-- click on one of these;
+#X obj 278 193 #fold *;
+#X connect 1 0 5 0;
+#X connect 2 0 9 0;
+#X connect 5 0 4 0;
+#X connect 6 0 15 0;
+#X connect 7 0 13 0;
+#X connect 8 0 14 0;
+#X connect 10 0 6 0;
+#X connect 10 0 30 0;
+#X connect 10 1 18 0;
+#X connect 11 0 10 0;
+#X connect 11 0 17 0;
+#X connect 14 0 0 0;
+#X connect 14 0 7 0;
+#X connect 15 0 8 0;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
+#X connect 17 0 1 0;
+#X connect 18 0 32 0;
+#X connect 19 0 3 0;
+#X connect 19 0 7 1;
+#X connect 20 0 11 0;
+#X connect 21 0 11 0;
+#X connect 22 0 11 0;
+#X connect 29 0 2 0;
+#X connect 30 0 29 0;
+#X connect 32 0 19 0;
diff --git a/externals/gridflow/examples/instant_blur.pd b/externals/gridflow/examples/instant_blur.pd
new file mode 100644
index 00000000..15195879
--- /dev/null
+++ b/externals/gridflow/examples/instant_blur.pd
@@ -0,0 +1,142 @@
+#N canvas 477 0 743 530 10;
+#X obj 13 204 #cast f;
+#X obj 13 280 #cast i;
+#X obj 50 59 #in teapot.png;
+#X obj 193 46 loadbang;
+#X obj 13 223 #fft;
+#X obj 13 356 #out window;
+#X obj 293 270 #fft;
+#X obj 293 289 # / (f # 256);
+#X text 244 331 B->RGB;
+#X obj 348 23 #for (-128 -128) (128 128) (1 1);
+#X obj 175 65 t b b;
+#X obj 175 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 50 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 293 213 #t;
+#X obj 318 232 #fold +;
+#X obj 318 213 #ravel;
+#X obj 13 337 #gamma 512;
+#X obj 13 375 fps;
+#X floatatom 13 394 5 0 0 0 - - -;
+#X obj 175 26 metro 33.3667;
+#X obj 175 9 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 348 61 # sq- 128;
+#X obj 234 443 #out window;
+#X obj 234 367 #cast i;
+#X obj 348 80 #fold +;
+#X obj 348 99 #cast f;
+#X obj 13 78 #store;
+#X obj 234 348 # * (f # 255);
+#X obj 13 137 #remap_image;
+#X obj 111 118 # - 128;
+#X obj 111 156 # + 128;
+#X floatatom 164 139 5 0 0 0 - - -;
+#X obj 111 137 # *>>8;
+#X obj 13 261 #fft \, sign 1;
+#X obj 385 224 #import () f;
+#X obj 13 242 # C.*;
+#X obj 293 232 # /;
+#X obj 385 125 loadbang;
+#X obj 13 318 #inner (2 # 1 0);
+#X obj 293 251 #outer * (3 2 f # 1 0);
+#X obj 13 185 #outer & (-1 0);
+#X obj 67 39 loadbang;
+#X obj 385 167 f;
+#X obj 293 115 t b b;
+#X obj 234 405 #remap_image;
+#X obj 330 405 # + 128;
+#X msg 164 120 256;
+#X obj 164 101 loadbang;
+#X obj 435 167 mod 150;
+#X obj 410 167 - 1;
+#X obj 385 186 - 75;
+#X obj 293 194 # <=;
+#X obj 234 424 #outer ignore (3 #);
+#X obj 385 205 expr pow($f1 \, 4)/666;
+#X obj 348 42 # & 255;
+#X obj 293 134 #store;
+#X obj 348 4 loadbang;
+#X obj 331 23 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 385 144 75;
+#X obj 13 299 # >> 8;
+#X obj 463 391 # **;
+#X obj 463 353 t a a;
+#X obj 463 372 # put (f # 0.99);
+#X obj 570 334 # inv* (f # 1);
+#X floatatom 570 299 5 0 0 0 - - -;
+#X obj 570 315 #import () f;
+#X obj 570 353 # inv+ (f # 1);
+#X connect 0 0 4 0;
+#X connect 1 0 59 0;
+#X connect 2 0 26 1;
+#X connect 3 0 11 0;
+#X connect 4 0 35 0;
+#X connect 5 0 17 0;
+#X connect 6 0 7 0;
+#X connect 7 0 35 1;
+#X connect 9 0 54 0;
+#X connect 10 0 26 0;
+#X connect 10 1 43 0;
+#X connect 11 0 10 0;
+#X connect 12 0 2 0;
+#X connect 13 0 36 0;
+#X connect 13 0 27 0;
+#X connect 13 1 15 0;
+#X connect 14 0 36 1;
+#X connect 15 0 14 0;
+#X connect 16 0 5 0;
+#X connect 17 0 18 0;
+#X connect 19 0 11 0;
+#X connect 20 0 19 0;
+#X connect 21 0 24 0;
+#X connect 23 0 44 0;
+#X connect 24 0 25 0;
+#X connect 25 0 55 1;
+#X connect 26 0 28 0;
+#X connect 27 0 23 0;
+#X connect 28 0 40 0;
+#X connect 28 1 29 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 1;
+#X connect 31 0 32 1;
+#X connect 32 0 30 0;
+#X connect 33 0 1 0;
+#X connect 34 0 51 1;
+#X connect 35 0 33 0;
+#X connect 36 0 39 0;
+#X connect 37 0 58 0;
+#X connect 38 0 16 0;
+#X connect 39 0 6 0;
+#X connect 40 0 0 0;
+#X connect 41 0 2 0;
+#X connect 42 0 49 0;
+#X connect 42 0 50 0;
+#X connect 43 0 55 0;
+#X connect 43 1 42 0;
+#X connect 44 0 52 0;
+#X connect 44 1 45 0;
+#X connect 45 0 44 1;
+#X connect 46 0 31 0;
+#X connect 47 0 46 0;
+#X connect 48 0 42 1;
+#X connect 49 0 48 0;
+#X connect 50 0 53 0;
+#X connect 51 0 13 0;
+#X connect 52 0 22 0;
+#X connect 53 0 34 0;
+#X connect 54 0 21 0;
+#X connect 55 0 51 0;
+#X connect 56 0 9 0;
+#X connect 57 0 9 0;
+#X connect 58 0 42 0;
+#X connect 59 0 38 0;
+#X connect 61 0 62 0;
+#X connect 61 1 60 1;
+#X connect 62 0 60 0;
+#X connect 63 0 66 0;
+#X connect 64 0 65 0;
+#X connect 65 0 63 0;
+#X connect 66 0 62 1;
diff --git a/externals/gridflow/examples/linear_transform.pd b/externals/gridflow/examples/linear_transform.pd
new file mode 100644
index 00000000..d8f9923d
--- /dev/null
+++ b/externals/gridflow/examples/linear_transform.pd
@@ -0,0 +1,225 @@
+#N canvas 415 64 784 587 10;
+#X text 359 43 click here to go in manual mode;
+#X floatatom 141 311 5 0 0 0 - - -;
+#X obj 27 374 # >> 11;
+#X obj 27 139 #store;
+#X obj 183 291 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 505 208 * 3;
+#X obj 183 310 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X floatatom 141 257 5 0 0 0 - - -;
+#X msg 444 238 10000;
+#X obj 27 59 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 183 253 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 77 138 loadbang;
+#X text 180 234 linear transform;
+#X obj 27 395 # + 128;
+#X floatatom 141 275 5 0 0 0 - - -;
+#X floatatom 141 293 5 0 0 0 - - -;
+#X obj 183 272 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 428 260 vsl 15 128 0 35999 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 8220 1;
+#X obj 444 259 vsl 15 128 -32768 32768 0 0 empty empty empty 0 -8 0
+8 -260818 -1 -1 5796 1;
+#X obj 313 82 % 36000;
+#X obj 444 219 loadbang;
+#X text 432 185 rotozoomer;
+#X obj 505 227 # sin* 100;
+#X obj 288 43 shunt 2;
+#X obj 152 416 loadbang;
+#X obj 27 448 #store;
+#X obj 27 469 #out window;
+#X obj 343 44 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 88 334 #pack 4;
+#X obj 27 95 t b b;
+#X obj 313 63 + 100;
+#X obj 505 246 # inv* 100000;
+#X obj 505 265 #export;
+#X obj 83 426 #camera;
+#X obj 152 454 #in;
+#X obj 83 406 spigot;
+#X obj 131 407 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 27 353 #inner;
+#X obj 88 237 loadbang;
+#X obj 27 488 fps detailed;
+#X obj 27 507 print;
+#X obj 2 0 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 13 Copyright 2002 Mathieu Bouchard;
+#X text 21 0 convolve.pd;
+#X obj 2 0 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 0 linear_transform.pd;
+#X obj 77 157 #for (-128 -128) (128 128) (1 1);
+#X obj 428 416 #outer + (9000 18000 0 9000);
+#X text 21 13 Copyright 2001 Mathieu Bouchard;
+#X obj 2 549 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 10 556 GridFlow 0.8.0;
+#X text 10 556 GridFlow 0.8.0;
+#X obj 27 76 metro 33.3667;
+#X obj 89 353 #redim (2 2);
+#X obj 333 335 #export;
+#X obj 333 316 # % 36000;
+#N canvas 0 0 450 300 scratch 0;
+#X obj 40 38 inlet;
+#X obj 40 245 outlet;
+#X obj 40 57 route keypress;
+#X msg 40 76 \$4;
+#X msg 40 115 -1;
+#X msg 79 115 1;
+#X obj 40 182 +;
+#X obj 40 207 int;
+#X obj 72 185 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 40 226 #fade 2;
+#X obj 65 207 inlet;
+#X obj 40 139 * 1500;
+#X obj 40 95 route Left Right;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 12 0;
+#X connect 4 0 11 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 1;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 6 1;
+#X connect 9 0 1 0;
+#X connect 10 0 7 0;
+#X connect 11 0 6 0;
+#X connect 12 0 4 0;
+#X connect 12 1 5 0;
+#X restore 333 297 pd scratch;
+#N canvas 0 0 304 312 scratch2 0;
+#X obj 30 23 inlet;
+#X obj 46 263 outlet;
+#X obj 30 42 route keypress;
+#X msg 30 90 \$4;
+#X msg 69 130 1;
+#X obj 45 197 +;
+#X obj 46 218 int;
+#X obj 71 199 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 46 243 #fade 2;
+#X obj 71 218 inlet;
+#X obj 30 109 route Up Down;
+#X msg 30 130 -1;
+#X obj 30 70 t l l;
+#X msg 129 62 \$3;
+#X obj 129 81 & 1;
+#X obj 129 100 sel 0 1;
+#X obj 49 161 *;
+#X msg 130 120 1000;
+#X msg 168 120 5;
+#X connect 0 0 2 0;
+#X connect 2 0 12 0;
+#X connect 3 0 10 0;
+#X connect 4 0 16 0;
+#X connect 5 0 6 1;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 5 1;
+#X connect 8 0 1 0;
+#X connect 9 0 6 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 16 0;
+#X connect 12 0 3 0;
+#X connect 12 1 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 17 0;
+#X connect 15 1 18 0;
+#X connect 16 0 5 0;
+#X connect 17 0 16 1;
+#X connect 18 0 16 1;
+#X restore 336 367 pd scratch2;
+#X obj 336 386 #export;
+#X obj 336 405 / 10000;
+#X obj 336 424 exp;
+#X obj 505 373 t b;
+#X msg 152 435 load teapot.png;
+#X obj 288 82 f;
+#X msg 393 172 6666;
+#X obj 328 273 spigot;
+#X obj 385 255 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 344 465 spigot;
+#X obj 342 489 display;
+#X obj 428 435 # sin*;
+#X obj 462 497 display;
+#X connect 1 0 28 3;
+#X connect 2 0 13 0;
+#X connect 3 0 37 0;
+#X connect 4 0 15 0;
+#X connect 5 0 22 0;
+#X connect 6 0 1 0;
+#X connect 7 0 28 0;
+#X connect 8 0 18 0;
+#X connect 9 0 52 0;
+#X connect 10 0 7 0;
+#X connect 11 0 46 0;
+#X connect 13 0 25 0;
+#X connect 14 0 28 1;
+#X connect 15 0 28 2;
+#X connect 16 0 14 0;
+#X connect 17 0 47 0;
+#X connect 18 0 61 0;
+#X connect 18 0 69 1;
+#X connect 19 0 63 1;
+#X connect 20 0 8 0;
+#X connect 22 0 31 0;
+#X connect 23 0 63 0;
+#X connect 24 0 62 0;
+#X connect 25 0 26 0;
+#X connect 26 0 39 0;
+#X connect 26 0 65 0;
+#X connect 27 0 23 1;
+#X connect 28 0 53 0;
+#X connect 29 0 3 0;
+#X connect 29 1 23 0;
+#X connect 29 1 35 0;
+#X connect 29 1 56 1;
+#X connect 29 1 57 1;
+#X connect 30 0 19 0;
+#X connect 31 0 32 0;
+#X connect 32 0 61 0;
+#X connect 32 0 18 0;
+#X connect 33 0 25 1;
+#X connect 34 0 25 1;
+#X connect 35 0 33 0;
+#X connect 36 0 35 1;
+#X connect 37 0 2 0;
+#X connect 38 0 28 0;
+#X connect 39 0 40 0;
+#X connect 46 0 3 1;
+#X connect 47 0 69 0;
+#X connect 52 0 29 0;
+#X connect 53 0 37 1;
+#X connect 55 0 54 0;
+#X connect 56 0 55 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 60 0;
+#X connect 60 0 67 0;
+#X connect 61 0 17 0;
+#X connect 62 0 34 0;
+#X connect 63 0 30 0;
+#X connect 63 0 17 0;
+#X connect 63 0 5 0;
+#X connect 64 0 17 0;
+#X connect 65 0 56 0;
+#X connect 65 0 57 0;
+#X connect 66 0 65 1;
+#X connect 66 0 67 1;
+#X connect 67 0 18 0;
+#X connect 67 0 68 0;
+#X connect 67 0 69 1;
+#X connect 69 0 53 0;
+#X connect 69 0 70 0;
diff --git a/externals/gridflow/examples/markov.pd b/externals/gridflow/examples/markov.pd
new file mode 100644
index 00000000..d6bbe262
--- /dev/null
+++ b/externals/gridflow/examples/markov.pd
@@ -0,0 +1,133 @@
+#N canvas 238 57 825 641 10;
+#X obj 70 203 dac~;
+#X obj 71 141 osc~;
+#X obj 71 103 mtof;
+#X obj 71 122 t f b;
+#X obj 105 142 line~;
+#X obj 70 160 *~;
+#X obj 74 86 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 6700 1;
+#X obj 70 179 *~ 0.1;
+#X obj 33 6 key;
+#X obj 409 139 messageprepend set;
+#X obj 497 110 t l;
+#X msg 409 89 list \$1;
+#X obj 409 109 listprepend;
+#X msg 481 84 list;
+#X obj 97 7 loadbang;
+#X obj 34 29 listfind;
+#X obj 34 48 sel -1;
+#X obj 71 67 + 60;
+#X msg 114 28 list 113 50 119 51 101 114 53 116 54 121 55 117 105 57
+111 48 112 91 61 93 127;
+#X obj 409 69 key;
+#X msg 111 123 0.7 \, 0 400;
+#X floatatom 105 68 5 0 0 0 - - -;
+#X msg 200 180 list \$1;
+#X obj 275 199 listsublist 0 2;
+#X obj 200 199 listappend;
+#X obj 483 388 display;
+#X msg 270 264 1;
+#X msg 305 240 put_at ( \$2 \$1 );
+#X obj 166 319 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 75 309 f;
+#X obj 39 410 #store;
+#X obj 97 393 #fold +;
+#X obj 96 417 display;
+#X obj 275 219 t l l l;
+#X msg 184 279 bang;
+#X obj 8 387 #finished;
+#X floatatom 99 311 5 0 0 0 - - -;
+#X obj 90 288 t f;
+#X obj 17 262 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 192 299 list \$1;
+#X obj 46 366 t a a;
+#X obj 39 502 #scan +;
+#X obj 200 157 spigot;
+#X obj 82 440 # rand;
+#X obj 80 472 display;
+#X obj 38 546 # <;
+#X obj 50 595 #fold +;
+#X obj 280 512 display;
+#X obj 132 596 #export;
+#X obj 248 157 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 104 329 + 60;
+#X obj 148 368 spigot;
+#X obj 199 367 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 17 286 metro 100;
+#X obj 50 617 display;
+#X obj 67 568 display;
+#X obj 90 537 display;
+#X obj 191 322 #store (17 17 #) \, op +;
+#X text 536 12 This will be an example of Markov Chains;
+#X text 536 27 But it's not too clean yet;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 3 1 20 0;
+#X connect 4 0 5 1;
+#X connect 5 0 7 0;
+#X connect 6 0 2 0;
+#X connect 7 0 0 0;
+#X connect 7 0 0 1;
+#X connect 8 0 15 0;
+#X connect 10 0 12 1;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
+#X connect 12 0 9 0;
+#X connect 13 0 12 1;
+#X connect 14 0 18 0;
+#X connect 15 0 16 0;
+#X connect 16 1 17 0;
+#X connect 16 1 42 0;
+#X connect 17 0 6 0;
+#X connect 17 0 21 0;
+#X connect 18 0 15 1;
+#X connect 19 0 11 0;
+#X connect 20 0 4 0;
+#X connect 22 0 24 0;
+#X connect 23 0 24 1;
+#X connect 23 0 33 0;
+#X connect 24 0 23 0;
+#X connect 26 0 57 1;
+#X connect 27 0 57 1;
+#X connect 28 0 57 0;
+#X connect 29 0 39 0;
+#X connect 30 0 41 0;
+#X connect 30 0 47 0;
+#X connect 31 0 32 0;
+#X connect 31 0 43 0;
+#X connect 33 0 34 0;
+#X connect 33 1 26 0;
+#X connect 33 2 27 0;
+#X connect 34 0 57 0;
+#X connect 35 0 30 0;
+#X connect 36 0 50 0;
+#X connect 37 0 29 1;
+#X connect 37 0 36 0;
+#X connect 38 0 53 0;
+#X connect 39 0 57 0;
+#X connect 40 0 35 0;
+#X connect 40 1 30 1;
+#X connect 40 1 31 0;
+#X connect 41 0 45 0;
+#X connect 41 0 56 0;
+#X connect 42 0 22 0;
+#X connect 43 0 44 0;
+#X connect 43 0 45 1;
+#X connect 45 0 46 0;
+#X connect 45 0 55 0;
+#X connect 46 0 48 0;
+#X connect 46 0 54 0;
+#X connect 48 0 37 0;
+#X connect 49 0 42 1;
+#X connect 50 0 6 0;
+#X connect 51 0 40 0;
+#X connect 52 0 51 1;
+#X connect 53 0 29 0;
+#X connect 57 0 25 0;
+#X connect 57 0 51 0;
diff --git a/externals/gridflow/examples/mechanics.pd b/externals/gridflow/examples/mechanics.pd
new file mode 100644
index 00000000..944dcb7c
--- /dev/null
+++ b/externals/gridflow/examples/mechanics.pd
@@ -0,0 +1,121 @@
+#N canvas 491 20 624 716 10;
+#X obj 188 65 # rand;
+#X obj 81 97 #store;
+#X obj 188 8 loadbang;
+#X obj 134 120 #transpose;
+#X obj 64 8 tgl 17 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 81 171 #inner \, op sq- \, fold +;
+#X msg 139 56 1;
+#X msg 100 56 0;
+#X obj 81 120 shunt 2;
+#X obj 81 29 t b b b b;
+#X obj 27 244 #transpose 1 3;
+#X obj 27 282 #fold +;
+#X obj 27 357 # inv*;
+#X obj 159 424 # +;
+#X msg 188 27 bang;
+#X obj 12 648 #out window;
+#X obj 12 29 t b b;
+#X obj 12 667 fps detailed;
+#X obj 190 471 # inv+;
+#X obj 279 235 # + 1;
+#X obj 279 216 # * -2;
+#X obj 185 424 # *;
+#X msg 261 76 7 2 # 0;
+#X obj 12 574 # min 255;
+#X obj 81 8 metro 40;
+#X obj 350 598 #dim;
+#X msg 350 636 \$1;
+#X msg 349 674 \$1 2;
+#X obj 350 617 #export_list;
+#X obj 287 500 t a a;
+#X obj 350 655 * 6;
+#X obj 27 225 #outer sq-;
+#X msg 188 46 7 2 # 5760 7680;
+#X obj 240 521 # / 16;
+#X obj 27 322 # >> 8;
+#X obj 46 496 display;
+#X obj 190 452 # >> 8;
+#X obj 74 357 # << 8;
+#X obj 27 263 # * (2 2 # 1 0 0 1);
+#X obj 81 190 #outer ignore (2 #);
+#X obj 279 178 # abs- (2880 3840);
+#X obj 279 197 # >= (2880 3840);
+#X obj 290 460 # min (36000 48000);
+#X obj 290 479 # max (0 0);
+#X obj 240 541 #inner (2 6 2 # 1 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1
+0 1 0 1 0 0);
+#X obj 240 573 # + (6 2 # -8 -8 -8 8 8 8 8 -8 -8 -8 180 240);
+#X obj 12 555 # *>>8 (232 242 252);
+#X obj 12 536 #draw_polygon + \, color (3 # 130);
+#X obj 12 517 #store (360 480 3 # 0);
+#X obj 28 376 #fold + \, seed (2 #);
+#X obj 231 613 #redim (42 2);
+#X text 310 8 This was supposed to be some kind of;
+#X text 310 24 Newtonian physics simulation;
+#X text 310 42 But it doesn't quite work;
+#X connect 0 0 1 1;
+#X connect 1 0 8 0;
+#X connect 2 0 14 0;
+#X connect 3 0 5 1;
+#X connect 3 0 31 1;
+#X connect 4 0 24 0;
+#X connect 5 0 39 0;
+#X connect 6 0 8 1;
+#X connect 7 0 8 1;
+#X connect 8 0 5 0;
+#X connect 8 0 31 0;
+#X connect 8 1 3 0;
+#X connect 8 1 18 1;
+#X connect 8 1 40 0;
+#X connect 9 0 16 0;
+#X connect 9 1 7 0;
+#X connect 9 2 1 0;
+#X connect 9 3 6 0;
+#X connect 10 0 38 0;
+#X connect 11 0 34 0;
+#X connect 12 0 49 0;
+#X connect 13 0 21 1;
+#X connect 13 0 36 0;
+#X connect 14 0 32 0;
+#X connect 14 0 22 0;
+#X connect 15 0 17 0;
+#X connect 16 0 48 0;
+#X connect 16 1 1 0;
+#X connect 18 0 29 0;
+#X connect 19 0 21 0;
+#X connect 20 0 19 0;
+#X connect 21 0 13 1;
+#X connect 22 0 13 1;
+#X connect 22 0 21 1;
+#X connect 23 0 15 0;
+#X connect 23 0 48 1;
+#X connect 24 0 9 0;
+#X connect 25 0 28 0;
+#X connect 26 0 30 0;
+#X connect 27 0 50 1;
+#X connect 28 0 26 0;
+#X connect 29 0 1 1;
+#X connect 29 0 33 0;
+#X connect 29 1 25 0;
+#X connect 30 0 27 0;
+#X connect 31 0 10 0;
+#X connect 32 0 0 0;
+#X connect 33 0 44 0;
+#X connect 34 0 12 0;
+#X connect 36 0 18 0;
+#X connect 36 0 35 0;
+#X connect 37 0 12 1;
+#X connect 38 0 11 0;
+#X connect 39 0 37 0;
+#X connect 40 0 41 0;
+#X connect 41 0 20 0;
+#X connect 42 0 43 0;
+#X connect 43 0 29 0;
+#X connect 44 0 45 0;
+#X connect 45 0 50 0;
+#X connect 46 0 23 0;
+#X connect 47 0 46 0;
+#X connect 48 0 47 0;
+#X connect 49 0 13 0;
+#X connect 50 0 47 2;
diff --git a/externals/gridflow/examples/motion_detect.pd b/externals/gridflow/examples/motion_detect.pd
new file mode 100644
index 00000000..c0d00178
--- /dev/null
+++ b/externals/gridflow/examples/motion_detect.pd
@@ -0,0 +1,44 @@
+#N canvas 564 180 494 470 10;
+#X obj 32 -33 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 37 193 #downscale_by ( 15 20 ) smoothly;
+#X obj 37 219 #scale_by ( 32 32 );
+#X obj 37 251 #out window;
+#X obj 32 42 t a a;
+#X obj 37 68 # -;
+#X obj 37 91 @! abs;
+#X obj 37 114 # * 8;
+#X obj 37 140 # - 64;
+#X obj 61 291 fps detailed;
+#X obj 61 311 print;
+#X obj 32 -6 metro 33.3667;
+#X obj 32 18 #camera;
+#X obj 37 165 #clip;
+#X obj -15 353 cnv 15 500 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 360 GridFlow 0.8.0;
+#X text -7 360 GridFlow 0.8.0;
+#X obj -13 -85 cnv 15 500 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -5 -85 motion_detect.pd;
+#X text -6 -72 Copyright 2001 Mathieu Bouchard;
+#X obj 181 253 display;
+#X text 127 79 This patch demonstrates the basis of motion detection.
+The substraction of two subsequent frames after [t a a]. It then downscales
+and rescales the image \, breaking it down into larger regions that
+can be monitored for changes.;
+#X connect 0 0 11 0;
+#X connect 1 0 2 0;
+#X connect 1 0 20 0;
+#X connect 2 0 3 0;
+#X connect 3 0 9 0;
+#X connect 4 0 5 1;
+#X connect 4 1 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 13 0;
+#X connect 9 0 10 0;
+#X connect 11 0 12 0;
+#X connect 12 0 4 0;
+#X connect 13 0 1 0;
diff --git a/externals/gridflow/examples/nervous_video.pd b/externals/gridflow/examples/nervous_video.pd
new file mode 100644
index 00000000..6009fb59
--- /dev/null
+++ b/externals/gridflow/examples/nervous_video.pd
@@ -0,0 +1,155 @@
+#N canvas 446 102 590 659 10;
+#X obj 33 30 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 123 298 450 300 counter 0;
+#X obj 131 70 + 1;
+#X obj 131 23 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 170 70 5 0 0 0 - - -;
+#X msg 131 47 1;
+#X floatatom 170 114 5 0 0 0 - - -;
+#X obj 132 157 select 1;
+#X msg 170 44 0;
+#X obj 132 178 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 70 25 inlet;
+#X obj 132 195 outlet;
+#X obj 220 65 inlet;
+#X obj 298 106 outlet;
+#X obj 170 95 >= 32;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 1;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 7 0;
+#X connect 6 0 2 0;
+#X connect 7 0 9 0;
+#X connect 8 0 1 0;
+#X connect 10 0 12 1;
+#X connect 12 0 4 0;
+#X restore 241 137 pd counter;
+#X obj 24 252 / 10;
+#X floatatom 24 290 5 0 0 0 - - -;
+#X obj 24 -26 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X floatatom 25 504 5 0 0 0 - - -;
+#X obj 24 484 fps;
+#X obj 24 2 metro 33.3667;
+#X msg 24 314 list \$1;
+#X msg 225 335 reassign \, 32 480 640 3 #;
+#X msg 316 94 32;
+#X obj 24 233 random 320;
+#X obj 24 461 #out window;
+#X floatatom 316 114 5 0 0 0 - - -;
+#X obj 347 94 loadbang;
+#X text 358 113 maximum value is 32;
+#X text 359 126 (see below);
+#X obj 24 120 float;
+#X obj 24 189 shunt 4;
+#X obj 24 213 bang;
+#X obj 24 271 int;
+#X obj 145 163 vradio 15 1 0 4 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 166 163 caffeine twitch;
+#X text 166 178 ethanol lag;
+#X obj 131 233 * 2;
+#X obj 160 234 * -1;
+#X text 166 209 back flash acid;
+#X text 165 193 acid flash back;
+#X obj 255 369 vradio 15 1 0 4 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 273 366 plain;
+#X text 274 399 hilitemotion;
+#X text 273 415 embossmotion;
+#X obj 80 402 @! abs;
+#X text 133 -3 This patch was created by Alexandre Castonguay \,;
+#X text 133 10 as a clone of Edo Tannenbaum's "nervous video" effect
+\, http://effectv.sourceforge.net;
+#X text 133 38 Later modified by Mathieu to add more effects;
+#X obj 80 381 # -;
+#X obj 81 421 # << 2;
+#X obj 102 233 + 1;
+#X obj 135 382 # -;
+#X obj 136 401 # + 128;
+#X obj 136 421 # max 0;
+#X obj 80 441 # min 255;
+#X obj 24 358 shunt 4;
+#X obj 119 353 shunt 4;
+#X text 273 384 mix 50%;
+#X obj 34 421 # >> 1;
+#X obj 38 388 # +;
+#X obj 89 101 #camera;
+#X obj 24 53 t b b b;
+#X obj -16 536 cnv 15 700 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 543 GridFlow 0.8.0;
+#X text -7 543 GridFlow 0.8.0;
+#X obj -17 -85 cnv 15 700 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -6 -86 nervous_video.pd;
+#X text -7 -74 Copyright 2002 Alexandre Castonguay \, Mathieu Bouchard
+;
+#X text 146 101 <-- open this;
+#X obj 24 333 #store (32 240 320 3 #);
+#X msg 316 165 put_at ( \$1 0 0 0 );
+#X msg 225 314 reassign \, 64 240 320 3 #;
+#X text 226 261 the buffer size decides the maximum loop length and
+dimension;
+#X msg 225 294 reassign \, 32 240 320 3 #;
+#X connect 0 0 49 0;
+#X connect 1 1 58 0;
+#X connect 1 1 17 1;
+#X connect 2 0 20 0;
+#X connect 3 0 8 0;
+#X connect 4 0 7 0;
+#X connect 6 0 5 0;
+#X connect 7 0 49 0;
+#X connect 8 0 57 0;
+#X connect 9 0 57 1;
+#X connect 10 0 13 0;
+#X connect 11 0 2 0;
+#X connect 12 0 6 0;
+#X connect 13 0 1 1;
+#X connect 14 0 10 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 18 1 38 0;
+#X connect 18 2 24 0;
+#X connect 18 3 25 0;
+#X connect 19 0 11 0;
+#X connect 20 0 3 0;
+#X connect 21 0 18 1;
+#X connect 24 0 8 0;
+#X connect 25 0 8 0;
+#X connect 28 0 44 1;
+#X connect 28 0 43 1;
+#X connect 32 0 37 0;
+#X connect 36 0 32 0;
+#X connect 37 0 42 0;
+#X connect 38 0 8 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 12 0;
+#X connect 43 0 12 0;
+#X connect 43 1 47 0;
+#X connect 43 2 36 0;
+#X connect 43 3 39 0;
+#X connect 44 1 47 1;
+#X connect 44 2 36 1;
+#X connect 44 3 39 1;
+#X connect 46 0 12 0;
+#X connect 47 0 46 0;
+#X connect 48 0 44 0;
+#X connect 48 0 57 1;
+#X connect 49 0 17 0;
+#X connect 49 1 48 0;
+#X connect 49 2 1 0;
+#X connect 57 0 43 0;
+#X connect 58 0 57 1;
+#X connect 59 0 57 1;
+#X connect 61 0 57 1;
diff --git a/externals/gridflow/examples/photo_pianoroll.pd b/externals/gridflow/examples/photo_pianoroll.pd
new file mode 100644
index 00000000..9ad80e38
--- /dev/null
+++ b/externals/gridflow/examples/photo_pianoroll.pd
@@ -0,0 +1,158 @@
+#N canvas 329 40 705 535 10;
+#X obj 146 62 #in lada.jpg;
+#X obj 38 290 #out window;
+#X obj 38 48 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 38 114 #store;
+#X obj 164 41 loadbang;
+#X obj 146 42 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 255 466 dac~;
+#X obj 329 58 +;
+#X msg 329 39 1;
+#X obj 361 39 % 365;
+#N canvas 0 0 450 300 fft 0;
+#X obj 23 68 rifft~;
+#X obj 23 88 outlet~;
+#X obj 359 16 block~ 1024;
+#X obj 23 48 tabreceive~ array2;
+#X connect 0 0 1 0;
+#X connect 3 0 0 0;
+#X restore 255 423 pd fft;
+#X obj 17 85 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 38 84 t b b;
+#X msg 260 252 4 2 # 0 0 0 502 1 502 1 0;
+#X obj 260 271 # +;
+#X obj 38 233 t a b;
+#X msg 287 271 \$1 0;
+#X obj 38 252 #greyscale_to_rgb;
+#X obj 462 77 #store;
+#X obj 462 153 #export_list;
+#X obj 501 172 s array1;
+#X obj 171 177 # inv+ 255;
+#X obj 146 100 # min 255;
+#X obj 146 81 # * 3;
+#X msg 474 58 1 1 # \$1;
+#X obj 255 339 table array1 502;
+#X obj 462 172 t b a;
+#X obj 326 271 r row;
+#X obj 361 58 s row;
+#X obj 462 210 t f f;
+#X obj 462 305 tabwrite array2;
+#X obj 462 248 exp;
+#X obj 38 309 #mouse \, ...;
+#X obj 79 383 #draw_polygon put;
+#X obj 79 364 spigot;
+#X obj 29 413 t a a;
+#X obj 29 470 # +;
+#X obj 146 177 t a;
+#X msg 29 432 4 2 # 0 0 0 1 1 1 1 0;
+#X obj 29 451 # *;
+#X obj 105 459 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 20 256;
+#X msg 185 217 365 502 1 # 255;
+#X text 296 217 clear;
+#X obj 462 286 tabread4 array1;
+#X obj 462 191 for 0 64 1;
+#X obj 462 96 #fade 5;
+#X obj 255 358 table array2 1024;
+#X obj 255 442 lop~ 1000;
+#X obj 462 229 / 20;
+#X obj 462 267 * 22;
+#X obj 105 473 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 20 256;
+#X obj 54 470 #pack 2;
+#X obj 499 39 # >> 4;
+#X obj 146 138 # >> 2;
+#X obj 38 271 #draw_polygon put (3 # 255 0 0);
+#X obj 2 499 cnv 15 700 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 10 506 GridFlow 0.8.0;
+#X text 10 506 GridFlow 0.8.0;
+#X obj 2 0 cnv 15 700 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 17 -1 photo_pianoroll.pd;
+#X text 15 13 Copyright 2004 Mathieu Bouchard;
+#X obj 462 134 # / (f # 4000);
+#X obj 462 115 #cast f;
+#X obj 171 196 #convolve (1 7 # 1 1 2 8 2 1 1);
+#X obj 146 119 #convolve (2 2 # 1);
+#X msg 132 344 0;
+#X msg 136 364 1 # \$1;
+#X msg 162 344 255;
+#X obj 79 402 s feedback;
+#X obj 152 158 r feedback;
+#X obj 38 65 metro 46.44;
+#X text 575 7 How to play a car;
+#X connect 0 0 23 0;
+#X connect 1 0 32 0;
+#X connect 2 0 70 0;
+#X connect 3 0 15 0;
+#X connect 3 0 34 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 1;
+#X connect 9 0 28 0;
+#X connect 9 0 24 0;
+#X connect 10 0 47 0;
+#X connect 11 0 12 0;
+#X connect 12 0 8 0;
+#X connect 12 1 3 0;
+#X connect 13 0 14 0;
+#X connect 14 0 54 2;
+#X connect 15 0 17 0;
+#X connect 15 1 13 0;
+#X connect 16 0 14 1;
+#X connect 17 0 54 0;
+#X connect 18 0 45 0;
+#X connect 19 0 26 0;
+#X connect 21 0 63 0;
+#X connect 22 0 64 0;
+#X connect 23 0 22 0;
+#X connect 24 0 18 0;
+#X connect 26 0 44 0;
+#X connect 26 1 20 0;
+#X connect 27 0 16 0;
+#X connect 29 0 48 0;
+#X connect 29 1 30 1;
+#X connect 31 0 49 0;
+#X connect 32 0 35 0;
+#X connect 32 1 35 0;
+#X connect 32 4 34 1;
+#X connect 32 4 65 0;
+#X connect 32 6 34 1;
+#X connect 32 6 67 0;
+#X connect 33 0 68 0;
+#X connect 34 0 33 0;
+#X connect 35 0 38 0;
+#X connect 35 1 36 1;
+#X connect 36 0 33 2;
+#X connect 37 0 3 1;
+#X connect 37 0 21 0;
+#X connect 38 0 39 0;
+#X connect 39 0 36 0;
+#X connect 40 0 51 0;
+#X connect 41 0 37 0;
+#X connect 43 0 30 0;
+#X connect 44 0 29 0;
+#X connect 45 0 62 0;
+#X connect 47 0 6 0;
+#X connect 47 0 6 1;
+#X connect 48 0 31 0;
+#X connect 49 0 43 0;
+#X connect 50 0 51 1;
+#X connect 51 0 39 1;
+#X connect 52 0 18 1;
+#X connect 53 0 37 0;
+#X connect 54 0 1 0;
+#X connect 61 0 19 0;
+#X connect 62 0 61 0;
+#X connect 63 0 52 0;
+#X connect 64 0 53 0;
+#X connect 65 0 66 0;
+#X connect 66 0 33 1;
+#X connect 67 0 33 1;
+#X connect 69 0 37 0;
+#X connect 70 0 12 0;
diff --git a/externals/gridflow/examples/play_video.pd b/externals/gridflow/examples/play_video.pd
new file mode 100644
index 00000000..530c8e66
--- /dev/null
+++ b/externals/gridflow/examples/play_video.pd
@@ -0,0 +1,44 @@
+#N canvas 1036 382 502 475 10;
+#X obj 29 221 #in;
+#X obj 29 -37 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X obj 30 323 display;
+#X obj -17 -85 cnv 15 500 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -16 356 cnv 15 500 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 363 GridFlow 0.8.0;
+#X text -6 -83 play_video.pd;
+#X obj 29 -6 metro 33.333;
+#X obj 29 270 #out window \, title video;
+#X obj 29 296 fps;
+#X text -7 363 GridFlow 0.9.0;
+#X text 58 -38 <-- 2 start the metro;
+#X floatatom 69 167 5 0 0 0 - - -;
+#X msg 94 195 42;
+#X text 129 195 <-- select the frame number;
+#X text 116 84 libraries. Photo jpeg compression gives slightly;
+#X text 118 98 better results than mjpega. Rendering is cpu;
+#X text 117 112 intensive so if operations on the images is;
+#X text 117 70 Supported codecs will depend on your installed;
+#X text 114 166 <-- scrub the video (stop the metro first);
+#X text 117 138 such as 320 x 240;
+#X text 118 125 needed \, then start with a lower resolution;
+#X text 174 29 <-- 1 open a file \, make sure the correct;
+#X text 173 43 path is entered in pd's 'Path' preferences.;
+#X floatatom 53 246 5 0 0 0 - - -;
+#X obj 99 245 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 123 244 <-- outputs a bang when finished;
+#X text 139 -82 see also [#in]'s help file;
+#X msg 46 30 open violoncelle.mov;
+#X connect 0 0 8 0;
+#X connect 0 1 24 0;
+#X connect 0 1 25 0;
+#X connect 1 0 7 0;
+#X connect 7 0 0 0;
+#X connect 8 0 9 0;
+#X connect 9 0 2 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 0;
+#X connect 28 0 0 0;
diff --git a/externals/gridflow/examples/plot.pd b/externals/gridflow/examples/plot.pd
new file mode 100644
index 00000000..dad9db76
--- /dev/null
+++ b/externals/gridflow/examples/plot.pd
@@ -0,0 +1,73 @@
+#N canvas 211 415 621 272 10;
+#N canvas 803 450 420 235 plot-a-function 0;
+#X obj 8 61 # inv+ 640;
+#X obj 8 40 #for 0 640 1;
+#X obj 105 59 outlet;
+#X obj 33 175 #outer <;
+#X obj 105 80 inlet;
+#X text 209 199 to rgb;
+#X text 97 176 make graph \, twotone channelless;
+#X obj 35 232 outlet;
+#X obj 105 34 #for 0 640 1;
+#X obj 105 10 inlet;
+#X obj 92 132 #finished;
+#X obj 105 103 t a a;
+#X obj 33 200 #outer * (255 255 255);
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 3 0 12 0;
+#X connect 4 0 11 0;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 10 0 1 0;
+#X connect 11 0 10 0;
+#X connect 11 1 3 1;
+#X connect 12 0 7 0;
+#X restore 57 47 pd plot-a-function ( tm );
+#X obj 257 81 # + 320;
+#X obj 57 72 #out window;
+#X obj 256 -3 # - 320;
+#X obj 256 53 # tanh* 343;
+#X obj 256 25 # * 30;
+#X obj 33 15 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj -16 -85 cnv 15 620 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -15 152 cnv 15 620 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 159 GridFlow 0.8.0;
+#X text -7 159 GridFlow 0.8.0;
+#X text -3 -86 plot.pd;
+#X obj 57 -10 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 57 14 metro 100;
+#X obj 360 -3 hsl 128 15 0 500 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 3600 1;
+#X floatatom 314 -2 5 0 0 0 - - -;
+#X obj 358 25 hsl 128 15 0 500 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 1300 1;
+#X floatatom 311 26 5 0 0 0 - - -;
+#X obj 390 54 hsl 128 15 0 500 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 6700 1;
+#X floatatom 343 54 5 0 0 0 - - -;
+#X obj 361 82 hsl 128 15 0 500 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 5600 1;
+#X floatatom 314 82 5 0 0 0 - - -;
+#X text -3 -72 Copyright 2003 Mathieu Bouchard;
+#X connect 0 0 2 0;
+#X connect 0 1 3 0;
+#X connect 1 0 0 1;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 0 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 14 0 15 0;
+#X connect 15 0 3 1;
+#X connect 16 0 17 0;
+#X connect 17 0 5 1;
+#X connect 18 0 19 0;
+#X connect 19 0 4 1;
+#X connect 20 0 21 0;
+#X connect 21 0 1 1;
diff --git a/externals/gridflow/examples/polygon.pd b/externals/gridflow/examples/polygon.pd
new file mode 100644
index 00000000..a18980ea
--- /dev/null
+++ b/externals/gridflow/examples/polygon.pd
@@ -0,0 +1,123 @@
+#N canvas 130 96 584 565 10;
+#X obj 35 250 #draw_polygon +;
+#X obj 18 1 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 35 214 #store;
+#X obj 35 -36 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 35 378 #out window;
+#X obj 306 7 vsl 15 137 0 36000 0 1 empty empty empty -2 -6 0 8 -260818
+-1 -1 3400 1;
+#N canvas 0 0 415 291 create 0;
+#X msg 82 66 0 \$1;
+#X obj 5 131 #outer + ( 0 9000 );
+#X obj 5 153 # +;
+#X obj 5 197 # + ( 120 160 );
+#X obj 5 175 # cos* 116;
+#X obj 5 109 # * 14400;
+#X obj 5 87 #for 0 5 1;
+#X obj 34 153 inlet rotation_angle;
+#X obj 5 10 inlet bang;
+#X obj 5 219 outlet polygon;
+#X obj 82 44 inlet tilt_factor;
+#X text 81 27 default: 9000 \, for flatness;
+#X connect 0 0 1 1;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 9 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X connect 6 0 5 0;
+#X connect 7 0 2 1;
+#X connect 8 0 6 0;
+#X connect 10 0 0 0;
+#X restore 204 149 pd create star;
+#N canvas 0 0 450 300 color 0;
+#X obj 18 141 outlet 0;
+#X obj 18 95 # sin* 128;
+#X obj 18 117 # + 128;
+#X obj 18 37 # * 1146;
+#X obj 18 13 inlet;
+#X obj 18 60 #outer + ( 0 12000 24000 );
+#X text 139 52 each channel is a sine wave \; the three are offset
+from each other 120 degrees. it is almost like turning around in the
+color wheel except we don't support the HSV color model for now.;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 1 0;
+#X restore 62 102 pd color generator;
+#X obj 35 -19 metro 33.3667;
+#X obj 35 0 t b b b;
+#X obj 35 71 t b;
+#X floatatom 307 151 6 0 0 0 - - -;
+#X obj 88 194 loadbang;
+#X obj 51 272 shunt 2;
+#X obj 104 274 tgl 15 1 empty empty empty 0 -6 0 8 -241291 -1 -1 1
+1;
+#X text 122 273 blur;
+#X msg 88 214 240 320 3 b # 0;
+#X obj 62 140 #cast b;
+#X obj 79 355 #solarize;
+#X obj 35 317 shunt 2;
+#X obj 88 319 tgl 15 1 empty empty empty 0 -6 0 8 -241291 -1 -1 1 1
+;
+#X obj 155 303 # >> (b # 2);
+#X obj 155 322 #convolve (1 3 b # 1 2 1) \, seed (b # 0);
+#X obj -15 442 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 450 GridFlow 0.8.0;
+#X text -7 450 GridFlow 0.8.0;
+#X obj -13 -85 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -72 Copyright 2002 Mathieu Bouchard;
+#X text 0 -86 polygon.pd;
+#X obj 79 336 #cast i;
+#X obj 82 30 + 1;
+#X obj 57 30 i;
+#X msg 22 26 0;
+#X obj 182 75 expr ($f1*$f1/2);
+#X obj 155 341 # >> (b # 2);
+#X obj 155 360 #convolve (3 1 b # 1 2 1) \, seed (b # 0);
+#X obj 5 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1 -1
+;
+#X obj 62 121 # >> 3;
+#X connect 0 0 13 0;
+#X connect 0 0 19 0;
+#X connect 1 0 9 0;
+#X connect 2 0 0 0;
+#X connect 3 0 8 0;
+#X connect 5 0 11 0;
+#X connect 6 0 0 2;
+#X connect 7 0 37 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 1 31 0;
+#X connect 9 2 6 0;
+#X connect 10 0 2 0;
+#X connect 11 0 6 2;
+#X connect 12 0 16 0;
+#X connect 13 0 2 1;
+#X connect 13 1 21 0;
+#X connect 14 0 13 1;
+#X connect 16 0 2 1;
+#X connect 17 0 0 1;
+#X connect 18 0 4 0;
+#X connect 19 0 4 0;
+#X connect 19 1 29 0;
+#X connect 20 0 19 1;
+#X connect 21 0 22 0;
+#X connect 22 0 34 0;
+#X connect 29 0 18 0;
+#X connect 30 0 31 1;
+#X connect 31 0 30 0;
+#X connect 31 0 7 0;
+#X connect 31 0 33 0;
+#X connect 32 0 31 0;
+#X connect 33 0 6 1;
+#X connect 34 0 35 0;
+#X connect 35 0 2 1;
+#X connect 36 0 32 0;
+#X connect 36 0 16 0;
+#X connect 37 0 17 0;
diff --git a/externals/gridflow/examples/polygon_editor.pd b/externals/gridflow/examples/polygon_editor.pd
new file mode 100644
index 00000000..478a9d0e
--- /dev/null
+++ b/externals/gridflow/examples/polygon_editor.pd
@@ -0,0 +1,23 @@
+#N canvas 478 312 450 300 10;
+#X obj 41 33 metro 33.3667;
+#X obj 23 34 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 41 52 #store (240 320 3 #);
+#X obj 41 219 #out window;
+#X obj 115 238 s events;
+#X obj 50 73 r events;
+#X obj 41 95 t a;
+#X obj 122 181 print unused_events;
+#X obj 41 181 route2 grid;
+#X obj 41 238 route bang;
+#X obj 41 147 #edit_polygon put (3 # 255) (3 2 # 0 0 100 200 200 100)
+;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 9 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 8 0 3 0;
+#X connect 8 1 7 0;
+#X connect 9 1 4 0;
+#X connect 10 0 8 0;
diff --git a/externals/gridflow/examples/postdigital.pd b/externals/gridflow/examples/postdigital.pd
new file mode 100644
index 00000000..f54a5b56
--- /dev/null
+++ b/externals/gridflow/examples/postdigital.pd
@@ -0,0 +1,67 @@
+#N canvas 681 68 541 475 10;
+#X obj 23 2 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 65 89 #camera;
+#X obj 40 149 t a a a;
+#X obj 9 188 t a a;
+#X msg 39 207 close;
+#X msg 27 253 open /tmp/foo.mov \, bang \, cast uint8 \, close;
+#X obj 40 1 metro 100;
+#X obj 151 194 f;
+#X obj 111 194 bang;
+#X obj 65 109 #convolve (3 3 # 1 2 1 2 4 2);
+#X obj 65 128 # >> 4;
+#X obj 40 168 #finished;
+#X obj 41 230 #out;
+#X obj 27 272 #in;
+#X obj 29 302 # -;
+#X obj 30 414 #clip;
+#X obj 30 452 #out window;
+#X obj 14 38 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 34 63 #in babbage.jpg;
+#X msg 116 219 open quicktime file /tmp/foo.mov \, codec jpeg \, parameter
+jpeg_quality \$1;
+#X obj 40 20 shunt;
+#X obj 79 21 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
+;
+#X obj 30 355 # +;
+#X obj 30 336 # << 3;
+#X obj 176 194 nbx 3 14 0 100 0 0 empty empty empty 0 -8 0 10 -241291
+-1 -1 75 256;
+#X msg 176 175 75;
+#X obj 176 156 loadbang;
+#X text 64 301 compute difference between original image and jpeg decoding
+;
+#X text 80 336 boost the residue;
+#X text 64 355 add boosted residue to the original image;
+#X connect 0 0 6 0;
+#X connect 1 0 9 0;
+#X connect 2 0 11 0;
+#X connect 2 1 12 0;
+#X connect 2 2 8 0;
+#X connect 2 2 14 1;
+#X connect 2 2 22 1;
+#X connect 3 0 5 0;
+#X connect 3 1 4 0;
+#X connect 4 0 12 0;
+#X connect 5 0 13 0;
+#X connect 6 0 20 0;
+#X connect 7 0 19 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 11 0 3 0;
+#X connect 13 0 14 0;
+#X connect 14 0 23 0;
+#X connect 15 0 16 0;
+#X connect 17 0 18 0;
+#X connect 18 0 2 0;
+#X connect 19 0 12 0;
+#X connect 20 0 18 0;
+#X connect 20 1 1 0;
+#X connect 21 0 20 1;
+#X connect 22 0 15 0;
+#X connect 23 0 22 0;
+#X connect 24 0 7 1;
+#X connect 25 0 24 0;
+#X connect 26 0 25 0;
diff --git a/externals/gridflow/examples/ripple.pd b/externals/gridflow/examples/ripple.pd
new file mode 100644
index 00000000..3756a874
--- /dev/null
+++ b/externals/gridflow/examples/ripple.pd
@@ -0,0 +1,184 @@
+#N canvas 276 26 683 618 10;
+#X obj 78 419 #out window;
+#X obj 78 105 +;
+#X obj 47 326 # +;
+#X obj 47 370 shunt 2;
+#X obj 283 189 # sin* 256;
+#N canvas 609 247 325 236 distance 0;
+#X text 16 15 bang;
+#X text 15 149 distances to middle;
+#X obj 18 36 inlet;
+#X obj 18 93 #fold +;
+#X text 89 95 pythagoras' theorem;
+#X obj 18 131 outlet;
+#X obj 18 55 #for (-128 -128) (128 128) (1 1);
+#X obj 18 112 # sqrt;
+#X obj 18 74 # sq-;
+#X connect 2 0 6 0;
+#X connect 3 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 5 0;
+#X connect 8 0 3 0;
+#X restore 164 41 pd distance map;
+#X obj 78 440 fps detailed;
+#X obj 283 130 loadbang;
+#X obj 47 42 t a a;
+#X obj 168 278 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 78 86 1;
+#X obj 47 105 # -;
+#X obj 47 62 #store;
+#N canvas 604 543 420 225 apply 0;
+#X obj 60 48 #fold +;
+#X obj 12 190 outlet 0;
+#X obj 60 16 inlet;
+#X obj 12 124 # +;
+#X obj 12 167 # max 0;
+#X obj 12 146 # min 255;
+#X obj 12 16 inlet;
+#X obj 58 101 #outer *>>8;
+#X obj 130 69 inlet;
+#X obj 60 73 # << 2;
+#X connect 0 0 9 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 3 1;
+#X connect 8 0 7 1;
+#X connect 9 0 7 0;
+#X restore 78 400 pd apply shading;
+#X obj 47 -27 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 47 348 #store;
+#X obj 47 25 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 164 130 # + 10;
+#X text 187 278 shading on/off;
+#X obj 47 240 shunt 2;
+#X floatatom 106 108 5 0 0 0 - - -;
+#X obj 47 195 # *>>8;
+#X obj 164 310 loadbang;
+#X obj 164 21 loadbang;
+#X obj 78 462 print;
+#X obj 164 149 # inv* 10000;
+#N canvas 392 110 431 233 angle 0;
+#X obj 21 133 #outer atan;
+#X text 81 154 angles to centre;
+#X text 22 13 bang;
+#X obj 21 32 inlet;
+#X obj 21 56 #for -128 128 1;
+#X obj 21 153 outlet 0;
+#X obj 21 90 #t;
+#X connect 0 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 1 0 1;
+#X restore 283 151 pd angle map;
+#X obj 47 151 # *>>8;
+#X obj 46 218 # *>>8;
+#X obj 259 235 hsl 128 15 -256 256 0 1 empty empty empty -2 -6 0 8
+-260818 -1 -1 12600 1;
+#X obj 259 252 hsl 128 15 -256 256 0 1 empty empty empty -2 -6 0 8
+-260818 -1 -1 3200 1;
+#N canvas 637 537 387 220 compute 1;
+#X obj 8 113 #store;
+#X obj 55 113 # sin* 64;
+#X obj 55 71 #for 0 1024 1;
+#X obj 55 50 loadbang;
+#X obj 55 92 # * 900;
+#X obj 125 51 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 8 135 outlet;
+#X text 75 151 This is somewhat like [# sin];
+#X text 75 166 but much faster (lookup table);
+#X obj 8 11 inlet;
+#X obj 8 30 #outer ignore (0);
+#X connect 0 0 6 0;
+#X connect 1 0 0 1;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 0 0;
+#X restore 47 128 pd compute sine;
+#X text 232 358 background image;
+#X obj 165 375 #in teapot.png;
+#X obj 165 356 loadbang;
+#X text 215 219 intensity of wave;
+#X obj 47 4 metro 33.3667;
+#X text 246 5 waves.pd is more interesting;
+#X text 225 -9 this is a quite boring wave generator;
+#X text 95 61 table for distance map;
+#X floatatom 216 237 5 0 0 0 - - -;
+#X floatatom 216 253 5 0 0 0 - - -;
+#X obj 157 239 #pack 2;
+#X obj -13 -85 cnv 15 680 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -72 Copyright 2002 Mathieu Bouchard;
+#X text 0 -85 ripple.pd;
+#X obj -15 501 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 508 GridFlow 0.8.0;
+#X text -7 508 GridFlow 0.8.0;
+#X obj 326 429 #color;
+#X text 411 410 color of ripple shading;
+#X obj 164 329 #for (0 0) (256 256) (1 1);
+#X obj 283 170 #outer + (0 9000);
+#X obj 47 173 #outer ignore (0 0);
+#X obj 40 274 #t;
+#X obj 326 391 loadbang;
+#X msg 326 410 255 255 100;
+#X connect 0 0 6 0;
+#X connect 1 0 20 0;
+#X connect 1 0 11 1;
+#X connect 2 0 15 0;
+#X connect 3 0 13 0;
+#X connect 3 1 0 0;
+#X connect 4 0 21 1;
+#X connect 5 0 17 0;
+#X connect 5 0 12 1;
+#X connect 6 0 24 0;
+#X connect 7 0 26 0;
+#X connect 8 0 12 0;
+#X connect 8 1 10 0;
+#X connect 9 0 19 1;
+#X connect 9 0 3 1;
+#X connect 10 0 1 0;
+#X connect 11 0 31 0;
+#X connect 12 0 11 0;
+#X connect 13 0 0 0;
+#X connect 14 0 36 0;
+#X connect 15 0 3 0;
+#X connect 16 0 8 0;
+#X connect 17 0 25 0;
+#X connect 19 0 54 0;
+#X connect 19 1 2 0;
+#X connect 20 0 1 1;
+#X connect 21 0 28 0;
+#X connect 22 0 51 0;
+#X connect 23 0 5 0;
+#X connect 25 0 27 1;
+#X connect 26 0 52 0;
+#X connect 27 0 53 0;
+#X connect 28 0 19 0;
+#X connect 29 0 40 0;
+#X connect 30 0 41 0;
+#X connect 31 0 27 0;
+#X connect 33 0 15 1;
+#X connect 34 0 33 0;
+#X connect 36 0 16 0;
+#X connect 40 0 42 0;
+#X connect 41 0 42 1;
+#X connect 42 0 28 1;
+#X connect 49 0 13 2;
+#X connect 51 0 2 1;
+#X connect 52 0 4 0;
+#X connect 53 0 21 0;
+#X connect 54 0 2 0;
+#X connect 54 1 13 1;
+#X connect 55 0 56 0;
+#X connect 56 0 49 0;
diff --git a/externals/gridflow/examples/sand.pd b/externals/gridflow/examples/sand.pd
new file mode 100644
index 00000000..9e7f2d3d
--- /dev/null
+++ b/externals/gridflow/examples/sand.pd
@@ -0,0 +1,392 @@
+#N canvas 344 26 680 557 10;
+#X text 287 159 disable falling;
+#X obj 2 96 t a a;
+#X obj 323 314 # != 0;
+#X obj 384 352 #fold +;
+#X obj 8 442 s position;
+#X obj 192 29 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 323 371 #export;
+#X obj 192 82 #store;
+#X obj 217 113 shunt 2;
+#N canvas 25 226 369 359 mouse 0;
+#X text 143 214 is there a click?;
+#X obj 44 114 != 0;
+#X text 112 256 coordinates;
+#X obj 19 8 inlet;
+#X text 56 9 #out's outlet 0;
+#X obj 44 93 >> 8;
+#X obj 65 237 listsublist 0 2;
+#X obj 16 31 route position;
+#X obj 94 214 outlet;
+#X obj 65 257 outlet;
+#X obj 16 214 shunt 2;
+#X obj 44 72 listelement 2;
+#X obj 16 51 t a a;
+#X connect 1 0 8 0;
+#X connect 1 0 10 1;
+#X connect 3 0 7 0;
+#X connect 5 0 1 0;
+#X connect 6 0 9 0;
+#X connect 7 0 12 0;
+#X connect 10 1 6 0;
+#X connect 11 0 5 0;
+#X connect 12 0 10 0;
+#X connect 12 1 11 0;
+#X restore 366 132 pd mouse click/drag;
+#X obj 327 132 # / 2;
+#X obj 323 333 #ravel;
+#X obj 217 158 shunt 2;
+#X obj 34 96 s size;
+#X obj 323 352 #fold +;
+#X obj 420 95 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 452 358 #export;
+#X obj 452 320 #ravel;
+#X obj 306 220 shunt 2;
+#X obj 271 159 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 384 371 #export;
+#X obj 367 94 shunt 2;
+#X obj 2 230 #greyscale_to_rgb;
+#X obj 367 113 r position;
+#N canvas 364 105 496 344 falling 0;
+#X obj 42 147 # +;
+#X text 227 189 vertical falling;
+#X obj 42 40 inlet;
+#X text 83 40 Dim[rows \, columns \, {height}];
+#X obj 42 168 # +;
+#X obj 42 209 # +;
+#X text 95 250 Dim[rows \, columns \, {height}];
+#X text 216 129 horizontal falling;
+#X obj 42 230 # +;
+#X obj 42 103 #store;
+#X obj 42 249 outlet;
+#X obj 42 84 #finished;
+#X obj 110 209 #convolve (2 1 # 1 1) \, fold inv+;
+#X obj 110 230 #convolve (3 1 # 1 1 0) \, fold inv+;
+#X obj 69 209 # / 4;
+#X obj 69 230 # / 4;
+#X obj 69 147 # / 4;
+#X obj 69 168 # / 4;
+#X obj 108 147 #convolve (1 2 # 1 1) \, fold inv+;
+#X obj 109 168 #convolve (1 3 # 1 1 0) \, fold inv+;
+#X obj 159 78 # rand;
+#X obj 123 116 # +;
+#X obj 42 59 t a a a;
+#X obj 159 59 # put 128;
+#X obj 159 97 # - 32;
+#X obj 159 116 # div 50;
+#X connect 0 0 4 0;
+#X connect 2 0 22 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 8 0 10 0;
+#X connect 9 0 0 0;
+#X connect 11 0 9 0;
+#X connect 12 0 14 0;
+#X connect 13 0 15 0;
+#X connect 14 0 5 1;
+#X connect 15 0 8 1;
+#X connect 16 0 0 1;
+#X connect 17 0 4 1;
+#X connect 18 0 16 0;
+#X connect 19 0 17 0;
+#X connect 20 0 24 0;
+#X connect 21 0 18 0;
+#X connect 21 0 19 0;
+#X connect 21 0 12 0;
+#X connect 21 0 13 0;
+#X connect 22 0 11 0;
+#X connect 22 1 9 1;
+#X connect 22 1 21 0;
+#X connect 22 2 23 0;
+#X connect 23 0 20 0;
+#X connect 24 0 25 0;
+#X connect 25 0 21 1;
+#X restore 217 178 pd falling sand;
+#X obj 2 170 shunt 3;
+#X obj 2 480 print;
+#X obj 197 65 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 210 27 auto;
+#N canvas 301 45 536 447 finger 0;
+#X obj 192 7 inlet;
+#X obj 36 78 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 112 244 # / 20;
+#X obj 112 297 # *;
+#X obj 13 244 #store;
+#X obj 14 18 inlet;
+#X obj 279 51 loadbang;
+#X obj 13 38 t a a;
+#X obj 112 225 #fold +;
+#X text 22 159 "dig" the sphere into the sand;
+#X text 240 104 compute a halfsphere;
+#X obj 192 29 # - 32;
+#X obj 112 206 #ravel;
+#N canvas 1 58 415 284 make 0;
+#X obj 28 129 #fold +;
+#X obj 28 66 # -;
+#X obj 28 108 @! sq;
+#X obj 28 45 #for ( -32 -32 ) ( 32 32 ) ( 1 1 );
+#X obj 28 171 outlet;
+#X obj 28 87 # << 2;
+#X obj 28 150 @! sqrt;
+#X text 63 21 bang;
+#X obj 27 20 inlet;
+#X text 98 92 make distance map;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 4 0;
+#X connect 8 0 3 0;
+#X restore 259 74 pd make distance map with center 32;
+#X obj 13 420 outlet;
+#X obj 260 53 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 122 262 find out how high the compensation torus should be
+;
+#X obj 112 316 # div 256;
+#X obj 36 58 route grid;
+#X obj 13 225 #finished;
+#X obj 13 206 t a a;
+#N canvas 669 471 315 202 halfsphere 0;
+#X obj 45 19 inlet distancemap;
+#X obj 45 143 outlet image;
+#X obj 46 102 @! sqrt;
+#X obj 46 122 #outer ignore ( 0 );
+#X obj 46 62 # inv+ 200;
+#X text 121 63 16 * radius^2;
+#X obj 46 41 @! sq;
+#X obj 46 82 # max 0;
+#X connect 0 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 7 0;
+#X connect 6 0 4 0;
+#X connect 7 0 2 0;
+#X restore 126 120 pd halfsphere;
+#N canvas 0 0 323 279 torus 0;
+#X obj 59 26 inlet;
+#X obj 56 185 outlet;
+#X obj 57 97 # inv+ 200;
+#X obj 57 76 @! sq;
+#X text 102 54 toroidal radius;
+#X obj 57 162 #outer ignore ( 0 );
+#X obj 56 120 # max 0;
+#X text 138 99 16*radius^2;
+#X obj 57 141 @! sqrt;
+#X obj 57 56 # - 20;
+#X connect 0 0 9 0;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 5 0 1 0;
+#X connect 6 0 8 0;
+#X connect 8 0 5 0;
+#X connect 9 0 3 0;
+#X restore 259 326 pd torus;
+#X text 66 415 put extra sand as a ring around the hole;
+#X obj 112 278 #redim (64 64 1);
+#X obj 13 397 #draw_image - (1 1 1 #) (0 0);
+#X obj 13 141 #draw_image - (1 1 1 #) (0 0);
+#X obj 13 343 shunt 2;
+#X obj 64 343 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X connect 0 0 11 0;
+#X connect 1 0 15 0;
+#X connect 2 0 24 0;
+#X connect 3 0 17 0;
+#X connect 4 0 27 0;
+#X connect 5 0 7 0;
+#X connect 6 0 13 0;
+#X connect 7 0 26 0;
+#X connect 7 1 18 0;
+#X connect 8 0 2 0;
+#X connect 11 0 25 2;
+#X connect 11 0 26 2;
+#X connect 12 0 8 0;
+#X connect 13 0 21 0;
+#X connect 13 0 22 0;
+#X connect 15 0 13 0;
+#X connect 17 0 25 1;
+#X connect 18 0 1 0;
+#X connect 19 0 4 0;
+#X connect 20 0 19 0;
+#X connect 20 1 12 0;
+#X connect 20 1 4 1;
+#X connect 21 0 26 1;
+#X connect 22 0 3 1;
+#X connect 24 0 3 0;
+#X connect 25 0 14 0;
+#X connect 26 0 20 0;
+#X connect 27 0 25 0;
+#X connect 27 1 14 0;
+#X connect 28 0 27 1;
+#X restore 260 132 pd finger;
+#X obj 360 286 # -;
+#X obj 384 333 #ravel;
+#X msg 2 56 240 320;
+#X obj 452 339 #fold +;
+#X obj 2 211 # + 128;
+#X text 375 220 enable stats;
+#X text 289 411 checking for conservation of amounts of sand;
+#X msg 2 115 \$1 \$2 1 # 0;
+#N canvas 499 117 441 278 lighting 0;
+#X obj 28 234 outlet;
+#X obj 27 18 inlet;
+#X text 184 103 colourize the horizontal differences;
+#X text 184 149 colourize the vertical differences;
+#X obj 60 149 #outer & (0 -1 0);
+#X obj 60 129 #convolve (4 1 # 1 -8 8 -1);
+#X obj 60 84 #convolve (1 4 # 1 -8 8 -1);
+#X obj 28 177 # << 2;
+#X obj 28 215 #clip;
+#X obj 28 196 # + (220 200 180);
+#X obj 27 37 #t;
+#X obj 28 56 #greyscale_to_rgb;
+#X obj 28 104 # +;
+#X obj 28 149 # +;
+#X obj 60 104 #outer & (-1 0 0);
+#X connect 1 0 10 0;
+#X connect 4 0 13 1;
+#X connect 5 0 4 0;
+#X connect 6 0 14 0;
+#X connect 7 0 9 0;
+#X connect 8 0 0 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 10 1 6 0;
+#X connect 10 1 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 7 0;
+#X connect 14 0 12 1;
+#X restore 24 298 pd lighting;
+#X obj 2 461 fps detailed;
+#X obj 359 221 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 213 65 step;
+#X obj 67 183 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
+-1 1;
+#X obj 2 422 #out window;
+#X obj 323 392 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 384 392 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 452 377 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X text 87 196 differential;
+#X text 86 181 heightmap;
+#X text 86 212 topographic;
+#X obj 152 82 t a a;
+#X obj 217 220 t a a;
+#X obj 2 37 loadbang;
+#X text 436 95 disable finger;
+#X obj 350 264 t a a;
+#X obj 2 192 # << 2;
+#X obj -15 499 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 506 GridFlow 0.8.0;
+#X text -7 506 GridFlow 0.8.0;
+#X obj -13 -25 cnv 15 680 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -25 sand.pd;
+#X text -1 21 set size & reset;
+#X obj 2 249 #clip;
+#X obj 24 279 # << 0;
+#X obj 68 144 loadbang;
+#X msg 68 163 1;
+#X obj 270 115 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 8 76 120 160;
+#X obj 192 46 metro 33.3667;
+#X obj 2 400 #scale_by 2;
+#N canvas 0 0 450 300 topographic 0;
+#X obj 35 18 inlet;
+#X obj 35 170 #greyscale_to_rgb;
+#X obj 35 37 #convolve (3 3 # 1 2 1 2 4 2);
+#X obj 35 151 #clip;
+#X obj 35 56 # & 127;
+#X obj 35 189 outlet;
+#X obj 35 75 # abs- 108;
+#X obj 35 94 # min 20;
+#X obj 35 113 # inv+ 20;
+#X obj 35 132 # << 5;
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 3 0;
+#X restore 46 317 pd topographic;
+#X text 0 -12 Copyright 2002 \, 2006 Mathieu Bouchard;
+#X obj 384 314 # abs-;
+#X connect 1 0 37 0;
+#X connect 1 1 13 0;
+#X connect 2 0 11 0;
+#X connect 3 0 20 0;
+#X connect 5 0 68 0;
+#X connect 6 0 44 0;
+#X connect 7 0 8 0;
+#X connect 8 0 12 0;
+#X connect 8 1 29 0;
+#X connect 9 0 10 0;
+#X connect 9 1 21 0;
+#X connect 10 0 29 1;
+#X connect 11 0 14 0;
+#X connect 12 0 24 0;
+#X connect 12 1 51 0;
+#X connect 14 0 6 0;
+#X connect 15 0 21 1;
+#X connect 16 0 46 0;
+#X connect 17 0 33 0;
+#X connect 18 1 17 0;
+#X connect 18 1 54 0;
+#X connect 19 0 12 1;
+#X connect 20 0 45 0;
+#X connect 21 0 8 1;
+#X connect 22 0 62 0;
+#X connect 23 0 9 0;
+#X connect 24 0 51 0;
+#X connect 25 0 55 0;
+#X connect 25 1 63 0;
+#X connect 25 2 70 0;
+#X connect 27 0 7 0;
+#X connect 29 0 12 0;
+#X connect 30 0 2 0;
+#X connect 30 0 72 0;
+#X connect 31 0 3 0;
+#X connect 32 0 1 0;
+#X connect 33 0 16 0;
+#X connect 34 0 22 0;
+#X connect 37 0 50 0;
+#X connect 38 0 69 0;
+#X connect 39 0 26 0;
+#X connect 40 0 18 1;
+#X connect 42 0 25 1;
+#X connect 43 0 39 0;
+#X connect 43 0 4 0;
+#X connect 50 0 25 0;
+#X connect 50 1 7 1;
+#X connect 51 0 50 0;
+#X connect 51 1 18 0;
+#X connect 52 0 32 0;
+#X connect 54 0 30 1;
+#X connect 54 1 30 0;
+#X connect 55 0 34 0;
+#X connect 62 0 69 0;
+#X connect 63 0 38 0;
+#X connect 64 0 65 0;
+#X connect 65 0 42 0;
+#X connect 66 0 8 1;
+#X connect 67 0 1 0;
+#X connect 68 0 7 0;
+#X connect 69 0 43 0;
+#X connect 70 0 69 0;
+#X connect 72 0 31 0;
diff --git a/externals/gridflow/examples/scratch_video.pd b/externals/gridflow/examples/scratch_video.pd
new file mode 100644
index 00000000..b97c0712
--- /dev/null
+++ b/externals/gridflow/examples/scratch_video.pd
@@ -0,0 +1,43 @@
+#N canvas 694 45 580 451 10;
+#X obj 119 273 listelement 1;
+#X floatatom 119 292 5 0 0 0 - - -;
+#X floatatom 246 217 5 0 0 0 - - -;
+#X obj 119 254 route position;
+#X obj 119 177 #in;
+#X obj -13 0 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -16 417 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 0 13 Copyright 2003 Alexandre Castonguay;
+#X text -4 38 Use the mouse position to scratch the video \, a touchscreen
+works well.;
+#X obj 119 235 #out window;
+#X text 290 215 <-- frame number;
+#X text 223 272 <-- get x values;
+#X obj 92 130 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 0 0 scratch_video.pd;
+#X text 16 424 GridFlow 0.9.0;
+#X obj 119 334 s frame_number;
+#X obj 119 86 r frame_number;
+#X floatatom 78 338 5 0 0 0 - - -;
+#X msg 197 141 open violoncelle.mov;
+#X msg 237 82 get;
+#X obj 169 194 route frames;
+#X floatatom 169 216 5 0 0 0 - - -;
+#X text 336 140 320 x 240 \, 128 frames;
+#X obj 119 311 / 2.8;
+#X connect 0 0 1 0;
+#X connect 1 0 23 0;
+#X connect 3 0 0 0;
+#X connect 4 0 9 0;
+#X connect 4 1 2 0;
+#X connect 4 1 20 0;
+#X connect 9 0 3 0;
+#X connect 12 0 4 0;
+#X connect 16 0 4 0;
+#X connect 18 0 4 0;
+#X connect 19 0 4 0;
+#X connect 20 0 21 0;
+#X connect 23 0 15 0;
+#X connect 23 0 17 0;
diff --git a/externals/gridflow/examples/slitscanning.pd b/externals/gridflow/examples/slitscanning.pd
new file mode 100644
index 00000000..fe2927f0
--- /dev/null
+++ b/externals/gridflow/examples/slitscanning.pd
@@ -0,0 +1,54 @@
+#N canvas 398 50 401 530 10;
+#X obj 18 460 #out window;
+#X obj 18 205 #store;
+#X obj 18 178 #store;
+#X obj 93 122 loadbang;
+#X obj 18 106 t b b;
+#X obj 34 353 @join 0;
+#X obj 18 55 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X obj 18 432 #store;
+#X obj 34 284 #t;
+#X obj 18 228 #t;
+#X obj 78 301 b;
+#X obj 18 256 b;
+#X obj 18 411 #store;
+#X obj 106 349 loadbang;
+#X obj 18 83 metro 33.3333;
+#X obj 0 498 cnv 15 400 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 8 505 GridFlow 0.9.0;
+#X obj 1 0 cnv 15 400 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 14 0 slitscanning.pd;
+#X text 14 13 Copyright 2007 Roman Haefeli;
+#X text 38 55 <- start / stop;
+#X text 155 182 <- set dimensions to 240 320;
+#X obj 96 181 cnv 15 50 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 96 182 #camera;
+#X obj 55 153 #for (119 0) (120 320) (1 1);
+#X obj 77 323 #store (600 320 3 #);
+#X obj 97 376 #for (0 0) (600 320) (1 1);
+#X connect 1 0 9 0;
+#X connect 2 0 1 0;
+#X connect 3 0 24 0;
+#X connect 4 0 2 0;
+#X connect 4 1 23 0;
+#X connect 5 0 7 1;
+#X connect 6 0 14 0;
+#X connect 7 0 0 0;
+#X connect 7 0 25 1;
+#X connect 8 0 5 0;
+#X connect 8 1 10 0;
+#X connect 9 0 11 0;
+#X connect 9 1 8 0;
+#X connect 10 0 25 0;
+#X connect 11 0 12 0;
+#X connect 12 0 7 0;
+#X connect 13 0 26 0;
+#X connect 14 0 4 0;
+#X connect 23 0 1 1;
+#X connect 24 0 2 1;
+#X connect 25 0 5 1;
+#X connect 26 0 12 1;
diff --git a/externals/gridflow/examples/spectrogram.pd b/externals/gridflow/examples/spectrogram.pd
new file mode 100644
index 00000000..fb6730d2
--- /dev/null
+++ b/externals/gridflow/examples/spectrogram.pd
@@ -0,0 +1,108 @@
+#N canvas 370 65 588 508 10;
+#X msg 147 208 reset;
+#X obj 21 50 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 297 54 adc~;
+#X obj 38 170 tabread4 array1;
+#X obj 21 69 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 332 55 table array1 1024;
+#X obj 208 212 loadbang;
+#X obj 191 214 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 0 0 306 167 analysis 0;
+#X obj 24 -205 inlet~;
+#X obj 26 -135 tabsend~ array1;
+#X obj 24 -184 rfft~;
+#X obj 25 -157 expr~ sqrt($v1*$v1+$v2*$v2)/64;
+#X obj 148 -198 block~ 1024;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 3 1;
+#X connect 3 0 1 0;
+#X restore 298 77 pd analysis;
+#X obj 284 256 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X obj 190 291 loadbang;
+#X obj 173 293 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 38 68 for 0 320 1;
+#X obj 38 189 * 2000;
+#X text 303 257 black stripes;
+#X text 302 270 graph;
+#X obj 38 117 / 2;
+#X text 83 189 <-- adding some extra gain;
+#X obj 81 138 exp;
+#X obj 194 136 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 216 136 linear;
+#X text 214 150 logarithmic;
+#X obj 82 117 / 51;
+#X obj 38 395 #fade;
+#X obj 130 396 loadbang;
+#X msg 79 395 16 4 1;
+#X obj 38 49 metro 23.22;
+#X text 115 117 = 1000*1024/44100;
+#X obj 38 208 #import ( 320 );
+#X obj 38 227 # *>>8;
+#X obj 38 246 #fade 2;
+#X obj 38 309 # inv+ 255;
+#X obj 113 292 #outer <;
+#X obj 113 311 # * 255;
+#X obj 113 330 #transpose;
+#X obj 38 357 #redim (120 320 1);
+#X obj 38 376 #greyscale_to_rgb;
+#X obj 38 414 #clip;
+#X obj 38 433 #scale_by 2;
+#X obj 38 452 #out window;
+#X obj 6 476 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 14 483 GridFlow 0.8.0;
+#X text 14 483 GridFlow 0.8.0;
+#X obj 6 5 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 19 5 spectrogram.pd;
+#X obj 173 310 #for 120 0 -1;
+#X obj 191 231 #for 0 320 1;
+#X obj 191 250 # + 10;
+#X text 19 18 Copyright 2004 Mathieu Bouchard;
+#X obj 38 91 shunt 2;
+#X obj 38 265 shunt 2;
+#X connect 0 0 28 0;
+#X connect 1 0 26 0;
+#X connect 2 0 8 0;
+#X connect 2 1 8 0;
+#X connect 3 0 13 0;
+#X connect 4 0 12 0;
+#X connect 6 0 7 0;
+#X connect 7 0 46 0;
+#X connect 9 0 50 1;
+#X connect 10 0 11 0;
+#X connect 11 0 45 0;
+#X connect 12 0 49 0;
+#X connect 13 0 28 0;
+#X connect 16 0 3 0;
+#X connect 18 0 3 0;
+#X connect 19 0 49 1;
+#X connect 22 0 18 0;
+#X connect 23 0 37 0;
+#X connect 24 0 25 0;
+#X connect 25 0 23 1;
+#X connect 26 0 12 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 30 0 50 0;
+#X connect 31 0 35 0;
+#X connect 32 0 33 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 23 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 45 0 32 1;
+#X connect 46 0 47 0;
+#X connect 47 0 29 1;
+#X connect 49 0 16 0;
+#X connect 49 1 22 0;
+#X connect 50 0 31 0;
+#X connect 50 1 32 0;
diff --git a/externals/gridflow/examples/threshold.pd b/externals/gridflow/examples/threshold.pd
new file mode 100644
index 00000000..0b90b07f
--- /dev/null
+++ b/externals/gridflow/examples/threshold.pd
@@ -0,0 +1,78 @@
+#N canvas 660 79 581 531 10;
+#X obj 72 208 inv+ 0;
+#X obj 40 8 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 99 57 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X floatatom 124 224 5 0 0 0 - - -;
+#X obj 124 91 vsl 15 128 0 256 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 40 67 shunt 2;
+#X text 7 104 simple per-channel threshold;
+#X text 276 53 bluescreen luma threshold;
+#X text 340 195 here we have a mask;
+#X text 320 207 (alpha as separate image);
+#X obj 257 278 @join 2;
+#X text 346 226 make a RGBA image;
+#X obj 270 88 t b a a;
+#X text 210 379 = medium blue;
+#X obj 257 221 t a a;
+#X obj 121 416 fps;
+#X floatatom 146 418 5 0 0 0 - - -;
+#X obj 40 29 metro 100;
+#X msg 70 378 240 320 3 # 0 0 170;
+#X text 279 68 with alpha channel;
+#X text 13 349 you could also load a picture;
+#X text 13 361 instead of using uniform blue;
+#X text 58 10 1000/100 = 10 fps (max) (adjustable);
+#X obj 40 48 #camera;
+#X obj -13 -45 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -32 Copyright 2002 Mathieu Bouchard;
+#X obj -15 450 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 457 GridFlow 0.8.0;
+#X text -7 457 GridFlow 0.8.0;
+#X text 0 -45 threshold.pd;
+#X obj 257 259 #store;
+#X obj 257 240 #finished;
+#X obj 314 145 # * 255;
+#X obj 314 126 # >=;
+#X obj 314 107 #rgb_to_greyscale;
+#X obj 70 397 #draw_image put \, alpha 1;
+#X obj 40 166 # -;
+#X obj 40 185 # max 0;
+#X obj 40 208 # ||;
+#X obj 40 227 # +;
+#X obj 40 416 #out window;
+#X text 387 -38 see also color_detect.pd;
+#X connect 0 0 38 1;
+#X connect 1 0 17 0;
+#X connect 2 0 5 1;
+#X connect 3 0 0 0;
+#X connect 3 0 33 1;
+#X connect 3 0 36 1;
+#X connect 3 0 39 1;
+#X connect 4 0 3 0;
+#X connect 5 0 36 0;
+#X connect 5 1 12 0;
+#X connect 10 0 35 1;
+#X connect 12 0 18 0;
+#X connect 12 1 14 0;
+#X connect 12 2 34 0;
+#X connect 14 0 31 0;
+#X connect 14 1 30 1;
+#X connect 15 0 16 0;
+#X connect 17 0 23 0;
+#X connect 18 0 35 0;
+#X connect 23 0 5 0;
+#X connect 30 0 10 0;
+#X connect 31 0 30 0;
+#X connect 32 0 10 1;
+#X connect 33 0 32 0;
+#X connect 34 0 33 0;
+#X connect 35 0 40 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 15 0;
diff --git a/externals/gridflow/examples/transform.pd b/externals/gridflow/examples/transform.pd
new file mode 100644
index 00000000..d8785933
--- /dev/null
+++ b/externals/gridflow/examples/transform.pd
@@ -0,0 +1,61 @@
+#N canvas 726 225 674 481 10;
+#X obj 136 286 #remap_image;
+#X obj 136 324 #out window;
+#X obj 125 103 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 294 376 # -;
+#X obj 294 202 t a a a;
+#X obj 356 261 # % 2;
+#X obj 356 280 # * -2;
+#X obj 356 299 # + 1;
+#X obj 316 300 # *;
+#X obj 403 230 # / 2;
+#X obj 377 167 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -261681
+-1 -1 0 1;
+#X obj 316 281 # -;
+#X obj 374 190 t f;
+#X obj 316 262 # %;
+#X obj 356 242 # /;
+#X obj 186 214 #camera;
+#X obj 125 120 metro 10;
+#X obj 8 442 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 449 GridFlow 0.8.0;
+#X obj 374 449 #reverse;
+#X text 293 450 see also :;
+#X obj 1 -2 cnv 15 720 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 4 -2 Transform.pd;
+#X obj 95 215 #in r001.jpg;
+#X obj 125 139 shunt;
+#X obj 164 140 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 68 32 By Mathieu Bouchard \, based on Clifford Smith's 'Transform'
+effect that is part of Fukuchi Kentaro's EffecTV : http://effectv.sourceforge.net
+;
+#X text 187 138 <-- choose from a still image or camera input;
+#X connect 0 0 1 0;
+#X connect 0 1 4 0;
+#X connect 2 0 16 0;
+#X connect 3 0 0 1;
+#X connect 4 0 3 0;
+#X connect 4 1 13 0;
+#X connect 4 2 14 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 1;
+#X connect 8 0 3 1;
+#X connect 9 0 11 1;
+#X connect 10 0 12 0;
+#X connect 11 0 8 0;
+#X connect 12 0 9 0;
+#X connect 12 0 13 1;
+#X connect 12 0 14 1;
+#X connect 13 0 11 0;
+#X connect 14 0 5 0;
+#X connect 15 0 0 0;
+#X connect 16 0 24 0;
+#X connect 23 0 0 0;
+#X connect 24 0 23 0;
+#X connect 24 1 15 0;
+#X connect 25 0 24 1;
diff --git a/externals/gridflow/examples/translation_tracker.pd b/externals/gridflow/examples/translation_tracker.pd
new file mode 100644
index 00000000..a78b0068
--- /dev/null
+++ b/externals/gridflow/examples/translation_tracker.pd
@@ -0,0 +1,162 @@
+#N canvas 734 0 486 689 10;
+#X obj 28 15 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 1 1
+;
+#X obj 172 7 bng 15 250 50 0 empty empty empty 17 7 0 10 -241291 -1
+-1;
+#X obj 189 12 loadbang;
+#X obj 28 120 #remap_image;
+#X floatatom 378 62 5 0 0 0 - - -;
+#X obj 345 83 #pack;
+#X obj 28 195 #cast f;
+#X obj 28 492 #cast i;
+#X obj 172 195 #cast f;
+#X obj 172 233 #fft;
+#X obj 172 214 #outer * (2 f # 1 0);
+#X obj 28 511 #rgb_to_greyscale;
+#X obj 29 648 display;
+#X obj 28 361 # C.*conj;
+#X obj 28 530 #t;
+#X obj 28 609 # >=;
+#X obj 28 628 #moment;
+#X floatatom 378 42 5 0 0 0 - - -;
+#X obj 193 610 #moment;
+#X obj 194 633 display;
+#X obj 191 567 #clip;
+#X text 241 459 this is the same as magnitude;
+#X text 244 472 because imaginary = 0 here;
+#X obj 28 101 #store;
+#X obj 28 51 shunt;
+#X obj 65 52 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0 1
+;
+#X obj 58 70 #camera;
+#X obj 228 121 gf.oneshot;
+#X obj 189 121 t a a;
+#X obj 301 122 bng 15 250 50 0 empty empty empty 17 7 0 10 -260818
+-1 -1;
+#X obj 141 645 fps;
+#X obj 142 665 display;
+#X obj 141 626 bang;
+#X obj 331 216 # inv* (f # 1);
+#X obj 172 252 # * (f #);
+#X obj 189 31 t b b;
+#X obj 233 164 #window A;
+#X obj 83 182 #window B;
+#X obj 148 183 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 298 165 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 320 587 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 44 568 #fold max;
+#X obj 44 549 #ravel;
+#X text 83 431 this bufferises the data to avoid an alignment warning
+;
+#X obj 331 235 # sq- (f #);
+#X obj 116 120 # -;
+#X obj 11 36 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 28 240 #fft \, real;
+#X obj 350 280 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 28 311 t a;
+#X obj 262 291 #cast i;
+#X obj 262 386 #clip;
+#X obj 172 63 #in pure-data.jpg;
+#X msg 331 197 list f # 76800;
+#X obj 262 310 # sq-;
+#X obj 262 272 spigot;
+#X obj 262 329 #fold +;
+#X obj 262 348 # sqrt;
+#X obj 262 405 #window D;
+#X obj 350 261 loadbang;
+#X obj 191 586 #window C;
+#X obj 191 510 spigot;
+#X obj 320 568 loadbang;
+#X obj 28 449 #fft \, sign 1 \, real;
+#X obj 262 367 # >> 4;
+#X obj 28 32 metro 33.3667;
+#X obj 191 548 # -;
+#X obj 192 529 # >> 6;
+#X obj 216 550 nbx 3 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-262144 -1 -1 256 256;
+#X obj 67 408 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 28 407 shunt;
+#X obj 58 430 #t;
+#X connect 0 0 65 0;
+#X connect 1 0 52 0;
+#X connect 2 0 35 0;
+#X connect 3 0 37 0;
+#X connect 3 0 6 0;
+#X connect 3 1 45 0;
+#X connect 4 0 5 1;
+#X connect 5 0 45 1;
+#X connect 6 0 47 0;
+#X connect 7 0 11 0;
+#X connect 7 0 61 0;
+#X connect 8 0 10 0;
+#X connect 9 0 34 0;
+#X connect 10 0 9 0;
+#X connect 11 0 14 0;
+#X connect 11 0 18 0;
+#X connect 13 0 70 0;
+#X connect 14 0 15 0;
+#X connect 14 1 42 0;
+#X connect 15 0 16 0;
+#X connect 16 0 12 0;
+#X connect 16 0 32 0;
+#X connect 17 0 5 0;
+#X connect 18 0 19 0;
+#X connect 20 0 60 0;
+#X connect 23 0 3 0;
+#X connect 24 0 23 0;
+#X connect 24 1 26 0;
+#X connect 25 0 24 1;
+#X connect 26 0 28 0;
+#X connect 27 0 36 0;
+#X connect 27 0 8 0;
+#X connect 28 0 6 0;
+#X connect 28 1 27 0;
+#X connect 29 0 27 1;
+#X connect 30 0 31 0;
+#X connect 32 0 30 0;
+#X connect 33 0 44 0;
+#X connect 34 0 13 1;
+#X connect 35 0 52 0;
+#X connect 35 1 53 0;
+#X connect 38 0 37 1;
+#X connect 39 0 36 1;
+#X connect 40 0 60 1;
+#X connect 40 0 61 1;
+#X connect 41 0 15 1;
+#X connect 42 0 41 0;
+#X connect 44 0 34 1;
+#X connect 45 0 3 1;
+#X connect 46 0 24 0;
+#X connect 47 0 49 0;
+#X connect 48 0 55 1;
+#X connect 48 0 58 1;
+#X connect 49 0 13 0;
+#X connect 49 0 55 0;
+#X connect 50 0 54 0;
+#X connect 51 0 58 0;
+#X connect 52 0 23 1;
+#X connect 52 0 8 0;
+#X connect 53 0 33 0;
+#X connect 54 0 56 0;
+#X connect 55 0 50 0;
+#X connect 56 0 57 0;
+#X connect 57 0 64 0;
+#X connect 59 0 48 0;
+#X connect 61 0 67 0;
+#X connect 62 0 40 0;
+#X connect 63 0 7 0;
+#X connect 64 0 51 0;
+#X connect 65 0 24 0;
+#X connect 66 0 20 0;
+#X connect 67 0 66 0;
+#X connect 68 0 66 1;
+#X connect 69 0 70 1;
+#X connect 70 0 63 0;
+#X connect 70 1 71 0;
+#X connect 71 0 63 0;
diff --git a/externals/gridflow/examples/translation_tracker2.pd b/externals/gridflow/examples/translation_tracker2.pd
new file mode 100644
index 00000000..56eeb2e9
--- /dev/null
+++ b/externals/gridflow/examples/translation_tracker2.pd
@@ -0,0 +1,126 @@
+#N canvas 770 0 450 674 10;
+#X obj 6 6 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1;
+#X obj 36 170 #cast f;
+#X obj 36 208 #fft;
+#X obj 36 327 #cast i;
+#X obj 36 189 #outer * (2 f # 1 0);
+#X obj 180 170 #cast f;
+#X obj 180 208 #fft;
+#X obj 180 189 #outer * (2 f # 1 0);
+#X obj 36 279 #fft \, sign -1;
+#X obj 36 151 # - 128;
+#X obj 180 151 # - 128;
+#X obj 36 346 #rgb_to_greyscale;
+#X obj 36 260 # C.*conj;
+#X obj 52 403 #fold max;
+#X obj 36 365 #t;
+#X obj 36 424 # >=;
+#X obj 36 443 #moment;
+#X obj 199 401 #out window;
+#X obj 199 382 #clip;
+#X obj 199 363 # + 128;
+#X obj 36 298 #inner (2 f # 1 0) \, seed (f #);
+#X text 249 294 this is the same as magnitude;
+#X text 252 307 because imaginary = 0 here;
+#X obj 36 61 #camera;
+#X obj 296 467 fps;
+#X obj 297 486 display;
+#X obj 296 448 bang;
+#X obj 331 232 # inv* (f # 1);
+#X obj 328 151 loadbang;
+#X msg 328 207 list f # 172800;
+#X obj 36 227 # * (f #);
+#X obj 180 228 # * (f #);
+#X obj 52 384 #ravel;
+#X msg 332 178 list f # 76800;
+#X obj 27 119 #out window;
+#X obj 35 483 # % (240 320);
+#X obj 35 502 # - (120 160);
+#X obj 35 464 # + (120 160);
+#X floatatom 252 365 5 0 0 0 - - -;
+#X obj 199 344 # >> 5;
+#X obj 35 521 # +;
+#X obj 60 521 t a;
+#X msg 166 514 240 320;
+#X obj 136 459 loadbang;
+#X obj 89 80 s \$0-meuh;
+#X obj 88 606 r \$0-meuh;
+#X obj 6 42 t b b;
+#X obj 6 647 #out window;
+#X obj 35 540 #export_list;
+#X obj 52 628 #store;
+#X obj 35 559 t b a;
+#X obj 272 558 display;
+#X msg 74 559 put_at ( \$1 \$2 0 );
+#X obj 136 495 t b b;
+#X obj 136 478 bng 15 250 50 0 empty empty empty 17 7 0 10 -260818
+-1 -1;
+#X obj 6 23 metro 100;
+#X msg 136 533 720 960 3 #;
+#X obj 6 628 #store;
+#X obj 36 80 t a a a;
+#X msg 12 585 op avg;
+#X connect 0 0 55 0;
+#X connect 1 0 4 0;
+#X connect 2 0 30 0;
+#X connect 3 0 11 0;
+#X connect 3 0 39 0;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 6 0 31 0;
+#X connect 7 0 6 0;
+#X connect 8 0 20 0;
+#X connect 9 0 1 0;
+#X connect 10 0 5 0;
+#X connect 11 0 14 0;
+#X connect 12 0 8 0;
+#X connect 13 0 15 1;
+#X connect 14 0 15 0;
+#X connect 14 1 32 0;
+#X connect 15 0 16 0;
+#X connect 16 0 26 0;
+#X connect 16 0 37 0;
+#X connect 18 0 17 0;
+#X connect 19 0 18 0;
+#X connect 20 0 3 0;
+#X connect 23 0 58 0;
+#X connect 24 0 25 0;
+#X connect 26 0 24 0;
+#X connect 27 0 30 1;
+#X connect 27 0 31 1;
+#X connect 28 0 33 0;
+#X connect 29 0 27 0;
+#X connect 30 0 12 0;
+#X connect 31 0 12 1;
+#X connect 32 0 13 0;
+#X connect 33 0 27 0;
+#X connect 35 0 36 0;
+#X connect 36 0 40 0;
+#X connect 37 0 35 0;
+#X connect 38 0 19 1;
+#X connect 39 0 19 0;
+#X connect 40 0 41 0;
+#X connect 40 0 48 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 54 0;
+#X connect 45 0 49 1;
+#X connect 46 0 57 0;
+#X connect 46 1 23 0;
+#X connect 48 0 50 0;
+#X connect 48 0 51 0;
+#X connect 49 0 57 1;
+#X connect 50 0 49 0;
+#X connect 50 1 52 0;
+#X connect 52 0 57 1;
+#X connect 53 0 56 0;
+#X connect 53 1 42 0;
+#X connect 54 0 53 0;
+#X connect 55 0 46 0;
+#X connect 56 0 57 1;
+#X connect 57 0 47 0;
+#X connect 58 0 34 0;
+#X connect 58 0 10 0;
+#X connect 58 1 9 0;
+#X connect 58 2 44 0;
+#X connect 59 0 57 0;
diff --git a/externals/gridflow/examples/videodev_effects.pd b/externals/gridflow/examples/videodev_effects.pd
new file mode 100644
index 00000000..22a9d443
--- /dev/null
+++ b/externals/gridflow/examples/videodev_effects.pd
@@ -0,0 +1,264 @@
+#N canvas 623 0 597 657 10;
+#X obj 80 486 tgl 15 0 empty empty crosshair_of_centroid 20 7 0 10
+-241291 -1 -1 1 1;
+#X obj 71 261 # max 0;
+#X obj 27 349 shunt 2;
+#X obj 71 131 #downscale_by 2 smoothly;
+#X obj 27 484 shunt 2;
+#X obj 81 351 tgl 15 0 empty empty gamma_correction 18 7 0 10 -241291
+-1 -1 0 1;
+#X obj 80 176 tgl 15 0 empty empty frame_difference 18 7 0 10 -241291
+-1 -1 0 1;
+#X obj 27 47 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 27 112 shunt 2;
+#X obj 27 541 #out window;
+#X obj 80 113 tgl 15 0 empty empty smaller_picture 18 7 0 10 -241291
+-1 -1 0 1;
+#X obj 27 579 print;
+#X obj 240 382 #for 0 256 1;
+#X floatatom 240 347 5 0 0 0 - - -;
+#X obj 99 243 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 27 295 shunt 2;
+#X obj 173 441 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 27 421 shunt 2;
+#X obj 27 560 fps detailed;
+#X obj 240 309 loadbang;
+#X obj 80 421 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 71 393 #store;
+#N canvas 81 205 480 500 sort 0;
+#X obj 180 257 # * 255;
+#X obj 10 345 # >> 0;
+#X obj 113 472 outlet;
+#X obj 226 42 inlet;
+#X obj 225 191 # / 2;
+#X obj 10 325 # +;
+#X obj 44 9 inlet;
+#X obj 242 150 # - 1;
+#X obj 131 422 # +;
+#X obj 180 238 # < 176;
+#X obj 10 369 #store;
+#X obj 91 28 #grade;
+#X obj 131 444 # >> 1;
+#X obj 283 266 # / 351;
+#X obj 91 47 shunt 2;
+#X obj 135 66 #grade;
+#X obj 144 119 inlet;
+#X text 271 128 extract width;
+#X obj 10 266 #finished;
+#X obj 283 247 # * 255;
+#X obj 91 9 #fold +;
+#X obj 91 119 shunt 4;
+#X obj 117 399 shunt 4;
+#X msg 235 126 \$2;
+#X obj 211 65 #dim;
+#X obj 44 37 t a a;
+#X msg 186 127 \$1 \$2;
+#X obj 211 85 #export_list;
+#X obj 76 146 t a a;
+#X obj 10 285 #for (0 0) (288 352) (1 1);
+#X obj 106 176 #outer & (0 -1);
+#X obj 292 300 #outer ignore (3 #);
+#X obj 10 305 # * (1 0);
+#X connect 0 0 31 0;
+#X connect 1 0 10 0;
+#X connect 3 0 14 1;
+#X connect 4 0 9 1;
+#X connect 5 0 1 0;
+#X connect 6 0 25 0;
+#X connect 7 0 13 1;
+#X connect 8 0 12 0;
+#X connect 9 0 0 0;
+#X connect 10 0 22 0;
+#X connect 11 0 14 0;
+#X connect 12 0 2 0;
+#X connect 13 0 31 0;
+#X connect 14 0 21 0;
+#X connect 14 1 15 0;
+#X connect 15 0 21 0;
+#X connect 16 0 21 1;
+#X connect 16 0 22 1;
+#X connect 18 0 29 0;
+#X connect 19 0 13 0;
+#X connect 20 0 11 0;
+#X connect 21 0 28 0;
+#X connect 21 1 28 0;
+#X connect 21 2 9 0;
+#X connect 21 3 19 0;
+#X connect 22 0 2 0;
+#X connect 22 1 8 0;
+#X connect 23 0 4 0;
+#X connect 23 0 7 0;
+#X connect 24 0 27 0;
+#X connect 25 0 20 0;
+#X connect 25 1 10 1;
+#X connect 25 1 24 0;
+#X connect 25 1 8 1;
+#X connect 26 0 29 1;
+#X connect 27 0 23 0;
+#X connect 27 0 26 0;
+#X connect 28 0 18 0;
+#X connect 28 1 30 0;
+#X connect 29 0 32 0;
+#X connect 30 0 5 1;
+#X connect 31 0 2 0;
+#X connect 32 0 5 0;
+#X restore 71 440 pd sort me out;
+#X obj 240 401 # gamma;
+#X obj 71 242 # -;
+#X obj 80 296 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#N canvas 372 198 399 273 motion 0;
+#X obj 15 113 # << 2;
+#X obj 15 9 inlet;
+#X obj 18 80 # -;
+#X obj 70 174 # + 128;
+#X obj 15 245 outlet;
+#X obj 15 204 # min 255;
+#X obj 15 224 # max 0;
+#X obj 70 155 # << 2;
+#X obj 15 35 t a a;
+#X obj 15 134 shunt 2;
+#X obj 70 133 inlet render;
+#X obj 155 54 inlet type;
+#X obj 15 54 shunt 2;
+#X obj 15 162 # abs-;
+#X connect 0 0 9 0;
+#X connect 1 0 8 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 12 0;
+#X connect 8 1 2 0;
+#X connect 9 0 13 0;
+#X connect 9 1 7 0;
+#X connect 10 0 9 1;
+#X connect 11 0 12 1;
+#X connect 12 0 2 1;
+#X connect 13 0 5 0;
+#X restore 71 223 pd motion detection;
+#X obj 117 423 hradio 15 1 0 4 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 125 261 noise reduction (on find-edges only);
+#X obj 27 64 metro 33.3667;
+#X obj 27 175 shunt 2;
+#X obj 135 191 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X floatatom 184 577 5 0 0 0 - - -;
+#X floatatom 228 577 5 0 0 0 - - -;
+#N canvas 547 147 477 267 crosshair 0;
+#X obj 12 224 outlet;
+#X obj 12 9 inlet;
+#X msg 21 125 12 2 # \$1 \$2 \$1 \$3 \$2 \$3 \$2 \$4 \$3 \$4 \$3 \$3
+\$4 \$3 \$4 \$2 \$3 \$2 \$3 \$1 \$2 \$1 \$2 \$2;
+#X msg 54 95 -32 -1 1 32;
+#X obj 175 37 #fade 8;
+#X obj 175 18 inlet;
+#X obj 54 76 #finished;
+#X obj 95 169 # + (120 160);
+#X obj 12 205 #draw_polygon + (0 170 0);
+#X obj 175 56 t a a;
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 2 0;
+#X connect 4 0 9 0;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
+#X connect 7 0 8 2;
+#X connect 8 0 0 0;
+#X connect 9 0 6 0;
+#X connect 9 1 7 1;
+#X restore 71 522 pd crosshair;
+#X obj 27 522 t a;
+#X text 151 205 emboss;
+#X text 152 191 hilite;
+#X obj 199 191 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 1;
+#X text 218 191 motion;
+#X text 219 205 presence;
+#X obj -13 625 cnv 15 620 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X obj -13 2 cnv 15 620 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 15 Copyright 2002 Mathieu Bouchard;
+#X text 0 1 videodev_effects.pd;
+#X obj 71 371 #outer ignore (0);
+#X obj 184 539 #moment;
+#X obj 240 363 t b a;
+#X obj 184 520 #rgb_to_greyscale;
+#X obj 71 503 #t;
+#X obj 71 314 #fade (16 4 1);
+#X obj 27 83 #camera 0;
+#X obj 184 558 #unpack;
+#X text -5 633 GridFlow 0.9.4;
+#X text 236 290 make gamma table;
+#X obj 240 420 #to_list;
+#X msg 240 328 512;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array gamma 256 float 2;
+#X coords 0 255 255 0 128 128 1;
+#X restore 400 337 graph;
+#X text 97 499 (use with "hilite" mode above);
+#X obj 240 439 list prepend 0;
+#X obj 240 458 s gamma;
+#X text 406 467 only for viewing;
+#X text 408 482 (not necessary);
+#X connect 0 0 4 1;
+#X connect 1 0 15 0;
+#X connect 2 0 17 0;
+#X connect 2 1 45 0;
+#X connect 3 0 30 0;
+#X connect 4 0 35 0;
+#X connect 4 1 49 0;
+#X connect 5 0 2 1;
+#X connect 6 0 30 1;
+#X connect 7 0 29 0;
+#X connect 8 0 30 0;
+#X connect 8 1 3 0;
+#X connect 9 0 18 0;
+#X connect 10 0 8 1;
+#X connect 12 0 23 0;
+#X connect 13 0 47 0;
+#X connect 14 0 24 1;
+#X connect 15 0 2 0;
+#X connect 15 1 50 0;
+#X connect 16 0 22 2;
+#X connect 17 0 4 0;
+#X connect 17 1 22 0;
+#X connect 18 0 11 0;
+#X connect 19 0 56 0;
+#X connect 20 0 17 1;
+#X connect 21 0 17 0;
+#X connect 22 0 4 0;
+#X connect 23 0 21 1;
+#X connect 23 0 55 0;
+#X connect 24 0 1 0;
+#X connect 25 0 15 1;
+#X connect 26 0 24 0;
+#X connect 27 0 22 1;
+#X connect 29 0 51 0;
+#X connect 30 0 15 0;
+#X connect 30 1 26 0;
+#X connect 31 0 26 1;
+#X connect 34 0 35 0;
+#X connect 35 0 9 0;
+#X connect 38 0 26 2;
+#X connect 45 0 21 0;
+#X connect 46 0 34 1;
+#X connect 46 0 52 0;
+#X connect 47 0 12 0;
+#X connect 47 1 23 1;
+#X connect 48 0 46 0;
+#X connect 49 0 34 0;
+#X connect 49 1 48 0;
+#X connect 50 0 2 0;
+#X connect 51 0 8 0;
+#X connect 52 0 32 0;
+#X connect 52 1 33 0;
+#X connect 55 0 59 0;
+#X connect 56 0 13 0;
+#X connect 59 0 60 0;
diff --git a/externals/gridflow/examples/wave_1d.pd b/externals/gridflow/examples/wave_1d.pd
new file mode 100644
index 00000000..b9cafd74
--- /dev/null
+++ b/externals/gridflow/examples/wave_1d.pd
@@ -0,0 +1,173 @@
+#N canvas 560 15 621 659 10;
+#X obj 13 13 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 1 1
+;
+#X obj 181 29 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 30 128 t a a;
+#X obj 17 250 shunt 2;
+#X obj 64 251 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 45 620 fps;
+#X floatatom 71 621 5 0 0 0 - - -;
+#X obj 17 269 t a b;
+#X obj 7 368 fps;
+#X floatatom 7 387 5 0 0 0 - - -;
+#X obj 45 419 spigot;
+#X obj 76 381 f;
+#X obj 109 378 + 1;
+#X obj 76 400 == 0;
+#X obj 30 30 t b;
+#X obj 174 9 loadbang;
+#X obj 105 487 loadbang;
+#X obj 461 449 loadbang;
+#X obj 244 595 unpack 0 0;
+#X obj 244 614 inv+ 64;
+#X msg 308 595 0 \$1;
+#X obj 480 494 t b l;
+#X obj 244 633 << 12;
+#X obj 17 186 t a a;
+#N canvas 627 255 450 300 synth 0;
+#X obj 17 16 inlet;
+#X obj 17 102 s foo;
+#X obj 20 125 tabreceive~ foo;
+#X obj 20 259 outlet~;
+#X obj 67 238 env~;
+#X floatatom 67 257 5 0 0 0 - - -;
+#X obj 99 27 loadbang;
+#X obj 76 25 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 334 58 table foo 2048;
+#X obj 21 144 rifft~;
+#X obj 20 201 +~;
+#X obj 21 163 expr~ tanh($v1*0.0001);
+#X obj 20 182 lop~ 2000;
+#X obj 339 24 block~ 2048;
+#X obj 17 36 # * 2048;
+#X obj 18 58 # /;
+#X obj 86 49 #for 1 257 1;
+#X obj 17 80 #export_list;
+#X connect 0 0 14 0;
+#X connect 2 0 9 0;
+#X connect 4 0 5 0;
+#X connect 6 0 16 0;
+#X connect 7 0 16 0;
+#X connect 9 0 11 0;
+#X connect 10 0 4 0;
+#X connect 10 0 3 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
+#X connect 14 0 15 0;
+#X connect 15 0 17 0;
+#X connect 16 0 15 1;
+#X connect 17 0 1 0;
+#X restore 136 437 pd synth;
+#X obj 129 459 dac~;
+#X text 498 6 1-D wave generator;
+#X obj 174 47 #for -128 128 1;
+#X obj 174 66 # abs-;
+#X obj 174 85 # < 127;
+#X obj 159 107 # * 1e+07;
+#X obj 159 127 # * -1e+07;
+#X obj 30 85 # min;
+#X obj 30 104 # max;
+#X obj 131 253 #redim (1);
+#X obj 461 518 # + (0 6);
+#X obj 65 272 #draw_polygon put (1 #);
+#X obj 45 448 # >> 12;
+#X obj 45 467 #redim (256);
+#X obj 45 506 #outer <;
+#X obj 105 506 #for 64 -64 -1;
+#X obj 45 525 #transpose;
+#X obj 45 544 #outer * (3 # 255);
+#X obj 45 601 #out window;
+#X obj 240 533 #mouse \, ...;
+#X obj 244 576 #export_list;
+#X obj 30 66 #store (1 256 1 # 0);
+#X obj 17 147 # -;
+#X obj 45 563 #fade (16 4 1);
+#X obj 17 226 # -;
+#X obj 109 397 % 2;
+#X obj 30 11 metro 20;
+#X msg 461 468 4 2 # 0 0 0 4 1 4 1 0;
+#X obj 42 205 # >> 8;
+#X text 54 186 damping;
+#X text 249 147 wave equation;
+#X text 88 419 framerate-divider;
+#X obj 45 582 #scale_by 2;
+#X obj 244 557 # / 2;
+#X obj 55 148 #convolve (1 3 # 1 0 1) \, seed 1;
+#X obj 37 321 #convolve (1 3 # 1 2 1);
+#X obj 37 340 # >> 2;
+#X text 180 321 smoothing;
+#X text 224 120 cap at plus or minus ten million;
+#X text 389 19 Copyright 2004 \, 2007 Mathieu Bouchard;
+#X connect 0 0 51 0;
+#X connect 1 0 27 0;
+#X connect 2 0 47 1;
+#X connect 2 1 59 0;
+#X connect 3 0 7 0;
+#X connect 3 1 36 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 7 0 46 1;
+#X connect 7 0 60 0;
+#X connect 7 1 8 0;
+#X connect 7 1 11 0;
+#X connect 8 0 9 0;
+#X connect 10 0 37 0;
+#X connect 11 0 12 0;
+#X connect 11 0 13 0;
+#X connect 12 0 50 0;
+#X connect 13 0 10 1;
+#X connect 14 0 46 0;
+#X connect 15 0 27 0;
+#X connect 16 0 40 0;
+#X connect 17 0 52 0;
+#X connect 18 0 19 0;
+#X connect 18 1 20 0;
+#X connect 19 0 22 0;
+#X connect 20 0 21 0;
+#X connect 21 0 52 0;
+#X connect 21 1 35 1;
+#X connect 22 0 34 0;
+#X connect 23 0 49 0;
+#X connect 23 1 53 0;
+#X connect 24 0 25 0;
+#X connect 24 0 25 1;
+#X connect 27 0 28 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 29 0 31 0;
+#X connect 30 0 32 1;
+#X connect 31 0 33 1;
+#X connect 32 0 33 0;
+#X connect 33 0 2 0;
+#X connect 34 0 36 1;
+#X connect 35 0 36 2;
+#X connect 36 0 7 0;
+#X connect 37 0 38 0;
+#X connect 38 0 24 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 40 0 39 1;
+#X connect 41 0 42 0;
+#X connect 42 0 48 0;
+#X connect 43 0 5 0;
+#X connect 43 0 44 0;
+#X connect 44 0 58 0;
+#X connect 44 1 58 0;
+#X connect 44 4 4 0;
+#X connect 45 0 18 0;
+#X connect 46 0 32 0;
+#X connect 47 0 23 0;
+#X connect 48 0 57 0;
+#X connect 49 0 3 0;
+#X connect 50 0 11 1;
+#X connect 51 0 14 0;
+#X connect 52 0 35 0;
+#X connect 53 0 49 1;
+#X connect 57 0 43 0;
+#X connect 58 0 45 0;
+#X connect 59 0 47 0;
+#X connect 60 0 61 0;
+#X connect 61 0 10 0;
diff --git a/externals/gridflow/examples/waves.pd b/externals/gridflow/examples/waves.pd
new file mode 100644
index 00000000..d0664a21
--- /dev/null
+++ b/externals/gridflow/examples/waves.pd
@@ -0,0 +1,416 @@
+#N canvas 214 26 783 642 10;
+#X obj 270 256 #greyscale_to_rgb;
+#X obj 167 66 loadbang;
+#X obj 107 85 t a a;
+#X obj 266 412 print;
+#X obj 10 49 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#N canvas 611 335 413 236 lighting 0;
+#X obj 56 203 outlet;
+#X obj 17 9 inlet;
+#X text 91 65 produce red/cyan from horiz differences;
+#X text 64 123 produce white/black from vertical differences;
+#X obj 56 177 # +;
+#X obj 108 10 #dim;
+#X obj 140 10 #export_list;
+#X obj 56 9 t a a;
+#X obj 56 49 t a a;
+#X msg 141 30 \$1 \$2;
+#X obj 56 29 #redim ();
+#X obj 86 82 #convolve (1 2 #) \, op ignore \, fold inv+;
+#X obj 56 139 #convolve (2 1 #) \, op ignore \, fold inv+;
+#X obj 86 101 #outer & (-1 0 0);
+#X obj 56 158 #outer & (-1 -1 0);
+#X connect 1 0 7 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 10 0;
+#X connect 7 1 5 0;
+#X connect 8 0 12 0;
+#X connect 8 1 11 0;
+#X connect 9 0 10 1;
+#X connect 10 0 8 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 4 1;
+#X connect 14 0 4 0;
+#X restore 260 277 pd lighting;
+#X obj 228 468 # / 2;
+#X msg 107 104 \$1 \$2 1 # 0;
+#N canvas 137 251 392 303 finger 0;
+#X obj 149 39 #redim ( 4 2 );
+#X obj 71 16 inlet;
+#X obj 149 20 inlet;
+#X obj 71 217 outlet;
+#X obj 149 158 # +;
+#X obj 177 157 # *;
+#X msg 177 137 0 0 0 1 1 1 1 0;
+#X obj 193 79 inlet size;
+#X text 291 137 square or rect;
+#X obj 177 112 #finished;
+#X obj 70 195 #draw_polygon put (4000);
+#X connect 0 0 4 0;
+#X connect 1 0 10 0;
+#X connect 2 0 0 0;
+#X connect 4 0 10 2;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 7 0 9 0;
+#X connect 7 0 5 1;
+#X connect 9 0 6 0;
+#X connect 10 0 3 0;
+#X restore 227 564 pd finger;
+#X obj 141 85 s size;
+#X obj 260 353 #scale_by 2;
+#X obj 8 243 #store;
+#N canvas 243 147 463 307 wave 0;
+#X obj 26 20 inlet;
+#X obj 23 293 outlet;
+#X text 65 205 time differential;
+#X text 81 50 space differential: (d/dx)^2 + (d/dy)^2;
+#X text 71 8 Recurrence equation for propagation of oscillations;
+#X obj 26 39 t a a;
+#X obj 207 147 outlet blah;
+#X obj 207 125 inlet blah;
+#X obj 23 205 # -;
+#X obj 23 225 # *>>8 252;
+#X obj 20 250 # min 30000;
+#X obj 20 270 # max -30000;
+#X obj 56 82 #convolve (3 3 # 1 4 1 4 12 4) \, seed 8;
+#X obj 56 101 # >> 4;
+#X connect 0 0 5 0;
+#X connect 5 0 8 1;
+#X connect 5 1 12 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 1 0;
+#X connect 12 0 13 0;
+#X connect 13 0 6 0;
+#X restore 8 281 pd wave equation;
+#X obj 182 564 t a;
+#X obj 107 123 t a;
+#X obj 270 232 # >> 1;
+#X obj 36 85 s metro;
+#X text 491 65 (Best complemented with a touchscreen);
+#X obj 366 159 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 384 174 height greys;
+#X obj 318 96 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 336 95 plain;
+#X text 336 111 line-art;
+#X text 334 46 smooth;
+#X obj 317 46 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 335 60 raw;
+#X obj 442 418 hradio 18 1 1 4 empty empty _1__2__3__4_ 0 -4 0 8 -262144
+-258699 -1 0;
+#X text 440 397 scale by...;
+#X obj 442 438 + 1;
+#X obj 573 105 loadbang;
+#X obj 573 276 spigot;
+#X obj 620 277 tgl 15 0 empty empty empty 18 8 0 8 -241291 -1 -62784
+0 1;
+#X obj 573 256 r metro;
+#N canvas 433 107 365 432 line-art 0;
+#X obj 32 123 # << 8;
+#X obj 32 37 inlet;
+#X obj 34 256 outlet;
+#X text 146 31 double-thresholding;
+#X text 146 114 else becomes 0;
+#X obj 32 82 # min 1;
+#X obj 32 103 # max -1;
+#X obj 32 172 # >> 2;
+#X obj 31 154 #convolve (3 1 # 1 2 1);
+#X obj 33 193 #convolve (1 3 # 1 2 1);
+#X obj 35 215 # >> 2;
+#X obj 32 60 # / 5;
+#X text 146 85 < -5 becomes -256;
+#X text 146 100 > +5 becomes +256;
+#X connect 0 0 8 0;
+#X connect 1 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 11 0 5 0;
+#X restore 281 182 pd line-art;
+#X text 628 129 Background colour;
+#X text 637 277 enable video;
+#X text 382 159 four-colour emboss;
+#X obj 345 492 tgl 15 1 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 298 472 r metro;
+#X text 362 491 rain;
+#X obj 260 97 # >> 2;
+#X text 388 36 Originally made for Alexandre Castonguay's "DIGITALE"
+;
+#X text 505 50 But suitable for a lot more uses :-);
+#X msg 573 124 3 # 128;
+#X obj 573 143 #color;
+#X obj 260 59 shunt 2;
+#X obj 369 548 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 1 256;
+#X obj 369 562 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 1 256;
+#X obj 260 315 # +;
+#X obj 397 364 #store;
+#X obj 421 296 shunt 2;
+#X obj 477 291 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 495 290 plain;
+#X text 495 307 refraction;
+#X obj 260 296 t a;
+#N canvas 203 363 443 300 heightmap2indexmap 0;
+#X obj 48 220 outlet;
+#X obj 9 8 inlet;
+#X obj 48 143 # +;
+#X obj 100 9 #dim;
+#X obj 132 9 #export_list;
+#X obj 48 8 t a a;
+#X obj 48 48 t a a;
+#X msg 132 28 \$1 \$2;
+#X obj 48 201 # +;
+#X obj 90 181 loadbang;
+#X obj 73 181 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 48 162 # >> 1;
+#X obj 78 67 #convolve (1 2 #) \, op ignore \, fold inv+;
+#X obj 78 86 #outer & (-1 0);
+#X obj 48 105 #convolve (2 1 #) \, op ignore \, fold inv+;
+#X obj 48 124 #outer & (0 -1);
+#X obj 73 201 #for (0 0) (240 320) (1 1);
+#X obj 48 28 #redim ();
+#X connect 1 0 5 0;
+#X connect 2 0 11 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 17 0;
+#X connect 5 1 3 0;
+#X connect 6 0 14 0;
+#X connect 6 1 12 0;
+#X connect 7 0 17 1;
+#X connect 8 0 0 0;
+#X connect 9 0 16 0;
+#X connect 10 0 16 0;
+#X connect 11 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 2 1;
+#X connect 14 0 15 0;
+#X connect 15 0 2 0;
+#X connect 16 0 8 1;
+#X connect 17 0 6 0;
+#X restore 397 345 pd heightmap2indexmap;
+#X obj -8 82 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 397 326 spigot;
+#X text 384 189 no reflection;
+#X obj 260 201 shunt 3;
+#X obj 260 182 t a;
+#X obj 318 232 # put 0;
+#X obj 182 545 shunt 2;
+#X obj 226 521 shunt 2;
+#X obj 10 66 metro 33.3667;
+#X obj 8 262 shunt 2;
+#X text 78 263 freeze time;
+#X obj 61 263 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 132 123 r feedback;
+#X obj 182 583 s feedback;
+#X obj 8 303 t a;
+#X obj -13 5 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -15 611 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 619 GridFlow 0.8.0;
+#X text -7 619 GridFlow 0.8.0;
+#X text 0 4 waves.pd;
+#X obj 555 276 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 573 315 spigot;
+#X obj 620 316 tgl 15 0 empty empty empty 18 8 0 8 -241291 -1 -62784
+0 1;
+#X text 637 315 test camera output;
+#X obj 10 85 t b;
+#X obj 298 491 spigot;
+#X obj 620 334 sel 0 1;
+#X msg 642 353 open window;
+#X obj 573 334 #out;
+#X msg 620 372 close;
+#X obj 266 393 fps detailed \, period 2;
+#X obj 574 226 #in;
+#X obj 344 510 r size;
+#X obj 298 510 #store;
+#X obj 298 529 # rand;
+#X obj 260 372 #out window;
+#X obj 260 334 #clip;
+#X obj 260 78 #convolve (2 2 #) \, op ignore;
+#X obj 369 581 #pack 2;
+#X text 0 18 Copyright 2003 \, 2004 \, 2005 Mathieu Bouchard;
+#X obj 260 431 #mouse \, ...;
+#N canvas 123 224 450 366 doodle 0;
+#X obj 26 17 inlet wave;
+#X obj 23 258 outlet wave;
+#X obj 171 29 inlet tog;
+#X obj 306 36 inlet pos;
+#X obj 139 9 r metro;
+#X obj 138 57 spigot;
+#X obj 231 202 # +;
+#X obj 137 83 t b b;
+#X msg 219 123 4 2 # 0 0 0 1 1 1 1 0;
+#X obj 224 158 # * 8;
+#X obj 127 334 outlet rgb;
+#X obj 347 78 inlet mode;
+#X obj 347 221 #redim (1);
+#X obj 130 238 #draw_polygon put (0);
+#X obj 24 69 # *>>8;
+#X obj 129 290 #inner (1 3 # 0 1 1);
+#X obj 141 267 # inv+ 256;
+#X obj 364 191 # inv+ 256;
+#X obj 46 107 loadbang;
+#X obj 347 159 # * 256;
+#X obj 48 146 #store (240 320 1 # 256);
+#X connect 0 0 14 0;
+#X connect 2 0 5 1;
+#X connect 3 0 6 1;
+#X connect 4 0 5 0;
+#X connect 5 0 7 0;
+#X connect 6 0 13 2;
+#X connect 7 0 20 0;
+#X connect 7 1 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 0;
+#X connect 11 0 19 0;
+#X connect 12 0 13 1;
+#X connect 13 0 16 0;
+#X connect 13 0 20 1;
+#X connect 14 0 1 0;
+#X connect 15 0 10 0;
+#X connect 16 0 15 0;
+#X connect 17 0 12 0;
+#X connect 18 0 20 0;
+#X connect 19 0 12 0;
+#X connect 20 0 13 0;
+#X connect 20 0 14 1;
+#X restore 128 282 pd doodle;
+#X obj 197 282 # +;
+#X msg 574 207 load g001.jpg;
+#X obj 90 178 route position;
+#X msg 90 197 \$3;
+#X obj 90 216 & 1;
+#X msg 107 66 240 320;
+#X obj 573 296 #camera;
+#X obj 260 116 shunt 3;
+#X obj 302 142 # ** 3;
+#X text 336 125 cubit;
+#X obj 302 161 # >> 10;
+#X connect 0 0 54 0;
+#X connect 1 0 103 0;
+#X connect 2 0 7 0;
+#X connect 2 1 9 0;
+#X connect 4 0 64 0;
+#X connect 5 0 54 0;
+#X connect 6 0 8 1;
+#X connect 6 0 97 2;
+#X connect 7 0 14 0;
+#X connect 8 0 13 0;
+#X connect 10 0 91 0;
+#X connect 11 0 65 0;
+#X connect 12 0 70 0;
+#X connect 12 1 97 0;
+#X connect 13 0 69 0;
+#X connect 14 0 11 1;
+#X connect 14 0 45 0;
+#X connect 15 0 0 0;
+#X connect 18 0 59 1;
+#X connect 20 0 105 1;
+#X connect 24 0 45 1;
+#X connect 26 0 28 0;
+#X connect 28 0 10 1;
+#X connect 28 0 6 1;
+#X connect 29 0 43 0;
+#X connect 30 0 104 0;
+#X connect 31 0 30 1;
+#X connect 32 0 30 0;
+#X connect 33 0 60 0;
+#X connect 37 0 62 1;
+#X connect 37 0 63 1;
+#X connect 37 0 81 1;
+#X connect 38 0 81 0;
+#X connect 40 0 105 0;
+#X connect 43 0 44 0;
+#X connect 44 0 50 0;
+#X connect 45 0 93 0;
+#X connect 45 1 105 0;
+#X connect 46 0 94 0;
+#X connect 47 0 94 1;
+#X connect 48 0 98 0;
+#X connect 49 0 48 1;
+#X connect 50 0 48 1;
+#X connect 50 1 49 1;
+#X connect 51 0 50 1;
+#X connect 51 0 57 1;
+#X connect 54 0 48 0;
+#X connect 55 0 49 0;
+#X connect 56 0 80 0;
+#X connect 57 0 55 0;
+#X connect 59 0 5 0;
+#X connect 59 1 15 0;
+#X connect 59 2 61 0;
+#X connect 60 0 59 0;
+#X connect 60 0 57 0;
+#X connect 61 0 0 0;
+#X connect 62 0 13 0;
+#X connect 62 1 8 0;
+#X connect 63 0 62 1;
+#X connect 64 0 80 0;
+#X connect 65 0 12 0;
+#X connect 65 1 70 0;
+#X connect 67 0 65 1;
+#X connect 68 0 14 0;
+#X connect 70 0 62 0;
+#X connect 76 0 104 0;
+#X connect 77 0 84 0;
+#X connect 78 0 77 1;
+#X connect 78 0 82 0;
+#X connect 80 0 16 0;
+#X connect 80 0 11 0;
+#X connect 81 0 89 0;
+#X connect 82 0 85 0;
+#X connect 82 1 83 0;
+#X connect 83 0 84 0;
+#X connect 85 0 84 0;
+#X connect 86 0 3 0;
+#X connect 87 0 50 1;
+#X connect 88 0 89 1;
+#X connect 89 0 90 0;
+#X connect 90 0 8 1;
+#X connect 91 0 86 0;
+#X connect 91 0 96 0;
+#X connect 91 0 100 0;
+#X connect 92 0 10 0;
+#X connect 93 0 40 0;
+#X connect 94 0 8 2;
+#X connect 96 0 6 0;
+#X connect 96 1 6 0;
+#X connect 96 4 63 0;
+#X connect 96 6 97 1;
+#X connect 97 0 12 1;
+#X connect 97 1 98 1;
+#X connect 98 0 92 0;
+#X connect 99 0 87 0;
+#X connect 100 0 101 0;
+#X connect 101 0 102 0;
+#X connect 102 0 97 3;
+#X connect 103 0 2 0;
+#X connect 104 0 50 0;
+#X connect 104 0 77 0;
+#X connect 105 0 60 0;
+#X connect 105 1 33 0;
+#X connect 105 2 106 0;
+#X connect 106 0 108 0;
+#X connect 108 0 60 0;
diff --git a/externals/gridflow/examples/wobble.pd b/externals/gridflow/examples/wobble.pd
new file mode 100644
index 00000000..4d9e352d
--- /dev/null
+++ b/externals/gridflow/examples/wobble.pd
@@ -0,0 +1,56 @@
+#N canvas 735 285 450 338 10;
+#X obj 31 -32 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 31 226 #out window;
+#X obj 212 97 #make_cross;
+#X obj 31 15 t b b;
+#X obj 212 -17 # << 8;
+#X obj 212 78 # >> 8;
+#X obj 236 59 t a;
+#X obj 212 59 # +;
+#X obj 212 40 # +;
+#X obj 212 2 # -;
+#X obj 212 21 # >> 3;
+#X obj 212 -36 #store;
+#X obj 31 270 s p0;
+#X obj 252 -36 r p0;
+#X obj 31 107 #store (240 320 3 #);
+#X obj 31 245 #mouse .....;
+#X obj 31 164 # >> 4;
+#X obj 31 145 #convolve (3 3 # 1 2 1 2 3 2);
+#X obj 31 -13 metro 40;
+#X obj 236 40 # *>>8 250;
+#X text 139 196 click and drag in the window to trigger animations
+;
+#X obj 31 188 #fade (16 4 1);
+#X obj 31 207 #clip;
+#X obj 31 126 #draw_polygon + (500 500 500);
+#X text 168 262 Copyright 2007 Mathieu Bouchard;
+#X connect 0 0 18 0;
+#X connect 1 0 15 0;
+#X connect 2 0 23 2;
+#X connect 3 0 14 0;
+#X connect 3 1 11 0;
+#X connect 4 0 9 0;
+#X connect 5 0 2 0;
+#X connect 6 0 7 1;
+#X connect 7 0 6 0;
+#X connect 7 0 5 0;
+#X connect 7 0 9 1;
+#X connect 8 0 7 0;
+#X connect 8 0 19 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 4 0;
+#X connect 13 0 11 1;
+#X connect 14 0 23 0;
+#X connect 15 0 12 0;
+#X connect 15 1 12 0;
+#X connect 16 0 14 1;
+#X connect 16 0 21 0;
+#X connect 17 0 16 0;
+#X connect 18 0 3 0;
+#X connect 19 0 8 1;
+#X connect 21 0 22 0;
+#X connect 22 0 1 0;
+#X connect 23 0 17 0;