aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/pd_examples
diff options
context:
space:
mode:
authorN.N. <matju@users.sourceforge.net>2005-10-04 02:04:42 +0000
committerN.N. <matju@users.sourceforge.net>2005-10-04 02:04:42 +0000
commit04c235c6ac5f36b507c629de5634d5e6d326222b (patch)
tree7f494dc2dae6d9771aed83cf73825ea81cd3ed96 /externals/gridflow/pd_examples
parent5e2a1bc9e56003349e533f7e5841041ba5c04e28 (diff)
adding abstractions and helpfiles
svn path=/trunk/; revision=3647
Diffstat (limited to 'externals/gridflow/pd_examples')
-rw-r--r--externals/gridflow/pd_examples/binary_operations.pd73
-rw-r--r--externals/gridflow/pd_examples/blob.pd106
-rw-r--r--externals/gridflow/pd_examples/cellular_1d.pd164
-rw-r--r--externals/gridflow/pd_examples/color_correction.pd154
-rw-r--r--externals/gridflow/pd_examples/color_detect.pd218
-rw-r--r--externals/gridflow/pd_examples/convolve.pd94
-rw-r--r--externals/gridflow/pd_examples/cross_fade.pd73
-rw-r--r--externals/gridflow/pd_examples/drag_rectangle.pd110
-rw-r--r--externals/gridflow/pd_examples/eclipse.pd80
-rw-r--r--externals/gridflow/pd_examples/epicycloid.pd125
-rw-r--r--externals/gridflow/pd_examples/feedback_fractal.pd147
-rw-r--r--externals/gridflow/pd_examples/fire.pd180
-rw-r--r--externals/gridflow/pd_examples/game_of_life.pd67
-rw-r--r--externals/gridflow/pd_examples/goop.pd138
-rw-r--r--externals/gridflow/pd_examples/hello-world.pd38
-rw-r--r--externals/gridflow/pd_examples/image_stats.pd62
-rw-r--r--externals/gridflow/pd_examples/linear_transform.pd123
-rw-r--r--externals/gridflow/pd_examples/motion_detect.pd44
-rw-r--r--externals/gridflow/pd_examples/nervous_video.pd154
-rw-r--r--externals/gridflow/pd_examples/photo_pianoroll.pd159
-rw-r--r--externals/gridflow/pd_examples/plot.pd73
-rw-r--r--externals/gridflow/pd_examples/polygon.pd113
-rw-r--r--externals/gridflow/pd_examples/ripple.pd190
-rw-r--r--externals/gridflow/pd_examples/sand.pd417
-rw-r--r--externals/gridflow/pd_examples/saturation.pd81
-rw-r--r--externals/gridflow/pd_examples/scratch_video.pd124
-rw-r--r--externals/gridflow/pd_examples/spectrogram.pd109
-rw-r--r--externals/gridflow/pd_examples/threshold.pd81
-rw-r--r--externals/gridflow/pd_examples/transform.pd61
-rw-r--r--externals/gridflow/pd_examples/videodev_effects.pd303
-rw-r--r--externals/gridflow/pd_examples/waves.pd339
31 files changed, 4200 insertions, 0 deletions
diff --git a/externals/gridflow/pd_examples/binary_operations.pd b/externals/gridflow/pd_examples/binary_operations.pd
new file mode 100644
index 00000000..cf4df98a
--- /dev/null
+++ b/externals/gridflow/pd_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/pd_examples/blob.pd b/externals/gridflow/pd_examples/blob.pd
new file mode 100644
index 00000000..48f5251a
--- /dev/null
+++ b/externals/gridflow/pd_examples/blob.pd
@@ -0,0 +1,106 @@
+#N canvas 19 81 792 565 10;
+#X floatatom 405 212 5 0 0 0 - - -;
+#X obj 347 172 r move;
+#X obj 56 95 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 56 128 240 320 3 # 0;
+#X msg 461 357 300;
+#X obj 398 342 # * 300;
+#X obj 311 436 # cos*;
+#X msg 460 319 1600;
+#X msg 513 249 25;
+#X obj 373 212 +;
+#X msg 513 268 100;
+#X obj 504 192 hsl 128 15 100 2600 0 1 empty empty empty -2 -6 0 8
+-260818 -1 -1 2297 1;
+#X text 364 435 make circular orbit of variable radius;
+#X floatatom 502 211 5 0 0 0 - - -;
+#X msg 461 338 800;
+#X text 294 325 frequency of the orbit;
+#X text 500 177 increment;
+#X msg 373 192 1;
+#X obj 64 58 s move;
+#X obj 311 394 #outer + ( 0 9000 );
+#X obj 73 94 loadbang;
+#X obj 19 0 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 78 351 #out window;
+#X obj 246 126 # +;
+#X obj 438 299 # + 50;
+#X text 401 197 counter;
+#X obj 19 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 311 458 # + ( 120 160 );
+#X obj 19 309 #store;
+#X text 65 113 blank image to start with;
+#X text 272 127 translate the square;
+#X text 546 247 make a wavy radius (50-100) \; the 1100 is its frequency
+\; tune it for fun and profit.;
+#X obj 19 58 t b b;
+#X obj 368 232 t a a a;
+#X msg 246 74 4 2 # -1 -1 -1 1 1 1 1 -1;
+#X obj 19 22 metro 1.367;
+#X obj 8 491 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 498 GridFlow 0.8.0;
+#X obj 8 -38 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 -38 Blob.pd;
+#X msg 514 287 10;
+#X obj 437 257 # * 1000;
+#X obj 101 215 #color;
+#X obj 101 171 loadbang;
+#X text 452 383 duplicate the angle \; make the 2nd 90 degrees apart
+(required for a circle \; else it'll be an oval or a line);
+#X obj 78 309 #draw_polygon + (3 # );
+#X text 21 -25 Copyright 2002 Mathieu Bouchard and Alexandre Castonguay
+;
+#X text 245 58 a 2x2 square's coordinates;
+#X text 288 103 scale factor;
+#X obj 246 102 # * 8;
+#X obj 78 330 #solarize;
+#X text 400 -1 This is the classic "Shadebob" effect of the demoscene
+;
+#X msg 101 193 12 24 36;
+#X text 6 284 superimpose the light of many squares;
+#X obj 438 278 # cos* 100;
+#X connect 0 0 9 1;
+#X connect 1 0 17 0;
+#X connect 2 0 3 0;
+#X connect 3 0 28 1;
+#X connect 4 0 5 1;
+#X connect 5 0 19 0;
+#X connect 6 0 27 0;
+#X connect 7 0 5 1;
+#X connect 8 0 54 1;
+#X connect 9 0 0 0;
+#X connect 9 0 33 0;
+#X connect 10 0 54 1;
+#X connect 11 0 13 0;
+#X connect 13 0 41 1;
+#X connect 14 0 5 1;
+#X connect 17 0 9 0;
+#X connect 19 0 6 0;
+#X connect 20 0 2 0;
+#X connect 21 0 35 0;
+#X connect 23 0 45 2;
+#X connect 24 0 6 1;
+#X connect 26 0 32 0;
+#X connect 27 0 23 1;
+#X connect 28 0 45 0;
+#X connect 32 0 28 0;
+#X connect 32 1 18 0;
+#X connect 33 0 34 0;
+#X connect 33 1 5 0;
+#X connect 33 2 41 0;
+#X connect 34 0 49 0;
+#X connect 35 0 26 0;
+#X connect 40 0 54 1;
+#X connect 41 0 54 0;
+#X connect 42 0 45 1;
+#X connect 43 0 52 0;
+#X connect 45 0 28 1;
+#X connect 45 0 50 0;
+#X connect 49 0 23 0;
+#X connect 50 0 22 0;
+#X connect 52 0 42 0;
+#X connect 54 0 24 0;
diff --git a/externals/gridflow/pd_examples/cellular_1d.pd b/externals/gridflow/pd_examples/cellular_1d.pd
new file mode 100644
index 00000000..eb1c6c30
--- /dev/null
+++ b/externals/gridflow/pd_examples/cellular_1d.pd
@@ -0,0 +1,164 @@
+#N canvas 337 53 804 634 10;
+#X obj 43 68 loadbang;
+#X obj 93 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 108 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 123 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 138 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 153 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 168 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 183 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 1
+1;
+#X obj 198 382 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 124 498 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 86 256;
+#X obj -5 188 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 17 332 1 256 # 1;
+#X msg 43 102 1 256 # 2;
+#X obj 17 -2 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 418 199 loadbang;
+#X msg 418 219 1 256 # 0;
+#X text 131 482 characteristic number;
+#X obj 428 11 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 4 256;
+#X msg 467 69 \$1 256;
+#X msg 352 82 set \$1;
+#X text 104 124 randomizer;
+#X text 91 361 specify behaviour here;
+#X text 24 254 compute new state;
+#X text 315 237 make scrollie;
+#X text 367 270 convert bit matrix to rgb image;
+#X text 313 250 (window height = 128);
+#X obj 202 38 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 151 337 loadbang;
+#X text 47 84 click here to restart;
+#X obj 99 200 t a a;
+#X obj 17 26 metro 33.3667;
+#X obj 416 115 t a a;
+#X obj 472 359 loadbang;
+#X obj 389 495 unpack 0 0 0;
+#X obj 564 494 unpack 0 0 0;
+#X msg 389 394 3 # 0;
+#X msg 565 395 3 # 255;
+#X text 442 392 background;
+#X text 629 395 foreground;
+#X obj 17 292 t a a;
+#X obj 43 124 # rand;
+#X obj 17 234 #store;
+#X obj 17 312 #finished;
+#X obj 17 352 # <<;
+#X obj 17 372 # &;
+#X obj 17 392 # != 0;
+#X obj 123 406 #pack 8;
+#X obj 124 445 #fold +;
+#X obj 124 466 #export;
+#X obj 202 56 #for 0 256 1;
+#X obj 202 76 # == 128;
+#X obj 202 96 #redim ( 1 256 );
+#X obj 416 96 #import ( 1 256 );
+#X obj 416 135 #finished;
+#X obj 352 157 #for 1 128 1;
+#X obj 352 177 #outer ignore ( 0 );
+#X obj 352 197 #store;
+#X obj 352 218 @join 0;
+#X obj 351 287 #outer ignore ( 0 );
+#X obj 351 308 #store;
+#X obj 398 308 #redim ( 2 3 );
+#X obj 389 414 #color;
+#X obj 565 414 #color;
+#X obj 389 475 #export_list;
+#X obj 565 475 #export_list;
+#X obj 492 526 #pack 6;
+#X obj 17 272 #convolve (1 3 # 1 2 4);
+#X obj 124 426 # << (0 1 2 3 4 5 6 7);
+#X obj -4 550 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 4 557 GridFlow 0.8.0;
+#X obj -7 -50 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 351 330 #out window;
+#X text -3 -35 Copyright 2002 Mathieu Bouchard;
+#X text -3 -49 Cellular_1d;
+#X obj 428 34 max 1;
+#X text 495 9 <-- number of new lines per frame;
+#X text 221 37 <-- make single dot;
+#X connect 0 0 12 0;
+#X connect 1 0 46 0;
+#X connect 2 0 46 1;
+#X connect 3 0 46 2;
+#X connect 4 0 46 3;
+#X connect 5 0 46 4;
+#X connect 6 0 46 5;
+#X connect 7 0 46 6;
+#X connect 8 0 46 7;
+#X connect 9 0 44 1;
+#X connect 10 0 41 0;
+#X connect 11 0 43 0;
+#X connect 12 0 40 0;
+#X connect 13 0 30 0;
+#X connect 14 0 15 0;
+#X connect 15 0 56 1;
+#X connect 17 0 74 0;
+#X connect 18 0 52 1;
+#X connect 19 0 54 0;
+#X connect 26 0 49 0;
+#X connect 27 0 2 0;
+#X connect 27 0 3 0;
+#X connect 27 0 7 0;
+#X connect 27 0 5 0;
+#X connect 29 0 41 1;
+#X connect 29 1 52 0;
+#X connect 30 0 41 0;
+#X connect 31 0 53 0;
+#X connect 31 1 57 1;
+#X connect 32 0 35 0;
+#X connect 32 0 36 0;
+#X connect 33 0 65 0;
+#X connect 33 1 65 1;
+#X connect 33 2 65 2;
+#X connect 34 0 65 3;
+#X connect 34 1 65 4;
+#X connect 34 2 65 5;
+#X connect 35 0 61 0;
+#X connect 36 0 62 0;
+#X connect 39 0 42 0;
+#X connect 39 1 43 1;
+#X connect 40 0 29 0;
+#X connect 41 0 66 0;
+#X connect 42 0 11 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 29 0;
+#X connect 46 0 67 0;
+#X connect 47 0 48 0;
+#X connect 48 0 9 0;
+#X connect 49 0 50 0;
+#X connect 50 0 51 0;
+#X connect 51 0 29 0;
+#X connect 52 0 31 0;
+#X connect 53 0 54 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 56 0 57 0;
+#X connect 57 0 56 1;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 71 0;
+#X connect 60 0 59 1;
+#X connect 61 0 63 0;
+#X connect 62 0 64 0;
+#X connect 63 0 33 0;
+#X connect 64 0 34 0;
+#X connect 65 0 60 0;
+#X connect 66 0 39 0;
+#X connect 67 0 47 0;
+#X connect 74 0 19 0;
+#X connect 74 0 18 0;
diff --git a/externals/gridflow/pd_examples/color_correction.pd b/externals/gridflow/pd_examples/color_correction.pd
new file mode 100644
index 00000000..2a153d20
--- /dev/null
+++ b/externals/gridflow/pd_examples/color_correction.pd
@@ -0,0 +1,154 @@
+#N canvas 455 129 676 546 10;
+#X text 360 96 sigma (extremes);
+#X obj 134 433 #out window;
+#X text 361 171 linear (contrast);
+#X obj 134 364 shunt 2;
+#N canvas 1 96 188 188 color 0;
+#X obj 55 134 # inv+;
+#X obj 55 90 # inv+ 255;
+#X obj 127 89 inlet;
+#X obj 55 177 outlet 0;
+#X obj 55 43 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 55 22 inlet;
+#X obj 55 112 #outer <;
+#X obj 55 155 # & 255;
+#X obj 55 67 #for 0 256 1;
+#X connect 0 0 7 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 1;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 0 0;
+#X connect 7 0 3 0;
+#X connect 8 0 1 0;
+#X restore 184 386 pd color correction graph generator;
+#X obj 19 295 #in;
+#X text 360 244 constant (brightness);
+#N canvas 604 262 237 400 color-correction 0;
+#X obj 23 214 # + 128;
+#X obj 23 194 # /;
+#X obj 23 112 # *;
+#X obj 23 291 # +;
+#X obj 77 112 # max 32;
+#X obj 23 317 # max 0;
+#X obj 77 151 # tanh* 512;
+#X obj 23 340 # min 255;
+#X obj 23 64 # gamma;
+#X obj 77 131 # << 5;
+#X obj 23 93 # - 128;
+#X obj 23 172 # tanh* 65535;
+#X obj 23 132 # >> 2;
+#X text 89 327 trim;
+#X obj 95 242 inlet linear;
+#X obj 114 264 inlet constant;
+#X obj 23 243 # *>>8;
+#X obj 77 93 inlet sigma;
+#X obj 34 38 inlet gamma;
+#X obj 23 12 inlet image;
+#X obj 23 369 outlet image;
+#X connect 0 0 16 0;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 3 0 5 0;
+#X connect 4 0 2 1;
+#X connect 4 0 9 0;
+#X connect 5 0 7 0;
+#X connect 6 0 1 1;
+#X connect 7 0 20 0;
+#X connect 8 0 10 0;
+#X connect 9 0 6 0;
+#X connect 10 0 2 0;
+#X connect 11 0 1 0;
+#X connect 12 0 11 0;
+#X connect 14 0 16 1;
+#X connect 15 0 3 1;
+#X connect 16 0 3 0;
+#X connect 17 0 4 0;
+#X connect 18 0 8 1;
+#X connect 19 0 8 0;
+#X restore 176 274 pd color-correction;
+#X obj 134 386 #store;
+#X obj 29 5 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 29 50 #for 0 256 1;
+#X msg 19 274 open teapot.png \, bang;
+#X obj 164 298 #finished;
+#X obj 29 27 metro 33.3667;
+#X obj 19 254 loadbang;
+#X obj 256 52 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 277 53 regular;
+#X text 276 68 solarize;
+#X text 277 82 solarize 2;
+#X obj 29 91 shunt 3;
+#X obj 29 163 t a;
+#X obj 122 146 # sin* 255;
+#X obj 123 127 # / 255;
+#X obj 123 108 # * 18000;
+#X obj 190 351 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 209 351 see picture;
+#X text 209 366 see graph;
+#X obj 8 231 spigot;
+#X obj 57 232 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 13 214 enable stream;
+#X text 361 20 gamma (midtones);
+#X msg 254 143 3 # 256;
+#X obj 253 123 loadbang;
+#X msg 237 171 3 # 0;
+#X obj 8 320 #camera;
+#X obj 362 37 #color 0 1024 1;
+#X obj 362 112 #color 0 1024 1;
+#X obj 362 186 #color 0 1024 1;
+#X obj 362 258 #color -256 256 1;
+#X obj 51 114 #solarize;
+#X obj 134 411 #apply_colormap_channelwise;
+#X obj 2 -38 cnv 15 720 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 -25 Copyright 2002 Mathieu Bouchard;
+#X obj 2 477 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 10 484 GridFlow 0.8.0;
+#X text 15 -38 color_correction.pd;
+#X obj 29 71 #outer + (0 0 0);
+#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 12 0;
+#X connect 7 0 4 1;
+#X connect 7 0 40 1;
+#X connect 8 0 40 0;
+#X connect 9 0 13 0;
+#X connect 10 0 46 0;
+#X connect 11 0 5 0;
+#X connect 12 0 3 0;
+#X connect 13 0 10 0;
+#X connect 13 0 27 0;
+#X connect 14 0 11 0;
+#X connect 15 0 19 1;
+#X connect 19 0 20 0;
+#X connect 19 1 39 0;
+#X connect 19 2 23 0;
+#X connect 20 0 7 0;
+#X connect 21 0 20 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 3 1;
+#X connect 27 0 34 0;
+#X connect 28 0 27 1;
+#X connect 31 0 35 0;
+#X connect 31 0 36 0;
+#X connect 31 0 37 0;
+#X connect 32 0 31 0;
+#X connect 32 0 33 0;
+#X connect 33 0 38 0;
+#X connect 34 0 8 1;
+#X connect 35 0 7 1;
+#X connect 36 0 7 2;
+#X connect 37 0 7 3;
+#X connect 38 0 7 4;
+#X connect 39 0 20 0;
+#X connect 40 0 1 0;
+#X connect 46 0 19 0;
diff --git a/externals/gridflow/pd_examples/color_detect.pd b/externals/gridflow/pd_examples/color_detect.pd
new file mode 100644
index 00000000..91610cdb
--- /dev/null
+++ b/externals/gridflow/pd_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/pd_examples/convolve.pd b/externals/gridflow/pd_examples/convolve.pd
new file mode 100644
index 00000000..19a08510
--- /dev/null
+++ b/externals/gridflow/pd_examples/convolve.pd
@@ -0,0 +1,94 @@
+#N canvas 17 90 652 511 10;
+#X msg 382 117 3 3 # 0 4 0 4 9 -4 0 -4 0;
+#X obj 20 29 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 386 63 3 3 # 4 0 0 0 1 0 0 0 4;
+#X obj 20 130 #store;
+#X obj 116 218 # / 9;
+#X msg 381 37 3 3 # 1 1 1 1 1 1 1 1 1;
+#X obj 76 131 #out window;
+#X msg 399 180 1 3 # 0 9 -9;
+#X obj 58 85 #in;
+#X msg 387 90 3 3 # 2 2 2 2 -7 2 2 2 2;
+#X obj 20 -24 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 116 286 @! abs;
+#X obj 116 352 # max 0;
+#X text 331 -15 step 1: select one of those six grids;
+#X obj 116 331 # min 255;
+#X obj 58 45 loadbang;
+#X obj 20 2 metro 33.3667;
+#X obj 58 107 t a;
+#X obj 116 197 #convolve \, seed 4;
+#X obj 332 5 loadbang;
+#X text -7 149 feedback loop;
+#X obj 116 244 shunt 2;
+#X obj 171 246 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 253 227 0;
+#X obj 163 307 # + 128;
+#X msg 253 251 1;
+#X obj 331 307 display;
+#X obj 48 233 fps;
+#X obj 40 277 print;
+#X obj -15 391 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 398 GridFlow 0.8.0;
+#X text -7 398 GridFlow 0.8.0;
+#X obj -13 -85 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -72 Copyright 2002 Mathieu Bouchard;
+#X text 0 -85 convolve.pd;
+#X msg 399 159 1 3 # 0 2 -2;
+#X msg 399 212 3 3 # 0 -1 0 -1 4 -1 0 -1 0;
+#X msg 397 235 3 3 # -1 -1 -1 -1 8 -1 -1 -1 -1;
+#X text 506 192 Laplacian masks;
+#X msg 396 280 3 3 # 0 -1 0 -1 13 -1 0 -1 0;
+#X text 542 261 Sharpen;
+#X text 507 17 Blurs;
+#X obj 163 265 # << 4;
+#X text 416 140 Edge detection;
+#X msg 58 65 open babbage.jpg \, bang;
+#X connect 0 0 23 0;
+#X connect 0 0 18 1;
+#X connect 0 0 26 0;
+#X connect 1 0 3 0;
+#X connect 2 0 23 0;
+#X connect 2 0 18 1;
+#X connect 3 0 18 0;
+#X connect 4 0 21 0;
+#X connect 5 0 23 0;
+#X connect 5 0 18 1;
+#X connect 6 0 27 0;
+#X connect 7 0 18 1;
+#X connect 7 0 25 0;
+#X connect 8 0 17 0;
+#X connect 9 0 23 0;
+#X connect 9 0 18 1;
+#X connect 10 0 16 0;
+#X connect 11 0 14 0;
+#X connect 12 0 17 0;
+#X connect 14 0 12 0;
+#X connect 15 0 44 0;
+#X connect 16 0 1 0;
+#X connect 17 0 3 1;
+#X connect 17 0 6 0;
+#X connect 18 0 4 0;
+#X connect 19 0 5 0;
+#X connect 21 0 11 0;
+#X connect 21 1 42 0;
+#X connect 22 0 21 1;
+#X connect 23 0 22 0;
+#X connect 24 0 14 0;
+#X connect 25 0 22 0;
+#X connect 27 0 28 0;
+#X connect 35 0 23 0;
+#X connect 35 0 18 1;
+#X connect 36 0 18 1;
+#X connect 36 0 25 0;
+#X connect 37 0 25 0;
+#X connect 37 0 18 1;
+#X connect 39 0 23 0;
+#X connect 39 0 18 1;
+#X connect 42 0 24 0;
+#X connect 44 0 8 0;
diff --git a/externals/gridflow/pd_examples/cross_fade.pd b/externals/gridflow/pd_examples/cross_fade.pd
new file mode 100644
index 00000000..f7af6195
--- /dev/null
+++ b/externals/gridflow/pd_examples/cross_fade.pd
@@ -0,0 +1,73 @@
+#N canvas 401 101 681 500 10;
+#X obj 33 191 # *>>8;
+#X text 60 235 first picture plus a fraction of the difference;
+#X obj 33 233 # +;
+#X obj 33 170 #store;
+#X obj 264 103 # inv+;
+#X obj 88 254 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X text 152 324 note: the #layer/#join objects can make the crossfade
+process simpler but it's still not faster.;
+#X obj 50 -30 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X msg 309 72 open r001.jpg \, cast int16 \, bang;
+#X obj 283 72 #in;
+#X obj 33 149 #finished;
+#X text 109 257 click to clip out-of-range colours;
+#X text 82 190 multiply by a N/256 fraction;
+#X obj 81 295 # max 0;
+#X obj 264 51 #in;
+#X obj 81 274 # min 255;
+#X obj 33 326 #out window;
+#X obj 33 109 #cast int16;
+#X text 81 170 keep the difference between both pictures;
+#X msg 290 51 open b001.jpg \, cast int16 \, bang;
+#X obj 290 31 t b b;
+#X obj 330 31 loadbang;
+#X obj 33 253 shunt 2;
+#X obj 50 -5 metro 33.3667;
+#X obj 50 15 float;
+#X obj 62 44 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 94 14 + 4;
+#X obj 50 65 pingpong 256;
+#X obj 61 87 hsl 129 15 0 256 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 33 128 t a a;
+#X text 153 362 also #draw_image/#join is a possibility;
+#X obj 0 -77 cnv 15 680 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 14 -64 Copyright 2002 Mathieu Bouchard;
+#X text 14 -80 cross_fade.pd;
+#X obj 0 391 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 8 399 GridFlow 0.8.0;
+#X connect 0 0 2 0;
+#X connect 2 0 22 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 1;
+#X connect 5 0 22 1;
+#X connect 7 0 23 0;
+#X connect 8 0 9 0;
+#X connect 9 0 4 1;
+#X connect 10 0 3 0;
+#X connect 13 0 16 0;
+#X connect 14 0 4 0;
+#X connect 14 0 2 1;
+#X connect 15 0 13 0;
+#X connect 17 0 29 0;
+#X connect 19 0 14 0;
+#X connect 20 0 19 0;
+#X connect 20 1 8 0;
+#X connect 21 0 20 0;
+#X connect 22 0 16 0;
+#X connect 22 1 15 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 24 0 26 0;
+#X connect 24 0 27 0;
+#X connect 26 0 24 1;
+#X connect 27 0 28 0;
+#X connect 27 0 17 0;
+#X connect 29 0 10 0;
+#X connect 29 1 0 1;
diff --git a/externals/gridflow/pd_examples/drag_rectangle.pd b/externals/gridflow/pd_examples/drag_rectangle.pd
new file mode 100644
index 00000000..3453c9a8
--- /dev/null
+++ b/externals/gridflow/pd_examples/drag_rectangle.pd
@@ -0,0 +1,110 @@
+#N canvas 702 123 647 484 10;
+#X obj 231 -7 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 231 117 #out window;
+#X obj 21 144 hsl 128 15 0 319 0 0 h_end_o h_end_i empty -2 -8 1 10
+-262144 -1 -1 12700 1;
+#X obj 21 -4 hsl 128 15 0 319 0 0 h_start_o h_start_i empty 0 8 1 10
+-262144 -66577 -258699 0 0;
+#X obj 3 13 vsl 15 128 239 0 0 0 v_start_o v_start_i empty 0 -8 1 10
+-262144 -1 -1 12647 1;
+#X obj 151 13 vsl 15 128 239 0 0 0 v_end_o v_end_i empty 0 -8 1 10
+-262144 -1 -1 425 1;
+#N canvas 504 374 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 93 37 unpack 0 0;
+#X obj 173 37 unpack 0 0;
+#X obj 126 61 #pack 4;
+#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 );
+#X connect 0 0 13 0;
+#X connect 2 0 8 0;
+#X connect 4 0 9 0;
+#X connect 8 0 10 0;
+#X connect 8 1 10 1;
+#X connect 9 0 10 2;
+#X connect 9 1 10 3;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 2;
+#X connect 13 0 6 0;
+#X restore 231 97 pd make_rectangle;
+#X obj 231 43 metro 33.3667;
+#X text -22 -5 start;
+#X text 155 144 end;
+#X obj 328 23 loadbang;
+#X obj 231 72 #store;
+#X obj 393 25 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 315 117 #mouse \, ...;
+#X obj 260 266 listelement 0;
+#X obj 367 190 listelement 1;
+#X obj 260 225 listelement 0;
+#X obj 368 149 listelement 1;
+#X obj 368 170 s h_start_i;
+#X obj 367 211 s h_end_i;
+#X obj 260 287 s v_end_i;
+#X obj 260 246 s v_start_i;
+#X obj 378 65 loadbang;
+#X msg 378 85 0 0;
+#X obj 328 161 t a;
+#X obj 64 330 #out window;
+#X obj 47 267 #for ( 0 0 ) ( 0 0 ) ( 1 1 );
+#X obj 112 221 t b a;
+#X obj 64 294 #store;
+#X msg 48 243 set ( \$1 \$2 );
+#X obj 327 43 #in b001.jpg;
+#X text 30 35 drag the mouse;
+#X text 56 20 step 2:;
+#X text 39 51 inside the;
+#X text 37 66 first window;
+#X text 218 -25 step 1: turn on;
+#X text 69 312 cropping (to 2nd window);
+#X obj -41 373 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -33 380 GridFlow 0.8.0;
+#X text -33 380 GridFlow 0.8.0;
+#X obj -40 -77 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -27 -64 Copyright 2002 Mathieu Bouchard;
+#X text -27 -77 drag_rectangle.pd;
+#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 30 0;
+#X connect 11 0 6 0;
+#X connect 12 0 30 0;
+#X connect 13 0 6 1;
+#X connect 13 0 16 0;
+#X connect 13 0 17 0;
+#X connect 13 0 29 0;
+#X connect 13 0 24 0;
+#X connect 13 1 24 0;
+#X connect 13 2 24 0;
+#X connect 13 2 27 0;
+#X connect 14 0 20 0;
+#X connect 15 0 19 0;
+#X connect 16 0 21 0;
+#X connect 17 0 18 0;
+#X connect 22 0 23 0;
+#X connect 23 0 6 1;
+#X connect 23 0 6 2;
+#X connect 24 0 14 0;
+#X connect 24 0 15 0;
+#X connect 24 0 6 2;
+#X connect 26 0 28 0;
+#X connect 27 0 26 0;
+#X connect 27 1 26 1;
+#X connect 28 0 25 0;
+#X connect 29 0 26 0;
+#X connect 30 0 11 1;
+#X connect 30 0 28 1;
diff --git a/externals/gridflow/pd_examples/eclipse.pd b/externals/gridflow/pd_examples/eclipse.pd
new file mode 100644
index 00000000..65ef9ef3
--- /dev/null
+++ b/externals/gridflow/pd_examples/eclipse.pd
@@ -0,0 +1,80 @@
+#N canvas 623 182 635 533 10;
+#X floatatom 292 323 5 0 0 0 - - -;
+#X msg 244 303 24;
+#X obj 61 -35 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 244 281 loadbang;
+#X msg 292 303 32;
+#X floatatom 244 323 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 239 258 size of subimages;
+#X obj 61 111 t a a a;
+#X obj 61 166 t a a;
+#X text 224 54 gain on colour blue;
+#X obj 61 17 #camera;
+#X obj 61 73 #scale_by 2;
+#X obj 141 97 #dim;
+#X obj 141 117 #inner (3 2 # 1 0 0 1 0 0);
+#X obj 61 147 #finished;
+#X obj 61 211 # /;
+#X obj 61 234 # *;
+#X obj 58 265 #store;
+#X obj 70 311 # *;
+#X obj 70 334 # >> 7;
+#X obj 70 356 # min 255;
+#X obj 70 378 #out window;
+#X obj 244 343 #pack 2;
+#X obj 141 242 # /;
+#X obj 107 265 #store;
+#X obj 107 242 # *;
+#X obj 61 186 #for (0 0) (240 320) (1 1);
+#X obj 107 208 #for (0 0) (240 320) (1 1);
+#X obj 61 54 # *>>8 (256 256 384);
+#X obj 1 418 cnv 15 640 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 9 425 GridFlow 0.8.0;
+#X text 9 425 GridFlow 0.8.0;
+#X obj 3 -85 cnv 15 640 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 16 -72 Copyright 2002 Mathieu Bouchard;
+#X text 121 17 <-- open this;
+#X text 16 -85 eclipse.pd;
+#X connect 0 0 24 1;
+#X connect 1 0 5 0;
+#X connect 2 0 7 0;
+#X connect 3 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 5 0 24 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 0;
+#X connect 9 0 16 0;
+#X connect 9 1 14 0;
+#X connect 9 1 19 1;
+#X connect 9 1 26 1;
+#X connect 10 0 28 0;
+#X connect 10 1 29 0;
+#X connect 12 0 30 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 25 0;
+#X connect 15 0 28 1;
+#X connect 15 0 29 1;
+#X connect 16 0 10 0;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 24 0 17 1;
+#X connect 24 0 18 1;
+#X connect 24 0 25 1;
+#X connect 25 0 27 1;
+#X connect 26 0 20 1;
+#X connect 27 0 26 0;
+#X connect 28 0 17 0;
+#X connect 29 0 27 0;
+#X connect 30 0 13 0;
diff --git a/externals/gridflow/pd_examples/epicycloid.pd b/externals/gridflow/pd_examples/epicycloid.pd
new file mode 100644
index 00000000..c1589de9
--- /dev/null
+++ b/externals/gridflow/pd_examples/epicycloid.pd
@@ -0,0 +1,125 @@
+#N canvas 443 76 1178 736 10;
+#X text 18 93 epicycloid;
+#X text 18 116 x(t) = (R+r) cos(t) - p*cos((R+r)t/r);
+#X text 18 140 y(t) = (R+r) sin(t) - p*sin((R+r)t/r);
+#X obj 38 383 #draw_polygon put 1;
+#X obj 287 438 #import ( 4 2 );
+#X obj 38 406 #out window;
+#X obj -22 -22 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 327 375 pack f f f f;
+#X msg 327 404 \$2 \$1 \$4 \$1 \$4 \$3 \$2 \$3;
+#X text 334 350 x;
+#X text 394 352 y;
+#X text 421 354 y+1;
+#X text 357 352 x+1;
+#X floatatom 327 327 5 0 0 0 - - -;
+#X obj 369 325 + 1;
+#X floatatom 405 327 5 0 0 0 - - -;
+#X obj 447 324 + 1;
+#X obj 332 297 t f f;
+#X obj 417 297 t f f;
+#X obj 0 50 s met;
+#X obj 286 350 r met;
+#X obj 468 97 hsl 128 15 5 100 0 1 empty empty empty -2 -6 0 8 -24198
+-1 -1 5500 1;
+#X obj 585 148 hsl 128 15 -100 100 0 1 empty empty empty -2 -6 0 8
+-44926 -1 -1 4000 1;
+#X obj 732 173 hsl 128 15 -150 150 0 1 empty empty empty -2 -6 0 8
+-258699 -1 -1 3200 1;
+#X text 439 52 t = valeur en angles de 0 a 360;
+#X obj 465 153 t f f;
+#X obj 582 180 t f f;
+#X obj 729 193 t f f;
+#X obj 333 127 * 6.28319;
+#X obj 333 106 / 360;
+#X floatatom 333 88 5 0 0 0 - - -;
+#X obj 333 152 t f f;
+#X obj -22 355 #store;
+#X obj 15 205 loadbang;
+#X obj 420 250 expr ($f2+$f3)*sin($f1) - $f4*sin(($f2+$f3)*$f1/$f3)
+;
+#X obj 333 212 expr ($f2+$f3)*cos($f1) - $f4*cos(($f2+$f3)*$f1/$f3)
+;
+#X obj 333 65 + 1;
+#X msg 333 41 1;
+#X floatatom 375 65 5 0 0 0 - - -;
+#X msg 375 16 0;
+#X text 406 19 reset count;
+#X text 129 231 reset image;
+#X text 540 126 r = Rayon du deuxieme cercle -100 a 100;
+#X obj 420 275 + 150;
+#X obj 333 272 + 150;
+#X floatatom 477 123 5 0 0 0 - - -;
+#X floatatom 633 173 5 0 0 0 - - -;
+#X floatatom 779 196 5 0 0 0 - - -;
+#X obj -22 7 metro 1;
+#X obj 33 -21 hsl 128 15 0 15 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X text 440 78 R = Rayon du premier cercle 5 a 100;
+#X obj -38 525 cnv 15 900 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -29 532 GridFlow 0.8.0;
+#X text -29 532 GridFlow 0.8.0;
+#X obj -35 -85 cnv 15 940 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 102 317 #color;
+#X obj 102 268 loadbang;
+#X msg 102 292 230 224 0;
+#X msg 15 232 300 300 3 # 0;
+#X text -22 -72 Copyright 2004 Alexandre Castonguay;
+#X text -22 -85 epicycloid.pd;
+#X text 80 204 start with a blank \, black image;
+#X text 727 158 deuxieme cercle - 150 a 150;
+#X text 727 143 p = distance du centre du;
+#X connect 3 0 5 0;
+#X connect 3 0 32 1;
+#X connect 4 0 3 2;
+#X connect 6 0 48 0;
+#X connect 7 0 8 0;
+#X connect 8 0 4 0;
+#X connect 13 0 7 0;
+#X connect 14 0 7 2;
+#X connect 15 0 7 1;
+#X connect 16 0 7 3;
+#X connect 17 0 13 0;
+#X connect 17 1 14 0;
+#X connect 18 0 15 0;
+#X connect 18 1 16 0;
+#X connect 20 0 7 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 23 0 27 0;
+#X connect 23 0 47 0;
+#X connect 25 0 35 1;
+#X connect 25 1 34 1;
+#X connect 26 0 35 2;
+#X connect 26 1 34 2;
+#X connect 27 0 35 3;
+#X connect 27 1 34 3;
+#X connect 28 0 31 0;
+#X connect 29 0 28 0;
+#X connect 30 0 29 0;
+#X connect 31 0 35 0;
+#X connect 31 1 34 0;
+#X connect 32 0 3 0;
+#X connect 33 0 58 0;
+#X connect 34 0 43 0;
+#X connect 35 0 44 0;
+#X connect 36 0 38 0;
+#X connect 36 0 30 0;
+#X connect 37 0 36 0;
+#X connect 38 0 36 1;
+#X connect 39 0 38 0;
+#X connect 43 0 18 0;
+#X connect 44 0 17 0;
+#X connect 48 0 19 0;
+#X connect 48 0 32 0;
+#X connect 48 0 37 0;
+#X connect 49 0 48 1;
+#X connect 55 0 3 1;
+#X connect 56 0 57 0;
+#X connect 57 0 55 0;
+#X connect 58 0 32 1;
diff --git a/externals/gridflow/pd_examples/feedback_fractal.pd b/externals/gridflow/pd_examples/feedback_fractal.pd
new file mode 100644
index 00000000..2d012a78
--- /dev/null
+++ b/externals/gridflow/pd_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 462 229 pd experimental features;
+#X text 527 134 Choose Julia Mapping or Rotation;
+#X obj 31 -34 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 414 67 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 190 59 apply transform (with feedback);
+#X floatatom 454 281 5 0 0 0 - - -;
+#X floatatom 451 323 5 0 0 0 - - -;
+#X msg 84 319 cast uint8 \, bang;
+#X text 530 281 zoom;
+#X text 531 324 move x;
+#X msg 501 324 -45;
+#X msg 501 281 128;
+#X obj 170 60 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 450 92 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 505 133 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X floatatom 451 303 5 0 0 0 - - -;
+#X text 531 303 move y;
+#X msg 501 303 193;
+#X obj 31 -7 metro 33.3667;
+#X obj 450 131 shunt 2;
+#X obj 84 297 loadbang;
+#X obj 414 45 t b b;
+#X obj 414 21 loadbang;
+#X obj 31 276 t a;
+#X obj 202 99 loadbang;
+#X obj 212 119 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 200 266 t a;
+#X obj 31 21 t b b;
+#X obj 73 22 float;
+#X obj 73 41 + 1;
+#X obj 84 61 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 24 256;
+#X obj 508 257 t b;
+#X text 230 120 reset transform;
+#X obj 99 41 mod 60;
+#X obj 73 81 sel 59;
+#X obj 31 113 #store;
+#X obj 31 189 # << 7;
+#X obj 31 223 #fade 10;
+#X obj 31 252 # >> 7;
+#X obj 31 335 #store;
+#X obj 84 340 #in teapot.png;
+#X obj 31 364 #out window;
+#X obj 414 391 # -;
+#X obj 438 367 # - 128;
+#X obj 438 345 #two;
+#X obj 414 303 # /;
+#X obj 414 229 #store;
+#X obj 450 110 #for ( -128 -128 ) ( 128 128 ) ( 1 1 );
+#X obj 446 154 @complex_sq;
+#X obj 461 175 #inner (2 2 # 120 30 -30 120);
+#X obj -13 -87 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -15 431 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 438 GridFlow 0.8.0;
+#X text -7 438 GridFlow 0.8.0;
+#X text 0 -87 feedback_fractal.pd;
+#X text 0 -74 Copyright 2001 Mathieu Bouchard;
+#X obj 212 138 #for (0 0) (256 256) (1 1);
+#X obj 210 210 #convolve (2 2 # 1);
+#X obj 209 232 # >> 2;
+#X obj 200 181 #store;
+#X obj 200 159 #store;
+#X connect 0 0 46 1;
+#X connect 2 0 18 0;
+#X connect 3 0 46 0;
+#X connect 5 0 45 1;
+#X connect 7 0 40 0;
+#X connect 10 0 6 0;
+#X connect 11 0 17 0;
+#X connect 11 0 5 0;
+#X connect 12 0 60 0;
+#X connect 13 0 47 0;
+#X connect 14 0 19 1;
+#X connect 17 0 15 0;
+#X connect 18 0 27 0;
+#X connect 19 0 48 0;
+#X connect 19 1 49 0;
+#X connect 20 0 7 0;
+#X connect 21 0 3 0;
+#X connect 21 1 13 0;
+#X connect 21 1 31 0;
+#X connect 22 0 21 0;
+#X connect 23 0 39 0;
+#X connect 24 0 56 0;
+#X connect 25 0 56 0;
+#X connect 26 0 35 1;
+#X connect 26 0 59 1;
+#X connect 27 0 35 0;
+#X connect 27 1 28 0;
+#X connect 28 0 29 0;
+#X connect 29 0 30 0;
+#X connect 29 0 33 0;
+#X connect 29 0 34 0;
+#X connect 31 0 11 0;
+#X connect 31 0 17 0;
+#X connect 31 0 10 0;
+#X connect 33 0 28 1;
+#X connect 34 0 12 0;
+#X connect 35 0 36 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 23 0;
+#X connect 39 0 41 0;
+#X connect 40 0 39 1;
+#X connect 42 0 60 1;
+#X connect 43 0 42 1;
+#X connect 45 0 42 0;
+#X connect 46 0 45 0;
+#X connect 47 0 19 0;
+#X connect 48 0 46 1;
+#X connect 49 0 46 1;
+#X connect 56 0 35 1;
+#X connect 56 0 59 1;
+#X connect 57 0 58 0;
+#X connect 58 0 26 0;
+#X connect 59 0 26 0;
+#X connect 60 0 59 0;
diff --git a/externals/gridflow/pd_examples/fire.pd b/externals/gridflow/pd_examples/fire.pd
new file mode 100644
index 00000000..2a88a3a0
--- /dev/null
+++ b/externals/gridflow/pd_examples/fire.pd
@@ -0,0 +1,180 @@
+#N canvas 399 42 621 522 10;
+#X obj 347 171 loadbang;
+#X text 229 287 palette generator;
+#X obj 103 329 fps detailed;
+#X obj 250 325 #for 0 256 1;
+#X obj 23 180 #store;
+#X obj 250 347 #outer gamma;
+#X obj 103 351 print;
+#X msg 60 130 \$1 \$2 # 0;
+#X obj 71 217 #outer ignore ( 0 );
+#X obj 250 304 #finished;
+#X obj 23 -25 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 204 -21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 40 71 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 318 304 fork;
+#X text 262 2 height width;
+#X obj 103 307 #out window;
+#X text 101 269 applying palette;
+#X obj 103 287 #store;
+#N canvas 268 454 450 300 circle 0;
+#X obj 47 177 #fold +;
+#X obj 47 244 # << 7;
+#X obj 47 199 # >> 6;
+#X obj 47 157 @! sq;
+#X obj 47 222 # == 10;
+#X obj 47 15 inlet size;
+#X obj 47 267 outlet matrix;
+#X obj 47 126 #for ( 0 0 ) ( 0 0 ) ( 1 1 );
+#X obj 47 34 # / 2;
+#X obj 47 77 t a a;
+#X obj 47 54 #export_list;
+#X obj 47 101 # inv+;
+#X connect 0 0 2 0;
+#X connect 1 0 6 0;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 7 0 3 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 9 1 7 1;
+#X connect 10 0 9 0;
+#X connect 11 0 7 0;
+#X restore 247 84 pd circle generator;
+#N canvas 498 387 361 260 baseline 0;
+#X obj 18 123 #fold +;
+#X obj 127 149 - 4;
+#X obj 18 56 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 18 101 # & ( -1 0 );
+#X obj 18 146 # ==;
+#X obj 127 130 listelement 0;
+#X text 93 10 line generator;
+#X obj 18 166 # << 7;
+#X obj 18 79 #for ( 0 0 ) ( 0 0 ) ( 1 1 );
+#X obj 127 110 #export_list;
+#X obj 18 9 inlet size;
+#X obj 18 187 outlet matrix;
+#X obj 18 33 fork;
+#X text 154 151 four pixels from bottom;
+#X connect 0 0 4 0;
+#X connect 1 0 4 1;
+#X connect 2 0 8 0;
+#X connect 3 0 0 0;
+#X connect 4 0 7 0;
+#X connect 5 0 1 0;
+#X connect 7 0 11 0;
+#X connect 8 0 3 0;
+#X connect 9 0 5 0;
+#X connect 10 0 12 0;
+#X connect 12 0 2 0;
+#X connect 12 1 9 0;
+#X connect 12 1 8 1;
+#X restore 204 117 pd baseline generator;
+#X text 78 236 (height \, width \, 1) grid = grey image;
+#X text 49 113 make blank image;
+#X text 30 163 feedback loop;
+#X text 78 200 (height \, width) grid = matrix;
+#X obj 204 63 shunt 2;
+#X obj 258 64 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 347 213 #color 0 800 1;
+#X msg 347 191 600 200 75;
+#X obj 224 -22 loadbang;
+#N canvas 645 360 400 289 fire 1;
+#X obj 174 180 #store;
+#X obj 61 196 #export_list;
+#X obj 6 65 # >> 2;
+#X obj 6 26 fork;
+#X obj 6 45 #convolve ( 3 3 # 1 0 0 0 1 0 1 1 1 );
+#X obj 6 235 # & 255;
+#X obj 174 115 listmake;
+#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 connect 0 0 17 1;
+#X connect 1 0 6 1;
+#X connect 2 0 17 0;
+#X connect 3 0 4 0;
+#X connect 3 1 10 0;
+#X connect 4 0 2 0;
+#X connect 5 0 15 0;
+#X connect 6 0 8 0;
+#X connect 7 0 14 0;
+#X connect 8 0 24 0;
+#X connect 9 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 14 1;
+#X connect 11 0 13 0;
+#X connect 12 0 0 1;
+#X connect 13 0 1 0;
+#X connect 14 0 5 0;
+#X connect 16 0 25 0;
+#X connect 17 0 7 0;
+#X connect 18 0 3 0;
+#X connect 19 0 16 0;
+#X connect 24 0 0 0;
+#X connect 25 0 12 0;
+#X restore 71 180 pd fire generator;
+#X text 183 46 note: reset the size if you change the generator;
+#X msg 204 2 80 256;
+#X obj 23 -2 metro 33.3667;
+#X obj -15 -84 cnv 15 620 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -5 -84 fire.pd;
+#X text -5 -71 Copyright 2001 Mathieu Bouchard;
+#X obj -15 403 cnv 15 620 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 411 GridFlow 0.8.0;
+#X text -7 411 GridFlow 0.8.0;
+#X connect 0 0 27 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 29 0;
+#X connect 5 0 17 1;
+#X connect 7 0 4 1;
+#X connect 8 0 17 0;
+#X connect 9 0 3 0;
+#X connect 10 0 32 0;
+#X connect 11 0 31 0;
+#X connect 12 0 4 0;
+#X connect 13 0 9 0;
+#X connect 13 1 5 1;
+#X connect 15 0 2 0;
+#X connect 17 0 15 0;
+#X connect 18 0 29 1;
+#X connect 19 0 29 1;
+#X connect 24 0 19 0;
+#X connect 24 1 18 0;
+#X connect 25 0 24 1;
+#X connect 26 0 13 0;
+#X connect 27 0 26 0;
+#X connect 28 0 31 0;
+#X connect 29 0 8 0;
+#X connect 29 0 4 1;
+#X connect 31 0 7 0;
+#X connect 31 0 29 2;
+#X connect 31 0 24 0;
+#X connect 32 0 4 0;
diff --git a/externals/gridflow/pd_examples/game_of_life.pd b/externals/gridflow/pd_examples/game_of_life.pd
new file mode 100644
index 00000000..c35187a9
--- /dev/null
+++ b/externals/gridflow/pd_examples/game_of_life.pd
@@ -0,0 +1,67 @@
+#N canvas 400 83 719 454 10;
+#X text 41 -19 click here;
+#X obj 23 -17 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 31 251 #out window;
+#X text 48 92 this is the feedback loop;
+#X obj 123 0 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 141 -1 for 0 10 1;
+#X obj 263 53 loadbang;
+#X obj 141 73 #store;
+#X obj 141 19 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 31 291 print;
+#X obj 31 271 fps detailed;
+#X obj 31 113 fork;
+#X text 159 19 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 103 #convolve (3 3 b # 0 0 0 0 1) \, op >> \, seed (b # -5)
+;
+#X obj 28 122 # < (b # 3);
+#X connect 0 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X restore 31 72 pd game of life;
+#X text 260 20 init with a random map;
+#X text 262 35 10% white dots;
+#X text 33 179 convert this 1-bit matrix to standard RGB \; 1 becomes
+-1 becomes 255 \, but 0 stays 0;
+#X obj 23 15 metro 5;
+#X obj -15 339 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 346 GridFlow 0.8.0;
+#X text -7 346 GridFlow 0.8.0;
+#X obj -13 -85 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -85 game_of_life.pd;
+#X text 0 -72 Copyright 2001 Mathieu Bouchard;
+#X obj 263 97 # rand (b #);
+#X obj 263 119 # == (b # 0);
+#X msg 263 75 240 320 b # 10;
+#X obj 31 209 # inv+ (b # 0);
+#X obj 31 230 #outer ignore (3 b #);
+#X connect 1 0 17 0;
+#X connect 2 0 10 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 26 0;
+#X connect 7 0 13 0;
+#X connect 8 0 7 0;
+#X connect 10 0 9 0;
+#X connect 11 0 27 0;
+#X connect 11 1 7 1;
+#X connect 13 0 11 0;
+#X connect 17 0 7 0;
+#X connect 24 0 25 0;
+#X connect 25 0 11 0;
+#X connect 26 0 24 0;
+#X connect 27 0 28 0;
+#X connect 28 0 2 0;
diff --git a/externals/gridflow/pd_examples/goop.pd b/externals/gridflow/pd_examples/goop.pd
new file mode 100644
index 00000000..8f96d2c4
--- /dev/null
+++ b/externals/gridflow/pd_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/pd_examples/hello-world.pd b/externals/gridflow/pd_examples/hello-world.pd
new file mode 100644
index 00000000..fb101d24
--- /dev/null
+++ b/externals/gridflow/pd_examples/hello-world.pd
@@ -0,0 +1,38 @@
+#N canvas 604 118 501 445 10;
+#X obj 46 67 # / 320;
+#X obj 46 187 # * 255;
+#X obj 46 153 # != 0;
+#X obj 46 -12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 46 280 #out window;
+#X obj 46 99 # inv+ 7;
+#X obj 46 15 #for 0 320 1;
+#X obj 46 48 # * 7;
+#X obj 46 -34 loadbang;
+#X text 66 -12 make one line:;
+#X text 54 31 numbers 0 to 319;
+#X text 55 84 numbers 0 to 6 repeated 45 or 46 times;
+#X text 56 116 numbers 7 down to 1 ...;
+#X text 53 172 3*1-bit rgb image line;
+#X text 83 206 3*8-bit rgb image line;
+#X text 53 234 repeat line 240 times;
+#X obj -13 -85 cnv 15 500 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -86 hello-world.pd;
+#X obj 46 134 #outer & (2 4 1);
+#X obj 46 252 #redim (240 320 3);
+#X obj -14 319 cnv 15 500 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 325 GridFlow 0.8.0;
+#X text -7 325 GridFlow 0.8.0;
+#X text 0 -72 Copyright 2001 Mathieu Bouchard;
+#X connect 0 0 5 0;
+#X connect 1 0 19 0;
+#X connect 2 0 1 0;
+#X connect 3 0 6 0;
+#X connect 5 0 18 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 8 0 3 0;
+#X connect 18 0 2 0;
+#X connect 19 0 4 0;
diff --git a/externals/gridflow/pd_examples/image_stats.pd b/externals/gridflow/pd_examples/image_stats.pd
new file mode 100644
index 00000000..9f9c753a
--- /dev/null
+++ b/externals/gridflow/pd_examples/image_stats.pd
@@ -0,0 +1,62 @@
+#N canvas 391 151 716 416 10;
+#X obj 257 173 print total_value;
+#X obj 523 151 #dim;
+#X obj 22 187 #export_list;
+#X obj 328 150 print number_of_values;
+#X obj 523 200 print number_of_dimensions;
+#X obj 523 173 #export;
+#X obj 185 91 #fold +;
+#X obj 281 201 /;
+#X obj 185 135 #fold +;
+#X obj 22 215 print total_pixel;
+#X obj 185 57 fork;
+#X obj 245 28 #in;
+#X obj 328 106 #fold * \, seed 1;
+#X obj 480 112 print dimensions;
+#X obj 281 228 print average_value;
+#X obj 186 157 #export;
+#X obj 185 113 #fold +;
+#X obj 480 90 #export_list;
+#X obj 480 68 #dim;
+#X obj 328 84 #dim;
+#X obj 328 128 #export;
+#X msg 271 -35 open bluemarble.jpg \, bang;
+#X msg 271 -15 open teapot.png \, bang;
+#X msg 271 5 open r001.jpg \, bang;
+#X obj -15 304 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 311 GridFlow 0.8.0;
+#X text -7 311 GridFlow 0.8.0;
+#X obj -13 -85 cnv 15 720 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -5 -72 Copyright 2001 Mathieu Bouchard;
+#X text -5 -86 image_stats.pd;
+#X obj 22 131 #fold + \, seed (3 #);
+#X obj 22 92 #fold + \, seed (3 #);
+#X text 460 -36 <-- click on one of these;
+#X connect 1 0 5 0;
+#X connect 2 0 9 0;
+#X connect 5 0 4 0;
+#X connect 6 0 16 0;
+#X connect 7 0 14 0;
+#X connect 8 0 15 0;
+#X connect 10 0 6 0;
+#X connect 10 0 31 0;
+#X connect 10 1 19 0;
+#X connect 11 0 10 0;
+#X connect 11 0 18 0;
+#X connect 12 0 20 0;
+#X connect 15 0 0 0;
+#X connect 15 0 7 0;
+#X connect 16 0 8 0;
+#X connect 17 0 13 0;
+#X connect 18 0 17 0;
+#X connect 18 0 1 0;
+#X connect 19 0 12 0;
+#X connect 20 0 3 0;
+#X connect 20 0 7 1;
+#X connect 21 0 11 0;
+#X connect 22 0 11 0;
+#X connect 23 0 11 0;
+#X connect 30 0 2 0;
+#X connect 31 0 30 0;
diff --git a/externals/gridflow/pd_examples/linear_transform.pd b/externals/gridflow/pd_examples/linear_transform.pd
new file mode 100644
index 00000000..b5e87d8d
--- /dev/null
+++ b/externals/gridflow/pd_examples/linear_transform.pd
@@ -0,0 +1,123 @@
+#N canvas 454 137 685 580 10;
+#X text 455 -6 click here to go in manual mode;
+#X floatatom 138 224 5 0 0 0 - - -;
+#X obj 7 289 # >> 11;
+#X obj 7 62 #store;
+#X obj 194 204 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 545 123 * 3;
+#X obj 418 376 # sin*;
+#X obj 194 223 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X floatatom 138 170 5 0 0 0 - - -;
+#X msg 448 137 10000;
+#X obj 7 -26 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X obj 194 166 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 94 40 loadbang;
+#X obj 82 266 #redim ( 2 2 );
+#X text 191 147 linear transform;
+#X obj 7 310 # + 128;
+#X floatatom 138 188 5 0 0 0 - - -;
+#X floatatom 138 206 5 0 0 0 - - -;
+#X obj 194 185 hsl 128 15 -4096 4096 0 0 empty empty empty -2 -6 0
+8 -260818 -1 -1 0 1;
+#X obj 418 175 vsl 15 128 0 35999 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 12700 1;
+#X obj 453 174 vsl 15 128 -10000 10000 0 0 empty empty empty 0 -8 0
+8 -260818 -1 -1 7400 1;
+#X obj 427 34 % 36000;
+#X obj 448 116 loadbang;
+#X text 360 146 rotozoomer;
+#X obj 545 143 # sin* 100;
+#X obj 384 -6 shunt 2;
+#X msg 132 342 open teapot.png \, bang;
+#X msg 545 215 set \$1;
+#X obj 132 321 loadbang;
+#X obj 7 363 #store;
+#X obj 7 384 #out window;
+#X obj 453 312 t b f;
+#X obj 439 -5 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 1 1
+;
+#X obj 81 247 #pack 4;
+#X obj 7 35 t b b;
+#X obj 384 33 float;
+#X obj 427 14 + 100;
+#X obj 545 164 # inv* 100000;
+#X obj 545 185 #export;
+#X obj 63 341 #camera;
+#X obj 132 363 #in;
+#X obj 63 321 spigot;
+#X obj 111 322 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 7 268 #inner;
+#X obj 81 144 loadbang;
+#X obj 23 412 fps detailed;
+#X obj 23 435 print;
+#X obj 7 8 metro 5;
+#X obj -18 -85 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 1 -72 Copyright 2002 Mathieu Bouchard;
+#X text 1 -85 convolve.pd;
+#X obj -18 -85 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 1 -85 linear_transform.pd;
+#X obj 94 61 #for (-128 -128) (128 128) (1 1);
+#X obj 418 355 #outer + (9000 18000 0 9000);
+#X text 1 -72 Copyright 2001 Mathieu Bouchard;
+#X obj -18 464 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -10 471 GridFlow 0.8.0;
+#X text -10 471 GridFlow 0.8.0;
+#X connect 1 0 33 3;
+#X connect 2 0 15 0;
+#X connect 3 0 43 0;
+#X connect 4 0 17 0;
+#X connect 5 0 24 0;
+#X connect 6 0 13 0;
+#X connect 7 0 1 0;
+#X connect 8 0 33 0;
+#X connect 9 0 20 0;
+#X connect 10 0 47 0;
+#X connect 11 0 8 0;
+#X connect 12 0 53 0;
+#X connect 13 0 43 1;
+#X connect 15 0 29 0;
+#X connect 16 0 33 1;
+#X connect 17 0 33 2;
+#X connect 18 0 16 0;
+#X connect 19 0 54 0;
+#X connect 20 0 31 0;
+#X connect 21 0 35 1;
+#X connect 22 0 9 0;
+#X connect 24 0 37 0;
+#X connect 25 0 35 0;
+#X connect 26 0 40 0;
+#X connect 27 0 20 0;
+#X connect 28 0 26 0;
+#X connect 29 0 30 0;
+#X connect 30 0 45 0;
+#X connect 31 0 19 0;
+#X connect 31 1 6 1;
+#X connect 32 0 25 1;
+#X connect 33 0 13 0;
+#X connect 34 0 3 0;
+#X connect 34 1 25 0;
+#X connect 34 1 41 0;
+#X connect 35 0 36 0;
+#X connect 35 0 19 0;
+#X connect 35 0 5 0;
+#X connect 36 0 21 0;
+#X connect 37 0 38 0;
+#X connect 38 0 27 0;
+#X connect 38 0 31 0;
+#X connect 39 0 29 1;
+#X connect 40 0 29 1;
+#X connect 41 0 39 0;
+#X connect 42 0 41 1;
+#X connect 43 0 2 0;
+#X connect 44 0 33 0;
+#X connect 45 0 46 0;
+#X connect 47 0 34 0;
+#X connect 53 0 3 1;
+#X connect 54 0 6 0;
diff --git a/externals/gridflow/pd_examples/motion_detect.pd b/externals/gridflow/pd_examples/motion_detect.pd
new file mode 100644
index 00000000..c0d00178
--- /dev/null
+++ b/externals/gridflow/pd_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/pd_examples/nervous_video.pd b/externals/gridflow/pd_examples/nervous_video.pd
new file mode 100644
index 00000000..1f20094e
--- /dev/null
+++ b/externals/gridflow/pd_examples/nervous_video.pd
@@ -0,0 +1,154 @@
+#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 0 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 315 reassign \, 32 240 320 3 #;
+#X msg 225 295 reassign \, 32 120 160 3 #;
+#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 text 203 277 the buffer size decides the maximum loop length;
+#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 connect 0 0 52 0;
+#X connect 1 1 61 0;
+#X connect 1 1 19 1;
+#X connect 2 0 23 0;
+#X connect 3 0 8 0;
+#X connect 4 0 7 0;
+#X connect 6 0 5 0;
+#X connect 7 0 52 0;
+#X connect 8 0 60 0;
+#X connect 9 0 60 1;
+#X connect 10 0 60 1;
+#X connect 11 0 60 1;
+#X connect 12 0 15 0;
+#X connect 13 0 2 0;
+#X connect 14 0 6 0;
+#X connect 15 0 1 1;
+#X connect 16 0 12 0;
+#X connect 19 0 21 0;
+#X connect 21 0 22 0;
+#X connect 21 1 41 0;
+#X connect 21 2 27 0;
+#X connect 21 3 28 0;
+#X connect 22 0 13 0;
+#X connect 23 0 3 0;
+#X connect 24 0 21 1;
+#X connect 27 0 8 0;
+#X connect 28 0 8 0;
+#X connect 31 0 47 1;
+#X connect 31 0 46 1;
+#X connect 35 0 40 0;
+#X connect 39 0 35 0;
+#X connect 40 0 45 0;
+#X connect 41 0 8 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 45 0 14 0;
+#X connect 46 0 14 0;
+#X connect 46 1 50 0;
+#X connect 46 2 39 0;
+#X connect 46 3 42 0;
+#X connect 47 1 50 1;
+#X connect 47 2 39 1;
+#X connect 47 3 42 1;
+#X connect 49 0 14 0;
+#X connect 50 0 49 0;
+#X connect 51 0 47 0;
+#X connect 51 0 60 1;
+#X connect 52 0 19 0;
+#X connect 52 1 51 0;
+#X connect 52 2 1 0;
+#X connect 60 0 46 0;
+#X connect 61 0 60 1;
diff --git a/externals/gridflow/pd_examples/photo_pianoroll.pd b/externals/gridflow/pd_examples/photo_pianoroll.pd
new file mode 100644
index 00000000..b97e2008
--- /dev/null
+++ b/externals/gridflow/pd_examples/photo_pianoroll.pd
@@ -0,0 +1,159 @@
+#N canvas 476 141 695 640 10;
+#X obj 146 24 #in lada.jpg;
+#X obj 58 479 #out window;
+#X obj 28 -9 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 58 93 #store;
+#X obj 164 3 loadbang;
+#X text 268 -34 How to play a car;
+#X obj 146 4 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 406 488 dac~;
+#X obj 333 54 +;
+#X msg 333 33 1;
+#X obj 361 54 % 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 405 448 pd fft;
+#X obj 7 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1
+;
+#X obj 28 40 t b b;
+#X msg 284 418 4 2 # 0 0 0 502 1 502 1 0;
+#X obj 284 437 # +;
+#X obj 58 418 t a b;
+#X msg 311 437 \$1 0;
+#X obj 58 439 #greyscale_to_rgb;
+#X obj 477 135 #store;
+#X obj 476 214 #export_list;
+#X obj 517 234 s array1;
+#X obj 477 174 #cast float32;
+#X obj 186 126 # inv+ 255;
+#X obj 146 64 # min 255;
+#X obj 146 45 # * 3;
+#X msg 477 113 1 1 # \$1;
+#X obj 444 14 table array1 502;
+#X obj 477 234 t b a;
+#X obj 350 437 r row;
+#X obj 361 76 s row;
+#X obj 478 285 t f f;
+#X obj 480 392 tabwrite array2;
+#X obj 479 326 exp;
+#X obj 137 221 #mouse \, ...;
+#X obj 272 242 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 224 243 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 165 374 #draw_polygon put;
+#X msg 272 259 1 # 255;
+#X msg 223 261 1 # 0;
+#X obj 169 350 spigot;
+#X obj 280 292 t a a;
+#X obj 294 374 # +;
+#X obj 146 139 t a;
+#X msg 280 314 4 2 # 0 0 0 1 1 1 1 0;
+#X obj 280 336 # *;
+#X obj 357 333 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 20 256;
+#X msg 185 182 365 502 1 # 255;
+#X text 296 182 clear;
+#X obj 480 373 tabread4 array1;
+#X obj 477 265 for 0 64 1;
+#X obj 477 154 #fade 5;
+#X obj 444 35 table array2 1024;
+#X obj 406 468 lop~ 1000;
+#X obj 479 305 / 20;
+#X obj 480 346 * 22;
+#X obj 28 19 metro 46.44;
+#X obj 357 350 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 1 256;
+#X obj 325 373 #pack 2;
+#X obj 475 194 # / ( float32 # 4000 );
+#X obj 186 155 #convolve ( 1 7 # 1 1 2 8 2 1 1 );
+#X obj 514 90 # >> 4;
+#X obj 146 84 #convolve ( 2 2 # 1 );
+#X obj 146 103 # >> 2;
+#X obj 58 459 #draw_polygon put (3 # 255 0 0);
+#X obj -18 524 cnv 15 700 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -10 531 GridFlow 0.8.0;
+#X text -10 531 GridFlow 0.8.0;
+#X obj -18 -85 cnv 15 700 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -3 -86 photo_pianoroll.pd;
+#X text -5 -72 Copyright 2004 Mathieu Bouchard;
+#X connect 0 0 25 0;
+#X connect 1 0 34 0;
+#X connect 2 0 56 0;
+#X connect 3 0 16 0;
+#X connect 3 0 40 0;
+#X connect 4 0 0 0;
+#X connect 6 0 0 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 10 0 8 1;
+#X connect 10 0 30 0;
+#X connect 10 0 26 0;
+#X connect 11 0 53 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X connect 13 1 3 0;
+#X connect 14 0 15 0;
+#X connect 15 0 64 2;
+#X connect 16 0 18 0;
+#X connect 16 1 14 0;
+#X connect 17 0 15 1;
+#X connect 18 0 64 0;
+#X connect 19 0 51 0;
+#X connect 20 0 28 0;
+#X connect 22 0 59 0;
+#X connect 23 0 60 0;
+#X connect 24 0 62 0;
+#X connect 25 0 24 0;
+#X connect 26 0 19 0;
+#X connect 28 0 50 0;
+#X connect 28 1 21 0;
+#X connect 29 0 17 0;
+#X connect 31 0 54 0;
+#X connect 31 1 32 1;
+#X connect 33 0 55 0;
+#X connect 34 0 41 0;
+#X connect 34 1 41 0;
+#X connect 34 4 36 0;
+#X connect 34 4 40 1;
+#X connect 34 6 35 0;
+#X connect 34 6 40 1;
+#X connect 35 0 38 0;
+#X connect 36 0 39 0;
+#X connect 37 0 43 0;
+#X connect 38 0 37 1;
+#X connect 39 0 37 1;
+#X connect 40 0 37 0;
+#X connect 41 0 44 0;
+#X connect 41 1 42 1;
+#X connect 42 0 37 2;
+#X connect 43 0 3 1;
+#X connect 43 0 23 0;
+#X connect 44 0 45 0;
+#X connect 45 0 42 0;
+#X connect 46 0 58 0;
+#X connect 47 0 43 0;
+#X connect 49 0 32 0;
+#X connect 50 0 31 0;
+#X connect 51 0 22 0;
+#X connect 53 0 7 0;
+#X connect 53 0 7 1;
+#X connect 54 0 33 0;
+#X connect 55 0 49 0;
+#X connect 56 0 13 0;
+#X connect 57 0 58 1;
+#X connect 58 0 45 1;
+#X connect 59 0 20 0;
+#X connect 60 0 61 0;
+#X connect 61 0 19 1;
+#X connect 62 0 63 0;
+#X connect 63 0 43 0;
+#X connect 64 0 1 0;
diff --git a/externals/gridflow/pd_examples/plot.pd b/externals/gridflow/pd_examples/plot.pd
new file mode 100644
index 00000000..dad9db76
--- /dev/null
+++ b/externals/gridflow/pd_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/pd_examples/polygon.pd b/externals/gridflow/pd_examples/polygon.pd
new file mode 100644
index 00000000..d43a14f8
--- /dev/null
+++ b/externals/gridflow/pd_examples/polygon.pd
@@ -0,0 +1,113 @@
+#N canvas 242 170 497 560 10;
+#X obj 30 250 #draw_polygon +;
+#X obj 127 3 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 187 80 +;
+#X obj 30 214 #store;
+#X obj 220 102 * 5000;
+#X obj 165 -27 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X msg 187 61 1;
+#X obj 30 394 #out window;
+#X obj 391 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 289 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 80 129 pd color generator;
+#X obj 165 1 metro 33.3667;
+#X obj 165 34 t b b b;
+#X obj 30 71 t b;
+#X floatatom 392 151 6 0 0 0 - - -;
+#X obj 89 194 loadbang;
+#X obj 215 81 % 36000;
+#X obj 46 272 shunt 2;
+#X obj 115 274 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 133 273 blur;
+#X msg 89 214 240 320 3 b # 0;
+#X obj 80 167 #cast b;
+#X obj 80 148 # >> 7;
+#X obj 74 357 #solarize;
+#X obj 30 317 shunt 2;
+#X obj 93 318 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 131 301 # >> (b # 2);
+#X obj 131 321 #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 connect 0 0 17 0;
+#X connect 0 0 24 0;
+#X connect 1 0 12 0;
+#X connect 2 0 16 0;
+#X connect 3 0 0 0;
+#X connect 4 0 9 1;
+#X connect 5 0 11 0;
+#X connect 6 0 2 0;
+#X connect 8 0 14 0;
+#X connect 9 0 0 2;
+#X connect 10 0 22 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 1 6 0;
+#X connect 12 2 9 0;
+#X connect 13 0 3 0;
+#X connect 14 0 9 2;
+#X connect 15 0 20 0;
+#X connect 16 0 2 1;
+#X connect 16 0 10 0;
+#X connect 16 0 4 0;
+#X connect 17 0 3 1;
+#X connect 17 1 26 0;
+#X connect 18 0 17 1;
+#X connect 20 0 3 1;
+#X connect 21 0 0 1;
+#X connect 22 0 21 0;
+#X connect 23 0 7 0;
+#X connect 24 0 7 0;
+#X connect 24 1 23 0;
+#X connect 25 0 24 1;
+#X connect 26 0 27 0;
+#X connect 27 0 3 1;
diff --git a/externals/gridflow/pd_examples/ripple.pd b/externals/gridflow/pd_examples/ripple.pd
new file mode 100644
index 00000000..634122d0
--- /dev/null
+++ b/externals/gridflow/pd_examples/ripple.pd
@@ -0,0 +1,190 @@
+#N canvas 103 42 683 618 10;
+#X obj 78 419 #out window;
+#X obj 47 173 #outer ignore ( 0 0 );
+#X obj 78 105 +;
+#X obj 47 326 # +;
+#X obj 283 170 #outer + ( 0 9000 );
+#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 obj 18 58 #for ( -128 -128 ) ( 128 128 ) ( 1 1 );
+#X text 15 167 distances to middle;
+#X obj 18 125 @! sqrt;
+#X obj 18 36 inlet;
+#X obj 18 103 #fold +;
+#X obj 18 81 # ** 2;
+#X text 89 101 pythagoras' theorem;
+#X obj 18 149 outlet;
+#X connect 1 0 6 0;
+#X connect 3 0 8 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X restore 164 41 pd distance map;
+#X obj 78 440 fps detailed;
+#X obj 283 130 loadbang;
+#X obj 47 42 fork;
+#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 659 552 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 0 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 48 281 #finished;
+#X obj 164 329 #for ( 0 0 ) ( 256 256 ) ( 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 47 303 #store;
+#X obj 78 462 print;
+#X obj 164 149 # inv* 10000;
+#N canvas 588 233 480 480 angle 0;
+#X obj 71 163 #outer atan;
+#X obj 71 55 #finished;
+#X text 70 210 angles to centre;
+#X text 168 63 bang;
+#X obj 167 82 inlet;
+#X obj 168 106 #for -128 128 1;
+#X obj 71 78 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 72 188 outlet 0;
+#X obj 71 107 #for -128 128 1;
+#X connect 0 0 7 0;
+#X connect 1 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 0 1;
+#X connect 5 0 1 0;
+#X connect 6 0 8 0;
+#X connect 8 0 0 0;
+#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 715 537 387 220 compute 0;
+#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 obj 48 261 t a a;
+#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 246 410 #color;
+#X text 430 407 color of ripple shading;
+#X connect 0 0 8 0;
+#X connect 1 0 25 0;
+#X connect 2 0 24 0;
+#X connect 2 0 13 1;
+#X connect 3 0 17 0;
+#X connect 4 0 6 0;
+#X connect 5 0 15 0;
+#X connect 5 1 0 0;
+#X connect 6 0 25 1;
+#X connect 7 0 21 0;
+#X connect 7 0 14 1;
+#X connect 8 0 29 0;
+#X connect 9 0 31 0;
+#X connect 10 0 14 0;
+#X connect 10 1 12 0;
+#X connect 11 0 23 1;
+#X connect 11 0 5 1;
+#X connect 12 0 2 0;
+#X connect 13 0 36 0;
+#X connect 14 0 13 0;
+#X connect 15 0 0 0;
+#X connect 16 0 42 0;
+#X connect 17 0 5 0;
+#X connect 18 0 10 0;
+#X connect 19 0 28 0;
+#X connect 20 0 3 1;
+#X connect 21 0 30 0;
+#X connect 23 0 15 1;
+#X connect 23 0 40 0;
+#X connect 23 1 3 0;
+#X connect 24 0 2 1;
+#X connect 25 0 33 0;
+#X connect 26 0 20 0;
+#X connect 27 0 7 0;
+#X connect 28 0 3 0;
+#X connect 30 0 32 1;
+#X connect 31 0 4 0;
+#X connect 32 0 1 0;
+#X connect 33 0 23 0;
+#X connect 34 0 46 0;
+#X connect 35 0 47 0;
+#X connect 36 0 32 0;
+#X connect 38 0 17 1;
+#X connect 39 0 38 0;
+#X connect 40 0 19 0;
+#X connect 40 1 28 1;
+#X connect 42 0 18 0;
+#X connect 46 0 48 0;
+#X connect 47 0 48 1;
+#X connect 48 0 33 1;
+#X connect 55 0 15 2;
diff --git a/externals/gridflow/pd_examples/sand.pd b/externals/gridflow/pd_examples/sand.pd
new file mode 100644
index 00000000..42a0ed93
--- /dev/null
+++ b/externals/gridflow/pd_examples/sand.pd
@@ -0,0 +1,417 @@
+#N canvas 524 30 680 685 10;
+#X text 317 199 disable falling;
+#X obj 6 392 # min 255;
+#X obj 3 167 fork;
+#X obj 295 402 # != 0;
+#X obj 356 446 #fold +;
+#X obj 99 518 s position;
+#X obj 192 -31 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 295 465 #export;
+#X obj 192 68 #store;
+#X obj 247 133 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 398 151 pd mouse click/drag;
+#X obj 358 152 # / 2;
+#X obj 295 423 #ravel;
+#X msg 11 142 100 100;
+#X obj 6 415 # max;
+#X obj 247 198 shunt 2;
+#X obj 26 187 s size;
+#X obj 295 444 #fold +;
+#X obj 454 112 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 356 404 @! abs;
+#X obj 432 412 #export;
+#X obj 432 370 #ravel;
+#X obj 288 260 shunt 2;
+#X obj 301 199 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 356 467 #export;
+#X obj 398 111 shunt 2;
+#X obj 6 348 #greyscale_to_rgb;
+#X obj 399 132 r position;
+#N canvas 504 75 496 430 falling 0;
+#X obj 42 147 # +;
+#X text 228 286 vertical falling;
+#X obj 70 327 # / 3;
+#X obj 138 25 inlet;
+#X text 179 25 Dim[rows \, columns \, {height}];
+#X obj 43 281 #store;
+#X obj 43 260 #finished;
+#X obj 69 168 # / 3;
+#X obj 70 306 # / 3;
+#X obj 42 168 # +;
+#X obj 43 306 # +;
+#X text 105 366 Dim[rows \, columns \, {height}];
+#X text 197 129 horizontal falling;
+#X obj 69 147 # / 3;
+#X obj 43 327 # +;
+#X obj 42 123 #store;
+#X obj 52 365 outlet;
+#X obj 42 104 #finished;
+#X obj 138 58 t a a;
+#X obj 133 218 t a a;
+#X obj 110 147 #convolve ( 1 2 # 1 1 0 ) \, fold inv+;
+#X obj 110 168 #convolve ( 1 3 # 1 1 0 ) \, fold inv+;
+#X obj 111 306 #convolve ( 2 1 # 1 1 ) \, fold inv+;
+#X obj 111 327 #convolve ( 3 1 # 1 1 0 ) \, fold inv+;
+#X connect 0 0 9 0;
+#X connect 2 0 14 1;
+#X connect 3 0 18 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 9 1;
+#X connect 8 0 10 1;
+#X connect 9 0 19 0;
+#X connect 10 0 14 0;
+#X connect 13 0 0 1;
+#X connect 14 0 16 0;
+#X connect 15 0 0 0;
+#X connect 17 0 15 0;
+#X connect 18 0 17 0;
+#X connect 18 1 15 1;
+#X connect 18 1 20 0;
+#X connect 18 1 21 0;
+#X connect 19 0 6 0;
+#X connect 19 1 5 1;
+#X connect 19 1 22 0;
+#X connect 19 1 23 0;
+#X connect 20 0 13 0;
+#X connect 21 0 7 0;
+#X connect 22 0 8 0;
+#X connect 23 0 2 0;
+#X restore 247 218 pd falling sand;
+#X obj 6 465 #scale_by 2;
+#X obj 8 287 shunt 3;
+#X obj 6 540 print;
+#X obj 136 26 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 253 -8 auto;
+#N canvas 292 75 480 513 falling 0;
+#X obj 105 177 # div 5;
+#X text 292 85 horizontal falling;
+#X obj 42 118 #store;
+#X obj 153 58 fork;
+#X obj 171 230 fork;
+#X obj 46 392 outlet;
+#X obj 42 147 # +;
+#X obj 46 307 # +;
+#X obj 46 281 #store;
+#X obj 42 91 #finished;
+#X obj 42 176 # +;
+#X obj 48 260 #finished;
+#X text 88 17 Dim[rows \, columns \, {height}];
+#X text 293 262 vertical falling;
+#X obj 106 336 # div 5;
+#X obj 102 148 # div 5;
+#X obj 46 336 # +;
+#X obj 103 307 # div 5;
+#X text 101 392 Dim[rows \, columns \, {height}];
+#X obj 47 17 inlet;
+#X obj 162 149 #convolve (1 2 # 1 1) \, fold inv+ \, seed -3;
+#X obj 166 177 #convolve (1 3 # 1 1 0) \, fold inv+ \, seed -3;
+#X obj 170 305 #convolve (2 1 # 1 1) \, fold inv+ \, seed -3;
+#X obj 171 335 #convolve (3 1 # 1 1 0) \, fold inv+ \, seed -3;
+#X connect 0 0 10 1;
+#X connect 2 0 6 0;
+#X connect 3 0 9 0;
+#X connect 3 1 2 1;
+#X connect 3 1 20 0;
+#X connect 3 1 21 0;
+#X connect 4 0 11 0;
+#X connect 4 1 8 1;
+#X connect 4 1 22 0;
+#X connect 4 1 23 0;
+#X connect 6 0 10 0;
+#X connect 7 0 16 0;
+#X connect 8 0 7 0;
+#X connect 9 0 2 0;
+#X connect 10 0 4 0;
+#X connect 11 0 8 0;
+#X connect 14 0 16 1;
+#X connect 15 0 6 1;
+#X connect 16 0 5 0;
+#X connect 17 0 7 1;
+#X connect 19 0 3 0;
+#X connect 20 0 15 0;
+#X connect 21 0 0 0;
+#X connect 22 0 17 0;
+#X connect 23 0 14 0;
+#X restore 292 238 pd falling sand ( 2 );
+#N canvas 525 58 536 584 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 63 267 # / 20;
+#X obj 74 327 # *;
+#X obj 12 436 #store;
+#X obj 14 18 inlet;
+#X obj 73 309 #redim ( 64 64 1 );
+#X obj 279 51 loadbang;
+#X obj 13 38 fork;
+#X obj 63 247 #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 63 225 #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 12 480 outlet;
+#X obj 260 53 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 83 293 find out how high the compensation torus should be;
+#X obj 73 349 # div 256;
+#X obj 36 58 route grid;
+#X obj 12 417 #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;
+#X obj 13 141 #draw_image - ( 1 1 1 # ) ( 0 0 );
+#X obj 12 457 #draw_image - ( 1 1 1 # ) ( 0 0 );
+#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 296 346 pd torus;
+#X text 65 475 put extra sand as a ring around the hole;
+#X connect 0 0 12 0;
+#X connect 1 0 16 0;
+#X connect 2 0 6 0;
+#X connect 3 0 18 0;
+#X connect 4 0 24 0;
+#X connect 5 0 8 0;
+#X connect 6 0 3 0;
+#X connect 7 0 14 0;
+#X connect 8 0 23 0;
+#X connect 8 1 19 0;
+#X connect 9 0 2 0;
+#X connect 12 0 23 2;
+#X connect 12 0 24 2;
+#X connect 13 0 9 0;
+#X connect 14 0 22 0;
+#X connect 14 0 25 0;
+#X connect 16 0 14 0;
+#X connect 18 0 24 1;
+#X connect 19 0 1 0;
+#X connect 20 0 4 0;
+#X connect 21 0 20 0;
+#X connect 21 1 13 0;
+#X connect 21 1 4 1;
+#X connect 22 0 23 1;
+#X connect 23 0 21 0;
+#X connect 24 0 15 0;
+#X connect 25 0 3 1;
+#X restore 290 152 pd finger;
+#X obj 342 376 # -;
+#X obj 356 425 #ravel;
+#X msg 3 118 240 320;
+#X obj 432 391 #fold +;
+#X obj 6 328 # + 128;
+#X obj 148 476 #greyscale_to_rgb;
+#X obj 303 134 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 362 263 enable stats;
+#X text 292 529 checking for conservation of amounts of sand;
+#X msg 3 212 \$1 \$2 1 # 0;
+#X text 33 159 set size / reset;
+#N canvas 56 229 441 265 lighting 0;
+#X obj 27 209 outlet;
+#X obj 27 180 # +;
+#X obj 17 9 inlet;
+#X obj 99 142 #convolve ( 2 1 # 1 1 ) \, op inv+;
+#X obj 100 65 #convolve ( 1 2 # 1 1 ) \, op inv+;
+#X obj 103 39 r size;
+#X obj 27 39 #redim ( );
+#X obj 27 79 #finished;
+#X obj 27 120 #store;
+#X obj 25 149 # + 128;
+#X obj 27 59 t a a;
+#X text 163 47 colourize the horizontal differences;
+#X text 113 123 colourize the vertical differences;
+#X obj 100 86 #outer & ( -1 0 0 );
+#X obj 99 164 #outer & ( -1 -1 0 );
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 14 0;
+#X connect 4 0 13 0;
+#X connect 5 0 6 1;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 10 0 7 0;
+#X connect 10 1 4 0;
+#X connect 10 1 3 0;
+#X connect 13 0 8 1;
+#X connect 14 0 1 1;
+#X restore 151 355 pd lighting;
+#X obj 6 518 fps detailed;
+#X obj 344 262 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 152 26 step;
+#X obj 71 253 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X obj 6 486 #out window;
+#X obj 295 508 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 356 508 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 432 508 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X text 90 268 differential;
+#X text 89 253 heightmap;
+#X text 89 284 topographic;
+#X obj 152 68 t a a;
+#X obj 247 260 t a a;
+#X obj 149 457 # * 255;
+#X obj 150 437 # >= 6;
+#X obj 150 416 # & 7;
+#X obj 2 97 loadbang;
+#X text 470 112 disable finger;
+#X obj 332 354 t a a;
+#X obj 6 309 # << 2;
+#X obj 151 334 # << 4;
+#X obj 192 -8 metro 20;
+#X obj -15 569 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 576 GridFlow 0.8.0;
+#X text -7 576 GridFlow 0.8.0;
+#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 sand.pd;
+#X connect 1 0 14 0;
+#X connect 2 0 45 0;
+#X connect 2 1 16 0;
+#X connect 3 0 12 0;
+#X connect 4 0 24 0;
+#X connect 6 0 69 0;
+#X connect 7 0 53 0;
+#X connect 8 0 9 0;
+#X connect 9 0 15 0;
+#X connect 9 1 35 0;
+#X connect 10 0 11 0;
+#X connect 10 1 25 0;
+#X connect 11 0 35 1;
+#X connect 12 0 17 0;
+#X connect 13 0 2 0;
+#X connect 14 0 29 0;
+#X connect 15 0 28 0;
+#X connect 15 1 60 0;
+#X connect 17 0 7 0;
+#X connect 18 0 25 1;
+#X connect 19 0 37 0;
+#X connect 20 0 55 0;
+#X connect 21 0 39 0;
+#X connect 22 1 21 0;
+#X connect 22 1 66 0;
+#X connect 23 0 15 1;
+#X connect 24 0 54 0;
+#X connect 25 0 9 1;
+#X connect 26 0 1 0;
+#X connect 27 0 10 0;
+#X connect 28 0 60 0;
+#X connect 29 0 52 0;
+#X connect 30 0 67 0;
+#X connect 30 1 68 0;
+#X connect 30 2 63 0;
+#X connect 32 0 8 0;
+#X connect 34 0 60 0;
+#X connect 35 0 15 0;
+#X connect 36 0 19 0;
+#X connect 36 0 3 0;
+#X connect 37 0 4 0;
+#X connect 38 0 2 0;
+#X connect 39 0 20 0;
+#X connect 40 0 26 0;
+#X connect 41 0 29 0;
+#X connect 42 0 9 1;
+#X connect 45 0 59 0;
+#X connect 47 0 1 0;
+#X connect 48 0 31 0;
+#X connect 49 0 22 1;
+#X connect 51 0 30 1;
+#X connect 52 0 48 0;
+#X connect 52 0 5 0;
+#X connect 59 0 30 0;
+#X connect 59 1 8 1;
+#X connect 60 0 59 0;
+#X connect 60 1 22 0;
+#X connect 61 0 41 0;
+#X connect 62 0 61 0;
+#X connect 63 0 62 0;
+#X connect 64 0 38 0;
+#X connect 66 0 36 1;
+#X connect 66 1 36 0;
+#X connect 67 0 40 0;
+#X connect 68 0 47 0;
+#X connect 69 0 8 0;
diff --git a/externals/gridflow/pd_examples/saturation.pd b/externals/gridflow/pd_examples/saturation.pd
new file mode 100644
index 00000000..d6cbda6c
--- /dev/null
+++ b/externals/gridflow/pd_examples/saturation.pd
@@ -0,0 +1,81 @@
+#N canvas 904 61 449 319 10;
+#X obj 11 117 print;
+#X obj 11 77 #out window;
+#X text 342 55 OR;
+#X text 238 30 global saturation;
+#N canvas 0 0 441 339 #saturation 0;
+#X obj 63 88 # inv+ 255;
+#X obj 14 219 # +;
+#X obj 37 47 #rgb_to_greyscale;
+#X obj 14 239 # >> 8;
+#X obj 162 146 loadbang;
+#X obj 14 158 #finished;
+#X text 68 266 keep values inside visible range;
+#X obj 14 199 # *;
+#X obj 14 178 #store;
+#X obj 37 88 # *;
+#X msg 133 146 0;
+#X obj 8 9 inlet image;
+#X obj 14 293 outlet image;
+#X obj 107 126 inlet saturation;
+#X text 230 130 0 = grey \; 256 = identity;
+#X text 40 222 mix the original picture with its greyed version;
+#X obj 37 107 t a a;
+#X obj 8 28 t a a;
+#X obj 37 67 #greyscale_to_rgb;
+#X obj 107 146 t a;
+#X obj 14 265 #clip;
+#X connect 0 0 9 1;
+#X connect 1 0 3 0;
+#X connect 2 0 18 0;
+#X connect 3 0 20 0;
+#X connect 4 0 10 0;
+#X connect 5 0 8 0;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 9 0 16 0;
+#X connect 10 0 19 0;
+#X connect 11 0 17 0;
+#X connect 13 0 19 0;
+#X connect 16 0 5 0;
+#X connect 16 1 1 1;
+#X connect 17 0 8 1;
+#X connect 17 1 2 0;
+#X connect 18 0 9 0;
+#X connect 19 0 7 1;
+#X connect 19 0 0 0;
+#X connect 20 0 12 0;
+#X restore 11 53 pd #saturation;
+#X obj 11 98 fps detailed;
+#X text 203 68 per-channel saturation;
+#X msg 194 25 0;
+#X obj 194 4 loadbang;
+#X obj 197 46 hsl 137 15 -256 512 0 0 empty empty empty -2 -6 0 8 -260818
+-128992 -1 4533 1;
+#X floatatom 155 47 5 0 0 0 - - -;
+#X obj 11 -26 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 11 3 metro 33.3667;
+#X obj 11 30 #in teapot.png;
+#X obj 147 95 #color -256 512 1;
+#X msg 147 69 3 # \$1;
+#X obj -16 -85 cnv 15 450 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -3 -72 Copyright 2002 Mathieu Bouchard;
+#X obj -15 203 cnv 15 450 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 210 GridFlow 0.8.0;
+#X text -7 210 GridFlow 0.8.0;
+#X text -3 -85 saturation.pd;
+#X connect 1 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 9 0 15 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 4 0;
+#X connect 14 0 4 1;
+#X connect 15 0 14 0;
diff --git a/externals/gridflow/pd_examples/scratch_video.pd b/externals/gridflow/pd_examples/scratch_video.pd
new file mode 100644
index 00000000..c322b745
--- /dev/null
+++ b/externals/gridflow/pd_examples/scratch_video.pd
@@ -0,0 +1,124 @@
+#N canvas 622 70 580 592 10;
+#X obj 109 21 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 109 329 listelement 1;
+#X floatatom 109 352 5 0 0 0 - - -;
+#X floatatom 132 244 5 0 0 0 - - -;
+#X obj 109 305 route position;
+#X obj 109 221 #in;
+#X msg 142 167 open /home/alx/Documents/images/videos/bus_1.mov;
+#X obj 112 391 hsl 128 15 1 320 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 3145 1;
+#X obj -13 -85 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -16 472 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 476 GridFlow 0.8.0;
+#X text 16 476 GridFlow 0.8.0;
+#X text 0 -85 traveling.pd;
+#X text 0 -72 Copyright 2003 Alexandre Castonguay;
+#X text -1 -34 Use the mouse position to scratch the video \, a touchscreen
+works well.;
+#N canvas 0 0 450 300 decide_framerate 0;
+#X obj 6 56 - 160;
+#X floatatom 6 80 5 0 0 0 - - -;
+#X obj 55 122 hsl 128 15 20 150 0 0 empty empty empty -2 -6 0 8 -24198
+-1 -1 5862 1;
+#X obj 6 99 abs;
+#X floatatom 6 142 5 0 0 0 - - -;
+#X obj 6 121 / 3;
+#X floatatom 6 226 5 0 0 0 - - -;
+#X obj 6 184 abs;
+#X obj 6 162 - 64;
+#X obj 6 205 + 5;
+#X obj -25 21 inlet;
+#X obj 34 263 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 5 0;
+#X connect 4 0 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 11 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 6 0;
+#X connect 10 0 0 0;
+#X restore 257 390 pd decide_framerate;
+#X obj 257 414 s framerate;
+#X obj 181 31 r framerate;
+#X obj 109 279 #out window;
+#X text 176 242 <-- frame number;
+#X text 213 328 <-- get x values;
+#X text 142 184 load your own until we get a bundled video for the
+docs;
+#X text 142 197 this one is 320 x 240;
+#N canvas 0 0 450 300 frame_count 1;
+#X msg 103 112 1;
+#X floatatom 103 168 5 0 0 0 - - -;
+#X obj 153 153 float \$1;
+#X obj 103 86 shunt 2;
+#X msg 173 69 1;
+#X msg 173 46 0;
+#X obj 103 140 + 1;
+#X msg 147 112 -1;
+#X msg 208 109 0;
+#X obj 46 -34 inlet;
+#X obj 231 68 inlet;
+#X obj 113 212 outlet;
+#X floatatom 147 -41 5 0 0 0 - - -;
+#X obj 147 -19 > 160;
+#X floatatom 147 8 5 0 0 0 - - -;
+#X text 192 -20 <-- is the direction left or right on a width of 320
+pixels;
+#X text 242 109 <-- reset;
+#X obj 147 -64 r position;
+#X connect 0 0 6 0;
+#X connect 1 0 2 0;
+#X connect 1 0 11 0;
+#X connect 2 0 6 1;
+#X connect 3 0 0 0;
+#X connect 3 1 7 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 1;
+#X connect 6 0 1 0;
+#X connect 7 0 6 0;
+#X connect 8 0 1 0;
+#X connect 9 0 3 0;
+#X connect 10 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 3 1;
+#X connect 17 0 12 0;
+#X restore 109 113 pd frame_count;
+#X obj 202 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X text 226 85 <-- reset;
+#X obj 13 391 s position;
+#X msg 314 230 loop 1;
+#X obj 206 266 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 224 62 r loopit;
+#X obj 236 264 print loopit;
+#X obj 109 56 metro 100.33;
+#X obj 71 175 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 31 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 0;
+#X connect 2 0 15 0;
+#X connect 2 0 26 0;
+#X connect 4 0 1 0;
+#X connect 5 0 18 0;
+#X connect 5 1 3 0;
+#X connect 5 1 28 0;
+#X connect 6 0 5 0;
+#X connect 15 0 16 0;
+#X connect 17 0 31 1;
+#X connect 18 0 4 0;
+#X connect 23 0 5 0;
+#X connect 24 0 23 1;
+#X connect 27 0 5 0;
+#X connect 28 0 30 0;
+#X connect 31 0 23 0;
+#X connect 32 0 5 0;
diff --git a/externals/gridflow/pd_examples/spectrogram.pd b/externals/gridflow/pd_examples/spectrogram.pd
new file mode 100644
index 00000000..ff9f55e7
--- /dev/null
+++ b/externals/gridflow/pd_examples/spectrogram.pd
@@ -0,0 +1,109 @@
+#N canvas 695 85 580 565 10;
+#X msg 143 149 reset;
+#X obj 27 -34 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 316 -15 adc~;
+#X obj 28 110 tabread4 array1;
+#X obj 7 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 351 -14 table array1 1024;
+#X obj 290 138 loadbang;
+#X obj 270 140 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 317 8 pd analysis;
+#X obj 30 210 demux 2;
+#X obj 373 186 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 1;
+#X obj 242 226 loadbang;
+#X obj 219 225 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 27 34 for 0 320 1;
+#X obj 29 129 * 2000;
+#X text 392 187 black stripes;
+#X text 391 200 graph;
+#X obj 28 77 / 2;
+#X text 77 129 <-- adding some extra gain;
+#X obj 88 88 exp;
+#X obj 28 55 demux 2;
+#X obj 173 46 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 195 46 linear;
+#X text 193 60 logarithmic;
+#X obj 89 67 / 51;
+#X obj 31 331 #fade;
+#X obj 123 332 loadbang;
+#X msg 72 331 16 4 1;
+#X obj 27 -9 metro 23.22;
+#X text 115 26 = 1000*1024/44100;
+#X obj 29 149 #import ( 320 );
+#X obj 29 169 # *>>8;
+#X obj 30 190 #fade 2;
+#X obj 30 249 # inv+ 255;
+#X obj 105 222 #outer <;
+#X obj 105 241 # * 255;
+#X obj 105 261 #transpose;
+#X obj 30 287 #redim (120 320 1);
+#X obj 31 309 #greyscale_to_rgb;
+#X obj 31 353 #clip;
+#X obj 31 375 #scale_by 2;
+#X obj 31 404 #out window;
+#X obj -15 449 cnv 15 580 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -7 456 GridFlow 0.8.0;
+#X text -7 456 GridFlow 0.8.0;
+#X obj -15 -85 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text -2 -72 Copyright 2002 Mathieu Bouchard;
+#X text -2 -85 spectrogram.pd;
+#X obj 219 245 #for 120 0 -1;
+#X obj 270 161 #for 0 320 1;
+#X obj 270 184 # + 10;
+#X connect 0 0 30 0;
+#X connect 1 0 28 0;
+#X connect 2 0 8 0;
+#X connect 2 1 8 0;
+#X connect 3 0 14 0;
+#X connect 4 0 13 0;
+#X connect 6 0 7 0;
+#X connect 7 0 49 0;
+#X connect 9 0 33 0;
+#X connect 9 1 34 0;
+#X connect 10 0 9 1;
+#X connect 11 0 12 0;
+#X connect 12 0 48 0;
+#X connect 13 0 20 0;
+#X connect 14 0 30 0;
+#X connect 17 0 3 0;
+#X connect 19 0 3 0;
+#X connect 20 0 17 0;
+#X connect 20 1 24 0;
+#X connect 21 0 20 1;
+#X connect 24 0 19 0;
+#X connect 25 0 39 0;
+#X connect 26 0 27 0;
+#X connect 27 0 25 1;
+#X connect 28 0 13 0;
+#X connect 30 0 31 0;
+#X connect 31 0 32 0;
+#X connect 32 0 9 0;
+#X connect 33 0 37 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 25 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 48 0 34 1;
+#X connect 49 0 50 0;
+#X connect 50 0 31 1;
diff --git a/externals/gridflow/pd_examples/threshold.pd b/externals/gridflow/pd_examples/threshold.pd
new file mode 100644
index 00000000..4a609930
--- /dev/null
+++ b/externals/gridflow/pd_examples/threshold.pd
@@ -0,0 +1,81 @@
+#N canvas 720 79 579 617 10;
+#X obj 40 121 @ -;
+#X obj 40 144 @ max 0;
+#X obj 40 167 @ ||;
+#X obj 40 190 @ +;
+#X obj 99 143 inv+ 0;
+#X obj 40 -33 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 95 56 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X floatatom 251 270 5 0 0 0 - - -;
+#X obj 251 137 vsl 15 128 0 256 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 40 55 shunt 2;
+#X obj 40 448 @out window;
+#X text 6 100 simple per-channel threshold;
+#X text 316 102 bluescreen luma threshold;
+#X text 381 255 here we have a mask;
+#X text 361 267 (alpha as separate image);
+#X obj 327 356 @join 2;
+#X text 386 295 make a RGBA image;
+#X obj 310 137 t b a a;
+#X text 218 398 = medium blue;
+#X obj 297 290 t a a;
+#X obj 131 449 fps;
+#X floatatom 161 451 5 0 0 0 - - -;
+#X obj 40 9 metro 100;
+#X msg 70 397 240 320 3 # 0 0 170;
+#X text 386 333 won't be necessary;
+#X text 319 117 with alpha channel;
+#X text 13 368 you could also load a picture;
+#X text 13 380 instead of using uniform blue;
+#X text 58 -31 1000/100 = 10 fps (max) (adjustable);
+#X text 281 22 see also color_detect.pd;
+#X obj 40 33 #camera;
+#X obj -13 -86 cnv 15 580 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 0 -73 Copyright 2002 Mathieu Bouchard;
+#X obj -15 499 cnv 15 580 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 text 0 -86 threshold.pd;
+#X obj 290 335 #store;
+#X obj 290 314 #finished;
+#X obj 354 204 # * 255;
+#X obj 354 181 # >=;
+#X obj 354 162 #rgb_to_greyscale;
+#X text 384 320 this silly #finished;
+#X text 388 347 in GridFlow 1;
+#X obj 70 425 #draw_image put \, alpha 1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 10 0;
+#X connect 4 0 2 1;
+#X connect 5 0 22 0;
+#X connect 6 0 9 1;
+#X connect 7 0 0 1;
+#X connect 7 0 4 0;
+#X connect 7 0 3 1;
+#X connect 7 0 40 1;
+#X connect 8 0 7 0;
+#X connect 9 0 0 0;
+#X connect 9 1 17 0;
+#X connect 10 0 20 0;
+#X connect 17 0 23 0;
+#X connect 17 1 19 0;
+#X connect 17 2 41 0;
+#X connect 19 0 38 0;
+#X connect 19 1 37 1;
+#X connect 20 0 21 0;
+#X connect 22 0 30 0;
+#X connect 23 0 44 0;
+#X connect 30 0 9 0;
+#X connect 37 0 15 0;
+#X connect 38 0 37 0;
+#X connect 39 0 15 1;
+#X connect 40 0 39 0;
+#X connect 41 0 40 0;
+#X connect 44 0 10 0;
diff --git a/externals/gridflow/pd_examples/transform.pd b/externals/gridflow/pd_examples/transform.pd
new file mode 100644
index 00000000..a4d5b653
--- /dev/null
+++ b/externals/gridflow/pd_examples/transform.pd
@@ -0,0 +1,61 @@
+#N canvas 726 225 674 481 10;
+#X obj 146 296 #remap_image;
+#X obj 146 381 #out window;
+#X obj 125 94 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 294 376 # -;
+#X obj 294 202 t a a a;
+#X obj 380 273 # % 2;
+#X obj 380 297 # * -2;
+#X obj 380 318 # + 1;
+#X obj 316 342 # *;
+#X obj 425 245 # / 2;
+#X obj 428 184 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -261681
+-1 -1 12700 1;
+#X obj 316 301 # -;
+#X obj 425 207 t f;
+#X obj 316 262 # %;
+#X obj 380 248 # /;
+#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 155 shunt;
+#X obj 176 155 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -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 199 153 <-- 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/pd_examples/videodev_effects.pd b/externals/gridflow/pd_examples/videodev_effects.pd
new file mode 100644
index 00000000..b11f026f
--- /dev/null
+++ b/externals/gridflow/pd_examples/videodev_effects.pd
@@ -0,0 +1,303 @@
+#N canvas 106 79 569 546 10;
+#X obj 86 397 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 72 149 # max 0;
+#N canvas 52 305 399 248 motion 0;
+#X obj 60 49 inlet;
+#X obj 60 72 # +;
+#X obj 60 158 outlet;
+#X msg 108 51 0;
+#X obj 60 142 fork;
+#X text 164 114 divide by 32 \, 16 \, 4;
+#X text 4 1 we do like #fade but faster (because of >>);
+#X text 4 15 feedback factors are 1/32 for red \, 1/16 for green \,
+1/8 for blue.;
+#X obj 60 114 # >> ( 5 4 2 );
+#X obj 175 85 # * ( 31 15 3 );
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 4 1 9 0;
+#X connect 8 0 4 0;
+#X connect 9 0 1 1;
+#X restore 130 218 pd motion fade;
+#X obj 28 263 shunt 2;
+#X obj 72 69 #downscale_by 2 smoothly;
+#X obj 28 398 shunt 2;
+#X obj 82 265 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 87 88 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 8 7 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1;
+#X obj 316 261 fork;
+#X obj 28 48 shunt 2;
+#X msg 286 243 256;
+#X obj 28 474 #out window;
+#X obj 84 49 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 28 515 print;
+#X obj 285 284 #for 0 256 1;
+#X floatatom 316 242 5 0 0 0 - - -;
+#N canvas 67 462 236 230 detect 0;
+#X obj 66 59 # * ( -1 -1 2 );
+#X obj 66 171 # max 0;
+#X obj 66 31 inlet;
+#X obj 66 222 #outer ignore ( 0 0 0 );
+#X obj 66 197 # min 255;
+#X obj 66 249 outlet;
+#X obj 65 82 #fold + \, seed -20;
+#X connect 0 0 6 0;
+#X connect 1 0 4 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 6 0 1 0;
+#X restore 437 236 pd detect blue;
+#X obj 72 285 #outer ignore ( 0 );
+#X obj 103 131 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 5700 1;
+#X obj 28 189 shunt 2;
+#X obj 170 335 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 28 335 shunt 2;
+#X obj 28 495 fps detailed;
+#X obj 286 223 loadbang;
+#X obj 87 335 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 72 307 #store;
+#N canvas 81 205 480 500 sort 0;
+#X obj 10 305 # * ( 1 0 );
+#X obj 180 260 # * 255;
+#X obj 194 331 #outer ignore ( 0 0 0 );
+#X obj 10 345 # >> 0;
+#X obj 43 432 outlet;
+#X obj 181 53 inlet;
+#X obj 225 191 # / 2;
+#X obj 10 285 #for ( 0 0 ) ( 288 352 ) ( 1 1 );
+#X obj 10 325 # +;
+#X obj 44 9 inlet;
+#X obj 242 150 # - 1;
+#X obj 121 382 # +;
+#X obj 180 238 # < 176;
+#X obj 10 369 #store;
+#X obj 97 31 #grade;
+#X obj 121 404 # >> 1;
+#X obj 283 269 # / 351;
+#X obj 97 53 shunt 2;
+#X obj 145 77 #grade;
+#X obj 112 210 #outer & ( 0 -1 );
+#X obj 121 127 inlet;
+#X text 271 128 extract width;
+#X obj 10 266 #finished;
+#X obj 283 247 # * 255;
+#X obj 96 9 #fold +;
+#X obj 97 153 shunt 4;
+#X obj 107 359 shunt 4;
+#X msg 235 126 \$2;
+#X obj 204 77 #dim;
+#X obj 44 37 t a a;
+#X msg 186 127 \$1 \$2;
+#X obj 204 97 #export_list;
+#X connect 0 0 8 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 13 0;
+#X connect 5 0 17 1;
+#X connect 6 0 12 1;
+#X connect 7 0 0 0;
+#X connect 8 0 3 0;
+#X connect 9 0 29 0;
+#X connect 10 0 16 1;
+#X connect 11 0 15 0;
+#X connect 12 0 1 0;
+#X connect 13 0 26 0;
+#X connect 14 0 17 0;
+#X connect 15 0 4 0;
+#X connect 16 0 2 0;
+#X connect 17 0 25 0;
+#X connect 17 1 18 0;
+#X connect 18 0 25 0;
+#X connect 19 0 8 1;
+#X connect 20 0 25 1;
+#X connect 20 0 26 1;
+#X connect 22 0 7 0;
+#X connect 23 0 16 0;
+#X connect 24 0 14 0;
+#X connect 25 0 22 0;
+#X connect 25 0 19 0;
+#X connect 25 1 22 0;
+#X connect 25 1 19 0;
+#X connect 25 2 12 0;
+#X connect 25 3 23 0;
+#X connect 26 0 4 0;
+#X connect 26 1 11 0;
+#X connect 27 0 6 0;
+#X connect 27 0 10 0;
+#X connect 28 0 31 0;
+#X connect 29 0 24 0;
+#X connect 29 1 13 1;
+#X connect 29 1 28 0;
+#X connect 29 1 11 1;
+#X connect 30 0 7 1;
+#X connect 31 0 27 0;
+#X connect 31 0 30 0;
+#X restore 87 355 pd sort me out;
+#X obj 285 304 # gamma;
+#X obj 72 129 # -;
+#X obj 82 191 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X text 74 238 enable gamma correction;
+#X obj 285 266 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 372 198 399 273 motion 0;
+#X obj 15 113 # << 2;
+#X obj 15 162 @! abs;
+#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 connect 0 0 10 0;
+#X connect 1 0 6 0;
+#X connect 2 0 9 0;
+#X connect 3 0 0 0;
+#X connect 4 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 4 0;
+#X connect 9 0 13 0;
+#X connect 9 1 3 0;
+#X connect 10 0 1 0;
+#X connect 10 1 8 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 1;
+#X connect 13 0 3 1;
+#X restore 72 109 pd motion detection;
+#X obj 105 335 hradio 15 1 0 4 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 126 149 noise reduction (on find-edges only);
+#N canvas 67 462 236 230 detect 0;
+#X obj 66 171 # max 0;
+#X obj 66 31 inlet;
+#X obj 66 222 #outer ignore ( 0 0 0 );
+#X obj 66 197 # min 255;
+#X obj 66 249 outlet;
+#X obj 65 82 #fold + \, seed -20;
+#X obj 66 59 # * ( 2 -1 -1 );
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X restore 437 217 pd detect red;
+#X obj 27 8 metro 33.3667;
+#X obj 28 69 t a a;
+#X text 101 49 Smaller Picture;
+#X obj 28 89 shunt 2;
+#X obj 211 96 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X obj 163 427 #centroid;
+#X obj 163 448 #export_list;
+#X floatatom 165 487 5 0 0 0 - - -;
+#X obj 164 467 unpack 0 0;
+#X floatatom 229 487 5 0 0 0 - - -;
+#N canvas 639 147 477 267 crosshair 0;
+#X obj 12 224 outlet;
+#X obj 12 9 inlet;
+#X obj 95 169 # + ( 120 160 );
+#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 12 205 #draw_polygon + ( 0 170 0 );
+#X obj 175 37 #fade 8;
+#X obj 175 18 inlet;
+#X obj 170 60 #finished;
+#X connect 1 0 5 0;
+#X connect 2 0 5 2;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 6 0 2 1;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X restore 72 428 pd crosshair;
+#X msg 128 8 open dc1394;
+#X msg 217 9 open mpeg file images/movies/washington_zoom_in.mpeg;
+#X msg 217 29 open xine images/movies/washington_zoom_in.mpeg;
+#X obj 28 27 #camera;
+#X obj 186 30 #in;
+#X obj 104 192 #fade;
+#X msg 145 194 32 16 4;
+#X obj 28 450 t a;
+#X text 231 110 emboss;
+#X text 230 96 hilite;
+#X text 110 397 designed to work with "hilite" above;
+#X obj 281 96 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 300 96 motion;
+#X text 301 110 presence;
+#X connect 0 0 5 1;
+#X connect 1 0 20 0;
+#X connect 2 0 3 0;
+#X connect 3 0 22 0;
+#X connect 3 1 18 0;
+#X connect 4 0 38 0;
+#X connect 5 0 55 0;
+#X connect 5 1 42 0;
+#X connect 5 1 47 0;
+#X connect 6 0 3 1;
+#X connect 7 0 40 1;
+#X connect 8 0 37 0;
+#X connect 9 0 32 0;
+#X connect 9 1 28 1;
+#X connect 10 0 38 0;
+#X connect 10 1 4 0;
+#X connect 11 0 16 0;
+#X connect 12 0 23 0;
+#X connect 13 0 10 1;
+#X connect 15 0 28 0;
+#X connect 16 0 9 0;
+#X connect 18 0 26 0;
+#X connect 19 0 29 1;
+#X connect 20 0 3 0;
+#X connect 20 1 2 0;
+#X connect 21 0 27 2;
+#X connect 22 0 5 0;
+#X connect 22 1 27 0;
+#X connect 23 0 14 0;
+#X connect 24 0 11 0;
+#X connect 25 0 22 1;
+#X connect 26 0 22 0;
+#X connect 27 0 5 0;
+#X connect 28 0 26 1;
+#X connect 29 0 1 0;
+#X connect 30 0 20 1;
+#X connect 32 0 15 0;
+#X connect 33 0 29 0;
+#X connect 34 0 27 1;
+#X connect 37 0 51 0;
+#X connect 38 0 40 0;
+#X connect 40 0 20 0;
+#X connect 40 1 33 0;
+#X connect 41 0 33 1;
+#X connect 42 0 43 0;
+#X connect 42 0 47 1;
+#X connect 43 0 45 0;
+#X connect 45 0 44 0;
+#X connect 45 1 46 0;
+#X connect 47 0 55 0;
+#X connect 51 0 10 0;
+#X connect 53 0 3 0;
+#X connect 54 0 53 1;
+#X connect 55 0 12 0;
+#X connect 59 0 33 2;
diff --git a/externals/gridflow/pd_examples/waves.pd b/externals/gridflow/pd_examples/waves.pd
new file mode 100644
index 00000000..c9706ca4
--- /dev/null
+++ b/externals/gridflow/pd_examples/waves.pd
@@ -0,0 +1,339 @@
+#N canvas 366 97 753 590 10;
+#X obj 265 207 #greyscale_to_rgb;
+#X obj 251 350 # min 255;
+#X obj 271 5 loadbang;
+#X obj 211 25 fork;
+#X obj 251 389 #out x11;
+#X obj 313 409 print;
+#N canvas 23 304 369 368 mouse 0;
+#X text 109 189 coordinates;
+#X obj 56 189 outlet;
+#X obj 57 164 listsublist 0 2;
+#X obj 8 141 shunt 2;
+#X text 56 9 #out's outlet 0;
+#X obj 100 142 outlet;
+#X obj 41 94 >> 8;
+#X obj 41 115 != 0;
+#X obj 16 31 route position;
+#X text 154 143 is there a click?;
+#X obj 19 8 inlet;
+#X obj 16 55 fork;
+#X obj 41 73 listelement 2;
+#X connect 2 0 1 0;
+#X connect 3 1 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 7 0 3 1;
+#X connect 8 0 11 0;
+#X connect 10 0 8 0;
+#X connect 11 0 3 0;
+#X connect 11 1 12 0;
+#X connect 12 0 6 0;
+#X restore 251 428 pd mouse click/drag;
+#X obj 12 39 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 1 1
+;
+#N canvas 637 335 419 287 lighting 0;
+#X obj 56 243 outlet;
+#X obj 17 9 inlet;
+#X obj 86 138 #outer & ( -1 0 0 );
+#X text 91 100 produce red/cyan from horiz differences;
+#X text 64 160 produce white/black from vertical differences;
+#X obj 56 199 #outer & ( -1 -1 0 );
+#X obj 56 222 # +;
+#X obj 108 10 #dim;
+#X obj 140 10 #export_list;
+#X obj 56 29 #redim ( );
+#X obj 56 9 t a a;
+#X obj 56 49 t a a;
+#X msg 141 30 \$1 \$2;
+#X obj 86 117 #convolve ( 1 2 # ) \, op ignore \, fold inv+;
+#X obj 56 177 #convolve ( 2 1 # ) \, op ignore \, fold inv+;
+#X connect 1 0 10 0;
+#X connect 2 0 6 1;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 7 0 8 0;
+#X connect 8 0 12 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 10 1 7 0;
+#X connect 11 0 14 0;
+#X connect 11 1 13 0;
+#X connect 12 0 9 1;
+#X connect 13 0 2 0;
+#X connect 14 0 5 0;
+#X restore 216 242 pd lighting;
+#X obj 251 447 # / 2;
+#X msg 138 46 \$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 ( 1000 );
+#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 292 519 pd finger;
+#X obj 245 25 s size;
+#X obj 251 370 #scale_by 2;
+#X obj 80 142 #store;
+#X obj 312 389 fps detailed;
+#N canvas 53 323 453 223 wave 0;
+#X obj 26 20 inlet;
+#X obj 28 182 outlet;
+#X text 70 137 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 28 137 # -;
+#X obj 54 102 # >> 4;
+#X obj 28 158 # *>>8 242;
+#X text 105 159 amortizing by ~5.5%;
+#X obj 24 46 t a a;
+#X obj 54 81 #convolve ( 3 3 # 1 4 1 4 0 4 ) \, seed 8;
+#X connect 0 0 9 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X connect 9 0 5 1;
+#X connect 9 1 10 0;
+#X connect 10 0 6 0;
+#X restore 80 203 pd wave equation;
+#X obj 249 515 t a;
+#X obj 117 122 t a;
+#X obj 251 330 # max 0;
+#X obj 265 188 # >> 1;
+#X obj 31 63 s metro;
+#X msg 211 5 240 320;
+#X text 441 19 Copyright (c) 2003 \, 2004 by Mathieu Bouchard;
+#X text 481 72 (Best complemented with a touchscreen);
+#X text 441 2 waves.pd;
+#X obj 376 141 vradio 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -258699
+-1 2;
+#X text 395 155 height greys;
+#X obj 298 103 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 317 102 plain;
+#X text 318 118 line-art;
+#X text 315 46 smooth;
+#X obj 296 46 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 316 60 raw;
+#X obj 443 379 hradio 18 1 1 4 empty empty _1__2__3__4_ 0 -4 0 8 -262144
+-258699 -1 1;
+#X text 441 354 scale by...;
+#X obj 443 400 + 1;
+#X obj 664 129 loadbang;
+#X obj 557 331 #in;
+#X obj 584 305 #camera_control;
+#X obj 558 284 spigot;
+#X obj 605 285 tgl 15 0 empty empty empty 18 8 0 8 -241291 -1 -62784
+1 1;
+#X obj 558 264 r metro;
+#N canvas 242 284 365 231 line-art 0;
+#X obj 32 123 # << 8;
+#X obj 32 37 inlet;
+#X obj 32 145 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 60 # / 3;
+#X text 146 85 < -3 becomes -256;
+#X text 146 100 > +3 becomes +256;
+#X connect 0 0 2 0;
+#X connect 1 0 7 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 7 0 5 0;
+#X restore 283 142 pd line-art;
+#X text 560 214 Background colour;
+#X text 625 285 enable video;
+#X msg 584 325 open r001.jpg \, bang;
+#X text 394 141 four-colour emboss;
+#X obj 142 402 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 1
+1;
+#X obj 88 377 r metro;
+#X obj 88 441 @! rand;
+#X msg 87 421 240 320;
+#X text 160 399 rain;
+#X text 558 3 bundled with GridFlow 0.7.7;
+#X obj 240 100 # >> 2;
+#X text 378 36 Originally made for Alexandre Castonguay's "DIGITALE"
+;
+#X text 495 53 But suitable for a lot more uses :-);
+#X msg 599 129 3 # 128;
+#X obj 557 154 #color;
+#X obj 239 121 shunt 2;
+#X obj 239 59 shunt 2;
+#X obj 403 486 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 2 256;
+#X obj 403 503 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262131 -1 -1 2 256;
+#X obj 359 519 #pack 2;
+#X obj 216 291 # +;
+#X obj 332 302 #store;
+#X obj 421 236 shunt 2;
+#X obj 477 232 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -258699
+-1 0;
+#X text 495 230 plain;
+#X text 495 248 refraction;
+#X obj 216 263 t a;
+#N canvas 203 363 443 300 heightmap2indexmap 0;
+#X obj 48 279 outlet;
+#X obj 9 8 inlet;
+#X obj 48 159 # +;
+#X obj 100 9 #dim;
+#X obj 132 9 #export_list;
+#X obj 48 28 #redim ( );
+#X obj 48 8 t a a;
+#X obj 48 48 t a a;
+#X msg 133 29 \$1 \$2;
+#X obj 78 92 #outer & ( -1 0 );
+#X obj 48 137 #outer & ( 0 -1 );
+#X obj 48 251 # +;
+#X obj 73 251 #for ( 0 0 ) ( 240 320 ) ( 1 1 );
+#X obj 116 229 loadbang;
+#X obj 84 229 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 48 182 # >> 1;
+#X obj 48 115 #convolve ( 2 1 # ) \, op ignore \, fold inv+;
+#X obj 78 71 #convolve ( 1 2 # ) \, op ignore \, fold inv+;
+#X connect 1 0 6 0;
+#X connect 2 0 15 0;
+#X connect 3 0 4 0;
+#X connect 4 0 8 0;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 6 1 3 0;
+#X connect 7 0 16 0;
+#X connect 7 1 17 0;
+#X connect 8 0 5 1;
+#X connect 9 0 2 1;
+#X connect 10 0 2 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 1;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 15 0 11 0;
+#X connect 16 0 10 0;
+#X connect 17 0 9 0;
+#X restore 332 281 pd heightmap2indexmap;
+#X obj 11 63 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X obj 332 228 spigot;
+#X text 397 170 no reflection;
+#X obj 239 167 shunt 3;
+#X obj 239 145 t a;
+#X obj 313 188 # put 0;
+#X obj 255 491 shunt 2;
+#X obj 325 493 shunt 2;
+#X obj 87 401 shunt 2;
+#X obj 31 39 metro 33.3667;
+#X obj 80 171 shunt 2;
+#X text 154 173 freeze time;
+#X obj 137 173 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 131 100 r feedback;
+#X obj 229 543 s feedback;
+#X obj 124 264 t a;
+#X obj 239 80 #convolve ( 2 2 # ) \, op ignore;
+#X obj 571 403 #yuv_to_rgb;
+#X text 500 501 pas de reflection \, + yuv;
+#X connect 0 0 70 0;
+#X connect 1 0 13 0;
+#X connect 2 0 22 0;
+#X connect 3 0 10 0;
+#X connect 3 1 12 0;
+#X connect 4 0 15 0;
+#X connect 4 0 6 0;
+#X connect 6 0 9 0;
+#X connect 6 1 79 0;
+#X connect 7 0 81 0;
+#X connect 8 0 70 0;
+#X connect 9 0 11 1;
+#X connect 10 0 18 0;
+#X connect 11 0 17 0;
+#X connect 13 0 4 0;
+#X connect 14 0 82 0;
+#X connect 15 0 5 0;
+#X connect 16 0 87 0;
+#X connect 17 0 86 0;
+#X connect 18 0 14 1;
+#X connect 18 0 60 0;
+#X connect 19 0 1 0;
+#X connect 20 0 0 0;
+#X connect 22 0 3 0;
+#X connect 26 0 75 1;
+#X connect 28 0 59 1;
+#X connect 32 0 60 1;
+#X connect 34 0 36 0;
+#X connect 36 0 9 1;
+#X connect 36 0 13 1;
+#X connect 37 0 57 0;
+#X connect 38 0 89 0;
+#X connect 39 0 38 0;
+#X connect 40 0 38 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 0;
+#X connect 43 0 76 0;
+#X connect 46 0 38 0;
+#X connect 48 0 78 1;
+#X connect 48 0 79 1;
+#X connect 48 0 80 1;
+#X connect 49 0 80 0;
+#X connect 50 0 11 1;
+#X connect 51 0 50 0;
+#X connect 54 0 59 0;
+#X connect 57 0 58 0;
+#X connect 58 0 66 0;
+#X connect 59 0 76 0;
+#X connect 59 1 43 0;
+#X connect 60 0 88 0;
+#X connect 60 1 59 0;
+#X connect 61 0 63 0;
+#X connect 62 0 63 1;
+#X connect 63 0 11 2;
+#X connect 64 0 19 0;
+#X connect 65 0 64 1;
+#X connect 66 0 64 1;
+#X connect 66 1 65 1;
+#X connect 67 0 66 1;
+#X connect 67 0 73 1;
+#X connect 70 0 64 0;
+#X connect 71 0 65 0;
+#X connect 72 0 21 0;
+#X connect 72 0 14 0;
+#X connect 73 0 71 0;
+#X connect 75 0 8 0;
+#X connect 75 1 20 0;
+#X connect 75 2 77 0;
+#X connect 76 0 75 0;
+#X connect 76 0 73 0;
+#X connect 77 0 0 0;
+#X connect 78 0 17 0;
+#X connect 78 1 11 0;
+#X connect 79 0 78 1;
+#X connect 80 1 51 0;
+#X connect 81 0 14 0;
+#X connect 81 0 21 0;
+#X connect 82 0 16 0;
+#X connect 82 1 87 0;
+#X connect 84 0 82 1;
+#X connect 85 0 18 0;
+#X connect 87 0 78 0;
+#X connect 88 0 54 0;
+#X connect 89 0 77 1;