aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/abstractions
diff options
context:
space:
mode:
Diffstat (limited to 'externals/gridflow/abstractions')
-rw-r--r--externals/gridflow/abstractions/#apply_colormap_channelwise.pd12
-rw-r--r--externals/gridflow/abstractions/#background_model.pd93
-rw-r--r--externals/gridflow/abstractions/#camera.pd354
-rw-r--r--externals/gridflow/abstractions/#camera_control.pd129
-rw-r--r--externals/gridflow/abstractions/#camera_old.pd161
-rw-r--r--externals/gridflow/abstractions/#centroid_in_pd.pd84
-rw-r--r--externals/gridflow/abstractions/#change.pd20
-rw-r--r--externals/gridflow/abstractions/#checkers.pd18
-rw-r--r--externals/gridflow/abstractions/#clip.pd18
-rw-r--r--externals/gridflow/abstractions/#color.pd72
-rw-r--r--externals/gridflow/abstractions/#contrast.pd20
-rw-r--r--externals/gridflow/abstractions/#draw_hpgl.pd86
-rw-r--r--externals/gridflow/abstractions/#draw_rect.pd44
-rw-r--r--externals/gridflow/abstractions/#draw_slider.pd60
-rw-r--r--externals/gridflow/abstractions/#edit_polygon.pd66
-rw-r--r--externals/gridflow/abstractions/#extract_diagonal.pd22
-rw-r--r--externals/gridflow/abstractions/#fade.pd37
-rw-r--r--externals/gridflow/abstractions/#fade_lin.pd29
-rw-r--r--externals/gridflow/abstractions/#fastblur.pd91
-rw-r--r--externals/gridflow/abstractions/#gamma.pd21
-rw-r--r--externals/gridflow/abstractions/#greyscale_to_rgb.pd6
-rw-r--r--externals/gridflow/abstractions/#hello.pd28
-rw-r--r--externals/gridflow/abstractions/#hueshift.pd31
-rw-r--r--externals/gridflow/abstractions/#in.pd62
-rw-r--r--externals/gridflow/abstractions/#line_to_polygon.pd46
-rw-r--r--externals/gridflow/abstractions/#make_cross.pd34
-rw-r--r--externals/gridflow/abstractions/#meuh.pd0
-rw-r--r--externals/gridflow/abstractions/#moment_polar.pd54
-rw-r--r--externals/gridflow/abstractions/#motion_detection.pd142
-rw-r--r--externals/gridflow/abstractions/#mouse.pd93
-rw-r--r--externals/gridflow/abstractions/#out.pd56
-rw-r--r--externals/gridflow/abstractions/#polygon_area.pd19
-rw-r--r--externals/gridflow/abstractions/#polygon_comparator.pd99
-rw-r--r--externals/gridflow/abstractions/#polygon_each_edge.pd24
-rw-r--r--externals/gridflow/abstractions/#polygon_moment.pd65
-rw-r--r--externals/gridflow/abstractions/#polygon_perimetre.pd18
-rw-r--r--externals/gridflow/abstractions/#polygon_radial_map.pd184
-rw-r--r--externals/gridflow/abstractions/#posterize.pd21
-rw-r--r--externals/gridflow/abstractions/#ravel.pd15
-rw-r--r--externals/gridflow/abstractions/#record.pd72
-rw-r--r--externals/gridflow/abstractions/#reinterval.pd34
-rw-r--r--externals/gridflow/abstractions/#remap_image.pd23
-rw-r--r--externals/gridflow/abstractions/#rgb_to_greyscale.pd8
-rw-r--r--externals/gridflow/abstractions/#rgb_to_rgba.pd6
-rw-r--r--externals/gridflow/abstractions/#rgb_to_yuv.pd10
-rw-r--r--externals/gridflow/abstractions/#rgba_to_rgb.pd6
-rw-r--r--externals/gridflow/abstractions/#rotate.pd30
-rw-r--r--externals/gridflow/abstractions/#saturation.pd35
-rw-r--r--externals/gridflow/abstractions/#scale_to.pd31
-rw-r--r--externals/gridflow/abstractions/#seq_fold.pd31
-rw-r--r--externals/gridflow/abstractions/#slice.pd41
-rw-r--r--externals/gridflow/abstractions/#solarize.pd12
-rw-r--r--externals/gridflow/abstractions/#sort.pd13
-rw-r--r--externals/gridflow/abstractions/#spread.pd22
-rw-r--r--externals/gridflow/abstractions/#swap.pd14
-rw-r--r--externals/gridflow/abstractions/#t.pd16
-rw-r--r--externals/gridflow/abstractions/#text_to_image.pd41
-rw-r--r--externals/gridflow/abstractions/#to_literal.pd18
-rwxr-xr-xexternals/gridflow/abstractions/#window.pd29
-rw-r--r--externals/gridflow/abstractions/#yuv_to_rgb.pd10
-rw-r--r--externals/gridflow/abstractions/ascii.pd12
-rw-r--r--externals/gridflow/abstractions/ascii_to_f.pd71
-rw-r--r--externals/gridflow/abstractions/condition.pd40
-rw-r--r--externals/gridflow/abstractions/count.pd44
-rw-r--r--externals/gridflow/abstractions/expect.pd13
-rw-r--r--externals/gridflow/abstractions/for.pd39
-rw-r--r--externals/gridflow/abstractions/fps.pd213
-rw-r--r--externals/gridflow/abstractions/gf.io_generate.pd81
-rw-r--r--externals/gridflow/abstractions/gf.nbxhsl.pd33
-rw-r--r--externals/gridflow/abstractions/gf.not_open.pd10
-rw-r--r--externals/gridflow/abstractions/gf.oneshot.pd22
-rw-r--r--externals/gridflow/abstractions/hpgl_find_bbox.pd49
-rw-r--r--externals/gridflow/abstractions/hpgl_font_render.pd208
-rw-r--r--externals/gridflow/abstractions/hpgl_op.pd34
-rw-r--r--externals/gridflow/abstractions/hpgl_track_position.pd28
-rw-r--r--externals/gridflow/abstractions/interval_overlap.pd14
-rw-r--r--externals/gridflow/abstractions/inv0x2a.pd11
-rw-r--r--externals/gridflow/abstractions/inv0x2b.pd11
-rw-r--r--externals/gridflow/abstractions/norecurse.pd14
-rw-r--r--externals/gridflow/abstractions/pingpong.pd27
-rw-r--r--externals/gridflow/abstractions/plotter_control.pd119
-rw-r--r--externals/gridflow/abstractions/plotter_parser.pd78
-rw-r--r--externals/gridflow/abstractions/seq_fold.pd31
-rw-r--r--externals/gridflow/abstractions/var.#.pd16
84 files changed, 4154 insertions, 0 deletions
diff --git a/externals/gridflow/abstractions/#apply_colormap_channelwise.pd b/externals/gridflow/abstractions/#apply_colormap_channelwise.pd
new file mode 100644
index 00000000..c63a7651
--- /dev/null
+++ b/externals/gridflow/abstractions/#apply_colormap_channelwise.pd
@@ -0,0 +1,12 @@
+#N canvas 0 0 450 300 10;
+#X obj 17 17 inlet;
+#X obj 17 77 #store;
+#X obj 17 97 outlet;
+#X obj 67 17 inlet;
+#X obj 17 57 # + (3 2 # 0 0 0 1 0 2);
+#X obj 17 37 #outer & (-1 0);
+#X connect 0 0 5 0;
+#X connect 1 0 2 0;
+#X connect 3 0 1 1;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
diff --git a/externals/gridflow/abstractions/#background_model.pd b/externals/gridflow/abstractions/#background_model.pd
new file mode 100644
index 00000000..07db6465
--- /dev/null
+++ b/externals/gridflow/abstractions/#background_model.pd
@@ -0,0 +1,93 @@
+#N canvas 563 12 770 687 10;
+#X text 415 -1 sliding buffer;
+#X obj 104 302 # sq-;
+#X obj 104 370 # /;
+#X text 57 293 input;
+#X obj 104 393 #fold +;
+#X text 171 302 <-- (input-mean)exp2;
+#X text 170 287 mean;
+#X text 369 -28 takes a grid as input;
+#X text 569 557 getModel;
+#X text 569 577 clearModel;
+#X obj 183 544 tgl 15 0 empty empty binaryFlag 0 -6 0 8 -24198 -1 -1
+1 1;
+#X text 568 534 adaptBackground (const image src \, const channel8
+mask);
+#X obj 104 578 shunt;
+#X text 195 194 <-- output is an average;
+#X text 201 215 <-- recentre les coordonnees selon la moyenne;
+#X obj 103 -136 inlet;
+#X obj 104 659 outlet;
+#X obj 190 512 inlet binary_flag;
+#X obj 282 -22 t a b;
+#X floatatom 312 20 5 0 0 0 - - -;
+#X msg 312 37 put_at ( \$1 0 0 0 );
+#X text 314 66 <-- this \$1 corresponds to the first argument given
+to the abstraction. The \$1 in the "put_at" message box is simply the
+indice from the counter.;
+#X text 282 145 <-- the number of frames that will establish the backgroundModel
+;
+#X obj 103 -95 t a b a;
+#X obj 126 121 #t;
+#X text 260 262 variance = standard deviation \, squared;
+#X text 523 210 (X - EX)squared;
+#X text 146 344 <-- variance;
+#X text 145 368 <-- squeeze;
+#X text 173 390 <-- applies the pythagore theorem;
+#X text 158 316 <-- fudge factor because we are not in float \, could
+try as float throughout instead;
+#X obj 250 566 inlet output_threshold;
+#X text 254 608 <-- checks to see if the value is within 0-255;
+#X text 158 660 <-- output is greyscale (channel8 in lti parlance)
+;
+#X text 124 468 <-- "malanowis distance" of each pixel to the background
+;
+#X text 297 -50 ------------ addBackground ----------;
+#X obj 104 416 #redim ( \$2 \$3 1);
+#X obj 126 69 #store ( \$1 \$2 \$3 \$4 #);
+#X obj 147 -56 spigot;
+#X obj 190 -83 inlet addBackground;
+#X text 242 416 <-- adds a channel;
+#X obj 217 283 outlet variance;
+#X obj 265 177 outlet Mean;
+#X obj 312 0 count 0 \$1;
+#X obj 126 200 # sq-;
+#X obj 176 119 #fold + \, seed ( \$2 \$3 \$4 #);
+#X obj 176 147 # / \$1;
+#X obj 127 235 #fold + \, seed ( \$2 \$3 \$4 #);
+#X obj 165 260 # / \$1;
+#X obj 135 607 # > 128;
+#X obj 134 628 # * 255;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 36 0;
+#X connect 10 0 12 1;
+#X connect 12 0 16 0;
+#X connect 12 1 49 0;
+#X connect 15 0 23 0;
+#X connect 17 0 10 0;
+#X connect 18 0 37 1;
+#X connect 18 1 43 0;
+#X connect 19 0 20 0;
+#X connect 20 0 37 1;
+#X connect 23 0 1 0;
+#X connect 23 1 37 0;
+#X connect 23 2 38 0;
+#X connect 24 0 44 0;
+#X connect 24 1 45 0;
+#X connect 31 0 49 1;
+#X connect 36 0 12 0;
+#X connect 37 0 24 0;
+#X connect 38 0 18 0;
+#X connect 39 0 38 1;
+#X connect 43 0 19 0;
+#X connect 44 0 47 0;
+#X connect 45 0 46 0;
+#X connect 46 0 1 1;
+#X connect 46 0 42 0;
+#X connect 46 0 44 1;
+#X connect 47 0 48 0;
+#X connect 48 0 2 1;
+#X connect 48 0 41 0;
+#X connect 49 0 50 0;
+#X connect 50 0 16 0;
diff --git a/externals/gridflow/abstractions/#camera.pd b/externals/gridflow/abstractions/#camera.pd
new file mode 100644
index 00000000..e175eb89
--- /dev/null
+++ b/externals/gridflow/abstractions/#camera.pd
@@ -0,0 +1,354 @@
+#N canvas 599 0 421 345 10;
+#X obj 81 31 cnv 15 184 68 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 143 34 hradio 12 1 0 4 \$0-s_channel \$0-channel _0_1_2_3 -2
+7 1 10 -233017 -195568 -195568 0;
+#N canvas 275 0 906 659 camera 0;
+#X obj 310 510 outlet;
+#X obj 51 9 inlet;
+#X obj 63 198 t a;
+#X msg 700 458 open videodev \$1 \, get;
+#X msg 673 309 size \$1 \$2;
+#X obj 598 8 r \$0-size0;
+#X msg 673 8 120 160;
+#X msg 673 27 120 180;
+#X obj 598 27 r \$0-size1;
+#X msg 673 46 240 320;
+#X msg 673 65 240 360;
+#X obj 598 46 r \$0-size2;
+#X obj 598 65 r \$0-size3;
+#X obj 598 84 r \$0-size4;
+#X obj 598 103 r \$0-size5;
+#X msg 673 84 480 640;
+#X msg 673 103 480 720;
+#X obj 598 122 r \$0-size6;
+#X obj 598 141 r \$0-size7;
+#X msg 673 122 576 720;
+#X msg 673 141 288 352;
+#X obj 673 204 unpack 0 0;
+#X obj 768 223 s \$0-width;
+#X obj 673 223 s \$0-height;
+#X obj 673 271 #pack;
+#X obj 673 290 #export_list;
+#X obj 700 439 makefilename /dev/video%d;
+#X obj 85 419 spigot;
+#X obj 308 579 args (device a -1);
+#X obj 308 560 loadbang;
+#X obj 308 617 s \$0-device;
+#X obj 85 441 route pwc;
+#X msg 85 460 pwc \$1 \, get;
+#X obj 51 28 list split 1;
+#X obj 51 47 makefilename \$0-%s;
+#X obj 51 104 s;
+#X obj 51 85 list;
+#X obj 51 66 t b s;
+#X msg 684 482 open dc1394 \, get;
+#X obj 391 287 listfind y yuv rgb magic;
+#X obj 391 344 listread y yuv rgb magic;
+#X msg 391 363 colorspace \$1;
+#X obj 181 66 list prepend;
+#X obj 181 85 list trim;
+#X obj 174 174 foreach;
+#X obj 174 193 makefilename \$0-%s;
+#X msg 174 212 \; \$1 color 10 20 20;
+#X msg 179 559 \; \$1 color 18 17 22;
+#X obj 122 381 t b a b b;
+#X obj 391 306 s \$0-colorspace_e;
+#X obj 391 325 r \$0-s_colorspace_e;
+#X obj 673 243 r \$0-s_height;
+#X obj 768 243 r \$0-s_width;
+#X obj 656 368 r \$0-s_device;
+#X obj 580 186 r \$0-size;
+#X msg 180 400 0;
+#X msg 122 400 1;
+#X obj 580 205 route2 color;
+#X obj 580 224 s \$0-sizec;
+#X obj 571 243 s \$0-width;
+#X obj 561 263 s \$0-height;
+#X obj 371 265 route2 color;
+#X obj 371 246 r \$0-colorspace;
+#X obj 635 538 s \$0-title;
+#X msg 635 519 label \$1;
+#X obj 563 481 r \$0-name;
+#X obj 563 500 route color;
+#X msg 490 591 close;
+#X msg 490 612 label No_camera_selected;
+#X msg 339 181 label Unknown_camera;
+#X obj 339 200 s \$0-title;
+#X obj 731 8 r \$0-minsize;
+#X obj 731 46 unpack 0 0;
+#X obj 796 65 s \$0-minwidth;
+#X obj 731 84 s \$0-minheight;
+#X obj 731 141 unpack 0 0;
+#X obj 731 103 r \$0-maxsize;
+#X obj 731 179 s \$0-maxheight;
+#X obj 796 160 s \$0-maxwidth;
+#X obj 731 27 route list;
+#X obj 731 122 route list;
+#X obj 393 522 s \$0-minsize;
+#X msg 393 501 0 0;
+#X obj 403 542 s \$0-maxsize;
+#X obj 656 387 t a b;
+#X obj 67 482 r \$0-palette;
+#X obj 139 539 s \$0-palette2;
+#X msg 139 520 label \$1;
+#X obj 25 563 route minsize maxsize;
+#X obj 67 501 route color;
+#X obj 181 8 receives \$0-s_ channel tuner frequency brightness contrast
+colour hue whiteness white_mode white_red white_blue white_speed white_delay
+auto_gain framerate noise_reduction compression pwc size colorspace
+norm transfer;
+#X msg 174 116 list channel tuner frequency brightness contrast colour
+hue whiteness white_mode white_red white_blue white_speed white_delay
+auto_gain framerate noise_reduction compression pwc size colorspace
+norm transfer;
+#X obj 714 505 r \$0-transfer;
+#X obj 754 544 listfind read mmap;
+#X obj 744 563 s \$0-transfer_e;
+#X obj 744 582 r \$0-s_transfer_e;
+#X obj 744 601 listread read mmap;
+#X msg 744 620 transfer \$1;
+#X obj 714 524 route2 color;
+#X obj 308 598 mod 11;
+#X obj 656 417 range 8 9 10;
+#X msg 434 399 open quicktimecamera \, get;
+#X connect 1 0 33 0;
+#X connect 2 0 27 0;
+#X connect 3 0 48 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 21 0;
+#X connect 7 0 21 0;
+#X connect 8 0 7 0;
+#X connect 9 0 21 0;
+#X connect 10 0 21 0;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 21 0;
+#X connect 16 0 21 0;
+#X connect 17 0 19 0;
+#X connect 18 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 21 0;
+#X connect 21 0 23 0;
+#X connect 21 1 22 0;
+#X connect 24 0 25 0;
+#X connect 25 0 4 0;
+#X connect 26 0 3 0;
+#X connect 27 0 31 0;
+#X connect 28 0 99 0;
+#X connect 28 1 0 0;
+#X connect 29 0 28 0;
+#X connect 31 0 32 0;
+#X connect 31 1 0 0;
+#X connect 32 0 48 0;
+#X connect 33 0 34 0;
+#X connect 33 1 36 1;
+#X connect 34 0 37 0;
+#X connect 34 0 88 0;
+#X connect 36 0 35 0;
+#X connect 37 0 36 0;
+#X connect 37 1 35 1;
+#X connect 38 0 48 0;
+#X connect 39 0 49 0;
+#X connect 40 0 41 0;
+#X connect 41 0 2 0;
+#X connect 42 0 43 0;
+#X connect 43 0 2 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 48 0 56 0;
+#X connect 48 1 0 0;
+#X connect 48 2 69 0;
+#X connect 48 2 91 0;
+#X connect 48 3 55 0;
+#X connect 50 0 40 0;
+#X connect 51 0 24 0;
+#X connect 52 0 24 1;
+#X connect 53 0 84 0;
+#X connect 54 0 57 0;
+#X connect 55 0 27 1;
+#X connect 56 0 27 1;
+#X connect 57 0 58 0;
+#X connect 57 0 59 0;
+#X connect 57 0 60 0;
+#X connect 57 1 21 0;
+#X connect 61 0 49 0;
+#X connect 61 1 39 0;
+#X connect 62 0 61 0;
+#X connect 64 0 63 0;
+#X connect 65 0 66 0;
+#X connect 66 1 64 0;
+#X connect 67 0 48 0;
+#X connect 67 0 68 0;
+#X connect 67 0 82 0;
+#X connect 68 0 63 0;
+#X connect 69 0 70 0;
+#X connect 71 0 79 0;
+#X connect 72 0 74 0;
+#X connect 72 1 73 0;
+#X connect 75 0 77 0;
+#X connect 75 1 78 0;
+#X connect 76 0 80 0;
+#X connect 79 0 72 0;
+#X connect 80 0 75 0;
+#X connect 82 0 81 0;
+#X connect 82 0 83 0;
+#X connect 84 0 100 0;
+#X connect 84 1 82 0;
+#X connect 85 0 89 0;
+#X connect 87 0 86 0;
+#X connect 88 2 47 0;
+#X connect 89 1 87 0;
+#X connect 90 0 42 0;
+#X connect 90 1 42 1;
+#X connect 91 0 44 0;
+#X connect 92 0 98 0;
+#X connect 93 0 94 0;
+#X connect 95 0 96 0;
+#X connect 96 0 97 0;
+#X connect 97 0 2 0;
+#X connect 98 0 94 0;
+#X connect 98 1 93 0;
+#X connect 99 0 30 0;
+#X connect 100 0 26 0;
+#X connect 100 1 38 0;
+#X connect 100 2 101 0;
+#X connect 100 3 67 0;
+#X connect 101 0 48 0;
+#X restore 34 390 pd camera;
+#X obj 7 409 outlet image;
+#X obj 7 352 inlet;
+#X obj 143 46 hradio 12 1 0 4 \$0-s_tuner \$0-tuner _0_1_2_3 -2 7 1
+10 -233017 -195568 -195568 0;
+#X obj 46 352 r \$0-o;
+#X text 84 35 channel:;
+#X text 98 47 tuner:;
+#X obj 6 31 cnv 15 70 216 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 9 32 device:;
+#X obj 11 50 vradio 15 1 0 11 \$0-s_device \$0-device empty 0 -6 0
+8 -241291 -1 -1 0;
+#X obj 81 105 cnv 15 184 172 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 270 214 cnv 15 144 124 empty \$0-palette2 YUV420P 86 8 0 12
+-233017 -1 0;
+#X obj 270 31 cnv 15 144 178 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 312 66 nbx 5 14 -1e+37 1e+37 0 0 \$0-s_height \$0-height empty
+0 -6 1 10 -62784 -44926 -1 480 256;
+#X obj 360 66 nbx 5 14 -1e+37 1e+37 0 0 \$0-s_width \$0-width empty
+0 -6 1 10 -62784 -44926 -1 640 256;
+#X text 275 65 size:;
+#X text 315 35 height;
+#X text 365 35 width;
+#X msg 291 315 transfer mmap 4;
+#X obj 291 352 s \$0-o;
+#X obj 329 124 bng 12 250 50 0 \$0-size0 \$0-sizec 120x160 -46 6 1
+10 -62784 -44926 -1;
+#X obj 344 124 bng 12 250 50 0 \$0-size1 \$0-sizec 120x180 16 6 1 10
+-62784 -44926 -1;
+#X obj 329 136 bng 12 250 50 0 \$0-size2 \$0-sizec 240x320 -46 6 1
+10 -62784 -44926 -1;
+#X obj 344 136 bng 12 250 50 0 \$0-size3 \$0-sizec 240x360 16 6 1 10
+-62784 -44926 -1;
+#X obj 329 148 bng 12 250 50 0 \$0-size4 \$0-sizec 480x640 -46 6 1
+10 -62784 -44926 -1;
+#X obj 344 148 bng 12 250 50 0 \$0-size5 \$0-sizec 480x720 16 6 1 10
+-62784 -44926 -1;
+#X obj 344 160 bng 12 250 50 0 \$0-size6 \$0-sizec 576x720 16 6 1 10
+-62784 -44926 -1;
+#X obj 344 172 bng 12 250 50 0 \$0-size7 \$0-sizec 288x352 16 6 1 10
+-62784 -44926 -1;
+#X obj 360 191 nbx 5 14 -1e+37 1e+37 0 0 \$0-s_framerate \$0-framerate
+empty 0 -6 1 10 -233017 -195568 -195568 10 256;
+#X obj 83 179 tgl 12 0 \$0-s_white_mode \$0-white_mode manual_white_balance
+20 7 1 10 -233017 -195568 -195568 1 1;
+#X text 27 50 #0;
+#X text 27 65 #1;
+#X text 27 80 #2;
+#X text 27 95 #3;
+#X text 27 110 #4;
+#X text 27 125 #5;
+#X text 27 140 #6;
+#X text 27 155 #7;
+#X text 317 106 presets:;
+#X text 90 167 ------- PWC ONLY: -------;
+#X obj 83 251 hradio 12 1 0 4 \$0-s_noise_reduction \$0-noise_reduction
+_0_1_2_3_noise_reduction -2 7 1 10 -233017 -195568 -195568 0;
+#X obj 83 263 hradio 12 1 0 4 \$0-s_compression \$0-compression _0_1_2_3_compression
+-2 7 1 10 -233017 -195568 -195568 3;
+#X obj 11 226 tgl 12 0 \$0-s_pwc \$0-pwc empty 20 7 1 10 -62784 -44926
+-1 0 1;
+#X text 26 224 use PWC;
+#X text 28 170 DC1394;
+#X obj 356 232 vradio 12 1 0 4 \$0-s_colorspace_e \$0-colorspace_e
+empty 0 -8 0 10 -62784 -44926 -1 2;
+#X text 370 229 y;
+#X text 370 241 yuv;
+#X text 370 254 rgb;
+#X text 370 266 magic;
+#X text 269 249 Colorspaces:;
+#N canvas 0 0 450 300 command_filtre 0;
+#X obj 22 24 inlet;
+#X obj 22 92 outlet;
+#X obj 22 43 route bang device;
+#X obj 79 122 s \$0-device;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 2 2 1 0;
+#X restore 7 371 pd command_filtre;
+#X obj 7 390 #in;
+#X text 287 191 framerate:;
+#X obj 201 34 vradio 12 1 0 4 \$0-s_norm \$0-norm empty 0 -8 0 10 -233017
+-195568 -195568 0;
+#X text 214 33 PAL;
+#X text 214 45 NTSC;
+#X text 213 57 SECAM;
+#X text 213 68 auto;
+#X obj 6 6 cnv 15 408 20 empty \$0-title Logitech_QuickCam_Pro_4000
+4 10 1 12 -1 -262144 0;
+#X obj 356 285 vradio 12 1 0 2 \$0-s_transfer_e \$0-transfer_e empty
+0 -8 0 10 -62784 -44926 -1 1;
+#X text 291 289 Transfer:;
+#X text 370 283 read;
+#X text 371 295 mmap;
+#X obj 312 52 nbx 5 14 -1e+37 1e+37 0 0 empty \$0-minheight empty 0
+-6 1 10 -233017 -1 -195568 120 256;
+#X obj 360 52 nbx 5 14 -1e+37 1e+37 0 0 empty \$0-minwidth empty 0
+-6 1 10 -233017 -1 -195568 160 256;
+#X obj 312 80 nbx 5 14 -1e+37 1e+37 0 0 empty \$0-maxheight empty 0
+-6 1 10 -233017 -1 -195568 480 256;
+#X obj 360 80 nbx 5 14 -1e+37 1e+37 0 0 empty \$0-maxwidth empty 0
+-6 1 10 -233017 -1 -195568 640 256;
+#X text 275 79 max:;
+#X text 275 51 min:;
+#X text 297 214 Palette:;
+#X obj 45 53 cnv 1 3 1 empty empty empty 20 12 0 14 -1 -66577 0;
+#X obj 45 165 cnv 1 3 1 empty empty empty 20 12 0 14 -1 -66577 0;
+#X obj 48 55 cnv 1 1 53 empty empty empty 20 12 0 14 -1 -66577 0;
+#X obj 49 109 cnv 1 3 1 empty empty V4L1 6 0 0 10 -1 -66577 0;
+#X obj 48 111 cnv 1 1 53 empty empty empty 20 12 0 14 -1 -66577 0;
+#X text 27 200 OFF;
+#X text 27 185 MacOSX;
+#X obj 83 107 gf.nbxhsl \$0 contrast;
+#X obj 83 119 gf.nbxhsl \$0 brightness;
+#X obj 83 131 gf.nbxhsl \$0 colour;
+#X obj 83 143 gf.nbxhsl \$0 hue;
+#X obj 83 155 gf.nbxhsl \$0 whiteness;
+#X obj 82 191 gf.nbxhsl \$0 white_red;
+#X obj 82 203 gf.nbxhsl \$0 white_blue;
+#X obj 82 215 gf.nbxhsl \$0 white_speed;
+#X obj 82 227 gf.nbxhsl \$0 white_delay;
+#X obj 82 239 gf.nbxhsl \$0 auto_gain;
+#X obj 83 85 gf.nbxhsl \$0 frequency;
+#X connect 2 0 54 0;
+#X connect 4 0 53 0;
+#X connect 6 0 54 0;
+#X connect 20 0 21 0;
+#X connect 53 0 54 0;
+#X connect 54 0 3 0;
+#X connect 54 1 2 0;
diff --git a/externals/gridflow/abstractions/#camera_control.pd b/externals/gridflow/abstractions/#camera_control.pd
new file mode 100644
index 00000000..c759fd23
--- /dev/null
+++ b/externals/gridflow/abstractions/#camera_control.pd
@@ -0,0 +1,129 @@
+#N canvas 287 295 576 286 10;
+#X obj 50 265 outlet;
+#X obj 239 124 hradio 18 1 0 4 \$0-channel \$0-channel _0__1__2__3_
+0 -4 0 8 -241291 -258699 -1 0;
+#X obj 413 63 hsl 128 15 0 65535 0 0 \$0-brightness \$0-brightness
+brightness 8 8 0 8 -260818 -1 -1 0 1;
+#X obj 413 103 hsl 128 15 0 65535 0 0 \$0-hue \$0-hue hue 8 8 0 8 -260818
+-1 -1 0 1;
+#X obj 413 43 hsl 128 15 0 65535 0 0 \$0-contrast \$0-contrast contrast
+8 8 0 8 -260818 -1 -1 0 1;
+#X obj 413 123 hsl 128 15 0 65635 0 0 \$0-whiteness \$0-whiteness whiteness
+8 8 0 8 -260818 -1 -1 0 1;
+#X text 119 245 <-- open to access more camera controls;
+#N canvas 170 20 420 404 camera 0;
+#X obj 9 362 outlet;
+#X obj 9 8 inlet;
+#X msg 66 153 contrast \$1;
+#X msg 66 213 whiteness \$1;
+#X msg 66 133 brightness \$1;
+#X msg 171 383 size 120 160;
+#X msg 190 363 size 240 320;
+#X msg 209 343 size 480 640;
+#X msg 72 277 channel \$1;
+#X obj 176 133 r \$0-brightness;
+#X obj 176 153 r \$0-contrast;
+#X obj 176 213 r \$0-whiteness;
+#X obj 171 299 r \$0-size;
+#X obj 182 277 r \$0-channel;
+#X obj 176 193 r \$0-hue;
+#X msg 66 193 hue \$1;
+#X msg 66 173 colour \$1;
+#X obj 176 173 r \$0-colour;
+#X obj 171 319 sel 0 1 2;
+#X obj 67 55 s \$0-brightness;
+#X obj 77 75 s \$0-contrast;
+#X obj 197 55 s \$0-colour;
+#X obj 207 75 s \$0-hue;
+#X obj 217 95 s \$0-whiteness;
+#X obj 32 245 t a;
+#X obj 9 35 route symbol brightness contrast colour hue whiteness;
+#X msg 9 109 open videodev \$1 \, get;
+#X connect 1 0 25 0;
+#X connect 2 0 24 0;
+#X connect 3 0 24 0;
+#X connect 4 0 24 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 4 0;
+#X connect 10 0 2 0;
+#X connect 11 0 3 0;
+#X connect 12 0 18 0;
+#X connect 13 0 8 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 16 0 24 0;
+#X connect 17 0 16 0;
+#X connect 18 0 5 0;
+#X connect 18 1 6 0;
+#X connect 18 2 7 0;
+#X connect 24 0 0 0;
+#X connect 25 0 26 0;
+#X connect 25 1 19 0;
+#X connect 25 2 20 0;
+#X connect 25 3 21 0;
+#X connect 25 4 22 0;
+#X connect 25 5 23 0;
+#X connect 25 6 0 0;
+#X connect 26 0 0 0;
+#X restore 50 245 pd camera;
+#X msg 83 196 colorspace YUV420P;
+#X text 218 196 <-- click here if your webcam uses this colorspace
+;
+#X obj 103 222 #yuv_to_rgb;
+#X text 185 222 <-- add this after [#in] to translate the colorspaces
+;
+#X obj 413 83 hsl 128 15 0 65535 0 0 \$0-colour \$0-colour colour 8
+8 0 8 -260818 -1 -1 0 1;
+#X text 98 266 plug this to #in;
+#X obj 241 53 vradio 15 1 0 3 \$0-size \$0-size empty 0 -6 0 8 -241291
+-258699 -1 0;
+#X text 259 53 120 \, 160;
+#X text 259 69 240 \, 320;
+#X text 259 84 480 \, 640;
+#X text 239 38 select size;
+#X text 239 101 select channel;
+#X obj 10 245 inlet;
+#X obj 354 44 nbx 5 14 0 65535 0 0 \$0-contrast \$0-contrast empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X obj 354 64 nbx 5 14 0 65535 0 0 \$0-brightness \$0-brightness empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X obj 354 84 nbx 5 14 0 65535 0 0 \$0-colour \$0-colour empty 0 -6
+0 10 -260818 -1 -1 0 256;
+#X obj 354 104 nbx 5 14 0 65535 0 0 \$0-hue \$0-hue empty 0 -6 0 10
+-260818 -1 -1 0 256;
+#X obj 354 124 nbx 5 14 0 65535 0 0 \$0-whiteness \$0-whiteness empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X msg 50 28 symbol /dev/video0;
+#X msg 50 48 symbol /dev/video1;
+#X msg 50 68 symbol /dev/video2;
+#X msg 50 88 symbol /dev/video3;
+#X text 17 6 Select a camera;
+#X obj 31 28 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X obj 31 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X obj 31 68 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X obj 31 88 bng 15 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
+-1;
+#X msg 81 133 transfer mmap;
+#X msg 81 153 transfer read;
+#X msg 83 176 colorspace RGB24;
+#X text 70 115 Special options:;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
+#X connect 20 0 7 0;
+#X connect 26 0 7 0;
+#X connect 27 0 7 0;
+#X connect 28 0 7 0;
+#X connect 29 0 7 0;
+#X connect 31 0 26 0;
+#X connect 32 0 27 0;
+#X connect 33 0 28 0;
+#X connect 34 0 29 0;
+#X connect 35 0 7 0;
+#X connect 36 0 7 0;
+#X connect 37 0 7 0;
diff --git a/externals/gridflow/abstractions/#camera_old.pd b/externals/gridflow/abstractions/#camera_old.pd
new file mode 100644
index 00000000..b1a87da9
--- /dev/null
+++ b/externals/gridflow/abstractions/#camera_old.pd
@@ -0,0 +1,161 @@
+#N canvas 90 150 679 206 10;
+#X obj 114 6 cnv 15 480 200 empty empty empty 20 12 0 14 -195568 -66577
+0;
+#X obj 135 86 hradio 18 1 0 4 \$0-channel \$0-channel _0__1__2__3_
+0 14 0 8 -241291 -258699 -1 0;
+#X obj 418 47 hsl 128 15 0 65535 0 0 \$0-brightness \$0-brightness
+brightness 8 8 0 8 -260818 -1 -1 0 1;
+#X obj 418 87 hsl 128 15 0 65535 0 0 \$0-hue \$0-hue hue 8 8 0 8 -260818
+-1 -1 0 1;
+#X obj 418 27 hsl 128 15 0 65535 0 0 \$0-contrast \$0-contrast contrast
+8 8 0 8 -260818 -1 -1 0 1;
+#X obj 418 107 hsl 128 15 0 65635 0 0 \$0-whiteness \$0-whiteness whiteness
+8 8 0 8 -260818 -1 -1 0 1;
+#N canvas 256 168 546 412 camera 0;
+#X obj 20 387 outlet;
+#X obj 11 9 inlet;
+#X msg 160 126 contrast \$1;
+#X msg 160 186 whiteness \$1;
+#X msg 160 106 brightness \$1;
+#X msg 160 227 channel \$1;
+#X obj 270 106 r \$0-brightness;
+#X obj 270 126 r \$0-contrast;
+#X obj 270 186 r \$0-whiteness;
+#X obj 153 276 r \$0-size;
+#X obj 270 226 r \$0-channel;
+#X obj 270 166 r \$0-hue;
+#X msg 160 166 hue \$1;
+#X msg 160 146 colour \$1;
+#X obj 270 146 r \$0-colour;
+#X obj 23 198 t a;
+#X msg 319 382 open videodev \$1 \, get;
+#X obj 318 363 rubysprintf /dev/video%d;
+#X msg 160 206 frequency \$1;
+#X obj 270 206 r \$0-frequency;
+#X obj 318 344 r \$0-device;
+#X obj 153 346 #export_list;
+#X msg 153 295 list \$1;
+#X msg 154 365 size \$1 \$2;
+#X obj 153 314 #store ( 4 2 # 120 160 240 320 480 640 120 180 240 360
+480 720 );
+#X obj 12 98 rubysprintf %d-%s;
+#X obj 11 117 pack s f;
+#X obj 12 77 t a a;
+#X msg 68 77 \$3;
+#X msg 11 136 \; \$1 \$2;
+#X obj 11 56 messageprepend \$0;
+#X msg 160 247 tuner \$1;
+#X obj 270 246 r \$0-tuner;
+#X connect 1 0 30 0;
+#X connect 2 0 15 0;
+#X connect 3 0 15 0;
+#X connect 4 0 15 0;
+#X connect 5 0 15 0;
+#X connect 6 0 4 0;
+#X connect 7 0 2 0;
+#X connect 8 0 3 0;
+#X connect 9 0 22 0;
+#X connect 10 0 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 13 0 15 0;
+#X connect 14 0 13 0;
+#X connect 15 0 0 0;
+#X connect 16 0 0 0;
+#X connect 17 0 16 0;
+#X connect 18 0 15 0;
+#X connect 19 0 18 0;
+#X connect 20 0 17 0;
+#X connect 21 0 23 0;
+#X connect 22 0 24 0;
+#X connect 23 0 0 0;
+#X connect 24 0 21 0;
+#X connect 25 0 26 0;
+#X connect 26 0 29 0;
+#X connect 27 0 25 0;
+#X connect 27 1 28 0;
+#X connect 28 0 26 1;
+#X connect 30 0 27 0;
+#X connect 31 0 15 0;
+#X connect 32 0 31 0;
+#X restore 117 249 pd camera;
+#X msg 428 318 colorspace YUV420P;
+#X obj 134 311 #yuv_to_rgb;
+#X obj 418 67 hsl 128 15 0 65535 0 0 \$0-colour \$0-colour colour 8
+8 0 8 -260818 -1 -1 0 1;
+#X obj 252 37 vradio 15 1 0 3 \$0-size \$0-size empty 0 -6 0 8 -241291
+-258699 -1 0;
+#X text 270 37 120 \, 160;
+#X text 270 53 240 \, 320;
+#X text 270 68 480 \, 640;
+#X text 250 22 select size;
+#X text 135 72 select channel;
+#X obj 359 28 nbx 5 14 0 65535 0 0 \$0-contrast \$0-contrast empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X obj 359 48 nbx 5 14 0 65535 0 0 \$0-brightness \$0-brightness empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X obj 359 68 nbx 5 14 0 65535 0 0 \$0-colour \$0-colour empty 0 -6
+0 10 -260818 -1 -1 0 256;
+#X obj 359 88 nbx 5 14 0 65535 0 0 \$0-hue \$0-hue empty 0 -6 0 10
+-260818 -1 -1 0 256;
+#X obj 359 108 nbx 5 14 0 65535 0 0 \$0-whiteness \$0-whiteness empty
+0 -6 0 10 -260818 -1 -1 0 256;
+#X msg 428 238 transfer mmap;
+#X msg 428 278 transfer read;
+#X msg 428 298 colorspace RGB24;
+#X text 427 222 Special options:;
+#X obj 90 249 #in;
+#X obj 100 379 outlet image;
+#X obj 136 49 hradio 18 1 0 4 \$0-device \$0-device _0__1__2__3_ 0
+-4 0 8 -241291 -258699 -1 0;
+#X obj 90 282 shunt 2;
+#X obj 134 166 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -258699
+-1 0;
+#X text 164 181 YUV->RGB;
+#X text 164 165 no conversion;
+#X obj 91 230 inlet;
+#X obj 134 332 # min 255;
+#X obj 134 351 # max 0;
+#X msg 428 258 transfer mmap 4;
+#X obj 134 131 hradio 18 1 0 4 \$0-tuner \$0-tuner _0__1__2__3_ 0 14
+0 8 -241291 -258699 -1 0;
+#X text 134 116 select tuner;
+#X obj 418 137 hsl 128 15 0 65635 0 0 \$0-frequency \$0-frequency frequency
+8 8 0 8 -62784 -44926 -44926 0 1;
+#X obj 359 138 nbx 5 14 0 65535 0 0 \$0-frequency \$0-frequency empty
+0 -6 0 10 -62784 -44926 -44926 0 256;
+#X obj 416 339 s \$0-o;
+#X obj 130 229 r \$0-o;
+#X obj -89 7 cnv 15 200 60 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -86 238 \$0;
+#X obj -86 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X msg -86 257 \; \$1-device 0 \; \$1-size 1 \; \$1-channel 1;
+#X text -62 28 <-- initialise camera;
+#X text 132 22 select a camera;
+#X text -77 85 These options provide -->;
+#X text -76 100 more controls. Scroll down;
+#X text -78 115 for webcams options.;
+#X obj 155 276 print;
+#X msg 183 226 help;
+#X connect 6 0 25 0;
+#X connect 7 0 40 0;
+#X connect 8 0 33 0;
+#X connect 21 0 40 0;
+#X connect 22 0 40 0;
+#X connect 23 0 40 0;
+#X connect 25 0 28 0;
+#X connect 25 1 6 0;
+#X connect 25 1 51 0;
+#X connect 28 0 26 0;
+#X connect 28 1 8 0;
+#X connect 29 0 28 1;
+#X connect 32 0 25 0;
+#X connect 33 0 34 0;
+#X connect 34 0 26 0;
+#X connect 35 0 40 0;
+#X connect 41 0 25 0;
+#X connect 43 0 45 0;
+#X connect 44 0 43 0;
+#X connect 52 0 25 0;
diff --git a/externals/gridflow/abstractions/#centroid_in_pd.pd b/externals/gridflow/abstractions/#centroid_in_pd.pd
new file mode 100644
index 00000000..38745844
--- /dev/null
+++ b/externals/gridflow/abstractions/#centroid_in_pd.pd
@@ -0,0 +1,84 @@
+#N canvas 494 135 339 225 10;
+#X obj -63 82 #fold +;
+#X obj -63 101 # >> 8;
+#N canvas 0 0 450 300 gravity 0;
+#X obj 77 20 inlet;
+#X obj 75 276 outlet;
+#X obj 77 54 t a a;
+#X obj 41 90 #finished;
+#X obj 125 79 #dim;
+#X obj 126 105 #fold +;
+#X obj 68 140 #for 0 0 1;
+#X obj 172 190 #fold +;
+#X obj 72 179 # *;
+#X obj 72 199 #fold +;
+#X obj 72 249 # /;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 1 7 0;
+#X connect 2 1 8 1;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 6 0 8 0;
+#X connect 7 0 10 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X restore -63 120 pd gravity;
+#X obj -63 139 #export;
+#X obj -63 25 #fold +;
+#X obj 30 83 #fold +;
+#X obj 30 102 # >> 8;
+#N canvas 0 0 450 300 gravity 0;
+#X obj 77 20 inlet;
+#X obj 75 276 outlet;
+#X obj 77 54 t a a;
+#X obj 41 90 #finished;
+#X obj 125 79 #dim;
+#X obj 126 105 #fold +;
+#X obj 68 140 #for 0 0 1;
+#X obj 172 190 #fold +;
+#X obj 72 179 # *;
+#X obj 72 199 #fold +;
+#X obj 72 249 # /;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 1 7 0;
+#X connect 2 1 8 1;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 6 0 8 0;
+#X connect 7 0 10 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 1 0;
+#X restore 30 121 pd gravity;
+#X obj 30 140 #export;
+#X obj 30 63 #transpose;
+#X obj -63 44 t a a;
+#X obj -63 178 #pack 2;
+#X obj -63 197 outlet position;
+#X obj -63 6 inlet greyscale_image;
+#X obj 90 173 outlet x;
+#X obj 12 174 outlet y;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 11 0;
+#X connect 3 0 15 0;
+#X connect 4 0 10 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 11 1;
+#X connect 8 0 14 0;
+#X connect 9 0 5 0;
+#X connect 10 0 0 0;
+#X connect 10 1 9 0;
+#X connect 11 0 12 0;
+#X connect 13 0 4 0;
+#X coords 0 0 5.43251e-06 7.95071e-06 100 40 0;
diff --git a/externals/gridflow/abstractions/#change.pd b/externals/gridflow/abstractions/#change.pd
new file mode 100644
index 00000000..73a5b6ed
--- /dev/null
+++ b/externals/gridflow/abstractions/#change.pd
@@ -0,0 +1,20 @@
+#N canvas 273 276 381 232 10;
+#X obj 64 38 inlet;
+#X obj 64 96 # !=;
+#X obj 64 134 #fold |;
+#X obj 123 126 #store;
+#X obj 64 115 #ravel;
+#X obj 64 153 #export;
+#X obj 123 145 outlet;
+#X obj 64 57 t a a a;
+#X obj 64 172 sel 1;
+#X connect 0 0 7 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 2 0;
+#X connect 5 0 8 0;
+#X connect 7 0 1 1;
+#X connect 7 1 1 0;
+#X connect 7 2 3 1;
+#X connect 8 0 3 0;
diff --git a/externals/gridflow/abstractions/#checkers.pd b/externals/gridflow/abstractions/#checkers.pd
new file mode 100644
index 00000000..5b0b8711
--- /dev/null
+++ b/externals/gridflow/abstractions/#checkers.pd
@@ -0,0 +1,18 @@
+#N canvas 0 0 450 300 10;
+#X obj 18 14 inlet;
+#X obj 18 34 # >> 3;
+#X obj 18 54 # & 1;
+#X obj 18 74 #fold ^;
+#X obj 18 94 # inv+;
+#X obj 18 114 # & 63;
+#X obj 18 134 # + 128;
+#X obj 18 174 outlet;
+#X obj 18 154 #outer ignore (3 #);
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 8 0 7 0;
diff --git a/externals/gridflow/abstractions/#clip.pd b/externals/gridflow/abstractions/#clip.pd
new file mode 100644
index 00000000..14158279
--- /dev/null
+++ b/externals/gridflow/abstractions/#clip.pd
@@ -0,0 +1,18 @@
+#N canvas 531 259 649 265 10;
+#X obj 87 4 inlet;
+#X obj 87 230 outlet;
+#X obj 117 133 inlet;
+#X obj 117 58 inlet;
+#X obj 87 156 # min;
+#X obj 87 82 # max;
+#X obj 243 14 loadbang;
+#X obj 243 40 args (max a 0) (min a 255);
+#X text 439 40 <-- sets the initial values;
+#X connect 0 0 5 0;
+#X connect 2 0 4 1;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 1;
+#X connect 7 1 4 1;
diff --git a/externals/gridflow/abstractions/#color.pd b/externals/gridflow/abstractions/#color.pd
new file mode 100644
index 00000000..f8fa8953
--- /dev/null
+++ b/externals/gridflow/abstractions/#color.pd
@@ -0,0 +1,72 @@
+#N canvas 184 193 450 373 10;
+#X obj 76 87 hsl 128 14 0 255 0 0 empty empty empty -2 -6 0 8 -225271
+-24198 -1 2300 1;
+#X obj 76 101 hsl 128 14 0 255 0 0 empty empty empty -2 -6 0 8 -228992
+-62784 -1 3100 1;
+#X obj 76 73 hsl 128 14 0 255 0 0 empty empty empty -2 -6 0 8 -261689
+-258699 -1 900 1;
+#X obj 10 166 #pack 3;
+#X obj 39 -6 inlet rgb_color;
+#X obj 15 188 outlet rgb_color;
+#X obj 122 62 cnv 10 60 10 empty \$0-cnv empty 20 12 0 14 -17104 -262144
+0;
+#X obj 10 343 s \$0-cnv;
+#X msg 10 324 color \$1;
+#X obj 10 267 #export;
+#X obj 10 248 # ^ -1;
+#X obj 10 229 #fold |;
+#X obj 216 123 loadbang;
+#X msg 216 199 range \$1 \$2;
+#X obj 216 180 #export_list;
+#X obj 64 267 loadbang;
+#X obj 64 305 - \$3;
+#X msg 64 286 1;
+#X obj 10 305 spigot;
+#X obj 166 32 #unpack 3;
+#X obj 216 161 # || (0 255);
+#X obj 10 210 # << (16 8 0);
+#X obj 216 142 #store ( \$1 \$2 );
+#X floatatom 50 73 3 0 255 0 - - -;
+#X floatatom 50 87 3 0 255 0 - - -;
+#X floatatom 50 101 3 0 255 0 - - -;
+#X obj 82 122 int;
+#X obj 82 141 int;
+#X obj 82 160 int;
+#X obj 38 13 route delegate bang;
+#X connect 0 0 27 0;
+#X connect 1 0 28 0;
+#X connect 2 0 26 0;
+#X connect 3 0 5 0;
+#X connect 3 0 21 0;
+#X connect 4 0 29 0;
+#X connect 8 0 7 0;
+#X connect 9 0 18 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 22 0;
+#X connect 13 0 1 0;
+#X connect 13 0 0 0;
+#X connect 13 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 17 0;
+#X connect 16 0 18 1;
+#X connect 17 0 16 0;
+#X connect 18 0 8 0;
+#X connect 19 0 2 0;
+#X connect 19 1 0 0;
+#X connect 19 2 1 0;
+#X connect 20 0 14 0;
+#X connect 21 0 11 0;
+#X connect 22 0 20 0;
+#X connect 23 0 3 0;
+#X connect 24 0 3 1;
+#X connect 25 0 3 2;
+#X connect 26 0 23 0;
+#X connect 27 0 24 0;
+#X connect 28 0 25 0;
+#X connect 29 0 2 0;
+#X connect 29 0 0 0;
+#X connect 29 0 1 0;
+#X connect 29 1 2 0;
+#X connect 29 2 19 0;
+#X coords 0 -1 1 1 156 55 1 50 60;
diff --git a/externals/gridflow/abstractions/#contrast.pd b/externals/gridflow/abstractions/#contrast.pd
new file mode 100644
index 00000000..13549341
--- /dev/null
+++ b/externals/gridflow/abstractions/#contrast.pd
@@ -0,0 +1,20 @@
+#N canvas 0 0 450 300 10;
+#X obj 14 14 inlet;
+#X obj 14 34 # inv+ 255;
+#X obj 14 54 # *>>8;
+#X obj 14 74 # inv+ 255;
+#X obj 14 94 # *>>8;
+#X obj 14 114 # min 255;
+#X obj 14 134 # max 0;
+#X obj 14 154 outlet;
+#X obj 54 14 inlet;
+#X obj 94 14 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 8 0 2 1;
+#X connect 9 0 4 1;
diff --git a/externals/gridflow/abstractions/#draw_hpgl.pd b/externals/gridflow/abstractions/#draw_hpgl.pd
new file mode 100644
index 00000000..763ff5ea
--- /dev/null
+++ b/externals/gridflow/abstractions/#draw_hpgl.pd
@@ -0,0 +1,86 @@
+#N canvas 413 192 510 430 10;
+#X obj 208 16 inlet command;
+#X obj 18 17 inlet image;
+#X obj 18 337 outlet image;
+#X obj 109 17 inlet colour;
+#X obj 142 36 loadbang;
+#X obj 107 318 spigot 1;
+#X text 167 319 pen;
+#X msg 231 109 0;
+#X msg 270 109 1;
+#X obj 201 80 t a b;
+#X obj 240 80 t a b;
+#X obj 279 69 route bang;
+#X obj 353 103 t a a;
+#X msg 142 55 2 2 # -1;
+#X obj 353 139 unpack;
+#X obj 399 139 unpack;
+#X obj 353 162 pack 0 0 0 0;
+#X obj 107 337 outlet time_to_draw;
+#X obj 353 200 t a a;
+#X obj 353 219 #finished;
+#X obj 40 55 #store;
+#X obj 62 74 #dim;
+#X obj 26 185 #reinterval;
+#X obj 18 36 t a b a;
+#X obj 353 239 inlet start;
+#X obj 367 278 inlet end;
+#X obj 62 93 #unpack 3;
+#X obj 26 204 #reverse -1;
+#X obj 18 290 #draw_polygon \, draw line;
+#X obj 353 84 #to_list;
+#X obj 208 35 route PU PD PA PR;
+#X obj 367 297 #cast f;
+#X obj 353 258 #cast f;
+#X obj 353 181 #import (2 2) f;
+#X obj 353 65 #import (2) f;
+#X obj 43 163 #pack 2 f;
+#X obj 112 163 #pack 2 f;
+#X obj 26 223 #cast i;
+#X connect 0 0 30 0;
+#X connect 1 0 23 0;
+#X connect 3 0 28 1;
+#X connect 4 0 13 0;
+#X connect 5 0 17 0;
+#X connect 7 0 5 1;
+#X connect 8 0 5 1;
+#X connect 9 0 11 0;
+#X connect 9 1 7 0;
+#X connect 10 0 11 0;
+#X connect 10 1 8 0;
+#X connect 11 1 34 0;
+#X connect 12 0 15 0;
+#X connect 12 1 14 0;
+#X connect 13 0 28 2;
+#X connect 14 0 16 0;
+#X connect 14 1 16 1;
+#X connect 15 0 16 2;
+#X connect 15 1 16 3;
+#X connect 16 0 33 0;
+#X connect 18 0 19 0;
+#X connect 18 1 20 1;
+#X connect 19 0 5 0;
+#X connect 20 0 22 0;
+#X connect 21 0 26 0;
+#X connect 22 0 27 0;
+#X connect 23 0 28 0;
+#X connect 23 1 20 0;
+#X connect 23 2 21 0;
+#X connect 24 0 32 0;
+#X connect 25 0 31 0;
+#X connect 26 0 35 1;
+#X connect 26 1 36 0;
+#X connect 27 0 37 0;
+#X connect 28 0 2 0;
+#X connect 29 0 12 0;
+#X connect 30 0 9 0;
+#X connect 30 1 10 0;
+#X connect 30 2 34 0;
+#X connect 30 3 34 0;
+#X connect 31 0 22 2;
+#X connect 32 0 22 1;
+#X connect 33 0 18 0;
+#X connect 34 0 29 0;
+#X connect 35 0 22 3;
+#X connect 36 0 22 4;
+#X connect 37 0 28 2;
diff --git a/externals/gridflow/abstractions/#draw_rect.pd b/externals/gridflow/abstractions/#draw_rect.pd
new file mode 100644
index 00000000..9842f5fc
--- /dev/null
+++ b/externals/gridflow/abstractions/#draw_rect.pd
@@ -0,0 +1,44 @@
+#N canvas 371 309 450 300 10;
+#X obj 12 28 inlet;
+#X obj 98 264 outlet;
+#X obj 234 1 inlet;
+#X obj 221 157 #export_list;
+#X msg 221 176 4 2 # \$1 \$2 \$1 \$4 \$3 \$4 \$3 \$2;
+#X obj 72 28 inlet;
+#X obj 121 13 loadbang;
+#X msg 107 207 op \$1;
+#X obj 221 195 shunt 2;
+#X obj 12 110 route outline;
+#X obj 245 135 #store;
+#X obj 245 116 t b f;
+#X obj 225 240 @join 0;
+#X obj 228 220 t a a;
+#X obj 267 220 # + (1 1 1 1 -1 -1 -1 -1);
+#X obj 98 231 #draw_polygon put;
+#X obj 120 32 args op color (polygon a (2 2 #));
+#X obj 291 88 print COLOR;
+#X connect 0 0 9 0;
+#X connect 2 0 10 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 8 0;
+#X connect 5 0 15 1;
+#X connect 6 0 16 0;
+#X connect 7 0 15 0;
+#X connect 8 0 15 2;
+#X connect 8 1 13 0;
+#X connect 9 0 11 0;
+#X connect 9 1 15 0;
+#X connect 10 0 3 0;
+#X connect 11 0 10 0;
+#X connect 11 1 8 1;
+#X connect 12 0 15 2;
+#X connect 13 0 12 0;
+#X connect 13 1 14 0;
+#X connect 14 0 12 1;
+#X connect 15 0 1 0;
+#X connect 16 0 7 0;
+#X connect 16 1 15 1;
+#X connect 16 1 17 0;
+#X connect 16 2 3 0;
+#X connect 16 3 9 0;
diff --git a/externals/gridflow/abstractions/#draw_slider.pd b/externals/gridflow/abstractions/#draw_slider.pd
new file mode 100644
index 00000000..5dd4d694
--- /dev/null
+++ b/externals/gridflow/abstractions/#draw_slider.pd
@@ -0,0 +1,60 @@
+#N canvas 941 0 950 464 10;
+#X obj 277 189 loadbang;
+#X msg 253 146 2 2 # 40 40 80 \$1;
+#X msg 277 286 40 40 80 300;
+#X obj 44 15 inlet;
+#X obj 44 384 outlet;
+#X obj 87 91 inlet;
+#X msg 119 152 255 200 150;
+#X text 132 90 <-- colour;
+#X obj 253 -2 inlet;
+#X text 296 -3 <-- incoming values;
+#X obj 281 350 # + (10 2 # -1 -1 -1 1 1 1 1 -1 -1 -1 0 0 0 0 0 0 0
+0 0 0);
+#X msg 281 331 10 2 # \$1 \$2 \$1 \$4 \$3 \$4 \$3 \$2 \$1 \$2;
+#X obj 281 308 #export_list;
+#X obj 44 188 #draw_rect \$1;
+#X obj 44 349 #draw_polygon \$1 (255 255 255);
+#X obj 470 9 loadbang;
+#X obj 446 2 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 470 28 args op insidecolour outsidecolour rect min max;
+#X obj 707 100 inv+;
+#X obj 253 45 -;
+#X obj 253 64 *;
+#X obj 387 283 -;
+#X obj 253 83 /;
+#X msg 387 264 \$4 \$2;
+#X obj 254 107 +;
+#X msg 442 265 \$2;
+#X connect 0 0 6 0;
+#X connect 0 0 2 0;
+#X connect 1 0 13 2;
+#X connect 2 0 12 0;
+#X connect 3 0 13 0;
+#X connect 5 0 13 1;
+#X connect 6 0 13 1;
+#X connect 8 0 19 0;
+#X connect 10 0 14 2;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 12 0 23 0;
+#X connect 12 0 25 0;
+#X connect 13 0 14 0;
+#X connect 14 0 4 0;
+#X connect 15 0 17 0;
+#X connect 16 0 17 0;
+#X connect 17 1 13 1;
+#X connect 17 2 14 1;
+#X connect 17 3 12 0;
+#X connect 17 4 18 0;
+#X connect 17 4 19 1;
+#X connect 17 5 18 1;
+#X connect 18 0 22 1;
+#X connect 19 0 20 0;
+#X connect 20 0 22 0;
+#X connect 21 0 20 1;
+#X connect 22 0 24 0;
+#X connect 23 0 21 0;
+#X connect 24 0 1 0;
+#X connect 25 0 24 1;
diff --git a/externals/gridflow/abstractions/#edit_polygon.pd b/externals/gridflow/abstractions/#edit_polygon.pd
new file mode 100644
index 00000000..812a3952
--- /dev/null
+++ b/externals/gridflow/abstractions/#edit_polygon.pd
@@ -0,0 +1,66 @@
+#N canvas 210 217 686 442 10;
+#X obj 33 38 inlet;
+#X obj 33 398 outlet;
+#X obj 33 255 #draw_polygon \$1;
+#X obj 597 412 outlet attr;
+#X msg 41 208 op \$1;
+#X obj 41 170 loadbang;
+#X obj 95 232 inlet;
+#X obj 165 189 inlet;
+#X obj 41 189 args op color pos;
+#X obj 33 57 route2 grid position;
+#X obj 100 76 #mouse \, \, \, \,;
+#X obj 396 372 #transpose;
+#X obj 153 244 #store;
+#X obj 140 211 t a a;
+#X obj 123 106 t a;
+#X obj 206 105 print;
+#X obj 396 353 #outer + (-12 12);
+#X obj 284 97 # sqrt;
+#X obj 376 210 #fold |;
+#X obj 283 157 #grade;
+#X obj 284 178 #print GR;
+#X obj 361 153 #print DIST;
+#X obj 376 229 #export;
+#X obj 376 191 # < 16;
+#X obj 63 372 #draw_rect put (3 # 255 0 0) (2 2 #) \, outline 1;
+#X obj 33 279 shunt 2;
+#X obj 284 78 #inner \, op sq-;
+#X obj 386 78 #transpose;
+#X connect 0 0 9 0;
+#X connect 2 0 25 0;
+#X connect 4 0 2 0;
+#X connect 5 0 8 0;
+#X connect 6 0 2 1;
+#X connect 7 0 13 0;
+#X connect 8 0 4 0;
+#X connect 8 1 2 1;
+#X connect 8 2 13 0;
+#X connect 9 0 2 0;
+#X connect 9 1 10 0;
+#X connect 9 2 1 0;
+#X connect 10 0 14 0;
+#X connect 10 1 14 0;
+#X connect 10 2 14 0;
+#X connect 10 3 14 0;
+#X connect 11 0 24 2;
+#X connect 12 0 2 2;
+#X connect 13 0 2 2;
+#X connect 13 1 12 1;
+#X connect 13 1 27 0;
+#X connect 14 0 15 0;
+#X connect 14 0 16 0;
+#X connect 14 0 26 0;
+#X connect 16 0 11 0;
+#X connect 17 0 19 0;
+#X connect 17 0 21 0;
+#X connect 17 0 23 0;
+#X connect 18 0 22 0;
+#X connect 19 0 20 0;
+#X connect 22 0 25 1;
+#X connect 23 0 18 0;
+#X connect 24 0 1 0;
+#X connect 25 0 1 0;
+#X connect 25 1 24 0;
+#X connect 26 0 17 0;
+#X connect 27 0 26 1;
diff --git a/externals/gridflow/abstractions/#extract_diagonal.pd b/externals/gridflow/abstractions/#extract_diagonal.pd
new file mode 100644
index 00000000..c40db2ef
--- /dev/null
+++ b/externals/gridflow/abstractions/#extract_diagonal.pd
@@ -0,0 +1,22 @@
+#N canvas 534 165 450 300 10;
+#X obj 19 20 inlet matrix;
+#X obj 19 206 outlet diagonal_vector;
+#X obj 85 39 #dim;
+#X obj 19 152 #store;
+#X obj 19 39 t a a;
+#X obj 19 58 #finished;
+#X obj 19 103 #for 0 0 1;
+#X obj 85 58 #to_list;
+#X msg 85 77 \$1;
+#X obj 19 122 #outer + (0 0);
+#X connect 0 0 4 0;
+#X connect 2 0 7 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 4 1 2 0;
+#X connect 4 1 3 1;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 1;
+#X connect 9 0 3 0;
diff --git a/externals/gridflow/abstractions/#fade.pd b/externals/gridflow/abstractions/#fade.pd
new file mode 100644
index 00000000..2ed4ba01
--- /dev/null
+++ b/externals/gridflow/abstractions/#fade.pd
@@ -0,0 +1,37 @@
+#N canvas 398 352 418 256 10;
+#X obj 21 65 inlet;
+#X obj 21 233 outlet;
+#X obj 21 147 # +;
+#X obj 37 128 # *;
+#X obj 190 88 loadbang;
+#X obj 156 64 inlet;
+#X text 20 7 new = (x-1)/x of old input + 1/x of new input;
+#X obj 53 109 # - 1;
+#X text 198 65 select fade rate;
+#X text 61 65 input;
+#X text 70 236 output;
+#X obj 21 166 # +;
+#X obj 46 166 # / 2;
+#X obj 156 86 t a;
+#X text 19 21 now rounds to closest;
+#X obj 21 187 # *>>8;
+#X obj 70 188 # inv* 256;
+#X obj 21 213 t a a;
+#X text 19 34 also faster (uses *>>8 instead of /);
+#X obj 190 107 args (slope a 1);
+#X connect 0 0 2 0;
+#X connect 2 0 11 0;
+#X connect 3 0 2 1;
+#X connect 4 0 19 0;
+#X connect 5 0 13 0;
+#X connect 7 0 3 1;
+#X connect 11 0 15 0;
+#X connect 12 0 11 1;
+#X connect 13 0 12 0;
+#X connect 13 0 7 0;
+#X connect 13 0 16 0;
+#X connect 15 0 17 0;
+#X connect 16 0 15 1;
+#X connect 17 0 1 0;
+#X connect 17 1 3 0;
+#X connect 19 0 13 0;
diff --git a/externals/gridflow/abstractions/#fade_lin.pd b/externals/gridflow/abstractions/#fade_lin.pd
new file mode 100644
index 00000000..22054260
--- /dev/null
+++ b/externals/gridflow/abstractions/#fade_lin.pd
@@ -0,0 +1,29 @@
+#N canvas 614 446 450 300 10;
+#X obj 68 16 inlet;
+#X obj 92 146 outlet;
+#X obj 95 61 # -;
+#X obj 155 16 inlet;
+#X obj 65 123 # +;
+#X obj 95 124 t a;
+#X obj 155 36 f \$1;
+#X obj 140 101 # inv+ 0;
+#X obj 296 38 loadbang;
+#X obj 78 101 # max -1;
+#X obj 78 81 # min 1;
+#X obj 195 16 inlet;
+#X obj 195 37 f \$2;
+#X connect 0 0 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 4 1;
+#X connect 5 0 1 0;
+#X connect 5 0 2 1;
+#X connect 6 0 10 1;
+#X connect 7 0 9 1;
+#X connect 8 0 6 0;
+#X connect 8 0 12 0;
+#X connect 9 0 4 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 7 0;
diff --git a/externals/gridflow/abstractions/#fastblur.pd b/externals/gridflow/abstractions/#fastblur.pd
new file mode 100644
index 00000000..44edd238
--- /dev/null
+++ b/externals/gridflow/abstractions/#fastblur.pd
@@ -0,0 +1,91 @@
+#N canvas 330 194 632 389 10;
+#X obj 18 129 #border (0 0 0) (0 0 0);
+#X obj 48 226 #convolve (1 1 # 1) \, wrap 0;
+#X obj 96 110 # / 2;
+#X obj 18 55 inlet image;
+#X obj 18 349 outlet image;
+#X obj 196 50 inlet kernelSize;
+#X obj 334 171 # == 0;
+#X obj 65 311 # inv* 65536;
+#X obj 178 31 args kernelSize;
+#X obj 178 12 loadbang;
+#X obj 18 311 # *>>8;
+#X obj 18 330 # >> 8;
+#X obj 177 88 @join 0 (1);
+#X obj 153 311 #fold *;
+#X obj 334 94 #unpack 3;
+#X obj 48 284 #convolve (1 1 # 1) \, wrap 0;
+#X obj 334 133 t b l;
+#X obj 334 152 #for (0) (0) (1);
+#X obj 334 190 # inv+;
+#X obj 457 171 # == 0;
+#X obj 457 133 t b l;
+#X obj 457 152 #for (0) (0) (1);
+#X obj 457 190 # inv+;
+#X obj 18 148 shunt;
+#X obj 18 245 shunt;
+#X obj 457 228 #transpose;
+#X obj 183 129 # / 2;
+#X obj 334 209 @join 0 (1 1 # 1);
+#X obj 457 209 @join 0 (1 1 # 1);
+#X msg 146 44 3 3;
+#X obj 57 245 != 1;
+#X obj 57 148 != 1;
+#X obj 48 265 #scan + \, seed (3 #);
+#X obj 48 207 #scan + \, seed (0 3 #);
+#X msg 199 207 seed ( \$2 3 #);
+#X obj 87 167 #dim;
+#X obj 119 167 #export_list;
+#X obj 48 167 t a a;
+#X obj 182 69 # max (1 1);
+#X obj 96 91 # - 1;
+#X connect 0 0 23 0;
+#X connect 1 0 24 0;
+#X connect 2 0 0 1;
+#X connect 3 0 0 0;
+#X connect 5 0 38 0;
+#X connect 6 0 18 0;
+#X connect 7 0 10 1;
+#X connect 8 0 38 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 11 0 4 0;
+#X connect 12 0 13 0;
+#X connect 12 0 14 0;
+#X connect 12 0 26 0;
+#X connect 12 0 39 0;
+#X connect 13 0 7 0;
+#X connect 14 0 16 0;
+#X connect 14 0 31 0;
+#X connect 14 1 20 0;
+#X connect 14 1 30 0;
+#X connect 15 0 10 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 17 0 6 0;
+#X connect 18 0 27 0;
+#X connect 19 0 22 0;
+#X connect 20 0 21 0;
+#X connect 20 1 21 1;
+#X connect 21 0 19 0;
+#X connect 22 0 28 0;
+#X connect 23 0 24 0;
+#X connect 23 1 37 0;
+#X connect 24 0 10 0;
+#X connect 24 1 32 0;
+#X connect 25 0 15 1;
+#X connect 26 0 0 2;
+#X connect 27 0 1 1;
+#X connect 28 0 25 0;
+#X connect 29 0 12 0;
+#X connect 30 0 24 1;
+#X connect 31 0 23 1;
+#X connect 32 0 15 0;
+#X connect 33 0 1 0;
+#X connect 34 0 33 0;
+#X connect 35 0 36 0;
+#X connect 36 0 34 0;
+#X connect 37 0 33 0;
+#X connect 37 1 35 0;
+#X connect 38 0 12 0;
+#X connect 39 0 2 0;
diff --git a/externals/gridflow/abstractions/#gamma.pd b/externals/gridflow/abstractions/#gamma.pd
new file mode 100644
index 00000000..8963260c
--- /dev/null
+++ b/externals/gridflow/abstractions/#gamma.pd
@@ -0,0 +1,21 @@
+#N canvas 0 0 450 300 10;
+#X obj 27 202 outlet image;
+#X obj 27 22 inlet image;
+#X obj 235 73 loadbang;
+#X obj 235 97 \$1;
+#X obj 263 97 inlet gamma;
+#X obj 235 136 #for 0 256 1;
+#X obj 235 162 # gamma;
+#X obj 27 115 #store;
+#X obj 27 82 #outer ignore (0);
+#X obj 235 117 t b f;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 9 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 1;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
+#X connect 9 0 5 0;
+#X connect 9 1 6 1;
diff --git a/externals/gridflow/abstractions/#greyscale_to_rgb.pd b/externals/gridflow/abstractions/#greyscale_to_rgb.pd
new file mode 100644
index 00000000..47dfdd6e
--- /dev/null
+++ b/externals/gridflow/abstractions/#greyscale_to_rgb.pd
@@ -0,0 +1,6 @@
+#N canvas 550 233 335 174 10;
+#X obj 10 10 inlet;
+#X obj 10 48 outlet;
+#X obj 10 29 #inner (1 3 # 1 1 1);
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
diff --git a/externals/gridflow/abstractions/#hello.pd b/externals/gridflow/abstractions/#hello.pd
new file mode 100644
index 00000000..b094c9ff
--- /dev/null
+++ b/externals/gridflow/abstractions/#hello.pd
@@ -0,0 +1,28 @@
+#N canvas 165 50 305 255 10;
+#X obj -6 38 # / 320;
+#X obj -6 114 # * 255;
+#X obj -6 95 # != 0;
+#X obj -6 57 # inv+ 7;
+#X obj -6 19 # * 7;
+#X obj -6 76 #outer & (2 4 1);
+#X obj -6 -76 inlet;
+#X obj -6 -19 #for (0 0) (0 0) (1 1);
+#X obj -6 -57 t a a;
+#X obj -6 -38 #finished;
+#X obj -6 0 #inner (0 1);
+#X obj 184 -40 #inner (0 1);
+#X obj -6 133 outlet;
+#X connect 0 0 3 0;
+#X connect 1 0 12 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 0 0;
+#X connect 5 0 2 0;
+#X connect 6 0 8 0;
+#X connect 7 0 10 0;
+#X connect 8 0 9 0;
+#X connect 8 1 7 1;
+#X connect 8 1 11 0;
+#X connect 9 0 7 0;
+#X connect 10 0 4 0;
+#X connect 11 0 0 1;
diff --git a/externals/gridflow/abstractions/#hueshift.pd b/externals/gridflow/abstractions/#hueshift.pd
new file mode 100644
index 00000000..028801ea
--- /dev/null
+++ b/externals/gridflow/abstractions/#hueshift.pd
@@ -0,0 +1,31 @@
+#N canvas 581 130 450 278 10;
+#X obj 13 105 inlet;
+#X obj 13 162 outlet;
+#X obj 59 48 #rgb_to_yuv;
+#X obj 59 124 #yuv_to_rgb;
+#X obj 59 67 # - 128;
+#X obj 59 105 # + 128;
+#X obj 171 10 inlet;
+#X obj 59 86 #rotate \, axis 1 2 3;
+#X obj 59 7 loadbang;
+#X obj 171 29 t b f;
+#X obj 212 29 \$1;
+#X obj 212 10 loadbang;
+#X obj 13 124 #inner;
+#X msg 59 29 3 3 # 256 0 0 0;
+#X obj 13 143 # >> 8;
+#X connect 0 0 12 0;
+#X connect 2 0 4 0;
+#X connect 3 0 12 1;
+#X connect 4 0 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 9 0;
+#X connect 7 0 5 0;
+#X connect 8 0 13 0;
+#X connect 9 0 13 0;
+#X connect 9 1 7 1;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 14 0;
+#X connect 13 0 2 0;
+#X connect 14 0 1 0;
diff --git a/externals/gridflow/abstractions/#in.pd b/externals/gridflow/abstractions/#in.pd
new file mode 100644
index 00000000..ce5fad93
--- /dev/null
+++ b/externals/gridflow/abstractions/#in.pd
@@ -0,0 +1,62 @@
+#N canvas 457 271 567 388 10;
+#X obj 19 20 inlet;
+#X obj 19 316 outlet;
+#X obj 163 297 outlet;
+#X obj 333 82 loadbang;
+#X obj 333 101 args *;
+#N canvas 116 23 450 300 \$0-placeholder 0;
+#X obj 0 0 r 1043-in;
+#X obj 0 40 s 1043-out;
+#X obj 0 20 gf.not_open;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X restore 19 239 pd \$0-placeholder;
+#X obj 19 220 s \$0-in;
+#X obj 19 258 r \$0-out;
+#X obj 19 170 route bang;
+#X msg 19 190 bang;
+#X text 53 191 hack.;
+#X obj 333 156 gf.io_generate \$0 in;
+#X msg 342 131 bang;
+#X msg 135 15 open \$1 \, bang \, close;
+#X obj 19 58 list;
+#X obj 113 58 list;
+#X obj 333 175 send39 \$0-placeholder;
+#X obj 172 257 spigot 1;
+#X obj 172 238 route bang;
+#X msg 172 276 rewind \, bang;
+#X obj 19 39 route open close load loop set float;
+#X msg 183 149 seek \$1;
+#X msg 224 184 seek \$1 \, bang;
+#X obj 19 297 route2 grid not_open;
+#X msg 86 316 bang;
+#X connect 0 0 20 0;
+#X connect 3 0 4 0;
+#X connect 4 0 11 0;
+#X connect 4 1 20 0;
+#X connect 7 0 18 0;
+#X connect 7 0 23 0;
+#X connect 8 0 9 0;
+#X connect 8 1 6 0;
+#X connect 9 0 6 0;
+#X connect 11 0 16 0;
+#X connect 12 0 11 0;
+#X connect 13 0 20 0;
+#X connect 14 0 11 0;
+#X connect 15 0 13 0;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 0;
+#X connect 20 1 12 0;
+#X connect 20 2 15 0;
+#X connect 20 3 17 1;
+#X connect 20 4 21 0;
+#X connect 20 5 22 0;
+#X connect 20 6 8 0;
+#X connect 21 0 6 0;
+#X connect 22 0 6 0;
+#X connect 23 0 1 0;
+#X connect 23 1 24 0;
+#X connect 23 2 2 0;
+#X connect 24 0 2 0;
diff --git a/externals/gridflow/abstractions/#line_to_polygon.pd b/externals/gridflow/abstractions/#line_to_polygon.pd
new file mode 100644
index 00000000..e0c9cbd8
--- /dev/null
+++ b/externals/gridflow/abstractions/#line_to_polygon.pd
@@ -0,0 +1,46 @@
+#N canvas 667 260 450 300 10;
+#X obj 45 57 inlet;
+#X obj 45 235 outlet;
+#X obj 170 75 #redim (2);
+#X obj 45 216 # +;
+#X obj 170 94 #rotate 9000;
+#X obj 170 176 # *;
+#X obj 170 199 # /;
+#X obj 170 113 #t;
+#X obj 205 114 # sq-;
+#X obj 205 133 #fold +;
+#X obj 205 152 # sqrt;
+#X obj 297 176 inlet;
+#X obj 265 176 f \$1;
+#X obj 265 157 loadbang;
+#X obj 61 95 #reverse;
+#X obj 45 76 #t;
+#X obj 45 126 @join 0;
+#X obj 172 222 display;
+#X obj 75 216 #outer *;
+#X msg 75 197 -1 -1 1 1;
+#X obj 45 145 t a b;
+#X connect 0 0 15 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 6 0 17 0;
+#X connect 6 0 18 1;
+#X connect 7 0 5 0;
+#X connect 7 1 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 6 1;
+#X connect 11 0 12 0;
+#X connect 12 0 5 1;
+#X connect 13 0 12 0;
+#X connect 14 0 16 1;
+#X connect 15 0 16 0;
+#X connect 15 1 2 0;
+#X connect 15 1 14 0;
+#X connect 16 0 20 0;
+#X connect 18 0 3 1;
+#X connect 19 0 18 0;
+#X connect 20 0 3 0;
+#X connect 20 1 19 0;
diff --git a/externals/gridflow/abstractions/#make_cross.pd b/externals/gridflow/abstractions/#make_cross.pd
new file mode 100644
index 00000000..8ddb41ff
--- /dev/null
+++ b/externals/gridflow/abstractions/#make_cross.pd
@@ -0,0 +1,34 @@
+#N canvas 374 339 450 300 10;
+#X obj 27 247 outlet;
+#X obj 27 25 inlet point;
+#X obj 116 22 inlet size;
+#X obj 27 63 #finished;
+#X obj 27 180 #outer *;
+#X msg 27 161 1 -1;
+#X obj 27 199 #redim (12 2);
+#X obj 27 228 # +;
+#X obj 62 121 # + 1;
+#X obj 27 44 t a a b;
+#X obj 62 102 # * 16;
+#X obj 62 140 # * (6 2 # 1 1 1 1 1 1 -1 1 -1 1 -1 1);
+#X msg 62 83 6 2 # 1 0 0 0 0 1 0 1 0 0 1 0;
+#X obj 127 41 loadbang;
+#X obj 116 102 # || 16;
+#X obj 127 60 f \$1;
+#X connect 1 0 9 0;
+#X connect 2 0 14 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 0 0;
+#X connect 8 0 11 0;
+#X connect 9 0 3 0;
+#X connect 9 1 7 1;
+#X connect 9 2 12 0;
+#X connect 10 0 8 0;
+#X connect 11 0 4 1;
+#X connect 12 0 10 0;
+#X connect 13 0 15 0;
+#X connect 14 0 10 1;
+#X connect 15 0 14 0;
diff --git a/externals/gridflow/abstractions/#meuh.pd b/externals/gridflow/abstractions/#meuh.pd
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/externals/gridflow/abstractions/#meuh.pd
diff --git a/externals/gridflow/abstractions/#moment_polar.pd b/externals/gridflow/abstractions/#moment_polar.pd
new file mode 100644
index 00000000..810cce9d
--- /dev/null
+++ b/externals/gridflow/abstractions/#moment_polar.pd
@@ -0,0 +1,54 @@
+#N canvas 247 203 690 456 10;
+#X obj 21 20 inlet 2nd_moment_matrix;
+#X obj 21 419 outlet angle;
+#X obj 21 208 #grade;
+#X obj 53 88 #transpose;
+#X obj 21 285 #store;
+#X obj 21 189 # inv+ (f #);
+#X text 76 211 sort eigenvectors;
+#X text 76 223 by eigenvalues downwards;
+#X obj 21 266 #redim (1);
+#X obj 21 342 # atan;
+#X obj 21 304 #unpack;
+#X obj 74 304 #pack 1 f;
+#X obj 21 323 #pack 1 f;
+#X text 29 358 angle of (one of the two) longest radius;
+#X text 113 247 but pick only biggest;
+#X text 96 70 eigenvectors (axes of the ellipse);
+#X text 28 370 centidegrees 0..35999;
+#X text 27 148 squareroots of eigenvalues (radiuses of the ellipse)
+;
+#X obj 21 165 #t;
+#X obj 147 296 #store;
+#X text 185 21 (float);
+#X obj 21 132 # sqrt (f #);
+#X obj 21 45 #cast f;
+#X obj 21 396 #export;
+#X obj 21 238 #t;
+#X obj 147 277 #outer + (0);
+#X obj 134 420 outlet radiuses_sorted;
+#X obj 21 69 cv/#SVD;
+#X obj 21 112 #extract_diagonal;
+#X connect 0 0 22 0;
+#X connect 2 0 24 0;
+#X connect 3 0 4 1;
+#X connect 4 0 10 0;
+#X connect 5 0 2 0;
+#X connect 8 0 4 0;
+#X connect 9 0 23 0;
+#X connect 10 0 12 0;
+#X connect 10 1 11 0;
+#X connect 11 0 9 1;
+#X connect 12 0 9 0;
+#X connect 18 0 5 0;
+#X connect 18 1 19 1;
+#X connect 19 0 26 0;
+#X connect 21 0 18 0;
+#X connect 22 0 27 0;
+#X connect 23 0 1 0;
+#X connect 24 0 8 0;
+#X connect 24 1 25 0;
+#X connect 25 0 19 0;
+#X connect 27 0 28 0;
+#X connect 27 1 3 0;
+#X connect 28 0 21 0;
diff --git a/externals/gridflow/abstractions/#motion_detection.pd b/externals/gridflow/abstractions/#motion_detection.pd
new file mode 100644
index 00000000..69daf87a
--- /dev/null
+++ b/externals/gridflow/abstractions/#motion_detection.pd
@@ -0,0 +1,142 @@
+#N canvas 932 467 705 527 10;
+#X obj 53 -47 inlet camera_input;
+#X obj 183 -1 inlet motion_or_presence;
+#X obj 53 420 outlet to_window;
+#X obj 53 130 # max 0;
+#X obj 71 88 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 53 110 # -;
+#X text 107 130 noise reduction (on find-edges only);
+#X obj 108 11 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 128 25 emboss;
+#X text 127 11 hilite;
+#N canvas 372 198 399 273 image 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 53 52 pd image difference;
+#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 t a a;
+#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 175 85 # * (31 15 3);
+#X obj 60 114 # >> (5 4 2);
+#X connect 0 0 1 0;
+#X connect 1 0 9 0;
+#X connect 3 0 1 1;
+#X connect 4 0 2 0;
+#X connect 4 1 8 0;
+#X connect 8 0 1 1;
+#X connect 9 0 4 0;
+#X restore 80 206 pd motion fade;
+#X obj 398 91 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 53 275 shunt 2;
+#X obj 173 298 #centroid;
+#X obj 168 342 #export_list;
+#X obj 163 370 unpack 0 0;
+#N canvas 547 147 477 267 crosshair 0;
+#X obj 12 224 outlet;
+#X obj 12 9 inlet;
+#X msg 21 125 12 2 # \$1 \$2 \$1 \$3 \$2 \$3 \$2 \$4 \$3 \$4 \$3 \$3
+\$4 \$3 \$4 \$2 \$3 \$2 \$3 \$1 \$2 \$1 \$2 \$2;
+#X obj 175 37 #fade 8;
+#X obj 175 18 inlet;
+#X obj 170 60 #finished;
+#X msg 54 95 -8 -1 1 8;
+#X obj 95 169 # + (120 160);
+#X obj 12 205 #draw_polygon + (0 170 0);
+#X connect 1 0 8 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 3 0 7 1;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 2 0;
+#X connect 7 0 8 2;
+#X connect 8 0 0 0;
+#X restore 92 320 pd crosshair;
+#X obj 53 373 t a;
+#X text 422 91 designed to work with "hilite" above;
+#X obj 170 274 #rgb_to_greyscale;
+#X obj 333 278 #fold +;
+#X obj 333 300 #fold +;
+#X obj 333 320 #fold +;
+#X obj 333 340 #export;
+#X obj 333 360 / 100;
+#X obj 398 66 inlet crosshair;
+#X obj 333 418 outlet displaced_pixels;
+#X obj 163 419 outlet;
+#X obj 220 419 outlet;
+#X obj 68 -25 inlet noise_reduction;
+#X obj 53 185 shunt;
+#X obj 111 152 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 301 36 inlet fade;
+#X obj 53 150 t a a;
+#X connect 0 0 10 0;
+#X connect 1 0 10 2;
+#X connect 3 0 34 0;
+#X connect 4 0 5 1;
+#X connect 5 0 3 0;
+#X connect 7 0 10 1;
+#X connect 10 0 5 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 1;
+#X connect 13 0 18 0;
+#X connect 13 1 17 0;
+#X connect 13 1 20 0;
+#X connect 14 0 15 0;
+#X connect 14 0 17 1;
+#X connect 15 0 16 0;
+#X connect 16 0 28 0;
+#X connect 16 1 29 0;
+#X connect 17 0 18 0;
+#X connect 18 0 2 0;
+#X connect 20 0 14 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 25 0 27 0;
+#X connect 26 0 12 0;
+#X connect 30 0 4 0;
+#X connect 31 0 13 0;
+#X connect 31 1 11 0;
+#X connect 32 0 31 1;
+#X connect 33 0 32 0;
+#X connect 34 0 31 0;
+#X connect 34 1 21 0;
diff --git a/externals/gridflow/abstractions/#mouse.pd b/externals/gridflow/abstractions/#mouse.pd
new file mode 100644
index 00000000..d94f4971
--- /dev/null
+++ b/externals/gridflow/abstractions/#mouse.pd
@@ -0,0 +1,93 @@
+#N canvas 313 211 690 428 10;
+#X obj 23 103 listsublist 0 2;
+#X obj 48 64 t a a;
+#X obj 126 181 t a a;
+#X text 153 149 is button pressed?;
+#X obj 129 209 -;
+#X obj 125 150 > 0;
+#X obj 183 86 listelement 2;
+#X obj 120 377 outlet;
+#X text 161 183 1=click \, 0=nochange \, -1=unclick;
+#X text 157 36 list (y \, x \, buttons);
+#X obj 49 8 inlet;
+#X obj 48 34 route position;
+#X text 93 8 compatible with output of [#out window];
+#X obj 142 246 inv+ 1;
+#X obj 98 397 outlet;
+#X obj 142 356 outlet;
+#X text 431 330 three toggle-compatible outputs;
+#X text 432 346 and one +1/0/-1 for the wheel;
+#X text 147 397 click;
+#X text 193 357 unclick;
+#X obj 468 60 listelement 2;
+#X obj 430 301 outlet;
+#X obj 480 301 outlet;
+#X obj 530 301 outlet;
+#X obj 580 301 outlet;
+#X obj 430 273 change;
+#X obj 108 63 t a a;
+#X obj 469 115 # & 1;
+#X obj 469 173 unpack 0 0 0 0 0;
+#X obj 549 241 inv+;
+#X obj 480 274 change;
+#X obj 530 275 change;
+#X obj 580 276 change;
+#X obj 469 145 #export_list;
+#X obj 163 335 outlet;
+#X text 172 378 drag;
+#X text 214 337 move;
+#X obj 163 275 inv+ 1;
+#X obj 389 16 inlet;
+#X text 433 9 list of 3 toggles;
+#X text 434 23 which buttons should be active;
+#X obj 345 107 #fold +;
+#X obj 345 131 #export;
+#X obj 125 126 &;
+#X text 151 126 check only wanted buttons;
+#X obj 305 33 loadbang;
+#X msg 305 57 1 1 1;
+#X obj 98 269 shunt 3;
+#X obj 120 302 shunt 2;
+#X obj 347 81 # << (8 9 10);
+#X obj 468 86 #outer >> (8 9 10 11 12);
+#X connect 0 0 47 0;
+#X connect 1 0 0 0;
+#X connect 1 1 6 0;
+#X connect 2 0 4 1;
+#X connect 2 1 4 0;
+#X connect 2 1 37 0;
+#X connect 4 0 13 0;
+#X connect 5 0 2 0;
+#X connect 6 0 43 0;
+#X connect 10 0 11 0;
+#X connect 11 0 26 0;
+#X connect 13 0 47 1;
+#X connect 20 0 50 0;
+#X connect 25 0 21 0;
+#X connect 26 0 1 0;
+#X connect 26 1 20 0;
+#X connect 27 0 33 0;
+#X connect 28 0 25 0;
+#X connect 28 1 30 0;
+#X connect 28 2 31 0;
+#X connect 28 3 29 0;
+#X connect 28 4 29 1;
+#X connect 29 0 32 0;
+#X connect 30 0 22 0;
+#X connect 31 0 23 0;
+#X connect 32 0 24 0;
+#X connect 33 0 28 0;
+#X connect 37 0 48 1;
+#X connect 38 0 49 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 1;
+#X connect 43 0 5 0;
+#X connect 45 0 46 0;
+#X connect 46 0 49 0;
+#X connect 47 0 14 0;
+#X connect 47 1 48 0;
+#X connect 47 2 15 0;
+#X connect 48 0 7 0;
+#X connect 48 1 34 0;
+#X connect 49 0 41 0;
+#X connect 50 0 27 0;
diff --git a/externals/gridflow/abstractions/#out.pd b/externals/gridflow/abstractions/#out.pd
new file mode 100644
index 00000000..c1ae8b2f
--- /dev/null
+++ b/externals/gridflow/abstractions/#out.pd
@@ -0,0 +1,56 @@
+#N canvas 453 347 571 342 10;
+#X obj 19 70 inlet;
+#X obj 235 227 outlet;
+#X obj 350 9 loadbang;
+#X obj 350 28 args *;
+#N canvas 116 23 450 300 \$0-placeholder 0;
+#X obj 0 0 r 1196-in;
+#X obj 0 20 bang;
+#X obj 0 40 gf.error not open;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X restore 235 189 pd \$0-placeholder;
+#X obj 235 170 s \$0-in;
+#X obj 235 208 r \$0-out;
+#X obj 235 132 route bang;
+#X msg 235 151 bang;
+#X text 272 153 hack.;
+#X obj 19 89 route open close autoclose;
+#X obj 205 89 t a a;
+#X obj 19 273 spigot;
+#X obj 58 246 route bang;
+#X msg 65 273 1;
+#X obj 48 219 #finished;
+#X obj 48 194 route2 grid list float;
+#X msg 19 292 close;
+#X obj 350 70 gf.io_generate \$0 out;
+#X msg 308 26 bang;
+#X obj 350 89 send39 \$0-placeholder;
+#X msg 110 23 close;
+#X connect 0 0 10 0;
+#X connect 2 0 3 0;
+#X connect 3 0 18 0;
+#X connect 3 1 10 0;
+#X connect 6 0 1 0;
+#X connect 7 0 8 0;
+#X connect 7 1 5 0;
+#X connect 8 0 5 0;
+#X connect 10 0 18 0;
+#X connect 10 1 19 0;
+#X connect 10 2 13 0;
+#X connect 10 3 11 0;
+#X connect 11 0 16 0;
+#X connect 11 1 7 0;
+#X connect 12 0 17 0;
+#X connect 13 0 14 0;
+#X connect 13 1 12 1;
+#X connect 14 0 12 1;
+#X connect 15 0 12 0;
+#X connect 15 0 1 0;
+#X connect 16 0 15 0;
+#X connect 16 1 15 0;
+#X connect 16 2 15 0;
+#X connect 17 0 10 0;
+#X connect 18 0 20 0;
+#X connect 19 0 18 0;
+#X connect 21 0 10 0;
diff --git a/externals/gridflow/abstractions/#polygon_area.pd b/externals/gridflow/abstractions/#polygon_area.pd
new file mode 100644
index 00000000..55daf54f
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_area.pd
@@ -0,0 +1,19 @@
+#N canvas 44 398 450 214 10;
+#X obj 24 25 inlet;
+#X obj 24 63 #convolve (2 1 # 0 1);
+#X obj 24 82 #convolve (1 2 # 0 1);
+#X obj 24 101 # *;
+#X obj 24 44 #t;
+#X obj 24 120 #fold inv+;
+#X obj 24 139 #fold +;
+#X obj 24 177 outlet;
+#X obj 24 158 # / 2;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 4 1 3 1;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 8 0 7 0;
diff --git a/externals/gridflow/abstractions/#polygon_comparator.pd b/externals/gridflow/abstractions/#polygon_comparator.pd
new file mode 100644
index 00000000..32da8e59
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_comparator.pd
@@ -0,0 +1,99 @@
+#N canvas 415 302 865 491 10;
+#X obj 13 13 inlet left;
+#X obj 183 22 inlet right;
+#X obj 13 32 route2 precision;
+#X obj 33 383 outlet result;
+#X obj 183 109 #polygon_radial_map;
+#X obj 183 225 #fft;
+#X obj 33 225 #fft;
+#X obj 33 263 #fft \, sign -1;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-table 256 float 2;
+#X coords 0 1 256 0 200 140 1;
+#X restore 405 42 graph;
+#X obj 33 109 #polygon_radial_map;
+#X obj 33 168 #redim (1 256 1);
+#X obj 183 168 #redim (1 256 1);
+#X obj 33 206 #cast f;
+#X obj 33 187 #outer * (1 0);
+#X obj 183 187 #outer * (1 0);
+#X obj 183 206 #cast f;
+#X obj 33 329 #inner (2 f # 1 0) \, seed (f # 0);
+#X obj 33 348 #redim (256);
+#X obj 33 244 # C.*conj (2 f # 1 0);
+#X obj 33 128 #t;
+#X obj 183 128 #t;
+#X obj 208 129 # sq-;
+#X obj 247 129 #fold +;
+#X obj 58 129 # sq-;
+#X obj 97 129 #fold +;
+#X obj 224 237 # *;
+#X obj 247 148 #cast f;
+#X obj 97 148 #cast f;
+#X obj 224 256 # sqrt (f #);
+#X obj 33 301 # / (f # 1);
+#X obj 33 282 # / (f # 256);
+#X obj 183 59 #t;
+#X obj 208 59 #polygon_moment;
+#X obj 183 80 # -;
+#X obj 33 58 #t;
+#X obj 58 58 #polygon_moment;
+#X obj 33 79 # -;
+#X obj 330 437 f;
+#X obj 216 456 tabwrite \$0-table;
+#X obj 216 420 t f b;
+#X msg 346 418 0;
+#X obj 355 437 + 1;
+#X obj 216 373 t a b;
+#X obj 216 401 #to_float;
+#X connect 0 0 2 0;
+#X connect 1 0 31 0;
+#X connect 2 0 4 0;
+#X connect 2 0 9 0;
+#X connect 2 1 34 0;
+#X connect 4 0 20 0;
+#X connect 5 0 18 1;
+#X connect 6 0 18 0;
+#X connect 7 0 30 0;
+#X connect 9 0 19 0;
+#X connect 10 0 13 0;
+#X connect 11 0 14 0;
+#X connect 12 0 6 0;
+#X connect 13 0 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 5 0;
+#X connect 16 0 17 0;
+#X connect 17 0 3 0;
+#X connect 17 0 42 0;
+#X connect 18 0 7 0;
+#X connect 19 0 10 0;
+#X connect 19 1 23 0;
+#X connect 20 0 11 0;
+#X connect 20 1 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 26 0;
+#X connect 23 0 24 0;
+#X connect 24 0 27 0;
+#X connect 25 0 28 0;
+#X connect 26 0 25 1;
+#X connect 27 0 25 0;
+#X connect 28 0 29 1;
+#X connect 29 0 16 0;
+#X connect 30 0 29 0;
+#X connect 31 0 33 0;
+#X connect 31 1 32 0;
+#X connect 32 0 33 1;
+#X connect 33 0 4 0;
+#X connect 34 0 36 0;
+#X connect 34 1 35 0;
+#X connect 35 0 36 1;
+#X connect 36 0 9 0;
+#X connect 37 0 41 0;
+#X connect 37 0 38 1;
+#X connect 39 0 38 0;
+#X connect 39 1 37 0;
+#X connect 40 0 37 1;
+#X connect 41 0 37 1;
+#X connect 42 0 43 0;
+#X connect 42 1 40 0;
+#X connect 43 0 39 0;
diff --git a/externals/gridflow/abstractions/#polygon_each_edge.pd b/externals/gridflow/abstractions/#polygon_each_edge.pd
new file mode 100644
index 00000000..c89adb23
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_each_edge.pd
@@ -0,0 +1,24 @@
+#N canvas 574 358 450 300 10;
+#X obj 20 21 inlet;
+#X obj 19 214 outlet;
+#X obj 19 195 #store;
+#X obj 20 40 t a a;
+#X obj 20 59 #finished;
+#X obj 102 22 #dim;
+#X obj 102 41 #export_list;
+#X msg 102 60 \$1;
+#X obj 19 156 #outer + (2 1 # 0 1);
+#X obj 20 97 #for 0 0 1;
+#X obj 19 120 #export;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 3 1 2 1;
+#X connect 3 1 5 0;
+#X connect 4 0 9 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 9 1;
+#X connect 8 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
diff --git a/externals/gridflow/abstractions/#polygon_moment.pd b/externals/gridflow/abstractions/#polygon_moment.pd
new file mode 100644
index 00000000..7b3ad84b
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_moment.pd
@@ -0,0 +1,65 @@
+#N canvas 127 192 736 402 10;
+#X obj 24 25 inlet;
+#X obj 24 182 # *;
+#X obj 24 144 #t;
+#X obj 24 201 #fold inv+;
+#X obj 24 349 outlet;
+#X obj 24 163 #convolve (2 2 # 0 0 0 1);
+#X obj 126 221 #convolve (2 1 # 1 1);
+#X obj 24 249 # *;
+#X obj 24 220 #outer + (2 #);
+#X obj 24 268 #fold + \, seed (2 #);
+#X obj 24 291 # /;
+#X obj 93 249 #polygon_area;
+#X obj 24 310 # / 6;
+#X obj 270 32 inlet;
+#X obj 24 49 # -;
+#X obj 24 68 shunt 3 \$1;
+#X obj 294 182 # *;
+#X obj 294 144 #t;
+#X obj 294 201 #fold inv+;
+#X obj 294 163 #convolve (2 2 # 0 0 0 1);
+#X obj 410 221 #convolve (2 1 # 1 1);
+#X obj 294 249 # *;
+#X obj 294 291 # /;
+#X obj 363 249 #polygon_area;
+#X obj 294 310 # / 6;
+#X obj 294 220 #outer + (2 2 #);
+#X text 416 208 what should the change to this box be?;
+#X text 368 117 Second order (covariance matrix);
+#X text 65 122 First order (centroid);
+#X obj 294 268 #fold + \, seed (2 2 #);
+#X text 411 134 NOT WORKING ?;
+#X connect 0 0 14 0;
+#X connect 1 0 3 0;
+#X connect 2 0 5 0;
+#X connect 2 1 1 1;
+#X connect 2 1 6 0;
+#X connect 2 1 11 0;
+#X connect 3 0 8 0;
+#X connect 5 0 1 0;
+#X connect 6 0 7 1;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 1;
+#X connect 12 0 4 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 1 2 0;
+#X connect 15 2 17 0;
+#X connect 16 0 18 0;
+#X connect 17 0 19 0;
+#X connect 17 1 16 1;
+#X connect 17 1 20 0;
+#X connect 17 1 23 0;
+#X connect 18 0 25 0;
+#X connect 19 0 16 0;
+#X connect 20 0 21 1;
+#X connect 21 0 29 0;
+#X connect 22 0 24 0;
+#X connect 23 0 22 1;
+#X connect 24 0 4 0;
+#X connect 25 0 21 0;
+#X connect 29 0 22 0;
diff --git a/externals/gridflow/abstractions/#polygon_perimetre.pd b/externals/gridflow/abstractions/#polygon_perimetre.pd
new file mode 100644
index 00000000..f23ef312
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_perimetre.pd
@@ -0,0 +1,18 @@
+#N canvas 0 0 450 300 10;
+#X obj 37 39 inlet;
+#X obj 37 191 outlet;
+#X obj 37 58 #outer ignore (0);
+#X obj 37 96 #fold put;
+#X obj 37 115 # sq-;
+#X obj 37 134 #fold +;
+#X obj 37 153 # sqrt;
+#X obj 37 172 #fold +;
+#X obj 37 77 #convolve (2 1 # -1 1);
+#X connect 0 0 2 0;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X connect 8 0 3 0;
diff --git a/externals/gridflow/abstractions/#polygon_radial_map.pd b/externals/gridflow/abstractions/#polygon_radial_map.pd
new file mode 100644
index 00000000..ded6c88d
--- /dev/null
+++ b/externals/gridflow/abstractions/#polygon_radial_map.pd
@@ -0,0 +1,184 @@
+#N canvas 257 49 711 558 10;
+#X obj 10 15 inlet polygon;
+#X obj 22 92 f;
+#X obj 22 54 loadbang;
+#X obj 229 200 #polygon_each_edge;
+#X obj 229 219 #t;
+#X obj 47 92 s \$0-precision;
+#X obj 281 242 #unpack;
+#X obj 281 261 t f f;
+#X obj 281 366 f;
+#X obj 281 347 until;
+#X obj 205 325 sel;
+#X obj 205 344 s \$0-stop;
+#X obj 311 328 r \$0-stop;
+#X obj 331 366 mod;
+#X obj 356 366 r \$0-precision;
+#X obj 306 366 +;
+#X msg 281 328 666;
+#X obj 2 331 outlet radial_map;
+#X obj 260 437 tabread \$0-table;
+#X obj 221 493 pack;
+#X obj 221 512 s \$0-table;
+#X obj 253 493 +;
+#N canvas 0 0 450 238 directions-of-points 0;
+#X obj 20 25 inlet;
+#X obj 20 96 # atan;
+#X obj 20 115 # *;
+#X obj 45 115 r \$0-precision;
+#X obj 20 134 # / 36000;
+#X obj 45 153 r \$0-precision;
+#X obj 20 153 # %;
+#N canvas 480 317 313 169 #split 0;
+#X obj 34 28 inlet;
+#X obj 34 123 outlet;
+#X obj 50 85 outlet;
+#X obj 34 47 #t;
+#X text 58 48 split;
+#X obj 50 66 #inner (0 1);
+#X obj 34 104 #inner (1 0);
+#X connect 0 0 3 0;
+#X connect 3 0 6 0;
+#X connect 3 1 5 0;
+#X connect 5 0 2 0;
+#X connect 6 0 1 0;
+#X restore 20 44 pd #split 2;
+#X obj 20 172 outlet;
+#X connect 0 0 7 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 1;
+#X connect 4 0 6 0;
+#X connect 5 0 6 1;
+#X connect 6 0 8 0;
+#X connect 7 0 1 0;
+#X connect 7 1 1 1;
+#X restore 281 223 pd directions-of-points;
+#N canvas 642 350 344 210 closest-turn 0;
+#X obj 27 23 inlet;
+#X obj 52 68 r \$0-precision;
+#X obj 27 144 outlet;
+#X obj 27 49 -;
+#X obj 27 68 mod;
+#X obj 52 87 / 2;
+#X obj 77 23 inlet;
+#X obj 27 106 * 2;
+#X obj 27 125 - 1;
+#X obj 27 87 >;
+#X text 25 3 figure out clockwise vs counterclockwise;
+#X connect 0 0 3 0;
+#X connect 1 0 4 1;
+#X connect 1 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 9 0;
+#X connect 5 0 9 1;
+#X connect 6 0 3 1;
+#X connect 7 0 8 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X restore 326 268 pd closest-turn;
+#X obj 260 414 /;
+#X obj 285 414 r \$0-precision;
+#N canvas 637 343 450 300 find-intersection 0;
+#X obj 21 20 inlet edge;
+#X obj 110 21 inlet direction;
+#X obj 21 259 outlet;
+#X text 109 4 float;
+#X text 20 4 2x2 matrix;
+#X obj 21 63 #rotate;
+#X obj 21 128 #ravel;
+#X obj 21 147 #unpack 4;
+#X obj 110 40 * -1;
+#X obj 21 240 expr $f2 - $f1*($f4-$f2)/($f3-$f1);
+#X connect 0 0 5 0;
+#X connect 1 0 8 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 9 0;
+#X connect 7 1 9 1;
+#X connect 7 2 9 2;
+#X connect 7 3 9 3;
+#X connect 8 0 5 1;
+#X connect 9 0 2 0;
+#X restore 77 457 pd find-intersection;
+#X obj 77 438 #store;
+#X obj 260 395 * 36000;
+#X obj 22 130 s \$0-table;
+#X msg 22 111 resize \$1;
+#X obj 77 409 t b f;
+#X obj 221 395 t f f;
+#X obj 221 437 t f f;
+#X obj 2 255 for 0 0 1;
+#X obj 31 236 r \$0-precision;
+#X obj 83 293 r \$0-precision;
+#X obj 2 312 #import (1);
+#X msg 83 312 list \$1;
+#X obj 260 160 s \$0-table;
+#X msg 260 141 const 0;
+#X obj 2 274 tabread \$0-table;
+#X obj 207 141 t a a b;
+#X obj 13 181 #finished;
+#X msg 22 73 256;
+#N canvas 0 0 450 300 graph4 0;
+#X array \$0-table 256 float 2;
+#X coords 0 100 256 0 200 140 1;
+#X restore 475 29 graph;
+#X obj 75 509 *;
+#X obj 10 34 route precision;
+#X connect 0 0 47 0;
+#X connect 1 0 30 0;
+#X connect 1 0 5 0;
+#X connect 2 0 44 0;
+#X connect 3 0 4 0;
+#X connect 4 0 22 0;
+#X connect 4 1 27 1;
+#X connect 6 0 7 0;
+#X connect 6 1 10 1;
+#X connect 6 1 23 1;
+#X connect 7 0 16 0;
+#X connect 7 1 8 1;
+#X connect 7 1 23 0;
+#X connect 8 0 10 0;
+#X connect 8 0 15 0;
+#X connect 9 0 8 0;
+#X connect 10 0 11 0;
+#X connect 10 1 32 0;
+#X connect 12 0 9 1;
+#X connect 13 0 8 1;
+#X connect 14 0 13 1;
+#X connect 15 0 13 0;
+#X connect 16 0 9 0;
+#X connect 18 0 21 0;
+#X connect 19 0 20 0;
+#X connect 21 0 19 1;
+#X connect 22 0 6 0;
+#X connect 23 0 15 1;
+#X connect 23 0 46 1;
+#X connect 24 0 31 0;
+#X connect 25 0 24 1;
+#X connect 26 0 46 0;
+#X connect 27 0 26 0;
+#X connect 28 0 24 0;
+#X connect 30 0 29 0;
+#X connect 31 0 27 0;
+#X connect 31 1 26 1;
+#X connect 32 0 33 0;
+#X connect 32 1 28 0;
+#X connect 33 0 19 0;
+#X connect 33 1 18 0;
+#X connect 34 0 41 0;
+#X connect 35 0 34 1;
+#X connect 36 0 38 0;
+#X connect 37 0 17 0;
+#X connect 38 0 37 1;
+#X connect 40 0 39 0;
+#X connect 41 0 37 0;
+#X connect 42 0 43 0;
+#X connect 42 1 3 0;
+#X connect 42 2 40 0;
+#X connect 43 0 34 0;
+#X connect 44 0 1 0;
+#X connect 46 0 21 1;
+#X connect 47 0 1 0;
+#X connect 47 1 42 0;
+#X coords 0 0 1 1 85 60 0;
diff --git a/externals/gridflow/abstractions/#posterize.pd b/externals/gridflow/abstractions/#posterize.pd
new file mode 100644
index 00000000..ead8fef2
--- /dev/null
+++ b/externals/gridflow/abstractions/#posterize.pd
@@ -0,0 +1,21 @@
+#N canvas 0 0 450 300 10;
+#X obj 13 11 inlet;
+#X obj 13 31 # *>>8;
+#X obj 13 51 # * 255;
+#X obj 13 71 # /;
+#X obj 92 49 # - 1;
+#X obj 13 91 outlet;
+#X obj 92 11 inlet;
+#X obj 150 23 loadbang;
+#X obj 150 42 args n;
+#X obj 92 30 t a;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 1;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 1;
+#X connect 9 0 4 0;
diff --git a/externals/gridflow/abstractions/#ravel.pd b/externals/gridflow/abstractions/#ravel.pd
new file mode 100644
index 00000000..35e7b775
--- /dev/null
+++ b/externals/gridflow/abstractions/#ravel.pd
@@ -0,0 +1,15 @@
+#N canvas 0 0 450 195 10;
+#X obj 14 15 inlet;
+#X obj 44 53 #dim;
+#X obj 14 34 t a a;
+#X obj 14 143 outlet;
+#X obj 44 91 #redim (1);
+#X obj 44 72 #fold *;
+#X obj 14 124 #redim (0);
+#X connect 0 0 2 0;
+#X connect 1 0 5 0;
+#X connect 2 0 6 0;
+#X connect 2 1 1 0;
+#X connect 4 0 6 1;
+#X connect 5 0 4 0;
+#X connect 6 0 3 0;
diff --git a/externals/gridflow/abstractions/#record.pd b/externals/gridflow/abstractions/#record.pd
new file mode 100644
index 00000000..101ae103
--- /dev/null
+++ b/externals/gridflow/abstractions/#record.pd
@@ -0,0 +1,72 @@
+#N canvas 1036 267 571 412 10;
+#X obj 235 302 #out;
+#X msg 235 190 close;
+#X obj 75 41 inlet filename;
+#X obj 205 44 inlet close;
+#X obj -32 41 inlet videoin;
+#X msg 75 100 open \$1;
+#X obj 75 77 savepanel;
+#X obj 75 124 print;
+#X obj 61 231 spigot;
+#X obj 123 194 inlet start;
+#X msg 123 218 1;
+#X msg 124 240 0;
+#X obj 205 106 t b b;
+#X obj 324 101 vradio 15 1 0 4 \$0-framerate \$0-framerate select_framerate
+0 -6 0 12 -241291 -258699 -1 2;
+#X text 350 99 10 fps;
+#X text 350 116 24 fps;
+#X text 350 132 25 fps;
+#X text 350 149 30 fps;
+#N canvas 691 426 273 271 framerate 0;
+#X obj 95 37 r \$0-framerate;
+#X floatatom 103 67 5 0 0 0 - - -;
+#X obj 107 225 outlet;
+#X msg 54 153 10;
+#X msg 85 153 24;
+#X msg 120 152 25;
+#X msg 153 152 30;
+#X msg 107 198 framerate \$1;
+#X obj 54 114 sel 0;
+#X obj 89 114 sel 1;
+#X obj 124 115 sel 2;
+#X obj 159 114 sel 3;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 1 0 9 0;
+#X connect 1 0 10 0;
+#X connect 1 0 11 0;
+#X connect 3 0 7 0;
+#X connect 4 0 7 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 0 3 0;
+#X connect 9 0 4 0;
+#X connect 10 0 5 0;
+#X connect 11 0 6 0;
+#X restore 283 278 pd framerate;
+#X obj 75 149 s openfilename;
+#X msg 283 247 framerate 10;
+#X obj 284 305 r openfilename;
+#X text 108 335 I'd like to use [#peephole] to monitor what is being
+recorded but it's too buggy at the moment.;
+#X msg 283 221 codec jpeg;
+#X text 343 178 the framerate option;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 12 0;
+#X connect 4 0 8 0;
+#X connect 5 0 7 0;
+#X connect 5 0 19 0;
+#X connect 6 0 5 0;
+#X connect 8 0 0 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 1;
+#X connect 11 0 8 1;
+#X connect 12 0 11 0;
+#X connect 12 1 1 0;
+#X connect 18 0 0 0;
+#X connect 20 0 0 0;
+#X connect 21 0 0 0;
+#X connect 23 0 0 0;
diff --git a/externals/gridflow/abstractions/#reinterval.pd b/externals/gridflow/abstractions/#reinterval.pd
new file mode 100644
index 00000000..ba8e6481
--- /dev/null
+++ b/externals/gridflow/abstractions/#reinterval.pd
@@ -0,0 +1,34 @@
+#N canvas 62 179 531 300 10;
+#X obj 15 18 inlet hot;
+#X obj 82 18 inlet oldstart;
+#X obj 184 18 inlet oldend;
+#X obj 272 18 inlet newstart;
+#X obj 374 18 inlet newend;
+#X obj 45 56 #store;
+#X obj 235 54 #store;
+#X obj 15 37 t a b;
+#X obj 45 75 # inv+;
+#X obj 235 73 # inv+;
+#X obj 15 139 # -;
+#X obj 15 160 # *;
+#X obj 15 179 # /;
+#X obj 15 198 # +;
+#X obj 15 217 outlet;
+#X connect 0 0 7 0;
+#X connect 1 0 5 1;
+#X connect 1 0 10 1;
+#X connect 2 0 8 1;
+#X connect 3 0 6 1;
+#X connect 3 0 13 1;
+#X connect 4 0 9 1;
+#X connect 5 0 8 0;
+#X connect 6 0 9 0;
+#X connect 7 0 10 0;
+#X connect 7 1 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 12 1;
+#X connect 9 0 11 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
diff --git a/externals/gridflow/abstractions/#remap_image.pd b/externals/gridflow/abstractions/#remap_image.pd
new file mode 100644
index 00000000..fb560777
--- /dev/null
+++ b/externals/gridflow/abstractions/#remap_image.pd
@@ -0,0 +1,23 @@
+#N canvas 0 0 450 300 10;
+#X obj 18 13 inlet;
+#X obj 168 163 inlet;
+#X obj 18 160 #store;
+#X obj 92 73 #dim;
+#X obj 18 33 t a a;
+#X obj 18 110 #finished;
+#X obj 18 191 outlet;
+#X obj 68 191 outlet;
+#X obj 18 130 #for (0 0) (0 0) (1 1);
+#X obj 92 92 #export_list;
+#X msg 92 111 \$1 \$2;
+#X connect 0 0 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 6 0;
+#X connect 3 0 9 0;
+#X connect 4 0 5 0;
+#X connect 4 1 3 0;
+#X connect 4 1 2 1;
+#X connect 5 0 8 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 1;
diff --git a/externals/gridflow/abstractions/#rgb_to_greyscale.pd b/externals/gridflow/abstractions/#rgb_to_greyscale.pd
new file mode 100644
index 00000000..79842613
--- /dev/null
+++ b/externals/gridflow/abstractions/#rgb_to_greyscale.pd
@@ -0,0 +1,8 @@
+#N canvas 550 233 335 174 10;
+#X obj 10 10 inlet;
+#X obj 9 67 outlet;
+#X obj 9 29 #inner (3 1 # 77 151 28);
+#X obj 9 48 # >> 8;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
diff --git a/externals/gridflow/abstractions/#rgb_to_rgba.pd b/externals/gridflow/abstractions/#rgb_to_rgba.pd
new file mode 100644
index 00000000..850b2723
--- /dev/null
+++ b/externals/gridflow/abstractions/#rgb_to_rgba.pd
@@ -0,0 +1,6 @@
+#N canvas 209 229 409 113 10;
+#X obj 22 26 inlet rgb;
+#X obj 22 64 outlet rgba;
+#X obj 22 45 #inner (3 4 # 1 0 0 0 0 1 0 0 0 0 1 0);
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
diff --git a/externals/gridflow/abstractions/#rgb_to_yuv.pd b/externals/gridflow/abstractions/#rgb_to_yuv.pd
new file mode 100644
index 00000000..7e341ea0
--- /dev/null
+++ b/externals/gridflow/abstractions/#rgb_to_yuv.pd
@@ -0,0 +1,10 @@
+#N canvas 550 233 438 174 10;
+#X obj 10 10 inlet;
+#X obj 10 90 outlet;
+#X obj 10 50 # >> 8;
+#X obj 10 30 #inner (3 3 # 76 -44 128 150 -85 -108 29 128 -21);
+#X obj 10 70 # + (0 128 128);
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
diff --git a/externals/gridflow/abstractions/#rgba_to_rgb.pd b/externals/gridflow/abstractions/#rgba_to_rgb.pd
new file mode 100644
index 00000000..46d5ad0e
--- /dev/null
+++ b/externals/gridflow/abstractions/#rgba_to_rgb.pd
@@ -0,0 +1,6 @@
+#N canvas 0 0 450 300 10;
+#X obj 26 23 inlet rgba;
+#X obj 26 61 outlet rgb;
+#X obj 26 42 #inner (4 3 # 1 0 0 0 1 0 0 0 1 0 0 0);
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
diff --git a/externals/gridflow/abstractions/#rotate.pd b/externals/gridflow/abstractions/#rotate.pd
new file mode 100644
index 00000000..f54b1cc3
--- /dev/null
+++ b/externals/gridflow/abstractions/#rotate.pd
@@ -0,0 +1,30 @@
+#N canvas 448 101 416 220 10;
+#X obj 11 12 inlet;
+#X obj 43 190 outlet;
+#X obj 171 9 loadbang;
+#X obj 171 57 t f;
+#X obj 171 28 args (angle f 0);
+#X obj 196 57 inlet angle;
+#X obj 223 8 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 99 121 #rotatificator;
+#X obj 11 61 route2 axis;
+#X obj 43 133 t a b;
+#X msg 99 100 256;
+#X obj 43 152 #inner;
+#X obj 43 171 # >> 8;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 3 0 7 1;
+#X connect 4 0 3 0;
+#X connect 4 1 8 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 11 1;
+#X connect 8 0 7 0;
+#X connect 8 1 9 0;
+#X connect 9 0 11 0;
+#X connect 9 1 10 0;
+#X connect 10 0 7 0;
+#X connect 11 0 12 0;
+#X connect 12 0 1 0;
diff --git a/externals/gridflow/abstractions/#saturation.pd b/externals/gridflow/abstractions/#saturation.pd
new file mode 100644
index 00000000..289c2336
--- /dev/null
+++ b/externals/gridflow/abstractions/#saturation.pd
@@ -0,0 +1,35 @@
+#N canvas 0 0 450 300 10;
+#X obj 59 119 # inv+ 255;
+#X obj 8 169 # +;
+#X obj 33 28 #rgb_to_greyscale;
+#X obj 8 189 # >> 8;
+#X obj 106 91 loadbang;
+#X text 62 216 keep values inside visible range;
+#X obj 8 149 # *;
+#X obj 33 119 # *;
+#X obj 8 9 inlet image;
+#X obj 8 243 outlet image;
+#X obj 47 71 inlet saturation;
+#X text 170 75 0 = grey \; 256 = identity;
+#X text 34 172 mix the original picture with its greyed version;
+#X obj 33 48 #greyscale_to_rgb;
+#X obj 47 91 t a;
+#X obj 8 215 #clip;
+#X obj 8 28 #t;
+#X obj 74 91 f \$1;
+#X connect 0 0 7 1;
+#X connect 1 0 3 0;
+#X connect 2 0 13 0;
+#X connect 3 0 15 0;
+#X connect 4 0 17 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 1;
+#X connect 8 0 16 0;
+#X connect 10 0 14 0;
+#X connect 13 0 7 0;
+#X connect 14 0 6 1;
+#X connect 14 0 0 0;
+#X connect 15 0 9 0;
+#X connect 16 0 6 0;
+#X connect 16 1 2 0;
+#X connect 17 0 14 0;
diff --git a/externals/gridflow/abstractions/#scale_to.pd b/externals/gridflow/abstractions/#scale_to.pd
new file mode 100644
index 00000000..b183833b
--- /dev/null
+++ b/externals/gridflow/abstractions/#scale_to.pd
@@ -0,0 +1,31 @@
+#N canvas 0 0 450 300 10;
+#X obj 28 20 inlet;
+#X obj 28 201 outlet;
+#X obj 28 110 #for (0 0) (0 0) (1 1);
+#X obj 28 144 # *;
+#X obj 28 163 # /;
+#X obj 28 182 #store;
+#X obj 162 145 #dim;
+#X obj 162 164 #redim (2);
+#X obj 28 64 #finished;
+#X obj 28 39 t a a;
+#X obj 140 20 inlet;
+#X obj 185 32 loadbang;
+#X obj 185 51 args size;
+#X obj 113 68 t a;
+#X connect 0 0 9 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X connect 6 0 7 0;
+#X connect 7 0 3 1;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 9 1 6 0;
+#X connect 9 1 5 1;
+#X connect 10 0 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 2 1;
+#X connect 13 0 4 1;
diff --git a/externals/gridflow/abstractions/#seq_fold.pd b/externals/gridflow/abstractions/#seq_fold.pd
new file mode 100644
index 00000000..cb2c8dc5
--- /dev/null
+++ b/externals/gridflow/abstractions/#seq_fold.pd
@@ -0,0 +1,31 @@
+#N canvas 728 111 450 473 10;
+#X obj 26 40 inlet end;
+#X obj 94 40 inlet elements;
+#X obj 26 294 outlet final;
+#X obj 115 294 outlet op_left;
+#X obj 217 294 outlet op_right;
+#X obj 112 75 t b b b;
+#X obj 180 218 shunt;
+#X msg 270 170 1;
+#X msg 241 170 0;
+#X obj 270 40 inlet op_result;
+#X obj 196 40 inlet seed;
+#X obj 196 170 var.#;
+#X obj 180 199 var.#;
+#X obj 94 199 t b a;
+#X connect 0 0 5 0;
+#X connect 1 0 13 0;
+#X connect 5 0 8 0;
+#X connect 5 0 11 0;
+#X connect 5 1 12 0;
+#X connect 5 2 7 0;
+#X connect 6 0 3 0;
+#X connect 6 1 2 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 1;
+#X connect 9 0 12 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 1;
+#X connect 12 0 6 0;
+#X connect 13 0 12 0;
+#X connect 13 1 4 0;
diff --git a/externals/gridflow/abstractions/#slice.pd b/externals/gridflow/abstractions/#slice.pd
new file mode 100644
index 00000000..46d00f80
--- /dev/null
+++ b/externals/gridflow/abstractions/#slice.pd
@@ -0,0 +1,41 @@
+#N canvas 133 255 450 300 10;
+#X obj 13 24 inlet;
+#X obj 53 259 outlet;
+#X obj 53 240 #store;
+#X obj 93 24 inlet;
+#X obj 153 24 inlet;
+#X obj 181 98 # put 1;
+#X obj 64 217 #for 0 0 1;
+#X obj 93 98 #export_list;
+#X obj 13 56 t a a;
+#X obj 13 75 #finished;
+#X obj 129 198 #ravel;
+#X obj 99 178 #ravel;
+#X obj 198 26 args start end;
+#X obj 153 66 t a;
+#X obj 93 68 t a;
+#X obj 199 6 loadbang;
+#X obj 83 156 list trim;
+#X obj 83 137 list prepend set (;
+#X obj 83 118 list append );
+#X connect 0 0 8 0;
+#X connect 2 0 1 0;
+#X connect 3 0 14 0;
+#X connect 4 0 13 0;
+#X connect 5 0 10 0;
+#X connect 6 0 2 0;
+#X connect 7 0 18 0;
+#X connect 8 0 9 0;
+#X connect 8 1 2 1;
+#X connect 9 0 6 0;
+#X connect 10 0 6 2;
+#X connect 11 0 6 1;
+#X connect 12 0 14 0;
+#X connect 12 1 13 0;
+#X connect 13 0 5 0;
+#X connect 13 0 11 0;
+#X connect 14 0 7 0;
+#X connect 15 0 12 0;
+#X connect 16 0 6 0;
+#X connect 17 0 16 0;
+#X connect 18 0 17 0;
diff --git a/externals/gridflow/abstractions/#solarize.pd b/externals/gridflow/abstractions/#solarize.pd
new file mode 100644
index 00000000..bcf7ecb4
--- /dev/null
+++ b/externals/gridflow/abstractions/#solarize.pd
@@ -0,0 +1,12 @@
+#N canvas 0 0 450 300 10;
+#X obj 15 14 inlet;
+#X obj 15 34 # & 255;
+#X obj 15 53 # << 1;
+#X obj 15 92 # inv+ 255;
+#X obj 15 112 outlet;
+#X obj 15 72 # abs- 255;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
diff --git a/externals/gridflow/abstractions/#sort.pd b/externals/gridflow/abstractions/#sort.pd
new file mode 100644
index 00000000..174e7a06
--- /dev/null
+++ b/externals/gridflow/abstractions/#sort.pd
@@ -0,0 +1,13 @@
+#N canvas 374 137 450 165 10;
+#X obj 28 30 inlet;
+#X obj 28 136 outlet;
+#X obj 28 73 #grade;
+#X obj 28 92 #outer + (0);
+#X obj 28 117 #store;
+#X obj 28 49 #t;
+#X connect 0 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 5 1 4 1;
diff --git a/externals/gridflow/abstractions/#spread.pd b/externals/gridflow/abstractions/#spread.pd
new file mode 100644
index 00000000..41a6a8da
--- /dev/null
+++ b/externals/gridflow/abstractions/#spread.pd
@@ -0,0 +1,22 @@
+#N canvas 0 0 450 300 10;
+#X obj 17 12 inlet;
+#X obj 17 52 # & 0;
+#X obj 17 72 # + 5;
+#X obj 17 92 # rand;
+#X obj 17 112 # - 2;
+#X obj 137 162 # +;
+#X obj 124 68 # >> 1;
+#X obj 17 32 t a a;
+#X obj 137 182 outlet;
+#X obj 124 32 inlet;
+#X connect 0 0 7 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 4 1;
+#X connect 7 0 1 0;
+#X connect 7 1 5 1;
+#X connect 9 0 6 0;
+#X connect 9 0 2 1;
diff --git a/externals/gridflow/abstractions/#swap.pd b/externals/gridflow/abstractions/#swap.pd
new file mode 100644
index 00000000..d7914489
--- /dev/null
+++ b/externals/gridflow/abstractions/#swap.pd
@@ -0,0 +1,14 @@
+#N canvas 83 326 450 195 10;
+#X obj 24 35 inlet A;
+#X obj 89 102 inlet B;
+#X obj 24 136 outlet A;
+#X obj 84 136 outlet B;
+#X obj 24 102 #store;
+#X obj 24 54 t a a;
+#X obj 24 73 #finished;
+#X connect 0 0 5 0;
+#X connect 1 0 4 1;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 5 1 3 0;
+#X connect 6 0 4 0;
diff --git a/externals/gridflow/abstractions/#t.pd b/externals/gridflow/abstractions/#t.pd
new file mode 100644
index 00000000..5b8fce67
--- /dev/null
+++ b/externals/gridflow/abstractions/#t.pd
@@ -0,0 +1,16 @@
+#N canvas 454 233 450 176 10;
+#X obj 26 29 inlet;
+#X obj 26 116 outlet;
+#X obj 72 116 outlet;
+#X obj 26 48 t a a;
+#X obj 26 67 #finished;
+#X obj 26 86 #store;
+#X text 120 22 This is for when [t a a] is not sufficient;
+#X text 121 36 Because GF doesn't fully follow ordering of;
+#X text 121 49 messages.;
+#X connect 0 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 1;
+#X connect 3 1 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
diff --git a/externals/gridflow/abstractions/#text_to_image.pd b/externals/gridflow/abstractions/#text_to_image.pd
new file mode 100644
index 00000000..f9d57480
--- /dev/null
+++ b/externals/gridflow/abstractions/#text_to_image.pd
@@ -0,0 +1,41 @@
+#N canvas 305 189 450 300 10;
+#X obj 16 14 inlet text;
+#X obj 16 265 outlet image;
+#X obj 291 132 inlet font;
+#X obj 16 155 #store;
+#X obj 203 38 inlet colors;
+#X text 203 2 0: background;
+#X text 203 18 1: foreground;
+#X obj 203 66 t a;
+#X obj 16 174 #store;
+#X obj 229 66 loadbang;
+#X text 67 157 font;
+#X text 68 174 palette;
+#X obj 16 33 #outer ignore ( 0 );
+#X obj 16 212 t a a;
+#X obj 16 238 #redim ( );
+#X obj 154 161 #dim;
+#X obj 154 180 #unpack 4;
+#X obj 174 200 *;
+#X obj 16 193 #transpose 0 1;
+#X obj 154 228 pack 0 0 0;
+#X msg 229 85 2 3 # 0 0 0 255 255 255;
+#X connect 0 0 12 0;
+#X connect 2 0 3 1;
+#X connect 3 0 8 0;
+#X connect 4 0 7 0;
+#X connect 8 0 18 0;
+#X connect 9 0 20 0;
+#X connect 12 0 3 0;
+#X connect 13 0 14 0;
+#X connect 13 1 15 0;
+#X connect 14 0 1 0;
+#X connect 15 0 16 0;
+#X connect 16 0 19 0;
+#X connect 16 1 17 0;
+#X connect 16 2 17 1;
+#X connect 16 3 19 2;
+#X connect 17 0 19 1;
+#X connect 18 0 13 0;
+#X connect 19 0 14 1;
+#X connect 20 0 8 1;
diff --git a/externals/gridflow/abstractions/#to_literal.pd b/externals/gridflow/abstractions/#to_literal.pd
new file mode 100644
index 00000000..dd2b5563
--- /dev/null
+++ b/externals/gridflow/abstractions/#to_literal.pd
@@ -0,0 +1,18 @@
+#N canvas 0 0 322 300 10;
+#X obj 44 149 #export_list;
+#X obj 136 124 #dim;
+#X obj 136 149 #export_list;
+#X obj 44 203 list prepend;
+#X obj 44 97 t a a;
+#X obj 136 173 list append #;
+#X obj 44 55 inlet;
+#X obj 44 238 outlet;
+#X text 44 30 convert a GRID into its literal;
+#X connect 0 0 3 0;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 0 7 0;
+#X connect 4 0 0 0;
+#X connect 4 1 1 0;
+#X connect 5 0 3 1;
+#X connect 6 0 4 0;
diff --git a/externals/gridflow/abstractions/#window.pd b/externals/gridflow/abstractions/#window.pd
new file mode 100755
index 00000000..48283111
--- /dev/null
+++ b/externals/gridflow/abstractions/#window.pd
@@ -0,0 +1,29 @@
+#N canvas 354 116 450 300 10;
+#X obj 90 210 #out;
+#X msg 65 140 close;
+#X obj 16 79 spigot;
+#X obj -48 9 inlet;
+#X msg 87 106 open window \, title \$1;
+#X obj 65 9 inlet;
+#X obj 87 83 symbol \$1;
+#X obj 65 61 sel 0 1;
+#X obj -95 141 loadbang;
+#X obj -95 162 args (title s untitled);
+#X obj -48 37 route state;
+#X obj 65 29 t a;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 10 0;
+#X connect 4 0 0 0;
+#X connect 5 0 11 0;
+#X connect 6 0 4 0;
+#X connect 7 0 1 0;
+#X connect 7 1 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 1;
+#X connect 9 1 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 2 0;
+#X connect 11 0 7 0;
+#X connect 11 0 2 1;
+#X coords 0 0 1 1 24 24 0;
diff --git a/externals/gridflow/abstractions/#yuv_to_rgb.pd b/externals/gridflow/abstractions/#yuv_to_rgb.pd
new file mode 100644
index 00000000..df2f242f
--- /dev/null
+++ b/externals/gridflow/abstractions/#yuv_to_rgb.pd
@@ -0,0 +1,10 @@
+#N canvas 550 233 438 174 10;
+#X obj 10 10 inlet;
+#X obj 10 90 outlet;
+#X obj 10 70 # >> 8;
+#X obj 10 30 # - (0 128 128);
+#X obj 10 50 #inner (3 3 # 256 256 256 0 -88 454 358 -183 0);
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
diff --git a/externals/gridflow/abstractions/ascii.pd b/externals/gridflow/abstractions/ascii.pd
new file mode 100644
index 00000000..1daaa93d
--- /dev/null
+++ b/externals/gridflow/abstractions/ascii.pd
@@ -0,0 +1,12 @@
+#N canvas 310 286 450 300 10;
+#X obj 22 23 inlet;
+#X msg 22 61 to_ascii \$1;
+#X obj 22 118 outlet;
+#X obj 22 99 #to_float;
+#X obj 22 42 int;
+#X obj 22 80 #import;
+#X connect 0 0 4 0;
+#X connect 1 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
diff --git a/externals/gridflow/abstractions/ascii_to_f.pd b/externals/gridflow/abstractions/ascii_to_f.pd
new file mode 100644
index 00000000..02043a4c
--- /dev/null
+++ b/externals/gridflow/abstractions/ascii_to_f.pd
@@ -0,0 +1,71 @@
+#N canvas 230 221 450 387 10;
+#X obj 71 6 inlet;
+#X obj 71 44 range 48 58;
+#X obj 258 143 outlet other;
+#X obj 50 128 +;
+#X obj 34 147 f;
+#X obj 91 296 outlet parsed;
+#X obj 91 227 * 1;
+#X msg 156 183 -1;
+#X msg 130 183 1;
+#X obj 258 74 t f b b;
+#X msg 280 183 0;
+#X obj 50 109 - 48;
+#X obj 75 128 * 10;
+#X obj 170 74 sel 43 45 46;
+#X obj 91 277 / 1;
+#X obj 71 25 #to_float;
+#X obj 201 260 * 10;
+#X obj 176 260 f 1;
+#X msg 176 218 1;
+#X obj 206 237 spigot 0;
+#X msg 257 218 0;
+#X obj 279 14 t b;
+#X msg 206 218 bang;
+#X msg 266 237 1;
+#X obj 34 90 r \$0-fini;
+#X obj 302 112 s \$0-fini;
+#X text 96 261 denominator;
+#X text 87 207 sign;
+#X obj 302 93 gf.oneshot 0;
+#X connect 0 0 15 0;
+#X connect 1 0 13 0;
+#X connect 1 1 11 0;
+#X connect 1 1 21 0;
+#X connect 1 1 22 0;
+#X connect 1 2 13 0;
+#X connect 3 0 4 1;
+#X connect 3 0 12 0;
+#X connect 4 0 6 0;
+#X connect 6 0 14 0;
+#X connect 7 0 6 1;
+#X connect 8 0 6 1;
+#X connect 9 0 2 0;
+#X connect 9 1 8 0;
+#X connect 9 1 10 0;
+#X connect 9 1 20 0;
+#X connect 9 1 18 0;
+#X connect 9 2 28 0;
+#X connect 10 0 3 1;
+#X connect 11 0 3 0;
+#X connect 12 0 3 1;
+#X connect 13 0 8 0;
+#X connect 13 0 21 0;
+#X connect 13 1 7 0;
+#X connect 13 1 21 0;
+#X connect 13 2 21 0;
+#X connect 13 2 23 0;
+#X connect 13 3 9 0;
+#X connect 14 0 5 0;
+#X connect 15 0 1 0;
+#X connect 16 0 17 1;
+#X connect 17 0 16 0;
+#X connect 17 0 14 1;
+#X connect 18 0 17 0;
+#X connect 19 0 17 0;
+#X connect 20 0 19 1;
+#X connect 21 0 28 1;
+#X connect 22 0 19 0;
+#X connect 23 0 19 1;
+#X connect 24 0 4 0;
+#X connect 28 0 25 0;
diff --git a/externals/gridflow/abstractions/condition.pd b/externals/gridflow/abstractions/condition.pd
new file mode 100644
index 00000000..65daf35b
--- /dev/null
+++ b/externals/gridflow/abstractions/condition.pd
@@ -0,0 +1,40 @@
+#N canvas 204 111 450 300 10;
+#X obj 115 22 nbx 5 14 -1e+37 1e+37 0 0 empty empty y -10 4 0 10 -24198
+-1 -1 99 256;
+#X obj 44 21 nbx 5 14 -1e+37 1e+37 0 0 empty empty x -10 4 0 10 -24198
+-1 -1 91 256;
+#X obj 131 102 &&;
+#X floatatom 138 127 5 0 0 0 - - -;
+#X obj 237 100 &&;
+#X floatatom 244 125 5 0 0 0 - - -;
+#X obj 192 151 &&;
+#X floatatom 193 173 5 0 0 0 - - -;
+#X obj 5 4 inlet;
+#X obj 95 1 inlet;
+#X obj 152 66 > \$2;
+#X obj 194 65 < \$3;
+#X obj 258 66 < \$4;
+#X obj 105 63 > \$1;
+#X obj 191 262 outlet;
+#X obj 256 264 outlet;
+#X obj 190 230 select 1;
+#X obj 191 209 change;
+#X connect 0 0 10 0;
+#X connect 0 0 12 0;
+#X connect 1 0 11 0;
+#X connect 1 0 13 0;
+#X connect 2 0 3 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 6 0 7 0;
+#X connect 7 0 17 0;
+#X connect 8 0 1 0;
+#X connect 9 0 0 0;
+#X connect 10 0 2 1;
+#X connect 11 0 4 0;
+#X connect 12 0 4 1;
+#X connect 13 0 2 0;
+#X connect 16 0 14 0;
+#X connect 16 1 15 0;
+#X connect 17 0 16 0;
diff --git a/externals/gridflow/abstractions/count.pd b/externals/gridflow/abstractions/count.pd
new file mode 100644
index 00000000..087bd40d
--- /dev/null
+++ b/externals/gridflow/abstractions/count.pd
@@ -0,0 +1,44 @@
+#N canvas 448 36 450 300 10;
+#X obj 131 81 + 1;
+#X obj 132 37 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 190 82 5 0 0 0 - - -;
+#X msg 131 61 1;
+#X obj 204 168 select 1;
+#X obj 191 195 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 70 39 inlet;
+#X obj 131 150 outlet;
+#X obj 239 80 inlet;
+#X obj 190 106 == \$2;
+#X floatatom 131 132 5 0 0 0 - - -;
+#X obj 191 218 outlet;
+#X obj 131 106 - 1;
+#X floatatom 191 130 5 0 0 0 - - -;
+#X obj 203 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 293 49 print;
+#X obj 222 63 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 192 38 float \$1;
+#X text 231 9 <-- bang this to reset;
+#X obj 219 -11 inlet;
+#X connect 0 0 2 0;
+#X connect 0 0 12 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 1;
+#X connect 2 0 9 0;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 4 0 17 0;
+#X connect 5 0 11 0;
+#X connect 6 0 1 0;
+#X connect 8 0 9 1;
+#X connect 9 0 13 0;
+#X connect 10 0 7 0;
+#X connect 12 0 10 0;
+#X connect 13 0 4 0;
+#X connect 14 0 17 0;
+#X connect 16 0 2 0;
+#X connect 17 0 2 0;
+#X connect 19 0 14 0;
diff --git a/externals/gridflow/abstractions/expect.pd b/externals/gridflow/abstractions/expect.pd
new file mode 100644
index 00000000..c956ddc2
--- /dev/null
+++ b/externals/gridflow/abstractions/expect.pd
@@ -0,0 +1,13 @@
+#N canvas 531 173 450 300 10;
+#X obj 11 11 inlet;
+#X obj 150 30 args *;
+#X obj 150 11 loadbang;
+#X obj 11 150 outlet;
+#X obj 150 49 t a;
+#X obj 11 90 list.==;
+#X text 8 229 TODO: should do [gf.error expected %s but got %s];
+#X connect 0 0 5 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 0;
+#X connect 4 0 5 1;
+#X connect 5 0 3 0;
diff --git a/externals/gridflow/abstractions/for.pd b/externals/gridflow/abstractions/for.pd
new file mode 100644
index 00000000..068d2462
--- /dev/null
+++ b/externals/gridflow/abstractions/for.pd
@@ -0,0 +1,39 @@
+#N canvas 767 232 450 301 10;
+#X obj 30 56 inlet from;
+#X obj 190 56 inlet to;
+#X obj 250 56 inlet step;
+#X obj 55 239 outlet;
+#X obj 250 82 t f;
+#X obj 190 82 t f;
+#X obj 55 34 args from to step;
+#X obj 30 81 route set float bang;
+#X obj 55 170 until;
+#X obj 55 189 f;
+#X obj 80 189 +;
+#X obj 55 220 moses;
+#X obj 163 165 bang;
+#X obj 55 15 loadbang;
+#X obj 55 128 f;
+#X obj 55 150 t b f;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 4 0 10 1;
+#X connect 5 0 11 1;
+#X connect 6 0 14 1;
+#X connect 6 1 5 0;
+#X connect 6 2 4 0;
+#X connect 7 0 14 1;
+#X connect 7 1 14 0;
+#X connect 7 2 14 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 1;
+#X connect 11 0 3 0;
+#X connect 11 1 12 0;
+#X connect 12 0 8 1;
+#X connect 13 0 6 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 0;
+#X connect 15 1 9 1;
diff --git a/externals/gridflow/abstractions/fps.pd b/externals/gridflow/abstractions/fps.pd
new file mode 100644
index 00000000..cc2a091b
--- /dev/null
+++ b/externals/gridflow/abstractions/fps.pd
@@ -0,0 +1,213 @@
+#N canvas 342 57 660 613 10;
+#X obj 18 11 inlet;
+#X obj 113 543 outlet;
+#X obj 18 261 +;
+#X obj 43 261 t a;
+#X obj 18 280 moses 1000;
+#X obj 18 85 t a a b;
+#X msg 71 86 1;
+#X obj 71 105 +;
+#X obj 96 105 t a;
+#X obj 113 337 inv*;
+#X obj 113 318 / 1000;
+#X obj 83 299 t b a;
+#X msg 83 318 0;
+#X obj 126 49 symbol;
+#N canvas 173 324 450 300 timer 0;
+#X obj 18 32 inlet bang;
+#X obj 92 32 inlet mode;
+#X obj 92 51 listfind real user system cpu logical process;
+#X obj 18 175 realtime;
+#X obj 18 148 t b b;
+#X obj 304 156 t b b;
+#X obj 304 175 cputime;
+#X obj 265 175 timer;
+#X obj 265 156 t b b;
+#X obj 18 51 shunt 6;
+#X obj 78 148 t b b;
+#X obj 78 175 usertime;
+#X obj 138 152 t b b;
+#X obj 212 153 t b b;
+#X obj 212 175 tsctime;
+#X obj 138 175 systemtime;
+#X obj 18 236 outlet;
+#X obj 221 90 print mode;
+#X connect 0 0 9 0;
+#X connect 1 0 2 0;
+#X connect 2 0 9 1;
+#X connect 2 0 17 0;
+#X connect 3 0 16 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 5 0 6 0;
+#X connect 5 1 6 1;
+#X connect 6 0 16 0;
+#X connect 7 0 16 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 9 0 4 0;
+#X connect 9 1 10 0;
+#X connect 9 2 12 0;
+#X connect 9 4 8 0;
+#X connect 9 5 5 0;
+#X connect 10 0 11 0;
+#X connect 10 1 11 1;
+#X connect 12 0 15 0;
+#X connect 12 1 15 1;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X restore 18 66 pd timer;
+#X obj 256 40 args (detailed s terse);
+#X obj 256 59 listfind terse detailed;
+#X obj 256 21 loadbang;
+#X obj 280 251 shunt;
+#X msg 381 183 1;
+#X msg 342 183 0;
+#X obj 323 164 t b b b b;
+#X obj 113 367 shunt;
+#X obj 143 428 list append;
+#X obj 280 232 list prepend;
+#N canvas 207 253 585 366 min.med.max 1;
+#X obj 39 51 #sort;
+#X obj 39 32 #import per_message f;
+#X obj 39 70 t a a;
+#X obj 39 89 #finished;
+#X obj 106 56 #dim;
+#X obj 39 158 pack 0 0 0 0;
+#X obj 106 114 # / 2;
+#X obj 220 73 #to_float;
+#X obj 39 196 #store;
+#X obj 220 92 - 1;
+#X obj 39 215 #unpack 4;
+#X obj 60 235 +;
+#X obj 60 254 / 2;
+#X obj 35 275 pack 0 0 0;
+#X obj 106 133 #unpack;
+#X obj 39 13 inlet;
+#X obj 35 294 outlet;
+#X obj 39 177 #redim (4 1);
+#X obj 106 75 #redim (2);
+#X obj 106 94 # - (1 0);
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 2 1 4 0;
+#X connect 2 1 8 1;
+#X connect 3 0 5 0;
+#X connect 4 0 7 0;
+#X connect 4 0 18 0;
+#X connect 5 0 17 0;
+#X connect 6 0 14 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 5 3;
+#X connect 10 0 13 0;
+#X connect 10 1 11 0;
+#X connect 10 2 11 1;
+#X connect 10 3 13 2;
+#X connect 11 0 12 0;
+#X connect 12 0 13 1;
+#X connect 13 0 16 0;
+#X connect 14 0 5 1;
+#X connect 14 1 5 2;
+#X connect 15 0 1 0;
+#X connect 17 0 8 0;
+#X connect 18 0 19 0;
+#X connect 19 0 6 0;
+#X restore 310 310 pd min.med.max;
+#X text 169 371 weird;
+#X obj 143 390 f;
+#X obj 168 390 t b a;
+#X obj 143 479 list append;
+#X obj 215 460 inv* 1000;
+#N canvas 0 0 450 300 stdev 0;
+#X obj 16 -43 inlet values;
+#X obj 15 194 outlet stdev;
+#X obj 96 14 #fold +;
+#X obj 96 52 # /;
+#X obj 121 33 #dim;
+#X obj 96 -5 t a a;
+#X obj 16 -24 #import per_message f;
+#X obj 121 52 #cast f;
+#X obj 16 -5 #t;
+#X obj 16 95 # sq-;
+#X obj 15 171 #to_float;
+#X obj 16 114 #fold + \, seed (f #);
+#X obj 16 152 # sqrt (f #);
+#X obj 16 133 # /;
+#X connect 0 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 9 1;
+#X connect 4 0 7 0;
+#X connect 5 0 2 0;
+#X connect 5 1 4 0;
+#X connect 6 0 8 0;
+#X connect 7 0 3 1;
+#X connect 7 0 13 1;
+#X connect 8 0 9 0;
+#X connect 8 1 5 0;
+#X connect 9 0 11 0;
+#X connect 10 0 1 0;
+#X connect 11 0 13 0;
+#X connect 12 0 10 0;
+#X connect 13 0 12 0;
+#X restore 342 351 pd stdev;
+#X obj 143 509 list append;
+#X obj 310 281 t a a;
+#X obj 167 409 spigot;
+#X obj 18 30 route bang detailed mode period;
+#X obj 177 49 * 1000;
+#X connect 0 0 35 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 1;
+#X connect 4 1 11 0;
+#X connect 5 0 2 0;
+#X connect 5 1 24 0;
+#X connect 5 2 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 7 1;
+#X connect 8 0 9 1;
+#X connect 9 0 22 0;
+#X connect 9 0 30 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 11 0 21 0;
+#X connect 11 1 10 0;
+#X connect 12 0 7 1;
+#X connect 12 0 2 1;
+#X connect 13 0 14 1;
+#X connect 14 0 5 0;
+#X connect 15 0 16 0;
+#X connect 15 1 35 0;
+#X connect 16 0 22 1;
+#X connect 16 0 34 1;
+#X connect 17 0 15 0;
+#X connect 18 0 24 1;
+#X connect 18 1 33 0;
+#X connect 19 0 18 1;
+#X connect 20 0 18 1;
+#X connect 21 0 24 1;
+#X connect 21 1 20 0;
+#X connect 21 2 24 0;
+#X connect 21 3 19 0;
+#X connect 22 0 1 0;
+#X connect 22 1 27 1;
+#X connect 23 0 29 0;
+#X connect 24 0 18 0;
+#X connect 25 0 28 0;
+#X connect 27 0 23 0;
+#X connect 28 0 34 0;
+#X connect 28 1 23 1;
+#X connect 29 0 32 0;
+#X connect 30 0 29 1;
+#X connect 31 0 32 1;
+#X connect 32 0 1 0;
+#X connect 33 0 25 0;
+#X connect 33 1 31 0;
+#X connect 34 0 27 0;
+#X connect 35 0 14 0;
+#X connect 35 2 13 0;
+#X connect 35 3 36 0;
+#X connect 36 0 4 1;
diff --git a/externals/gridflow/abstractions/gf.io_generate.pd b/externals/gridflow/abstractions/gf.io_generate.pd
new file mode 100644
index 00000000..43a6b475
--- /dev/null
+++ b/externals/gridflow/abstractions/gf.io_generate.pd
@@ -0,0 +1,81 @@
+#N canvas 491 139 789 550 10;
+#X msg 74 492 connect 0 0 2 0 \, connect 2 0 1 0;
+#X obj 96 353 list trim;
+#X obj 96 75 list split 1;
+#X obj 96 114 gf.suffix_lookup;
+#X obj 143 276 list append;
+#X obj 96 315 list prepend;
+#X obj 96 213 t b s;
+#X obj 96 94 t s s;
+#X obj 9 10 inlet;
+#X obj 322 65 \$1;
+#X obj 184 315 pack s s s;
+#X obj 251 292 symbol \$2;
+#X obj 251 273 loadbang;
+#X obj 74 518 outlet;
+#X obj 74 48 t b a b;
+#X obj 212 114 sel window;
+#X obj 143 257 list append \$2;
+#X obj 9 29 route bang;
+#X msg 322 443 clear \, obj 0 0 r \$1-in \, obj 0 40 s \$1-out;
+#X obj 96 334 list prepend obj 0 20;
+#X obj 9 313 \$1;
+#X obj 143 238 makefilename #io.%s;
+#X obj 213 157 class_exists;
+#X obj 213 176 sel 0 1;
+#X msg 213 138 symbol #io.quartz;
+#X msg 213 214 symbol x11;
+#X msg 231 195 symbol quartz;
+#X obj 96 142 route bang;
+#X obj 409 233 gf.error unknown suffix '%s';
+#X obj 409 214 list;
+#X msg 31 426 obj 0 20 gf.not_open;
+#X obj 9 332 t a a a;
+#X obj 96 380 t b a;
+#X msg 96 399 else obj 0 20 gf.not_open;
+#X connect 0 0 13 0;
+#X connect 1 0 32 0;
+#X connect 2 0 7 0;
+#X connect 2 1 4 1;
+#X connect 3 0 27 0;
+#X connect 3 1 29 1;
+#X connect 3 2 15 0;
+#X connect 4 0 19 0;
+#X connect 5 0 19 0;
+#X connect 6 0 5 0;
+#X connect 6 1 10 0;
+#X connect 7 0 3 0;
+#X connect 7 1 10 2;
+#X connect 8 0 17 0;
+#X connect 9 0 18 0;
+#X connect 10 0 5 1;
+#X connect 11 0 10 1;
+#X connect 12 0 11 0;
+#X connect 14 0 0 0;
+#X connect 14 1 2 0;
+#X connect 14 2 9 0;
+#X connect 15 0 24 0;
+#X connect 15 1 21 0;
+#X connect 16 0 4 0;
+#X connect 17 0 20 0;
+#X connect 17 1 14 0;
+#X connect 18 0 13 0;
+#X connect 19 0 1 0;
+#X connect 20 0 31 0;
+#X connect 21 0 16 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 0;
+#X connect 23 1 26 0;
+#X connect 24 0 22 0;
+#X connect 25 0 21 0;
+#X connect 26 0 21 0;
+#X connect 27 0 29 0;
+#X connect 27 1 6 0;
+#X connect 29 0 28 0;
+#X connect 30 0 13 0;
+#X connect 31 0 0 0;
+#X connect 31 1 30 0;
+#X connect 31 2 18 0;
+#X connect 32 0 33 0;
+#X connect 32 1 13 0;
+#X connect 33 0 13 0;
diff --git a/externals/gridflow/abstractions/gf.nbxhsl.pd b/externals/gridflow/abstractions/gf.nbxhsl.pd
new file mode 100644
index 00000000..7a1ca05e
--- /dev/null
+++ b/externals/gridflow/abstractions/gf.nbxhsl.pd
@@ -0,0 +1,33 @@
+#N canvas 770 0 450 300 10;
+#X obj 173 41 loadbang;
+#X msg 300 79 label \$1;
+#X obj 247 79 t s s s;
+#X obj 247 174 t a;
+#X msg 247 155 receive \$1;
+#X msg 269 117 send \$1;
+#X obj 50 0 hsl 129 12 0 65535 0 0 1005-s_contrast 1005-contrast contrast
+4 7 1 10 -233017 -195568 -195568 0 0;
+#X obj 0 0 nbx 5 12 0 65535 0 0 1005-s_contrast 1005-contrast empty
+4 7 1 10 -233017 -195568 -195568 0 256;
+#X msg 47 75 set \$1;
+#X msg 0 75 set \$1;
+#X obj 173 60 args (self f) (name s);
+#X obj 247 136 makefilename \$1-%s;
+#X obj 269 98 makefilename \$1-s_%s;
+#X connect 0 0 10 0;
+#X connect 1 0 6 0;
+#X connect 2 0 11 0;
+#X connect 2 1 12 0;
+#X connect 2 2 1 0;
+#X connect 3 0 7 0;
+#X connect 3 0 6 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 6 0;
+#X connect 9 0 7 0;
+#X connect 10 1 2 0;
+#X connect 11 0 4 0;
+#X connect 12 0 5 0;
+#X coords 0 -1 1 1 181 12 2 0 0;
diff --git a/externals/gridflow/abstractions/gf.not_open.pd b/externals/gridflow/abstractions/gf.not_open.pd
new file mode 100644
index 00000000..b311c621
--- /dev/null
+++ b/externals/gridflow/abstractions/gf.not_open.pd
@@ -0,0 +1,10 @@
+#N canvas 0 0 450 300 10;
+#X obj 16 16 inlet;
+#X obj 16 35 t b b;
+#X obj 16 73 outlet;
+#X obj 55 35 gf.error not open;
+#X msg 16 54 not_open;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 3 0;
+#X connect 4 0 2 0;
diff --git a/externals/gridflow/abstractions/gf.oneshot.pd b/externals/gridflow/abstractions/gf.oneshot.pd
new file mode 100644
index 00000000..1c02239d
--- /dev/null
+++ b/externals/gridflow/abstractions/gf.oneshot.pd
@@ -0,0 +1,22 @@
+#N canvas 520 225 450 300 10;
+#X obj 33 82 inlet;
+#X obj 33 139 outlet;
+#X obj 33 120 t a b;
+#X msg 84 82 0;
+#X obj 123 20 inlet;
+#X obj 123 39 route bang;
+#X msg 123 58 1;
+#X obj 199 89 args (x f 1);
+#X obj 199 70 loadbang;
+#X obj 33 101 spigot;
+#X connect 0 0 9 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 3 0 9 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 9 1;
+#X connect 6 0 9 1;
+#X connect 7 0 9 1;
+#X connect 8 0 7 0;
+#X connect 9 0 2 0;
diff --git a/externals/gridflow/abstractions/hpgl_find_bbox.pd b/externals/gridflow/abstractions/hpgl_find_bbox.pd
new file mode 100644
index 00000000..fc6f56d8
--- /dev/null
+++ b/externals/gridflow/abstractions/hpgl_find_bbox.pd
@@ -0,0 +1,49 @@
+#N canvas 507 388 450 300 10;
+#X obj 23 26 inlet hpgl;
+#X obj 23 45 route2 PA PD PU;
+#X obj 233 109 #import (2);
+#X obj 233 128 #to_list;
+#X obj 104 26 inlet end;
+#X obj 104 270 outlet report;
+#X obj 300 128 loadbang;
+#X obj 104 191 #seq_fold;
+#X obj 23 74 t a;
+#X obj 194 90 list split 1;
+#X obj 274 196 #seq_fold;
+#X obj 133 210 # min;
+#X obj 303 215 # max;
+#X obj 233 147 t a a;
+#X obj 104 125 t b b;
+#X obj 104 251 @join 0;
+#X obj 104 232 #redim (1 2);
+#X obj 274 234 #redim (1 2);
+#X msg 341 196 -999999 -999999;
+#X msg 171 191 999999 999999;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 1 1 8 0;
+#X connect 1 2 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 13 0;
+#X connect 4 0 14 0;
+#X connect 6 0 19 0;
+#X connect 6 0 18 0;
+#X connect 7 0 16 0;
+#X connect 7 1 11 0;
+#X connect 7 2 11 1;
+#X connect 8 0 9 0;
+#X connect 9 1 2 0;
+#X connect 10 0 17 0;
+#X connect 10 1 12 0;
+#X connect 10 2 12 1;
+#X connect 11 0 7 3;
+#X connect 12 0 10 3;
+#X connect 13 0 7 1;
+#X connect 13 1 10 1;
+#X connect 14 0 7 0;
+#X connect 14 1 10 0;
+#X connect 15 0 5 0;
+#X connect 16 0 15 0;
+#X connect 17 0 15 1;
+#X connect 18 0 10 2;
+#X connect 19 0 7 2;
diff --git a/externals/gridflow/abstractions/hpgl_font_render.pd b/externals/gridflow/abstractions/hpgl_font_render.pd
new file mode 100644
index 00000000..29525186
--- /dev/null
+++ b/externals/gridflow/abstractions/hpgl_font_render.pd
@@ -0,0 +1,208 @@
+#N canvas 529 0 693 585 10;
+#X obj 11 11 inlet hpgl;
+#X obj 11 556 outlet hpgl;
+#X obj 85 11 inlet font_name;
+#X obj 85 30 symbol;
+#X obj 194 30 args font_name;
+#X obj 194 11 loadbang;
+#X msg 51 230 symbol \$1;
+#X obj 51 266 #import;
+#X obj 51 304 #to_float;
+#X obj 212 375 pack f s;
+#X obj 11 211 t a;
+#X obj 212 394 t a b;
+#X obj 492 96 hpgl_track_position;
+#X obj 242 486 f;
+#X obj 242 524 +;
+#X obj 242 543 +;
+#X obj 472 152 #unpack;
+#X obj 267 543 r \$0-char-width;
+#X obj 242 562 s \$0-char-pos;
+#X obj 72 155 s \$0-scaling;
+#X obj 334 96 route print_from_ascii;
+#X obj 267 96 route2 LB;
+#X obj 134 136 s \$0-rowheight;
+#X obj 535 189 f;
+#X obj 560 189 -;
+#X obj 585 189 r \$0-rowheight;
+#X obj 447 181 f;
+#X obj 11 96 route spacing scaling rowheight wrap;
+#X obj 196 117 s \$0-wrap;
+#X obj 51 364 t b;
+#X obj 57 343 r \$0-crlf;
+#X obj 242 505 shunt;
+#X msg 300 432 1;
+#X msg 261 432 0;
+#X obj 242 413 t b b b b;
+#X obj 51 383 f;
+#X obj 51 323 route 10 13;
+#X obj 132 323 t a a;
+#X obj 76 383 * -1;
+#X obj 531 215 s \$0-row-pos;
+#N canvas 418 66 489 534 draw_one_character 0;
+#X msg 132 58 open grid \$2/\$1.hpgl \, headerless \, type b;
+#X obj 51 137 until;
+#X obj 51 156 #in;
+#X obj 90 137 route bang;
+#X obj 82 296 hpgl_find_bbox;
+#X obj 51 58 t b b b b a;
+#X msg 300 125 1;
+#X msg 301 162 0;
+#X obj 52 277 shunt;
+#X msg 23 107 rewind;
+#X obj 110 455 #pack;
+#X obj 110 436 inv+;
+#X obj 82 357 inv+;
+#X obj 82 315 #redim (4);
+#X obj 52 194 route2 PA PU PD;
+#X obj 82 334 #unpack 4;
+#X obj 52 230 hpgl_op *;
+#X obj 52 474 hpgl_op +;
+#X obj 82 395 s \$0-char-width;
+#X obj 142 436 r \$0-char-pos;
+#X obj 119 230 r \$0-scaling;
+#X obj 82 376 max;
+#X obj 52 175 plotter_parser;
+#X obj 149 455 r \$0-row-pos;
+#X obj 51 39 inlet;
+#X obj 52 493 outlet;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 22 0;
+#X connect 2 1 3 0;
+#X connect 3 0 1 1;
+#X connect 4 0 13 0;
+#X connect 5 0 1 0;
+#X connect 5 1 7 0;
+#X connect 5 1 9 0;
+#X connect 5 1 4 1;
+#X connect 5 2 1 0;
+#X connect 5 3 6 0;
+#X connect 5 4 0 0;
+#X connect 6 0 8 1;
+#X connect 7 0 8 1;
+#X connect 8 0 17 0;
+#X connect 8 1 4 0;
+#X connect 9 0 2 0;
+#X connect 10 0 17 1;
+#X connect 11 0 10 0;
+#X connect 12 0 21 0;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 14 1 16 0;
+#X connect 14 2 16 0;
+#X connect 15 0 12 0;
+#X connect 15 0 11 0;
+#X connect 15 2 12 1;
+#X connect 16 0 8 0;
+#X connect 17 0 25 0;
+#X connect 19 0 11 1;
+#X connect 20 0 16 1;
+#X connect 21 0 18 0;
+#X connect 22 0 14 0;
+#X connect 23 0 10 1;
+#X connect 24 0 5 0;
+#X restore 62 533 pd draw_one_character;
+#N canvas 0 0 450 300 word-wrap 0;
+#X obj 27 125 -;
+#X obj 66 144 r \$0-wrap;
+#X obj 43 106 #unpack;
+#X obj 57 230 s \$0-crlf;
+#X obj 27 144 moses;
+#X obj 57 211 spigot;
+#X obj 103 211 == 32;
+#X obj 57 168 spigot 0;
+#X obj 117 168 !=;
+#X obj 103 192 inlet cur-char;
+#X obj 27 26 inlet cur-pos;
+#X obj 43 87 inlet orig-pos;
+#X connect 0 0 4 0;
+#X connect 1 0 4 1;
+#X connect 1 0 8 0;
+#X connect 2 0 0 1;
+#X connect 4 1 7 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 1;
+#X connect 7 0 5 0;
+#X connect 8 0 7 1;
+#X connect 9 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 2 0;
+#X restore 453 293 pd word-wrap;
+#X obj 447 152 t b;
+#X obj 51 402 s \$0-char-width;
+#X obj 246 179 t b;
+#X obj 223 254 s \$0-char-width;
+#X msg 223 235 0;
+#X obj 51 285 t a b;
+#X obj 85 49 s \$0-font-name;
+#X obj 263 356 r \$0-font-name;
+#X obj 267 524 r \$0-spacing;
+#X obj 11 174 s \$0-spacing;
+#X obj 76 364 r \$0-spacing;
+#X connect 0 0 27 0;
+#X connect 2 0 3 0;
+#X connect 3 0 48 0;
+#X connect 4 0 3 0;
+#X connect 4 1 27 0;
+#X connect 5 0 4 0;
+#X connect 6 0 7 0;
+#X connect 7 0 47 0;
+#X connect 8 0 36 0;
+#X connect 9 0 11 0;
+#X connect 10 0 1 0;
+#X connect 11 0 40 0;
+#X connect 11 1 34 0;
+#X connect 12 0 16 0;
+#X connect 12 0 41 1;
+#X connect 13 0 31 0;
+#X connect 14 0 15 0;
+#X connect 15 0 13 1;
+#X connect 15 0 18 0;
+#X connect 16 0 26 0;
+#X connect 16 1 23 1;
+#X connect 16 1 39 0;
+#X connect 17 0 15 1;
+#X connect 20 0 7 0;
+#X connect 20 1 12 0;
+#X connect 20 1 10 0;
+#X connect 21 0 6 0;
+#X connect 21 1 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 23 1;
+#X connect 24 0 39 0;
+#X connect 25 0 24 1;
+#X connect 26 0 13 1;
+#X connect 27 0 51 0;
+#X connect 27 1 19 0;
+#X connect 27 2 22 0;
+#X connect 27 3 28 0;
+#X connect 27 4 21 0;
+#X connect 29 0 35 0;
+#X connect 29 0 42 0;
+#X connect 30 0 29 0;
+#X connect 31 0 14 0;
+#X connect 31 1 41 0;
+#X connect 32 0 31 1;
+#X connect 33 0 31 1;
+#X connect 34 0 13 0;
+#X connect 34 1 33 0;
+#X connect 34 2 13 0;
+#X connect 34 3 32 0;
+#X connect 35 0 43 0;
+#X connect 36 0 29 0;
+#X connect 36 2 37 0;
+#X connect 37 0 9 0;
+#X connect 37 1 41 2;
+#X connect 38 0 35 1;
+#X connect 40 0 1 0;
+#X connect 42 0 26 0;
+#X connect 42 0 23 0;
+#X connect 44 0 12 1;
+#X connect 44 0 46 0;
+#X connect 46 0 45 0;
+#X connect 47 0 8 0;
+#X connect 47 1 44 0;
+#X connect 49 0 9 1;
+#X connect 50 0 14 1;
+#X connect 52 0 38 0;
diff --git a/externals/gridflow/abstractions/hpgl_op.pd b/externals/gridflow/abstractions/hpgl_op.pd
new file mode 100644
index 00000000..e4fc489f
--- /dev/null
+++ b/externals/gridflow/abstractions/hpgl_op.pd
@@ -0,0 +1,34 @@
+#N canvas 348 192 474 291 10;
+#X obj -43 19 inlet;
+#X obj 13 266 outlet;
+#X obj 134 20 inlet offset;
+#X obj 37 112 list split 1;
+#X obj 37 241 list trim;
+#X obj 76 170 # +;
+#X obj 76 189 #to_list;
+#X obj 224 21 loadbang;
+#X obj 37 222 list;
+#X obj 76 137 #import \, cast f;
+#X obj 224 40 args op (offset a (0 0));
+#X msg 92 82 op \$1;
+#X obj -43 38 route2 PU PD PA op;
+#X obj 196 84 #import \, cast f;
+#X connect 0 0 12 0;
+#X connect 2 0 13 0;
+#X connect 3 0 8 0;
+#X connect 3 1 9 0;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 1;
+#X connect 7 0 10 0;
+#X connect 8 0 4 0;
+#X connect 9 0 5 0;
+#X connect 10 0 11 0;
+#X connect 10 1 13 0;
+#X connect 11 0 5 0;
+#X connect 12 0 3 0;
+#X connect 12 1 3 0;
+#X connect 12 2 3 0;
+#X connect 12 3 11 0;
+#X connect 12 4 1 0;
+#X connect 13 0 5 1;
diff --git a/externals/gridflow/abstractions/hpgl_track_position.pd b/externals/gridflow/abstractions/hpgl_track_position.pd
new file mode 100644
index 00000000..f18e1259
--- /dev/null
+++ b/externals/gridflow/abstractions/hpgl_track_position.pd
@@ -0,0 +1,28 @@
+#N canvas 733 333 450 300 10;
+#X obj 15 15 inlet;
+#X obj 219 74 b;
+#X obj 15 34 route2 get PA PD PU;
+#X obj 64 76 t a;
+#X obj 227 93 list split 1;
+#X obj 296 131 list length;
+#X obj 266 112 t a a;
+#X obj 231 169 list split;
+#X obj 296 150 - 2;
+#X obj 219 225 outlet;
+#X obj 219 14 inlet;
+#X obj 219 206 list 0 0;
+#X connect 0 0 2 0;
+#X connect 1 0 11 0;
+#X connect 2 0 1 0;
+#X connect 2 1 3 0;
+#X connect 2 2 3 0;
+#X connect 2 3 3 0;
+#X connect 3 0 4 0;
+#X connect 4 1 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 7 0;
+#X connect 6 1 5 0;
+#X connect 7 1 11 1;
+#X connect 8 0 7 1;
+#X connect 10 0 1 0;
+#X connect 11 0 9 0;
diff --git a/externals/gridflow/abstractions/interval_overlap.pd b/externals/gridflow/abstractions/interval_overlap.pd
new file mode 100644
index 00000000..cf0525f0
--- /dev/null
+++ b/externals/gridflow/abstractions/interval_overlap.pd
@@ -0,0 +1,14 @@
+#N canvas 599 0 574 300 10;
+#X obj 25 165 outlet;
+#X obj 25 51 inlet start1;
+#X obj 142 51 inlet end1;
+#X obj 259 51 inlet start2;
+#X obj 377 51 inlet end2;
+#X obj 25 90 expr ($f1>=$f3 && $f1<$f4) || ($f2>=$f3 && $f2<$f4);
+#X text 20 19 There's some bug with the endpoints (see dd's proc overlap)
+;
+#X connect 1 0 5 0;
+#X connect 2 0 5 1;
+#X connect 3 0 5 2;
+#X connect 4 0 5 3;
+#X connect 5 0 0 0;
diff --git a/externals/gridflow/abstractions/inv0x2a.pd b/externals/gridflow/abstractions/inv0x2a.pd
new file mode 100644
index 00000000..fb3b9189
--- /dev/null
+++ b/externals/gridflow/abstractions/inv0x2a.pd
@@ -0,0 +1,11 @@
+#N canvas 0 0 450 300 10;
+#X obj 20 -35 inlet;
+#X obj 60 -35 inlet;
+#X obj 20 39 outlet;
+#X obj 20 20 /;
+#X obj 20 -1 swap \$1;
+#X connect 0 0 4 0;
+#X connect 1 0 4 1;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
diff --git a/externals/gridflow/abstractions/inv0x2b.pd b/externals/gridflow/abstractions/inv0x2b.pd
new file mode 100644
index 00000000..1aab4c34
--- /dev/null
+++ b/externals/gridflow/abstractions/inv0x2b.pd
@@ -0,0 +1,11 @@
+#N canvas 0 0 450 300 10;
+#X obj 20 -35 inlet;
+#X obj 60 -35 inlet;
+#X obj 20 39 outlet;
+#X obj 20 20 -;
+#X obj 20 -1 swap \$1;
+#X connect 0 0 4 0;
+#X connect 1 0 4 1;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
diff --git a/externals/gridflow/abstractions/norecurse.pd b/externals/gridflow/abstractions/norecurse.pd
new file mode 100644
index 00000000..1d3b77d3
--- /dev/null
+++ b/externals/gridflow/abstractions/norecurse.pd
@@ -0,0 +1,14 @@
+#N canvas 442 212 450 300 10;
+#X obj 20 22 inlet;
+#X obj 52 108 outlet;
+#X obj 20 48 spigot 1;
+#X obj 20 67 t b a b;
+#X msg 89 59 0;
+#X msg 17 90 1;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 3 1 1 0;
+#X connect 3 2 4 0;
+#X connect 4 0 2 1;
+#X connect 5 0 2 1;
diff --git a/externals/gridflow/abstractions/pingpong.pd b/externals/gridflow/abstractions/pingpong.pd
new file mode 100644
index 00000000..406c9d16
--- /dev/null
+++ b/externals/gridflow/abstractions/pingpong.pd
@@ -0,0 +1,27 @@
+#N canvas 0 0 450 270 10;
+#X text 50 11 counter;
+#X obj 67 40 inlet;
+#X obj 67 83 %;
+#X obj 67 103 -;
+#X obj 164 49 inlet;
+#X text 163 32 maxvalue;
+#X obj 83 62 * 2;
+#X obj 67 124 abs;
+#X obj 67 185 outlet;
+#X text 123 184 values from 0 to maxvalue;
+#X obj 67 145 -;
+#X obj 67 165 * -1;
+#X obj 164 70 float \$1;
+#X obj 206 49 loadbang;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 12 0;
+#X connect 6 0 2 1;
+#X connect 7 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 8 0;
+#X connect 12 0 6 0;
+#X connect 12 0 10 1;
+#X connect 12 0 3 1;
+#X connect 13 0 12 0;
diff --git a/externals/gridflow/abstractions/plotter_control.pd b/externals/gridflow/abstractions/plotter_control.pd
new file mode 100644
index 00000000..091efcef
--- /dev/null
+++ b/externals/gridflow/abstractions/plotter_control.pd
@@ -0,0 +1,119 @@
+#N canvas 474 0 746 530 10;
+#X obj 8 4 inlet;
+#X obj 8 503 outlet;
+#X msg 8 463 59 10;
+#X text 52 463 comma+newline;
+#X obj 201 443 #import;
+#X msg 201 424 to_ascii \$1;
+#X obj 201 462 #to_float;
+#X msg 54 443 44;
+#X msg 373 102 list IP;
+#X obj 320 102 t b a b;
+#X obj 316 362 foreach;
+#X obj 316 338 t a b;
+#X msg 355 338 0;
+#X msg 320 121 end;
+#X obj 368 381 spigot;
+#X msg 435 412 1;
+#X obj 315 381 t b a b;
+#X obj 337 465 t a;
+#X obj 8 172 list split 1;
+#X obj 30 210 list;
+#X obj 297 208 #import;
+#X obj 297 227 # & -33;
+#X text 352 226 turns to uppercase if content is only letters;
+#X obj 297 246 #export_symbol;
+#X msg 100 443 32;
+#X obj 17 49 list;
+#X msg 70 68 list LB;
+#X obj 17 68 t b l b;
+#X msg 146 443 3;
+#X msg 17 87 break \, end;
+#X obj 126 49 t b l b;
+#X msg 179 49 list LB;
+#X obj 148 68 #export_symbol;
+#X msg 126 87 break \, end;
+#X obj 8 23 route other print print_from_ascii;
+#X obj 8 191 t b b s;
+#X obj 104 369 t a b;
+#X obj 316 305 t a b;
+#X obj 343 425 symbol;
+#X msg 381 305 symbol space;
+#X msg 143 369 symbol comma;
+#X obj 8 424 route end comma space break;
+#X obj 343 444 list trim;
+#X obj 17 106 s \$0-e;
+#X obj 8 405 r \$0-e;
+#X obj 320 148 s \$0-e;
+#X obj 337 484 s \$0-e;
+#X obj 126 106 s \$0-e;
+#X obj 297 265 s \$0-e;
+#X obj 320 40 route ip IP;
+#X obj 8 272 s \$0-e;
+#X msg 8 253 end;
+#X connect 0 0 34 0;
+#X connect 2 0 1 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
+#X connect 8 0 45 0;
+#X connect 9 0 13 0;
+#X connect 9 1 36 0;
+#X connect 9 2 8 0;
+#X connect 10 0 16 0;
+#X connect 11 0 10 0;
+#X connect 11 1 12 0;
+#X connect 12 0 14 1;
+#X connect 13 0 45 0;
+#X connect 14 0 38 0;
+#X connect 15 0 14 1;
+#X connect 16 0 15 0;
+#X connect 16 1 17 0;
+#X connect 16 2 14 0;
+#X connect 17 0 46 0;
+#X connect 18 0 35 0;
+#X connect 18 1 19 1;
+#X connect 19 0 36 0;
+#X connect 20 0 21 0;
+#X connect 21 0 23 0;
+#X connect 23 0 48 0;
+#X connect 24 0 1 0;
+#X connect 25 0 27 0;
+#X connect 26 0 43 0;
+#X connect 27 0 29 0;
+#X connect 27 1 37 0;
+#X connect 27 2 26 0;
+#X connect 28 0 1 0;
+#X connect 29 0 43 0;
+#X connect 30 0 33 0;
+#X connect 30 1 32 0;
+#X connect 30 2 31 0;
+#X connect 31 0 47 0;
+#X connect 32 0 47 0;
+#X connect 33 0 47 0;
+#X connect 34 0 18 0;
+#X connect 34 1 25 0;
+#X connect 34 2 30 0;
+#X connect 34 3 49 0;
+#X connect 35 0 51 0;
+#X connect 35 1 19 0;
+#X connect 35 2 20 0;
+#X connect 36 0 11 0;
+#X connect 36 1 40 0;
+#X connect 37 0 11 0;
+#X connect 37 1 39 0;
+#X connect 38 0 42 0;
+#X connect 39 0 38 1;
+#X connect 40 0 38 1;
+#X connect 41 0 2 0;
+#X connect 41 1 7 0;
+#X connect 41 2 24 0;
+#X connect 41 3 28 0;
+#X connect 41 4 5 0;
+#X connect 42 0 17 0;
+#X connect 44 0 41 0;
+#X connect 49 0 9 0;
+#X connect 49 1 9 0;
+#X connect 49 2 18 0;
+#X connect 51 0 50 0;
diff --git a/externals/gridflow/abstractions/plotter_parser.pd b/externals/gridflow/abstractions/plotter_parser.pd
new file mode 100644
index 00000000..80547693
--- /dev/null
+++ b/externals/gridflow/abstractions/plotter_parser.pd
@@ -0,0 +1,78 @@
+#N canvas 738 220 450 377 10;
+#X obj 156 11 inlet;
+#X obj 320 117 - 32;
+#X obj 290 184 #to_symbol;
+#X obj 156 30 #to_float;
+#X obj 156 49 shunt;
+#X obj 186 68 sel 3;
+#X msg 205 49 0;
+#X obj 112 140 sel 10 44 59;
+#X obj 230 88 range 65 91 97 123;
+#X obj 149 268 t l l;
+#X obj 149 249 list prepend;
+#X obj 126 287 list;
+#X obj 127 220 t b b;
+#X obj 290 165 #import (2);
+#X obj 126 306 list prepend;
+#X obj 126 325 list trim;
+#X obj 126 344 outlet hpgl;
+#X obj 200 140 outlet other;
+#X text 103 49 strings;
+#X text 110 88 floats;
+#X text 31 140 punctuation;
+#X text 360 89 letters;
+#X msg 201 201 1;
+#X msg 248 165 reset;
+#X obj 290 205 sel LB;
+#X msg 235 49 1;
+#X obj 302 33 list prepend;
+#X obj 390 33 t a;
+#X obj 279 66 list;
+#X obj 127 201 gf.oneshot;
+#X obj 156 88 ascii_to_f;
+#X msg 290 224 print_from_ascii;
+#X connect 0 0 3 0;
+#X connect 1 0 13 0;
+#X connect 2 0 22 0;
+#X connect 2 0 24 0;
+#X connect 3 0 4 0;
+#X connect 4 0 30 0;
+#X connect 4 1 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 28 0;
+#X connect 5 0 26 1;
+#X connect 5 1 26 0;
+#X connect 6 0 4 1;
+#X connect 7 0 29 0;
+#X connect 7 2 29 0;
+#X connect 7 3 17 0;
+#X connect 8 0 7 0;
+#X connect 8 1 13 0;
+#X connect 8 2 7 0;
+#X connect 8 3 1 0;
+#X connect 8 4 7 0;
+#X connect 9 0 11 1;
+#X connect 9 1 10 1;
+#X connect 10 0 9 0;
+#X connect 11 0 14 0;
+#X connect 12 0 11 1;
+#X connect 12 0 10 1;
+#X connect 12 1 11 0;
+#X connect 12 1 23 0;
+#X connect 13 0 2 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 22 0 29 1;
+#X connect 23 0 13 0;
+#X connect 24 0 25 0;
+#X connect 24 0 31 0;
+#X connect 24 1 14 1;
+#X connect 25 0 4 1;
+#X connect 26 0 27 0;
+#X connect 26 0 28 1;
+#X connect 27 0 26 1;
+#X connect 28 0 10 0;
+#X connect 29 0 12 0;
+#X connect 30 0 10 0;
+#X connect 30 1 8 0;
+#X connect 31 0 14 1;
diff --git a/externals/gridflow/abstractions/seq_fold.pd b/externals/gridflow/abstractions/seq_fold.pd
new file mode 100644
index 00000000..5be24887
--- /dev/null
+++ b/externals/gridflow/abstractions/seq_fold.pd
@@ -0,0 +1,31 @@
+#N canvas 512 144 450 473 10;
+#X obj 26 40 inlet end;
+#X obj 94 40 inlet elements;
+#X obj 180 199 f;
+#X obj 26 294 outlet final;
+#X obj 115 294 outlet op_left;
+#X obj 217 294 outlet op_right;
+#X obj 94 199 t b f;
+#X obj 112 75 t b b b;
+#X obj 180 218 shunt;
+#X msg 270 170 1;
+#X msg 241 170 0;
+#X obj 270 40 inlet op_result;
+#X obj 196 40 inlet seed;
+#X obj 196 180 f;
+#X connect 0 0 7 0;
+#X connect 1 0 6 0;
+#X connect 2 0 8 0;
+#X connect 6 0 2 0;
+#X connect 6 1 5 0;
+#X connect 7 0 10 0;
+#X connect 7 0 13 0;
+#X connect 7 1 2 0;
+#X connect 7 2 9 0;
+#X connect 8 0 4 0;
+#X connect 8 1 3 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 1;
+#X connect 11 0 2 1;
+#X connect 12 0 13 0;
+#X connect 13 0 2 1;
diff --git a/externals/gridflow/abstractions/var.#.pd b/externals/gridflow/abstractions/var.#.pd
new file mode 100644
index 00000000..85402ebf
--- /dev/null
+++ b/externals/gridflow/abstractions/var.#.pd
@@ -0,0 +1,16 @@
+#N canvas 373 266 450 300 10;
+#X obj 15 120 #store;
+#X obj 15 21 inlet;
+#X obj 214 22 inlet;
+#X obj 15 139 outlet;
+#X obj 15 46 route bang;
+#X obj 89 46 t a a;
+#X obj 89 65 #finished;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 0 1;
+#X connect 4 0 0 0;
+#X connect 4 1 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 0 1;
+#X connect 6 0 0 0;