aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/doc/flow_classes
diff options
context:
space:
mode:
Diffstat (limited to 'externals/gridflow/doc/flow_classes')
-rw-r--r--externals/gridflow/doc/flow_classes/#-help.pd55
-rw-r--r--externals/gridflow/doc/flow_classes/#apply_colormap_channelwise-help.pd55
-rw-r--r--externals/gridflow/doc/flow_classes/#background_model-help.pd90
-rw-r--r--externals/gridflow/doc/flow_classes/#border-help.pd44
-rw-r--r--externals/gridflow/doc/flow_classes/#camera-help.pd49
-rw-r--r--externals/gridflow/doc/flow_classes/#cast-help.pd67
-rw-r--r--externals/gridflow/doc/flow_classes/#centroid-help.pd29
-rw-r--r--externals/gridflow/doc/flow_classes/#change-help.pd35
-rw-r--r--externals/gridflow/doc/flow_classes/#checkers-help.pd26
-rw-r--r--externals/gridflow/doc/flow_classes/#clip-help.pd70
-rw-r--r--externals/gridflow/doc/flow_classes/#cluster_avg-help.pd22
-rw-r--r--externals/gridflow/doc/flow_classes/#color-help.pd44
-rw-r--r--externals/gridflow/doc/flow_classes/#contrast-help.pd72
-rw-r--r--externals/gridflow/doc/flow_classes/#convolve-help.pd67
-rw-r--r--externals/gridflow/doc/flow_classes/#dim-help.pd39
-rw-r--r--externals/gridflow/doc/flow_classes/#downscale_by-help.pd63
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_hpgl-help.pd35
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_image-help.pd102
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_points-help.pd56
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_polygon-help.pd116
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_rect-help.pd40
-rw-r--r--externals/gridflow/doc/flow_classes/#draw_slider-help.pd56
-rw-r--r--externals/gridflow/doc/flow_classes/#edit_polygon-help.pd42
-rw-r--r--externals/gridflow/doc/flow_classes/#extract_diagonal-help.pd32
-rw-r--r--externals/gridflow/doc/flow_classes/#fade-help.pd57
-rw-r--r--externals/gridflow/doc/flow_classes/#fade_lin-help.pd36
-rw-r--r--externals/gridflow/doc/flow_classes/#fastblur-help.pd90
-rw-r--r--externals/gridflow/doc/flow_classes/#fft-help.pd73
-rw-r--r--externals/gridflow/doc/flow_classes/#finished-help.pd54
-rw-r--r--externals/gridflow/doc/flow_classes/#fold-help.pd80
-rw-r--r--externals/gridflow/doc/flow_classes/#for-help.pd83
-rw-r--r--externals/gridflow/doc/flow_classes/#from_pix-help.pd89
-rw-r--r--externals/gridflow/doc/flow_classes/#gamma-help.pd29
-rw-r--r--externals/gridflow/doc/flow_classes/#grade-help.pd45
-rw-r--r--externals/gridflow/doc/flow_classes/#greyscale_to_rgb-help.pd26
-rw-r--r--externals/gridflow/doc/flow_classes/#hello-help.pd23
-rw-r--r--externals/gridflow/doc/flow_classes/#hueshift-help.pd20
-rw-r--r--externals/gridflow/doc/flow_classes/#import-help.pd88
-rw-r--r--externals/gridflow/doc/flow_classes/#in-help.pd236
-rw-r--r--externals/gridflow/doc/flow_classes/#inner-help.pd56
-rw-r--r--externals/gridflow/doc/flow_classes/#io.aalib-help.pd45
-rw-r--r--externals/gridflow/doc/flow_classes/#io.grid-help.pd44
-rw-r--r--externals/gridflow/doc/flow_classes/#io.jpeg-help.pd16
-rw-r--r--externals/gridflow/doc/flow_classes/#io.png-help.pd18
-rw-r--r--externals/gridflow/doc/flow_classes/#io.quicktime-help.pd69
-rw-r--r--externals/gridflow/doc/flow_classes/#io.videodev-help.pd77
-rw-r--r--externals/gridflow/doc/flow_classes/#io.x11-help.pd150
-rw-r--r--externals/gridflow/doc/flow_classes/#join-help.pd72
-rw-r--r--externals/gridflow/doc/flow_classes/#labelling-help.pd55
-rw-r--r--externals/gridflow/doc/flow_classes/#layer-help.pd47
-rw-r--r--externals/gridflow/doc/flow_classes/#line_to_polygon-help.pd40
-rw-r--r--externals/gridflow/doc/flow_classes/#make_arrow-help.pd20
-rw-r--r--externals/gridflow/doc/flow_classes/#make_cross-help.pd47
-rw-r--r--externals/gridflow/doc/flow_classes/#moment-help.pd164
-rw-r--r--externals/gridflow/doc/flow_classes/#moment_polar-help.pd25
-rw-r--r--externals/gridflow/doc/flow_classes/#motion_detection-help.pd83
-rw-r--r--externals/gridflow/doc/flow_classes/#mouse-help.pd99
-rw-r--r--externals/gridflow/doc/flow_classes/#noise_gate_yuvs-help.pd26
-rw-r--r--externals/gridflow/doc/flow_classes/#out-help.pd139
-rw-r--r--externals/gridflow/doc/flow_classes/#outer-help.pd105
-rw-r--r--externals/gridflow/doc/flow_classes/#pack-help.pd46
-rw-r--r--externals/gridflow/doc/flow_classes/#perspective-help.pd49
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_area-help.pd28
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_comparator-help.pd85
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_each_edge-help.pd22
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_moment-help.pd64
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_perimetre-help.pd23
-rw-r--r--externals/gridflow/doc/flow_classes/#polygon_radial_map-help.pd55
-rw-r--r--externals/gridflow/doc/flow_classes/#posterize-help.pd63
-rw-r--r--externals/gridflow/doc/flow_classes/#print-help.pd73
-rw-r--r--externals/gridflow/doc/flow_classes/#ravel-help.pd42
-rw-r--r--externals/gridflow/doc/flow_classes/#record-help.pd53
-rw-r--r--externals/gridflow/doc/flow_classes/#redim-help.pd59
-rw-r--r--externals/gridflow/doc/flow_classes/#reinterval-help.pd33
-rw-r--r--externals/gridflow/doc/flow_classes/#remap_image-help.pd53
-rw-r--r--externals/gridflow/doc/flow_classes/#reverse-help.pd65
-rw-r--r--externals/gridflow/doc/flow_classes/#rgb_to_greyscale-help.pd27
-rw-r--r--externals/gridflow/doc/flow_classes/#rgb_to_yuv-help.pd30
-rw-r--r--externals/gridflow/doc/flow_classes/#rotate-help.pd49
-rw-r--r--externals/gridflow/doc/flow_classes/#rotatificator-help.pd50
-rw-r--r--externals/gridflow/doc/flow_classes/#saturation-help.pd52
-rw-r--r--externals/gridflow/doc/flow_classes/#scale_by-help.pd57
-rw-r--r--externals/gridflow/doc/flow_classes/#scale_to-help.pd66
-rw-r--r--externals/gridflow/doc/flow_classes/#scan-help.pd48
-rw-r--r--externals/gridflow/doc/flow_classes/#seq_fold-help.pd55
-rw-r--r--externals/gridflow/doc/flow_classes/#slice-help.pd47
-rw-r--r--externals/gridflow/doc/flow_classes/#solarize-help.pd39
-rw-r--r--externals/gridflow/doc/flow_classes/#sort-help.pd45
-rw-r--r--externals/gridflow/doc/flow_classes/#spread-help.pd79
-rw-r--r--externals/gridflow/doc/flow_classes/#store-help.pd111
-rw-r--r--externals/gridflow/doc/flow_classes/#swap-help.pd25
-rw-r--r--externals/gridflow/doc/flow_classes/#t-help.pd58
-rw-r--r--externals/gridflow/doc/flow_classes/#text_to_image-help.pd24
-rw-r--r--externals/gridflow/doc/flow_classes/#to_float-help.pd29
-rw-r--r--externals/gridflow/doc/flow_classes/#to_list-help.pd31
-rw-r--r--externals/gridflow/doc/flow_classes/#to_literal-help.pd34
-rw-r--r--externals/gridflow/doc/flow_classes/#to_pix-help.pd107
-rw-r--r--externals/gridflow/doc/flow_classes/#to_symbol-help.pd52
-rw-r--r--externals/gridflow/doc/flow_classes/#transpose-help.pd37
-rw-r--r--externals/gridflow/doc/flow_classes/#type-help.pd26
-rw-r--r--externals/gridflow/doc/flow_classes/#unpack-help.pd28
-rw-r--r--externals/gridflow/doc/flow_classes/#window-help.pd33
-rw-r--r--externals/gridflow/doc/flow_classes/0x40complex_sq-help.pd52
-rw-r--r--externals/gridflow/doc/flow_classes/args-demo.pd27
-rw-r--r--externals/gridflow/doc/flow_classes/args-help.pd50
-rw-r--r--externals/gridflow/doc/flow_classes/ascii-help.pd25
-rw-r--r--externals/gridflow/doc/flow_classes/ascii_to_f-help.pd31
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#CornerHarris-help.pd14
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#Ellipse-help.pd24
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#Invert-help.pd32
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#KMeans-help.pd29
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#SVD-help.pd44
-rw-r--r--externals/gridflow/doc/flow_classes/cv/#numop-help.pd60
-rw-r--r--externals/gridflow/doc/flow_classes/display-help.pd24
-rw-r--r--externals/gridflow/doc/flow_classes/doc_add-help.pd23
-rw-r--r--externals/gridflow/doc/flow_classes/doc_also-help.pd18
-rw-r--r--externals/gridflow/doc/flow_classes/doc_below-help.pd40
-rw-r--r--externals/gridflow/doc/flow_classes/doc_bottom-help.pd27
-rw-r--r--externals/gridflow/doc/flow_classes/doc_c-help.pd17
-rw-r--r--externals/gridflow/doc/flow_classes/doc_cc-help.pd15
-rw-r--r--externals/gridflow/doc/flow_classes/doc_editmode-help.pd16
-rw-r--r--externals/gridflow/doc/flow_classes/doc_exist-help.pd26
-rw-r--r--externals/gridflow/doc/flow_classes/doc_f-help.pd7
-rw-r--r--externals/gridflow/doc/flow_classes/doc_h-help.pd13
-rw-r--r--externals/gridflow/doc/flow_classes/doc_i-help.pd10
-rw-r--r--externals/gridflow/doc/flow_classes/doc_ii-help.pd15
-rw-r--r--externals/gridflow/doc/flow_classes/doc_layout-help.pd46
-rw-r--r--externals/gridflow/doc/flow_classes/doc_m-help.pd78
-rw-r--r--externals/gridflow/doc/flow_classes/doc_make-help.pd25
-rw-r--r--externals/gridflow/doc/flow_classes/doc_o-help.pd11
-rw-r--r--externals/gridflow/doc/flow_classes/doc_oo-help.pd15
-rw-r--r--externals/gridflow/doc/flow_classes/for-help.pd56
-rw-r--r--externals/gridflow/doc/flow_classes/foreach-help.pd19
-rw-r--r--externals/gridflow/doc/flow_classes/fps-help.pd71
-rw-r--r--externals/gridflow/doc/flow_classes/gf.oneshot-help.pd42
-rw-r--r--externals/gridflow/doc/flow_classes/hpgl_find_bbox-help.pd21
-rw-r--r--externals/gridflow/doc/flow_classes/hpgl_font_render-help.pd178
-rw-r--r--externals/gridflow/doc/flow_classes/hpgl_op-help.pd30
-rw-r--r--externals/gridflow/doc/flow_classes/hpgl_track_position-help.pd21
-rw-r--r--externals/gridflow/doc/flow_classes/interval_overlap-help.pd46
-rw-r--r--externals/gridflow/doc/flow_classes/inv0x2a-help.pd78
-rw-r--r--externals/gridflow/doc/flow_classes/inv0x2b-help.pd75
-rw-r--r--externals/gridflow/doc/flow_classes/list.==-help.pd23
-rw-r--r--externals/gridflow/doc/flow_classes/listappend-help.pd49
-rw-r--r--externals/gridflow/doc/flow_classes/listelement-help.pd39
-rw-r--r--externals/gridflow/doc/flow_classes/listfind-help.pd32
-rw-r--r--externals/gridflow/doc/flow_classes/listflatten-help.pd39
-rw-r--r--externals/gridflow/doc/flow_classes/listlength-help.pd41
-rw-r--r--externals/gridflow/doc/flow_classes/listprepend-help.pd51
-rw-r--r--externals/gridflow/doc/flow_classes/listread-help.pd40
-rw-r--r--externals/gridflow/doc/flow_classes/listreverse-help.pd13
-rw-r--r--externals/gridflow/doc/flow_classes/listsublist-help.pd60
-rw-r--r--externals/gridflow/doc/flow_classes/norecurse-help.pd16
-rw-r--r--externals/gridflow/doc/flow_classes/parallel_port-help.pd96
-rw-r--r--externals/gridflow/doc/flow_classes/pingpong-help.pd27
-rw-r--r--externals/gridflow/doc/flow_classes/plotter_control-help.pd79
-rw-r--r--externals/gridflow/doc/flow_classes/plotter_parser-help.pd116
-rw-r--r--externals/gridflow/doc/flow_classes/range-help.pd28
-rw-r--r--externals/gridflow/doc/flow_classes/receives-help.pd38
-rw-r--r--externals/gridflow/doc/flow_classes/route2-help.pd33
-rw-r--r--externals/gridflow/doc/flow_classes/seq_fold-help.pd46
-rw-r--r--externals/gridflow/doc/flow_classes/shunt-help.pd70
-rw-r--r--externals/gridflow/doc/flow_classes/systemtime-help.pd33
-rw-r--r--externals/gridflow/doc/flow_classes/tsctime-help.pd50
-rw-r--r--externals/gridflow/doc/flow_classes/unix_time-help.pd50
-rw-r--r--externals/gridflow/doc/flow_classes/usertime-help.pd33
-rw-r--r--externals/gridflow/doc/flow_classes/var.#-help.pd21
167 files changed, 8358 insertions, 0 deletions
diff --git a/externals/gridflow/doc/flow_classes/#-help.pd b/externals/gridflow/doc/flow_classes/#-help.pd
new file mode 100644
index 00000000..8a546e31
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#-help.pd
@@ -0,0 +1,55 @@
+#N canvas 648 0 632 642 10;
+#X obj 139 174 #color;
+#X obj 314 174 #color;
+#X text 245 135 select values below;
+#X text 138 155 A;
+#X text 313 155 B;
+#X obj 139 240 # +;
+#X obj 178 274 #color;
+#X obj 140 380 display;
+#X obj 139 274 t a a;
+#X text 152 342 warning: #color clips value to the 0..255 range;
+#X text 152 357 so use this [display] to view the true numbers;
+#X text 54 81 click on this object to select a numop to try out:;
+#X text 55 64 # applies a simple Numeric Operator (numop).;
+#X obj 94 120 doc/numop;
+#X obj 0 0 doc_h;
+#X obj 14 439 doc_cc 0;
+#X obj 3 409 doc_c 1..2;
+#X obj 3 534 doc_i 2;
+#X obj 14 564 doc_ii 0;
+#X obj 14 735 doc_oo 0;
+#X obj 14 461 doc_cc 1;
+#X obj 14 673 doc_ii 1;
+#X obj 3 705 doc_o 1;
+#X obj 97 439 doc_m c0 numop;
+#X obj 97 463 doc_m c1 grid;
+#X obj 97 564 doc_m i0 grid;
+#X obj 97 673 doc_m i1 grid;
+#X obj 97 651 doc_m i0 numop;
+#X text 232 564 on each element of this grid \, perform the operation
+together with the corresponding element of inlet 1 in the table of
+operators (at the top of this document)elements of inlet 0 are called
+"A" and elements of inlet 1are called "B". the resulting grid is the
+same size as theone in inlet 0;
+#X text 232 439 pick a way to combine the numbers. (see the numop table)
+;
+#X text 232 673 same as arg 1;
+#X text 232 651 same as arg 0;
+#X obj 97 735 doc_m o0 grid;
+#X text 232 463 any grid \, preferably shaped like the one that will
+be put in the left inlet \, or like a subpart of it (anyway the contents
+will be redim'ed on-the-fly to fit the grid of inlet-0 \, but the stored
+grid will not be modified itself);
+#X obj 0 765 doc_f;
+#X connect 0 0 5 0;
+#X connect 1 0 5 1;
+#X connect 5 0 8 0;
+#X connect 8 0 7 0;
+#X connect 8 1 6 0;
+#X connect 13 0 5 0;
+#X connect 23 1 29 0;
+#X connect 24 1 33 0;
+#X connect 25 1 28 0;
+#X connect 26 1 30 0;
+#X connect 27 1 31 0;
diff --git a/externals/gridflow/doc/flow_classes/#apply_colormap_channelwise-help.pd b/externals/gridflow/doc/flow_classes/#apply_colormap_channelwise-help.pd
new file mode 100644
index 00000000..61c29ebf
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#apply_colormap_channelwise-help.pd
@@ -0,0 +1,55 @@
+#N canvas 651 0 632 598 10;
+#X obj 25 293 #in;
+#X obj 25 342 #out window;
+#X text 232 537 Outputs the modified data as a grid.;
+#X text 12 27 This object is useful for color correction. for each
+pixel it takes it apart \, looks up each part separately in the colormap
+and constructs a new pixel from that.;
+#X obj 213 235 #for 0 256 1;
+#X obj 213 305 #outer gamma;
+#X msg 25 267 load bluemarble.jpg;
+#X obj 25 248 t b b;
+#X obj 289 261 #color 0 1024 1;
+#X msg 354 209 1024 512 256;
+#X obj 354 190 loadbang;
+#X obj 25 323 #apply_colormap_channelwise;
+#X obj 25 219 metro 100;
+#X obj 25 202 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X text 357 244 vary this:;
+#X obj 0 0 doc_h;
+#X obj 3 383 doc_c 0;
+#X obj 3 423 doc_i 2;
+#X obj 3 507 doc_o 1;
+#X obj 14 453 doc_ii 0;
+#X obj 14 475 doc_ii 1;
+#X obj 14 537 doc_oo 0;
+#X obj 97 453 doc_m i0 grid;
+#X text 12 70 currently works only with 3 channels at a time!;
+#X text 15 89 it also works on non-images \, for example on colormaps
+themselves \, but the last dimension must be channels \, and there
+must be three channels.;
+#X text 14 136 Note: if you just need to apply a palette on an indexed-color
+picture or greyscale picture \, you don't need this. Just use #store
+instead.;
+#X obj 0 569 doc_f;
+#X text 232 453 grid that will be modified by the colormap;
+#X text 232 475 Colormap (aka palette) is a grid[intensity \, channels]
+;
+#X obj 97 475 doc_m i1 grid;
+#X obj 97 537 doc_m o0 grid;
+#X connect 0 0 11 0;
+#X connect 4 0 5 0;
+#X connect 5 0 11 1;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 7 1 4 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 0 1 0;
+#X connect 12 0 7 0;
+#X connect 13 0 12 0;
+#X connect 22 1 27 0;
+#X connect 29 1 28 0;
+#X connect 30 1 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#background_model-help.pd b/externals/gridflow/doc/flow_classes/#background_model-help.pd
new file mode 100644
index 00000000..04cc2648
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#background_model-help.pd
@@ -0,0 +1,90 @@
+#N canvas 327 0 632 642 10;
+#X obj 58 86 #camera;
+#X obj 58 50 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 194 115 tgl 15 0 empty empty binaryFlag 0 -6 0 8 -24198 -1 -1
+0 1;
+#X obj 126 96 tgl 15 0 empty empty addBackground 0 -6 0 8 -24198 -1
+-1 0 1;
+#X obj 266 105 hsl 128 15 0 700 0 0 empty empty outputThreshold -2
+-6 0 8 -260818 -1 -1 0 1;
+#X obj 41 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 58 286 #greyscale_to_rgb;
+#X text 72 224 Arguments : size of buffer \, columns \, rows \, channel
+;
+#X text 70 242 <-- output is a greyscale image;
+#X obj 58 305 #out window \, title backgroundModel;
+#X obj 58 324 fps detailed;
+#X obj 58 343 print;
+#X obj 146 198 #out window \, title variance;
+#X obj 235 160 #out window \, title Mean;
+#X obj 146 160 # << 2;
+#X obj 146 179 #clip;
+#X floatatom 280 128 5 0 0 0 - - -;
+#X obj 58 267 #clip;
+#X obj 58 67 metro 33.33;
+#X obj 58 141 #background_model 20 120 160 3;
+#X obj 14 658 doc_oo 0;
+#X obj 14 680 doc_oo 1;
+#X obj 14 702 doc_oo 2;
+#X obj 14 532 doc_ii 0;
+#X obj 14 552 doc_ii 1;
+#X obj 14 574 doc_ii 2;
+#X obj 14 596 doc_ii 3;
+#X obj 14 404 doc_cc 0;
+#X obj 14 426 doc_cc 1;
+#X obj 14 448 doc_cc 2;
+#X obj 14 470 doc_cc 3;
+#X text 232 552 addBackground;
+#X text 232 574 binary_flag;
+#X text 232 596 output_threshold;
+#X text 232 404 frames;
+#X text 232 426 height;
+#X text 232 448 width;
+#X text 232 470 channels;
+#X text 232 680 variance;
+#X text 232 702 mean;
+#X text 232 658 greyscale image;
+#X obj 0 0 doc_h;
+#X obj 0 734 doc_f;
+#X obj 3 374 doc_c 4;
+#X obj 3 502 doc_i 4;
+#X obj 3 628 doc_o 3;
+#X obj 97 596 doc_m i3;
+#X obj 97 404 doc_m c0 float;
+#X obj 97 426 doc_m c1 float;
+#X obj 97 448 doc_m c2 float;
+#X obj 97 470 doc_m c3 float;
+#X obj 97 552 doc_m i1 grid;
+#X obj 97 532 doc_m i0 grid;
+#X obj 97 574 doc_m i2 float bool;
+#X obj 97 658 doc_m o0 grid;
+#X obj 97 680 doc_m o1 grid;
+#X obj 97 702 doc_m o2 grid;
+#X connect 0 0 19 0;
+#X connect 1 0 18 0;
+#X connect 2 0 19 2;
+#X connect 3 0 19 1;
+#X connect 4 0 16 0;
+#X connect 4 0 19 3;
+#X connect 5 0 0 0;
+#X connect 6 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 0;
+#X connect 17 0 6 0;
+#X connect 18 0 0 0;
+#X connect 19 0 17 0;
+#X connect 19 1 14 0;
+#X connect 19 2 13 0;
+#X connect 46 1 33 0;
+#X connect 47 1 34 0;
+#X connect 48 1 35 0;
+#X connect 49 1 36 0;
+#X connect 50 1 37 0;
+#X connect 51 1 31 0;
+#X connect 53 1 32 0;
+#X connect 54 1 40 0;
+#X connect 55 1 38 0;
+#X connect 56 1 39 0;
diff --git a/externals/gridflow/doc/flow_classes/#border-help.pd b/externals/gridflow/doc/flow_classes/#border-help.pd
new file mode 100644
index 00000000..5486c419
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#border-help.pd
@@ -0,0 +1,44 @@
+#N canvas 597 51 632 499 10;
+#X obj 20 84 #in;
+#X obj 20 127 #out window;
+#X text 15 28 Creates a black border around an image.;
+#X msg 20 62 load working.jpg;
+#X text 232 206 top padding and left padding. defaults to (1 1 0).
+;
+#X text 232 228 bottom and right padding. defaults to (1 1 0).;
+#X obj 20 105 #border (5 10 0) (15 20 0);
+#X text 209 98 5 at the top;
+#X text 208 112 10 at the left;
+#X text 208 126 15 at the bottom;
+#X text 208 139 20 at the right;
+#X text 114 255 both arguments must have 3 elements. The third element
+is reserved for future use.;
+#X text 232 425 The original image surrounded by zero padding \, which
+usually means black pixels.;
+#X obj 14 425 doc_oo 0;
+#X obj 14 321 doc_ii 0;
+#X obj 14 341 doc_ii 1;
+#X obj 14 363 doc_ii 2;
+#X obj 14 206 doc_cc 0;
+#X obj 14 228 doc_cc 1;
+#X text 232 341 same as arg 0;
+#X text 232 363 same as arg 1;
+#X obj 0 0 doc_h;
+#X obj 0 470 doc_f;
+#X obj 3 176 doc_c 2;
+#X obj 3 291 doc_i 3;
+#X obj 3 395 doc_o 1;
+#X obj 97 206 doc_m c0 grid[3];
+#X obj 97 228 doc_m c1 grid[3];
+#X obj 97 321 doc_m i0 grid;
+#X obj 97 341 doc_m i1 list;
+#X obj 97 363 doc_m i2 list;
+#X obj 97 425 doc_m o0 grid;
+#X connect 0 0 6 0;
+#X connect 3 0 0 0;
+#X connect 6 0 1 0;
+#X connect 26 1 4 0;
+#X connect 27 1 5 0;
+#X connect 29 1 19 0;
+#X connect 30 1 20 0;
+#X connect 31 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/#camera-help.pd b/externals/gridflow/doc/flow_classes/#camera-help.pd
new file mode 100644
index 00000000..403f396f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#camera-help.pd
@@ -0,0 +1,49 @@
+#N canvas 679 40 632 557 10;
+#X obj 86 164 #out window;
+#X obj 60 45 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 86 45 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 86 183 fps detailed;
+#X obj 86 202 print;
+#X obj 86 71 metro 20;
+#X text 232 496 Returns a grid from the video capture device for every
+bang.;
+#X obj 86 145 #scale_by;
+#X text 151 111 <-- open the abstraction and configure for your camera
+before sending it a bang.;
+#X obj 86 112 #camera;
+#X obj 14 496 doc_oo 0;
+#X obj 14 399 doc_ii 0;
+#X obj 14 271 doc_cc 0;
+#X text 232 399 same as arg 0;
+#X text 232 421 same as the class of the camera object being used inside:
+see #io.videodev-help.pd for a LONG list of options;
+#X text 232 293 8: a linux device using the DC-1394 interface;
+#X text 232 315 9: an OSX device using the QuickTime camera interface
+;
+#X text 232 271 0..7: a linux device using the V4L1 interface (videodev.h)
+;
+#X text 232 337 -1: none;
+#X obj 0 0 doc_h;
+#X obj 0 528 doc_f;
+#X obj 3 241 doc_c 1;
+#X obj 3 369 doc_i 1;
+#X obj 3 466 doc_o 1;
+#X obj 97 271 doc_m c0 float/int;
+#X obj 97 496 doc_m o0 grid;
+#X obj 97 399 doc_m i0 device;
+#X obj 97 421 doc_m i0 <any>;
+#X connect 0 0 3 0;
+#X connect 1 0 9 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 5 0 9 0;
+#X connect 7 0 0 0;
+#X connect 9 0 7 0;
+#X connect 24 1 15 0;
+#X connect 24 1 16 0;
+#X connect 24 1 17 0;
+#X connect 24 1 18 0;
+#X connect 25 1 6 0;
+#X connect 26 1 13 0;
+#X connect 27 1 14 0;
diff --git a/externals/gridflow/doc/flow_classes/#cast-help.pd b/externals/gridflow/doc/flow_classes/#cast-help.pd
new file mode 100644
index 00000000..970a7647
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#cast-help.pd
@@ -0,0 +1,67 @@
+#N canvas 646 0 632 564 10;
+#X obj 14 219 #print;
+#X obj 14 199 #cast float64;
+#X obj 269 218 #print;
+#X obj 126 218 #print;
+#X obj 269 198 #cast uint8;
+#X obj 126 198 #cast int32;
+#X floatatom 14 181 5 0 0 0 - - -;
+#X msg 126 177 9.8764 9 -32 0.3;
+#X obj 269 158 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 306 79 nbx 8 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262144 -1 -1 2.1416 256;
+#X obj 356 96 nbx 8 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262144 -1 -1 45 256;
+#X obj 269 177 #store;
+#X obj 306 133 #pack 3 float32;
+#X obj 14 161 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 126 157 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 12 26 Changes an entity of one data type into another. Returns
+a grid of the same dimensions containing all the same values after
+type conversion. While casting to a smaller type \, overflowing values
+will be truncated.;
+#X obj 406 113 nbx 8 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262144 -1 -1 45 256;
+#X text 232 358 Any grid;
+#X obj 14 420 doc_oo 0;
+#X obj 14 358 doc_ii 0;
+#X obj 14 283 doc_cc 0;
+#X text 232 420 Produces a grid of the same dimensions containing all
+the same values after type conversion.;
+#X text 232 455 conversion from float truncates fractional part (rounds
+towards zero);
+#X text 232 490 conversion to an int type may wrap (same as some #
+& or some # %);
+#X text 232 283 Number types are: uint8 \, int16 \, int32 \, int64
+\, float32 \, float64. see doc/numtype.pd for more info.;
+#X obj 306 154 #redim (2 2);
+#X obj 0 0 doc_h;
+#X obj 0 535 doc_f;
+#X obj 3 253 doc_c 1;
+#X obj 3 328 doc_i 1;
+#X obj 3 390 doc_o 1;
+#X obj 97 283 doc_m c0 symbol/numbertype;
+#X obj 97 358 doc_m i0 grid;
+#X obj 97 420 doc_m o0 grid;
+#X connect 1 0 0 0;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 1 0;
+#X connect 7 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 12 0;
+#X connect 10 0 12 1;
+#X connect 11 0 4 0;
+#X connect 12 0 25 0;
+#X connect 13 0 6 0;
+#X connect 14 0 7 0;
+#X connect 16 0 12 2;
+#X connect 25 0 11 1;
+#X connect 31 1 24 0;
+#X connect 32 1 17 0;
+#X connect 33 1 21 0;
+#X connect 33 1 22 0;
+#X connect 33 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/#centroid-help.pd b/externals/gridflow/doc/flow_classes/#centroid-help.pd
new file mode 100644
index 00000000..81a8718f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#centroid-help.pd
@@ -0,0 +1,29 @@
+#N canvas 669 0 632 376 10;
+#X obj 43 44 #centroid;
+#X obj 14 163 doc_ii 0;
+#X obj 14 251 doc_oo 0;
+#X obj 14 273 doc_oo 1;
+#X obj 14 295 doc_oo 2;
+#X text 232 163 will compute the centroid of the given grid \, which
+is a weighted average \, namely \, the average position weighted by
+the pixel values.;
+#X text 138 41 obsolete. please use [#moment] instead.;
+#X obj 3 327 doc_also;
+#X obj 103 327 #moment;
+#X text 232 251 (y x);
+#X text 232 273 y;
+#X text 232 295 x;
+#X obj 0 0 doc_h;
+#X obj 0 347 doc_f;
+#X obj 3 93 doc_c;
+#X obj 3 133 doc_i 1;
+#X obj 3 221 doc_o 3;
+#X obj 97 163 doc_m i0;
+#X obj 97 251 doc_m o0 grid;
+#X obj 97 295 doc_m o2 float;
+#X obj 97 273 doc_m o1 float;
+#X connect 7 1 8 0;
+#X connect 17 1 5 0;
+#X connect 18 1 9 0;
+#X connect 19 1 11 0;
+#X connect 20 1 10 0;
diff --git a/externals/gridflow/doc/flow_classes/#change-help.pd b/externals/gridflow/doc/flow_classes/#change-help.pd
new file mode 100644
index 00000000..cbef68ef
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#change-help.pd
@@ -0,0 +1,35 @@
+#N canvas 646 85 632 417 10;
+#X obj 38 95 #change;
+#X text 234 116 should be to [change] what GridFlow is to PureData.
+;
+#X obj 14 278 doc_ii 0;
+#X obj 14 338 doc_oo 0;
+#X obj 14 218 doc_cc 0;
+#X obj 3 368 doc_also;
+#X obj 103 368 change;
+#X obj 38 137 print;
+#X obj 44 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 38 76 #pack;
+#X floatatom 72 58 5 0 0 0 - - -;
+#X floatatom 38 58 5 0 0 0 - - -;
+#X obj 72 41 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 38 41 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 0 0 doc_h;
+#X obj 0 388 doc_f;
+#X obj 3 188 doc_c 0..1;
+#X obj 3 248 doc_i 1;
+#X obj 3 308 doc_o 1;
+#X obj 97 218 doc_m c0 grid;
+#X obj 97 338 doc_m o0 grid;
+#X obj 97 278 doc_m i0 grid;
+#X connect 0 0 8 0;
+#X connect 0 0 7 0;
+#X connect 5 1 6 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 1;
+#X connect 11 0 9 0;
+#X connect 12 0 10 0;
+#X connect 13 0 11 0;
diff --git a/externals/gridflow/doc/flow_classes/#checkers-help.pd b/externals/gridflow/doc/flow_classes/#checkers-help.pd
new file mode 100644
index 00000000..1c737f08
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#checkers-help.pd
@@ -0,0 +1,26 @@
+#N canvas 692 0 632 404 10;
+#X obj 171 66 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 171 135 #out window \, title checkers;
+#X obj 171 112 #checkers;
+#X text 232 330 Results in a checkered pattern of 50% / 75% greys in
+8 X 8 squares.;
+#X text 11 29 Displays a grid with a pattern of checkered squares.
+;
+#X obj 14 330 doc_oo 0;
+#X obj 14 256 doc_ii 0;
+#X obj 171 88 #for (0 0) (128 128) (1 1);
+#X text 232 256 typically the output of [#for (0 0) (height width)
+(1 1)];
+#X obj 0 0 doc_h;
+#X obj 0 375 doc_f;
+#X obj 3 186 doc_c 0;
+#X obj 3 226 doc_i 1;
+#X obj 3 300 doc_o 1;
+#X obj 97 256 doc_m i0 grid;
+#X obj 97 330 doc_m o0 grid;
+#X connect 0 0 7 0;
+#X connect 2 0 1 0;
+#X connect 7 0 2 0;
+#X connect 14 1 8 0;
+#X connect 15 1 3 0;
diff --git a/externals/gridflow/doc/flow_classes/#clip-help.pd b/externals/gridflow/doc/flow_classes/#clip-help.pd
new file mode 100644
index 00000000..9e494b44
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#clip-help.pd
@@ -0,0 +1,70 @@
+#N canvas 673 6 632 610 10;
+#X obj 51 163 #in;
+#X obj 51 189 # + 42;
+#X floatatom 88 166 5 0 0 0 - - -;
+#X obj 51 270 #out window;
+#X obj 51 114 t b b;
+#X obj 51 90 metro 100;
+#X obj 51 68 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X floatatom 127 211 5 0 0 0 - - -;
+#X floatatom 87 211 5 0 0 0 - - -;
+#X text 6 25 The [#clip] object is used with numops in order to set
+a lower and upper range to pixel values. This allows you to avoid over
+saturating the colours of your grid.;
+#X text 133 165 <-- vary this number;
+#X msg 81 138 open working.jpg;
+#X text 232 410 Grid values are clipped to the high and low values
+stored in the object;
+#X text 232 529 Outputs the modified grid;
+#X obj 103 561 # min;
+#X obj 145 561 # max;
+#X obj 187 561 clip;
+#X text 223 561 #numop-help.pd;
+#X text 319 561 gf_tutorial_image_6.pd;
+#X obj 51 240 #clip 0 255;
+#X text 139 231 <--if no creation argument is given the default range
+is 0-255.;
+#X obj 3 561 doc_also;
+#X obj 14 410 doc_ii 0;
+#X obj 14 445 doc_ii 1;
+#X obj 14 467 doc_ii 2;
+#X obj 14 529 doc_oo 0;
+#X obj 14 326 doc_cc 0;
+#X obj 14 348 doc_cc 1;
+#X text 232 445 same as arg 0;
+#X text 232 467 same as arg 1;
+#X text 232 326 minimum value (like [# max]);
+#X text 232 348 maximum value (like [# min]);
+#X obj 0 0 doc_h;
+#X obj 0 581 doc_f;
+#X obj 3 296 doc_c 2;
+#X obj 3 380 doc_i 3;
+#X obj 3 499 doc_o 1;
+#X obj 97 410 doc_m i0 grid;
+#X obj 97 445 doc_m i1 float int;
+#X obj 97 467 doc_m i2 float int;
+#X obj 97 529 doc_m o0 grid;
+#X obj 97 326 doc_m c0;
+#X obj 97 348 doc_m c1;
+#X connect 0 0 1 0;
+#X connect 1 0 19 0;
+#X connect 2 0 1 1;
+#X connect 4 0 0 0;
+#X connect 4 1 11 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 19 2;
+#X connect 8 0 19 1;
+#X connect 11 0 0 0;
+#X connect 19 0 3 0;
+#X connect 21 1 14 0;
+#X connect 21 1 15 0;
+#X connect 21 1 16 0;
+#X connect 21 1 17 0;
+#X connect 21 1 18 0;
+#X connect 37 1 12 0;
+#X connect 38 1 28 0;
+#X connect 39 1 29 0;
+#X connect 40 1 13 0;
+#X connect 41 1 30 0;
+#X connect 42 1 31 0;
diff --git a/externals/gridflow/doc/flow_classes/#cluster_avg-help.pd b/externals/gridflow/doc/flow_classes/#cluster_avg-help.pd
new file mode 100644
index 00000000..50e844a0
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#cluster_avg-help.pd
@@ -0,0 +1,22 @@
+#N canvas 615 299 632 303 10;
+#X obj 14 60 doc_cc 0;
+#X obj 14 120 doc_ii 0;
+#X text 232 242 counts;
+#X text 232 220 sums;
+#X obj 14 140 doc_ii 1;
+#X obj 14 160 doc_ii 2;
+#X obj 14 220 doc_oo 0;
+#X obj 14 242 doc_oo 1;
+#X obj 0 0 doc_h;
+#X obj 0 274 doc_f;
+#X obj 3 30 doc_c 1;
+#X obj 3 90 doc_i 3;
+#X obj 3 190 doc_o 2;
+#X obj 97 160 doc_m i2 grid;
+#X obj 97 60 doc_m c0 int;
+#X obj 97 220 doc_m o0 grid;
+#X obj 97 242 doc_m o1 grid;
+#X obj 97 140 doc_m i1 float int;
+#X obj 97 120 doc_m i0 grid i;
+#X connect 15 1 3 0;
+#X connect 16 1 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#color-help.pd b/externals/gridflow/doc/flow_classes/#color-help.pd
new file mode 100644
index 00000000..2fd0b3b7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#color-help.pd
@@ -0,0 +1,44 @@
+#N canvas 653 126 632 519 10;
+#X obj 126 114 #color;
+#X text 308 126 <-- vary these;
+#X text 10 27 The [#color] object contains a triple slider for RGB
+value selection on each channel.;
+#X text 198 68 <-- click here;
+#X msg 126 68 255 0 204;
+#X msg 317 79 delegate steady 0;
+#X text 103 470 [hsl];
+#X obj 3 470 doc_also;
+#X text 232 253 whether to remove the color preview;
+#X text 232 209 lower bound;
+#X text 232 231 upper bound;
+#X obj 14 425 doc_oo 0;
+#X obj 14 315 doc_ii 0;
+#X obj 14 209 doc_cc 0;
+#X obj 14 231 doc_cc 1;
+#X obj 14 253 doc_cc 2;
+#X text 232 350 sends the rest of the message as a message to each
+of the sliders but not each of the numboxes.;
+#X text 232 315 replaces the current colour value inside [#color] \,
+including sliders and numboxes.;
+#X text 232 425 of size (3) representing a rgb colour or any other
+rgb-related settings you want to control with [#color].;
+#X obj 0 0 doc_h;
+#X obj 0 490 doc_f;
+#X obj 3 179 doc_c 3;
+#X obj 3 285 doc_i 1;
+#X obj 3 395 doc_o 1;
+#X obj 97 209 doc_m c0 float;
+#X obj 97 231 doc_m c1 float;
+#X obj 97 253 doc_m c2 bool;
+#X obj 97 315 doc_m i0 grid;
+#X obj 97 350 doc_m i0 delegate;
+#X obj 97 425 doc_m o0 grid;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 7 1 6 0;
+#X connect 24 1 9 0;
+#X connect 25 1 10 0;
+#X connect 26 1 8 0;
+#X connect 27 1 17 0;
+#X connect 28 1 16 0;
+#X connect 29 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#contrast-help.pd b/externals/gridflow/doc/flow_classes/#contrast-help.pd
new file mode 100644
index 00000000..7136bd29
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#contrast-help.pd
@@ -0,0 +1,72 @@
+#N canvas 678 0 632 613 10;
+#X obj 77 88 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 97 136 metro 100;
+#X obj 97 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 222 134 hsl 128 15 0 256 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 371 135 hsl 128 15 0 256 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X floatatom 219 154 5 0 0 0 - - -;
+#X floatatom 368 157 5 0 0 0 - - -;
+#X msg 59 65 open bluemarble.jpg;
+#X obj 190 214 #out window;
+#X obj 59 162 #in;
+#X text 8 28 Adjusts the intensity of an image.;
+#X obj 190 189 #contrast;
+#X text 232 327 This value corresponds to the master contrast \, it
+varies the amount of incoming white. The default value is 256 and it
+has no effect.;
+#X text 232 279 This value corresponds to the secondary contrast (inverse
+whiteness) \, it varies the amount of incoming black into the image.
+The default value is 256 and it has no effect.;
+#X obj 103 564 #convolve;
+#X obj 169 564 #posterize;
+#X obj 241 564 #solarize;
+#X obj 307 564 #layer;
+#X text 366 118 contrast about black;
+#X text 216 118 contrast about white;
+#X obj 3 564 doc_also;
+#X obj 14 534 doc_oo 0;
+#X obj 14 415 doc_ii 0;
+#X obj 14 450 doc_ii 1;
+#X obj 14 472 doc_ii 2;
+#X text 232 415 produces a grid like the incoming grid but with different
+constrast.;
+#X text 7 42 resulting values outside 0-255 are automatically clipped.
+;
+#X obj 14 279 doc_cc 0;
+#X obj 14 327 doc_cc 1;
+#X text 232 450 same as arg 0;
+#X text 232 472 same as arg 1;
+#X obj 0 0 doc_h;
+#X obj 0 584 doc_f;
+#X obj 3 249 doc_c 0..2;
+#X obj 3 385 doc_i 3;
+#X obj 3 504 doc_o 1;
+#X obj 97 534 doc_m o0 grid;
+#X obj 97 415 doc_m i0 grid;
+#X obj 97 327 doc_m c1 grid;
+#X obj 97 279 doc_m c0 grid;
+#X obj 97 450 doc_m i1 grid;
+#X obj 97 472 doc_m i2 grid;
+#X connect 0 0 9 0;
+#X connect 1 0 9 0;
+#X connect 2 0 1 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 11 1;
+#X connect 6 0 11 2;
+#X connect 7 0 9 0;
+#X connect 9 0 11 0;
+#X connect 11 0 8 0;
+#X connect 20 1 14 0;
+#X connect 20 1 15 0;
+#X connect 20 1 16 0;
+#X connect 20 1 17 0;
+#X connect 37 1 25 0;
+#X connect 38 1 12 0;
+#X connect 39 1 13 0;
+#X connect 40 1 29 0;
+#X connect 41 1 30 0;
diff --git a/externals/gridflow/doc/flow_classes/#convolve-help.pd b/externals/gridflow/doc/flow_classes/#convolve-help.pd
new file mode 100644
index 00000000..d644340d
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#convolve-help.pd
@@ -0,0 +1,67 @@
+#N canvas 678 0 632 642 10;
+#X obj 43 87 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X msg 255 135 1 1 1 1 1 1 1 1 1;
+#X obj 255 113 loadbang;
+#X obj 255 157 #redim (3 3);
+#X obj 43 158 #in;
+#X obj 43 241 #out window;
+#X obj 103 723 #contrast;
+#X obj 169 723 #posterize;
+#X obj 241 723 #solarize;
+#X obj 307 723 #layer;
+#X obj 43 183 #convolve \, op ^ \, fold + \, seed 0;
+#X text 14 28 [#convolve] is used to perform various transformations
+on images such as blurring \, sharpening \, finding edges \, embossing
+\, cellular automata and many others.;
+#X text 232 316 This is the convolution grid and it gets stored in
+the other object. If rows2 and/or columns 2 are odd numbers \, then
+the centre of convolution is the middle of the convolution grid. If
+they are even numbers \, then the chosen centre will be slightly more
+to the left and/or to the top \, because the actual middle is between
+celle of the grid.;
+#X obj 3 723 doc_also;
+#X obj 14 691 doc_oo 0;
+#X obj 14 443 doc_ii 0;
+#X obj 14 629 doc_ii 1;
+#X text 155 216 here ^ is the parallel operator \, fold is indicated
+by + and 0 is its base (seed).;
+#X obj 14 316 doc_cc 0;
+#X text 232 691 Resulting image.;
+#X text 232 443 Splits the incoming grid into dim(rest...) parts \,
+for each of those parts at (y \, x). A rectangle of such parts \, centered
+around (y \, x) is combined with the convolution grid like a [#] of
+operation op_para. Then each such result is folded like [#fold] of
+operation op_fold and specified base. The results are assembled into
+a grid that is sent to the outlet. Near the borders of the grid \,
+coordinates wrap around. this means the whole grid has to be received
+before production of the next grid starts.;
+#X text 232 629 same as arg 0;
+#X msg 43 135 open scissors.jpg \, bang;
+#X obj 0 0 doc_h;
+#X obj 0 743 doc_f;
+#X obj 3 286 doc_c 0..1;
+#X obj 3 413 doc_i 2;
+#X obj 3 661 doc_o 1;
+#X obj 97 443 doc_m i0 grid;
+#X obj 97 629 doc_m i1 grid;
+#X obj 97 691 doc_m o0 grid;
+#X obj 97 589 doc_m i0 op numop;
+#X obj 97 569 doc_m i0 fold numop;
+#X obj 97 609 doc_m i0 seed grid;
+#X obj 97 316 doc_m c0 grid;
+#X connect 0 0 22 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 10 1;
+#X connect 4 0 10 0;
+#X connect 10 0 5 0;
+#X connect 13 1 6 0;
+#X connect 13 1 7 0;
+#X connect 13 1 8 0;
+#X connect 13 1 9 0;
+#X connect 22 0 4 0;
+#X connect 28 1 20 0;
+#X connect 29 1 21 0;
+#X connect 30 1 19 0;
+#X connect 34 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/#dim-help.pd b/externals/gridflow/doc/flow_classes/#dim-help.pd
new file mode 100644
index 00000000..d86aaa70
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#dim-help.pd
@@ -0,0 +1,39 @@
+#N canvas 647 0 632 473 10;
+#X obj 22 178 print number_of_dimensions;
+#X obj 22 106 #in;
+#X obj 22 130 #dim;
+#X obj 22 154 #to_float;
+#X text 15 37 Outputs grid dimensions (columns \, row \, channels).
+;
+#X text 232 353 The received grid is output as a one dimensional grid
+representing grid dimensions. For example \, a grid sized like dim(240
+\, 320 \, 4) [#dim] will return a grid like dim(3) whose values are
+240 \, 320 \, 4;
+#X obj 3 323 doc_o 1;
+#X obj 103 424 #print;
+#X obj 151 424 #to_float;
+#X obj 217 424 #to_list;
+#X obj 3 424 doc_also;
+#X obj 14 278 doc_ii 0;
+#X obj 14 353 doc_oo 0;
+#X obj 97 278 doc_m i0 grid;
+#X obj 97 353 doc_m o0 grid;
+#X text 185 65 Returns list of dimensions as a grid. Given a grid sized
+like Dim(240 \, 320 \, 4) \, [#dim] will return a grid like Dim(3)
+\, whose values are 240 \, 320 \, 4 .;
+#X text 232 278 ignores any data contained within. sends a grid dim(length
+of dims) containing dims.;
+#X msg 22 66 load working.jpg;
+#X obj 0 0 doc_h;
+#X obj 0 444 doc_f;
+#X obj 3 208 doc_c;
+#X obj 3 248 doc_i 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 10 1 7 0;
+#X connect 10 1 8 0;
+#X connect 10 1 9 0;
+#X connect 13 1 16 0;
+#X connect 14 1 5 0;
+#X connect 17 0 1 0;
diff --git a/externals/gridflow/doc/flow_classes/#downscale_by-help.pd b/externals/gridflow/doc/flow_classes/#downscale_by-help.pd
new file mode 100644
index 00000000..14f427db
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#downscale_by-help.pd
@@ -0,0 +1,63 @@
+#N canvas 676 0 632 699 10;
+#X obj 181 115 metro 10;
+#X obj 181 96 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X floatatom 251 130 5 0 0 0 - - -;
+#X obj 165 144 #in;
+#X msg 165 70 open bluemarble.jpg \, bang;
+#X floatatom 295 143 5 0 0 0 - - -;
+#X obj 251 162 #pack 2;
+#X obj 165 186 #downscale_by;
+#X obj 165 212 #out window;
+#X text 9 24 Scales down a picture by a specified amount.;
+#X obj 103 650 #scale_to;
+#X obj 169 650 #scale_by;
+#X obj 0 0 doc_h;
+#X obj 3 650 doc_also;
+#X obj 3 588 doc_o 1;
+#X obj 14 618 doc_oo 0;
+#X obj 3 491 doc_i 2;
+#X obj 14 521 doc_ii 0;
+#X obj 14 556 doc_ii 1;
+#X obj 14 280 doc_cc 0;
+#X obj 97 280 doc_m c0 grid;
+#X obj 3 250 doc_c 1..2;
+#X obj 97 521 doc_m i0 grid;
+#X text 232 280 The value defines the scale factor. A pack object allows
+you to vary the horizontal and vertical values idenpendently. In the
+example above \, inlet 0 of [#pack] varies the image on a vertical
+axis \, inlet 1 of [#pack] varies the image on a horizontal axis.;
+#X obj 97 556 doc_m i1 grid;
+#X text 232 556 same as arg 0;
+#X text 232 521 Scales down picture by specified amount. (See scale
+factor above);
+#X text 232 618 grid((factor/y) (factor/x) channels);
+#X text 232 354 factor is optional (default is 2).;
+#X obj 97 618 doc_m o0 grid;
+#X obj 14 411 doc_cc 1;
+#X obj 97 411 doc_m c1 symbol;
+#X text 232 411 "smoothly": does the downscale by averaging each block
+of pixels.;
+#X text 232 446 omitted: does the downscale by keeping only the top
+right pixel in the block.;
+#X obj 0 670 doc_f;
+#X text 232 376 if it's a single value \, then that factor is to be
+used for both rows and columns.;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 1;
+#X connect 6 0 7 1;
+#X connect 7 0 8 0;
+#X connect 13 1 10 0;
+#X connect 13 1 11 0;
+#X connect 20 1 23 0;
+#X connect 20 1 28 0;
+#X connect 20 1 35 0;
+#X connect 22 1 26 0;
+#X connect 24 1 25 0;
+#X connect 29 1 27 0;
+#X connect 31 1 32 0;
+#X connect 31 1 33 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_hpgl-help.pd b/externals/gridflow/doc/flow_classes/#draw_hpgl-help.pd
new file mode 100644
index 00000000..672e4689
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_hpgl-help.pd
@@ -0,0 +1,35 @@
+#N canvas 576 129 632 396 10;
+#X obj 0 0 doc_h;
+#X obj 0 367 doc_f;
+#X obj 103 51 #draw_hpgl;
+#X obj 3 283 doc_o 2;
+#X obj 3 131 doc_i 5;
+#X obj 3 91 doc_c 0;
+#X obj 14 313 doc_oo 0;
+#X obj 14 335 doc_oo 1;
+#X obj 14 161 doc_ii 0;
+#X obj 14 183 doc_ii 1;
+#X obj 14 205 doc_ii 2;
+#X obj 14 227 doc_ii 3;
+#X obj 14 251 doc_ii 4;
+#X obj 97 227 doc_m i3 grid;
+#X obj 97 251 doc_m i4 grid;
+#X text 232 227 (x y) start;
+#X text 232 251 (x y) end;
+#X obj 97 161 doc_m i0 grid;
+#X obj 97 183 doc_m i1 grid;
+#X obj 97 205 doc_m i2 grid;
+#X text 232 161 image;
+#X text 232 183 color;
+#X text 232 205 command;
+#X obj 97 335 doc_m o1 bang;
+#X obj 97 313 doc_m o0 grid;
+#X text 232 335 time to draw;
+#X text 232 313 image drawn on;
+#X connect 13 1 15 0;
+#X connect 14 1 16 0;
+#X connect 17 1 20 0;
+#X connect 18 1 21 0;
+#X connect 19 1 22 0;
+#X connect 23 1 25 0;
+#X connect 24 1 26 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_image-help.pd b/externals/gridflow/doc/flow_classes/#draw_image-help.pd
new file mode 100644
index 00000000..a2fd7df4
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_image-help.pd
@@ -0,0 +1,102 @@
+#N canvas 295 0 632 642 10;
+#X obj 172 147 #in;
+#X obj 135 181 #store;
+#X obj 135 46 tgl 15 0 empty empty empty 0 -6 0 8 -233017 -1 -1 0 1
+;
+#X obj 135 74 metro 40;
+#X obj 135 283 #out window \, title #draw_image-help;
+#X obj 172 99 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 188 209 #in;
+#X obj 188 169 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X text 194 101 2 <-- open background image;
+#X text 211 171 1 <-- open foreground image;
+#X obj 387 238 #dim;
+#X obj 387 257 #to_list;
+#X obj 387 276 unpack f f;
+#X obj 393 295 pack f f;
+#X obj 393 314 # / 2;
+#X obj 368 314 # -;
+#X obj 135 307 #mouse;
+#X text 159 48 3 <-- activate rendering;
+#X msg 188 190 load g001.jpg;
+#X msg 172 120 load r001.jpg;
+#X msg 275 257 0 0;
+#X obj 275 238 loadbang;
+#X text 135 331 Move mouse cursor to change layer position;
+#X obj 0 0 doc_h;
+#X obj 3 455 doc_i 3;
+#X obj 3 775 doc_o 1;
+#X obj 14 805 doc_oo 0;
+#X obj 14 485 doc_ii 0;
+#X obj 14 708 doc_ii 1;
+#X obj 14 730 doc_ii 2;
+#X text 232 397 Normally \, you would use the "put" operator \; but
+others (like + and ^) can be interesting for color effects.;
+#X obj 135 258 #draw_image *>>8;
+#X obj 3 367 doc_c 1;
+#X obj 14 397 doc_cc 0;
+#X text 232 485 Background image.;
+#X msg 321 197 tile;
+#X text 232 708 Foreground image.;
+#X text 232 673 If 1 \, foreground image will be repeated to cover
+the background image.;
+#X text 232 529 If 1 \, foreground image (inlet 1) will be combined
+with background image (inlet 0) \, and then blended with background
+image according to transparency of foreground image \, and then inserted
+in the result. If 0 \, the blending doesn't occur \, as the transparency
+level is considered "opaque". Note that with alpha enabled \, the last
+channel of foreground image is cnsidered to represent transparency.
+;
+#X text 232 730 Initial foreground image position (y x) \, corresponding
+to top-left corner of foreground picture.;
+#X text 232 805 Resulting image.;
+#X obj 97 397 doc_m c0 numop;
+#X obj 97 485 doc_m i0 grid;
+#X obj 97 651 doc_m i0 tile;
+#X obj 97 507 doc_m i0 alpha;
+#X text 232 507 \$1=flag;
+#X text 232 651 \$1=flag;
+#X obj 97 708 doc_m i1 grid;
+#X obj 97 730 doc_m i2 (y x);
+#X obj 97 805 doc_m o0 grid;
+#X obj 0 837 doc_f;
+#X obj 97 629 doc_m i0 op;
+#X text 232 629 same as arg 0;
+#X connect 0 0 1 1;
+#X connect 1 0 31 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 16 0;
+#X connect 5 0 19 0;
+#X connect 6 0 10 0;
+#X connect 6 0 31 1;
+#X connect 7 0 18 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 1 13 1;
+#X connect 13 0 14 0;
+#X connect 14 0 15 1;
+#X connect 15 0 31 2;
+#X connect 16 0 15 0;
+#X connect 16 1 15 0;
+#X connect 16 2 15 0;
+#X connect 16 3 15 0;
+#X connect 18 0 6 0;
+#X connect 19 0 0 0;
+#X connect 20 0 31 2;
+#X connect 21 0 20 0;
+#X connect 31 0 4 0;
+#X connect 35 0 31 0;
+#X connect 41 1 30 0;
+#X connect 42 1 34 0;
+#X connect 43 1 46 0;
+#X connect 43 1 37 0;
+#X connect 44 1 45 0;
+#X connect 44 1 38 0;
+#X connect 47 1 36 0;
+#X connect 48 1 39 0;
+#X connect 49 1 40 0;
+#X connect 51 1 52 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_points-help.pd b/externals/gridflow/doc/flow_classes/#draw_points-help.pd
new file mode 100644
index 00000000..21e2c3d2
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_points-help.pd
@@ -0,0 +1,56 @@
+#N canvas 678 62 632 584 10;
+#X msg 21 163 240 320 3 #;
+#X obj 236 155 #outer + (0 9000);
+#X obj 236 174 # cos* 100;
+#X obj 236 193 # + 120;
+#X obj 236 117 #for 0 12 1;
+#X obj 236 100 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 236 136 # * 3000;
+#X obj 237 223 display;
+#X obj 21 183 #draw_points put (255 255 0);
+#X obj 21 203 #out window;
+#X text 26 77 [#draw_points] is not yet ready for use.;
+#X obj 0 0 doc_h;
+#X obj 3 365 doc_i 3;
+#X obj 3 493 doc_o 1;
+#X obj 14 523 doc_oo 0;
+#X obj 14 395 doc_ii 0;
+#X obj 14 439 doc_ii 1;
+#X obj 14 461 doc_ii 2;
+#X obj 3 261 doc_c 0..3;
+#X obj 14 291 doc_cc 0;
+#X obj 14 311 doc_cc 1;
+#X obj 14 333 doc_cc 2;
+#X obj 0 555 doc_f;
+#X obj 97 333 doc_m c2;
+#X obj 97 523 doc_m o0 grid;
+#X obj 97 291 doc_m c0 symbol/numop;
+#X obj 97 311 doc_m c1 grid;
+#X text 232 311 color;
+#X text 232 333 points;
+#X obj 97 395 doc_m i0 grid;
+#X obj 97 439 doc_m i1 grid;
+#X obj 97 461 doc_m i2 grid;
+#X obj 97 417 doc_m i0 op;
+#X text 232 417 same as arg 0;
+#X text 232 439 same as arg 1;
+#X text 232 461 same as arg 2;
+#X text 232 395 image to be drawn on;
+#X text 232 523 image that has been drawn on;
+#X connect 0 0 8 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 3 0 8 2;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 8 0 9 0;
+#X connect 23 1 28 0;
+#X connect 24 1 37 0;
+#X connect 26 1 27 0;
+#X connect 29 1 36 0;
+#X connect 30 1 34 0;
+#X connect 31 1 35 0;
+#X connect 32 1 33 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_polygon-help.pd b/externals/gridflow/doc/flow_classes/#draw_polygon-help.pd
new file mode 100644
index 00000000..a5afe5e9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_polygon-help.pd
@@ -0,0 +1,116 @@
+#N canvas 628 21 632 642 10;
+#X obj 20 349 #out window;
+#X obj 383 128 #color;
+#X obj 383 72 loadbang;
+#X obj 272 107 # rand;
+#X obj 20 256 #clip;
+#X obj 385 199 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -241291
+-1 -1 0;
+#X text 402 200 fill;
+#X msg 385 265 draw \$1;
+#X obj 385 291 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -241291
+-1 -1 0;
+#X text 403 291 none;
+#X msg 385 357 omit \$1;
+#X text 403 306 last;
+#X text 403 320 odd;
+#X obj 385 338 listread none last odd;
+#X obj 20 37 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X obj 43 169 #checkers;
+#X obj 43 150 #for (0 0) (240 320) (1 1);
+#X obj 272 50 f;
+#X obj 297 50 + 1;
+#X obj 272 69 sel 0;
+#X obj 235 126 #store;
+#X obj 20 75 t b b b;
+#X msg 383 109 40 80 100;
+#X obj 50 104 loadbang;
+#X obj 322 50 % 30;
+#X obj 235 164 #fade_lin 4 4;
+#X obj 20 56 metro 33.3667;
+#X obj 385 246 listread fill line point;
+#X text 402 214 line;
+#X text 402 228 point;
+#X msg 272 88 8 2 # 240 320;
+#X msg 459 110 3 # 255;
+#X msg 115 169 240 320 3 #;
+#X obj 6 188 #store;
+#X obj 27 151 bng 15 250 50 0 empty empty empty 17 7 0 10 -241291 -1
+-1;
+#X obj 20 287 shunt;
+#X obj 57 288 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 50 306 #fade (16 4 1);
+#X obj 0 0 doc_h;
+#X obj 3 389 doc_c 0..3;
+#X obj 3 508 doc_i 3;
+#X obj 3 614 doc_o 1;
+#X obj 14 644 doc_oo 0;
+#X obj 14 538 doc_ii 0;
+#X obj 14 560 doc_ii 1;
+#X obj 14 582 doc_ii 2;
+#X obj 14 419 doc_cc 0;
+#X obj 14 454 doc_cc 1;
+#X obj 14 476 doc_cc 2;
+#X obj 20 237 #draw_polygon ^ 1;
+#X text 232 419 Normally \, you would use the "put" operator \; but
+the + and ^ can be interesting for color effects.;
+#X text 232 538 Picture on which the polygon will be superimposed.
+;
+#X text 232 560 Color. (see argument 1);
+#X text 232 454 Color of the polygon.;
+#X text 232 644 Resulting picture.;
+#X text 232 476 Vertices of the polygon.;
+#X text 232 582 Vertices. (see argument 2);
+#X obj 97 419 doc_m c0 symbol/numop;
+#X obj 97 454 doc_m c1 grid;
+#X obj 97 476 doc_m c2 grid;
+#X obj 97 538 doc_m i0 grid;
+#X obj 97 560 doc_m i1 grid;
+#X obj 97 582 doc_m i2 grid;
+#X obj 97 644 doc_m o0 grid;
+#X obj 0 676 doc_f;
+#X connect 1 0 49 1;
+#X connect 2 0 31 0;
+#X connect 3 0 20 1;
+#X connect 4 0 35 0;
+#X connect 5 0 27 0;
+#X connect 7 0 49 0;
+#X connect 8 0 13 0;
+#X connect 10 0 49 0;
+#X connect 13 0 10 0;
+#X connect 14 0 26 0;
+#X connect 15 0 33 1;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
+#X connect 18 0 24 0;
+#X connect 19 0 30 0;
+#X connect 20 0 25 0;
+#X connect 21 0 33 0;
+#X connect 21 1 20 0;
+#X connect 21 2 17 0;
+#X connect 22 0 1 0;
+#X connect 23 0 32 0;
+#X connect 24 0 17 1;
+#X connect 25 0 49 2;
+#X connect 26 0 21 0;
+#X connect 27 0 7 0;
+#X connect 30 0 3 0;
+#X connect 31 0 1 0;
+#X connect 32 0 33 1;
+#X connect 33 0 49 0;
+#X connect 34 0 16 0;
+#X connect 35 0 0 0;
+#X connect 35 1 37 0;
+#X connect 36 0 35 1;
+#X connect 37 0 0 0;
+#X connect 49 0 4 0;
+#X connect 57 1 50 0;
+#X connect 58 1 53 0;
+#X connect 59 1 55 0;
+#X connect 60 1 51 0;
+#X connect 61 1 52 0;
+#X connect 62 1 56 0;
+#X connect 63 1 54 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_rect-help.pd b/externals/gridflow/doc/flow_classes/#draw_rect-help.pd
new file mode 100644
index 00000000..a66a4945
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_rect-help.pd
@@ -0,0 +1,40 @@
+#N canvas 335 118 632 443 10;
+#X obj 0 0 doc_h;
+#X obj 0 414 doc_f;
+#X obj 122 57 #draw_rect;
+#X obj 14 126 doc_cc 0;
+#X obj 14 148 doc_cc 1;
+#X obj 14 170 doc_cc 2;
+#X obj 3 96 doc_c 2..3;
+#X text 232 126 op;
+#X text 232 148 color;
+#X text 232 170 polygon;
+#X obj 97 126 doc_m c0 symbol;
+#X obj 97 148 doc_m c1 grid;
+#X obj 97 170 doc_m c2 grid;
+#X obj 3 202 doc_i 3;
+#X obj 3 352 doc_o 1;
+#X obj 14 382 doc_oo 0;
+#X obj 14 232 doc_ii 0;
+#X obj 14 298 doc_ii 1;
+#X obj 14 320 doc_ii 2;
+#X obj 97 232 doc_m i0 grid;
+#X obj 97 254 doc_m i0 outline;
+#X obj 97 298 doc_m i1 grid;
+#X obj 97 320 doc_m i2 grid;
+#X text 232 298 same as arg 1;
+#X text 232 232 picture to draw on;
+#X text 232 254 0: fill rectangle;
+#X text 232 276 1: draw outline only (1 pixel thickness);
+#X text 232 382 picture drawn on;
+#X obj 97 382 doc_m o0 grid;
+#X text 232 320 same as arg 2;
+#X connect 10 1 7 0;
+#X connect 11 1 8 0;
+#X connect 12 1 9 0;
+#X connect 19 1 24 0;
+#X connect 20 1 26 0;
+#X connect 20 1 25 0;
+#X connect 21 1 23 0;
+#X connect 22 1 29 0;
+#X connect 28 1 27 0;
diff --git a/externals/gridflow/doc/flow_classes/#draw_slider-help.pd b/externals/gridflow/doc/flow_classes/#draw_slider-help.pd
new file mode 100644
index 00000000..fa406625
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#draw_slider-help.pd
@@ -0,0 +1,56 @@
+#N canvas 587 8 632 619 10;
+#X obj 28 87 metro 100;
+#X obj 28 70 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X obj 28 183 #out window;
+#X text 232 413 Grid values are clipped to the high and low values
+stored in the object;
+#X text 232 558 Outputs the modified grid;
+#X text 232 448 An integer can be used to vary the minimum value of
+the range.;
+#X text 232 483 An integer can be used to vary the maximum value of
+the range.;
+#X obj 28 106 #in scissors.jpg;
+#X obj 238 89 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -241291
+-1 -1 0 1;
+#X text 378 88 <-- value to be displayed;
+#X msg 126 135 255 200 150;
+#X text 209 135 <-- colour;
+#X obj 28 164 #draw_slider put (0 255 0) (255 0 255) (40 40 80 200)
+0 127;
+#X text 5 25 Draws a slider-like rectangle on an image.;
+#X obj 0 0 doc_h;
+#X obj 3 383 doc_i 3;
+#X obj 3 528 doc_o 1;
+#X obj 14 558 doc_oo 0;
+#X obj 14 413 doc_ii 0;
+#X obj 14 448 doc_ii 1;
+#X obj 14 483 doc_ii 2;
+#X obj 14 253 doc_cc 0;
+#X obj 14 273 doc_cc 1;
+#X obj 14 293 doc_cc 2;
+#X obj 14 313 doc_cc 3;
+#X obj 14 333 doc_cc 4;
+#X obj 97 333 doc_m c4;
+#X obj 97 253 doc_m c0 symbol/numop;
+#X obj 97 273 doc_m c1 grid[3];
+#X obj 97 293 doc_m c2 grid[3];
+#X obj 97 313 doc_m c3 grid;
+#X obj 3 223 doc_c 6;
+#X obj 14 353 doc_cc 5;
+#X obj 97 353 doc_m c5;
+#X obj 97 413 doc_m i0 grid;
+#X obj 97 448 doc_m i1 float int;
+#X obj 97 483 doc_m i2 float int;
+#X obj 97 558 doc_m o0 grid;
+#X obj 0 590 doc_f;
+#X connect 0 0 7 0;
+#X connect 1 0 0 0;
+#X connect 7 0 12 0;
+#X connect 8 0 12 2;
+#X connect 10 0 12 1;
+#X connect 12 0 2 0;
+#X connect 34 1 3 0;
+#X connect 35 1 5 0;
+#X connect 36 1 6 0;
+#X connect 37 1 4 0;
diff --git a/externals/gridflow/doc/flow_classes/#edit_polygon-help.pd b/externals/gridflow/doc/flow_classes/#edit_polygon-help.pd
new file mode 100644
index 00000000..8ebd5849
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#edit_polygon-help.pd
@@ -0,0 +1,42 @@
+#N canvas 335 118 632 440 10;
+#X obj 0 0 doc_h;
+#X obj 0 411 doc_f;
+#X obj 65 56 #edit_polygon;
+#X obj 3 95 doc_c 3;
+#X obj 14 125 doc_cc 0;
+#X obj 14 147 doc_cc 1;
+#X obj 14 169 doc_cc 2;
+#X obj 97 125 doc_m c0 symbol;
+#X text 232 125 op;
+#X text 232 147 color;
+#X text 232 169 position;
+#X obj 97 147 doc_m c1 grid;
+#X obj 97 169 doc_m c2 grid;
+#X obj 3 201 doc_i 3;
+#X obj 3 327 doc_o 2;
+#X obj 14 357 doc_oo 0;
+#X obj 14 379 doc_oo 1;
+#X obj 14 231 doc_ii 0;
+#X obj 14 273 doc_ii 1;
+#X obj 14 295 doc_ii 2;
+#X obj 97 251 doc_m i0 position;
+#X obj 97 231 doc_m i0 grid;
+#X obj 97 273 doc_m i1 grid;
+#X obj 97 295 doc_m i2 grid;
+#X text 232 295 same as arg 2;
+#X text 232 273 same as arg 1;
+#X text 232 251 from [#out window];
+#X text 201 231 picture to draw on;
+#X text 232 357 picture drawn on;
+#X obj 97 357 doc_m o0 grid;
+#X obj 97 379 doc_m o1 <none>;
+#X text 232 379 for future use;
+#X text 237 54 probably not finished coding this. (?);
+#X connect 7 1 8 0;
+#X connect 11 1 9 0;
+#X connect 12 1 10 0;
+#X connect 20 1 26 0;
+#X connect 22 1 25 0;
+#X connect 23 1 24 0;
+#X connect 29 1 28 0;
+#X connect 30 1 31 0;
diff --git a/externals/gridflow/doc/flow_classes/#extract_diagonal-help.pd b/externals/gridflow/doc/flow_classes/#extract_diagonal-help.pd
new file mode 100644
index 00000000..f21b9272
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#extract_diagonal-help.pd
@@ -0,0 +1,32 @@
+#N canvas 0 0 632 547 10;
+#X obj 53 82 cv/#SVD;
+#X obj 70 104 display;
+#X obj 54 174 display;
+#X msg 53 63 2 2 f # 30 40 50 60;
+#X text 53 43 numbers coming from the equation of an ellipse;
+#X text 101 85 eigenvectors show the direction of axes of the ellipse
+;
+#X text 64 155 eigenvalues show the square of the length of the axes
+;
+#X obj 23 233 #extract_diagonal;
+#X obj 36 257 display;
+#X text 130 232 just keep the diagonal of the matrix;
+#X obj 24 324 display;
+#X text 99 304 just the radiuses;
+#X obj 23 304 # sqrt (f #);
+#X obj 0 0 doc_h;
+#X obj 3 358 doc_c 0;
+#X obj 3 398 doc_i 1;
+#X obj 3 458 doc_o 1;
+#X obj 14 488 doc_oo 0;
+#X obj 14 428 doc_ii 0;
+#X obj 0 518 doc_f;
+#X obj 97 428 doc_m i0 grid;
+#X obj 97 488 doc_m o0 grid;
+#X connect 0 0 2 0;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 3 0 0 0;
+#X connect 7 0 8 0;
+#X connect 7 0 12 0;
+#X connect 12 0 10 0;
diff --git a/externals/gridflow/doc/flow_classes/#fade-help.pd b/externals/gridflow/doc/flow_classes/#fade-help.pd
new file mode 100644
index 00000000..fe3adfe5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#fade-help.pd
@@ -0,0 +1,57 @@
+#N canvas 676 0 632 596 10;
+#X obj 253 236 #out window;
+#X obj 131 111 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 131 150 #in;
+#X floatatom 295 218 5 0 0 0 - - -;
+#X obj 131 89 metro 500;
+#X obj 131 70 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 253 113 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 253 152 #in;
+#X obj 253 91 metro 500;
+#X obj 253 72 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 253 217 #fade;
+#X obj 0 0 doc_h;
+#X obj 3 390 doc_i 2;
+#X obj 3 487 doc_o 1;
+#X obj 14 517 doc_oo 0;
+#X obj 14 420 doc_ii 0;
+#X obj 14 455 doc_ii 1;
+#X obj 3 275 doc_c 1;
+#X obj 97 420 doc_m i0 grid;
+#X obj 97 455 doc_m i1 grid;
+#X text 232 332 indicates the amount of one image being blended with
+the other. (ex: Integer 5 will take 20% (one fifth) of the first image
+and blend it with 80% of the next image.;
+#X obj 3 547 doc_also;
+#X obj 103 547 lop~;
+#X obj 139 547 rzero~;
+#X obj 14 332 doc_cc 0;
+#X obj 97 332 doc_m c0 grid;
+#X text 232 455 same as arg 0;
+#X obj 97 517 doc_m o0 grid;
+#X obj 0 567 doc_f;
+#X text 232 420 grids that are blended into each other over time.;
+#X msg 131 131 load b001.jpg;
+#X msg 253 133 load r001.jpg;
+#X text 11 29 temporal low-pass filter;
+#X connect 1 0 30 0;
+#X connect 2 0 10 0;
+#X connect 3 0 10 1;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 31 0;
+#X connect 7 0 10 0;
+#X connect 8 0 6 0;
+#X connect 9 0 8 0;
+#X connect 10 0 0 0;
+#X connect 18 1 29 0;
+#X connect 19 1 26 0;
+#X connect 21 1 22 0;
+#X connect 21 1 23 0;
+#X connect 25 1 20 0;
+#X connect 30 0 2 0;
+#X connect 31 0 7 0;
diff --git a/externals/gridflow/doc/flow_classes/#fade_lin-help.pd b/externals/gridflow/doc/flow_classes/#fade_lin-help.pd
new file mode 100644
index 00000000..189ec0b9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#fade_lin-help.pd
@@ -0,0 +1,36 @@
+#N canvas 684 0 632 543 10;
+#X obj 0 0 doc_h;
+#X obj 3 212 doc_c 2;
+#X obj 77 134 #fade_lin;
+#X obj 3 296 doc_i 3;
+#X obj 3 454 doc_o 1;
+#X obj 14 326 doc_ii 0;
+#X obj 14 400 doc_ii 1;
+#X obj 14 422 doc_ii 2;
+#X obj 14 484 doc_oo 0;
+#X obj 14 242 doc_cc 0;
+#X obj 14 264 doc_cc 1;
+#X obj 97 242 doc_m c0 grid;
+#X obj 97 264 doc_m c1 grid;
+#X text 232 242 maxraise;
+#X text 232 264 maxdrop;
+#X obj 97 326 doc_m i0 grid;
+#X text 232 326 produces on outlet 0 a piecewise-linear nonrecurrent
+fading according to the flow of incoming messages. For example \, if
+maxraise=2 and maxdrop=4 \, then with each new message an output is
+produced that is at most 2 more or 4 less than the previous output.
+;
+#X obj 97 400 doc_m i1 grid;
+#X obj 97 422 doc_m i2 grid;
+#X text 232 400 same as arg 0;
+#X text 232 422 same as arg 1;
+#X obj 0 514 doc_f;
+#X text 16 33 non-linear temporal lowpass filter;
+#X text 16 47 (piecewise-constant);
+#X text 14 61 it is named "lin" because it has an output similar to
+[line] \, though the input is much different.;
+#X connect 11 1 13 0;
+#X connect 12 1 14 0;
+#X connect 15 1 16 0;
+#X connect 17 1 19 0;
+#X connect 18 1 20 0;
diff --git a/externals/gridflow/doc/flow_classes/#fastblur-help.pd b/externals/gridflow/doc/flow_classes/#fastblur-help.pd
new file mode 100644
index 00000000..12ce00a6
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#fastblur-help.pd
@@ -0,0 +1,90 @@
+#N canvas 310 131 632 598 10;
+#N canvas 0 0 450 300 test 0;
+#X obj 264 137 # +;
+#X obj 23 58 #for (0 0) (5 5) (1 1);
+#X obj 23 96 #fold & \, seed 1;
+#X obj 23 41 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 23 115 #convolve (3 3 # 1 2 3 4 5 6 7 8 9) \, wrap 0 \, anti
+0;
+#X obj 22 77 # == 2;
+#X obj 23 134 #print;
+#X obj 264 156 #print;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 1 0;
+#X connect 4 0 6 0;
+#X connect 5 0 2 0;
+#X restore 403 28 pd test convolve attr;
+#X obj 20 54 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 38 55 metro 33.3667;
+#X obj 100 93 loadbang;
+#X obj 84 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 38 110 #store;
+#X obj 38 290 #out window;
+#X obj 39 330 display;
+#X obj 38 309 fps detailed;
+#X obj 84 110 #in teapot.png;
+#X obj 248 56 f;
+#X obj 274 56 + 1;
+#X obj 149 301 #pack;
+#X obj 38 85 t b b;
+#X obj 38 131 #fastblur;
+#X obj 255 96 expr 1+100*pow(sin($f1/25) \, 4);
+#X obj 244 76 expr 1+100*pow(sin($f1/20) \, 4);
+#X obj 150 167 vsl 15 128 1 128 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 170 167 vsl 15 128 1 128 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 248 37 spigot;
+#X obj 294 38 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 38 270 #gamma 700;
+#X text 313 38 AUTO;
+#X obj 0 0 doc_h;
+#X obj 3 423 doc_i 2;
+#X obj 3 361 doc_c 1;
+#X obj 3 507 doc_o 1;
+#X obj 14 537 doc_oo 0;
+#X obj 14 453 doc_ii 0;
+#X obj 14 475 doc_ii 1;
+#X obj 14 391 doc_cc 0;
+#X obj 0 569 doc_f;
+#X obj 97 537 doc_m o0;
+#X obj 97 391 doc_m c0 grid;
+#X text 232 391 (y x) kernel size;
+#X obj 97 453 doc_m i0 grid;
+#X obj 97 475 doc_m i1 grid;
+#X text 232 475 same as arg 0;
+#X text 232 453 image to be blurred;
+#X text 232 537 image blurred;
+#X connect 1 0 2 0;
+#X connect 2 0 13 0;
+#X connect 3 0 9 0;
+#X connect 4 0 9 0;
+#X connect 5 0 14 0;
+#X connect 6 0 8 0;
+#X connect 8 0 7 0;
+#X connect 9 0 5 1;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 10 0 16 0;
+#X connect 11 0 10 1;
+#X connect 12 0 14 1;
+#X connect 13 0 5 0;
+#X connect 13 1 19 0;
+#X connect 14 0 21 0;
+#X connect 15 0 18 0;
+#X connect 16 0 17 0;
+#X connect 17 0 12 0;
+#X connect 18 0 12 1;
+#X connect 19 0 10 0;
+#X connect 20 0 19 1;
+#X connect 21 0 6 0;
+#X connect 32 1 39 0;
+#X connect 33 1 34 0;
+#X connect 35 1 38 0;
+#X connect 36 1 37 0;
diff --git a/externals/gridflow/doc/flow_classes/#fft-help.pd b/externals/gridflow/doc/flow_classes/#fft-help.pd
new file mode 100644
index 00000000..1b240df9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#fft-help.pd
@@ -0,0 +1,73 @@
+#N canvas 653 206 632 642 10;
+#X obj 13 144 #cast f;
+#X obj 13 236 #cast i;
+#X obj 13 86 #in teapot.png;
+#X obj 32 64 loadbang;
+#X obj 13 65 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 13 106 t a a;
+#X obj 13 198 #fft;
+#X msg 23 169 help;
+#X msg 43 197 skip \$1;
+#X obj 64 163 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X obj 52 106 s orig;
+#X obj 66 312 r orig;
+#X obj 13 331 #out window;
+#X obj 13 274 # + 128;
+#X obj 13 293 #clip;
+#X obj 13 125 #outer * (1 0);
+#X obj 13 255 #inner (1 0);
+#X text 89 255 convert complex to real (kicking dummy imaginary);
+#X text 100 125 convert real to complex (introducing dummy imaginary=0)
+;
+#X obj 13 217 # / (f # 16);
+#X obj 0 0 doc_h;
+#X obj 3 355 doc_c 0;
+#X obj 3 395 doc_i 1;
+#X obj 3 589 doc_o 1;
+#X obj 14 619 doc_oo 0;
+#X obj 14 425 doc_ii 0;
+#X obj 0 651 doc_f;
+#X obj 13 312 #join 1;
+#X obj 97 619 doc_m o0 grid;
+#X obj 97 425 doc_m i0 grid;
+#X obj 97 491 doc_m i0 sign;
+#X obj 97 535 doc_m i0 skip;
+#X text 232 557 1: skip the y dimension (do fft only along x);
+#X text 20 35 spatial fft;
+#X obj 97 447 doc_m i0 real;
+#X text 232 535 0: don't skip the y dimension (do fft along both y
+and x);
+#X text 232 491 1: forward fft;
+#X text 232 513 -1: backward fft;
+#X text 232 447 0: complex fft;
+#X text 232 469 1: real fft;
+#X text 232 425 grid to apply fft on;
+#X text 232 619 grid that fft was applied on;
+#X connect 0 0 6 0;
+#X connect 1 0 16 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 15 0;
+#X connect 5 1 10 0;
+#X connect 6 0 19 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 9 0 8 0;
+#X connect 11 0 27 1;
+#X connect 13 0 14 0;
+#X connect 14 0 27 0;
+#X connect 15 0 0 0;
+#X connect 16 0 13 0;
+#X connect 19 0 1 0;
+#X connect 27 0 12 0;
+#X connect 28 1 41 0;
+#X connect 29 1 40 0;
+#X connect 30 1 36 0;
+#X connect 30 1 37 0;
+#X connect 31 1 32 0;
+#X connect 31 1 35 0;
+#X connect 34 1 39 0;
+#X connect 34 1 38 0;
diff --git a/externals/gridflow/doc/flow_classes/#finished-help.pd b/externals/gridflow/doc/flow_classes/#finished-help.pd
new file mode 100644
index 00000000..46a31bdb
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#finished-help.pd
@@ -0,0 +1,54 @@
+#N canvas 648 0 632 642 10;
+#X text 21 37 a bang is emitted every time a grid transmission ends
+;
+#X obj 23 114 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 23 85 #finished;
+#X obj 0 0 doc_h;
+#X obj 3 568 doc_i 1;
+#X obj 3 630 doc_o 1;
+#X obj 3 528 doc_c 0;
+#X obj 14 660 doc_oo 0;
+#X obj 14 598 doc_ii 0;
+#X obj 97 598 doc_m i0 grid;
+#X obj 97 660 doc_m o0 bang;
+#X text 232 598 a bang is emitted every time a grid transmission ends.
+;
+#X obj 0 710 doc_f;
+#X obj 23 66 t a a;
+#X obj 89 66 #convolve (1 3 # 1 2 1);
+#X text 90 85 this is a pattern where [t b a] doesn't cut it \, because
+the bang would be output too early \, as it gets output at GRID_BEGIN
+time (the time at which the grid message is sent). But [#convolve]
+only outputs its contents after GRID_FLOW time \, which is what [#finished]
+ensures. However you still need a [t a a] \, because [#finished]'s
+GRID_FINISH time must happen after [#convolve]'s GRID_FINISH \, so
+that you can be sure that [#convolve] is really finished with producing
+its output.;
+#X obj 3 690 doc_also;
+#X obj 103 690 #t;
+#X text 39 278 the 2nd exception is that it definitely doesn't support
+any control-recursion (an object can't start processing a new message
+before it has finished processing its message).;
+#X obj 410 221 pdp_qt;
+#X obj 410 252 print;
+#X msg 409 199;
+#X text 40 327 the third exception is that the GRID atom type is not
+officially recognised by PureData because PureData provides no means
+for externals to register new atom types. You can see the effect of
+this in how GEM uses the POINTER atom type in an unstable way (which
+is also how GridFlow used to do it);
+#X text 38 215 this is one of GridFlow's exceptions to how much grid-processing
+is like normal pd message passing. there is also the [#t] class that
+provides a shortcut for the most common use pattern of [#t].;
+#X text 41 416 the fourth exception is that GridInlets support multiple
+selectors with quite peculiar autocasts \, meaning that [# +] can't
+support the equivalent of the 'list' message in the [+] class.;
+#X text 40 479 much of the text of this page should really go somewhere
+else \, but there is no place for it yet.;
+#X connect 2 0 1 0;
+#X connect 9 1 11 0;
+#X connect 13 0 2 0;
+#X connect 13 1 14 0;
+#X connect 16 1 17 0;
+#X connect 19 0 20 0;
diff --git a/externals/gridflow/doc/flow_classes/#fold-help.pd b/externals/gridflow/doc/flow_classes/#fold-help.pd
new file mode 100644
index 00000000..0120aad9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#fold-help.pd
@@ -0,0 +1,80 @@
+#N canvas 678 0 632 661 10;
+#X obj 98 184 display;
+#X obj 29 252 display;
+#X text 26 38 Treats the grid as a grid of one- dimensional grids such
+that the same operation (here addition) will be performed on all its
+elements together with the base value. the results are combined back.
+each #fold operation removes a dimension. syntax: #fold <two-input
+operation> <starting value>;
+#X obj 143 249 #to_float;
+#X obj 143 274 print values;
+#X text 6 721 some other forms:;
+#X obj 140 722 #fold *;
+#X obj 17 695 #fold + \, seed 0;
+#X obj 211 722 #fold ^;
+#X obj 284 722 #fold &;
+#X obj 355 722 #fold |;
+#N canvas 0 0 500 313 more 1;
+#X obj 98 82 display;
+#X obj 28 48 #import (2 2 2);
+#X obj 29 170 display;
+#X msg 28 27 1 3 1 3 1 3 1 5;
+#X text 154 24 <-- clicking here creates a grid through [#import];
+#X obj 122 170 #to_float;
+#X obj 122 195 print values;
+#X obj 28 137 #fold + \, seed (0 0);
+#X connect 1 0 0 0;
+#X connect 1 0 7 0;
+#X connect 3 0 1 0;
+#X connect 5 0 6 0;
+#X connect 7 0 2 0;
+#X connect 7 0 5 0;
+#X restore 160 694 pd more info;
+#X msg 28 129 1 3 1 3 1 3 1 3 1 3 1 5;
+#X obj 28 153 #import (2 3 2);
+#X obj 28 224 #fold +;
+#X text 203 129 <-- clicking here creates a grid through [#import]
+;
+#X obj 3 324 doc_c 1;
+#X obj 3 386 doc_i 1;
+#X obj 3 570 doc_o 1;
+#X obj 0 0 doc_h;
+#X obj 14 600 doc_oo 0;
+#X obj 14 416 doc_ii 0;
+#X obj 14 354 doc_cc 0;
+#X text 219 155 [#fold +] computes totals;
+#X text 221 176 [#fold inv+] is an alternated sum (+/-);
+#X text 225 203 [#fold *] can compute the size of a grid using its
+dimension list;
+#X text 229 240 [#fold &] can mean "for all";
+#X text 228 260 [#fold |] can mean "there exists (at least one)";
+#X text 224 282 [#fold ^] can mean "there exists an odd number of..."
+;
+#X obj 97 354 doc_m c0 symbol/numop;
+#X text 232 354 the operator to fold with.;
+#X obj 97 416 doc_m i0 grid;
+#X obj 97 477 doc_m i0 op;
+#X obj 97 499 doc_m i0 seed;
+#X text 232 477 same as arg 0;
+#X text 232 416 replaces every subgrid by the result of a cascade on
+that subgrid. Doing that with seed value 0 and operation + on grid
+"2 3 5 7" will compute ((((0+2)+3)+5)+7) find the total "17".;
+#X text 232 499 the initial value for the folding. (default: whatever
+does nothing for the chosen op \; e.g. 0 + \, 0 - \, 1 * \, ...). this
+can be a grid of any size \, and this decides the size of the subgrids
+we are working on.;
+#X obj 97 600 doc_m o0 grid;
+#X text 232 600 Outputs a grid that has one less dimension than the
+input.;
+#X obj 0 632 doc_f;
+#X connect 3 0 4 0;
+#X connect 12 0 13 0;
+#X connect 13 0 0 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
+#X connect 14 0 3 0;
+#X connect 29 1 30 0;
+#X connect 31 1 35 0;
+#X connect 32 1 34 0;
+#X connect 33 1 36 0;
+#X connect 37 1 38 0;
diff --git a/externals/gridflow/doc/flow_classes/#for-help.pd b/externals/gridflow/doc/flow_classes/#for-help.pd
new file mode 100644
index 00000000..28903e51
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#for-help.pd
@@ -0,0 +1,83 @@
+#N canvas 661 0 632 642 10;
+#X floatatom 13 197 5 0 0 0 - - -;
+#X floatatom 45 219 5 0 0 0 - - -;
+#X floatatom 78 238 5 0 0 0 - - -;
+#X obj 13 329 #print;
+#X obj 33 296 display;
+#X text 119 238 <-- step value;
+#X text 90 217 <-- upper bound;
+#X text 60 194 <-- lower bound;
+#X obj 13 261 #for 0 8 1;
+#X obj 264 328 #print;
+#X obj 314 288 display;
+#X msg 264 198 0 0;
+#X msg 369 244 1 1;
+#X msg 326 223 4 4;
+#X text 232 484 Upper bound;
+#X text 232 506 Step value;
+#X text 232 449 Lower bound. As with the other arguments \, they are
+overwritten when another value is given.;
+#X text 414 244 <-- step value (1);
+#X text 373 222 <-- upper bound (2);
+#X text 309 197 <-- lower bound (3);
+#X text 26 38 When given scalar bounds \, works like a regular [for]
+object plugged to a [#import] tuned for a Dim(size) where size is the
+number of values produced by a bang to that [for].;
+#X text 232 656 Sets the upper bound;
+#X text 232 678 Sets the step value;
+#X text 232 740 The result of the operation is a single dimension grid
+in the case of scalar values and variable dimensions for vectors.;
+#X obj 0 0 doc_h;
+#X obj 3 538 doc_i 3;
+#X obj 3 419 doc_c 3;
+#X text 232 568 activate object (send output);
+#X text 232 590 Sets the lower bound and activate;
+#X text 232 634 Sets the lower bound without activating;
+#X text 26 84 When given vector bounds \, will work like any number
+of [for] objects producing all possible combinations of their values
+in the proper order. (try it below);
+#X text 27 132 the formula for knowing the size of the output will
+be is floor((to-from)/step).;
+#X obj 14 740 doc_oo 0;
+#X obj 14 506 doc_cc 2;
+#X text 232 612 the three arguments at once;
+#X obj 14 449 doc_cc 0;
+#X obj 14 484 doc_cc 1;
+#X obj 14 568 doc_ii 0;
+#X obj 3 710 doc_o 1;
+#X obj 14 656 doc_ii 1;
+#X obj 14 678 doc_ii 2;
+#X text 11 177 With scalar bounds:;
+#X text 262 178 With vector bounds:;
+#X obj 97 612 doc_m i0 list;
+#X obj 97 568 doc_m i0 bang;
+#X obj 97 634 doc_m i0 set;
+#X obj 97 449 doc_m c0 grid;
+#X obj 97 484 doc_m c1 grid;
+#X obj 97 506 doc_m c2 grid;
+#X obj 97 590 doc_m i0 grid;
+#X obj 97 656 doc_m i1 grid;
+#X obj 97 678 doc_m i2 grid;
+#X obj 0 798 doc_f;
+#X obj 264 267 #for (0 0) (8 3) (1 1);
+#X obj 97 740 doc_m o0 grid;
+#X connect 0 0 8 0;
+#X connect 1 0 8 1;
+#X connect 2 0 8 2;
+#X connect 8 0 4 0;
+#X connect 8 0 3 0;
+#X connect 11 0 53 0;
+#X connect 12 0 53 2;
+#X connect 13 0 53 1;
+#X connect 43 1 34 0;
+#X connect 44 1 27 0;
+#X connect 45 1 29 0;
+#X connect 46 1 16 0;
+#X connect 47 1 14 0;
+#X connect 48 1 15 0;
+#X connect 49 1 28 0;
+#X connect 50 1 21 0;
+#X connect 51 1 22 0;
+#X connect 53 0 10 0;
+#X connect 53 0 9 0;
+#X connect 54 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/#from_pix-help.pd b/externals/gridflow/doc/flow_classes/#from_pix-help.pd
new file mode 100644
index 00000000..d92aa497
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#from_pix-help.pd
@@ -0,0 +1,89 @@
+#N canvas 679 122 632 642 10;
+#X text 169 629 \, game_of_life_gem.pd in the examples folder;
+#X text 232 575 Grid with 4 channels;
+#X text 232 478 With one boolean argument that selects the order in
+which the y dimension of the Grid will be read \, defaults to '1';
+#X text 103 629 [#to_pix];
+#X obj 37 128 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X msg 54 127 yflip \$1;
+#X obj 22 39 gemhead;
+#X obj 22 107 pix_image;
+#X msg 391 55 create \, 1;
+#X obj 391 36 loadbang;
+#X msg 455 56 destroy;
+#X text 36 201 Note : The fps is dependent on the gemwin framerate
+;
+#X text 101 184 <-- imports gemlist into Grids;
+#X text 232 456 Has to be a 'pix' gemlist;
+#X text 232 597 Passthrough outlet for gem chain;
+#X obj 0 0 doc_h;
+#X obj 3 298 doc_c 0;
+#X obj 3 545 doc_o 2;
+#X obj 3 629 doc_also;
+#X obj 14 575 doc_oo 0;
+#X obj 14 597 doc_oo 1;
+#X obj 3 338 doc_i 2;
+#X obj 14 368 doc_ii 0;
+#X obj 14 513 doc_ii 1;
+#X text 232 513 dummy inlet existing only for weird reasons \, please
+ignore.;
+#X obj 97 478 doc_m i0 yflip;
+#X obj 97 575 doc_m o0 grid;
+#X obj 0 649 doc_f;
+#X msg 30 82 open images/babbage.jpg;
+#X obj 97 513 doc_m i1 <none>;
+#X msg 186 90 open \$1;
+#X obj 186 71 openpanel;
+#X obj 186 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1
+-1;
+#X obj 30 62 loadbang;
+#X obj 22 242 fps;
+#X floatatom 22 261 5 0 0 0 - - -;
+#X obj 22 223 #out window \, title imported_pix;
+#X msg 159 109 cast b;
+#X msg 159 147 cast i;
+#X obj 22 179 #import_pix;
+#X obj 97 368 doc_m i0 cast;
+#X text 232 368 numbertype of grid to be output;
+#X msg 159 128 cast s;
+#X obj 97 390 doc_m i0 colorspace;
+#X text 232 412 colorspace rgb: output 3 channels;
+#X text 232 390 colorspace rgba: output 4 channels;
+#X msg 259 148 colorspace rgb;
+#X msg 259 168 colorspace rgba;
+#X obj 390 85 gemwin 150;
+#X text 232 434 (default: rgba);
+#X obj 97 456 doc_m i0 gem_state;
+#X obj 97 597 doc_m o1 gem_state;
+#X connect 4 0 5 0;
+#X connect 5 0 39 0;
+#X connect 6 0 7 0;
+#X connect 7 0 39 0;
+#X connect 8 0 48 0;
+#X connect 9 0 8 0;
+#X connect 10 0 48 0;
+#X connect 18 1 3 0;
+#X connect 18 1 0 0;
+#X connect 25 1 2 0;
+#X connect 26 1 1 0;
+#X connect 28 0 7 0;
+#X connect 29 1 24 0;
+#X connect 30 0 7 0;
+#X connect 31 0 30 0;
+#X connect 32 0 31 0;
+#X connect 33 0 28 0;
+#X connect 34 0 35 0;
+#X connect 36 0 34 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 36 0;
+#X connect 40 1 41 0;
+#X connect 42 0 39 0;
+#X connect 43 1 44 0;
+#X connect 43 1 45 0;
+#X connect 43 1 49 0;
+#X connect 46 0 39 0;
+#X connect 47 0 39 0;
+#X connect 50 1 13 0;
+#X connect 51 1 14 0;
diff --git a/externals/gridflow/doc/flow_classes/#gamma-help.pd b/externals/gridflow/doc/flow_classes/#gamma-help.pd
new file mode 100644
index 00000000..adbec0dd
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#gamma-help.pd
@@ -0,0 +1,29 @@
+#N canvas 535 121 632 375 10;
+#X obj 0 0 doc_h;
+#X obj 0 346 doc_f;
+#X obj 57 63 #gamma;
+#X obj 3 118 doc_c 1;
+#X obj 3 180 doc_i 2;
+#X obj 3 264 doc_o 1;
+#X obj 14 148 doc_cc 0;
+#X obj 14 210 doc_ii 0;
+#X obj 14 232 doc_ii 1;
+#X obj 14 294 doc_oo 0;
+#X obj 3 326 doc_also;
+#X obj 103 326 # gamma;
+#X text 175 63 accelerated (cached) version of [# gamma];
+#X obj 97 210 doc_m i0 grid;
+#X obj 97 148 doc_m c0 float/int;
+#X obj 97 232 doc_m i1 float int;
+#X obj 97 294 doc_m o0 grid;
+#X text 232 148 positive int;
+#X text 175 82 note: this only accepts a single float argument \, whereas
+[# gamma] allows a grid argument.;
+#X text 232 232 same as arg 0;
+#X text 232 210 pixels to apply on;
+#X text 232 294 output pixels;
+#X connect 10 1 11 0;
+#X connect 13 1 20 0;
+#X connect 14 1 17 0;
+#X connect 15 1 19 0;
+#X connect 16 1 21 0;
diff --git a/externals/gridflow/doc/flow_classes/#grade-help.pd b/externals/gridflow/doc/flow_classes/#grade-help.pd
new file mode 100644
index 00000000..d05aeaea
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#grade-help.pd
@@ -0,0 +1,45 @@
+#N canvas 690 0 632 680 10;
+#X text 143 55 splits a dim[a... \, b] grid into dim[b] vectors that
+each contain numbers from 0 to b-1 indicating the ordering of the values.
+the result is a dim[a... \, b] grid.;
+#X floatatom 19 114 5 0 0 0 - - -;
+#X floatatom 60 114 5 0 0 0 - - -;
+#X floatatom 101 114 5 0 0 0 - - -;
+#X floatatom 142 114 5 0 0 0 - - -;
+#X obj 19 146 #pack 4;
+#X obj 19 179 #grade;
+#X obj 19 208 #print;
+#X obj 0 0 doc_h;
+#X obj 3 250 doc_c 0;
+#X obj 3 290 doc_i 1;
+#X obj 3 350 doc_o 1;
+#X obj 14 380 doc_oo 0;
+#X obj 14 320 doc_ii 0;
+#X obj 97 320 doc_m i0 grid;
+#X obj 97 380 doc_m o0 grid;
+#X text 232 380 splits a Dim[A... \, B] grid into Dim[B] vectors \,
+producing new Dim[B] vectors that each contain numbers from 0 to B-1
+indicating the ordering of the values. The result is a Dim[A... \,
+B] grid.;
+#X text 232 441 for example \, connecting a [#grade] to a [#outer ignore
+0] to a [#store] object \, storing a single vector into [#store] \,
+and sending the same vector to [#grade] \, will sort the values of
+the vector. however for higher-dimensional grids \, what should go
+between [#store] and [#grade] to achieve the same result would be more
+complex.;
+#X text 232 541 you may achieve different kinds of sorting by applying
+various filters before [#grade]. the possibilities are unlimited. if
+you plug [#grade] directly into another [#grade] \, you will get the
+inverse arrangement \, which allows to take the sorted values and make
+them unsorted in the original way. note that this is really not the
+same as just listing the values backwards.;
+#X obj 0 651 doc_f;
+#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 6 0;
+#X connect 6 0 7 0;
+#X connect 15 1 16 0;
+#X connect 15 1 17 0;
+#X connect 15 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#greyscale_to_rgb-help.pd b/externals/gridflow/doc/flow_classes/#greyscale_to_rgb-help.pd
new file mode 100644
index 00000000..c98ea289
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#greyscale_to_rgb-help.pd
@@ -0,0 +1,26 @@
+#N canvas 693 0 632 471 10;
+#X obj 19 161 s xx;
+#X obj 19 185 r xx;
+#X obj 19 105 #in;
+#X obj 19 141 #rgb_to_greyscale;
+#X obj 19 205 #greyscale_to_rgb;
+#X obj 19 243 #out window;
+#X msg 19 74 load bluemarble.jpg;
+#X obj 0 0 doc_h;
+#X obj 3 278 doc_c 0;
+#X obj 3 318 doc_i 1;
+#X obj 3 380 doc_o 1;
+#X obj 14 348 doc_ii 0;
+#X obj 14 410 doc_oo 0;
+#X obj 97 348 doc_m i0;
+#X obj 97 410 doc_m o0;
+#X text 232 410 rgb pixels;
+#X text 232 348 greyscale pixels;
+#X obj 0 442 doc_f;
+#X connect 1 0 4 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 6 0 2 0;
+#X connect 13 1 16 0;
+#X connect 14 1 15 0;
diff --git a/externals/gridflow/doc/flow_classes/#hello-help.pd b/externals/gridflow/doc/flow_classes/#hello-help.pd
new file mode 100644
index 00000000..d759b412
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#hello-help.pd
@@ -0,0 +1,23 @@
+#N canvas 610 97 632 367 10;
+#X obj 92 137 #out window;
+#X obj 92 117 #hello;
+#X obj 92 77 loadbang;
+#X obj 0 0 doc_h;
+#X obj 3 170 doc_c;
+#X obj 0 334 doc_f;
+#X obj 3 210 doc_i 1;
+#X obj 14 240 doc_ii 0;
+#X obj 97 240 doc_m i0 list;
+#X text 232 240 Size of the grid.;
+#X obj 3 272 doc_o 1;
+#X obj 14 302 doc_oo 0;
+#X obj 97 302 doc_m o0 grid;
+#X text 9 35 Generates a television test pattern of 7 colour bars à
+la SMPTE.;
+#X text 232 302 Returns a grid representing the 7 colour bars.;
+#X msg 92 97 200 200;
+#X connect 1 0 0 0;
+#X connect 2 0 15 0;
+#X connect 8 1 9 0;
+#X connect 12 1 14 0;
+#X connect 15 0 1 0;
diff --git a/externals/gridflow/doc/flow_classes/#hueshift-help.pd b/externals/gridflow/doc/flow_classes/#hueshift-help.pd
new file mode 100644
index 00000000..7b5853d7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#hueshift-help.pd
@@ -0,0 +1,20 @@
+#N canvas 692 0 632 364 10;
+#X obj 0 0 doc_h;
+#X obj 65 74 #hueshift;
+#X obj 3 105 doc_c 0..1;
+#X obj 3 165 doc_i 2;
+#X obj 3 275 doc_o 1;
+#X obj 14 195 doc_ii 0;
+#X obj 14 243 doc_ii 1;
+#X obj 14 135 doc_cc 0;
+#X obj 14 305 doc_oo 0;
+#X obj 97 135 doc_m c0 float;
+#X obj 97 195 doc_m i0 grid;
+#X obj 97 243 doc_m i1 float;
+#X text 232 243 same as arg 0;
+#X obj 97 305 doc_m o0 grid;
+#X text 232 195 RGB picture that gets hueshifted by a rotation in the
+colorwheel by the specified angle \; it gets sent to outlet 0;
+#X obj 0 335 doc_f;
+#X connect 10 1 14 0;
+#X connect 11 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/#import-help.pd b/externals/gridflow/doc/flow_classes/#import-help.pd
new file mode 100644
index 00000000..2620c142
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#import-help.pd
@@ -0,0 +1,88 @@
+#N canvas 648 0 632 642 10;
+#X msg 55 123 reset;
+#X obj 13 59 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X msg 13 123 200;
+#X obj 13 100 until;
+#X msg 13 79 230400;
+#X obj 13 177 #out window;
+#X text 232 250 The argument establishes grid dimensions in parentheses
+in the order of columns \, rows and grid dimensions.;
+#X text 232 456 Symbols are considered as a list of ascii characters.
+;
+#X text 232 478 Like a sequence of ints sent one after another \, except
+in a single message.;
+#X text 232 680 The grid resulting from the incoming integers and/or
+grids is output from the outlet.;
+#X text 99 24 This object allows you to produce grids from non-grid
+data \, such as integers and lists of integers. This object also reframes/resyncs
+grids so that multiple grids may be joined together \, or single grids
+may be split. That kind of operation is already done implicitly in
+many cases (e.g. sending an integer or list to a grid-receiving inlet)
+but using this object you have greater flexibility on the conversion.
+;
+#X text 232 421 This equivalent to filtering the grid through an [#to_float]
+object. It is over ten times faster.;
+#X msg 157 125 per_message;
+#X msg 158 147 240 320 3;
+#X text 232 347 Begins a new grid if there is no current grid. puts
+that integer in the current grid. ends the grid if it is full. the
+constructed grid is not stored: it is streamed. the stream is buffered
+\, so the output is in packets of about a thousand numbers.;
+#X text 232 579 "per message" : the grid will shape itself according
+to the incoming data. Almost obsolete as sending a list to any grid
+inlet will result in the same except the latter can not be cast to
+other than int32.;
+#X text 232 535 "to_ascii \$1" converts ints as decimal in ascii codes
+;
+#X obj 294 166 #import;
+#X msg 294 144 to_ascii \$1;
+#X floatatom 294 124 5 0 0 0 - - -;
+#X obj 294 188 #print;
+#X obj 0 0 doc_h;
+#X obj 3 317 doc_i 2;
+#X obj 13 149 #import (240 320 3);
+#X obj 3 650 doc_o 1;
+#X obj 3 220 doc_c 2;
+#X text 232 285 default: i;
+#X obj 14 347 doc_ii 0;
+#X obj 14 557 doc_ii 1;
+#X obj 14 250 doc_cc 0;
+#X obj 14 285 doc_cc 1;
+#X obj 97 250 doc_m c0 grid;
+#X obj 97 285 doc_m c1 numtype;
+#X obj 97 347 doc_m i0 float;
+#X obj 97 456 doc_m i0 symbol;
+#X obj 97 478 doc_m i0 list;
+#X obj 97 513 doc_m i0 reset;
+#X text 232 513 aborts the current grid if there is one.;
+#X obj 97 535 doc_m i0 to_ascii;
+#X obj 97 421 doc_m i0 grid;
+#X obj 97 579 doc_m i1 per_message;
+#X obj 97 557 doc_m i1 grid;
+#X obj 14 680 doc_oo 0;
+#X obj 97 680 doc_m o0 grid;
+#X obj 0 725 doc_f;
+#X text 232 557 same as arg 0;
+#X connect 0 0 23 0;
+#X connect 1 0 4 0;
+#X connect 2 0 23 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 12 0 23 1;
+#X connect 13 0 23 1;
+#X connect 17 0 20 0;
+#X connect 18 0 17 0;
+#X connect 19 0 18 0;
+#X connect 23 0 5 0;
+#X connect 31 1 6 0;
+#X connect 32 1 26 0;
+#X connect 33 1 14 0;
+#X connect 34 1 7 0;
+#X connect 35 1 8 0;
+#X connect 36 1 37 0;
+#X connect 38 1 16 0;
+#X connect 39 1 11 0;
+#X connect 40 1 15 0;
+#X connect 41 1 45 0;
+#X connect 43 1 9 0;
diff --git a/externals/gridflow/doc/flow_classes/#in-help.pd b/externals/gridflow/doc/flow_classes/#in-help.pd
new file mode 100644
index 00000000..cbb4cd46
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#in-help.pd
@@ -0,0 +1,236 @@
+#N canvas 679 0 632 642 10;
+#X obj 354 172 #out window;
+#X text 13 34 This object imports a grid \, usually an image \, video
+or live stream.;
+#X msg 362 126 open working.jpg;
+#X obj 354 106 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 55 181 <--click here;
+#X text 232 759 "loop 0" - turns off the loop option. The video stops
+once it reaches the end.;
+#X text 232 1060 Signals the end of a file and when a file is unreadable.
+;
+#X text 232 1038 Displays the resulting grid when connected to [#out
+window];
+#N canvas 82 93 663 454 quicktime 0;
+#X text 9 9 The following messages can be used to set parameters for
+video (.mov) files.;
+#X text 128 283 different versions of LibQuickTime may include support
+for different codecs \, and some may also support entirely different
+wrapper formats such as AVI.;
+#X text 129 367 Codecs must be set before first frame is written.;
+#X text 128 330 QuickTime library for Macintosh: Apple QuickTime (some
+codecs/features may not be available).;
+#X obj 9 272 cnv 15 24 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X msg 38 230 codec jpg;
+#X msg 23 116 framerate 33;
+#X msg 33 203 colorspace rgb;
+#X msg 18 78 size 400 600;
+#X obj 10 272 #in;
+#X text 145 117 Number of frames per second.;
+#X msg 32 171 parameter jpeg_quality 85;
+#X text 187 147 Determines window size when reading a video file.;
+#X text 129 230 quicktime library for linux accepts LibQuickTime (libquicktime.so).
+codecs currently available are: Raw \, jpeg \, png \, mipa \, yuv2
+\, yuv4.;
+#X text 134 84 Sets height and width. Must be set before setting the
+codec parameters and after setting framerate and codec.;
+#X text 107 230 <--;
+#X text 108 80 <--;
+#X text 119 118 <--;
+#X text 108 80 <--;
+#X text 108 80 <--;
+#X text 162 147 <--;
+#X text 212 173 <--;
+#X text 139 206 <--;
+#X text 237 174 Sets compression quality (100 being the highest quality
+\, but a large file. 75-85 is the standard setting).;
+#X text 163 209 Other colorspaces include rgba \, bgr \, bgra \, yuv
+\, yuva.;
+#X msg 10 54 open example.mov;
+#X msg 28 145 force_size 480 640;
+#X obj 103 427 #record;
+#X text 15 427 see also :;
+#X connect 5 0 9 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 0;
+#X connect 11 0 9 0;
+#X connect 25 0 9 0;
+#X connect 26 0 9 0;
+#X restore 251 964 pd quicktime file messages;
+#X obj 354 150 #in;
+#X floatatom 202 195 5 0 0 0 - - -;
+#X msg 202 151 set 2;
+#X msg 202 107 loop 0;
+#X msg 202 129 loop 1;
+#X floatatom 32 285 5 0 0 0 - - -;
+#X msg 202 173 rewind;
+#X obj 41 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 17 227 #in;
+#X text 39 98 <--click here;
+#X obj 17 96 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 17 120 metro 33.3;
+#X obj 356 234 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 356 280 #out window;
+#X obj 356 258 #in sewing.jpg;
+#X text 378 234 <--click here;
+#X text 183 947 For info about messages specifically for quickTime
+files \, click on:;
+#N canvas 150 0 874 560 more 0;
+#X msg 191 388 open videodev \$1 \, get;
+#X msg 52 147 brightness 1000;
+#X msg 41 124 hue 1000;
+#X msg 26 101 color 1000;
+#X msg 65 171 contrast 1000;
+#X msg 14 78 whiteness 1000;
+#X msg 80 264 channel 2;
+#X msg 80 294 tuner 2;
+#X msg 81 324 norm 2;
+#X msg 81 352 frequency 2;
+#X msg 190 456 transfer mmap 4;
+#X msg 191 356 transfer read;
+#X msg 190 434 colorspace RGB24;
+#X msg 191 411 size 400 600;
+#X obj 14 441 #in;
+#X obj 192 172 #contrast;
+#X text 166 172 or;
+#X text 306 411 Sets height and width of the input.;
+#X text 322 488 In the case of mmap \, the extra numeric argument sets
+the queue length in number of frames \, so you can select an appropriate
+tradeoff between efficiency and latency.;
+#X text 16 12 Grid Settings;
+#X text 322 457 This is the standard and fastest way to receive pictures
+from the camera.;
+#X text 121 99 Message "get brightness" or "get" followed by any of
+the other colour attributes will display its values in the console.
+;
+#X text 375 390 Opens video device.;
+#X text 331 435 Supported values are RGB24 or YUV420P.;
+#X text 14 48 Color Adjustments;
+#X text 144 75 Values from 0 to 65535;
+#X text 283 412 <--;
+#X text 309 435 <--;
+#X text 345 390 <--;
+#X text 300 456 <--;
+#X text 287 357 <--;
+#X text 310 357 Some cameras/drivers only support "transfer read" and
+not mmap.;
+#X text 6 520 see also :;
+#X obj 92 520 #camera;
+#X connect 0 0 14 0;
+#X connect 1 0 14 0;
+#X connect 2 0 14 0;
+#X connect 3 0 14 0;
+#X connect 4 0 14 0;
+#X connect 5 0 14 0;
+#X connect 6 0 14 0;
+#X connect 7 0 14 0;
+#X connect 8 0 14 0;
+#X connect 9 0 14 0;
+#X connect 10 0 14 0;
+#X connect 11 0 14 0;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X restore 251 925 pd more info about video devices;
+#X text 183 908 For info about messages specifically for video devices
+\, click on:;
+#X text 169 213 (and turn off the metro);
+#X text 244 195 <-- vary this;
+#X text 352 74 IMAGE FILES:;
+#X text 12 72 VIDEO FILES:;
+#X obj 28 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 380 106 <-- click here;
+#X text 68 265 <-- sends a bang upon reaching;
+#X text 97 278 the end of the file;
+#X obj 17 305 #out window \, title video;
+#X text 232 724 "loop 1" - Restarts a video each time it reaches the
+end (default setting).;
+#X obj 41 248 route bang;
+#X msg 24 147 open violoncelle.mov;
+#X obj 0 0 doc_h;
+#X obj 3 450 doc_i 1;
+#X obj 3 1008 doc_o 2;
+#X obj 14 480 doc_ii 0;
+#X obj 14 1038 doc_oo 0;
+#X obj 14 1060 doc_oo 1;
+#X obj 3 332 doc_c 1..2;
+#X text 164 389 auto-open with auto-detect of the format-handler;
+#X text 207 409 auto-open with manual choice of the format-handler
+;
+#X obj 97 794 doc_m i0 open;
+#X obj 97 851 doc_m i0 set;
+#X obj 97 667 doc_m i0 close;
+#X obj 97 829 doc_m i0 rewind;
+#X obj 97 724 doc_m i0 loop;
+#X obj 97 645 doc_m i0 float int;
+#X obj 97 1038 doc_m o0 grid;
+#X obj 97 1060 doc_m o1 bang;
+#X obj 3 1127 doc_also;
+#X obj 103 1127 #out;
+#X obj 32 370 #in;
+#X obj 33 391 #in filename.suffix;
+#X obj 34 411 #in handler filename.suffix;
+#X text 64 369 nothing opened \, you have to open by yourself;
+#X text 232 794 \$1=filename. sends it as a resource to [#in]. For
+example: "open sewing.jpg".;
+#X obj 97 480 doc_m i0 bang;
+#X obj 97 1082 doc_m o1 float int;
+#X text 232 1082 frame number of the frame currently being viewed.
+Applies to formats that have frame numbers \, i.e. video.;
+#X text 232 480 A bang reads a frame and sends it through the outlet.
+Since frames from videos and live streams are read as a series of individual
+grids \, successive bangs advance through the frames. A bang reads
+a frame and sends it through the outlet. Since frames from videos and
+live streams are read as a series of individual grids \, successive
+bangs advance through the frames. this is format-specific. most formats
+produce grids that have dimensions (rows columns rgb). In formats that
+read from a file \, reading another picture will continue if there
+are several pictures in the same file \, but if the end of file is
+reached instead \, it will rewind and send the first picture again.
+;
+#X obj 0 1147 doc_f;
+#X text 232 667 Closes the video input device. Only necessary when
+you are using a live capture device.;
+#X text 232 829 Will rewind video to the beginning.;
+#X text 232 851 select the video frame numbered \$1 \, where 0 is the
+first frame. A bang must be sent to [#in] in order to display the frame.
+this only works with video file formats.;
+#X text 232 645 same as set \$1 \, bang;
+#X obj 97 702 doc_m i0 load;
+#X text 232 702 shortcut for open \$1 \, bang \, close;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 9 0 0 0;
+#X connect 10 0 17 0;
+#X connect 11 0 17 0;
+#X connect 12 0 17 0;
+#X connect 13 0 17 0;
+#X connect 15 0 17 0;
+#X connect 17 0 36 0;
+#X connect 17 1 14 0;
+#X connect 17 1 38 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 23 0;
+#X connect 23 0 22 0;
+#X connect 32 0 17 0;
+#X connect 38 0 16 0;
+#X connect 39 0 17 0;
+#X connect 49 1 63 0;
+#X connect 50 1 71 0;
+#X connect 51 1 69 0;
+#X connect 52 1 70 0;
+#X connect 53 1 37 0;
+#X connect 53 1 5 0;
+#X connect 54 1 72 0;
+#X connect 55 1 7 0;
+#X connect 56 1 6 0;
+#X connect 57 1 58 0;
+#X connect 64 1 67 0;
+#X connect 65 1 66 0;
+#X connect 73 1 74 0;
diff --git a/externals/gridflow/doc/flow_classes/#inner-help.pd b/externals/gridflow/doc/flow_classes/#inner-help.pd
new file mode 100644
index 00000000..612a2c6a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#inner-help.pd
@@ -0,0 +1,56 @@
+#N canvas 666 0 632 642 10;
+#X obj 0 0 doc_h;
+#X obj 3 158 doc_c 1;
+#X obj 3 218 doc_i 2;
+#X obj 3 560 doc_o 1;
+#X obj 14 188 doc_cc 0;
+#X obj 14 248 doc_ii 0;
+#X obj 14 528 doc_ii 1;
+#X obj 14 590 doc_oo 0;
+#X text 232 248 Splits the Dim(anyA... \, lastA) left-hand grid into
+Dim(anyA...) pieces of Dim(lastA) size.;
+#X text 232 283 Splits the Dim(firstB \, anyB...) right-hand grid into
+Dim(anyB...) pieces of Dim(firstB) size.;
+#X text 232 318 On every piece pair \, does [#] using the specified
+op_para operation \, followed by a [#fold] using the specified op_fold
+operator and base value.;
+#X text 232 366 creates a Dim(anyA... \, anyB...) grid by assembling
+all the results together.;
+#X text 232 401 (note: lastA must be equal to firstB.);
+#X text 232 528 same as arg 0;
+#X text 232 471 the operation that combines the values from the two
+grids together. this defaults to "*" (as in the matrix product);
+#X text 232 423 the operation that combines the result of the "op"
+operations together. this defaults to "+" (as in the matrix product)
+;
+#X text 232 506 the base value for the fold;
+#X obj 0 640 doc_f;
+#X obj 97 248 doc_m i0 grid;
+#X obj 97 188 doc_m c0 grid;
+#X obj 97 471 doc_m i0 op;
+#X obj 97 506 doc_m i0 seed;
+#X obj 97 528 doc_m i1 grid;
+#X obj 97 590 doc_m o0 grid;
+#X obj 97 423 doc_m i0 fold;
+#X obj 3 620 doc_also;
+#X obj 103 620 #outer *;
+#X obj 163 620 #fold +;
+#X obj 62 89 #inner;
+#X text 160 48 think of this one as a special combination of [#outer]
+\, [#] and [#fold]. this is one of the most complex operations. It
+is very useful for performing linear transforms like rotations \, scalings
+\, shearings \, and some kinds of color remappings. A linear transform
+is done by something called matrix multiplication \, which happens
+to be [#inner]. [#inner] also does dot product and other funny operations.
+;
+#X connect 18 1 8 0;
+#X connect 18 1 9 0;
+#X connect 18 1 10 0;
+#X connect 18 1 11 0;
+#X connect 18 1 12 0;
+#X connect 20 1 14 0;
+#X connect 21 1 16 0;
+#X connect 22 1 13 0;
+#X connect 24 1 15 0;
+#X connect 25 1 26 0;
+#X connect 25 1 27 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.aalib-help.pd b/externals/gridflow/doc/flow_classes/#io.aalib-help.pd
new file mode 100644
index 00000000..e97765d1
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.aalib-help.pd
@@ -0,0 +1,45 @@
+#N canvas 684 0 632 568 10;
+#X obj 0 0 doc_h;
+#X obj 3 67 doc_c;
+#X msg 48 109 open aalib X11;
+#X text 161 105 Normally "X11" with uppercase X \; else consult the
+AALib manual.;
+#X text 161 141 you can pass "commandline options" of AALib here \,
+after "X11" or whichever other thing you chose instead of "X11".;
+#X obj 3 179 doc_i 1;
+#X obj 3 477 doc_o 1;
+#X obj 14 209 doc_ii 0;
+#X obj 14 507 doc_oo 0;
+#X obj 97 507 doc_m o0 grid;
+#X obj 97 209 doc_m i0 grid;
+#X text 232 209 grid(rows columns 1): converts a greyscale image to
+an ascii image and possibly displays it. note that the image is typically
+downscaled by a factor of 2 by aalib itself.;
+#X text 232 257 grid(rows columns 2): the inverse of "dump". Both together
+in a loop allow to post-process aalib's buffer before displaying. Goes
+well with "draw" \, "autodraw". the first channel is for the ascii
+codes and the second channel is for the attributes (colour \, blink).
+;
+#X obj 97 432 doc_m i0 print;
+#X text 232 432 \$1=y \$2=x \$3=attr \$4=text where text is a symbol
+and the rest are ints.;
+#X obj 97 331 doc_m i0 autodraw;
+#X text 232 331 "autodraw 1" does a "draw" after each incoming grid.
+;
+#X text 232 353 "autodraw 0" does not.;
+#X obj 97 375 doc_m i0 draw;
+#X text 232 375 eventually you need to use this if you use "autodraw
+0".;
+#X obj 97 397 doc_m i0 dump;
+#X text 232 397 produces a Dim[y \, x \, 2] grid whose two channels
+are ascii character codes and character attributes.;
+#X obj 0 539 doc_f;
+#X text 232 507 result of 'dump';
+#X connect 9 1 23 0;
+#X connect 10 1 11 0;
+#X connect 10 1 12 0;
+#X connect 13 1 14 0;
+#X connect 15 1 16 0;
+#X connect 15 1 17 0;
+#X connect 18 1 19 0;
+#X connect 20 1 21 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.grid-help.pd b/externals/gridflow/doc/flow_classes/#io.grid-help.pd
new file mode 100644
index 00000000..fc30e0cc
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.grid-help.pd
@@ -0,0 +1,44 @@
+#N canvas 689 0 632 608 10;
+#X obj 0 0 doc_h;
+#X obj 3 160 doc_i 1;
+#X text 62 37 This is GridFlow's special file format. This is the only
+I/O format that can hold nearly anything that the [#store] object can.
+;
+#X obj 3 92 doc_c ...;
+#X msg 62 127 open foo.grid;
+#X obj 14 190 doc_ii 0;
+#X obj 97 465 doc_m i0 type;
+#X text 232 465 type that the output will be written as. (#out only)
+;
+#X text 232 487 supported: uint8 int32 and perhaps some others;
+#X obj 97 369 doc_m i0 headerful;
+#X obj 97 404 doc_m i0 headerless;
+#X text 232 369 cancels "headerless" (and back to reading the real
+.grid format);
+#X text 232 404 instead of reading .grid files with header \, will
+read raw data \, faking a .grid header to itself. It will use the hereby
+specified dimension list \, as well as two other settings: type and
+endian.;
+#X obj 97 190 doc_m i0 endian;
+#X text 232 190 When writing "raw" data \, a file may be considered
+a long string of base 256 digits (called bytes) \, but different computers
+have different conventions for dealing with them:;
+#X text 232 238 big: A number will be written starting with the biggest
+digit. This is the natural way on the Macintosh \, Sun \, Amiga \,
+and so on.;
+#X text 232 286 little: A number will be written starting with the
+smallest digit. This is the natural way on the Intel 386/Pentium.;
+#X text 232 321 same: A number will be written in whichever way is
+more natural on this computer. The natural way is slightly faster to
+handle. This is the default setting.;
+#X obj 0 579 doc_f;
+#X obj 3 519 doc_o 1;
+#X obj 14 549 doc_oo 0;
+#X connect 6 1 7 0;
+#X connect 6 1 8 0;
+#X connect 9 1 11 0;
+#X connect 10 1 12 0;
+#X connect 13 1 14 0;
+#X connect 13 1 15 0;
+#X connect 13 1 16 0;
+#X connect 13 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.jpeg-help.pd b/externals/gridflow/doc/flow_classes/#io.jpeg-help.pd
new file mode 100644
index 00000000..363c48a7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.jpeg-help.pd
@@ -0,0 +1,16 @@
+#N canvas 666 0 632 245 10;
+#X obj 0 0 doc_h;
+#X obj 3 70 doc_i 1;
+#X obj 3 30 doc_c;
+#X obj 3 176 doc_o;
+#X obj 0 216 doc_f;
+#X obj 14 100 doc_ii 0;
+#X obj 97 100 doc_m i0 bang;
+#X obj 97 122 doc_m i0 grid;
+#X obj 97 144 doc_m i0 quality;
+#X text 232 100 read image (when in [#in]);
+#X text 232 122 write image (when in [#out]);
+#X text 232 144 quality percentage (when in [#out]);
+#X connect 6 1 9 0;
+#X connect 7 1 10 0;
+#X connect 8 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.png-help.pd b/externals/gridflow/doc/flow_classes/#io.png-help.pd
new file mode 100644
index 00000000..0a2f1d05
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.png-help.pd
@@ -0,0 +1,18 @@
+#N canvas 674 0 632 267 10;
+#X obj 0 0 doc_h;
+#X obj 3 70 doc_i 1;
+#X obj 14 100 doc_ii 0;
+#X obj 97 100 doc_m i0 grid;
+#X text 232 100 1-channel is taken as Y 8 (greyscale);
+#X text 232 122 2-channel is taken as YA 8:8 (greyscale and transparency)
+;
+#X text 232 144 3-channel is taken as RGB 8:8:8;
+#X text 232 166 4-channel is taken as RGBA 8:8:8 (colour with transparency)
+;
+#X obj 3 30 doc_c;
+#X obj 3 198 doc_o;
+#X obj 0 238 doc_f;
+#X connect 3 1 4 0;
+#X connect 3 1 5 0;
+#X connect 3 1 6 0;
+#X connect 3 1 7 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.quicktime-help.pd b/externals/gridflow/doc/flow_classes/#io.quicktime-help.pd
new file mode 100644
index 00000000..c4cb6713
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.quicktime-help.pd
@@ -0,0 +1,69 @@
+#N canvas 668 0 632 642 10;
+#X obj 0 0 doc_h;
+#X obj 3 218 doc_i 1;
+#X obj 14 248 doc_ii 0;
+#X text 190 43 Support for .mov files. This format supports frame-seek
+and frame-tell. Uses the HW-QuickTime library aka QuickTime4Linux (libquicktime.so).
+There is also a variant on the same library and that project is just
+called LibQuickTime. Some versions of those libraries may include support
+for different codecs \, and some also may support entirely different
+wrapper formats such as AVI. On Macintosh \, Apple QuickTime is used
+instead \, but several of the following messages may not be available.
+;
+#X obj 97 248 doc_m i0 codec;
+#X text 232 248 Allowed values are at least: raw \, jpeg \, png \,
+mjpa \, yuv2 \, yuv4. Some other values may allowed \, depending on
+the version of the library and which codec plugins are installed. Must
+be set before the first frame is written. only applies to [#out]. Choosing
+a codec is important because codecs influence greatly the speed of
+encoding \, the speed of decoding \, the size of the written file \,
+and its fidelity to the original content. Note that there exist other
+Apple-QuickTime codecs that are not supported by HW-QuickTime.;
+#X obj 97 584 doc_m i0 parameter;
+#X text 232 584 \$1=symbol \$2=int;
+#X text 232 606 Sets special codec-specific settings. For example:
+"parameter jpeg_quality 75";
+#X obj 97 479 doc_m i0 framerate;
+#X text 232 479 \$1=int;
+#X text 232 501 Sets the framerate of the file. This is not used by
+GridFlow when reading a file \, but other programs usually care.;
+#X obj 97 387 doc_m i0 colorspace;
+#X text 232 387 Allowed values are rgb \, rgba \, bgr \, bgra \, yuv
+\, yuva. Normally you don't need this.;
+#X obj 97 641 doc_m i0 size;
+#X text 232 641 \$1=height \$2=width;
+#X obj 3 721 doc_o 1;
+#X obj 3 901 doc_also;
+#X text 232 663 Forces a window size when writing. Usually this has
+to be used _after_ setting the framerate and codec and _before_ setting
+the codec-parameters. (Strange. Sorry.);
+#X text 232 422 \$1=height \$2=width;
+#X text 232 444 forces a window size when reading. this is a workaround
+for a problem in HW-QuickTime.;
+#X obj 3 178 doc_c;
+#X obj 0 921 doc_f;
+#X obj 97 422 doc_m i0 force_size;
+#X obj 97 549 doc_m i0 get;
+#X text 232 549 output various properties of the video that is open
+(#in) (see outlet 0);
+#X obj 14 751 doc_oo 0;
+#X obj 103 901 #io.mpeg;
+#X obj 97 751 doc_m o0 grid;
+#X obj 97 771 doc_m o0 codec symbol;
+#X obj 97 791 doc_m o0 depth float;
+#X obj 97 811 doc_m o0 framerate float;
+#X obj 97 831 doc_m o0 frames float;
+#X obj 97 851 doc_m o0 height float;
+#X obj 97 871 doc_m o0 width float;
+#X connect 4 1 5 0;
+#X connect 6 1 7 0;
+#X connect 6 1 8 0;
+#X connect 9 1 10 0;
+#X connect 9 1 11 0;
+#X connect 12 1 13 0;
+#X connect 14 1 15 0;
+#X connect 14 1 18 0;
+#X connect 17 1 27 0;
+#X connect 23 1 19 0;
+#X connect 23 1 20 0;
+#X connect 24 1 25 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.videodev-help.pd b/externals/gridflow/doc/flow_classes/#io.videodev-help.pd
new file mode 100644
index 00000000..af431363
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.videodev-help.pd
@@ -0,0 +1,77 @@
+#N canvas 676 0 632 642 10;
+#X obj 0 0 doc_h;
+#X obj 26 50 #in videodev;
+#X obj 3 99 doc_c ...;
+#X obj 3 160 doc_i 1;
+#X obj 3 898 doc_o 1;
+#X obj 3 995 doc_also;
+#X obj 103 995 #io:quicktimecamera;
+#X msg 28 129 open videodev /dev/video0;
+#X obj 14 190 doc_ii 0;
+#X obj 97 210 doc_m i0 brightness;
+#X obj 97 539 doc_m i0 hue;
+#X obj 97 338 doc_m i0 colour;
+#X obj 97 378 doc_m i0 contrast;
+#X obj 97 868 doc_m i0 whiteness;
+#X obj 97 418 doc_m i0 get;
+#X obj 97 519 doc_m i0 help;
+#X obj 97 230 doc_m i0 channel;
+#X obj 97 768 doc_m i0 tuner;
+#X obj 97 579 doc_m i0 norm;
+#X obj 97 398 doc_m i0 frequency;
+#X obj 97 619 doc_m i0 transfer symbol;
+#X text 232 619 "read";
+#X text 232 663 "mmap": \$1=nframes (default:2);
+#X text 232 685 This is the normal (and fast) way of transferring pictures
+from the camera.;
+#X text 232 641 Some cameras/drivers only support this instead of mmap.
+;
+#X obj 97 828 doc_m i0 white_red;
+#X obj 97 788 doc_m i0 white_blue;
+#X obj 97 848 doc_m i0 white_speed;
+#X obj 97 808 doc_m i0 white_delay;
+#X obj 97 190 doc_m i0 auto_gain;
+#X obj 97 559 doc_m i0 noise_reduction;
+#X obj 97 358 doc_m i0 compression;
+#X obj 97 250 doc_m i0 colorspace;
+#X text 232 250 "y":;
+#X text 232 272 "yuv":;
+#X text 232 294 "rgb":;
+#X text 232 316 "magic":;
+#X obj 97 599 doc_m i0 size;
+#X text 188 764 \$1=y \$2=x;
+#X text 232 453 "min": minimum values for "size";
+#X text 232 475 "max": maximum values for "size";
+#X text 232 497 default: gets all attributes.;
+#X text 232 418 gets a specific attribute. a message is sent through
+right outlet.;
+#X text 232 720 In case of mmap \, the extra numeric argument sets
+the queue length in number of frames \, so you can select an appropriate
+tradeoff between efficiency and latency.;
+#X obj 0 1015 doc_f;
+#X obj 229 995 #io.dc1394;
+#X obj 14 928 doc_oo 0;
+#X obj 97 928 doc_m o0 grid;
+#X obj 97 950 doc_m o0 <any>;
+#X text 232 928 image coming out;
+#X text 232 950 most any inlet 0 message is also an outlet 0 message
+whose output can be triggered using 'get'.;
+#X text 130 51 get images from a V4L1 camera interface.;
+#X text 130 66 this is for Linux only.;
+#X connect 5 1 6 0;
+#X connect 5 1 45 0;
+#X connect 14 1 42 0;
+#X connect 14 1 39 0;
+#X connect 14 1 40 0;
+#X connect 14 1 41 0;
+#X connect 20 1 21 0;
+#X connect 20 1 24 0;
+#X connect 20 1 22 0;
+#X connect 20 1 23 0;
+#X connect 20 1 43 0;
+#X connect 32 1 33 0;
+#X connect 32 1 34 0;
+#X connect 32 1 35 0;
+#X connect 32 1 36 0;
+#X connect 47 1 49 0;
+#X connect 48 1 50 0;
diff --git a/externals/gridflow/doc/flow_classes/#io.x11-help.pd b/externals/gridflow/doc/flow_classes/#io.x11-help.pd
new file mode 100644
index 00000000..2ccd9a29
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#io.x11-help.pd
@@ -0,0 +1,150 @@
+#N canvas 648 0 632 642 10;
+#X obj 0 0 doc_h;
+#X obj 3 517 doc_c 0..;
+#X msg 40 554 open x11;
+#X msg 40 574 open x11 here;
+#X msg 40 614 open x11 local 0;
+#X text 178 555 synonym of "open x11 here".;
+#X text 181 574 connects to the default X11 server \, according to
+your environment variable "DISPLAY".;
+#X text 182 614 connects to a display server on this machine.;
+#X msg 39 645 open x11 remote foo.org 0;
+#X text 201 644 connects to a remote X11 display server using TCP.
+Port number will be 6000 plus the display number \, because of the
+X11 standard.;
+#X text 141 38 supports 15 \, 16 \, 24 \, 32-bit truecolor displays
+;
+#X text 141 57 now also support 8-bit indexed displays \, using a private
+colormap configured as 3:3:2 RGB. When using 8-bit you can specify
+the "use_stripes" option to use a completely different color scheme
+involving R \, G \, B diagonal stripes \, a kind of 6:6:6 RGB spread
+over three pixels.;
+#X text 141 129 If you are using Windows or MacOS 10: you will have
+to install a X11 server. This will emulate Unix display on your OS.
+(note: Unix systems also need a X11 server \, but it's built-in and
+handles the video driver directly). In the case of MacOS 10 and QNX
+that both use non-X11 display technology on top of a basically Unix
+OS \, the OS comes with a X11 server \, but it may be on a "bundled
+software" CD.;
+#X msg 37 700 open x11 display foo.org:0;
+#X obj 3 736 doc_i 1;
+#X obj 14 766 doc_ii 0;
+#X obj 97 788 doc_m i0 grid;
+#X text 232 788 with [#out] \, displays a frame;
+#X obj 97 766 doc_m i0 bang;
+#X text 232 766 with [#in] \, captures a frame;
+#X obj 97 852 doc_m i0 out_size;
+#X text 232 852 \$1=height \$2=width. changes the window's size \,
+just like sending a grid dim(height \, width \, 3) would. this affects
+the size of screen captures too.;
+#X obj 97 920 doc_m i0 setcursor;
+#X text 232 920 \$1=cursor_id. \$1=cursor_id. Selects one of the 64
+predefined cursors of X11. (Note that if your cursor table has them
+numbered from 0 to 126 using only even numbers \, then those cursor
+numbers are all doubled compared to the ones GridFlow uses.);
+#X obj 97 810 doc_m i0 hidecursor;
+#X text 232 810 This makes the cursor invisible.;
+#X obj 3 1903 doc_also;
+#X obj 103 1903 #io.quartz;
+#X obj 175 1903 #io.sdl;
+#X text 141 227 Destroying the object (or sending "close") should close
+the window.;
+#X obj 35 65 #out x11;
+#X text 140 259 because of the design of Xlib \, or if any of the connections
+involved crashes \, then the whole program has to be terminated. (don't
+you love xlib). Something similar happens if you close any of the windows
+yourself \, but IIRC this could be fixed.;
+#X text 140 330 only one window may be used per x11 connection (to
+simplify matters \; this doesn't reduce flexibility).;
+#X text 140 375 there is an additional argument that may be added to
+every "open" message \; if you don't put it \, a new toplevel window
+is created. if you put "root" then the screen's wallpaper will be used
+instead (it may fail to work with some popular window managers). You
+can also put a window number \, e.g. 0x28003ff \, you may connect to
+an existing window \; you can find out the number of a window by using
+a tool like xwininfo \, part of X11 standard tools.;
+#X obj 3 1084 doc_o 1;
+#X obj 14 1114 doc_oo 0;
+#X obj 97 1114 doc_m o0 grid;
+#X text 232 1114 grid(rows columns rgb);
+#X text 232 1136 resizes the window to the size of the grid \; encodes
+that grid in the display's pixel format \; also displays it if autodraw
+&gt \; 0 the values must be in range 0-255 \, or else they will be
+"wrapped".;
+#X obj 97 1415 doc_m o0 position;
+#X text 232 1415 \$1=y \$2=x \$3=buttons;
+#X text 232 1437 This is emitted every time the cursor moves inside
+the window connected to this format handler. This is also emitted when
+the cursor is dragging from inside to outside the window. This is also
+emitted when a mouse button is pressed.;
+#X text 232 1511 The y and x coordinates are relative to the upper
+right corner of the window. Specific button states may be extracted
+from the button value by applying [>> buttonnumber] and then checking
+whether the result is odd.;
+#X text 232 1572 0: Shift;
+#X text 232 1594 1: Caps Lock;
+#X text 232 1616 2: Control;
+#X text 232 1638 3: Alternate;
+#X text 232 1660 4: NumLock;
+#X text 232 1682 5: (unknown);
+#X text 232 1704 6: Meta or Window Key;
+#X text 232 1726 7: Scroll Lock;
+#X text 232 1748 8: Left Mouse Button;
+#X text 232 1770 9: Middle Mouse Button or Mouse Wheel Click;
+#X text 232 1792 10: Right Mouse Button;
+#X text 232 1814 11: Wheel Up;
+#X text 232 1836 12: Wheel Down;
+#X text 232 1858 NOTE: This message form may become longer in the future
+\, but the already defined parts will stay the same.;
+#X obj 97 1210 doc_m o0 keypress;
+#X obj 97 1345 doc_m o0 keyrelease;
+#X text 232 1210 \$1=y \$2=x \$3=buttons \$4=keyname;
+#X text 232 1345 \$1=y \$2=x \$3=buttons \$4=keyname;
+#X text 232 1232 Similar to position above \, but this is emitted when
+a keyboard key is pressed while this format handler's window is active.
+Keynames follow the X11 standard \, similarly to PureData's [keyname]
+object. The only exception is that keynames that are digits get prefixed
+by a capital D so that they don't get mistaken for actual numbers.
+NOTE: This message form may become longer in the future \, but the
+already defined parts will stay the same.;
+#X text 232 1367 Same as keypress but when a key gets released instead.
+NOTE: This message form may become longer in the future \, but the
+already defined parts will stay the same.;
+#X obj 0 1923 doc_f;
+#X obj 97 832 doc_m i0 move;
+#X obj 97 994 doc_m i0 shared_memory;
+#X obj 97 1054 doc_m i0 xvideo;
+#X obj 97 1014 doc_m i0 title;
+#X obj 97 1034 doc_m i0 warp;
+#X obj 97 900 doc_m i0 set_geometry;
+#X text 208 701 other syntax for 'remote'.;
+#X connect 16 1 17 0;
+#X connect 18 1 19 0;
+#X connect 20 1 21 0;
+#X connect 22 1 23 0;
+#X connect 24 1 25 0;
+#X connect 26 1 27 0;
+#X connect 26 1 28 0;
+#X connect 36 1 37 0;
+#X connect 36 1 38 0;
+#X connect 39 1 40 0;
+#X connect 39 1 41 0;
+#X connect 39 1 42 0;
+#X connect 39 1 43 0;
+#X connect 39 1 44 0;
+#X connect 39 1 45 0;
+#X connect 39 1 46 0;
+#X connect 39 1 47 0;
+#X connect 39 1 48 0;
+#X connect 39 1 49 0;
+#X connect 39 1 50 0;
+#X connect 39 1 51 0;
+#X connect 39 1 52 0;
+#X connect 39 1 53 0;
+#X connect 39 1 54 0;
+#X connect 39 1 55 0;
+#X connect 39 1 56 0;
+#X connect 57 1 59 0;
+#X connect 57 1 61 0;
+#X connect 58 1 60 0;
+#X connect 58 1 62 0;
diff --git a/externals/gridflow/doc/flow_classes/#join-help.pd b/externals/gridflow/doc/flow_classes/#join-help.pd
new file mode 100644
index 00000000..10e71f1c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#join-help.pd
@@ -0,0 +1,72 @@
+#N canvas 648 0 632 642 10;
+#X obj 18 42 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 211 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X text 174 228 the left grid and right grid must have the same number
+of elements in all dimensions except the one specified \, which will
+be the sum of the two corresponding;
+#X text 244 39 1 <--;
+#X text 45 41 2 <--;
+#X obj 18 222 #clip;
+#X obj 18 241 #out window;
+#X obj 18 106 #in;
+#X obj 211 125 #rgb_to_greyscale;
+#X obj 211 106 #in;
+#X obj 18 188 #perspective 128;
+#X text 175 160 creation argument is the index of the dimension by
+which the join will occur. for n-dimensional grids \, the dimensions
+are numbered from 0 to n-1. in addition \, negative numbers from -n
+to -1 may be used \, to which n will be added.;
+#X obj 0 0 doc_h;
+#X obj 3 666 doc_also;
+#X obj 3 288 doc_c 0..2;
+#X obj 3 409 doc_i 2;
+#X obj 3 606 doc_o 1;
+#X obj 18 161 #join 2;
+#X obj 14 318 doc_cc 0;
+#X obj 14 379 doc_cc 1;
+#X obj 14 439 doc_ii 0;
+#X obj 14 574 doc_ii 1;
+#X obj 14 636 doc_oo 0;
+#X obj 97 318 doc_m c0 float;
+#X obj 97 379 doc_m c1 grid;
+#X obj 97 439 doc_m i0;
+#X text 232 318 Which_dim is the number of the dimension by which the
+join will occur. For N-dimensional grids \, the dimensions are numbered
+from 0 to N-1. In addition \, negative numbers from -N to -1 may be
+used \, to which N will be added.;
+#X text 232 439 The left grid and right grid must have the same number
+of elements in all dimensions except the one specified. The result
+will have the same number of elements in all dimensions except the
+one specified \, which will be the sum of the two corresponding one.
+;
+#X text 232 513 For example \, joining a RGB picture Dim[y \, x \,
+3] and a greyscale picture Dim[y \, x \, 1] on dimension 2 (or -1)
+could make a RGBA picture Dim[y \, x \, 4] in which the greyscale image
+becomes the opacity channel.;
+#X text 232 574 same as arg 1;
+#X obj 97 574 doc_m i1 grid;
+#X obj 97 636 doc_m o0 grid;
+#X obj 0 686 doc_f;
+#X msg 18 83 load r001.jpg;
+#X msg 211 78 load b001.jpg;
+#X obj 103 666 listappend;
+#X obj 175 666 list append;
+#X text 234 381 grid to be appended to the left-inlet grid;
+#X connect 0 0 33 0;
+#X connect 1 0 34 0;
+#X connect 5 0 6 0;
+#X connect 7 0 17 0;
+#X connect 8 0 17 1;
+#X connect 9 0 8 0;
+#X connect 10 0 5 0;
+#X connect 13 1 35 0;
+#X connect 13 1 36 0;
+#X connect 17 0 10 0;
+#X connect 23 1 26 0;
+#X connect 25 1 27 0;
+#X connect 25 1 28 0;
+#X connect 30 1 29 0;
+#X connect 33 0 7 0;
+#X connect 34 0 9 0;
diff --git a/externals/gridflow/doc/flow_classes/#labelling-help.pd b/externals/gridflow/doc/flow_classes/#labelling-help.pd
new file mode 100644
index 00000000..053b6ee0
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#labelling-help.pd
@@ -0,0 +1,55 @@
+#N canvas 573 85 632 627 10;
+#X obj 0 0 doc_h;
+#X obj 0 598 doc_f;
+#X obj 71 60 #labelling;
+#X obj 3 300 doc_o 4;
+#X obj 3 190 doc_i 1;
+#X obj 14 330 doc_oo 0;
+#X obj 14 391 doc_oo 1;
+#X obj 14 487 doc_oo 2;
+#X obj 14 544 doc_oo 3;
+#X obj 14 220 doc_ii 0;
+#X obj 97 544 doc_m o3 float;
+#X obj 97 487 doc_m o2 grid;
+#X obj 97 391 doc_m o1 grid;
+#X obj 97 330 doc_m o0 grid;
+#X obj 97 220 doc_m i0 grid;
+#X obj 3 106 doc_c 0..1;
+#X text 232 136 0 : bidimensional form;
+#X text 232 158 1 : form for horizontal lines;
+#X text 232 220 single-channel picture to analyse. the content must
+be made of zeroes and ones (other values are reserved for making the
+output);
+#X text 232 330 single-channel picture in which every contiguous region
+(of ones) is labelled (flood-filled) using a number greater than or
+equal to 2 those numbers are sorted according to the smallest pixel
+index found in each region.;
+#X obj 97 268 doc_m i0 form;
+#X text 232 268 same as arg 0;
+#X text 232 391 when form=0: a grid[2 \, 2] giving the standard-deviation
+([#moment 2]) of each region;
+#X text 232 487 when form=0: a grid[2] giving the centre ([#moment
+1]) of each region;
+#X text 232 544 when form=0: area of each region (in number of pixels)
+;
+#X obj 97 566 doc_m o3 <gone>;
+#X text 232 566 when form=1: not present;
+#X text 232 522 when form=1: not present;
+#X obj 97 522 doc_m o2 <gone>;
+#X text 232 426 when form=1: a grid[2 \, 2] that is a 2-polygon \,
+that is \, just a straight line. this line is horizontal \, and its
+right-side bound is for the first pixel that is NOT in the region.
+;
+#X obj 14 136 doc_cc 0;
+#X obj 97 136 doc_m c0 float/int;
+#X connect 10 1 24 0;
+#X connect 11 1 23 0;
+#X connect 12 1 22 0;
+#X connect 12 1 29 0;
+#X connect 13 1 19 0;
+#X connect 14 1 18 0;
+#X connect 20 1 21 0;
+#X connect 25 1 26 0;
+#X connect 28 1 27 0;
+#X connect 31 1 16 0;
+#X connect 31 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/#layer-help.pd b/externals/gridflow/doc/flow_classes/#layer-help.pd
new file mode 100644
index 00000000..0cbedf0f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#layer-help.pd
@@ -0,0 +1,47 @@
+#N canvas 686 0 632 512 10;
+#X text 176 92 opacity channel file;
+#X text 52 62 foreground file;
+#X text 383 83 background file;
+#X text 157 176 a picture that has an opacity level will be used as
+foreground vs a picture that has no opacity channel. the output is
+a picture that has no opacity channel;
+#X msg 202 40 load b001.jpg;
+#X obj 179 67 #in;
+#X obj 205 67 #rgb_to_greyscale;
+#X obj 351 83 #in;
+#X msg 374 58 load g001.jpg;
+#X msg 42 38 load r001.jpg;
+#X obj 19 63 #in;
+#X obj 19 175 #layer;
+#X obj 19 206 #out window;
+#X obj 0 0 doc_h;
+#X obj 3 245 doc_c 0;
+#X obj 3 395 doc_o 1;
+#X obj 3 285 doc_i 2;
+#X obj 14 425 doc_oo 0;
+#X obj 14 315 doc_ii 0;
+#X obj 14 350 doc_ii 1;
+#X text 232 315 An image that has an opacity channel. Will be used
+as foreground.;
+#X text 232 350 An image that has NO opacity channel. Will be used
+as background.;
+#X text 232 425 An image that has NO opacity channel. The opacity channel
+of the foreground image is used as weighting of how much either picture
+is seen in the result.;
+#X obj 19 128 #join -1;
+#X obj 97 315 doc_m i0 grid;
+#X obj 97 350 doc_m i1 grid;
+#X obj 97 425 doc_m o0 grid;
+#X obj 0 483 doc_f;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 23 1;
+#X connect 7 0 11 1;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 23 0;
+#X connect 11 0 12 0;
+#X connect 23 0 11 0;
+#X connect 24 1 20 0;
+#X connect 25 1 21 0;
+#X connect 26 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/#line_to_polygon-help.pd b/externals/gridflow/doc/flow_classes/#line_to_polygon-help.pd
new file mode 100644
index 00000000..50133629
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#line_to_polygon-help.pd
@@ -0,0 +1,40 @@
+#N canvas 623 73 632 537 10;
+#X obj 43 180 #draw_polygon put (255 255 255);
+#X obj 43 239 #out window;
+#X msg 43 161 240 320 3 #;
+#X obj 256 167 display;
+#X msg 125 102 2 2 # 10 10 229 309;
+#X obj 125 121 #line_to_polygon 4;
+#X obj 0 0 doc_h;
+#X obj 3 286 doc_c 1;
+#X obj 3 352 doc_i 2;
+#X obj 3 446 doc_o 1;
+#X obj 14 476 doc_oo 0;
+#X obj 14 382 doc_ii 0;
+#X obj 14 414 doc_ii 1;
+#X obj 14 316 doc_cc 0;
+#X obj 0 508 doc_f;
+#X obj 43 73 t b b;
+#X obj 43 46 bng 15 250 50 0 empty empty empty 17 7 0 10 -4034 -1 -1
+;
+#X obj 97 316 doc_m c0 float;
+#X text 232 316 Line width.;
+#X obj 97 392 doc_m i0 grid;
+#X obj 97 414 doc_m i1 float;
+#X text 232 414 Line width (same as argument 0);
+#X obj 97 476 doc_m o0;
+#X text 232 392 Grid containing a pair of coordinates.;
+#X text 232 476 Grid representing the vertices of the resulting polygon.
+;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 4 0 5 0;
+#X connect 5 0 0 2;
+#X connect 5 0 3 0;
+#X connect 15 0 2 0;
+#X connect 15 1 4 0;
+#X connect 16 0 15 0;
+#X connect 17 1 18 0;
+#X connect 19 1 23 0;
+#X connect 20 1 21 0;
+#X connect 22 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/#make_arrow-help.pd b/externals/gridflow/doc/flow_classes/#make_arrow-help.pd
new file mode 100644
index 00000000..4fa076e6
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#make_arrow-help.pd
@@ -0,0 +1,20 @@
+#N canvas 623 133 632 373 10;
+#X obj 0 0 doc_h;
+#X obj 0 344 doc_f;
+#X obj 55 53 #make_arrow;
+#X obj 3 180 doc_c 0;
+#X obj 3 220 doc_i 1;
+#X obj 3 282 doc_o 1;
+#X obj 14 250 doc_ii 0;
+#X obj 14 312 doc_oo 0;
+#X obj 97 250 doc_m i0 grid;
+#X obj 97 312 doc_m o0 grid;
+#X text 232 312 grid[;
+#X obj 58 77 display;
+#X msg 55 34 4 # 10 20 30 40;
+#X text 212 95 can anyone figure out what is this ?;
+#X text 232 250 grid[euh];
+#X connect 2 0 11 0;
+#X connect 8 1 14 0;
+#X connect 9 1 10 0;
+#X connect 12 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#make_cross-help.pd b/externals/gridflow/doc/flow_classes/#make_cross-help.pd
new file mode 100644
index 00000000..0e0685be
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#make_cross-help.pd
@@ -0,0 +1,47 @@
+#N canvas 444 135 632 419 10;
+#X obj 43 57 tgl 15 0 empty empty empty 17 7 0 10 -204786 -1 -1 0 1
+;
+#X obj 43 78 metro 100;
+#X obj 43 149 #out window;
+#X obj 43 130 #draw_polygon put (255 0 0);
+#X obj 202 111 #make_cross 120;
+#X msg 202 92 240 320;
+#X obj 202 57 loadbang;
+#X msg 289 92 150;
+#X obj 261 66 t b b;
+#X obj 261 44 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 43 101 #camera 0;
+#X text 319 90 change cross size;
+#X obj 0 0 doc_h;
+#X obj 3 182 doc_c 1;
+#X obj 3 244 doc_i 2;
+#X obj 14 274 doc_ii 0;
+#X obj 14 296 doc_ii 1;
+#X obj 3 328 doc_o 1;
+#X obj 14 358 doc_oo 0;
+#X obj 14 212 doc_cc 0;
+#X obj 0 390 doc_f;
+#X obj 97 296 doc_m i1;
+#X obj 97 274 doc_m i0;
+#X obj 97 212 doc_m c0;
+#X obj 97 358 doc_m o0 grid;
+#X text 232 358 polygon;
+#X text 232 274 position of centre;
+#X text 232 212 size (radius);
+#X text 232 296 same as arg 0;
+#X connect 0 0 1 0;
+#X connect 1 0 10 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 2;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 4 1;
+#X connect 8 0 5 0;
+#X connect 8 1 7 0;
+#X connect 9 0 8 0;
+#X connect 10 0 3 0;
+#X connect 21 1 28 0;
+#X connect 22 1 26 0;
+#X connect 23 1 27 0;
+#X connect 24 1 25 0;
diff --git a/externals/gridflow/doc/flow_classes/#moment-help.pd b/externals/gridflow/doc/flow_classes/#moment-help.pd
new file mode 100644
index 00000000..0d47f338
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#moment-help.pd
@@ -0,0 +1,164 @@
+#N canvas 663 46 632 642 10;
+#X obj 19 44 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X msg 234 48 4 2 # 1 1 1 -1 -1 -1 -1 1;
+#X obj 111 228 display;
+#X obj 43 258 display;
+#X obj 234 86 #rotate;
+#X obj 288 76 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 -1831 256;
+#X obj 288 92 * 100;
+#X obj 18 497 #out window;
+#X obj 67 181 #t;
+#X obj 110 207 #moment;
+#X msg 41 105 240 320 1 #;
+#X obj 41 124 #draw_polygon put (1 # 255);
+#X obj 426 123 #pack;
+#X obj 234 105 # +;
+#X obj 456 107 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 -45 256;
+#X obj 426 91 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 12 256;
+#X obj 426 72 #pack;
+#X obj 456 56 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 32 256;
+#X obj 426 40 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 49 256;
+#X obj 234 67 # *;
+#X obj 245 143 # inv+;
+#X obj 245 124 # +;
+#X obj 426 174 #pack;
+#X obj 456 158 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 149 256;
+#X obj 426 142 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-241291 -1 -1 128 256;
+#X obj 41 143 #draw_polygon put (1 # 255);
+#X text 162 460 red filter;
+#X text 121 105 draw rectangles;
+#X text 238 31 rectangle polygon;
+#X obj 42 206 #moment 2;
+#X obj 269 192 #moment_polar;
+#X obj 356 212 display;
+#X obj 270 232 display;
+#X obj 5 81 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X text 141 329 this is a fudge factor.;
+#X obj 18 516 fps;
+#X floatatom 18 535 5 0 0 0 - - -;
+#X text 143 341 depending on what you want to do \,;
+#X text 140 353 you set it to 2 \, 3 \, 4 \, whatever.;
+#X obj 402 314 #outer + (9000 0);
+#X obj 448 378 #transpose;
+#X obj 20 80 t b b b;
+#X obj 402 490 # + (120 160);
+#X obj 63 322 #cast f;
+#X obj 63 419 #inner \, seed (f #);
+#X obj 402 352 #cast f;
+#X obj 402 409 #inner \, seed (f #);
+#X obj 402 457 #cast i;
+#X obj 63 398 #swap;
+#X obj 402 276 #for 0 160 1;
+#X obj 63 379 # sqrt (f #);
+#X obj 63 341 # * (f # 3);
+#X obj 402 429 # / (f # 1000);
+#X obj 402 333 # cos* 1000;
+#X obj 402 295 # * 225;
+#X obj 18 459 #inner (1 3 # 1 0 0);
+#X obj 18 478 #draw_polygon + (0 255 255) (2 2 #);
+#X obj 19 61 metro 20;
+#X obj 18 164 #t;
+#X obj 63 360 cv/#SVD;
+#X obj 0 0 doc_h;
+#X obj 3 559 doc_c 0..1;
+#X obj 3 708 doc_i 2;
+#X obj 3 818 doc_o 1;
+#X obj 14 848 doc_oo 0;
+#X obj 14 738 doc_ii 0;
+#X obj 14 760 doc_ii 1;
+#X obj 14 589 doc_cc 0;
+#X obj 0 902 doc_f;
+#X obj 0 902 doc_f;
+#X obj 97 848 doc_m o0 grid;
+#X obj 97 760 doc_m i1 grid;
+#X obj 97 738 doc_m i0 grid;
+#X obj 97 589 doc_m c0 float;
+#X text 232 589 1: average index of the values in the grid \, weighted
+by the values themselves.;
+#X text 232 624 2: average square of index of the values in the grid
+\, weighted by the values themselves. this can be used to compute a
+variance (covariance) matrix \, which in turn can be fed to [#moment_polar]
+to figure out the standard deviation and the direction of the standard
+deviation.;
+#X text 232 848 mode 1: a grid[2];
+#X text 232 870 mode 2: a grid[2 \, 2];
+#X text 232 738 greyscale image;
+#X text 232 760 mode 2: alleged centroid (doesn't have to be the real
+centroid \, but when it is \, the output will be the variance matrix
+\; else it won't be a centred moment);
+#X connect 0 0 57 0;
+#X connect 1 0 19 0;
+#X connect 4 0 13 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 1;
+#X connect 7 0 35 0;
+#X connect 8 0 29 0;
+#X connect 8 1 9 0;
+#X connect 9 0 2 0;
+#X connect 9 0 29 1;
+#X connect 9 0 42 1;
+#X connect 10 0 11 0;
+#X connect 11 0 25 0;
+#X connect 12 0 13 1;
+#X connect 13 0 21 0;
+#X connect 13 0 20 0;
+#X connect 14 0 12 1;
+#X connect 15 0 12 0;
+#X connect 16 0 19 1;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
+#X connect 19 0 4 0;
+#X connect 20 0 25 2;
+#X connect 21 0 11 2;
+#X connect 22 0 21 1;
+#X connect 22 0 20 1;
+#X connect 23 0 22 1;
+#X connect 24 0 22 0;
+#X connect 25 0 58 0;
+#X connect 29 0 3 0;
+#X connect 29 0 30 0;
+#X connect 29 0 43 0;
+#X connect 30 0 32 0;
+#X connect 30 1 31 0;
+#X connect 33 0 41 0;
+#X connect 35 0 36 0;
+#X connect 39 0 53 0;
+#X connect 40 0 46 1;
+#X connect 41 0 49 0;
+#X connect 41 1 10 0;
+#X connect 41 2 1 0;
+#X connect 42 0 56 2;
+#X connect 43 0 51 0;
+#X connect 44 0 40 0;
+#X connect 45 0 46 0;
+#X connect 46 0 52 0;
+#X connect 47 0 42 0;
+#X connect 48 0 44 0;
+#X connect 48 1 44 1;
+#X connect 49 0 54 0;
+#X connect 50 0 48 0;
+#X connect 51 0 59 0;
+#X connect 52 0 47 0;
+#X connect 53 0 45 0;
+#X connect 54 0 39 0;
+#X connect 55 0 56 0;
+#X connect 56 0 7 0;
+#X connect 57 0 41 0;
+#X connect 58 0 55 0;
+#X connect 58 1 8 0;
+#X connect 59 0 50 0;
+#X connect 59 1 48 1;
+#X connect 70 1 76 0;
+#X connect 70 1 77 0;
+#X connect 71 1 79 0;
+#X connect 72 1 78 0;
+#X connect 73 1 74 0;
+#X connect 73 1 75 0;
diff --git a/externals/gridflow/doc/flow_classes/#moment_polar-help.pd b/externals/gridflow/doc/flow_classes/#moment_polar-help.pd
new file mode 100644
index 00000000..d68966a6
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#moment_polar-help.pd
@@ -0,0 +1,25 @@
+#N canvas 455 225 632 371 10;
+#X text 232 226 must be a 2x2 symmetric matrix.;
+#X text 232 288 outlet 0: angle (only makes sense with a 2x2 matrix)
+as int;
+#X text 232 310 outlet 1: radiuses (from biggest to smallest) as float
+grid;
+#X text 30 61 please open this other help patch for a demo:;
+#X obj 0 0 doc_h;
+#X obj 3 121 doc_c 0;
+#X obj 3 161 doc_i 1;
+#X obj 3 258 doc_o 2;
+#X obj 14 288 doc_oo 0;
+#X obj 14 310 doc_oo 1;
+#X obj 14 191 doc_ii 0;
+#X obj 0 342 doc_f;
+#X obj 97 191 doc_m i0 grid;
+#X obj 97 288 doc_m o0 grid;
+#X obj 97 310 doc_m o1 grid;
+#X obj 37 77 #moment-help;
+#X text 232 191 inlet 0: variance matrix (aka covariance matrix) \,
+from [#moment 2] or compatible.;
+#X connect 12 1 16 0;
+#X connect 12 1 0 0;
+#X connect 13 1 1 0;
+#X connect 14 1 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#motion_detection-help.pd b/externals/gridflow/doc/flow_classes/#motion_detection-help.pd
new file mode 100644
index 00000000..4acf4a15
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#motion_detection-help.pd
@@ -0,0 +1,83 @@
+#N canvas 536 0 632 642 10;
+#X obj 47 40 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 47 315 print;
+#X obj 47 292 fps detailed;
+#X obj 47 57 metro 33.3667;
+#X obj 47 76 #camera;
+#X obj 96 132 vradio 15 1 0 2 empty empty empty 0 -6 0 8 -241291 -1
+-1 0;
+#X text 115 132 motion;
+#X text 116 146 presence;
+#X floatatom 223 237 7 0 0 0 - - -;
+#X obj 47 268 #out window;
+#X obj 209 168 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X obj 74 105 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X text 208 104 reduce the noise in the image;
+#X obj 156 237 nbx 5 14 -1e+37 1e+37 0 0 empty empty y -10 4 0 10 -24198
+-1 -1 0 256;
+#X obj 85 237 nbx 5 14 -1e+37 1e+37 0 0 empty empty x -10 4 0 10 -24198
+-1 -1 0 256;
+#X obj 47 183 #motion_detection;
+#X text 279 236 total amount of change;
+#X obj 177 142 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X text 195 142 fade;
+#X text 227 168 crosshair;
+#X obj 0 0 doc_h;
+#X obj 0 678 doc_f;
+#X obj 3 378 doc_i 5;
+#X obj 3 338 doc_c 0;
+#X obj 3 550 doc_o 4;
+#X obj 14 580 doc_oo 0;
+#X obj 14 602 doc_oo 1;
+#X obj 14 624 doc_oo 2;
+#X obj 14 646 doc_oo 3;
+#X obj 14 408 doc_ii 0;
+#X obj 14 430 doc_ii 1;
+#X obj 14 452 doc_ii 2;
+#X obj 14 496 doc_ii 3;
+#X obj 14 518 doc_ii 4;
+#X obj 97 518 doc_m i4;
+#X obj 97 496 doc_m i3;
+#X obj 97 452 doc_m i2;
+#X obj 97 430 doc_m i1;
+#X obj 97 408 doc_m i0;
+#X obj 97 646 doc_m o3 float;
+#X obj 97 624 doc_m o2 float;
+#X obj 97 602 doc_m o1 float;
+#X text 232 602 x;
+#X text 232 624 y;
+#X text 232 646 amount of change;
+#X obj 97 580 doc_m o0 grid;
+#X text 232 580 image;
+#X text 232 518 crosshair;
+#X text 232 496 fade;
+#X text 232 452 0: motion;
+#X text 232 474 1: presence;
+#X text 232 430 noise reduction;
+#X text 232 408 camera input;
+#X connect 0 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 15 0;
+#X connect 5 0 15 2;
+#X connect 9 0 2 0;
+#X connect 10 0 15 4;
+#X connect 11 0 15 1;
+#X connect 15 0 9 0;
+#X connect 15 1 14 0;
+#X connect 15 2 13 0;
+#X connect 15 3 8 0;
+#X connect 17 0 15 3;
+#X connect 34 1 47 0;
+#X connect 35 1 48 0;
+#X connect 36 1 49 0;
+#X connect 36 1 50 0;
+#X connect 37 1 51 0;
+#X connect 38 1 52 0;
+#X connect 39 1 44 0;
+#X connect 40 1 43 0;
+#X connect 41 1 42 0;
+#X connect 45 1 46 0;
diff --git a/externals/gridflow/doc/flow_classes/#mouse-help.pd b/externals/gridflow/doc/flow_classes/#mouse-help.pd
new file mode 100644
index 00000000..648afc0f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#mouse-help.pd
@@ -0,0 +1,99 @@
+#N canvas 675 0 632 699 10;
+#X msg 59 113 setcursor 32;
+#X msg 40 90 hidecursor;
+#X text 125 88 <-- removes the cursor;
+#X text 159 110 <-- accepts 0 - 63;
+#X obj 136 148 print xy_clicked;
+#X obj 137 194 print xy_unclicked;
+#X obj 68 281 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 85 281 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 102 281 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X floatatom 139 292 5 0 0 0 - - -;
+#X obj 139 273 +;
+#X obj 173 273 t a;
+#X obj 137 218 print xy_moved;
+#X obj 136 170 print xy_dragged;
+#X obj 340 175 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 360 175 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 380 175 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 400 151 loadbang;
+#X text 232 422 select buttons to be considered in click/drag/unclick
+;
+#X obj 40 145 #out window;
+#X obj 340 201 #pack 3;
+#X obj 0 0 doc_h;
+#X obj 3 330 doc_c 0;
+#X obj 3 370 doc_i 2;
+#X obj 3 454 doc_o 8;
+#X obj 14 484 doc_oo 0;
+#X obj 14 506 doc_oo 1;
+#X obj 14 528 doc_oo 2;
+#X obj 14 550 doc_oo 3;
+#X obj 14 572 doc_oo 4;
+#X obj 14 594 doc_oo 5;
+#X obj 14 616 doc_oo 6;
+#X obj 14 638 doc_oo 7;
+#X obj 14 400 doc_ii 0;
+#X obj 14 422 doc_ii 1;
+#X text 19 32 How to get the mouse coordinates and hide / change the
+cursor;
+#X obj 40 247 #mouse \, \, \, \, \,;
+#X obj 97 400 doc_m i0 list;
+#X text 232 484 (y x) click;
+#X text 232 506 (y x) drag;
+#X text 232 528 (y x) unclick;
+#X text 232 550 (y x) move;
+#X text 232 572 0 \, 1 button 1 status;
+#X text 232 594 0 \, 1 button 2 status;
+#X text 232 616 0 \, 1 button 3 status;
+#X text 232 638 mouse wheel difference: -1=up +1=down;
+#X obj 340 230 #to_list;
+#X text 232 400 what comes out of [#out window];
+#X obj 97 422 doc_m i1 list;
+#X obj 97 484 doc_m o0 list;
+#X obj 97 506 doc_m o1 list;
+#X obj 97 528 doc_m o2 list;
+#X obj 97 550 doc_m o3 list;
+#X obj 97 572 doc_m o4 float;
+#X obj 97 594 doc_m o5 float;
+#X obj 97 616 doc_m o6 float;
+#X obj 97 638 doc_m o7 float;
+#X obj 0 670 doc_f;
+#X connect 0 0 19 0;
+#X connect 1 0 19 0;
+#X connect 10 0 11 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 1;
+#X connect 14 0 20 0;
+#X connect 15 0 20 1;
+#X connect 16 0 20 2;
+#X connect 17 0 14 0;
+#X connect 17 0 15 0;
+#X connect 17 0 16 0;
+#X connect 19 0 36 0;
+#X connect 20 0 46 0;
+#X connect 36 0 4 0;
+#X connect 36 1 13 0;
+#X connect 36 2 5 0;
+#X connect 36 3 12 0;
+#X connect 36 4 6 0;
+#X connect 36 5 7 0;
+#X connect 36 6 8 0;
+#X connect 36 7 10 0;
+#X connect 37 1 47 0;
+#X connect 46 0 36 1;
+#X connect 48 1 18 0;
+#X connect 49 1 38 0;
+#X connect 50 1 39 0;
+#X connect 51 1 40 0;
+#X connect 52 1 41 0;
+#X connect 53 1 42 0;
+#X connect 54 1 43 0;
+#X connect 55 1 44 0;
+#X connect 56 1 45 0;
diff --git a/externals/gridflow/doc/flow_classes/#noise_gate_yuvs-help.pd b/externals/gridflow/doc/flow_classes/#noise_gate_yuvs-help.pd
new file mode 100644
index 00000000..a2003659
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#noise_gate_yuvs-help.pd
@@ -0,0 +1,26 @@
+#N canvas 591 265 632 338 10;
+#X obj 0 0 doc_h;
+#X obj 0 309 doc_f;
+#X obj 76 49 #noise_gate_yuvs;
+#X obj 3 150 doc_i 2;
+#X obj 3 247 doc_o 1;
+#X obj 3 88 doc_c 1;
+#X obj 14 277 doc_oo 0;
+#X obj 14 180 doc_ii 0;
+#X obj 14 215 doc_ii 1;
+#X obj 14 118 doc_cc 0;
+#X obj 97 118 doc_m c0 float/int;
+#X obj 97 180 doc_m i0 grid;
+#X text 203 44 sets pixels to (0 \, 0 \, 0) if their first component
+is lower than a certain threshold.;
+#X text 232 180 picture in signed YUV format (or whatever else works
+for you);
+#X obj 97 215 doc_m i1 float;
+#X text 232 215 same as arg 0;
+#X obj 97 277 doc_m o0 grid;
+#X text 232 118 threshold;
+#X text 232 277 filtered picture in signed YUV format;
+#X connect 10 1 17 0;
+#X connect 11 1 13 0;
+#X connect 14 1 15 0;
+#X connect 16 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#out-help.pd b/externals/gridflow/doc/flow_classes/#out-help.pd
new file mode 100644
index 00000000..17d9d2e8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#out-help.pd
@@ -0,0 +1,139 @@
+#N canvas 674 0 632 642 10;
+#X obj 15 325 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 10 71 Displaying a grid:;
+#X text 342 73 Saving a grid:;
+#X text 232 689 "rewind" rewinds to the beginning of a video file.
+Will overwrite previous data.;
+#X obj 15 100 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 15 221 #in;
+#X msg 65 227 open window;
+#X msg 65 252 close;
+#X text 232 597 "close" closes the file and hides the display \, must
+be accompanied by message "open window" to reopen the display.;
+#X text 232 764 A bang notifies when a complete grid has been received.
+;
+#X text 12 32 Displays or saves an incoming grid (usually an image
+or a video).;
+#X obj 15 302 #out window \, title example;
+#X obj 127 100 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 133 796 #record;
+#X msg 366 228 open somefile.jpg;
+#X text 232 654 "open filename.format" (ex: "open somefile.jpg") sets
+the filename to write to.;
+#X obj 351 96 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 351 190 #in;
+#X obj 351 266 #out;
+#X msg 127 262 hidecursor;
+#X text 196 261 <-- linux only;
+#X text 232 632 "hidecursor" (linux only) hides the mouse cursor.;
+#X obj 0 0 doc_h;
+#X obj 3 371 doc_c n;
+#X obj 3 796 doc_also;
+#X obj 3 734 doc_o 1;
+#N canvas 140 137 570 615 More 1;
+#X text 203 143 open default display for screenshot;
+#X msg 82 197 open videodev /dev/video0;
+#X text 277 196 open a video device;
+#X msg 187 388 open x11 here;
+#X msg 158 337 open x11 local 10;
+#X text 298 390 connect to default display;
+#X text 297 338 connect to display #10 on this machine;
+#X msg 65 313 open x11 remote.host.bla.net 0;
+#X text 297 315 connect to remote machine on display #0;
+#X text 202 114 open an image file;
+#X msg 242 437 close;
+#X msg 83 142 open x11 here;
+#X msg 200 413 open window;
+#X text 299 413 opens a window x11 \, quartz or sdl;
+#X obj 23 223 cnv 15 23 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 23 223 #in;
+#X obj 5 13 cnv 15 500 18 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 14 14 #out;
+#X obj 23 480 #out;
+#X msg 53 114 open sewing.jpg;
+#X obj 23 72 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 23 93 t b b;
+#X msg 83 170 open lsd.mov;
+#X text 203 169 open a quicktime video;
+#X obj 97 74 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 165 363 open save_here.jpg;
+#X text 298 362 select file to write to in jpg format;
+#X text 14 36 #out communicating grids (images) to/from devices \,
+sockets \, files;
+#X text 37 502 An incoming file is sent through the opened device or
+file. In single file format \, a subsequent picture overwrites the
+preceeding one. There are many more options.;
+#X connect 1 0 15 0;
+#X connect 3 0 18 0;
+#X connect 4 0 18 0;
+#X connect 7 0 18 0;
+#X connect 10 0 18 0;
+#X connect 11 0 15 0;
+#X connect 12 0 18 0;
+#X connect 15 0 18 0;
+#X connect 19 0 15 0;
+#X connect 20 0 21 0;
+#X connect 21 0 15 0;
+#X connect 21 1 19 0;
+#X connect 22 0 15 0;
+#X connect 24 0 15 0;
+#X connect 25 0 18 0;
+#X restore 140 334 pd More info about this object class;
+#X obj 3 488 doc_i 1;
+#X obj 14 518 doc_ii 0;
+#X obj 14 764 doc_oo 0;
+#X obj 97 518 doc_m i0 grid;
+#X obj 97 654 doc_m i0 open;
+#X obj 97 597 doc_m i0 close;
+#X obj 97 632 doc_m i0 hidecursor;
+#X obj 97 689 doc_m i0 rewind;
+#X obj 103 796 #in;
+#X text 188 426 auto-open with auto-detect of the format-handler;
+#X text 226 451 auto-open with manual choice of the format-handler
+;
+#X text 88 406 nothing opened \, you have to open by yourself;
+#X obj 46 407 #out;
+#X obj 46 428 #out filename.suffix;
+#X obj 46 449 #out handler filename.suffix;
+#X obj 97 553 doc_m i0 autoclose;
+#X obj 0 816 doc_f;
+#X obj 97 764 doc_m o0 bang;
+#X msg 15 117 load working.jpg;
+#X msg 127 117 load sewing.jpg;
+#X msg 351 113 load sewing.jpg;
+#X text 232 553 "autoclose 1": close after incoming image is finished.
+;
+#X text 232 575 "autoclose 0": doesn't.;
+#X text 232 518 write one frame (or in the case of [#out grid] \, one
+grid of any kind).;
+#X connect 4 0 45 0;
+#X connect 5 0 11 0;
+#X connect 6 0 11 0;
+#X connect 7 0 11 0;
+#X connect 11 0 0 0;
+#X connect 12 0 46 0;
+#X connect 14 0 18 0;
+#X connect 16 0 47 0;
+#X connect 17 0 18 0;
+#X connect 19 0 11 0;
+#X connect 24 1 35 0;
+#X connect 24 1 13 0;
+#X connect 30 1 50 0;
+#X connect 31 1 15 0;
+#X connect 32 1 8 0;
+#X connect 33 1 21 0;
+#X connect 34 1 3 0;
+#X connect 42 1 48 0;
+#X connect 42 1 49 0;
+#X connect 44 1 9 0;
+#X connect 45 0 5 0;
+#X connect 46 0 5 0;
+#X connect 47 0 17 0;
diff --git a/externals/gridflow/doc/flow_classes/#outer-help.pd b/externals/gridflow/doc/flow_classes/#outer-help.pd
new file mode 100644
index 00000000..b56f18f8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#outer-help.pd
@@ -0,0 +1,105 @@
+#N canvas 668 0 632 642 10;
+#X obj 19 39 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 19 130 spigot;
+#X obj 100 130 spigot;
+#X obj 67 130 == 0;
+#X obj 67 39 tgl 15 0 empty empty empty 0 -6 0 8 -233017 -1 -1 0 1
+;
+#X text 88 40 select pattern;
+#X text 17 296 combine channelless picture with gamma factors (r \,
+g \, b);
+#X obj 19 89 until;
+#X msg 19 68 128;
+#X obj 60 89 float 1;
+#X obj 115 89 + 1;
+#X obj 171 90 until;
+#X obj 212 90 float 1;
+#X obj 267 90 + 1;
+#X msg 171 69 4;
+#X obj 199 622 #finished;
+#X obj 103 622 #scan +;
+#X obj 265 622 #cast;
+#X obj 307 622 #ravel;
+#X obj 355 622 #grade;
+#X obj 403 622 #perspective;
+#X obj 171 111 #import (3);
+#X obj 171 132 # * 128;
+#X obj 19 109 #import (128);
+#X obj 19 162 #outer +;
+#X obj 100 161 #outer ^;
+#X obj 100 181 # * 2;
+#X obj 19 255 #outer gamma;
+#X obj 3 622 doc_also;
+#X obj 0 0 doc_h;
+#X obj 3 320 doc_c 1;
+#X obj 3 404 doc_i 2;
+#X obj 14 434 doc_ii 0;
+#X obj 14 530 doc_ii 1;
+#X obj 3 562 doc_o 1;
+#X obj 14 592 doc_oo 0;
+#X obj 19 277 #out window;
+#X obj 14 350 doc_cc 0;
+#X obj 97 434 doc_m i0 grid;
+#X obj 97 508 doc_m i0 op;
+#X obj 97 372 doc_m c0 op;
+#X obj 97 530 doc_m i1 grid;
+#X obj 97 592 doc_m o0 grid;
+#X obj 97 350 doc_m c0 grid;
+#X obj 157 622 #join;
+#X text 171 250 #outer does the same two-input operation between every
+possible pair of the left-side grid and the right side grid.;
+#X obj 392 102 display;
+#X text 387 32 Multiplication table:;
+#X obj 391 79 #outer * (1 2 3 4 5 6 7);
+#X msg 391 56 1 2 3 4 5;
+#X text 232 434 produces a grid of size Dim(anyA... \, anyB...) \,
+where numbers are the results of the operation on every element of
+A and every element of B. the resulting array can be very big. Don't
+try this on two pictures (the result will have 6 dimensions);
+#X text 232 508 same as arg 0;
+#X text 232 530 same as arg 1;
+#X text 232 350 grid B (see below);
+#X obj 0 642 doc_f;
+#X text 232 372 numop;
+#X connect 0 0 8 0;
+#X connect 0 0 14 0;
+#X connect 1 0 24 0;
+#X connect 1 0 24 1;
+#X connect 2 0 25 0;
+#X connect 2 0 25 1;
+#X connect 3 0 2 1;
+#X connect 4 0 1 1;
+#X connect 4 0 3 0;
+#X connect 7 0 9 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 9 0 23 0;
+#X connect 10 0 9 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 0 21 0;
+#X connect 13 0 12 1;
+#X connect 14 0 11 0;
+#X connect 21 0 22 0;
+#X connect 22 0 27 1;
+#X connect 23 0 1 0;
+#X connect 23 0 2 0;
+#X connect 24 0 27 0;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 36 0;
+#X connect 28 1 16 0;
+#X connect 28 1 44 0;
+#X connect 28 1 15 0;
+#X connect 28 1 17 0;
+#X connect 28 1 18 0;
+#X connect 28 1 19 0;
+#X connect 28 1 20 0;
+#X connect 38 1 50 0;
+#X connect 39 1 51 0;
+#X connect 40 1 55 0;
+#X connect 41 1 52 0;
+#X connect 43 1 53 0;
+#X connect 48 0 46 0;
+#X connect 49 0 48 0;
diff --git a/externals/gridflow/doc/flow_classes/#pack-help.pd b/externals/gridflow/doc/flow_classes/#pack-help.pd
new file mode 100644
index 00000000..1f3614f4
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#pack-help.pd
@@ -0,0 +1,46 @@
+#N canvas 379 12 632 544 10;
+#X obj 23 178 #color;
+#X floatatom 85 77 5 0 0 0 - - -;
+#X floatatom 107 96 5 0 0 0 - - -;
+#X floatatom 129 115 5 0 0 0 - - -;
+#X text 162 90 <--click and drag to place numbers in the grid.;
+#X text 232 463 Outputs values from each individual inlet into a grid.
+;
+#X obj 0 0 doc_h;
+#X obj 3 349 doc_i n;
+#X obj 3 252 doc_c 0..2;
+#X text 14 28 Creates a one-dimensional grid (a Dim(N) vector) from
+individual integers.;
+#X text 232 379 every inlet is hot.;
+#X text 232 401 inlet order corresponds to value order in the grid.
+;
+#X obj 3 433 doc_o 1;
+#X obj 14 463 doc_oo 0;
+#X obj 14 379 doc_ii any;
+#X obj 14 282 doc_cc 0;
+#X obj 14 317 doc_cc 1;
+#X obj 97 282 doc_m c0 float/int;
+#X obj 97 317 doc_m c1 numtype;
+#X obj 97 379 doc_m iany float;
+#X obj 97 463 doc_m o0 grid[n];
+#X obj 0 515 doc_f;
+#X text 232 317 number type (default: int32);
+#X obj 85 135 #pack 3 f;
+#X obj 3 495 doc_also;
+#X obj 103 495 pack;
+#X obj 139 495 #unpack;
+#X obj 263 180 display;
+#X text 232 282 number of elements in the vector to be built (aka number
+of dimensions in the vector space) (default: 2);
+#X connect 1 0 23 0;
+#X connect 2 0 23 1;
+#X connect 3 0 23 2;
+#X connect 17 1 28 0;
+#X connect 18 1 22 0;
+#X connect 19 1 10 0;
+#X connect 19 1 11 0;
+#X connect 20 1 5 0;
+#X connect 23 0 0 0;
+#X connect 23 0 27 0;
+#X connect 24 1 25 0;
+#X connect 24 1 26 0;
diff --git a/externals/gridflow/doc/flow_classes/#perspective-help.pd b/externals/gridflow/doc/flow_classes/#perspective-help.pd
new file mode 100644
index 00000000..d67b92ac
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#perspective-help.pd
@@ -0,0 +1,49 @@
+#N canvas 675 0 632 550 10;
+#X text 153 55 transforms a dim[a... \, b] grid into a dim[a... \,
+b-1] grid. there is a projection plane perpendicular to the last axis
+and whose position is given by the creation argument. each vector's
+length is adjusted so that it lies onto that plane. then the last dimension
+of each vector is dropped;
+#X obj 30 127 #pack 3;
+#X floatatom 75 82 5 0 0 0 - - -;
+#X obj 77 100 max 1;
+#X floatatom 12 95 5 0 0 0 - - -;
+#X floatatom 52 57 5 0 0 0 - - -;
+#X obj 30 190 #print;
+#X obj 79 182 #print;
+#X obj 79 163 #perspective;
+#X obj 103 501 #redim;
+#X obj 151 501 #ravel;
+#X obj 0 0 doc_h;
+#X obj 3 501 doc_also;
+#X obj 3 217 doc_c 1;
+#X obj 3 279 doc_i 1;
+#X obj 3 441 doc_o 1;
+#X obj 14 471 doc_oo 0;
+#X obj 14 309 doc_ii 0;
+#X obj 14 247 doc_cc 0;
+#X obj 97 309 doc_m i0 grid;
+#X obj 97 471 doc_m o0 grid;
+#X text 232 309 transforms a Dim[A... \, B] grid into a Dim[A... \,
+B-1] grid. There is a projection plane perpendicular to the last axis
+and whose position is given by the "depth" parameter. Each vector's
+length is adjusted so that it lies onto that plane. Then the last dimension
+of each vector is dropped.;
+#X text 232 383 useful for converting from 3-D geometry to 2-D geometry.
+Also useful for converting homogeneous 3-D into regular 3-D \, as homogeneous
+3-D is really just regular 4-D...(!);
+#X obj 97 247 doc_m c0 float;
+#X text 232 247 depth;
+#X obj 0 521 doc_f;
+#X connect 1 0 6 0;
+#X connect 1 0 8 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 2;
+#X connect 4 0 1 0;
+#X connect 5 0 1 1;
+#X connect 8 0 7 0;
+#X connect 12 1 9 0;
+#X connect 12 1 10 0;
+#X connect 19 1 21 0;
+#X connect 19 1 22 0;
+#X connect 23 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_area-help.pd b/externals/gridflow/doc/flow_classes/#polygon_area-help.pd
new file mode 100644
index 00000000..6d7a661c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_area-help.pd
@@ -0,0 +1,28 @@
+#N canvas 628 15 632 522 10;
+#X obj 0 0 doc_h;
+#X obj 0 493 doc_f;
+#X obj 58 239 #polygon_area;
+#X obj 59 259 display;
+#X msg 58 96 4 2 # 10 10 10 310 230 310 230 10;
+#X text 93 116 220 x 300 rectangle;
+#X obj 79 146 display;
+#X text 11 36 Find area of a polygon in square pixels.;
+#X obj 3 309 doc_c 0;
+#X obj 3 349 doc_i 1;
+#X obj 3 418 doc_o 1;
+#X obj 58 77 loadbang;
+#X obj 14 379 doc_ii 0;
+#X obj 97 379 doc_m i0 grid;
+#X text 232 379 Vertices of the polygon.;
+#X obj 14 448 doc_oo 0;
+#X obj 97 448 doc_m o0 grid;
+#X text 232 448 Grid of only one element representing the area of the
+polygon received from inlet 0;
+#X obj 58 115 # +;
+#X connect 2 0 3 0;
+#X connect 4 0 18 0;
+#X connect 11 0 4 0;
+#X connect 13 1 14 0;
+#X connect 16 1 17 0;
+#X connect 18 0 2 0;
+#X connect 18 0 6 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_comparator-help.pd b/externals/gridflow/doc/flow_classes/#polygon_comparator-help.pd
new file mode 100644
index 00000000..5dd99ec8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_comparator-help.pd
@@ -0,0 +1,85 @@
+#N canvas 566 0 632 642 10;
+#X obj 255 129 #outer + (0 9000);
+#X text 333 91 make regular triangle;
+#X obj 255 227 #rotate;
+#X obj 209 53 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 308 227 * 100;
+#X floatatom 308 211 5 0 0 0 - - -;
+#X obj 268 72 t b b;
+#X obj 255 246 #polygon_comparator;
+#X obj 209 72 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 255 186 #t;
+#X obj 228 53 metro 1000;
+#X text 30 254 BUG: first try doesn't work;
+#X text 67 265 please bang twice;
+#X msg 381 149 4 2 # 1 1 1 -1 -1 -1 -1 1;
+#X obj 391 195 display;
+#X obj 255 110 # * 12000;
+#X obj 255 91 #for 0 3 1;
+#X obj 381 169 # * (100 100);
+#X obj 255 167 # + (0 0);
+#X obj 255 148 # cos* (100 100);
+#X obj 215 278 #fold min;
+#X obj 295 278 #fold max;
+#X obj 215 297 #to_float;
+#X obj 295 297 #to_float;
+#X obj 381 129 loadbang;
+#X obj 215 316 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 9
+-262144 -1 -1 0 256;
+#X obj 295 316 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 9
+-262144 -1 -1 0 256;
+#X text 232 453 or method "precision" for setting the size of the output
+grid.;
+#X text 232 510 in which the peak represents the amount of similarity
+between the two polygons \, and the position of the peak represents
+the optimal rotation for maximum overlapping of the polygons. The rotation
+origin is assumed to be the centroid (#moment 1);
+#X text 24 239 NOTE: requires [#fft];
+#X text 33 150 translations \, e.g. [# +];
+#X text 33 168 rotations \, e.g. [#rotate];
+#X obj 0 0 doc_h;
+#X obj 3 361 doc_c;
+#X obj 3 401 doc_i 2;
+#X obj 3 594 doc_o 1;
+#X text 232 488 a 2-D polygon as N by 2 grid;
+#X text 232 431 a 2-D polygon as N by 2 grid;
+#X obj 14 431 doc_ii 0;
+#X obj 14 488 doc_ii 1;
+#X obj 14 624 doc_oo 0;
+#X obj 0 654 doc_f;
+#X obj 97 431 doc_m i0 grid;
+#X obj 97 488 doc_m i1;
+#X text 8 114 Comparisons are meant to be invariant;
+#X text 8 126 to the following transformations:;
+#X text 33 186 scalar scalings \, e.g. [# *] with;
+#X text 33 198 only one value.;
+#X obj 97 624 doc_m o0 grid;
+#X connect 0 0 19 0;
+#X connect 2 0 7 0;
+#X connect 3 0 10 0;
+#X connect 4 0 2 1;
+#X connect 5 0 4 0;
+#X connect 6 1 16 0;
+#X connect 7 0 20 0;
+#X connect 7 0 21 0;
+#X connect 8 0 6 0;
+#X connect 9 0 2 0;
+#X connect 10 0 6 0;
+#X connect 13 0 17 0;
+#X connect 15 0 0 0;
+#X connect 16 0 15 0;
+#X connect 17 0 14 0;
+#X connect 17 0 7 1;
+#X connect 18 0 9 0;
+#X connect 19 0 18 0;
+#X connect 20 0 22 0;
+#X connect 21 0 23 0;
+#X connect 22 0 25 0;
+#X connect 23 0 26 0;
+#X connect 24 0 13 0;
+#X connect 42 1 37 0;
+#X connect 42 1 27 0;
+#X connect 43 1 36 0;
+#X connect 43 1 28 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_each_edge-help.pd b/externals/gridflow/doc/flow_classes/#polygon_each_edge-help.pd
new file mode 100644
index 00000000..06afba8a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_each_edge-help.pd
@@ -0,0 +1,22 @@
+#N canvas 338 225 632 377 10;
+#X obj 51 139 #print;
+#X obj 51 83 # +;
+#X obj 51 102 #polygon_each_edge;
+#X obj 0 0 doc_h;
+#X obj 3 170 doc_c;
+#X obj 3 210 doc_i 1;
+#X obj 3 273 doc_o 1;
+#X obj 14 303 doc_oo 0;
+#X obj 14 240 doc_ii 0;
+#X obj 0 348 doc_f;
+#X msg 51 48 4 2 # 0 0 0 20 20 20 20 0;
+#X obj 97 240 doc_m i0 grid;
+#X obj 97 303 doc_m o0 grid;
+#X text 232 240 Vertices of the polygon;
+#X text 232 303 Returns a grid contaning a vertex pair for each edge
+of the polygon.;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 10 0 1 0;
+#X connect 11 1 13 0;
+#X connect 12 1 14 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_moment-help.pd b/externals/gridflow/doc/flow_classes/#polygon_moment-help.pd
new file mode 100644
index 00000000..41ee2986
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_moment-help.pd
@@ -0,0 +1,64 @@
+#N canvas 678 0 632 610 10;
+#X msg 263 58 4 2 # 1 1 1 5 5 5 5 1;
+#X text 413 58 should give 3 3;
+#X obj 282 188 display;
+#X obj 203 219 #outer + (-4 4);
+#X obj 203 238 #transpose;
+#X obj 37 64 metro 42;
+#X obj 37 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X msg 37 83 240 320 3 #;
+#X obj 37 256 #out window;
+#X obj 37 122 #draw_polygon + (255 0 0);
+#X obj 37 219 #draw_rect + (255 255 0);
+#X obj 378 188 display;
+#X obj 377 168 #polygon_moment 2;
+#X obj 281 168 #polygon_moment;
+#X obj 263 77 # * (10 20);
+#X obj 263 96 #rotate;
+#X floatatom 316 98 5 0 0 0 - - -;
+#X obj 0 0 doc_h;
+#X obj 3 375 doc_i 2;
+#X obj 3 291 doc_c 1;
+#X obj 3 516 doc_o 1;
+#X obj 14 546 doc_oo 0;
+#X obj 14 405 doc_ii 0;
+#X obj 14 427 doc_ii 1;
+#X obj 14 321 doc_cc 0;
+#X obj 97 321 doc_m c0 float;
+#X text 232 321 1: first-order moment (average);
+#X text 232 343 2: second-order moment (standard-deviation);
+#X obj 97 546 doc_m o0 grid;
+#X obj 97 405 doc_m i0 grid;
+#X obj 97 427 doc_m i1 grid;
+#X text 232 427 centre to subtract from the input;
+#X text 232 449 in the case of an average \, you'd leave this unused
+;
+#X text 232 471 but in the case of a standard-deviation \, you'd put
+the average in here \, unless you want a nonstandard deviation.;
+#X text 232 546 polygon. size (N 2);
+#X text 232 405 polygon. size (N 2);
+#X obj 0 578 doc_f;
+#X connect 0 0 14 0;
+#X connect 3 0 4 0;
+#X connect 4 0 10 2;
+#X connect 5 0 7 0;
+#X connect 6 0 5 0;
+#X connect 7 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 2 0;
+#X connect 13 0 3 0;
+#X connect 14 0 15 0;
+#X connect 15 0 9 2;
+#X connect 15 0 13 0;
+#X connect 15 0 12 0;
+#X connect 16 0 15 1;
+#X connect 25 1 26 0;
+#X connect 25 1 27 0;
+#X connect 28 1 34 0;
+#X connect 29 1 35 0;
+#X connect 30 1 31 0;
+#X connect 30 1 32 0;
+#X connect 30 1 33 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_perimetre-help.pd b/externals/gridflow/doc/flow_classes/#polygon_perimetre-help.pd
new file mode 100644
index 00000000..6409a635
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_perimetre-help.pd
@@ -0,0 +1,23 @@
+#N canvas 335 118 632 342 10;
+#X obj 0 0 doc_h;
+#X obj 0 313 doc_f;
+#X obj 47 64 #polygon_perimetre;
+#X obj 3 129 doc_c 0;
+#X obj 3 169 doc_i 1;
+#X obj 3 231 doc_o 1;
+#X obj 14 261 doc_oo 0;
+#X obj 14 199 doc_ii 0;
+#X obj 97 261 doc_m o0 grid;
+#X obj 97 199 doc_m i0 grid;
+#X text 232 261 perimetre as grid[];
+#X text 232 199 polygon as grid[N \, 2] or any cyclic path as grid[N
+\, M];
+#X text 187 44 finds the perimetre of a sequence of points in which
+the last point is assumed to connect back to the first point. this
+not need be an actual polygon (because points don't need to be coplanar
+for this calculation to work).;
+#X obj 3 293 doc_also;
+#X obj 103 293 #polygon_area;
+#X connect 8 1 10 0;
+#X connect 9 1 11 0;
+#X connect 13 1 14 0;
diff --git a/externals/gridflow/doc/flow_classes/#polygon_radial_map-help.pd b/externals/gridflow/doc/flow_classes/#polygon_radial_map-help.pd
new file mode 100644
index 00000000..e08e8017
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#polygon_radial_map-help.pd
@@ -0,0 +1,55 @@
+#N canvas 486 64 632 526 10;
+#X obj 244 185 #polygon_radial_map;
+#X text 70 40 makes a 1-D panoramic (polar) rendering of a polygon.
+;
+#X text 69 57 if you want to make standardized (translation-independent)
+renderings of polygons \, first substract [#polygon_moment] (or a variant
+thereof) from the polygon.;
+#X obj 244 280 #outer * (255 255 255);
+#X obj 244 299 #out window;
+#X obj 24 193 t b a;
+#X obj 24 240 #draw_polygon put (255 224 200);
+#X msg 24 221 240 320 3 # 0 60 90;
+#X obj 244 242 #for 128 0 -1;
+#X obj 24 259 #out window;
+#X obj 244 140 #t;
+#X obj 274 141 #polygon_moment;
+#X obj 293 162 display;
+#X obj 244 166 # -;
+#X obj 392 184 display;
+#X msg 24 116 4 2 # 30 30 30 250 120 200 170 90;
+#X obj 244 204 t a a;
+#X obj 244 223 #finished;
+#X obj 244 261 #outer <;
+#X obj 0 0 doc_h;
+#X obj 3 333 doc_c 0;
+#X obj 3 373 doc_i 1;
+#X obj 3 435 doc_o 1;
+#X obj 14 465 doc_oo 0;
+#X obj 14 403 doc_ii 0;
+#X obj 0 497 doc_f;
+#X obj 97 465 doc_m o0 grid;
+#X obj 97 403 doc_m i0 grid;
+#X text 232 403 polygon;
+#X text 232 465 radial map;
+#X connect 0 0 16 0;
+#X connect 3 0 4 0;
+#X connect 5 0 7 0;
+#X connect 5 1 6 2;
+#X connect 6 0 9 0;
+#X connect 7 0 6 0;
+#X connect 8 0 18 0;
+#X connect 10 0 13 0;
+#X connect 10 1 11 0;
+#X connect 11 0 12 0;
+#X connect 11 0 13 1;
+#X connect 13 0 0 0;
+#X connect 13 0 14 0;
+#X connect 15 0 5 0;
+#X connect 15 0 10 0;
+#X connect 16 0 17 0;
+#X connect 16 1 18 1;
+#X connect 17 0 8 0;
+#X connect 18 0 3 0;
+#X connect 26 1 29 0;
+#X connect 27 1 28 0;
diff --git a/externals/gridflow/doc/flow_classes/#posterize-help.pd b/externals/gridflow/doc/flow_classes/#posterize-help.pd
new file mode 100644
index 00000000..3ca6cba7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#posterize-help.pd
@@ -0,0 +1,63 @@
+#N canvas 674 0 632 625 10;
+#X obj 178 114 bng 15 250 50 0 empty empty empty 0 -6 0 8 -4034 -1
+-1;
+#X text 274 230 2 - 255;
+#X msg 217 157 open bluemarble.jpg;
+#X obj 197 179 #in;
+#X obj 178 203 #store;
+#X obj 178 251 #posterize;
+#X obj 103 570 #convolve;
+#X obj 169 570 #contrast;
+#X obj 235 570 #solarize;
+#X obj 301 570 #layer;
+#X obj 0 0 doc_h;
+#X obj 3 570 doc_also;
+#X obj 3 424 doc_i 2;
+#X obj 3 508 doc_o 1;
+#X obj 14 538 doc_oo 0;
+#X obj 14 454 doc_ii 0;
+#X obj 14 476 doc_ii 1;
+#X text 10 35 Reduces the number of possible intensities in an image:
+it rounds the color values. The effect is mostly apparent with a low
+number of levels.;
+#X obj 202 271 #out window \, title original;
+#X obj 178 291 #out window \, title modified;
+#X obj 178 136 t b b b;
+#X floatatom 235 230 5 0 0 0 - - -;
+#X msg 235 210 2;
+#X obj 235 190 loadbang;
+#X obj 97 454 doc_m i0 grid;
+#X obj 97 476 doc_m i1 float int;
+#X obj 97 538 doc_m o0 grid;
+#X text 232 538 posterised image;
+#X obj 3 323 doc_c 1;
+#X obj 14 353 doc_cc 0;
+#X obj 97 353 doc_m c0 float/int;
+#X text 11 75 example: simulate the 216-color "web" palette using 6
+levels. simulate a 15-bit display using 32 levels .;
+#X text 232 353 Number of possible levels per channel. The levels are
+equally spaced \, with the lowest at 0 and the highest at 255 the minimum
+number of levels is 2 and the default value is also 2;
+#X obj 0 590 doc_f;
+#X text 232 454 original image;
+#X text 232 476 same as arg 0;
+#X connect 0 0 20 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 4 0 18 0;
+#X connect 5 0 19 0;
+#X connect 11 1 6 0;
+#X connect 11 1 7 0;
+#X connect 11 1 8 0;
+#X connect 11 1 9 0;
+#X connect 20 0 4 0;
+#X connect 20 1 3 0;
+#X connect 20 2 2 0;
+#X connect 21 0 5 1;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 1 34 0;
+#X connect 25 1 35 0;
+#X connect 26 1 27 0;
+#X connect 30 1 32 0;
diff --git a/externals/gridflow/doc/flow_classes/#print-help.pd b/externals/gridflow/doc/flow_classes/#print-help.pd
new file mode 100644
index 00000000..b15e8ff4
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#print-help.pd
@@ -0,0 +1,73 @@
+#N canvas 408 30 632 632 10;
+#X text 15 32 Displays the dimensions of a grid in the console. If
+the grid has less than two dimensions it will display all grid data.
+;
+#X floatatom 213 105 5 0 0 0 - - -;
+#X floatatom 235 126 5 0 0 0 - - -;
+#X floatatom 257 146 5 0 0 0 - - -;
+#X obj 71 116 #in;
+#X obj 100 158 #import (3 3 3);
+#X msg 100 110 3 3 3 # 27;
+#X obj 100 134 # rand;
+#X msg 71 88 load sewing.jpg;
+#X obj 71 251 #print paprika;
+#X text 232 409 Incoming grid.;
+#X obj 103 582 #dim;
+#X obj 139 582 #to_float;
+#X obj 205 582 #to_list;
+#X obj 265 582 print;
+#X text 232 431 select between base 2 \, 8 \, 10 \, 16;
+#X text 232 453 stop printing after that number of rows;
+#X text 232 475 stop printing after that number of characters on the
+same line;
+#X obj 213 165 #pack 3;
+#X msg 368 188 base 2;
+#X msg 368 208 base 8;
+#X msg 368 228 base 10;
+#X msg 368 248 base 16;
+#X msg 370 159 maxrows 10;
+#X msg 370 136 trunc 20;
+#X obj 0 0 doc_h;
+#X obj 3 379 doc_i 1;
+#X obj 3 295 doc_c 0..1;
+#X obj 3 582 doc_also;
+#X obj 14 550 doc_oo 0;
+#X obj 14 409 doc_ii 0;
+#X obj 3 520 doc_o 2;
+#X obj 14 325 doc_cc 0;
+#X obj 97 325 doc_m c0 float|symbol;
+#X text 232 325 prefix before the printed element in the console.;
+#X text 232 347 default: no prefix;
+#X obj 97 409 doc_m i0 grid;
+#X obj 97 431 doc_m i0 base int;
+#X obj 97 453 doc_m i0 maxrows int;
+#X obj 97 475 doc_m i0 trunc int;
+#X obj 97 550 doc_m o0 grid;
+#X text 232 550 probably unused;
+#X obj 0 603 doc_f;
+#X connect 1 0 18 0;
+#X connect 2 0 18 1;
+#X connect 3 0 18 2;
+#X connect 4 0 9 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 4 0;
+#X connect 18 0 9 0;
+#X connect 19 0 9 0;
+#X connect 20 0 9 0;
+#X connect 21 0 9 0;
+#X connect 22 0 9 0;
+#X connect 23 0 9 0;
+#X connect 24 0 9 0;
+#X connect 28 1 11 0;
+#X connect 28 1 12 0;
+#X connect 28 1 13 0;
+#X connect 28 1 14 0;
+#X connect 33 1 34 0;
+#X connect 33 1 35 0;
+#X connect 36 1 10 0;
+#X connect 37 1 15 0;
+#X connect 38 1 16 0;
+#X connect 39 1 17 0;
+#X connect 40 1 41 0;
diff --git a/externals/gridflow/doc/flow_classes/#ravel-help.pd b/externals/gridflow/doc/flow_classes/#ravel-help.pd
new file mode 100644
index 00000000..2f167e57
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#ravel-help.pd
@@ -0,0 +1,42 @@
+#N canvas 691 0 632 493 10;
+#X obj 20 80 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 20 231 print before;
+#X obj 140 233 print after;
+#X obj 20 142 #in;
+#X obj 20 188 #dim;
+#X obj 103 444 #redim (1);
+#X obj 175 444 #perspective;
+#X obj 140 190 #dim;
+#X obj 140 169 #ravel;
+#X obj 0 0 doc_h;
+#X obj 3 267 doc_c 0;
+#X obj 3 307 doc_i 1;
+#X obj 3 444 doc_also;
+#X obj 3 382 doc_o 1;
+#X obj 14 412 doc_oo 0;
+#X obj 14 337 doc_ii 0;
+#X obj 97 337 doc_m i0 grid;
+#X obj 97 412 doc_m o0 grid;
+#X text 232 337 like [#redim] but always produce a 1-D grid with the
+same total number of elements.;
+#X obj 0 464 doc_f;
+#X msg 20 120 load bluemarble.jpg;
+#X obj 20 210 #to_list;
+#X obj 140 212 #to_list;
+#X text 143 55 like #redim but always produces a 1-D grid with the
+same total number of elements.;
+#X text 232 412 1-D grid;
+#X connect 0 0 20 0;
+#X connect 3 0 4 0;
+#X connect 3 0 8 0;
+#X connect 4 0 21 0;
+#X connect 7 0 22 0;
+#X connect 8 0 7 0;
+#X connect 12 1 5 0;
+#X connect 12 1 6 0;
+#X connect 16 1 18 0;
+#X connect 17 1 24 0;
+#X connect 20 0 3 0;
+#X connect 21 0 1 0;
+#X connect 22 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#record-help.pd b/externals/gridflow/doc/flow_classes/#record-help.pd
new file mode 100644
index 00000000..2cbb9721
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#record-help.pd
@@ -0,0 +1,53 @@
+#N canvas 525 0 632 584 10;
+#X obj 79 121 #camera;
+#X obj 79 70 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 105 153 #out window;
+#X obj 154 70 hsl 128 15 20 300 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 105 172 fps detailed;
+#X obj 105 191 print;
+#X obj 79 98 metro 100;
+#X obj 93 220 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 123 269 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 108 244 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 79 299 #record;
+#X text 232 461 Starts recording to the file.;
+#X text 232 483 Stops recording.;
+#X text 232 426 Opens a dialog window in which to type the filename
+to be recorded \, the defualt encoding is quicktime (raw).;
+#X text 22 33 Record a quicktime file with [#out];
+#X text 113 218 <-- 1 select filename;
+#X text 128 243 <-- 2 start recording;
+#X text 143 269 <-- 3 stop recording;
+#X text 142 298 <-- open for more options;
+#X obj 0 0 doc_h;
+#X obj 3 374 doc_i 4;
+#X obj 3 334 doc_c 0;
+#X obj 3 515 doc_o 0;
+#X obj 14 404 doc_ii 0;
+#X obj 14 426 doc_ii 1;
+#X obj 14 461 doc_ii 2;
+#X obj 14 483 doc_ii 3;
+#X obj 97 404 doc_m i0 grid;
+#X obj 97 426 doc_m i1 bang;
+#X obj 97 461 doc_m i2 bang;
+#X obj 97 483 doc_m i3 bang;
+#X obj 0 555 doc_f;
+#X text 232 404 images to be recorded go here.;
+#X connect 0 0 2 0;
+#X connect 0 0 10 0;
+#X connect 1 0 6 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 1;
+#X connect 4 0 5 0;
+#X connect 6 0 0 0;
+#X connect 7 0 10 1;
+#X connect 8 0 10 3;
+#X connect 9 0 10 2;
+#X connect 27 1 32 0;
+#X connect 28 1 13 0;
+#X connect 29 1 11 0;
+#X connect 30 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/#redim-help.pd b/externals/gridflow/doc/flow_classes/#redim-help.pd
new file mode 100644
index 00000000..6ccd005c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#redim-help.pd
@@ -0,0 +1,59 @@
+#N canvas 680 0 632 624 10;
+#X text 86 37 rearrange a grid's values according to new dimensions
+;
+#X obj 21 36 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 21 103 #in;
+#X obj 111 154 #out window;
+#X obj 103 575 #ravel;
+#X obj 151 575 #perspective;
+#X obj 21 154 #out window;
+#X obj 21 127 t a a;
+#X obj 111 124 #redim (120 160 3);
+#X text 232 443 Outputs the redimensioned data as a grid.;
+#X msg 232 131 240 320 3;
+#X msg 226 95 400 400 3;
+#X obj 0 0 doc_h;
+#X obj 3 277 doc_i 2;
+#X obj 3 193 doc_c 1;
+#X obj 3 575 doc_also;
+#X obj 3 413 doc_o 1;
+#X obj 14 307 doc_ii 0;
+#X obj 14 381 doc_ii 1;
+#X obj 14 443 doc_oo 0;
+#X obj 14 223 doc_cc 0;
+#X obj 97 223 doc_m c0 grid;
+#X text 232 223 dimension list \, (120 160 3) in this example.;
+#X obj 97 307 doc_m i0 grid;
+#X text 232 245 same as the dimension list of #import;
+#X text 232 307 the elements of this grid are serialized. if the resulting
+grid must be larger \, the sequence is repeated as much as necessary.
+if the resulting grid must be smaller \, the sequence is truncated.
+then the elements are deserialized to form the resulting grid.;
+#X obj 97 381 doc_m i1 grid;
+#X text 232 381 same as arg 0;
+#X obj 97 443 doc_m o0 grid;
+#X text 232 465 example: with a 240 320 RGB image \, [#redim 120 640
+3] will visually separate the even lines (left) from the odd lines
+(right). contrary to this \, [#redim 640 120 3] will split every line
+and put its left half on a even line and the right half on the following
+odd line. [#redim] 480 320 3 will repeat the input image twice in the
+output image. [#redim] 240 50 3 will only keep the 50 top lines.;
+#X obj 0 595 doc_f;
+#X msg 21 81 load working.jpg;
+#X connect 1 0 31 0;
+#X connect 2 0 7 0;
+#X connect 7 0 6 0;
+#X connect 7 1 8 0;
+#X connect 8 0 3 0;
+#X connect 10 0 8 1;
+#X connect 11 0 8 1;
+#X connect 15 1 4 0;
+#X connect 15 1 5 0;
+#X connect 21 1 22 0;
+#X connect 21 1 24 0;
+#X connect 23 1 25 0;
+#X connect 26 1 27 0;
+#X connect 28 1 9 0;
+#X connect 28 1 29 0;
+#X connect 31 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#reinterval-help.pd b/externals/gridflow/doc/flow_classes/#reinterval-help.pd
new file mode 100644
index 00000000..7ec9082f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#reinterval-help.pd
@@ -0,0 +1,33 @@
+#N canvas 335 118 632 382 10;
+#X obj 0 0 doc_h;
+#X obj 0 353 doc_f;
+#X obj 98 61 #reinterval;
+#X obj 3 101 doc_c 0;
+#X obj 3 141 doc_i 5;
+#X obj 3 291 doc_o 1;
+#X obj 14 171 doc_ii 0;
+#X obj 14 193 doc_ii 1;
+#X obj 14 215 doc_ii 2;
+#X obj 14 237 doc_ii 3;
+#X obj 14 259 doc_ii 4;
+#X obj 14 321 doc_oo 0;
+#X obj 97 171 doc_m i0 grid;
+#X obj 97 193 doc_m i1 grid;
+#X obj 97 215 doc_m i2 grid;
+#X obj 97 237 doc_m i3 grid;
+#X obj 97 259 doc_m i4 grid;
+#X obj 97 321 doc_m o0 grid;
+#X text 232 171 values to be rescaled;
+#X text 232 321 rescaled values;
+#X text 232 193 old start;
+#X text 232 215 old end;
+#X text 232 237 new start;
+#X text 232 259 new end;
+#X text 187 46 multiply and add to values such that the old start becomes
+the new start \, and the old end becomes the new end.;
+#X connect 12 1 18 0;
+#X connect 13 1 20 0;
+#X connect 14 1 21 0;
+#X connect 15 1 22 0;
+#X connect 16 1 23 0;
+#X connect 17 1 19 0;
diff --git a/externals/gridflow/doc/flow_classes/#remap_image-help.pd b/externals/gridflow/doc/flow_classes/#remap_image-help.pd
new file mode 100644
index 00000000..0c704ab6
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#remap_image-help.pd
@@ -0,0 +1,53 @@
+#N canvas 690 0 632 578 10;
+#X text 19 26 Transforms a grid by displacing pixels.;
+#X obj 27 154 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 46 179 #in;
+#X floatatom 156 201 5 0 0 0 - - -;
+#X obj 140 229 # +;
+#X msg 61 153 open sewing.jpg;
+#X text 201 199 <-- Modify value to see transformation.;
+#X text 178 152 <-- open image;
+#X obj 46 261 #out window \, title remapped;
+#X obj 46 97 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 46 120 metro 33.3667;
+#X text 19 45 If you chain indexmap (coordinate) transformations from
+outlet 1 to inlet 1 \, then sending an image in inlet 0 will emit its
+deformation out of outlet 0;
+#X obj 46 229 #remap_image;
+#X text 187 229 <-- change the numop to change the transformation;
+#X obj 103 529 #rotate;
+#X obj 0 0 doc_h;
+#X obj 3 295 doc_c 0;
+#X obj 3 335 doc_i 2;
+#X obj 3 529 doc_also;
+#X obj 3 432 doc_o 2;
+#X obj 14 365 doc_ii 0;
+#X obj 14 387 doc_ii 1;
+#X obj 14 462 doc_oo 0;
+#X obj 14 497 doc_oo 1;
+#X obj 97 365 doc_m i0 grid;
+#X text 232 365 grid to be remapped;
+#X obj 97 497 doc_m o1 grid;
+#X text 232 497 indexmap of dummy coordinates \, to be deformed;
+#X obj 97 387 doc_m i1 grid;
+#X text 232 387 modified version of what came out of outlet 1 \, which
+will determine the remapping;
+#X obj 97 462 doc_m o0 grid;
+#X text 232 462 the grid from inlet 0 after being remapped using the
+grid from inlet 1;
+#X obj 0 549 doc_f;
+#X connect 1 0 2 0;
+#X connect 2 0 12 0;
+#X connect 3 0 4 1;
+#X connect 4 0 12 1;
+#X connect 5 0 2 0;
+#X connect 9 0 10 0;
+#X connect 10 0 2 0;
+#X connect 12 0 8 0;
+#X connect 12 1 4 0;
+#X connect 18 1 14 0;
+#X connect 24 1 25 0;
+#X connect 26 1 27 0;
+#X connect 28 1 29 0;
+#X connect 30 1 31 0;
diff --git a/externals/gridflow/doc/flow_classes/#reverse-help.pd b/externals/gridflow/doc/flow_classes/#reverse-help.pd
new file mode 100644
index 00000000..71c6fe6c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#reverse-help.pd
@@ -0,0 +1,65 @@
+#N canvas 668 0 632 642 10;
+#X obj 258 177 #color;
+#X obj 301 320 #color;
+#X obj 259 378 display;
+#X obj 258 319 t a a;
+#X text 15 57 Swaps the values of incoming grids while preserving the
+number of Dimensions between incoming and outgoing grids.;
+#X obj 22 257 #in;
+#X obj 22 176 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 22 371 #out window;
+#X obj 87 259 hradio 15 1 0 6 empty empty empty 0 -6 0 8 -260818 -1
+-1 0;
+#X obj 87 277 - 3;
+#X floatatom 87 297 5 0 0 0 - - -;
+#X obj 22 314 #reverse 0;
+#X obj 258 300 #reverse 0;
+#X obj 323 245 hradio 15 1 0 6 empty empty empty 0 -6 0 8 -260818 -1
+-1 0;
+#X obj 323 263 - 3;
+#X floatatom 323 283 5 0 0 0 - - -;
+#X obj 0 0 doc_h;
+#X obj 3 416 doc_c 1;
+#X obj 3 517 doc_i 2;
+#X obj 3 601 doc_o 1;
+#X obj 14 631 doc_oo 0;
+#X obj 14 547 doc_ii 0;
+#X obj 14 569 doc_ii 1;
+#X obj 14 446 doc_cc 0;
+#X obj 97 631 doc_m o0 grid;
+#X obj 97 547 doc_m i0 grid;
+#X obj 97 446 doc_m c0 float;
+#X obj 97 569 doc_m i1 float;
+#X text 232 569 same as arg 0;
+#X text 232 446 dimension number of the dimension by which the reverse
+will occur. For N-dimensional grids \, the dimensions are numbered
+from 0 to N-1. In addition \, negative numbers from -N to -1 may be
+used \, to which N will be added.;
+#X obj 0 663 doc_f;
+#X text 232 547 grid to be reversed;
+#X text 232 631 reversed grid;
+#X msg 22 226 load b001.jpg;
+#X text 16 92 for an image \, 0 or -3 does vertical flip \, 1 or -2
+does horizontal flip \, and 2 or -1 does channel flip. if you do this
+on something else than an image \, you may see why the negative numbers
+are supported: if you make a grid of multiple images \, then -1 will
+always refer to the channels dimension no matter what.;
+#X connect 0 0 12 0;
+#X connect 3 0 2 0;
+#X connect 3 1 1 0;
+#X connect 5 0 11 0;
+#X connect 6 0 33 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 1;
+#X connect 11 0 7 0;
+#X connect 12 0 3 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 12 1;
+#X connect 24 1 32 0;
+#X connect 25 1 31 0;
+#X connect 26 1 29 0;
+#X connect 27 1 28 0;
+#X connect 33 0 5 0;
diff --git a/externals/gridflow/doc/flow_classes/#rgb_to_greyscale-help.pd b/externals/gridflow/doc/flow_classes/#rgb_to_greyscale-help.pd
new file mode 100644
index 00000000..c370a754
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#rgb_to_greyscale-help.pd
@@ -0,0 +1,27 @@
+#N canvas 689 0 632 401 10;
+#X obj 166 183 #out window;
+#X obj 166 112 #in;
+#X obj 166 137 #rgb_to_greyscale;
+#X obj 174 91 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X msg 166 68 open working.jpg;
+#X obj 166 160 #greyscale_to_rgb;
+#X obj 0 0 doc_h;
+#X obj 3 208 doc_c 0;
+#X obj 3 248 doc_i 1;
+#X obj 3 310 doc_o 1;
+#X obj 14 340 doc_oo 0;
+#X obj 14 278 doc_ii 0;
+#X text 15 27 Creates a greyscale image from a rgb color image.;
+#X obj 97 278 doc_m i0 grid;
+#X text 232 278 presumed to be an RGB image;
+#X obj 97 340 doc_m o0 grid;
+#X text 232 340 the image converted to greyscale.;
+#X obj 0 372 doc_f;
+#X connect 1 0 2 0;
+#X connect 2 0 5 0;
+#X connect 3 0 1 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 13 1 14 0;
+#X connect 15 1 16 0;
diff --git a/externals/gridflow/doc/flow_classes/#rgb_to_yuv-help.pd b/externals/gridflow/doc/flow_classes/#rgb_to_yuv-help.pd
new file mode 100644
index 00000000..cbb7ab1f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#rgb_to_yuv-help.pd
@@ -0,0 +1,30 @@
+#N canvas 205 69 632 421 10;
+#X obj 324 188 #out window;
+#X obj 273 87 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 255 107 #in;
+#X msg 255 61 open sewing.jpg;
+#X obj 324 150 #rgb_to_yuv;
+#X text 5 152 This displays the image as RGB:;
+#X text 99 190 This displays the image as YUV:;
+#X text 23 26 Converts an RGB color model image to a YUV color model
+image.;
+#X obj 226 152 #out window;
+#X obj 0 0 doc_h;
+#X obj 3 268 doc_i 1;
+#X obj 3 228 doc_c 0;
+#X obj 3 330 doc_o 1;
+#X obj 14 360 doc_oo 0;
+#X obj 14 298 doc_ii 0;
+#X obj 0 392 doc_f;
+#X obj 97 298 doc_m i0 grid;
+#X obj 97 360 doc_m o0 grid;
+#X text 232 298 image in RGB format.;
+#X text 232 360 image in YUV format.;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 0 8 0;
+#X connect 3 0 2 0;
+#X connect 4 0 0 0;
+#X connect 16 1 18 0;
+#X connect 17 1 19 0;
diff --git a/externals/gridflow/doc/flow_classes/#rotate-help.pd b/externals/gridflow/doc/flow_classes/#rotate-help.pd
new file mode 100644
index 00000000..f8167a45
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#rotate-help.pd
@@ -0,0 +1,49 @@
+#N canvas 689 0 632 445 10;
+#X obj 180 121 #rotate;
+#X text 4 26 The [#rotate] performs rotations on indexmaps and polygons
+and such objects.;
+#X obj 163 83 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 80 98 #in;
+#X obj 227 99 hsl 40 15 0 35999 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 80 121 #remap_image;
+#X obj 80 142 #out window \, title #rotate;
+#X obj 9 57 tgl 15 0 empty empty empty 0 -6 0 8 -233017 -1 -1 0 1;
+#X obj 9 76 metro 100;
+#X text 232 274 The Grid passed in inlet 0 will be the grid on which
+the rotation will be performed.;
+#X floatatom 243 123 7 0 0 0 - - -;
+#X msg 80 57 open b001.jpg;
+#X obj 0 0 doc_h;
+#X obj 3 244 doc_i 2;
+#X obj 3 169 doc_c 1;
+#X text 232 371 Outputs the result of the rotation and needs to be
+sent to a [#remap_image] to be visualised.;
+#X obj 3 341 doc_o 1;
+#X obj 14 371 doc_oo 0;
+#X obj 14 274 doc_ii 0;
+#X obj 14 309 doc_ii 1;
+#X obj 14 199 doc_cc 0;
+#X obj 97 199 doc_m c0 float;
+#X obj 97 274 doc_m i0 grid;
+#X obj 97 309 doc_m i1 float;
+#X text 232 309 same as arg 0;
+#X obj 97 371 doc_m o0 grid;
+#X obj 0 416 doc_f;
+#X text 232 199 integer number (0 to 35999) as a creation argument
+which initializes the first angle of rotation.;
+#X connect 0 0 5 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 0 1;
+#X connect 4 0 10 0;
+#X connect 5 0 6 0;
+#X connect 5 1 0 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 11 0 3 0;
+#X connect 21 1 27 0;
+#X connect 22 1 9 0;
+#X connect 23 1 24 0;
+#X connect 25 1 15 0;
diff --git a/externals/gridflow/doc/flow_classes/#rotatificator-help.pd b/externals/gridflow/doc/flow_classes/#rotatificator-help.pd
new file mode 100644
index 00000000..e31066a3
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#rotatificator-help.pd
@@ -0,0 +1,50 @@
+#N canvas 604 245 632 581 10;
+#X obj 0 0 doc_h;
+#X obj 0 552 doc_f;
+#X obj 20 64 #rotatificator;
+#X text 191 138 named in honour of Laszlo Zlotz (a character from Achille
+Talon);
+#X obj 3 532 doc_also;
+#X obj 103 532 #rotate;
+#X obj 3 286 doc_i 2;
+#X obj 3 418 doc_o 1;
+#X obj 14 448 doc_oo 0;
+#X obj 14 316 doc_ii 0;
+#X obj 14 386 doc_ii 1;
+#X obj 97 316 doc_m i0 float;
+#X obj 97 338 doc_m i0 axis;
+#X obj 3 180 doc_c 3;
+#X obj 14 210 doc_cc 0;
+#X obj 14 232 doc_cc 1;
+#X obj 14 254 doc_cc 2;
+#X obj 97 448 doc_m o0 grid;
+#X obj 97 386 doc_m i1;
+#X obj 97 210 doc_m c0 float/int;
+#X obj 97 232 doc_m c1 float/int;
+#X obj 97 254 doc_m c2 float/int;
+#X text 232 210 from;
+#X text 232 232 to;
+#X text 232 254 n;
+#X text 232 338 \$1=from (default:0) \; \$2=to (default: 1) \; \$3=n
+(default: 2);
+#X text 232 386 angle;
+#X text 232 316 scale;
+#X text 192 44 generates a N by N rotation matrix that rotates through
+two dimensions of your choice (from \, to) by a certain angle (in centidegrees).
+values produced are integers. the rotation matrix is multiplied by
+the given scale factor such that after an eventual [#inner] \, a division
+by the same amount would be performed. greater scale factors are more
+precise.;
+#X text 232 448 rotation matrix such that if rows 'from' and 'to' were
+deleted and columns 'from' and 'to' were deleted \, you'd have an identity
+matrix. in other words \, the rotation happens in a plane space made
+of the two dimensions represented by those two rows and two columns.
+;
+#X connect 4 1 5 0;
+#X connect 11 1 27 0;
+#X connect 12 1 25 0;
+#X connect 17 1 29 0;
+#X connect 18 1 26 0;
+#X connect 19 1 22 0;
+#X connect 20 1 23 0;
+#X connect 21 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/#saturation-help.pd b/externals/gridflow/doc/flow_classes/#saturation-help.pd
new file mode 100644
index 00000000..f493dde7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#saturation-help.pd
@@ -0,0 +1,52 @@
+#N canvas 115 0 632 551 10;
+#X obj 47 267 print;
+#X obj 47 227 #out window;
+#X text 313 178 OR;
+#X text 295 140 global saturation;
+#X obj 47 248 fps detailed;
+#X text 260 197 per-channel saturation;
+#X msg 251 135 0;
+#X obj 251 114 loadbang;
+#X obj 254 156 hsl 137 15 -256 512 0 0 empty empty empty -2 -6 0 8
+-260818 -128992 -1 4533 1;
+#X floatatom 212 157 5 0 0 0 - - -;
+#X obj 47 65 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 47 99 metro 33.3667;
+#X msg 204 198 3 # \$1;
+#X obj 47 134 #in babbage.jpg;
+#X obj 204 224 #color -256 512 1;
+#X obj 47 203 #saturation -128;
+#X obj 0 0 doc_h;
+#X obj 3 376 doc_i 2;
+#X obj 3 301 doc_c 1;
+#X obj 3 460 doc_o 1;
+#X obj 14 406 doc_ii 0;
+#X obj 14 428 doc_ii 1;
+#X obj 14 490 doc_oo 0;
+#X obj 14 331 doc_cc 0;
+#X text 232 428 same as arg 0;
+#X obj 97 331 doc_m c0 float/int;
+#X obj 97 406 doc_m i0 grid;
+#X obj 97 428 doc_m i1 grid;
+#X obj 97 490 doc_m o0 grid;
+#X obj 0 522 doc_f;
+#X text 232 406 image to be modified;
+#X text 232 331 Saturation multiplier. 256 does nothing. 0 turns to
+greyscale. -256 does like [#hueshift 18000].;
+#X text 232 490 modified image;
+#X connect 1 0 4 0;
+#X connect 4 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 8 0 12 0;
+#X connect 10 0 11 0;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 1;
+#X connect 15 0 1 0;
+#X connect 25 1 31 0;
+#X connect 26 1 30 0;
+#X connect 27 1 24 0;
+#X connect 28 1 32 0;
diff --git a/externals/gridflow/doc/flow_classes/#scale_by-help.pd b/externals/gridflow/doc/flow_classes/#scale_by-help.pd
new file mode 100644
index 00000000..5b61d091
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#scale_by-help.pd
@@ -0,0 +1,57 @@
+#N canvas 690 0 632 610 10;
+#X obj 11 82 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 11 102 metro 100;
+#X obj 89 149 #in;
+#X obj 103 561 #scale_to;
+#X obj 169 561 #downscale_by;
+#X text 232 507 Outputs the resulting scaled image.;
+#X obj 89 207 #out window \, title #scale_by;
+#X msg 89 85 open bluemarble.jpg \, bang;
+#X obj 89 183 #scale_by 2;
+#X text 7 28 The [#scale_by] scales the image received by the row and
+column factors passed. A single value applies the scaling uniformly
+on the row and columns.;
+#X msg 227 129 2 # 2 1;
+#X msg 230 152 2 # 2 3;
+#X floatatom 181 131 5 0 0 0 - - -;
+#X text 232 362 The Grid on which the scale_to will be performed.;
+#X obj 0 0 doc_h;
+#X obj 3 332 doc_i 2;
+#X obj 3 477 doc_o 1;
+#X text 232 265 The scaling factor (defaults to 2).;
+#X obj 3 561 doc_also;
+#X obj 14 507 doc_oo 0;
+#X obj 14 362 doc_ii 0;
+#X obj 14 445 doc_ii 1;
+#X obj 14 265 doc_cc 0;
+#X obj 97 362 doc_m i0 grid;
+#X obj 97 265 doc_m c0 grid;
+#X obj 97 445 doc_m i1 grid;
+#X obj 3 235 doc_c 0..1;
+#X text 232 445 same as arg 0;
+#X text 232 287 if it's a single value \, then that factor is to be
+used for both rows and columns.;
+#X text 232 384 duplicates each pixel several times in width and several
+times in height \, where the number of times is determined by the factor
+described above. twice those of the incoming grid. It is several times
+faster.;
+#X text 232 529 grid((factor*y) (factor*x) channels);
+#X obj 97 507 doc_m o0 grid;
+#X obj 0 581 doc_f;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 8 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 10 0 8 1;
+#X connect 11 0 8 1;
+#X connect 12 0 8 1;
+#X connect 18 1 3 0;
+#X connect 18 1 4 0;
+#X connect 23 1 13 0;
+#X connect 23 1 29 0;
+#X connect 24 1 17 0;
+#X connect 24 1 28 0;
+#X connect 25 1 27 0;
+#X connect 31 1 5 0;
+#X connect 31 1 30 0;
diff --git a/externals/gridflow/doc/flow_classes/#scale_to-help.pd b/externals/gridflow/doc/flow_classes/#scale_to-help.pd
new file mode 100644
index 00000000..54adb77a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#scale_to-help.pd
@@ -0,0 +1,66 @@
+#N canvas 674 0 632 523 10;
+#X obj 11 75 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 11 94 metro 100;
+#X obj 89 171 #scale_to (133 133);
+#X obj 89 133 #in;
+#X obj 284 159 #pack;
+#X obj 325 138 hsl 128 15 0 640 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 325 158 hsl 128 15 0 640 0 0 empty empty empty 0 -8 0 8 -260818
+-1 -1 0 1;
+#X obj 89 208 #out window \, title #scale_to;
+#X obj 169 474 #downscale_by;
+#X msg 89 73 open scissors.jpg \, bang;
+#X obj 300 183 #print;
+#X msg 284 75 2 # 500 500;
+#X obj 412 97 #print;
+#X msg 284 94 2 # 100 500;
+#X msg 285 115 2 # 500 100;
+#X text 460 133 height;
+#X text 460 155 width;
+#X text 232 442 Outputs the resulting scaled image.;
+#X text 232 270 A (height width) pair of integers indicating the size
+to scale to image to. This initial argument is required.;
+#X text 232 345 The Grid passed at inlet 0 will be the image on which
+the scale_to will be performed.;
+#X text 284 58 2 grid size values y=500 x=500;
+#X obj 103 474 #scale_by;
+#X text 9 22 The [#scale_to] scales the image received to the x and
+y values passed. Initial creation arguments are mandatory (0 0) otherwise.
+;
+#X obj 0 0 doc_h;
+#X obj 3 315 doc_i 2;
+#X obj 3 240 doc_c 1;
+#X obj 3 474 doc_also;
+#X obj 3 412 doc_o 1;
+#X obj 14 442 doc_oo 0;
+#X obj 14 345 doc_ii 0;
+#X obj 14 380 doc_ii 1;
+#X obj 14 270 doc_cc 0;
+#X obj 97 270 doc_m c0 (int int);
+#X obj 97 345 doc_m i0 grid;
+#X text 232 380 same as arg 0;
+#X obj 97 380 doc_m i1 (int int);
+#X obj 97 442 doc_m o0 grid;
+#X obj 0 494 doc_f;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 7 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 1;
+#X connect 4 0 10 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 1;
+#X connect 9 0 3 0;
+#X connect 11 0 2 1;
+#X connect 11 0 12 0;
+#X connect 13 0 2 1;
+#X connect 13 0 12 0;
+#X connect 14 0 2 1;
+#X connect 14 0 12 0;
+#X connect 26 1 21 0;
+#X connect 26 1 8 0;
+#X connect 32 1 18 0;
+#X connect 33 1 19 0;
+#X connect 35 1 34 0;
+#X connect 36 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/#scan-help.pd b/externals/gridflow/doc/flow_classes/#scan-help.pd
new file mode 100644
index 00000000..06bad143
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#scan-help.pd
@@ -0,0 +1,48 @@
+#N canvas 664 0 632 547 10;
+#X floatatom 17 76 5 0 0 0 - - -;
+#X floatatom 62 76 5 0 0 0 - - -;
+#X floatatom 109 76 5 0 0 0 - - -;
+#X floatatom 17 245 5 0 0 0 - - -;
+#X floatatom 56 245 5 0 0 0 - - -;
+#X floatatom 96 245 5 0 0 0 - - -;
+#X obj 17 116 #pack 3;
+#X obj 17 147 #scan +;
+#X obj 17 206 #unpack 3;
+#X obj 103 498 #fold +;
+#X obj 0 0 doc_h;
+#X obj 3 498 doc_also;
+#X obj 3 274 doc_c 1;
+#X obj 3 336 doc_i 1;
+#X obj 3 438 doc_o 1;
+#X obj 14 468 doc_oo 0;
+#X obj 14 304 doc_cc 0;
+#X text 69 35 computes subtotals and stuff;
+#X text 165 74 replaces every Dim(last) subgrid by all the results
+of cascading the operator on that subgrid \, producing a Dim(dims \,
+last) grid.;
+#X text 165 127 For example \, with base value 0 and operation + on
+grid "2 3 5 7" will compute 0+2=2 \, 2+3=5 \, 5+5=10 \, 10+7=17 \,
+and give the subtotals "2 5 10 17".;
+#X obj 14 366 doc_ii 0;
+#X obj 97 366 doc_m i0 grid;
+#X obj 97 386 doc_m i0 op;
+#X obj 97 408 doc_m i0 seed;
+#X text 165 191 [#scan +] computes subtotals \; this can be used \,
+for example \, to convert a regular probability distribution into a
+cumulative one. (or in general \, discrete integration);
+#X obj 0 518 doc_f;
+#X obj 97 468 doc_m o0 grid;
+#X obj 97 304 doc_m c0 symbol;
+#X text 232 304 numop;
+#X text 232 386 same as arg 0;
+#X connect 0 0 6 0;
+#X connect 1 0 6 1;
+#X connect 2 0 6 2;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 8 1 4 0;
+#X connect 8 2 5 0;
+#X connect 11 1 9 0;
+#X connect 22 1 29 0;
+#X connect 27 1 28 0;
diff --git a/externals/gridflow/doc/flow_classes/#seq_fold-help.pd b/externals/gridflow/doc/flow_classes/#seq_fold-help.pd
new file mode 100644
index 00000000..df26fff8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#seq_fold-help.pd
@@ -0,0 +1,55 @@
+#N canvas 677 0 632 548 10;
+#X obj 125 63 route end;
+#X obj 126 162 display;
+#X obj 125 106 #seq_fold;
+#X obj 154 130 # +;
+#X msg 125 43 2 1 \, 3 2 \, 5 3 \, 7 4 \, end;
+#X msg 206 82 0 0;
+#X obj 206 63 loadbang;
+#X obj 92 193 #print AAA;
+#X obj 0 0 doc_h;
+#X obj 3 225 doc_c;
+#X obj 3 265 doc_i 4;
+#X obj 14 423 doc_oo 0;
+#X obj 14 445 doc_oo 1;
+#X obj 14 467 doc_oo 2;
+#X obj 3 393 doc_o 3;
+#X obj 14 295 doc_ii 0;
+#X obj 14 317 doc_ii 1;
+#X obj 14 339 doc_ii 2;
+#X obj 14 361 doc_ii 3;
+#X obj 0 519 doc_f;
+#X obj 97 295 doc_m i0 bang;
+#X obj 97 317 doc_m i1 grid;
+#X obj 97 339 doc_m i2 grid;
+#X obj 97 361 doc_m i3 grid;
+#X obj 97 423 doc_m o0 grid;
+#X obj 97 445 doc_m o1 grid;
+#X obj 97 467 doc_m o2 grid;
+#X obj 3 499 doc_also;
+#X obj 103 499 seq_fold;
+#X text 232 445 to outside left inlet;
+#X text 232 467 to outside right inlet;
+#X text 232 423 final result;
+#X text 232 361 from outside outlet;
+#X text 232 339 seed;
+#X text 232 295 output the final result;
+#X text 232 317 sequence of values to be folded;
+#X connect 0 0 2 0;
+#X connect 0 1 2 1;
+#X connect 2 0 1 0;
+#X connect 2 0 7 0;
+#X connect 2 1 3 0;
+#X connect 2 2 3 1;
+#X connect 3 0 2 3;
+#X connect 4 0 0 0;
+#X connect 5 0 2 2;
+#X connect 6 0 5 0;
+#X connect 20 1 34 0;
+#X connect 21 1 35 0;
+#X connect 22 1 33 0;
+#X connect 23 1 32 0;
+#X connect 24 1 31 0;
+#X connect 25 1 29 0;
+#X connect 26 1 30 0;
+#X connect 27 1 28 1;
diff --git a/externals/gridflow/doc/flow_classes/#slice-help.pd b/externals/gridflow/doc/flow_classes/#slice-help.pd
new file mode 100644
index 00000000..df793231
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#slice-help.pd
@@ -0,0 +1,47 @@
+#N canvas 206 135 632 525 10;
+#X obj 38 190 display;
+#X text 36 213 should print subgrid: 3 5 8 13 21;
+#X msg 37 145 0 1 1 2 3 5 8 13 21 34 55 89;
+#X obj 37 170 #slice 4 9;
+#X obj 256 109 #slice (1 1) (3 3);
+#X obj 257 130 display;
+#X obj 256 90 #redim (4 4);
+#X obj 256 71 #for 0 16 1;
+#X obj 256 54 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 259 177 should print subgrid: 2 2 # 5 6 9 10;
+#X obj 0 0 doc_h;
+#X obj 3 244 doc_c 2;
+#X obj 3 328 doc_i 3;
+#X obj 3 434 doc_o 1;
+#X obj 14 464 doc_oo 0;
+#X obj 14 380 doc_ii 1;
+#X obj 14 358 doc_ii 0;
+#X obj 14 402 doc_ii 2;
+#X obj 14 274 doc_cc 0;
+#X obj 14 296 doc_cc 1;
+#X obj 0 496 doc_f;
+#X obj 97 274 doc_m c0 grid;
+#X obj 97 296 doc_m c1 grid;
+#X obj 97 358 doc_m i0 grid;
+#X obj 97 380 doc_m i1 grid;
+#X obj 97 402 doc_m i2 grid;
+#X obj 97 464 doc_m o0 grid;
+#X text 232 380 same as arg 0;
+#X text 232 402 same as arg 1;
+#X text 232 464 slice;
+#X text 232 358 grid to be sliced;
+#X text 232 296 end positions (as in #for);
+#X text 232 274 start positions as in #for);
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 21 1 32 0;
+#X connect 22 1 31 0;
+#X connect 23 1 30 0;
+#X connect 24 1 27 0;
+#X connect 25 1 28 0;
+#X connect 26 1 29 0;
diff --git a/externals/gridflow/doc/flow_classes/#solarize-help.pd b/externals/gridflow/doc/flow_classes/#solarize-help.pd
new file mode 100644
index 00000000..02240cc0
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#solarize-help.pd
@@ -0,0 +1,39 @@
+#N canvas 690 0 632 491 10;
+#X obj 170 140 bng 15 250 50 0 empty empty empty 0 -6 0 8 -4034 -1
+-1;
+#X obj 170 219 #solarize;
+#X obj 170 183 #in;
+#X obj 103 442 #convolve;
+#X obj 169 442 #contrast;
+#X obj 235 442 #posterize;
+#X obj 307 442 #layer;
+#X obj 0 0 doc_h;
+#X obj 3 442 doc_also;
+#X obj 3 278 doc_c;
+#X obj 3 380 doc_o 1;
+#X obj 3 318 doc_i 1;
+#X obj 14 410 doc_oo 0;
+#X obj 14 348 doc_ii 0;
+#X obj 247 215 #out window \, title original;
+#X obj 170 240 #out window \, title modified;
+#X obj 97 410 doc_m o0 grid;
+#X obj 97 348 doc_m i0 grid;
+#X obj 0 462 doc_f;
+#X msg 170 157 load bluemarble.jpg;
+#X text 12 36 Makes medium intensities brightest. Formerly brightest
+colors become darkest \, formerly darkest stays darkest. This filter
+is non-linear (but piecewise-linear). It's like a 200% contrast \,
+except that overflows are mirrored instead of clipped or wrapped.;
+#X text 232 348 pixels;
+#X text 232 410 pixels;
+#X connect 0 0 19 0;
+#X connect 1 0 15 0;
+#X connect 2 0 1 0;
+#X connect 2 0 14 0;
+#X connect 8 1 3 0;
+#X connect 8 1 4 0;
+#X connect 8 1 5 0;
+#X connect 8 1 6 0;
+#X connect 16 1 22 0;
+#X connect 17 1 21 0;
+#X connect 19 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#sort-help.pd b/externals/gridflow/doc/flow_classes/#sort-help.pd
new file mode 100644
index 00000000..f2cdc61c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#sort-help.pd
@@ -0,0 +1,45 @@
+#N canvas 484 136 632 572 10;
+#X obj 28 250 #sort;
+#X msg 28 45 0 1 1 2 3 5 8 13 21 34 55 89;
+#X msg 28 102 12 # 666;
+#X obj 28 121 # rand;
+#X obj 28 178 #store;
+#X obj 28 140 #grade;
+#X obj 28 64 t a a;
+#X obj 28 83 #finished;
+#X obj 58 204 display;
+#X obj 28 159 #outer + (0);
+#X text 151 140 shuffle;
+#X obj 58 274 display;
+#X text 140 252 unshuffle;
+#X obj 0 0 doc_h;
+#X obj 3 311 doc_c 0;
+#X obj 3 351 doc_i 1;
+#X obj 3 461 doc_o 1;
+#X obj 3 523 doc_also;
+#X obj 103 523 #grade;
+#X obj 14 491 doc_oo 0;
+#X obj 14 381 doc_ii 0;
+#X obj 0 543 doc_f;
+#X obj 97 381 doc_m i0 grid;
+#X obj 97 491 doc_m o0 grid;
+#X text 232 491 sorted data;
+#X text 232 381 1-D grid to be sorted;
+#X text 232 403 this takes an average time proportional to N log N
+(a pass on the data takes N time \, and sorting something twice bigger
+takes an extra pass);
+#X connect 0 0 11 0;
+#X connect 1 0 6 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 0 0;
+#X connect 4 0 8 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 6 1 4 1;
+#X connect 7 0 2 0;
+#X connect 9 0 4 0;
+#X connect 17 1 18 0;
+#X connect 22 1 25 0;
+#X connect 22 1 26 0;
+#X connect 23 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/#spread-help.pd b/externals/gridflow/doc/flow_classes/#spread-help.pd
new file mode 100644
index 00000000..9c6fc31a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#spread-help.pd
@@ -0,0 +1,79 @@
+#N canvas 673 0 632 642 10;
+#X text 1 25 makes noise;
+#X obj 207 42 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X obj 221 134 tgl 15 0 empty empty empty 0 -6 0 8 -233017 -1 -1 0
+1;
+#X floatatom 368 241 5 0 0 0 - - -;
+#X floatatom 78 163 5 0 0 0 - - -;
+#X obj 20 88 until;
+#X obj 20 51 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -1
+-1;
+#X msg 20 69 65536;
+#X obj 61 88 float;
+#X obj 101 88 + 1;
+#X text 219 308 we limit here \, because the values might go out of
+range;
+#X obj 149 73 metro 50;
+#X obj 149 51 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 20 129 #import (256 256 2);
+#X obj 195 269 #store;
+#X obj 195 341 #out window;
+#X obj 310 341 #out window;
+#X obj 310 291 #clip;
+#X obj 148 124 #in;
+#X obj 249 247 shunt;
+#X obj 0 0 doc_h;
+#X obj 3 491 doc_c 1;
+#X obj 3 633 doc_o 1;
+#X obj 3 551 doc_i 2;
+#X text 210 147 switch displays \, use this to get an image into the
+#store;
+#X obj 14 663 doc_oo 0;
+#X obj 14 581 doc_ii 0;
+#X obj 14 601 doc_ii 1;
+#X obj 14 521 doc_cc 0;
+#X obj 97 581 doc_m i0 grid;
+#X obj 97 663 doc_m o0 grid;
+#X text 326 33 typically you plug a [#for] into this object \, and
+you plug this object into the left side of a [#store]. it will scatter
+pixels around \, giving an "unpolished glass" effec.t;
+#X text 326 89 if you put a picture in it \, however \, it will add
+noise. The resulting values may be out of range \, so you may need
+to clip them using min/max.;
+#X text 54 364 [#spread] scatters the pixels in an image. Not all original
+pixels will appear \, and some may get duplicated (triplicated \, etc)
+randomly. Some wrap-around effect will occur close to the edges.;
+#X text 52 425 Sending an integer to inlet 1 sets the amount of spreading
+in maximum number of pixels + 1 even values translate the whole image
+by half a pixel due to rounding .;
+#X obj 0 693 doc_f;
+#X obj 97 601 doc_m i1 grid;
+#X obj 97 521 doc_m c0 grid;
+#X text 232 601 same as arg 0;
+#X obj 20 197 #spread 1;
+#X obj 310 270 #spread 1;
+#X msg 207 89 load r001.jpg;
+#X connect 1 0 41 0;
+#X connect 2 0 19 1;
+#X connect 3 0 40 1;
+#X connect 4 0 39 1;
+#X connect 5 0 8 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 8 0 13 0;
+#X connect 9 0 8 1;
+#X connect 11 0 18 0;
+#X connect 12 0 11 0;
+#X connect 13 0 39 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 19 0;
+#X connect 19 0 14 1;
+#X connect 19 1 40 0;
+#X connect 36 1 38 0;
+#X connect 39 0 14 0;
+#X connect 40 0 17 0;
+#X connect 41 0 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#store-help.pd b/externals/gridflow/doc/flow_classes/#store-help.pd
new file mode 100644
index 00000000..bc4a52c0
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#store-help.pd
@@ -0,0 +1,111 @@
+#N canvas 602 0 632 642 10;
+#X floatatom 132 89 5 0 0 0 - - -;
+#X floatatom 177 89 5 0 0 0 - - -;
+#X floatatom 20 160 5 0 0 0 - - -;
+#X floatatom 132 200 5 0 0 0 - - -;
+#X text 115 201 R:;
+#X floatatom 193 200 5 0 0 0 - - -;
+#X floatatom 253 200 5 0 0 0 - - -;
+#X text 176 201 G:;
+#X text 237 201 B:;
+#X floatatom 73 161 5 0 0 0 - - -;
+#X text 1 161 X:;
+#X text 58 162 Y:;
+#X obj 132 107 #pack;
+#X obj 296 134 #in;
+#X msg 296 115 load r001.jpg;
+#X obj 20 131 #unpack;
+#X obj 132 175 #unpack 3;
+#X obj 134 150 #store;
+#X text 129 54 this example allows you to select a single pixel from
+the loaded picture and view its rgb value.;
+#X text 8 24 The [#store] stores exactly one grid \, using the right
+inlet. You fetch it back \, or selected subparts using the left inlet.
+;
+#X obj 296 181 display;
+#X obj 86 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 296 161 display;
+#X obj 296 96 loadbang;
+#X obj 3 341 doc_i 2;
+#X obj 0 0 doc_h;
+#X obj 3 279 doc_c 1;
+#X obj 14 371 doc_ii 0;
+#X obj 14 571 doc_ii 1;
+#X obj 3 882 doc_o 1;
+#X obj 14 912 doc_oo 0;
+#X obj 14 309 doc_cc 0;
+#X obj 97 309 doc_m c0 grid;
+#X obj 97 406 doc_m i0 grid;
+#X obj 97 371 doc_m i0 bang;
+#X text 232 371 A bang at the left inlet will cause [#store] to send
+its value to the outlet.;
+#X obj 97 571 doc_m i1 grid;
+#X text 232 571 when in reassign mode \, this is same as arg 0;
+#X text 232 593 when it put_at mode \, it basically keeps the previous
+arg 0 or reassignment \, but replaces a selected part inside of it.
+;
+#X obj 97 824 doc_m i1 reassign;
+#X obj 97 663 doc_m i1 put_at;
+#X obj 97 912 doc_m o0 grid;
+#X text 232 406 in this grid \, the last dimension refers to subparts
+of the stored grid. sending a Dim(200 \, 200 \, 2) on a [#store] that
+holds a Dim(240 \, 320 \, 3) will cause the [#store] to handle the
+incoming grid as a Dim(200 \, 200) of Dim(2)'s \, where each Dim(2)
+represents a position in a Dim(240 \, 320) of Dim(3)'s. therefore the
+resulting grid will be a Dim(200 \, 200) of Dim(3) which is a Dim(200
+\, 200 \, 3). in practice this example would be used for generating
+a 200*200 RGB picture from a 200*200 XY map and a 240*320 RGB picture.
+this object can be logically used in the same way for many purposes
+including color palettes \, tables of probabilities \, tables of statistics
+\, whole animations \, etc.;
+#X text 232 824 makes it so that sending a grid to inlet 1 detaches
+the old buffer from [#store] and attaches a new one instead. This is
+the default.;
+#X text 232 663 makes it so that sending a grid to inlet 1 writes into
+the existing buffer of [#store].;
+#X text 232 698 example: suppose you have [#store 10 240 320 3]. then
+"put_at 3" will allow to write a Dim[240 \, 320 \, 3] grid in indices
+(3 \, y \, x \, c) where y \, x \, c are indices of the incoming grid.
+in other words \, if that's a buffer of 10 RGB frames \, you'd be replacing
+frame #3. Furthermore \, it also allows you to write a Dim[n \, 240
+\, 320 \, 3] grid at (3+f \, y \, x \, c) where f \, y \, x \, c are
+indices of the incoming grid \, replacing frame #3 \, #4 \, ... up
+to #3+n-1. Here n is at most 7 because the last frame in the buffer
+is #9.;
+#X text 194 227 that way of working extends to other kinds of data
+you'd put in Grids \, in any numbers of dimensions. because \, as usual
+\, [#store] wouldn't know the difference.;
+#X text 232 912 grids as stored \, as indexed \, or as assembled from
+multiple indexings.;
+#X obj 0 957 doc_f;
+#X text 232 309 initial value to be stored;
+#X obj 97 628 doc_m i1 op;
+#X text 232 628 recombination operator used by put_at \, just like
+arg 0 of [#draw_image];
+#X connect 0 0 12 0;
+#X connect 1 0 12 1;
+#X connect 12 0 15 0;
+#X connect 12 0 17 0;
+#X connect 12 0 22 0;
+#X connect 13 0 17 1;
+#X connect 14 0 13 0;
+#X connect 15 0 2 0;
+#X connect 15 1 9 0;
+#X connect 16 0 3 0;
+#X connect 16 1 5 0;
+#X connect 16 2 6 0;
+#X connect 17 0 16 0;
+#X connect 17 0 20 0;
+#X connect 21 0 17 0;
+#X connect 23 0 14 0;
+#X connect 32 1 49 0;
+#X connect 33 1 42 0;
+#X connect 34 1 35 0;
+#X connect 36 1 37 0;
+#X connect 36 1 38 0;
+#X connect 39 1 43 0;
+#X connect 40 1 44 0;
+#X connect 40 1 45 0;
+#X connect 41 1 47 0;
+#X connect 50 1 51 0;
diff --git a/externals/gridflow/doc/flow_classes/#swap-help.pd b/externals/gridflow/doc/flow_classes/#swap-help.pd
new file mode 100644
index 00000000..70263b36
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#swap-help.pd
@@ -0,0 +1,25 @@
+#N canvas 335 118 632 379 10;
+#X obj 0 0 doc_h;
+#X obj 0 350 doc_f;
+#X obj 60 55 #swap;
+#X text 223 55 grid equivalent of [swap];
+#X obj 3 168 doc_i 2;
+#X obj 3 250 doc_o 2;
+#X obj 14 198 doc_ii 0;
+#X obj 14 218 doc_ii 1;
+#X obj 14 280 doc_oo 0;
+#X obj 14 300 doc_oo 1;
+#X obj 97 198 doc_m i0 grid;
+#X obj 97 218 doc_m i1 grid;
+#X obj 97 280 doc_m o0 grid;
+#X obj 97 300 doc_m o1 grid;
+#X obj 3 330 doc_also;
+#X obj 103 330 swap;
+#X obj 14 136 doc_cc 0;
+#X obj 3 106 doc_c 0..1;
+#X text 232 136 same as [#store];
+#X text 232 218 same as arg 0;
+#X obj 97 136 doc_m c0 grid;
+#X connect 11 1 19 0;
+#X connect 14 1 15 0;
+#X connect 20 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#t-help.pd b/externals/gridflow/doc/flow_classes/#t-help.pd
new file mode 100644
index 00000000..a8c4f064
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#t-help.pd
@@ -0,0 +1,58 @@
+#N canvas 78 0 632 554 10;
+#X obj 10 134 #in teapot.png;
+#X obj 10 161 t a a;
+#X obj 40 181 #convolve (1 3 # -1 2 -1);
+#X obj 267 181 #convolve (1 3 # -1 2 -1);
+#X obj 10 112 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 237 161 #t;
+#X obj 237 205 # *>>8;
+#X obj 10 205 # *>>8;
+#X text 257 112 Works;
+#X text 8 64 In some situations \, a grid hasn't finished entering
+the right-hand side \, when an object begins receiving on the left-hand
+side. in those cases you should use #t.;
+#X obj 237 113 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 10 234 #out window \, title doesnt_work;
+#X obj 237 233 #out window \, title works;
+#X text 8 25 The [#t] trigger object sequences grid operations in a
+right-to-left order. It outputs its input from right to left.;
+#X text 28 112 Doesn't work (all black);
+#X obj 237 134 #in teapot.png;
+#X text 232 425 The same grid received in inlet 0 is first sent to
+the outlet 0;
+#X text 232 460 The same grid received in inlet 0 is sent to the outlet
+1 after it was sent to outlet 0;
+#X text 232 337 The Grid passed in inlet 0 will be first sent to the
+right most outlet and then to the second from the right (the left outlet
+in this case).;
+#X obj 0 0 doc_h;
+#X obj 3 307 doc_i 1;
+#X obj 3 395 doc_o 2;
+#X obj 3 267 doc_c 0;
+#X obj 3 505 doc_also;
+#X obj 14 337 doc_ii 0;
+#X obj 14 425 doc_oo 0;
+#X obj 14 460 doc_oo 1;
+#X obj 97 337 doc_m i0 grid;
+#X obj 97 425 doc_m o0 grid;
+#X obj 97 460 doc_m o1 grid;
+#X obj 0 525 doc_f;
+#X obj 103 505 t;
+#X connect 0 0 1 0;
+#X connect 1 0 7 0;
+#X connect 1 1 2 0;
+#X connect 2 0 7 1;
+#X connect 3 0 6 1;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 5 1 3 0;
+#X connect 6 0 12 0;
+#X connect 7 0 11 0;
+#X connect 10 0 15 0;
+#X connect 15 0 5 0;
+#X connect 23 1 31 0;
+#X connect 27 1 18 0;
+#X connect 28 1 16 0;
+#X connect 29 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/#text_to_image-help.pd b/externals/gridflow/doc/flow_classes/#text_to_image-help.pd
new file mode 100644
index 00000000..238dab37
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#text_to_image-help.pd
@@ -0,0 +1,24 @@
+#N canvas 685 0 632 345 10;
+#X obj 0 0 doc_h;
+#X obj 33 40 #text_to_image;
+#X obj 3 71 doc_c 0;
+#X obj 3 111 doc_i 3;
+#X obj 3 256 doc_o 1;
+#X obj 14 141 doc_ii 0;
+#X obj 14 176 doc_ii 1;
+#X obj 14 211 doc_ii 2;
+#X obj 97 141 doc_m i0 bang;
+#X text 232 141 transforming the data into an image suitable for #draw_image.
+;
+#X obj 14 286 doc_oo 0;
+#X obj 97 286 doc_m o0 grid;
+#X obj 97 211 doc_m i2 grid;
+#X obj 97 176 doc_m i1 grid;
+#X text 232 176 2 by 3 matrix representing the colours to use (e.g.
+(2 3 # 0 170 0 255 255 0) means yellow on green);
+#X obj 0 316 doc_f;
+#X text 232 211 font grid \, for example \, from [#in grid lucida-typewriter-12.grid]
+;
+#X connect 8 1 9 0;
+#X connect 12 1 16 0;
+#X connect 13 1 14 0;
diff --git a/externals/gridflow/doc/flow_classes/#to_float-help.pd b/externals/gridflow/doc/flow_classes/#to_float-help.pd
new file mode 100644
index 00000000..16886baf
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#to_float-help.pd
@@ -0,0 +1,29 @@
+#N canvas 678 0 632 446 10;
+#X obj 15 188 cnv 15 55 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 39 135 display;
+#X msg 15 73 1 2 3 4 5 6 7 8;
+#X text 138 73 <-- create the grid here;
+#X obj 15 188 #to_float;
+#X text 12 27 Produces sequences of floats from grid data. Useful for
+the integration into the rest of PureData.;
+#X obj 15 216 print converted_grid;
+#X obj 15 100 #import (2 2 2);
+#X obj 0 0 doc_h;
+#X obj 3 280 doc_i 1;
+#X obj 3 240 doc_c;
+#X obj 14 372 doc_oo 0;
+#X obj 14 310 doc_ii 0;
+#X obj 3 342 doc_o 1;
+#X obj 97 310 doc_m i0 grid;
+#X obj 97 372 doc_m o0 float;
+#X obj 0 417 doc_f;
+#X text 232 310 content to be finely chopped;
+#X text 232 372 a sequence of floats that the incoming grid is transformed
+into. they are output in normal grid order.;
+#X connect 2 0 7 0;
+#X connect 4 0 6 0;
+#X connect 7 0 1 0;
+#X connect 7 0 4 0;
+#X connect 14 1 17 0;
+#X connect 15 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/#to_list-help.pd b/externals/gridflow/doc/flow_classes/#to_list-help.pd
new file mode 100644
index 00000000..51a376ea
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#to_list-help.pd
@@ -0,0 +1,31 @@
+#N canvas 544 108 632 450 10;
+#X obj 15 164 cnv 15 52 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 50 115 display;
+#X msg 14 64 1 2 3 4 5 6 7 8;
+#X obj 161 217 display;
+#X text 12 27 Produces a list from grid data. Useful for the integration
+into the rest of PureData.;
+#X text 130 63 <-- create the grid here;
+#X obj 14 165 #to_list;
+#X obj 14 216 print converted_grid;
+#X obj 14 91 #import (2 2 2);
+#X obj 0 0 doc_h;
+#X obj 3 346 doc_o 1;
+#X obj 3 284 doc_i 1;
+#X obj 3 244 doc_c 0;
+#X text 232 376 The grid is transformed into a single message containing
+a sequence of floats.;
+#X obj 14 314 doc_ii 0;
+#X obj 14 376 doc_oo 0;
+#X obj 97 314 doc_m i0 grid;
+#X obj 97 376 doc_m o0 list;
+#X obj 0 421 doc_f;
+#X text 232 314 will be transformed into a list.;
+#X connect 2 0 8 0;
+#X connect 6 0 3 0;
+#X connect 6 0 7 0;
+#X connect 8 0 1 0;
+#X connect 8 0 6 0;
+#X connect 16 1 19 0;
+#X connect 17 1 13 0;
diff --git a/externals/gridflow/doc/flow_classes/#to_literal-help.pd b/externals/gridflow/doc/flow_classes/#to_literal-help.pd
new file mode 100644
index 00000000..15f076e8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#to_literal-help.pd
@@ -0,0 +1,34 @@
+#N canvas 556 102 632 540 10;
+#X obj 0 0 doc_h;
+#X obj 0 511 doc_f;
+#X obj 96 289 #to_literal;
+#X obj 102 312 display;
+#X obj 3 347 doc_c 0;
+#X obj 3 387 doc_i 1;
+#X obj 3 449 doc_o 1;
+#X obj 14 417 doc_ii 0;
+#X obj 14 479 doc_oo 0;
+#X obj 97 417 doc_m i0 grid;
+#X obj 102 146 display;
+#X obj 96 165 # +;
+#X text 123 166 "do nothing": just convert literal to grid;
+#X obj 102 224 display;
+#X msg 96 123 3 3 # 2 3 5 7 11 13 17 19 23;
+#X obj 97 479 doc_m o0 list;
+#X text 232 479 grid literal;
+#X msg 118 62 3 2 f # 0.1 0.333333 2.71828 3.14159 1.4142 1.61803;
+#X obj 118 103 # + (f #);
+#X obj 96 201 t a;
+#X obj 124 83 display;
+#X text 232 417 any grid;
+#X connect 2 0 3 0;
+#X connect 9 1 21 0;
+#X connect 11 0 19 0;
+#X connect 14 0 10 0;
+#X connect 14 0 11 0;
+#X connect 15 1 16 0;
+#X connect 17 0 18 0;
+#X connect 17 0 20 0;
+#X connect 18 0 19 0;
+#X connect 19 0 13 0;
+#X connect 19 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/#to_pix-help.pd b/externals/gridflow/doc/flow_classes/#to_pix-help.pd
new file mode 100644
index 00000000..199ab591
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#to_pix-help.pd
@@ -0,0 +1,107 @@
+#N canvas 661 0 632 665 10;
+#X msg 365 61 create \, 1;
+#X obj 365 42 loadbang;
+#X msg 157 139 open violoncelle.mov;
+#X obj 130 72 tgl 15 0 empty empty empty 17 7 0 10 -4034 -1 -1 0 1
+;
+#X obj 45 52 gemhead;
+#X obj 45 272 pix_texture;
+#X obj 13 720 cnv 15 500 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 13 720 cnv 15 500 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 13 720 cnv 15 500 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 13 720 cnv 15 500 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 19 721 see also :;
+#X text 102 720 [#import_pix];
+#X msg 429 62 destroy;
+#X obj 365 93 gemwin 30;
+#X obj 157 117 loadbang;
+#X text 150 69 <-- start playing the video;
+#X text 94 250 <-- imports gridflow grids into GEM;
+#X text 181 720 \, game_of_life_gem.pd in the examples folder;
+#X obj 45 253 #to_pix;
+#X text 232 591 Modified gemstate so that the pix is equal to the Grid
+of inlet 1;
+#X text 232 472 Something coming from [gemhead];
+#X msg 57 217 yflip \$1;
+#X obj 57 197 tgl 15 0 empty empty empty 17 7 0 10 -257985 -1 -1 0
+1;
+#X text 232 494 With one boolean argument that selects the order in
+which the y dimension of the Grid will be read \, defaults to '1';
+#X obj 45 291 rectangle 4 3;
+#X obj 0 0 doc_h;
+#X obj 3 442 doc_i 2;
+#X obj 3 561 doc_o 1;
+#X obj 3 402 doc_c 0;
+#X obj 14 472 doc_ii 0;
+#X obj 14 529 doc_ii 1;
+#X obj 14 591 doc_oo 0;
+#X obj 97 472 doc_m i0 gem_state;
+#X obj 97 494 doc_m i0 yflip;
+#X obj 97 529 doc_m i1 grid;
+#X obj 97 591 doc_m o0 gem_state;
+#X obj 0 636 doc_f;
+#X obj 397 243 b;
+#X obj 397 263 fps;
+#X floatatom 397 282 5 0 0 0 - - -;
+#X obj 130 162 #in;
+#X msg 310 134 cast b;
+#X msg 310 154 cast s;
+#X msg 310 174 cast i;
+#X obj 140 195 shunt;
+#X obj 176 196 tgl 15 0 empty empty empty 17 7 0 10 -257985 -1 -1 0
+1;
+#N canvas 0 22 458 308 to_rgba_if_not_already 0;
+#X obj 130 221 #rgb_to_rgba;
+#X obj 131 103 #dim;
+#X obj 103 173 shunt;
+#X obj 131 126 #unpack 3;
+#X obj 104 29 inlet;
+#X obj 104 56 t a a;
+#X obj 103 265 outlet;
+#X obj 131 150 == 3;
+#X connect 0 0 6 0;
+#X connect 1 0 3 0;
+#X connect 2 0 6 0;
+#X connect 2 1 0 0;
+#X connect 3 2 7 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 7 0 2 1;
+#X restore 167 214 pd to_rgba_if_not_already;
+#X text 40 353 Note : you can get some timebased 'moire' effects if
+the arguments to the [gemwin] and the [metro] are not synched;
+#X text 232 529 Grid with 3 or 4 channels (4th channel gets destroyed)
+;
+#X obj 130 93 metro 33.3667;
+#X connect 0 0 13 0;
+#X connect 1 0 0 0;
+#X connect 2 0 40 0;
+#X connect 3 0 49 0;
+#X connect 4 0 18 0;
+#X connect 5 0 24 0;
+#X connect 12 0 13 0;
+#X connect 14 0 2 0;
+#X connect 18 0 5 0;
+#X connect 21 0 18 0;
+#X connect 22 0 21 0;
+#X connect 32 1 20 0;
+#X connect 33 1 23 0;
+#X connect 34 1 48 0;
+#X connect 35 1 19 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 40 0 37 0;
+#X connect 40 0 44 0;
+#X connect 41 0 40 0;
+#X connect 42 0 40 0;
+#X connect 43 0 40 0;
+#X connect 44 0 18 1;
+#X connect 44 1 46 0;
+#X connect 45 0 44 1;
+#X connect 46 0 18 1;
+#X connect 49 0 40 0;
diff --git a/externals/gridflow/doc/flow_classes/#to_symbol-help.pd b/externals/gridflow/doc/flow_classes/#to_symbol-help.pd
new file mode 100644
index 00000000..f991d814
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#to_symbol-help.pd
@@ -0,0 +1,52 @@
+#N canvas 648 0 632 642 10;
+#X obj 11 498 cnv 15 63 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 176 469 display;
+#X obj 174 557 display;
+#X symbolatom 353 559 12 0 0 0 - - -;
+#X msg 11 409 72 101 108 108 111 32 87 111 114 108 100 33;
+#X obj 11 428 #import (3 2 2);
+#X text 324 409 <-- create the grid here;
+#X obj 11 498 #to_symbol;
+#X obj 11 557 print converted_grid;
+#X obj 0 0 doc_h;
+#X obj 3 691 doc_o 1;
+#X obj 3 629 doc_i 1;
+#X obj 3 589 doc_c 0;
+#X text 11 102 note that a zero value will cause pd to truncate the
+symbol there. thus a symbol may have less bytes than the grid it was
+made from.;
+#X text 10 147 remember that a byte is not necessarily a codepoint
+\, a codepoint is not necessarily a character \, and all characters
+don't always have the same width. these distinctions don't matter for
+all encodings.;
+#X text 11 32 Produces a symbol from grid data in its input. The values
+are expected to be valid in the character encoding that you are using
+\, but no check will be performed for that \, and additionally \, no
+check will be made that the generated symbol only contains characters
+that can be put in a symbol.;
+#X obj 14 659 doc_ii 0;
+#X obj 14 721 doc_oo 0;
+#X obj 97 659 doc_m i0 grid;
+#X obj 97 721 doc_m o0 symbol;
+#X obj 0 753 doc_f;
+#X text 232 659 will be transformed into a symbol.;
+#X text 232 721 symbol made of grid elements as bytes.;
+#X text 12 211 in the future \, this might work at the level of codepoints
+instead. thus with today's default UTF-8 (compact unicode) encoding
+\, &eacute \; has to be written as 195 169 \, you would be able to
+write it as just 233 (as with iso-latin-1) and it would get converted
+to 195 169 automatically. however there is still another form of this
+character that is made as two codepoints \, 101 (e) and the "dead acute"
+character \, separately \, on systems that support it.;
+#X text 14 342 at this point \, though \, most branches of pd still
+can't handle utf-8 properly \, so there isn't much of a hurry in adding
+utf-8 support to [#to_symbol]...;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X connect 5 0 7 0;
+#X connect 7 0 2 0;
+#X connect 7 0 3 0;
+#X connect 7 0 8 0;
+#X connect 18 1 21 0;
+#X connect 19 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/#transpose-help.pd b/externals/gridflow/doc/flow_classes/#transpose-help.pd
new file mode 100644
index 00000000..9537434a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#transpose-help.pd
@@ -0,0 +1,37 @@
+#N canvas 674 0 632 444 10;
+#X obj 3 150 doc_c 2;
+#X obj 36 65 #transpose;
+#X obj 3 234 doc_i 3;
+#X obj 3 353 doc_o 1;
+#X obj 0 0 doc_h;
+#X obj 14 180 doc_cc 0;
+#X obj 14 202 doc_cc 1;
+#X obj 14 264 doc_ii 0;
+#X obj 14 299 doc_ii 1;
+#X obj 14 321 doc_ii 2;
+#X obj 14 383 doc_oo 0;
+#X obj 97 180 doc_m c0 float;
+#X obj 97 202 doc_m c1 float;
+#X obj 97 264 doc_m i0 grid;
+#X obj 97 299 doc_m i1 float;
+#X obj 97 321 doc_m i2 float;
+#X obj 97 383 doc_m o0 grid;
+#X text 232 264 swaps the two specified dimensions \; dimension numbers
+are as in [#join].;
+#X text 232 180 dimension number;
+#X text 232 202 dimension number;
+#X text 232 299 same as arg 0;
+#X text 232 321 same as arg 1;
+#X obj 0 415 doc_f;
+#X text 226 58 remaps contents of a grid by swapping dimensions of
+indices. for example \, [#transpose 0 1] does the same as [#remap_image]x[#reverse].
+;
+#X text 232 383 remapped image;
+#X text 228 108 this is like matrix-transposition that you frequently
+read about in linear algebra books.;
+#X connect 11 1 18 0;
+#X connect 12 1 19 0;
+#X connect 13 1 17 0;
+#X connect 14 1 20 0;
+#X connect 15 1 21 0;
+#X connect 16 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/#type-help.pd b/externals/gridflow/doc/flow_classes/#type-help.pd
new file mode 100644
index 00000000..4f765f5f
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#type-help.pd
@@ -0,0 +1,26 @@
+#N canvas 0 0 632 350 10;
+#X obj 3 117 doc_c 0;
+#X obj 3 157 doc_i 1;
+#X obj 3 217 doc_o 1;
+#X obj 14 247 doc_oo 0;
+#X obj 14 187 doc_ii 0;
+#X text 138 34 gives a symbol representing the numeric type of the
+grid received.;
+#X obj 97 247 doc_m o0 symbol;
+#X obj 97 187 doc_m i0 grid;
+#X obj 3 301 doc_also;
+#X obj 103 301 #dim;
+#X obj 139 301 #finished;
+#X obj 0 0 doc_h;
+#X obj 0 321 doc_f;
+#X obj 17 65 #type;
+#X symbolatom 17 84 10 0 0 0 - - -;
+#X msg 27 38 3 3 f # 10.4;
+#X text 232 247 numbertype in long form.;
+#X text 232 269 one of: uint8 int16 int32 int64 float32 float64;
+#X connect 6 1 16 0;
+#X connect 6 1 17 0;
+#X connect 8 1 9 0;
+#X connect 8 1 10 0;
+#X connect 13 0 14 0;
+#X connect 15 0 13 0;
diff --git a/externals/gridflow/doc/flow_classes/#unpack-help.pd b/externals/gridflow/doc/flow_classes/#unpack-help.pd
new file mode 100644
index 00000000..7068382a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#unpack-help.pd
@@ -0,0 +1,28 @@
+#N canvas 286 66 632 455 10;
+#X obj 17 61 #color;
+#X floatatom 17 195 5 0 0 0 - - -;
+#X floatatom 46 174 5 0 0 0 - - -;
+#X floatatom 75 152 5 0 0 0 - - -;
+#X text 196 84 <--click and drag to view grid values.;
+#X obj 17 128 #unpack 3;
+#X obj 0 0 doc_h;
+#X obj 3 304 doc_i 1;
+#X obj 3 364 doc_o n;
+#X text 12 28 Outputs individual values from a grid.;
+#X obj 3 228 doc_c 1;
+#X text 232 394 Outputs grid dimensions as individual numbers.;
+#X obj 14 334 doc_ii 0;
+#X obj 14 394 doc_oo any;
+#X obj 14 258 doc_cc 0;
+#X obj 97 259 doc_m c0 float/int;
+#X obj 97 334 doc_m i0 grid;
+#X obj 97 394 doc_m oany float;
+#X obj 0 426 doc_f;
+#X text 232 259 number of outlets. usually corresponds to the number
+of grid dimensions. (default: 2);
+#X connect 0 0 5 0;
+#X connect 5 0 1 0;
+#X connect 5 1 2 0;
+#X connect 5 2 3 0;
+#X connect 15 1 19 0;
+#X connect 17 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/#window-help.pd b/externals/gridflow/doc/flow_classes/#window-help.pd
new file mode 100644
index 00000000..aec81f45
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/#window-help.pd
@@ -0,0 +1,33 @@
+#N canvas 514 151 632 415 10;
+#X obj 0 0 doc_h;
+#X obj 0 386 doc_f;
+#X obj 149 56 tgl 15 0 empty empty click_me 17 7 0 10 -4034 -1 -1 0
+1;
+#X obj 47 55 #window alakazou;
+#X obj 14 140 doc_cc 0;
+#X obj 3 110 doc_c 0..1;
+#X obj 97 140 doc_m c0 symbol;
+#X text 232 140 window title;
+#X obj 3 172 doc_i 2;
+#X obj 14 202 doc_ii 0;
+#X obj 14 272 doc_ii 1;
+#X obj 97 237 doc_m i0 state;
+#X text 232 272 same as 'state';
+#X obj 97 202 doc_m i0 grid;
+#X obj 97 272 doc_m i1 bool;
+#X obj 3 366 doc_also;
+#X obj 103 366 #out;
+#X text 232 202 as with #out window when state=1 \; else ignored when
+state=0;
+#X text 232 237 1 to open the window \; 0 to close it.;
+#X obj 3 304 doc_o 1;
+#X obj 14 334 doc_oo 0;
+#X obj 97 334 doc_m o0 ...;
+#X text 232 334 whatever [#out window] outputs.;
+#X connect 2 0 3 1;
+#X connect 6 1 7 0;
+#X connect 11 1 18 0;
+#X connect 13 1 17 0;
+#X connect 14 1 12 0;
+#X connect 15 1 16 0;
+#X connect 21 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/0x40complex_sq-help.pd b/externals/gridflow/doc/flow_classes/0x40complex_sq-help.pd
new file mode 100644
index 00000000..42ca0f5a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/0x40complex_sq-help.pd
@@ -0,0 +1,52 @@
+#N canvas 648 0 632 537 10;
+#X obj 21 109 @complex_sq;
+#X text 176 59 this object computes the square of complex numbers.
+if seeing imaginary as Y and real as X \, then this operation squares
+the distance of a point from origin and doubles the angle between it
+and the +X half-axis clockwise. :);
+#X floatatom 21 58 5 0 0 0 - - -;
+#X floatatom 21 188 5 0 0 0 - - -;
+#X floatatom 64 58 5 0 0 0 - - -;
+#X floatatom 58 188 5 0 0 0 - - -;
+#X obj 21 78 #pack;
+#X obj 114 185 #print;
+#X obj 21 159 #unpack;
+#X obj 103 488 # +;
+#X obj 133 488 # abs-;
+#X obj 3 488 doc_also;
+#X obj 181 488 # C.sq-;
+#X obj 3 324 doc_c 0;
+#X obj 3 364 doc_i 1;
+#X obj 3 426 doc_o 1;
+#X obj 0 0 doc_h;
+#X obj 14 456 doc_oo 0;
+#X obj 14 394 doc_ii 0;
+#X obj 97 394 doc_m i0 grid;
+#X obj 97 456 doc_m o0 grid;
+#X text 232 394 grid of size (... \, 2);
+#X text 232 456 grid of same size;
+#X obj 0 508 doc_f;
+#X text 178 128 However \, this (old) object is backwards from the
+rest of GridFlow because it puts Imaginary before Real. [#fft] puts
+the Real part first. Open this abstraction to discover the new way
+to square a complex number. (The extra multiplication is the net result
+of swapping components before and after the squaring);
+#X text 178 212 used on an indexmap (#remap_image) \, this makes each
+thing appear twice \, each appearance spanning half of the original
+angle. straight lines become hyperbolic \, etc.;
+#X text 179 259 In the original version of GridFlow (aka Video4jmax
+0.2) \, the first example patch was feedback_fractal \, which used
+this operation with a [#remap_image] \, though it was expressed in
+much different terms back then.;
+#X connect 0 0 7 0;
+#X connect 0 0 8 0;
+#X connect 2 0 6 0;
+#X connect 4 0 6 1;
+#X connect 6 0 0 0;
+#X connect 8 0 3 0;
+#X connect 8 1 5 0;
+#X connect 11 1 9 1;
+#X connect 11 1 10 0;
+#X connect 11 1 12 0;
+#X connect 19 1 21 0;
+#X connect 20 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/args-demo.pd b/externals/gridflow/doc/flow_classes/args-demo.pd
new file mode 100644
index 00000000..54e3cfe7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/args-demo.pd
@@ -0,0 +1,27 @@
+#N canvas 0 0 613 300 10;
+#X obj 152 20 args hello (world a 42) *;
+#X obj 43 96 print args;
+#X obj 152 3 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 18 35 inlet;
+#X obj 18 233 outlet;
+#X obj 18 54 t a;
+#X obj 18 155 route temperature pression etc;
+#X obj 266 85 display;
+#X obj 209 105 display;
+#X text 270 69 rest of arguments (*);
+#X text 17 174 do whatever you want with those args;
+#X obj 223 230 t a;
+#X text 230 211 anything else coming from first inlet or named args
+;
+#X obj 153 125 display;
+#X text 157 106 hello;
+#X text 213 86 world;
+#X connect 0 0 13 0;
+#X connect 0 1 8 0;
+#X connect 0 2 7 0;
+#X connect 2 0 0 0;
+#X connect 3 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 1 0;
+#X connect 6 3 11 0;
diff --git a/externals/gridflow/doc/flow_classes/args-help.pd b/externals/gridflow/doc/flow_classes/args-help.pd
new file mode 100644
index 00000000..d7f6a345
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/args-help.pd
@@ -0,0 +1,50 @@
+#N canvas 648 0 632 631 10;
+#X text 354 70 demo default args;
+#X text 354 90 demo rest of args;
+#X text 354 130 demo missing args;
+#X text 354 110 demo comma args;
+#X obj 0 0 doc_h;
+#X obj 3 352 doc_i 1;
+#X obj 3 153 doc_c n;
+#X obj 14 382 doc_ii 0;
+#X obj 3 518 doc_o 1..;
+#X obj 97 382 doc_m i0 bang;
+#X obj 14 183 doc_cc any;
+#X obj 97 183 doc_m cany symbol;
+#X text 232 183 "*" represents the rest of arguments;
+#X text 232 205 other symbols represent mandatory arguments;
+#X obj 0 602 doc_f;
+#X obj 14 548 doc_oo any;
+#X obj 97 548 doc_m oany <atom>;
+#X text 232 548 output of single argument;
+#X text 232 570 output of rest of arguments \, if last arg of [args]
+is a "*".;
+#X obj 97 570 doc_m oany <list>;
+#X text 232 382 sends one message per outlet right-to-left. if there
+is a wildcard (*) as the last argument \, any extra arguments go there
+as a list message. Then for any missing arguments that have default
+values \, the default values are sent \, right to left. Then for each
+present argument that is not extra \, that argument will be sent on
+its own outlet. Finally \, each init-message (comma-separated) is parsed
+from the arguments and sent (magically) to the first inlet of the abstraction
+itself.;
+#X obj 97 227 doc_m cany nested-list;
+#X text 232 227 represent optional arguments as nested-lists;
+#X text 232 249 inside the nested-list \, \$1 must be the name of the
+argument \, \$2 must be "a" (the single letter) \, and \$3 must be
+the default value. the "a" is actually for future use (type-checking).
+;
+#X text 97 314 the star can only occur once and at the end \, and all
+optionals must follow all mandatories.;
+#X obj 12 89 args-demo pommes poires ananas biscuits-soda;
+#X obj 12 129 args-demo;
+#X obj 12 69 args-demo blah;
+#X obj 12 109 args-demo dorval \, temperature -18 \, pression 99.5
+;
+#X connect 9 1 20 0;
+#X connect 11 1 12 0;
+#X connect 11 1 13 0;
+#X connect 16 1 17 0;
+#X connect 19 1 18 0;
+#X connect 21 1 22 0;
+#X connect 21 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/ascii-help.pd b/externals/gridflow/doc/flow_classes/ascii-help.pd
new file mode 100644
index 00000000..b7ae57d5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/ascii-help.pd
@@ -0,0 +1,25 @@
+#N canvas 442 305 632 357 10;
+#X obj 39 73 ascii;
+#X floatatom 39 41 5 0 0 0 - - -;
+#X obj 39 92 print;
+#X text 135 74 write integer as decimal in ascii codes;
+#X text 232 195 number to be converted into ascii codes;
+#X obj 0 0 doc_h;
+#X obj 3 227 doc_o 1;
+#X obj 3 165 doc_i 1;
+#X obj 14 195 doc_ii 0;
+#X obj 14 257 doc_oo 0;
+#X obj 3 125 doc_c 0;
+#X obj 97 195 doc_m i0 float int;
+#X obj 97 257 doc_m o0 float;
+#X obj 0 328 doc_f;
+#X msg 86 40 1e+06;
+#X text 232 257 a sequence of floats corresponding to the ascii codes
+of the input integer as written in decimal. the sign is written in
+the case of negative values. exponential notation is used for large
+numbers.;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 11 1 4 0;
+#X connect 12 1 15 0;
+#X connect 14 0 0 0;
diff --git a/externals/gridflow/doc/flow_classes/ascii_to_f-help.pd b/externals/gridflow/doc/flow_classes/ascii_to_f-help.pd
new file mode 100644
index 00000000..a506c274
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/ascii_to_f-help.pd
@@ -0,0 +1,31 @@
+#N canvas 335 118 632 388 10;
+#X obj 0 0 doc_h;
+#X obj 0 359 doc_f;
+#X obj 31 75 ascii_to_f;
+#X text 200 74 parser for floats written in ascii as sequences of floats
+;
+#X obj 3 134 doc_c 0;
+#X obj 3 174 doc_i 1;
+#X obj 3 236 doc_o 2;
+#X obj 14 266 doc_oo 0;
+#X obj 14 327 doc_oo 1;
+#X obj 14 204 doc_ii 0;
+#X obj 97 204 doc_m i0;
+#X obj 97 327 doc_m o1 float;
+#X obj 97 266 doc_m o0 float;
+#X text 232 327 integer coming from inlet 0 but unrecognised;
+#X text 232 204 ascii bytes (integer);
+#X floatatom 31 100 8 0 0 0 - - -;
+#X obj 90 100 display;
+#X msg 30 50 51 \, 46 \, 49 \, 52 \, 49 \, 53 \, 57 \, 51 \, 0;
+#X text 232 266 float value successfully parsed. note that this is
+output only when an unrecognised character is received \, because otherwise
+\, it can't be known for sure that the number is finished.;
+#X text 201 93 recognises plus \, minus \, period \, but no exponents
+\, infinities nor NaN.;
+#X connect 2 0 15 0;
+#X connect 2 1 16 0;
+#X connect 10 1 14 0;
+#X connect 11 1 13 0;
+#X connect 12 1 18 0;
+#X connect 17 0 2 0;
diff --git a/externals/gridflow/doc/flow_classes/cv/#CornerHarris-help.pd b/externals/gridflow/doc/flow_classes/cv/#CornerHarris-help.pd
new file mode 100644
index 00000000..6d4aaf9d
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#CornerHarris-help.pd
@@ -0,0 +1,14 @@
+#N canvas 599 185 568 336 10;
+#X obj 0 0 doc_h cv/;
+#X obj 0 307 doc_f;
+#X obj 73 53 cv/#CornerHarris;
+#X obj 3 87 doc_c 0;
+#X obj 3 127 doc_i 1;
+#X obj 14 157 doc_ii 0;
+#X obj 3 247 doc_o 1;
+#X obj 14 277 doc_oo 0;
+#X obj 97 277 doc_m o0 grid;
+#X obj 97 157 doc_m i0 grid;
+#X obj 97 197 doc_m i0 block_size;
+#X obj 97 177 doc_m i0 aperture_size;
+#X obj 97 217 doc_m i0 k;
diff --git a/externals/gridflow/doc/flow_classes/cv/#Ellipse-help.pd b/externals/gridflow/doc/flow_classes/cv/#Ellipse-help.pd
new file mode 100644
index 00000000..be29f945
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#Ellipse-help.pd
@@ -0,0 +1,24 @@
+#N canvas 580 166 568 551 10;
+#X obj 0 0 doc_h cv/;
+#X obj 0 443 doc_f;
+#X obj 94 47 cv/#Ellipse;
+#X obj 3 81 doc_c 0;
+#X obj 3 121 doc_i 1;
+#X obj 3 361 doc_o 2;
+#X obj 14 151 doc_ii 0;
+#X obj 14 391 doc_oo 0;
+#X obj 14 411 doc_oo 1;
+#X obj 97 411 doc_m o1;
+#X obj 97 391 doc_m o0 grid;
+#X obj 97 151 doc_m i0 grid;
+#X obj 97 211 doc_m i0 center;
+#X obj 97 191 doc_m i0 axes;
+#X obj 97 171 doc_m i0 angle;
+#X obj 97 311 doc_m i0 start_angle;
+#X obj 97 251 doc_m i0 end_angle;
+#X obj 97 231 doc_m i0 color;
+#X obj 97 331 doc_m i0 thickness;
+#X obj 97 271 doc_m i0 line_type;
+#X obj 97 291 doc_m i0 shift;
+#X text 200 411 attributes;
+#X connect 9 1 21 0;
diff --git a/externals/gridflow/doc/flow_classes/cv/#Invert-help.pd b/externals/gridflow/doc/flow_classes/cv/#Invert-help.pd
new file mode 100644
index 00000000..095a6b4e
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#Invert-help.pd
@@ -0,0 +1,32 @@
+#N canvas 335 118 568 535 10;
+#X obj 0 0 doc_h cv/;
+#X obj 0 506 doc_f;
+#X text 88 75 just convert to grid;
+#X obj 55 157 cv/#Invert;
+#X obj 61 178 display;
+#X obj 22 75 # + (f #);
+#X msg 22 56 3 3 f # 1 2 0 3 0 4 5 6 0;
+#X obj 29 96 display;
+#X obj 3 366 doc_i 1;
+#X obj 3 426 doc_o 1;
+#X obj 3 486 doc_also;
+#X obj 100 486 cv/#SVD;
+#X obj 22 157 #t;
+#X obj 23 259 display;
+#X obj 14 396 doc_ii 0;
+#X obj 14 456 doc_oo 0;
+#X obj 3 326 doc_c;
+#X obj 97 396 doc_m i0 grid;
+#X obj 97 456 doc_m o0 grid;
+#X obj 22 239 #inner \, seed (f #);
+#X text 224 105 finds the float matrix that would cancel a given float
+matrix \, if both were to be put in [#inner] together.;
+#X connect 3 0 4 0;
+#X connect 3 0 19 1;
+#X connect 5 0 7 0;
+#X connect 5 0 12 0;
+#X connect 6 0 5 0;
+#X connect 10 1 11 0;
+#X connect 12 0 19 0;
+#X connect 12 1 3 0;
+#X connect 19 0 13 0;
diff --git a/externals/gridflow/doc/flow_classes/cv/#KMeans-help.pd b/externals/gridflow/doc/flow_classes/cv/#KMeans-help.pd
new file mode 100644
index 00000000..166e0aeb
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#KMeans-help.pd
@@ -0,0 +1,29 @@
+#N canvas 642 52 560 437 10;
+#X obj 20 190 #out window;
+#X obj 20 63 #in babbage.jpg;
+#X obj 20 46 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 20 102 #cast f;
+#X obj 37 44 loadbang;
+#X obj 20 171 #inner (1 3 # 85 51 15);
+#X obj 42 150 #print;
+#X obj 102 93 #out window;
+#X msg 225 86 mode channels;
+#X obj 20 121 cv/#KMeans 8 \, termcrit (8 nil);
+#X obj 0 0 doc_h cv/;
+#X obj 3 221 doc_c 1;
+#X obj 3 280 doc_i 2;
+#X obj 3 369 doc_o 1;
+#X obj 14 304 doc_ii 0;
+#X obj 14 328 doc_ii 1;
+#X obj 14 393 doc_oo 0;
+#X obj 14 245 doc_cc 0;
+#X connect 1 0 3 0;
+#X connect 1 0 7 0;
+#X connect 2 0 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 8 0 9 0;
+#X connect 9 0 5 0;
+#X connect 9 0 6 0;
diff --git a/externals/gridflow/doc/flow_classes/cv/#SVD-help.pd b/externals/gridflow/doc/flow_classes/cv/#SVD-help.pd
new file mode 100644
index 00000000..ba012df1
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#SVD-help.pd
@@ -0,0 +1,44 @@
+#N canvas 335 0 568 576 10;
+#X obj 0 0 doc_h cv/;
+#X obj 0 547 doc_f;
+#X obj 19 160 cv/#SVD;
+#X text 200 46 Singular Value Decomposition;
+#X obj 3 306 doc_c 0;
+#X obj 3 346 doc_i 1;
+#X obj 3 408 doc_o 3;
+#X obj 14 376 doc_ii 0;
+#X obj 14 438 doc_oo 0;
+#X obj 14 460 doc_oo 1;
+#X obj 14 482 doc_oo 2;
+#X obj 97 438 doc_m o0 grid;
+#X obj 97 460 doc_m o1 grid;
+#X obj 97 482 doc_m o2 grid;
+#X obj 28 88 display;
+#X text 82 65 just turn into a real grid;
+#X obj 210 161 display;
+#X obj 210 225 display;
+#X obj 20 225 display;
+#X msg 19 46 3 3 f # 1 0 0 0 2 3 0 3 -2;
+#X obj 19 65 # + (f #);
+#X text 287 89 for finding eigenvalues and eigenvectors.;
+#X obj 97 376 doc_m i0 grid;
+#X text 200 376 N by N matrix to decompose;
+#X text 200 438 N by N diagonal matrix containing eigenvalues;
+#X text 200 460 N by N matrix containing eigenvectors;
+#X text 200 482 N by N matrix containing fudge factors: typically contains
+only zeroes \, ones \, and minus ones.;
+#X obj 3 527 doc_also;
+#X obj 97 527 #extract_diagonal;
+#X obj 211 527 cv/#Invert;
+#X connect 2 0 18 0;
+#X connect 2 1 17 0;
+#X connect 2 2 16 0;
+#X connect 11 1 24 0;
+#X connect 12 1 25 0;
+#X connect 13 1 26 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 0;
+#X connect 20 0 2 0;
+#X connect 22 1 23 0;
+#X connect 27 1 28 0;
+#X connect 27 1 29 0;
diff --git a/externals/gridflow/doc/flow_classes/cv/#numop-help.pd b/externals/gridflow/doc/flow_classes/cv/#numop-help.pd
new file mode 100644
index 00000000..d8a26a75
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/cv/#numop-help.pd
@@ -0,0 +1,60 @@
+#N canvas 683 36 568 668 10;
+#X obj 22 114 #print;
+#X msg 22 69 2 2 # 0 1 2 3;
+#X obj 22 92 cv/#Add (2 2 # 0 1 2 3);
+#X obj 22 189 #print;
+#X msg 22 144 2 2 # 0 1 2 3;
+#X obj 267 114 #print;
+#X msg 267 69 2 2 # 0 1 2 3;
+#X obj 267 191 #print;
+#X obj 22 167 cv/#Sub (2 2 # 0 1 2 3);
+#X obj 267 92 cv/#Mul (2 2 # 0 1 2 3);
+#X obj 267 169 cv/#Div (2 2 # 0 1 2 3);
+#X msg 396 146 2 2 # 0 1 42 666;
+#X msg 396 69 2 2 # 0 1 42 666;
+#X msg 151 144 2 2 # 0 1 42 666;
+#X msg 151 69 2 2 # 0 1 42 666;
+#X obj 0 0 doc_h cv/;
+#X msg 267 146 2 2 # 0 1 2 -3000;
+#X text 424 167 rounds towards zero;
+#X obj 3 412 doc_c 1;
+#X obj 14 442 doc_cc 0;
+#X obj 3 472 doc_i 2;
+#X obj 14 502 doc_ii 0;
+#X obj 14 522 doc_ii 1;
+#X obj 3 552 doc_o 1;
+#X obj 14 582 doc_oo 0;
+#X obj 0 612 doc_f;
+#X obj 22 261 #print;
+#X msg 22 213 2 2 # 0 1 2 3;
+#X msg 151 213 2 2 # 0 1 42 666;
+#X obj 22 237 cv/#And (2 2 # 0 1 2 3);
+#X obj 267 261 #print;
+#X msg 267 213 2 2 # 0 1 2 3;
+#X msg 396 213 2 2 # 0 1 42 666;
+#X obj 267 333 #print;
+#X msg 267 285 2 2 # 0 1 2 3;
+#X msg 396 285 2 2 # 0 1 42 666;
+#X obj 267 237 cv/#Or (2 2 # 0 1 2 3);
+#X obj 267 309 cv/#Xor (2 2 # 0 1 2 3);
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 4 0 8 0;
+#X connect 6 0 9 0;
+#X connect 8 0 3 0;
+#X connect 9 0 5 0;
+#X connect 10 0 7 0;
+#X connect 11 0 10 1;
+#X connect 12 0 9 1;
+#X connect 13 0 8 1;
+#X connect 14 0 2 1;
+#X connect 16 0 10 0;
+#X connect 27 0 29 0;
+#X connect 28 0 29 1;
+#X connect 29 0 26 0;
+#X connect 31 0 36 0;
+#X connect 32 0 36 1;
+#X connect 34 0 37 0;
+#X connect 35 0 37 1;
+#X connect 36 0 30 0;
+#X connect 37 0 33 0;
diff --git a/externals/gridflow/doc/flow_classes/display-help.pd b/externals/gridflow/doc/flow_classes/display-help.pd
new file mode 100644
index 00000000..9ed72fec
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/display-help.pd
@@ -0,0 +1,24 @@
+#N canvas 674 0 632 415 10;
+#X obj 90 185 display;
+#X msg 319 61 0 1 2 3 5 8 13;
+#X floatatom 319 89 5 0 0 0 - - -;
+#X obj 89 58 #color;
+#X obj 0 0 doc_h;
+#X obj 3 211 doc_c 0;
+#X obj 3 251 doc_i 1;
+#X obj 3 326 doc_o 0;
+#X obj 14 281 doc_ii 0;
+#X obj 3 366 doc_also;
+#X obj 103 366 print;
+#X obj 145 366 #print;
+#X obj 0 386 doc_f;
+#X obj 97 281 doc_m i0 <any>;
+#X text 294 142 GUI object equivalent to [print] and [#print].;
+#X text 232 281 Displays the received message in the box \, resizing
+the box so that the message fits exactly.;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 9 1 10 0;
+#X connect 9 1 11 0;
+#X connect 13 1 15 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_add-help.pd b/externals/gridflow/doc/flow_classes/doc_add-help.pd
new file mode 100644
index 00000000..d80f048a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_add-help.pd
@@ -0,0 +1,23 @@
+#N canvas 283 161 632 333 10;
+#X obj 0 0 doc_h;
+#X obj 0 304 doc_f;
+#X obj 108 45 doc_add;
+#X obj 3 154 doc_i 2;
+#X obj 3 264 doc_o 0;
+#X obj 14 184 doc_ii 0;
+#X obj 14 219 doc_ii 1;
+#X obj 97 219 doc_m i1 float;
+#X obj 97 184 doc_m i0 bang;
+#X obj 3 92 doc_c 1;
+#X obj 14 122 doc_cc 0;
+#X obj 97 122 doc_m c0 symbol;
+#X text 195 37 add one [doc_m] to a given subsection.;
+#X text 194 57 for use by [doc_c] [doc_i] [doc_o] only.;
+#X text 232 184 add one [doc_m] with a blank \$2 (will show up as "~unspecified~")
+;
+#X text 232 219 y position of top of the parent (as given by outlet
+1 of [doc_layout]);
+#X text 232 122 subsection id \, such as "c0" \, "i3" or "oany".;
+#X connect 7 1 15 0;
+#X connect 8 1 14 0;
+#X connect 11 1 16 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_also-help.pd b/externals/gridflow/doc/flow_classes/doc_also-help.pd
new file mode 100644
index 00000000..c88d7e85
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_also-help.pd
@@ -0,0 +1,18 @@
+#N canvas 383 90 632 297 10;
+#X obj 0 0 doc_h;
+#X obj 0 268 doc_f;
+#X obj 3 84 doc_c 0;
+#X obj 3 124 doc_i 0;
+#X text 173 46 an auto-positioning documentation footer.;
+#X obj 3 164 doc_o 2;
+#X obj 14 194 doc_oo 0;
+#X obj 14 216 doc_oo 1;
+#X obj 97 194 doc_m o0 <none>;
+#X obj 97 216 doc_m o1 <evil>;
+#X text 232 194 this outlet is unused;
+#X text 232 216 this outlet is reserved for evil purposes;
+#X obj 3 248 doc_also;
+#X text 103 248 [doc_f];
+#X connect 8 1 10 0;
+#X connect 9 1 11 0;
+#X connect 12 1 13 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_below-help.pd b/externals/gridflow/doc/flow_classes/doc_below-help.pd
new file mode 100644
index 00000000..b4ac21cb
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_below-help.pd
@@ -0,0 +1,40 @@
+#N canvas 335 118 632 420 10;
+#X obj 0 0 doc_h;
+#X obj 0 391 doc_f;
+#X obj 102 50 doc_below;
+#X obj 3 95 doc_c 3;
+#X obj 3 223 doc_i 3;
+#X obj 3 329 doc_o 1;
+#X obj 14 359 doc_oo 0;
+#X obj 14 253 doc_ii 0;
+#X obj 14 275 doc_ii 1;
+#X obj 14 297 doc_ii 2;
+#X obj 14 125 doc_cc 0;
+#X obj 14 147 doc_cc 1;
+#X obj 14 191 doc_cc 2;
+#X obj 97 297 doc_m i2;
+#X obj 97 253 doc_m i0 list;
+#X obj 97 359 doc_m o0 list;
+#X obj 97 125 doc_m c0 symbol;
+#X obj 97 275 doc_m i1 symbol;
+#X text 232 275 same as arg 0;
+#X text 232 297 same as arg 1;
+#X obj 97 191 doc_m c2 float;
+#X obj 97 147 doc_m c1 float;
+#X text 232 147 0: just this node;
+#X text 232 169 1: recursively;
+#X text 218 41 this is to appear directly in the body of an element
+that appears in a help patch (there should be no subpatches involved
+in this case \, because of the uplevels);
+#X text 232 125 relative name such as c/0 or o/any/float;
+#X text 232 191 extra padding in pixels;
+#X text 232 253 (x y) to transform;
+#X text 232 359 (x y) \, usually the same as what came in.;
+#X connect 13 1 19 0;
+#X connect 14 1 27 0;
+#X connect 15 1 28 0;
+#X connect 16 1 25 0;
+#X connect 17 1 18 0;
+#X connect 20 1 26 0;
+#X connect 21 1 22 0;
+#X connect 21 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_bottom-help.pd b/externals/gridflow/doc/flow_classes/doc_bottom-help.pd
new file mode 100644
index 00000000..b17f8b4a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_bottom-help.pd
@@ -0,0 +1,27 @@
+#N canvas 335 118 632 372 10;
+#X obj 0 0 doc_h;
+#X obj 0 343 doc_f;
+#X obj 114 54 doc_bottom;
+#X obj 3 162 doc_i 2;
+#X obj 3 281 doc_o 1;
+#X obj 14 311 doc_oo 0;
+#X obj 14 192 doc_ii 0;
+#X obj 14 236 doc_ii 1;
+#X obj 97 311 doc_m o0 float;
+#X text 232 311 y position;
+#X obj 97 236 doc_m i1 symbol;
+#X obj 97 192 doc_m i0 float;
+#X obj 97 214 doc_m i0 before;
+#X text 232 192 y position;
+#X obj 3 100 doc_c 1;
+#X obj 14 130 doc_cc 0;
+#X obj 97 130 doc_m c0 float;
+#X text 232 130 0 or 1 whether to use the "before" directive.;
+#X text 232 214 used for sorting by name (id);
+#X text 232 236 node whose direct children should be queried (specified
+without the \$0);
+#X connect 8 1 9 0;
+#X connect 10 1 19 0;
+#X connect 11 1 13 0;
+#X connect 12 1 18 0;
+#X connect 16 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_c-help.pd b/externals/gridflow/doc/flow_classes/doc_c-help.pd
new file mode 100644
index 00000000..2362e2e8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_c-help.pd
@@ -0,0 +1,17 @@
+#N canvas 335 118 632 258 10;
+#X obj 0 0 doc_h;
+#X obj 0 229 doc_f;
+#X text 146 38 an auto-positioning documentation header;
+#X obj 3 67 doc_c 1;
+#X obj 3 129 doc_i 0;
+#X obj 3 169 doc_o 0;
+#X obj 14 97 doc_cc 0;
+#X obj 97 97 doc_m c0 float;
+#X text 232 97 number of creation arguments in the class being documented.
+;
+#X obj 3 209 doc_also;
+#X text 103 209 [doc_i];
+#X text 157 209 [doc_o];
+#X connect 7 1 8 0;
+#X connect 9 1 10 0;
+#X connect 9 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_cc-help.pd b/externals/gridflow/doc/flow_classes/doc_cc-help.pd
new file mode 100644
index 00000000..041cf718
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_cc-help.pd
@@ -0,0 +1,15 @@
+#N canvas 335 118 632 242 10;
+#X obj 0 0 doc_h;
+#X obj 3 73 doc_c;
+#X obj 3 113 doc_i;
+#X obj 3 153 doc_o;
+#X obj 0 213 doc_f;
+#X text 144 35 auto-positioning documentation subheader for a specific
+creation argument.;
+#X obj 3 193 doc_also;
+#X text 103 193 [doc_c];
+#X text 157 193 [doc_ii];
+#X text 217 193 [doc_oo];
+#X connect 6 1 7 0;
+#X connect 6 1 8 0;
+#X connect 6 1 9 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_editmode-help.pd b/externals/gridflow/doc/flow_classes/doc_editmode-help.pd
new file mode 100644
index 00000000..3c69aa5d
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_editmode-help.pd
@@ -0,0 +1,16 @@
+#N canvas 451 192 632 304 10;
+#X obj 0 0 doc_h;
+#X obj 0 275 doc_f;
+#X obj 103 51 doc_editmode;
+#X obj 3 113 doc_c 0;
+#X obj 3 153 doc_i 2;
+#X obj 3 235 doc_o 0;
+#X obj 14 183 doc_ii 0;
+#X obj 14 203 doc_ii 1;
+#X obj 97 183 doc_m i0 float;
+#X obj 97 203 doc_m i1 float;
+#X text 200 182 x position of the button to manage;
+#X text 232 203 1: also manage the rectangle;
+#X text 226 50 used for handling the changes that happen when switching
+from and to edit mode in GridFlow's documentation.;
+#X connect 9 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_exist-help.pd b/externals/gridflow/doc/flow_classes/doc_exist-help.pd
new file mode 100644
index 00000000..aaf53a39
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_exist-help.pd
@@ -0,0 +1,26 @@
+#N canvas 215 276 632 354 10;
+#X obj 0 0 doc_h;
+#X obj 0 325 doc_f;
+#X obj 116 44 doc_exist;
+#X obj 3 82 doc_c 1;
+#X obj 3 157 doc_i 2;
+#X obj 3 241 doc_o 1;
+#X obj 14 271 doc_oo 0;
+#X obj 14 187 doc_ii 0;
+#X obj 14 209 doc_ii 1;
+#X obj 14 112 doc_cc 0;
+#X obj 97 112 doc_m c0 symbol;
+#X text 232 112 relative name of object to be checked for. the \$0
+of the parent will be automatically added (with a slash).;
+#X obj 97 187 doc_m i0 bang;
+#X obj 97 209 doc_m i1 symbol;
+#X text 232 209 same as arg 0;
+#X obj 97 271 doc_m o0 float;
+#X text 232 187 perform a check and output the result;
+#X text 232 271 0: not found;
+#X text 232 293 1: found;
+#X connect 10 1 11 0;
+#X connect 12 1 16 0;
+#X connect 13 1 14 0;
+#X connect 15 1 17 0;
+#X connect 15 1 18 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_f-help.pd b/externals/gridflow/doc/flow_classes/doc_f-help.pd
new file mode 100644
index 00000000..3c210670
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_f-help.pd
@@ -0,0 +1,7 @@
+#N canvas 335 118 632 227 10;
+#X obj 0 0 doc_h;
+#X obj 0 198 doc_f;
+#X obj 3 78 doc_c 0;
+#X obj 3 118 doc_i 0;
+#X obj 3 158 doc_o 0;
+#X text 173 46 an auto-positioning documentation footer.;
diff --git a/externals/gridflow/doc/flow_classes/doc_h-help.pd b/externals/gridflow/doc/flow_classes/doc_h-help.pd
new file mode 100644
index 00000000..00b71c86
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_h-help.pd
@@ -0,0 +1,13 @@
+#N canvas 409 226 632 269 10;
+#X obj 0 0 doc_h;
+#X obj 0 240 doc_f;
+#X text 126 40 an auto-positioning documentation header;
+#X obj 3 160 doc_i 0;
+#X obj 3 200 doc_o 0;
+#X obj 3 72 doc_c 1;
+#X obj 14 102 doc_cc 0;
+#X obj 97 102 doc_m c0 symbol;
+#X text 232 102 namespace prefix (can't be figured out automatically
+for now). must include trailing slash. hopefully this is a temporary
+measure.;
+#X connect 7 1 8 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_i-help.pd b/externals/gridflow/doc/flow_classes/doc_i-help.pd
new file mode 100644
index 00000000..ba2cbbcb
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_i-help.pd
@@ -0,0 +1,10 @@
+#N canvas 454 262 632 251 10;
+#X obj 0 0 doc_h;
+#X obj 0 222 doc_f;
+#X obj 3 80 doc_c 1;
+#X obj 3 142 doc_i 0;
+#X obj 3 182 doc_o 0;
+#X obj 14 110 doc_cc 0;
+#X obj 97 110 doc_m c0 float;
+#X text 232 110 number of inlets in the class being documented;
+#X connect 6 1 7 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_ii-help.pd b/externals/gridflow/doc/flow_classes/doc_ii-help.pd
new file mode 100644
index 00000000..9858cce7
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_ii-help.pd
@@ -0,0 +1,15 @@
+#N canvas 335 118 632 260 10;
+#X obj 0 0 doc_h;
+#X obj 3 91 doc_c;
+#X obj 3 131 doc_i;
+#X obj 3 171 doc_o;
+#X obj 0 231 doc_f;
+#X text 132 41 auto-positioning documentation subheader for a specific
+inlet.;
+#X text 103 211 doc_i;
+#X text 145 211 doc_cc;
+#X text 193 211 doc_oo;
+#X obj 3 211 doc_also;
+#X connect 9 1 6 0;
+#X connect 9 1 7 0;
+#X connect 9 1 8 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_layout-help.pd b/externals/gridflow/doc/flow_classes/doc_layout-help.pd
new file mode 100644
index 00000000..6ddf5154
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_layout-help.pd
@@ -0,0 +1,46 @@
+#N canvas 335 118 632 473 10;
+#X obj 0 0 doc_h;
+#X obj 0 444 doc_f;
+#X obj 3 91 doc_c 4;
+#X obj 14 121 doc_cc 0;
+#X obj 14 156 doc_cc 1;
+#X obj 14 178 doc_cc 2;
+#X obj 14 200 doc_cc 3;
+#X obj 97 200 doc_m c3 symbol;
+#X text 232 200 parent;
+#X text 232 178 height;
+#X text 232 156 width;
+#X text 232 121 relative id \, such as c0/hello \, to which the parent's
+\$0 will be automatically prefixed (with an extra slash);
+#X obj 3 232 doc_i 2;
+#X obj 3 360 doc_o 2;
+#X obj 14 390 doc_oo 0;
+#X obj 14 412 doc_oo 1;
+#X obj 97 390 doc_m o0 <none>;
+#X text 232 412 current (x y) position of the object;
+#X obj 97 412 doc_m o1 list;
+#X obj 97 328 doc_m i1 list;
+#X text 232 328 new (x y) position after processing the output of outlet
+1;
+#X obj 97 284 doc_m i0 name;
+#X obj 97 306 doc_m i0 parent;
+#X obj 97 262 doc_m i0 height;
+#X text 232 262 same as arg 2;
+#X text 232 284 same as arg 0;
+#X text 232 306 same as arg 3;
+#X obj 14 262 doc_ii 0;
+#X obj 14 328 doc_ii 1;
+#X obj 97 156 doc_m c1 float;
+#X obj 97 178 doc_m c2 float;
+#X obj 97 121 doc_m c0 symbol;
+#X text 109 49 used by all [doc_...] abstractions for their own positioning
+;
+#X connect 7 1 8 0;
+#X connect 18 1 17 0;
+#X connect 19 1 20 0;
+#X connect 21 1 25 0;
+#X connect 22 1 26 0;
+#X connect 23 1 24 0;
+#X connect 29 1 10 0;
+#X connect 30 1 9 0;
+#X connect 31 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_m-help.pd b/externals/gridflow/doc/flow_classes/doc_m-help.pd
new file mode 100644
index 00000000..3a955e48
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_m-help.pd
@@ -0,0 +1,78 @@
+#N canvas 335 0 632 700 10;
+#X obj 0 0 doc_h;
+#X obj 0 1031 doc_f;
+#X obj 3 347 doc_c 2;
+#X obj 3 911 doc_i 0;
+#X obj 3 951 doc_o 2;
+#X obj 14 981 doc_oo 0;
+#X obj 14 1001 doc_oo 1;
+#X obj 14 377 doc_cc 0;
+#X obj 14 425 doc_cc 1;
+#X obj 97 377 doc_m c0 symbol;
+#X obj 97 425 doc_m c1 symbol;
+#X text 232 377 code for associating to a specific [doc_c] \, [doc_i]
+or [doc_o]. for example \, to associate with [doc_c 3] \, the code
+is c3;
+#X text 232 425 in the case of [doc_i] or [doc_o] \, this is either
+a selector or a meta-selector.;
+#X text 232 556 the sorting order of [doc_m] elements in a given subsection
+is alphabetical except for those five at the beginning: bang \, float
+\, grid \, symbol \, pointer \, list. and this one at the very end:
+<any>.;
+#X text 232 617 a list of meta-selectors:;
+#X text 232 639 <any>: represents the anything-method;
+#X text 232 661 <none>: is for writing anything of interest (?) about
+nothing at all. when present \, this is usually the only entry in the
+given subsection \, and it usually just says that the inlet or outlet
+is meant to be useless. typically \, no messages are accepted in the
+inlet \, or else \, all messages are accepted without doing anything
+with them \, or in the case of outlet \, nothing ever comes out of
+it.;
+#X text 232 796 <evil>: is like <none> \, except that the outlet that
+bears it will do weird things to the object it gets connected to. things
+that are very different from sending mere messages.;
+#X text 232 866 <hpgl>: this stands for a pd message version of the
+HPGL protocol.;
+#X text 232 460 in the case of [doc_c] \, we're just faking that this
+is a selector \, but you better only use atom types here: float \,
+grid \, symbol \, pointer \, <atom>.;
+#X text 232 844 <atom>: this stands for float \, grid \, symbol \,
+or pointer.;
+#X obj 97 981 doc_m o0 <none>;
+#X obj 97 1001 doc_m o1 <evil>;
+#X text 232 761 <gone>: is like none \, except the inlet or outlet
+is completely missing.;
+#X text 190 37 style guide for comments:;
+#X text 190 59 do not say "accepts a grid that will do blah blah" \,
+because all methods are accepting messages anyway. but do not say "a
+grid that will do blah blah" \, because "grid" is already specified
+by the [doc_m]. in some sentence structures it will be clearer to say
+"the grid" in some places rather than not.;
+#X text 232 508 a meta-selector is a name written within <> marks.
+those represent special things that aren't really selectors \, as well
+as sets of several selectors (or of many of them).;
+#X text 190 142 say "image that will do blah blah" if an image is expected
+\, but note that not so many objects really require images as inputs.
+;
+#X text 192 186 there is also a difference between hard limitations
+\, and expected interpretations. for example \, if we say "an rgb image"
+and mean it and are right about it \, then only 3-dimensional grids
+will be accepted \, and only those with 3 elements in the last dimension
+will be accepted \, but it is up to us to think of that last dimension
+to represent rgb \, it is up to us to think that this last dimension
+is channels \, and that the other dimensions are rows and columns.
+however \, to ease the reading \, thinks like "(rows columns 3)" and
+"rgb image" will be said even though much of GridFlow itself doesn't
+care about it.;
+#X connect 9 1 11 0;
+#X connect 10 1 12 0;
+#X connect 10 1 26 0;
+#X connect 10 1 13 0;
+#X connect 10 1 14 0;
+#X connect 10 1 15 0;
+#X connect 10 1 16 0;
+#X connect 10 1 17 0;
+#X connect 10 1 18 0;
+#X connect 10 1 19 0;
+#X connect 10 1 20 0;
+#X connect 10 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_make-help.pd b/externals/gridflow/doc/flow_classes/doc_make-help.pd
new file mode 100644
index 00000000..422e889c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_make-help.pd
@@ -0,0 +1,25 @@
+#N canvas 543 148 632 330 10;
+#X obj 0 0 doc_h;
+#X obj 0 301 doc_f;
+#X obj 93 51 doc_make;
+#X obj 3 177 doc_i 2;
+#X obj 3 261 doc_o 0;
+#X obj 14 207 doc_ii 0;
+#X obj 14 229 doc_ii 1;
+#X obj 14 123 doc_cc 0;
+#X obj 97 123 doc_m c0 symbol id;
+#X text 232 123 something like c0 \, i0 \, o0 \, just like the \$1
+of [doc_m];
+#X obj 97 207 doc_m i0 bang;
+#X obj 97 229 doc_m i1 float;
+#X text 232 207 generate subsections;
+#X obj 3 93 doc_c 2;
+#X obj 14 145 doc_cc 1;
+#X obj 97 145 doc_m c1 float;
+#X text 232 145 how many subsections;
+#X text 232 229 starting position of new subsections;
+#X text 169 51 reserved for use by [doc_c] \, [doc_i] and [doc_o];
+#X connect 8 1 9 0;
+#X connect 10 1 12 0;
+#X connect 11 1 17 0;
+#X connect 15 1 16 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_o-help.pd b/externals/gridflow/doc/flow_classes/doc_o-help.pd
new file mode 100644
index 00000000..4481e7a5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_o-help.pd
@@ -0,0 +1,11 @@
+#N canvas 565 290 632 249 10;
+#X obj 0 0 doc_h;
+#X obj 0 220 doc_f;
+#X text 173 43 an auto-positioning documentation header;
+#X obj 3 78 doc_c 1;
+#X obj 3 140 doc_i 0;
+#X obj 14 108 doc_cc 0;
+#X obj 3 180 doc_o 0;
+#X obj 97 108 doc_m c0 float;
+#X text 232 108 number of outlets in the class being documented;
+#X connect 7 1 8 0;
diff --git a/externals/gridflow/doc/flow_classes/doc_oo-help.pd b/externals/gridflow/doc/flow_classes/doc_oo-help.pd
new file mode 100644
index 00000000..9ad3e905
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/doc_oo-help.pd
@@ -0,0 +1,15 @@
+#N canvas 546 210 632 258 10;
+#X obj 0 0 doc_h;
+#X obj 0 229 doc_f;
+#X text 103 209 doc_ii;
+#X text 151 209 doc_cc;
+#X text 199 209 doc_o;
+#X obj 3 89 doc_c 1;
+#X obj 3 129 doc_i 0;
+#X obj 3 169 doc_o 0;
+#X text 129 45 auto-positioning documentation subheader for a specific
+outlet.;
+#X obj 3 209 doc_also;
+#X connect 9 1 2 0;
+#X connect 9 1 3 0;
+#X connect 9 1 4 0;
diff --git a/externals/gridflow/doc/flow_classes/for-help.pd b/externals/gridflow/doc/flow_classes/for-help.pd
new file mode 100644
index 00000000..8868e367
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/for-help.pd
@@ -0,0 +1,56 @@
+#N canvas 480 175 632 542 10;
+#X obj 41 115 print;
+#X obj 41 73 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 40 135 should print 10 23 36 49 62 75 88 101;
+#X obj 41 91 for 10 114 13;
+#X obj 0 0 doc_h;
+#X obj 3 179 doc_c 3;
+#X obj 3 285 doc_i 3;
+#X obj 3 433 doc_o 1;
+#X obj 14 315 doc_ii 0;
+#X obj 14 379 doc_ii 1;
+#X obj 14 401 doc_ii 2;
+#X obj 14 463 doc_oo 0;
+#X obj 14 209 doc_cc 0;
+#X obj 14 231 doc_cc 1;
+#X obj 14 253 doc_cc 2;
+#X obj 0 513 doc_f;
+#X obj 97 463 doc_m o0 float;
+#X obj 97 401 doc_m i2 float;
+#X obj 97 379 doc_m i1 float;
+#X obj 97 335 doc_m i0 float;
+#X obj 97 357 doc_m i0 set;
+#X obj 97 315 doc_m i0 bang;
+#X obj 3 493 doc_also;
+#X obj 103 493 #for 0 0 1;
+#X obj 175 493 until;
+#X obj 97 209 doc_m c0 float;
+#X obj 97 231 doc_m c1 float;
+#X obj 97 253 doc_m c2 float;
+#X text 232 209 from;
+#X text 232 231 to;
+#X text 232 253 step;
+#X text 232 379 same as arg 1;
+#X text 232 401 same as arg 2;
+#X text 232 357 same as arg 0;
+#X text 232 335 same as set \$1 \, bang;
+#X text 41 151 note that 114 should not be included!;
+#X text 192 42 count from a value to another value. the latter value
+is excluded \, such that [for 0 10 1] and for [10 20 1] have no common
+outputs.;
+#X msg 72 68 set 0;
+#X msg 71 42 5;
+#X connect 1 0 3 0;
+#X connect 3 0 0 0;
+#X connect 17 1 32 0;
+#X connect 18 1 31 0;
+#X connect 19 1 34 0;
+#X connect 20 1 33 0;
+#X connect 22 1 23 0;
+#X connect 22 1 24 0;
+#X connect 25 1 28 0;
+#X connect 26 1 29 0;
+#X connect 27 1 30 0;
+#X connect 37 0 3 0;
+#X connect 38 0 3 0;
diff --git a/externals/gridflow/doc/flow_classes/foreach-help.pd b/externals/gridflow/doc/flow_classes/foreach-help.pd
new file mode 100644
index 00000000..a7f5ff02
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/foreach-help.pd
@@ -0,0 +1,19 @@
+#N canvas 635 118 632 307 10;
+#X obj 0 0 doc_h;
+#X obj 31 51 foreach;
+#X obj 3 96 doc_c 0;
+#X obj 3 136 doc_i 1;
+#X obj 14 166 doc_ii 0;
+#X obj 97 166 doc_m i0 list;
+#X obj 3 198 doc_o 1;
+#X obj 14 228 doc_oo 0;
+#X text 232 166 Outputs N messages \, one per list element \, in order.
+;
+#X obj 0 278 doc_f;
+#X obj 97 228 doc_m o0 <atom>;
+#X obj 3 258 doc_also;
+#X obj 103 258 drip 0;
+#X text 183 49 split a message into separate atoms and output them
+all.;
+#X connect 5 1 8 0;
+#X connect 11 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/fps-help.pd b/externals/gridflow/doc/flow_classes/fps-help.pd
new file mode 100644
index 00000000..55ab816e
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/fps-help.pd
@@ -0,0 +1,71 @@
+#N canvas 648 0 632 642 10;
+#X obj 0 0 doc_h;
+#X obj 27 52 fps;
+#X obj 3 94 doc_c 1;
+#X obj 14 124 doc_cc 0;
+#X obj 97 124 doc_m c0 symbol;
+#X obj 3 178 doc_i 1;
+#X obj 14 208 doc_ii 0;
+#X obj 97 208 doc_m i0 bang;
+#X obj 97 291 doc_m i0 detailed;
+#X obj 97 335 doc_m i0 mode;
+#X obj 97 467 doc_m i0 period;
+#X obj 3 521 doc_o 1;
+#X obj 14 551 doc_oo 0;
+#X obj 97 551 doc_m o0 float;
+#X obj 97 573 doc_m o0 list;
+#X text 232 423 "logical" uses [timer];
+#X text 232 445 "process" uses [cputime];
+#X text 232 401 "cpu" uses [tsctime];
+#X text 232 335 "real" uses [realtime];
+#X text 232 357 "user" uses [usertime];
+#X text 232 379 "system" uses [systemtime];
+#X obj 3 666 doc_also;
+#X obj 103 666 realtime;
+#X obj 163 666 usertime;
+#X obj 223 666 systemtime;
+#X obj 295 666 tsctime;
+#X obj 349 666 timer;
+#X obj 391 666 cputime;
+#X text 232 208 Times at which bangs are received are stored until
+a large enough sample of those is accumulated. Large enough is defined
+to be whenever the timespan exceeds one second. Then a report is made
+through the outlet.;
+#X text 232 489 exceptionally \, anything else gets ignored.;
+#X text 232 551 (terse) this is the messages-per-second rating.;
+#X text 232 573 (detailed) this is: messages-per-second \, followed
+by five values of milliseconds-per-message: minimum \, median \, maximum
+\, average \, standard deviation.;
+#X text 232 621 (the average happens to be simply 1000 divided by the
+messages-per-second \, but it is convenient to have it anyway);
+#X obj 0 686 doc_f;
+#X obj 97 489 doc_m i0 <any>;
+#X text 232 146 "detailed": see outlet 0 list;
+#X text 232 124 "terse": see outlet 0 float;
+#X text 232 313 1: same as arg 0 detailed;
+#X text 232 291 0: same as arg 0 terse;
+#X text 232 467 minimum time between updates;
+#X text 185 52 measures frames per second... or bangs per second in
+general;
+#X connect 4 1 36 0;
+#X connect 4 1 35 0;
+#X connect 7 1 28 0;
+#X connect 8 1 37 0;
+#X connect 8 1 38 0;
+#X connect 9 1 18 0;
+#X connect 9 1 19 0;
+#X connect 9 1 20 0;
+#X connect 9 1 17 0;
+#X connect 9 1 15 0;
+#X connect 9 1 16 0;
+#X connect 10 1 39 0;
+#X connect 13 1 30 0;
+#X connect 14 1 32 0;
+#X connect 14 1 31 0;
+#X connect 21 1 22 0;
+#X connect 21 1 23 0;
+#X connect 21 1 24 0;
+#X connect 21 1 25 0;
+#X connect 21 1 26 0;
+#X connect 21 1 27 0;
+#X connect 34 1 29 0;
diff --git a/externals/gridflow/doc/flow_classes/gf.oneshot-help.pd b/externals/gridflow/doc/flow_classes/gf.oneshot-help.pd
new file mode 100644
index 00000000..f207434d
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/gf.oneshot-help.pd
@@ -0,0 +1,42 @@
+#N canvas 680 22 632 504 10;
+#X text 29 34 Like [spigot] \, but turns itself off after each message
+\, so you have to turn it on again to making it pass another message.
+;
+#X msg 195 125 1;
+#X obj 171 125 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X msg 127 88 test;
+#X obj 127 199 print;
+#X floatatom 168 90 5 0 0 0 - - -;
+#X floatatom 171 200 5 0 0 0 - - -;
+#X text 232 125 <-- both will reset the object;
+#X text 232 441 Outputs incoming message.;
+#X text 232 366 Resets the object so that the next mesage will be passed
+through.;
+#X obj 127 159 gf.oneshot;
+#X obj 3 301 doc_i 2;
+#X obj 0 0 doc_h;
+#X obj 14 366 doc_ii 1;
+#X obj 14 441 doc_oo 0;
+#X obj 3 411 doc_o 1;
+#X obj 14 331 doc_ii 0;
+#X obj 3 239 doc_c 1;
+#X obj 14 269 doc_cc 0;
+#X text 232 269 Whether to start open (default: 1);
+#X text 232 331 Incoming messages can be Grids \, Symbols \, Integers
+\, Lists \, etc.;
+#X obj 0 473 doc_f;
+#X obj 97 269 doc_m c0 bool;
+#X obj 97 366 doc_m i1 bang;
+#X obj 97 441 doc_m o0 <any>;
+#X obj 97 331 doc_m i0 <any>;
+#X connect 1 0 10 1;
+#X connect 2 0 10 1;
+#X connect 3 0 10 0;
+#X connect 5 0 10 0;
+#X connect 10 0 4 0;
+#X connect 10 0 6 0;
+#X connect 22 1 19 0;
+#X connect 23 1 9 0;
+#X connect 24 1 8 0;
+#X connect 25 1 20 0;
diff --git a/externals/gridflow/doc/flow_classes/hpgl_find_bbox-help.pd b/externals/gridflow/doc/flow_classes/hpgl_find_bbox-help.pd
new file mode 100644
index 00000000..758f6560
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/hpgl_find_bbox-help.pd
@@ -0,0 +1,21 @@
+#N canvas 335 118 632 322 10;
+#X obj 0 293 doc_f;
+#X obj 0 0 doc_h;
+#X obj 94 48 hpgl_find_bbox;
+#X obj 3 81 doc_c 0;
+#X obj 3 121 doc_i 2;
+#X obj 3 231 doc_o 1;
+#X obj 14 151 doc_ii 0;
+#X obj 14 173 doc_ii 1;
+#X obj 14 261 doc_oo 0;
+#X obj 97 151 doc_m i0 <hpgl>;
+#X obj 97 173 doc_m i1 bang;
+#X obj 97 261 doc_m o0 grid;
+#X text 232 261 (2 2)-grid representing bounding box.;
+#X text 232 151 HPGL stream to find the bounding box of.;
+#X text 232 173 outputs the bounding box of all coordinates used so
+far in PA \, PD \, PU commands. if no such coordinates have been used
+so far \, it will output funny nonsense values instead.;
+#X connect 9 1 13 0;
+#X connect 10 1 14 0;
+#X connect 11 1 12 0;
diff --git a/externals/gridflow/doc/flow_classes/hpgl_font_render-help.pd b/externals/gridflow/doc/flow_classes/hpgl_font_render-help.pd
new file mode 100644
index 00000000..2764f4a5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/hpgl_font_render-help.pd
@@ -0,0 +1,178 @@
+#N canvas 604 0 632 642 10;
+#X obj 215 53 until;
+#X obj 215 36 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 148 36 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X msg 222 77 rewind;
+#X obj 312 171 print bogus;
+#X obj 112 317 loadbang;
+#X obj 220 171 print command;
+#X obj 132 256 #store;
+#X obj 303 195 loadbang;
+#X obj 220 152 spigot;
+#X obj 266 153 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 33 503 fps;
+#X obj 306 38 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 -1
+-1;
+#X obj 148 53 metro 1;
+#X obj 224 382 #pack;
+#X obj 254 366 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 0 256;
+#X obj 224 350 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 0 256;
+#X obj 280 382 #pack;
+#X obj 310 366 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 750 256;
+#X obj 280 350 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 1000 256;
+#X obj 109 283 gf.oneshot;
+#X obj 132 200 t b b;
+#X obj 33 522 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-225271 -1 -1 0 256;
+#X obj 33 192 gf.oneshot;
+#X obj 63 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 63 173 t b b;
+#X obj 98 364 #draw_hpgl;
+#X obj 33 484 #out window;
+#X obj 130 157 f;
+#X obj 155 157 + 1;
+#X obj 130 176 sel;
+#X text 362 35 TODO: look for bug in [#in grid] code...;
+#X obj 215 131 plotter_parser;
+#X obj 312 152 spigot;
+#X obj 358 153 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 128 440 # >> 4;
+#X msg 112 336 3 # 255 255 255;
+#X msg 303 214 480 640 3 #;
+#X obj 63 463 #gamma;
+#X obj 109 465 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 350 256;
+#X obj 128 402 #convolve (3 3 # 0 1 0 1 12 1);
+#X obj 128 421 # + 7;
+#X obj 98 440 t a;
+#X obj 137 384 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 143 229 t a a;
+#X obj 33 444 shunt;
+#X obj 72 445 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 98 383 shunt;
+#X obj 221 287 hpgl_find_bbox;
+#X obj 311 288 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 221 306 #to_list;
+#X msg 221 325 PU \$1 \$2 \, PD \$3 \$2 \$3 \$4 \$1 \$4 \$1 \$2;
+#X obj 215 99 #in grid lots_of_text.hpgl \, headerless \, type b;
+#X obj 148 72 t b b b b;
+#X obj 215 252 hpgl_font_render images/hershey \, spacing 10 \, scaling
+0.12 \, rowheight 54 \, wrap 666;
+#X obj 155 176 % 16;
+#X obj 0 0 doc_h;
+#X obj 3 555 doc_c 1;
+#X obj 3 617 doc_i 2;
+#X obj 3 701 doc_o 1;
+#X obj 14 731 doc_oo 0;
+#X obj 14 647 doc_ii 0;
+#X obj 14 669 doc_ii 1;
+#X obj 14 585 doc_cc 0;
+#X obj 0 763 doc_f;
+#N canvas 0 0 450 300 tests 0;
+#X obj 15 242 outlet;
+#X msg 53 31 PU 0 10 \, PD 1000 10;
+#X msg 64 68 PU 0 0 \, print_from_ascii 116 114 97 98 111 117 108 105
+100 111 110;
+#X msg 77 123 PU 50 550 \, print_from_ascii 97 13 10 108 13 10 108
+13 10 244;
+#X msg 87 179 PU 0 0 \, LB world;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X restore 241 209 pd tests;
+#X obj 97 585 doc_m c0 symbol;
+#X text 232 585 font folder;
+#X obj 97 647 doc_m i0 <hpgl>;
+#X obj 97 731 doc_m o0 <hpgl>;
+#X text 232 647 containing LB or print_from_ascii commands;
+#X text 232 731 NOT containing LB or print_from_ascii commands anymore
+;
+#X obj 97 669 doc_m i1 symbol;
+#X text 232 669 same as arg 0;
+#X connect 0 0 52 0;
+#X connect 1 0 0 0;
+#X connect 2 0 13 0;
+#X connect 3 0 52 0;
+#X connect 5 0 36 0;
+#X connect 7 0 20 0;
+#X connect 8 0 37 0;
+#X connect 9 0 6 0;
+#X connect 10 0 9 1;
+#X connect 11 0 22 0;
+#X connect 12 0 3 0;
+#X connect 12 0 37 0;
+#X connect 13 0 53 0;
+#X connect 14 0 26 3;
+#X connect 15 0 14 1;
+#X connect 16 0 14 0;
+#X connect 17 0 26 4;
+#X connect 18 0 17 1;
+#X connect 19 0 17 0;
+#X connect 20 0 26 0;
+#X connect 21 0 7 0;
+#X connect 21 1 20 1;
+#X connect 21 1 28 0;
+#X connect 23 0 45 0;
+#X connect 24 0 25 0;
+#X connect 25 0 7 0;
+#X connect 25 1 23 1;
+#X connect 26 0 47 0;
+#X connect 26 1 21 0;
+#X connect 27 0 11 0;
+#X connect 28 0 29 0;
+#X connect 28 0 30 0;
+#X connect 29 0 55 0;
+#X connect 30 0 24 0;
+#X connect 32 0 9 0;
+#X connect 32 0 54 0;
+#X connect 32 1 33 0;
+#X connect 33 0 4 0;
+#X connect 34 0 33 1;
+#X connect 35 0 42 0;
+#X connect 36 0 26 1;
+#X connect 37 0 7 1;
+#X connect 38 0 27 0;
+#X connect 39 0 38 1;
+#X connect 40 0 41 0;
+#X connect 41 0 35 0;
+#X connect 42 0 44 0;
+#X connect 43 0 47 1;
+#X connect 44 0 23 0;
+#X connect 44 1 7 1;
+#X connect 45 0 27 0;
+#X connect 45 1 38 0;
+#X connect 46 0 45 1;
+#X connect 47 0 42 0;
+#X connect 47 1 40 0;
+#X connect 48 0 50 0;
+#X connect 49 0 48 1;
+#X connect 50 0 51 0;
+#X connect 52 0 32 0;
+#X connect 52 1 0 1;
+#X connect 52 1 2 0;
+#X connect 52 1 24 0;
+#X connect 53 0 52 0;
+#X connect 53 1 52 0;
+#X connect 53 2 52 0;
+#X connect 53 3 52 0;
+#X connect 54 0 26 2;
+#X connect 54 0 48 0;
+#X connect 55 0 28 1;
+#X connect 65 0 54 0;
+#X connect 66 1 67 0;
+#X connect 68 1 70 0;
+#X connect 69 1 71 0;
+#X connect 72 1 73 0;
diff --git a/externals/gridflow/doc/flow_classes/hpgl_op-help.pd b/externals/gridflow/doc/flow_classes/hpgl_op-help.pd
new file mode 100644
index 00000000..0ed87a04
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/hpgl_op-help.pd
@@ -0,0 +1,30 @@
+#N canvas 679 174 632 352 10;
+#X obj 0 0 doc_h;
+#X obj 0 323 doc_f;
+#X obj 93 42 hpgl_op;
+#X text 208 40 applies the same numop on all PA \, PD \, PU commands
+of the incoming HPGL stream;
+#X obj 3 80 doc_c 2;
+#X obj 3 164 doc_i 2;
+#X obj 3 248 doc_o 1;
+#X obj 14 110 doc_cc 0;
+#X obj 14 132 doc_cc 1;
+#X obj 14 194 doc_ii 0;
+#X obj 14 216 doc_ii 1;
+#X obj 14 278 doc_oo 0;
+#X obj 97 110 doc_m c0 symbol/numop;
+#X obj 97 132 doc_m c1 grid;
+#X obj 97 194 doc_m i0 <hpgl>;
+#X obj 97 278 doc_m o0 <hpgl>;
+#X obj 97 216 doc_m i1 grid;
+#X text 232 194 incoming HPGL commands;
+#X text 232 278 outgoing HPGL commands: same as incoming except coordinates
+of PA \, PU \, PD will have been changed.;
+#X text 232 216 same as argument 1;
+#X text 232 132 same as argument 1 of [#];
+#X text 232 110 same as argument 0 of [#];
+#X connect 12 1 21 0;
+#X connect 13 1 20 0;
+#X connect 14 1 17 0;
+#X connect 15 1 18 0;
+#X connect 16 1 19 0;
diff --git a/externals/gridflow/doc/flow_classes/hpgl_track_position-help.pd b/externals/gridflow/doc/flow_classes/hpgl_track_position-help.pd
new file mode 100644
index 00000000..17e987c6
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/hpgl_track_position-help.pd
@@ -0,0 +1,21 @@
+#N canvas 335 118 632 310 10;
+#X obj 0 281 doc_f;
+#X obj 0 0 doc_h;
+#X obj 43 52 hpgl_track_position;
+#X obj 3 133 doc_i 2;
+#X obj 3 217 doc_o 1;
+#X text 188 47 looks at PA \, PD \, PU in a HPGL stream to figure out
+what's the current position.;
+#X obj 3 93 doc_c 0;
+#X obj 14 163 doc_ii 0;
+#X obj 14 185 doc_ii 1;
+#X obj 14 247 doc_oo 0;
+#X obj 97 163 doc_m i0 <hpgl>;
+#X obj 97 185 doc_m i1 bang;
+#X obj 97 249 doc_m o0 grid;
+#X text 232 249 last position in the last PA \, PD or PU.;
+#X text 232 185 causes the last position to be output.;
+#X text 232 163 a HPGL stream.;
+#X connect 10 1 15 0;
+#X connect 11 1 14 0;
+#X connect 12 1 13 0;
diff --git a/externals/gridflow/doc/flow_classes/interval_overlap-help.pd b/externals/gridflow/doc/flow_classes/interval_overlap-help.pd
new file mode 100644
index 00000000..8956e701
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/interval_overlap-help.pd
@@ -0,0 +1,46 @@
+#N canvas 335 118 632 455 10;
+#X obj 0 0 doc_h;
+#X obj 0 426 doc_f;
+#X obj 77 49 interval_overlap;
+#X text 236 45 check whether two 1-D intervals overlap;
+#X obj 3 86 doc_c 4;
+#X obj 3 214 doc_i 4;
+#X obj 3 342 doc_o 1;
+#X obj 14 116 doc_cc 0;
+#X obj 14 138 doc_cc 1;
+#X obj 14 160 doc_cc 2;
+#X obj 14 182 doc_cc 3;
+#X obj 14 244 doc_ii 0;
+#X obj 14 266 doc_ii 1;
+#X obj 14 288 doc_ii 2;
+#X obj 14 310 doc_ii 3;
+#X obj 14 372 doc_oo 0;
+#X obj 97 116 doc_m c0 float;
+#X obj 97 138 doc_m c1 float;
+#X obj 97 160 doc_m c2 float;
+#X obj 97 182 doc_m c3 float;
+#X obj 97 244 doc_m i0 float;
+#X obj 97 266 doc_m i1 float;
+#X obj 97 288 doc_m i2 float;
+#X obj 97 310 doc_m i3 float;
+#X obj 97 372 doc_m o0 float;
+#X text 232 372 1: they overlap;
+#X text 232 394 0: they don't;
+#X text 232 116 start1;
+#X text 232 138 end1;
+#X text 232 160 start2;
+#X text 232 182 end2;
+#X text 232 244 same as arg 0;
+#X text 232 266 same as arg 1;
+#X text 232 310 same as arg 3;
+#X text 232 288 same as arg 2;
+#X connect 16 1 27 0;
+#X connect 17 1 28 0;
+#X connect 18 1 29 0;
+#X connect 19 1 30 0;
+#X connect 20 1 31 0;
+#X connect 21 1 32 0;
+#X connect 22 1 34 0;
+#X connect 23 1 33 0;
+#X connect 24 1 25 0;
+#X connect 24 1 26 0;
diff --git a/externals/gridflow/doc/flow_classes/inv0x2a-help.pd b/externals/gridflow/doc/flow_classes/inv0x2a-help.pd
new file mode 100644
index 00000000..c0787d4b
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/inv0x2a-help.pd
@@ -0,0 +1,78 @@
+#N canvas 584 51 632 545 10;
+#X obj 219 121 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 219 163 #in;
+#X obj 263 164 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 219 82 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 219 185 shunt 2;
+#X text 369 140 image loader;
+#X obj 219 101 metro 33.3667;
+#X obj 219 238 #out window \, title inv+;
+#X text 349 221 Outputs negated image;
+#X text 68 221 Outputs initial image;
+#X obj 338 188 hsl 128 15 1000 65000 0 0 empty empty empty -2 -6 0
+8 -262144 -1 -1 0 1;
+#X obj 187 496 swap;
+#X floatatom 34 102 5 0 0 0 - - -;
+#X floatatom 57 120 5 0 0 0 - - -;
+#X floatatom 34 176 5 0 0 0 - - -;
+#X floatatom 105 104 5 0 0 0 - - -;
+#X floatatom 149 121 5 0 0 0 - - -;
+#X floatatom 105 178 5 0 0 0 - - -;
+#X obj 105 147 inv* 10;
+#X obj 103 496 inv+;
+#X obj 139 496 # inv*;
+#X text 8 24 The [inv*] performs an inversion on the data passed to
+it. If you consider inlet 0 as the variable "a" and inlet 1 as variable
+"b" \, [inv*] performs the operation "b/a" on the values passed to
+it.;
+#X text 232 464 Outputs the result of the operation "b/a".;
+#X obj 263 209 # inv* 4000;
+#X text 288 163 inversion;
+#X obj 0 0 doc_h;
+#X obj 34 145 inv*;
+#X obj 3 350 doc_i 2;
+#X obj 3 434 doc_o 1;
+#X obj 3 288 doc_c 1;
+#X obj 3 496 doc_also;
+#X obj 14 380 doc_ii 0;
+#X obj 14 402 doc_ii 1;
+#X obj 14 464 doc_oo 0;
+#X obj 14 318 doc_cc 0;
+#X text 323 91 numerical operator of the Grid object;
+#X obj 97 318 doc_m c0 float;
+#X obj 97 380 doc_m i0 float;
+#X obj 97 402 doc_m i1 float;
+#X obj 97 464 doc_m o0 float;
+#X obj 0 516 doc_f;
+#X text 232 318 number that the left inlet values will be divided by.
+;
+#X msg 219 139 load r001.jpg;
+#X text 232 380 a: divisor;
+#X text 232 402 b: dividend;
+#X text 323 78 Another application: inv* as a;
+#X connect 0 0 42 0;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 4 1 23 0;
+#X connect 6 0 0 0;
+#X connect 10 0 23 1;
+#X connect 12 0 26 0;
+#X connect 13 0 26 1;
+#X connect 15 0 18 0;
+#X connect 16 0 18 1;
+#X connect 18 0 17 0;
+#X connect 23 0 7 0;
+#X connect 26 0 14 0;
+#X connect 30 1 19 1;
+#X connect 30 1 20 0;
+#X connect 30 1 11 0;
+#X connect 36 1 41 0;
+#X connect 37 1 43 0;
+#X connect 38 1 44 0;
+#X connect 39 1 22 0;
+#X connect 42 0 1 0;
diff --git a/externals/gridflow/doc/flow_classes/inv0x2b-help.pd b/externals/gridflow/doc/flow_classes/inv0x2b-help.pd
new file mode 100644
index 00000000..99a05e09
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/inv0x2b-help.pd
@@ -0,0 +1,75 @@
+#N canvas 652 22 632 574 10;
+#X obj 219 121 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 288 163 negative;
+#X obj 219 163 #in;
+#X obj 263 164 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 219 82 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 219 185 shunt 2;
+#X text 369 140 image loader;
+#X msg 219 139 open r001.jpg \, bang;
+#X obj 219 101 metro 33.3667;
+#X obj 219 238 #out window \, title inv+;
+#X text 349 221 Outputs negated image;
+#X text 68 221 Outputs initial image;
+#X obj 331 192 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 151 525 swap;
+#X obj 154 525 swap;
+#X text 9 24 The [inv+] performs an inversion on the data passed to
+it. If you consider inlet 0 as the variable "a" and inlet 1 as variable
+"b" \, [inv+] performs the operation "b-a" on the values passed to
+it.;
+#X floatatom 34 102 5 0 0 0 - - -;
+#X floatatom 57 119 5 0 0 0 - - -;
+#X floatatom 34 176 5 0 0 0 - - -;
+#X obj 103 525 # inv+;
+#X obj 34 146 inv+;
+#X obj 263 211 # inv+ 255;
+#X text 232 493 Outputs the result of the operation "b-a".;
+#X floatatom 105 104 5 0 0 0 - - -;
+#X floatatom 149 121 5 0 0 0 - - -;
+#X floatatom 105 178 5 0 0 0 - - -;
+#X obj 105 145 inv+ 10;
+#X obj 3 353 doc_i 2;
+#X obj 0 0 doc_h;
+#X obj 3 525 doc_also;
+#X obj 14 383 doc_ii 0;
+#X obj 14 418 doc_ii 1;
+#X obj 3 463 doc_o 1;
+#X obj 14 493 doc_oo 0;
+#X obj 3 278 doc_c 1;
+#X obj 14 308 doc_cc 0;
+#X obj 97 308 doc_m c0 float;
+#X obj 97 383 doc_m i0 float;
+#X obj 97 418 doc_m i1 float;
+#X obj 97 493 doc_m o0 float;
+#X obj 0 545 doc_f;
+#X text 232 308 number that the left inlet values will be subtracted
+from.;
+#X text 232 383 a: the value to subtract;
+#X text 232 418 b: the value to subtract from;
+#X connect 0 0 7 0;
+#X connect 2 0 5 0;
+#X connect 3 0 5 1;
+#X connect 4 0 8 0;
+#X connect 5 0 9 0;
+#X connect 5 1 21 0;
+#X connect 7 0 2 0;
+#X connect 8 0 0 0;
+#X connect 12 0 21 1;
+#X connect 16 0 20 0;
+#X connect 17 0 20 1;
+#X connect 20 0 18 0;
+#X connect 21 0 9 0;
+#X connect 23 0 26 0;
+#X connect 24 0 26 1;
+#X connect 26 0 25 0;
+#X connect 29 1 19 0;
+#X connect 29 1 13 0;
+#X connect 36 1 41 0;
+#X connect 37 1 42 0;
+#X connect 38 1 43 0;
+#X connect 39 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/list.==-help.pd b/externals/gridflow/doc/flow_classes/list.==-help.pd
new file mode 100644
index 00000000..6e38a0a9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/list.==-help.pd
@@ -0,0 +1,23 @@
+#N canvas 653 141 632 343 10;
+#X obj 0 0 doc_h;
+#X obj 0 314 doc_f;
+#X obj 84 56 list.==;
+#X text 174 49 compare two lists and tell whether they are exactly
+equal to each other.;
+#X obj 3 110 doc_c any;
+#X obj 14 140 doc_cc any;
+#X obj 97 140 doc_m cany <any>;
+#X obj 3 172 doc_i 2;
+#X obj 3 252 doc_o 1;
+#X obj 14 202 doc_ii 0;
+#X obj 14 222 doc_ii 1;
+#X obj 14 282 doc_oo 0;
+#X obj 97 202 doc_m i0 list;
+#X obj 97 222 doc_m i1 list;
+#X obj 97 282 doc_m o0 float bool;
+#X text 232 282 1 if lists are same \, 0 if they are different.;
+#X text 206 199 compare this list with the stored list;
+#X text 232 140 all arguments together form a list being stored;
+#X text 208 223 same as all arguments together;
+#X connect 6 1 17 0;
+#X connect 14 1 15 0;
diff --git a/externals/gridflow/doc/flow_classes/listappend-help.pd b/externals/gridflow/doc/flow_classes/listappend-help.pd
new file mode 100644
index 00000000..266738e8
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listappend-help.pd
@@ -0,0 +1,49 @@
+#N canvas 624 22 632 469 10;
+#X obj 103 420 listappend;
+#X obj 175 420 listelement;
+#X obj 253 420 listfind;
+#X obj 313 420 listflatten;
+#X obj 391 420 listprepend;
+#X obj 469 420 listreverse;
+#X obj 547 420 listsublist;
+#X msg 90 110 1 3 hello 8 13;
+#X msg 258 107 1 12 a b c d e f g h i j k l;
+#X obj 91 184 display;
+#X msg 267 128 200 201 202 203 204 205 206;
+#X obj 90 152 listappend 1 2 3 4 5 6 7;
+#X text 11 35 The [listappend] combines two lists together. It takes
+the initial list (List1)(passed as an argument or to inlet 1) and appends
+to it the list passed to inlet 0 (List0). [listappend] combines List0
+followed by List1 in a new list.;
+#X obj 0 0 doc_h;
+#X obj 3 274 doc_i 2;
+#X obj 3 358 doc_o 1;
+#X obj 3 212 doc_c n;
+#X obj 3 420 doc_also;
+#X obj 14 304 doc_ii 0;
+#X obj 14 326 doc_ii 1;
+#X obj 14 388 doc_oo 0;
+#X obj 14 242 doc_cc any;
+#X obj 97 304 doc_m i0 list;
+#X obj 97 326 doc_m i1 list;
+#X obj 97 388 doc_m o0 list;
+#X obj 0 440 doc_f;
+#X obj 97 242 doc_m cany <any>;
+#X text 232 242 all arguments together form the list to be appended
+;
+#X text 232 304 a list that the stored list will be appended to.;
+#X text 232 326 same as all args together;
+#X connect 7 0 11 0;
+#X connect 8 0 11 1;
+#X connect 10 0 11 1;
+#X connect 11 0 9 0;
+#X connect 17 1 0 0;
+#X connect 17 1 1 0;
+#X connect 17 1 2 0;
+#X connect 17 1 3 0;
+#X connect 17 1 4 0;
+#X connect 17 1 5 0;
+#X connect 17 1 6 0;
+#X connect 22 1 28 0;
+#X connect 23 1 29 0;
+#X connect 26 1 27 0;
diff --git a/externals/gridflow/doc/flow_classes/listelement-help.pd b/externals/gridflow/doc/flow_classes/listelement-help.pd
new file mode 100644
index 00000000..e30f98da
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listelement-help.pd
@@ -0,0 +1,39 @@
+#N canvas 604 22 632 523 10;
+#X floatatom 262 160 5 0 0 0 - - -;
+#X floatatom 281 106 5 0 0 0 - - -;
+#X obj 195 158 print;
+#X msg 195 81 1 3 hello 8 13;
+#X obj 195 129 listelement 0;
+#X text 10 32 Outputs one element from a list as selected by an integer.
+;
+#X text 232 238 An integer acts as an index \, it selects the position
+of an element in a list. The selected element is output \, for example:
+integer "0" selects and outputs the first element in a list \, integer
+"1" selects and outputs the second element in a list \, integers "-1"
+selects and outputs the last element in a list.;
+#X text 232 387 Changes the value of the argument i.e. changes the
+index into the list to get a different element.;
+#X obj 0 0 doc_h;
+#X obj 3 335 doc_i 2;
+#X obj 3 432 doc_o 1;
+#X obj 14 365 doc_ii 0;
+#X obj 14 387 doc_ii 1;
+#X obj 14 462 doc_oo 0;
+#X obj 3 208 doc_c 1;
+#X obj 14 238 doc_cc 0;
+#X obj 97 238 doc_m c0 float/int;
+#X obj 97 365 doc_m i0 list;
+#X obj 97 387 doc_m i1 float/int;
+#X text 232 462 The element selected by the index is sent to the outlet
+;
+#X obj 0 494 doc_f;
+#X text 232 365 a list of numbers or symbols.;
+#X obj 97 462 doc_m o0 >any>;
+#X connect 1 0 4 1;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 0 2 0;
+#X connect 16 1 6 0;
+#X connect 17 1 21 0;
+#X connect 18 1 7 0;
+#X connect 22 1 19 0;
diff --git a/externals/gridflow/doc/flow_classes/listfind-help.pd b/externals/gridflow/doc/flow_classes/listfind-help.pd
new file mode 100644
index 00000000..de83d33c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listfind-help.pd
@@ -0,0 +1,32 @@
+#N canvas 527 144 632 394 10;
+#X obj 0 0 doc_h;
+#X obj 0 365 doc_f;
+#X obj 44 66 listfind 2 3 5 7 11 13;
+#X floatatom 44 48 5 0 0 0 - - -;
+#X floatatom 44 85 5 0 0 0 - - -;
+#X text 214 54 find the position of an element (float or symbol) in
+a list \, or -1 if it is not found. in case of duplicate elements \,
+it only tells the position of the first occurrence.;
+#X obj 3 113 doc_c any;
+#X obj 14 143 doc_cc any;
+#X obj 97 143 doc_m cany <any>;
+#X obj 3 173 doc_i 1;
+#X obj 14 203 doc_ii 0;
+#X obj 97 203 doc_m i0 float;
+#X obj 97 238 doc_m i0 symbol;
+#X text 232 238 look for a symbol.;
+#X text 232 203 look for a float. this has the same gotchas as using
+[==] and [sel] \, about the precision of numbers.;
+#X obj 3 270 doc_o 1;
+#X obj 14 300 doc_oo 0;
+#X obj 97 300 doc_m o0 float int;
+#X text 232 300 nonnegative list index of first occurrence \, or -1
+if not found.;
+#X obj 3 345 doc_also;
+#X obj 103 345 listread;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 11 1 14 0;
+#X connect 12 1 13 0;
+#X connect 17 1 18 0;
+#X connect 19 1 20 0;
diff --git a/externals/gridflow/doc/flow_classes/listflatten-help.pd b/externals/gridflow/doc/flow_classes/listflatten-help.pd
new file mode 100644
index 00000000..6f253a92
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listflatten-help.pd
@@ -0,0 +1,39 @@
+#N canvas 630 27 632 433 10;
+#X obj 103 384 listappend;
+#X obj 253 384 listelement;
+#X obj 409 384 listfind;
+#X obj 547 384 listflatten;
+#X obj 175 384 listprepend;
+#X obj 331 384 listreverse;
+#X obj 469 384 listsublist;
+#X obj 225 153 display;
+#X obj 224 120 listflatten;
+#X msg 209 84 1 (2 (3 4 5) 6 7) 8;
+#X obj 210 187 display;
+#X obj 0 0 doc_h;
+#X obj 3 260 doc_i 1;
+#X obj 3 322 doc_o 1;
+#X obj 3 220 doc_c 0;
+#X obj 3 384 doc_also;
+#X obj 14 290 doc_ii 0;
+#X obj 14 352 doc_oo 0;
+#X obj 97 290 doc_m i0 list;
+#X obj 97 352 doc_m o0 list;
+#X obj 0 404 doc_f;
+#X text 232 290 a (usually) nested list.;
+#X text 232 352 Outputs the flattened (not nested) list.;
+#X text 7 30 Takes nested lists and places their contents into a single
+list in the same order. this is just like removing all parentheses
+from the literal and doing nothing else.;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 9 0 10 0;
+#X connect 15 1 0 0;
+#X connect 15 1 4 0;
+#X connect 15 1 1 0;
+#X connect 15 1 5 0;
+#X connect 15 1 2 0;
+#X connect 15 1 6 0;
+#X connect 15 1 3 0;
+#X connect 18 1 21 0;
+#X connect 19 1 22 0;
diff --git a/externals/gridflow/doc/flow_classes/listlength-help.pd b/externals/gridflow/doc/flow_classes/listlength-help.pd
new file mode 100644
index 00000000..32e2512a
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listlength-help.pd
@@ -0,0 +1,41 @@
+#N canvas 637 22 632 432 10;
+#X text 10 33 The [listlength] outputs the number of elements in the
+incoming list.;
+#X obj 103 383 listappend;
+#X obj 253 383 listelement;
+#X obj 409 383 listfind;
+#X obj 547 383 listflatten;
+#X obj 175 383 listprepend;
+#X obj 331 383 listreverse;
+#X obj 469 383 listsublist;
+#X floatatom 206 160 5 0 0 0 - - -;
+#X obj 139 158 print;
+#X msg 139 81 1 3 hello 8 13;
+#X obj 139 120 listlength;
+#X msg 246 96 1 12 a b c d e f g h i j k l;
+#X text 232 276 The length of the list passed to the left inlet will
+be returned in the outlet.;
+#X obj 0 0 doc_h;
+#X obj 3 206 doc_c 0;
+#X obj 3 246 doc_i 1;
+#X obj 3 321 doc_o 1;
+#X obj 3 383 doc_also 1;
+#X obj 14 276 doc_ii 0;
+#X obj 14 351 doc_oo 0;
+#X obj 97 276 doc_m i0 list;
+#X obj 97 351 doc_m o0 float int;
+#X obj 0 403 doc_f;
+#X text 232 351 the number of elements in the list.;
+#X connect 10 0 11 0;
+#X connect 11 0 8 0;
+#X connect 11 0 9 0;
+#X connect 12 0 11 0;
+#X connect 18 1 1 0;
+#X connect 18 1 5 0;
+#X connect 18 1 2 0;
+#X connect 18 1 6 0;
+#X connect 18 1 3 0;
+#X connect 18 1 7 0;
+#X connect 18 1 4 0;
+#X connect 21 1 13 0;
+#X connect 22 1 24 0;
diff --git a/externals/gridflow/doc/flow_classes/listprepend-help.pd b/externals/gridflow/doc/flow_classes/listprepend-help.pd
new file mode 100644
index 00000000..c71314af
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listprepend-help.pd
@@ -0,0 +1,51 @@
+#N canvas 631 22 632 468 10;
+#X obj 103 419 listappend;
+#X obj 253 419 listelement;
+#X obj 409 419 listfind;
+#X obj 547 419 listflatten;
+#X obj 175 419 listprepend;
+#X obj 331 419 listreverse;
+#X obj 469 419 listsublist;
+#X msg 92 112 1 3 hello 8 13;
+#X msg 260 110 1 12 a b c d e f g h i j k l;
+#X obj 93 180 display;
+#X msg 269 131 200 201 202 203 204 205 206;
+#X obj 92 151 listprepend 1 2 3 4 5 6 7;
+#X text 232 387 Outputs the resulting list.;
+#X text 232 241 This optional argument can contain the initial list
+;
+#X text 8 35 The [listprepend] combines two lists together. It takes
+the initial list (List1)(passed as an argument or to inlet 1) and appends
+the list passed to inlet 0 (List0). [listprepend] combines List1 followed
+by List0 in a new list.;
+#X obj 0 0 doc_h;
+#X obj 3 273 doc_i 2;
+#X obj 3 357 doc_o 1;
+#X obj 3 211 doc_c n;
+#X obj 3 419 doc_also;
+#X obj 14 303 doc_ii 0;
+#X obj 14 325 doc_ii 1;
+#X obj 14 387 doc_oo 0;
+#X obj 14 241 doc_cc any;
+#X obj 97 303 doc_m i0 list;
+#X obj 97 325 doc_m i1 list;
+#X obj 97 387 doc_m o0 list;
+#X obj 0 439 doc_f;
+#X text 232 303 a list to be appended to initial list.;
+#X text 232 325 initial list to be appended to.;
+#X obj 97 241 doc_m cany <any>;
+#X connect 7 0 11 0;
+#X connect 8 0 11 1;
+#X connect 10 0 11 1;
+#X connect 11 0 9 0;
+#X connect 19 1 0 0;
+#X connect 19 1 4 0;
+#X connect 19 1 1 0;
+#X connect 19 1 5 0;
+#X connect 19 1 2 0;
+#X connect 19 1 6 0;
+#X connect 19 1 3 0;
+#X connect 24 1 28 0;
+#X connect 25 1 29 0;
+#X connect 26 1 12 0;
+#X connect 30 1 13 0;
diff --git a/externals/gridflow/doc/flow_classes/listread-help.pd b/externals/gridflow/doc/flow_classes/listread-help.pd
new file mode 100644
index 00000000..a970e607
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listread-help.pd
@@ -0,0 +1,40 @@
+#N canvas 623 251 632 454 10;
+#X obj 0 0 doc_h;
+#X obj 0 425 doc_f;
+#X floatatom 44 48 5 0 0 0 - - -;
+#X floatatom 44 85 5 0 0 0 - - -;
+#X obj 3 143 doc_c any;
+#X obj 14 173 doc_cc any;
+#X obj 97 173 doc_m cany <any>;
+#X obj 3 203 doc_i 1;
+#X obj 14 233 doc_ii 0;
+#X obj 97 233 doc_m i0 float;
+#X obj 3 330 doc_o 1;
+#X obj 14 360 doc_oo 0;
+#X obj 97 360 doc_m o0 float int;
+#X text 232 360 nonnegative list index of first occurrence \, or -1
+if not found.;
+#X obj 3 405 doc_also;
+#X obj 103 405 listread;
+#X obj 44 66 listread 2 3 5 7 11 13;
+#X text 188 41 like [tabread] \, this outputs an element when given
+an index \, but unlike [tabread] \, this uses a list instead of an
+array.;
+#X obj 44 103 listfind 2 3 5 7 11 13;
+#X floatatom 44 122 5 0 0 0 - - -;
+#X text 188 88 a [listfind] with the same content cancels the effect
+of a [listread] when the input of [listread] is nonnegative and is
+smaller than the list's length.;
+#X text 232 233 lookup an element. if the index is nonnegative \, then
+it must be less than the list length \, else no output will be produced.
+if the index is negative \, then it must be greater than or equal to
+minus the list length \, and this counts from the end of the list:
+-1 will output the last element \, -2 will output the next to last
+\, etc.;
+#X connect 2 0 16 0;
+#X connect 3 0 18 0;
+#X connect 9 1 21 0;
+#X connect 12 1 13 0;
+#X connect 14 1 15 0;
+#X connect 16 0 3 0;
+#X connect 18 0 19 0;
diff --git a/externals/gridflow/doc/flow_classes/listreverse-help.pd b/externals/gridflow/doc/flow_classes/listreverse-help.pd
new file mode 100644
index 00000000..f5174d55
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listreverse-help.pd
@@ -0,0 +1,13 @@
+#N canvas 659 137 632 262 10;
+#X obj 40 40 listreverse;
+#X obj 0 0 doc_h;
+#X obj 3 73 doc_c 0;
+#X obj 3 113 doc_i 1;
+#X obj 3 173 doc_o 1;
+#X obj 14 143 doc_ii 0;
+#X obj 14 203 doc_oo 0;
+#X obj 97 143 doc_m i0 list;
+#X obj 97 203 doc_m o0 list;
+#X text 119 34 Outputs the incoming list \, from last element to first
+element.;
+#X obj 0 233 doc_f;
diff --git a/externals/gridflow/doc/flow_classes/listsublist-help.pd b/externals/gridflow/doc/flow_classes/listsublist-help.pd
new file mode 100644
index 00000000..900328f5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/listsublist-help.pd
@@ -0,0 +1,60 @@
+#N canvas 628 22 632 580 10;
+#X obj 103 531 listappend;
+#X obj 175 531 listelement;
+#X obj 253 531 listfind;
+#X obj 313 531 listflatten;
+#X obj 391 531 listprepend;
+#X obj 469 531 listreverse;
+#X msg 173 112 1 3 hello 8 13;
+#X msg 182 136 1 12 a b c d e f g h i j k l;
+#X obj 174 211 display;
+#X text 232 486 Outputs the sublist as specified by the inlets or the
+arguments.;
+#X text 9 33 The [listsublist] outputs consecutive elements of the
+list \, as selected by index (inlet 1 or arg 1) and length (inlet 2
+or arg 2). A negative index will start from the end of the list (like
+-1 means last element in the list).;
+#X floatatom 224 158 5 0 0 0 - - -;
+#X obj 0 0 doc_h;
+#X obj 3 350 doc_i 3;
+#X obj 3 456 doc_o 1;
+#X obj 3 253 doc_c 0..2;
+#X obj 3 531 doc_also;
+#X obj 14 380 doc_ii 0;
+#X obj 14 402 doc_ii 1;
+#X obj 14 424 doc_ii 2;
+#X obj 14 283 doc_cc 0;
+#X obj 14 305 doc_cc 1;
+#X obj 14 486 doc_oo 0;
+#X obj 547 531 listsublist;
+#X floatatom 267 158 5 0 0 0 - - -;
+#X obj 173 182 listsublist 2 3;
+#X text 232 283 The index in the list to start the sublist at.;
+#X text 232 305 The number of items wanted from the list starting at
+the index specified.;
+#X text 232 402 Index (See Argument 0);
+#X text 232 424 Number of items (See Argument 1);
+#X obj 97 283 doc_m c0 float/int;
+#X obj 97 305 doc_m c1 float/int;
+#X obj 97 380 doc_m i0 list;
+#X obj 97 402 doc_m i1 float int;
+#X obj 97 424 doc_m i2 float int;
+#X obj 97 486 doc_m o0 list;
+#X obj 0 551 doc_f;
+#X connect 6 0 25 0;
+#X connect 7 0 25 0;
+#X connect 11 0 25 1;
+#X connect 16 1 0 0;
+#X connect 16 1 1 0;
+#X connect 16 1 2 0;
+#X connect 16 1 3 0;
+#X connect 16 1 4 0;
+#X connect 16 1 5 0;
+#X connect 16 1 23 0;
+#X connect 24 0 25 2;
+#X connect 25 0 8 0;
+#X connect 30 1 26 0;
+#X connect 31 1 27 0;
+#X connect 33 1 28 0;
+#X connect 34 1 29 0;
+#X connect 35 1 9 0;
diff --git a/externals/gridflow/doc/flow_classes/norecurse-help.pd b/externals/gridflow/doc/flow_classes/norecurse-help.pd
new file mode 100644
index 00000000..d0207c97
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/norecurse-help.pd
@@ -0,0 +1,16 @@
+#N canvas 335 118 632 297 10;
+#X obj 0 0 doc_h;
+#X obj 3 80 doc_c;
+#X obj 0 268 doc_f;
+#X obj 76 48 norecurse;
+#X text 237 45 this will stop any control-recursion.;
+#X obj 3 120 doc_i 1;
+#X obj 3 208 doc_o 1;
+#X obj 14 150 doc_ii 0;
+#X obj 14 238 doc_oo 0;
+#X obj 97 150 doc_m i0 <any>;
+#X obj 97 238 doc_m o0 <any>;
+#X text 232 150 any incoming message will be copied as-is to the output.
+but only if a message is not currently "being sent" by this same object.
+thus this prevents any "strange loops".;
+#X connect 9 1 11 0;
diff --git a/externals/gridflow/doc/flow_classes/parallel_port-help.pd b/externals/gridflow/doc/flow_classes/parallel_port-help.pd
new file mode 100644
index 00000000..9cb8916d
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/parallel_port-help.pd
@@ -0,0 +1,96 @@
+#N canvas 188 22 632 673 10;
+#X floatatom 7 380 5 0 0 0 - - -;
+#X floatatom 71 348 5 0 0 0 - - -;
+#X floatatom 136 323 5 0 0 0 - - -;
+#X obj 7 34 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1;
+#X text 215 206 * my system resets the owner of the printer port to
+'root.lp' so I need to issue as root 'chown myuser.lp';
+#X text 215 50 * you will need : a paper clip (or a 'high tech' solid
+core 22-18 awg wire) an led a button;
+#X text 215 176 * consult http://en.wikipedia.org/wiki/Parallel_Port
+for the pinouts + more;
+#X text 215 255 7 6 5 4 3 2 1 0 bit number;
+#X text 215 269 9 8 7 6 5 4 3 2 pin number;
+#X text 215 237 layout of bit to pin numbers;
+#X text 18 32 <-- This will send a 0 or a 1 to the first pin;
+#X text 14 243 Will accept values from 0-255;
+#X obj 7 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 26 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 45 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 64 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 83 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0 1
+;
+#X obj 102 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 121 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 140 132 tgl 15 0 empty empty empty 0 -6 0 8 -260818 -1 -1 0
+1;
+#X obj 7 229 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-241291 -1 -1 0 256;
+#X obj 7 191 #fold +;
+#X obj 7 210 #to_float;
+#X obj 7 172 # << (0 1 2 3 4 5 6 7);
+#X obj 7 153 #pack 8 \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \,
+;
+#X text 19 274 takes the port as argument;
+#X text 44 -1 The cheapest digital i/o interface;
+#X obj 7 293 parallel_port /dev/lp0;
+#X obj 7 63 metro 1;
+#X text 215 286 Flags : PERRORP (active low) \, PSELECD (active high)
+\, POUTPA (active high) \, PACK (active low) \, PBUSY (active high)
+;
+#X obj 0 0 doc_h;
+#X text 215 80 1: break the paper clip in two and connect pin 11 (Busy)
+to pin 24 (GND) and pin 12 (Paper-Out) to 25 (GND). Those pins are
+normally 1 and grounding them opens the port for messages.;
+#X text 215 138 2: connect the led between pins 2 (Data0) and 23 (GND)
+;
+#X text 215 156 3: connect a button between pin 10 and 22 (GND);
+#X obj 3 416 doc_c 1;
+#X obj 3 478 doc_i 1;
+#X obj 14 508 doc_ii 0;
+#X obj 14 446 doc_cc 0;
+#X obj 0 644 doc_f;
+#X text 177 322 parallel port flags;
+#X text 110 348 status (pin 10);
+#X text 51 379 reserved for future use;
+#X obj 3 540 doc_o 3;
+#X obj 14 570 doc_oo 0;
+#X obj 14 590 doc_oo 1;
+#X obj 14 612 doc_oo 2;
+#X obj 97 612 doc_m o2 float;
+#X obj 97 590 doc_m o1 float;
+#X obj 97 570 doc_m o0 <none>;
+#X obj 97 508 doc_m i0 float;
+#X obj 97 446 doc_m c0 symbol;
+#X text 232 446 device name (Linux parallel port interface);
+#X text 232 508 bytes to send;
+#X text 232 590 status;
+#X text 232 612 flags;
+#X connect 3 0 28 0;
+#X connect 12 0 24 0;
+#X connect 13 0 24 1;
+#X connect 14 0 24 2;
+#X connect 15 0 24 3;
+#X connect 16 0 24 4;
+#X connect 17 0 24 5;
+#X connect 18 0 24 6;
+#X connect 19 0 24 7;
+#X connect 20 0 27 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 23 0 21 0;
+#X connect 24 0 23 0;
+#X connect 27 0 0 0;
+#X connect 27 1 1 0;
+#X connect 27 2 2 0;
+#X connect 28 0 12 0;
+#X connect 46 1 54 0;
+#X connect 47 1 53 0;
+#X connect 49 1 52 0;
+#X connect 50 1 51 0;
diff --git a/externals/gridflow/doc/flow_classes/pingpong-help.pd b/externals/gridflow/doc/flow_classes/pingpong-help.pd
new file mode 100644
index 00000000..17b44f36
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/pingpong-help.pd
@@ -0,0 +1,27 @@
+#N canvas 680 0 632 383 10;
+#X obj 0 0 doc_h;
+#X obj 3 294 doc_o 1;
+#X text 148 44 Transforms linear counting (0 \, 1 \, 2 \, 3 \, 4 \,
+...) into a back-and-forth counting (0 \, 1 \, 2 \, 1 \, 0 \, ...)
+from 0 to a specified upper bound.;
+#X obj 34 47 pingpong;
+#X obj 14 324 doc_oo 0;
+#X obj 3 109 doc_c 1;
+#X obj 3 171 doc_i 2;
+#X obj 14 139 doc_cc 0;
+#X obj 14 201 doc_ii 0;
+#X obj 14 262 doc_ii 1;
+#X obj 97 139 doc_m c0 float;
+#X obj 97 262 doc_m i1 float;
+#X text 232 262 same as arg 0;
+#X text 232 139 "top";
+#X obj 97 201 doc_m i0 float;
+#X text 232 201 a value to be transformed. If \, for example \, top=10
+\, then values 0 thru 10 are left unchanged \, values 11 thru 19 are
+mapped to 9 thru 1 respectively \, and 20 thru 30 are mapped to 0 thru
+10 \, and so on.;
+#X obj 97 324 doc_m o0 float;
+#X obj 0 354 doc_f;
+#X connect 10 1 13 0;
+#X connect 11 1 12 0;
+#X connect 14 1 15 0;
diff --git a/externals/gridflow/doc/flow_classes/plotter_control-help.pd b/externals/gridflow/doc/flow_classes/plotter_control-help.pd
new file mode 100644
index 00000000..944a0e53
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/plotter_control-help.pd
@@ -0,0 +1,79 @@
+#N canvas 576 39 632 605 10;
+#X obj 22 162 r foo;
+#X msg 427 236 print_from_ascii $*;
+#X msg 427 115 print hello_world;
+#X msg 154 117 pu;
+#X msg 154 165 pd;
+#X msg 155 268 sp 0;
+#X msg 154 217 pa 120 160;
+#X obj 427 187 unix_time;
+#X obj 427 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 14 318 comport 0 9600;
+#X obj 6 192 plotter_control;
+#X obj 23 221 print hpgl_commands;
+#X obj 427 259 s foo;
+#X text 194 117 pen up;
+#X text 194 165 pen down;
+#X obj 427 137 s foo;
+#X text 238 217 move to absolute position;
+#N canvas 0 22 450 300 draw_a_rectangle 0;
+#X msg 31 156 pu \, sp 0;
+#X msg 138 191 pd \, pa \$2 \$1;
+#X msg 129 100 sp 5 \, pu \, pa 0 0 \, other si 320 320;
+#X obj 115 252 s foo;
+#X msg 138 134 0 0 \, 0 1 \, 1 1 \, 1 0 \, 0 0;
+#X obj 31 35 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 31 52 t a a a;
+#X obj 138 153 # * (110 320);
+#X obj 138 172 #to_list;
+#X connect 0 0 3 0;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 6 1 4 0;
+#X connect 6 2 2 0;
+#X connect 7 0 8 0;
+#X connect 8 0 1 0;
+#X restore 427 291 pd draw_a_rectangle;
+#X text 74 343 use the comport object to interface to the plotter;
+#X obj 155 290 s foo;
+#X obj 154 239 s foo;
+#X obj 154 187 s foo;
+#X obj 154 139 s foo;
+#X text 198 270 (0...6) remove/change the pen;
+#X obj 0 0 doc_h;
+#X obj 3 379 doc_c 0;
+#X obj 3 419 doc_i 1;
+#X obj 3 494 doc_o 1;
+#X obj 14 524 doc_oo 0;
+#X obj 14 449 doc_ii 0;
+#X text 10 32 This object produces HPGL instructions in ASCII form
+that can be sent to the comport object in order to control an HPGL
+compatible plotter.;
+#X obj 0 576 doc_f;
+#X obj 427 211 #to_list;
+#X obj 97 449 doc_m i0 <hpgl>;
+#X obj 97 524 doc_m o0 float;
+#X text 232 524 serialised hpgl (as ascii codes);
+#X text 232 449 hpgl stream (note: most other hpgl inlets don't support
+lowercase);
+#X obj 3 556 doc_also;
+#X obj 103 556 plotter_parser;
+#X connect 0 0 10 0;
+#X connect 1 0 12 0;
+#X connect 2 0 15 0;
+#X connect 3 0 22 0;
+#X connect 4 0 21 0;
+#X connect 5 0 19 0;
+#X connect 6 0 20 0;
+#X connect 7 0 32 0;
+#X connect 8 0 7 0;
+#X connect 10 0 11 0;
+#X connect 32 0 1 0;
+#X connect 33 1 36 0;
+#X connect 34 1 35 0;
+#X connect 37 1 38 0;
diff --git a/externals/gridflow/doc/flow_classes/plotter_parser-help.pd b/externals/gridflow/doc/flow_classes/plotter_parser-help.pd
new file mode 100644
index 00000000..637d8211
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/plotter_parser-help.pd
@@ -0,0 +1,116 @@
+#N canvas 663 22 632 620 10;
+#X obj 195 161 plotter_parser;
+#X obj 195 63 until;
+#X obj 195 46 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 128 46 tgl 15 0 empty empty empty 17 7 0 10 -24198 -1 -1 0 1
+;
+#X msg 202 87 rewind;
+#X obj 297 159 print bogus;
+#X obj 195 275 loadbang;
+#X obj 206 204 print command;
+#X obj 127 245 #store;
+#X obj 209 233 loadbang;
+#X obj 206 185 spigot;
+#X obj 252 186 tgl 15 0 empty empty empty 17 7 0 10 -241291 -1 -1 0
+1;
+#X obj 13 330 fps;
+#X obj 286 48 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 -1
+-1;
+#X obj 128 63 metro 1;
+#X obj 195 109 #in grid plotter_parser_old.pd.hpgl \, headerless \,
+type b;
+#X obj 326 302 #pack;
+#X obj 356 286 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 0 256;
+#X obj 326 270 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 -1000 256;
+#X obj 326 353 #pack;
+#X obj 356 337 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 10333 256;
+#X obj 326 321 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
+-241291 -1 -1 7000 256;
+#X obj 128 82 t b b;
+#X obj 104 282 gf.oneshot;
+#X obj 127 226 t b b;
+#X obj 13 349 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-225271 -1 -1 0 256;
+#X obj 13 282 gf.oneshot;
+#X obj 31 149 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -1
+-1;
+#X obj 31 166 t b b;
+#X obj 123 315 #draw_hpgl;
+#X obj 13 311 #out window;
+#X obj 125 166 f;
+#X obj 150 166 + 1;
+#X obj 125 185 sel;
+#X msg 209 252 600 800 3 b #;
+#X msg 195 294 3 b # 255 255 255;
+#X obj 150 185 % 8;
+#X obj 0 0 doc_h;
+#X obj 3 385 doc_c 0;
+#X obj 3 425 doc_i 1;
+#X obj 3 487 doc_o 2;
+#X obj 14 455 doc_ii 0;
+#X obj 14 517 doc_oo 0;
+#X obj 14 539 doc_oo 1;
+#X obj 0 591 doc_f;
+#X obj 3 571 doc_also;
+#X obj 103 571 plotter_control;
+#X obj 97 539 doc_m o1 float;
+#X text 232 539 unknown bytes;
+#X obj 97 455 doc_m i0 float;
+#X obj 97 517 doc_m o0 <hpgl>;
+#X text 232 455 bytes that are supposed to form HPGL commands;
+#X text 232 517 HPGL commands;
+#X connect 0 0 10 0;
+#X connect 0 0 29 2;
+#X connect 0 1 5 0;
+#X connect 1 0 15 0;
+#X connect 2 0 1 0;
+#X connect 3 0 14 0;
+#X connect 4 0 15 0;
+#X connect 6 0 35 0;
+#X connect 8 0 23 0;
+#X connect 8 0 26 0;
+#X connect 9 0 34 0;
+#X connect 10 0 7 0;
+#X connect 11 0 10 1;
+#X connect 12 0 25 0;
+#X connect 13 0 4 0;
+#X connect 13 0 34 0;
+#X connect 14 0 22 0;
+#X connect 15 0 0 0;
+#X connect 15 1 1 1;
+#X connect 15 1 3 0;
+#X connect 15 1 27 0;
+#X connect 16 0 29 3;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
+#X connect 19 0 29 4;
+#X connect 20 0 19 1;
+#X connect 21 0 19 0;
+#X connect 22 0 15 0;
+#X connect 22 1 15 0;
+#X connect 23 0 29 0;
+#X connect 24 0 8 0;
+#X connect 24 1 23 1;
+#X connect 24 1 31 0;
+#X connect 26 0 30 0;
+#X connect 27 0 28 0;
+#X connect 28 0 8 0;
+#X connect 28 1 26 1;
+#X connect 29 0 8 1;
+#X connect 29 1 24 0;
+#X connect 30 0 12 0;
+#X connect 31 0 32 0;
+#X connect 31 0 33 0;
+#X connect 32 0 36 0;
+#X connect 33 0 27 0;
+#X connect 34 0 8 1;
+#X connect 35 0 29 1;
+#X connect 36 0 31 1;
+#X connect 45 1 46 0;
+#X connect 47 1 48 0;
+#X connect 49 1 51 0;
+#X connect 50 1 52 0;
diff --git a/externals/gridflow/doc/flow_classes/range-help.pd b/externals/gridflow/doc/flow_classes/range-help.pd
new file mode 100644
index 00000000..12415511
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/range-help.pd
@@ -0,0 +1,28 @@
+#N canvas 680 0 632 393 10;
+#X obj 0 0 doc_h;
+#X obj 3 99 doc_c 0..;
+#X obj 3 304 doc_o 1..;
+#X obj 14 169 doc_ii 0;
+#X text 232 169 a value to be sent to one of the outlets. The first
+outlet is for values smaller than the first argument \; else the second
+outlet is for values smaller than the second argument \; and so on
+\; and the last outlet is for values greater or equal to the last argument.
+;
+#X obj 14 334 doc_oo any;
+#X obj 97 334 doc_m oany float;
+#X obj 97 169 doc_m i0 float;
+#X obj 3 139 doc_i 1..;
+#X obj 14 169 doc_ii other;
+#X obj 97 270 doc_m iother float;
+#X text 232 270 sets the corresponding separator in the separator list.
+;
+#X obj 0 364 doc_f;
+#X obj 256 53 moses 1;
+#X obj 164 53 range 1 2 3;
+#X text 241 52 =;
+#X obj 306 53 moses 2;
+#X obj 356 53 moses 3;
+#X connect 7 1 4 0;
+#X connect 10 1 11 0;
+#X connect 13 1 16 0;
+#X connect 16 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/receives-help.pd b/externals/gridflow/doc/flow_classes/receives-help.pd
new file mode 100644
index 00000000..6284c1f9
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/receives-help.pd
@@ -0,0 +1,38 @@
+#N canvas 335 118 632 409 10;
+#X obj 0 0 doc_h;
+#X obj 0 380 doc_f;
+#X obj 3 93 doc_c 0..;
+#X obj 14 123 doc_cc 0;
+#X obj 14 165 doc_cc other;
+#X obj 97 123 doc_m c0 symbol;
+#X obj 97 165 doc_m cother symbol;
+#X text 232 123 the prefix that is going to be common to all receive-symbols.
+if omitted \, the blank symbol will be used (thus no prefix).;
+#X text 232 165 the suffix of each receive symbol that will be registered.
+;
+#X obj 3 195 doc_i 1;
+#X obj 3 296 doc_o 2;
+#X obj 14 225 doc_ii 0;
+#X obj 14 326 doc_oo 0;
+#X obj 14 348 doc_oo 1;
+#X obj 97 225 doc_m i0 list;
+#X text 232 225 list of symbols to register receive-symbols for. they
+will be prefixed. sending such a message unregisters all previous receive-symbols
+registered by this box (which may be reregistered immediately... if
+this is what you're doing);
+#X text 232 326 the message received;
+#X obj 97 326 doc_m o0 <any>;
+#X obj 97 348 doc_m o1 symbol;
+#X text 232 348 the receive-symbol that this message was received as.
+;
+#X obj 85 53 receives \$0- a b c;
+#X text 206 52 =;
+#X obj 223 54 r \$0-a;
+#X obj 265 54 r \$0-b;
+#X obj 307 54 r \$0-c;
+#X text 356 52 and more;
+#X connect 5 1 7 0;
+#X connect 6 1 8 0;
+#X connect 14 1 15 0;
+#X connect 17 1 16 0;
+#X connect 18 1 19 0;
diff --git a/externals/gridflow/doc/flow_classes/route2-help.pd b/externals/gridflow/doc/flow_classes/route2-help.pd
new file mode 100644
index 00000000..c2dceaa5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/route2-help.pd
@@ -0,0 +1,33 @@
+#N canvas 412 190 632 485 10;
+#X obj 11 140 route2 blah foo bar;
+#X msg 29 39 blah blah blah;
+#X msg 29 62 foo 42;
+#X msg 29 86 bar 3.14159;
+#X obj 140 160 display;
+#X obj 97 180 display;
+#X obj 54 200 display;
+#X obj 12 220 display;
+#X msg 29 114 pas rapport;
+#X text 176 29 just like [route];
+#X text 177 46 but preserves message as-is;
+#X obj 0 0 doc_h;
+#X obj 3 253 doc_c n;
+#X obj 3 313 doc_i 1;
+#X obj 3 373 doc_o n;
+#X obj 14 343 doc_ii 0;
+#X obj 14 403 doc_oo nonlast;
+#X obj 14 426 doc_oo last;
+#X obj 14 283 doc_cc any;
+#X obj 0 456 doc_f;
+#X obj 97 402 doc_m ononlast <any>;
+#X obj 97 426 doc_m olast <any>;
+#X obj 97 343 doc_m i0 <any>;
+#X obj 97 283 doc_m cany symbol;
+#X connect 0 0 7 0;
+#X connect 0 1 6 0;
+#X connect 0 2 5 0;
+#X connect 0 3 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 8 0 0 0;
diff --git a/externals/gridflow/doc/flow_classes/seq_fold-help.pd b/externals/gridflow/doc/flow_classes/seq_fold-help.pd
new file mode 100644
index 00000000..fd21cebf
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/seq_fold-help.pd
@@ -0,0 +1,46 @@
+#N canvas 536 114 632 525 10;
+#X obj 125 126 seq_fold;
+#X msg 125 65 2 \, 3 \, 5 \, 7 \, end;
+#X obj 125 93 route end;
+#X obj 150 150 +;
+#X obj 126 179 display;
+#X obj 0 0 doc_h;
+#X obj 3 222 doc_c 0;
+#X obj 3 262 doc_i 4;
+#X obj 14 292 doc_ii 0;
+#X obj 14 314 doc_ii 1;
+#X obj 14 336 doc_ii 2;
+#X obj 14 358 doc_ii 3;
+#X obj 3 390 doc_o 3;
+#X obj 14 420 doc_oo 0;
+#X obj 14 442 doc_oo 1;
+#X obj 14 464 doc_oo 2;
+#X obj 0 496 doc_f;
+#X obj 97 292 doc_m i0 bang;
+#X obj 97 314 doc_m i1 <any>;
+#X obj 97 336 doc_m i2 <any>;
+#X obj 97 358 doc_m i3 <any>;
+#X obj 97 420 doc_m o0 <any>;
+#X obj 97 442 doc_m o1 <any>;
+#X obj 97 464 doc_m o2 <any>;
+#X text 232 442 to outside left inlet;
+#X text 232 464 to outside right inlet;
+#X text 232 420 final result;
+#X text 232 358 from outside outlet;
+#X text 232 336 seed;
+#X text 232 292 output the final result;
+#X text 232 314 sequence of values to be folded;
+#X connect 0 0 4 0;
+#X connect 0 1 3 0;
+#X connect 0 2 3 1;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 2 1 0 1;
+#X connect 3 0 0 3;
+#X connect 17 1 29 0;
+#X connect 18 1 30 0;
+#X connect 19 1 28 0;
+#X connect 20 1 27 0;
+#X connect 21 1 26 0;
+#X connect 22 1 24 0;
+#X connect 23 1 25 0;
diff --git a/externals/gridflow/doc/flow_classes/shunt-help.pd b/externals/gridflow/doc/flow_classes/shunt-help.pd
new file mode 100644
index 00000000..d2828f23
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/shunt-help.pd
@@ -0,0 +1,70 @@
+#N canvas 673 22 632 642 10;
+#X floatatom 121 151 5 0 0 0 - - -;
+#X floatatom 163 151 5 0 0 0 - - -;
+#X floatatom 205 151 5 0 0 0 - - -;
+#X floatatom 247 151 5 0 0 0 - - -;
+#X floatatom 166 85 5 0 0 0 - - -;
+#X obj 210 85 hradio 15 1 0 4 empty empty empty 0 -6 0 8 -260818 -1
+-1 0;
+#X text 272 84 <-- select output here;
+#X text 65 84 vary this -->;
+#X obj 346 119 shunt;
+#X text 232 527 The integer passed to inlet 1 determines which outlet
+is active.;
+#X text 232 602 Outputs incoming message value according to the selector
+value.;
+#X text 7 29 The [shunt] routes any type of data to its active outlet.
+The number of outlets is defined by the argument at creation and the
+active outlet is defined by its right most inlet.;
+#X obj 0 0 doc_h;
+#X obj 3 286 doc_i 2;
+#X obj 3 572 doc_o n;
+#X obj 14 316 doc_ii 0;
+#X obj 14 527 doc_ii 1;
+#X obj 14 602 doc_oo any;
+#X obj 166 114 shunt 4;
+#X text 232 219 Defines the number of outlets desired. If [shunt] is
+created without an argument \, it will have 2 outlets.;
+#X text 232 254 Defines the initial active outlet.;
+#X obj 3 189 doc_c 2;
+#X obj 14 254 doc_cc 1;
+#X obj 14 219 doc_cc 0;
+#X obj 0 647 doc_f;
+#X obj 97 219 doc_m c0 float/int;
+#X obj 97 254 doc_m c1 float/int;
+#X obj 97 527 doc_m i1 float int;
+#X obj 97 602 doc_m oany <any>;
+#X obj 97 338 doc_m i0 index;
+#X obj 97 382 doc_m i0 mode;
+#X obj 97 316 doc_m i0 hi;
+#X obj 97 360 doc_m i0 lo;
+#X text 232 382 -2: going down \, pingpong;
+#X text 232 404 -1: going down \, cycling;
+#X obj 97 492 doc_m i0 <any>;
+#X text 232 426 0: not changing;
+#X text 232 448 1: going up \, cycling;
+#X text 232 470 2: going up \, pingpong;
+#X text 232 338 same as arg 1;
+#X text 232 360 min value for cycling and pingpong (default: 0);
+#X text 232 316 max value for cycling and pingpong (default: N-1);
+#X text 232 492 Incoming message can be Grids \, Symbols \, Floats
+\, Lists \, etc.;
+#X connect 4 0 18 0;
+#X connect 5 0 18 1;
+#X connect 18 0 0 0;
+#X connect 18 1 1 0;
+#X connect 18 2 2 0;
+#X connect 18 3 3 0;
+#X connect 25 1 19 0;
+#X connect 26 1 20 0;
+#X connect 27 1 9 0;
+#X connect 28 1 10 0;
+#X connect 29 1 39 0;
+#X connect 30 1 33 0;
+#X connect 30 1 34 0;
+#X connect 30 1 36 0;
+#X connect 30 1 37 0;
+#X connect 30 1 38 0;
+#X connect 31 1 41 0;
+#X connect 32 1 40 0;
+#X connect 35 1 42 0;
diff --git a/externals/gridflow/doc/flow_classes/systemtime-help.pd b/externals/gridflow/doc/flow_classes/systemtime-help.pd
new file mode 100644
index 00000000..7bcdbd51
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/systemtime-help.pd
@@ -0,0 +1,33 @@
+#N canvas 463 105 632 422 10;
+#X obj 0 0 doc_h;
+#X obj 3 187 doc_c;
+#X obj 0 393 doc_f;
+#X obj 3 373 doc_also;
+#X obj 103 373 cputime;
+#X obj 157 373 systemtime;
+#X text 186 108 What [usertime] and [systemtime] tell you together
+should add up to the amount that [cputime] tells you.;
+#X obj 3 311 doc_o 1;
+#X obj 3 227 doc_i 2;
+#X obj 14 257 doc_ii 0;
+#X obj 14 279 doc_ii 1;
+#X obj 14 341 doc_oo 0;
+#X obj 97 257 doc_m i0 bang;
+#X obj 97 279 doc_m i1 bang;
+#X obj 97 341 doc_m o0 float;
+#X text 232 257 reset timer;
+#X text 232 279 trigger output;
+#X text 232 341 value in milliseconds;
+#X text 188 38 While [cputime] gives you the total time spent in the
+pd process \, therefore excluding any time spent running any other
+programmes \, time spent running pd.tk \, and time spent doing nothing
+at all \, [systemtime] also excludes whatever is NOT run in the kernel.
+;
+#X text 188 142 In C language \, this is the "stime" feature of the
+times() command.;
+#X obj 61 66 systemtime;
+#X connect 3 1 4 0;
+#X connect 3 1 5 0;
+#X connect 12 1 15 0;
+#X connect 13 1 16 0;
+#X connect 14 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/tsctime-help.pd b/externals/gridflow/doc/flow_classes/tsctime-help.pd
new file mode 100644
index 00000000..e53730a5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/tsctime-help.pd
@@ -0,0 +1,50 @@
+#N canvas 508 124 632 550 10;
+#X obj 0 0 doc_h;
+#X obj 3 302 doc_c;
+#X obj 0 521 doc_f;
+#X obj 3 501 doc_also;
+#X obj 3 426 doc_o 1;
+#X obj 3 342 doc_i 2;
+#X obj 14 372 doc_ii 0;
+#X obj 14 394 doc_ii 1;
+#X obj 14 456 doc_oo 0;
+#X obj 97 372 doc_m i0 bang;
+#X obj 97 394 doc_m i1 bang;
+#X obj 97 456 doc_m o0 float;
+#X text 232 372 reset timer;
+#X text 232 394 trigger output;
+#X obj 103 501 realtime;
+#X obj 11 96 tsctime;
+#X text 188 38 This is a super-high-resolution version of the [realtime]
+class that does not look at the ordinary clock of the operating system
+\, and instead uses the clock tick of the CPU itself. However \, if
+you have a variable-clock CPU \, this will give you some kind of virtual
+time.;
+#X msg 50 45 bang;
+#X msg 11 45 bang;
+#X floatatom 14 122 10 0 0 0 - - -;
+#X obj 78 100 realtime;
+#X floatatom 78 122 10 0 0 0 - - -;
+#X text 190 114 It's also possible that this has some other bugs related
+to scaling. However \, even if it gives you really weird values \,
+this object will give you very precise values in what is really the
+wrong scale.;
+#X text 192 171 if you are trying to measure real time with this \,
+you should disable any CPU energy saving that may change the CPU's
+clock speed. However \, if you want to measure CPU usage \, [tsctime]
+is the ONLY of the time-objects to allow you to measure CPU usage reliably
+while your clock speed changes.;
+#X text 192 255 in assembly language \, [tsctime] is called "RDTSC"
+\, and this is where [tsctime] got its name from.;
+#X text 232 456 value in "milliseconds" (or lousy imitation thereof...
+see intro text above.);
+#X connect 3 1 14 0;
+#X connect 9 1 12 0;
+#X connect 10 1 13 0;
+#X connect 11 1 25 0;
+#X connect 15 0 19 0;
+#X connect 17 0 15 1;
+#X connect 17 0 20 1;
+#X connect 18 0 15 0;
+#X connect 18 0 20 0;
+#X connect 20 0 21 0;
diff --git a/externals/gridflow/doc/flow_classes/unix_time-help.pd b/externals/gridflow/doc/flow_classes/unix_time-help.pd
new file mode 100644
index 00000000..6e499216
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/unix_time-help.pd
@@ -0,0 +1,50 @@
+#N canvas 679 22 632 619 10;
+#X obj 109 184 unix_time;
+#X obj 109 153 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 26 243 #to_list;
+#X obj 109 111 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 27 321 display;
+#X obj 109 129 metro 500;
+#X text 32 302 <-- Ascii format for the date;
+#X obj 326 292 display;
+#X obj 141 242 display;
+#X obj 325 266 display;
+#X obj 324 241 sprintf %04d%02d%02d-%02d%02d%02d;
+#X obj 0 0 doc_h;
+#X obj 3 356 doc_c 0;
+#X obj 3 396 doc_i 1;
+#X obj 3 471 doc_o 3;
+#X obj 14 426 doc_ii 0;
+#X obj 14 501 doc_oo 0;
+#X obj 14 523 doc_oo 1;
+#X obj 14 545 doc_oo 2;
+#X text 9 32 This object returns the Unix timestamp. The first outlet
+does so with ASCII \, the second in seconds and the third outlet outputs
+the fractions of seconds up to 1/100 0 th of a second which is useful
+for creating filenames.;
+#X text 232 426 A bang at the left inlet will tell [unix_time] to get
+the current Unix timestamp and send it to the outlets.;
+#X text 232 501 Outputs the time and date in ASCII format.;
+#X text 232 523 Outputs the Unix timestamp in seconds.;
+#X text 232 545 Outputs the fractions of a second up to 10 microseconds
+(?) (actual precision is probably platform-dependent...);
+#X obj 97 426 doc_m i0 bang;
+#X obj 97 501 doc_m o0 list;
+#X obj 97 523 doc_m o1 list;
+#X obj 97 545 doc_m o2 list;
+#X obj 0 590 doc_f;
+#X connect 0 0 2 0;
+#X connect 0 1 8 0;
+#X connect 0 2 7 0;
+#X connect 0 2 10 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 5 0 1 0;
+#X connect 10 0 9 0;
+#X connect 24 1 20 0;
+#X connect 25 1 21 0;
+#X connect 26 1 22 0;
+#X connect 27 1 23 0;
diff --git a/externals/gridflow/doc/flow_classes/usertime-help.pd b/externals/gridflow/doc/flow_classes/usertime-help.pd
new file mode 100644
index 00000000..28d52a2c
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/usertime-help.pd
@@ -0,0 +1,33 @@
+#N canvas 508 124 632 412 10;
+#X obj 0 0 doc_h;
+#X obj 3 177 doc_c;
+#X obj 0 383 doc_f;
+#X obj 3 363 doc_also;
+#X obj 103 363 cputime;
+#X obj 157 363 systemtime;
+#X text 186 108 What [usertime] and [systemtime] tell you together
+should add up to the amount that [cputime] tells you.;
+#X obj 3 301 doc_o 1;
+#X obj 3 217 doc_i 2;
+#X obj 14 247 doc_ii 0;
+#X obj 14 269 doc_ii 1;
+#X obj 14 331 doc_oo 0;
+#X obj 97 247 doc_m i0 bang;
+#X obj 97 269 doc_m i1 bang;
+#X obj 97 331 doc_m o0 float;
+#X text 232 247 reset timer;
+#X text 232 269 trigger output;
+#X text 232 331 value in milliseconds;
+#X text 188 142 In C language \, this is the "utime" feature of the
+times() command.;
+#X obj 61 66 usertime;
+#X text 188 38 While [cputime] gives you the total time spent in the
+pd process \, therefore excluding any time spent running any other
+programmes \, time spent running pd.tk \, and time spent doing nothing
+at all \, [systemtime] also excludes whatever is run in the kernel.
+;
+#X connect 3 1 4 0;
+#X connect 3 1 5 0;
+#X connect 12 1 15 0;
+#X connect 13 1 16 0;
+#X connect 14 1 17 0;
diff --git a/externals/gridflow/doc/flow_classes/var.#-help.pd b/externals/gridflow/doc/flow_classes/var.#-help.pd
new file mode 100644
index 00000000..67f921ea
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/var.#-help.pd
@@ -0,0 +1,21 @@
+#N canvas 335 118 632 407 10;
+#X obj 0 0 doc_h;
+#X obj 0 378 doc_f;
+#X obj 125 58 var.#;
+#X text 189 44 somewhat like [#store] but designed to be most especially
+to grids what [f] is to floats and [symbol] is to symbols.;
+#X obj 3 218 doc_i 2;
+#X obj 3 318 doc_o 1;
+#X text 191 85 it was named that way because if you alias [f] to [var.f]
+\, and [s] to [var.s] \, then [var.\$1] will instantiate an object
+of that class-family. (this is related to the PureUnity project);
+#X obj 14 348 doc_oo 0;
+#X obj 14 288 doc_ii 1;
+#X obj 97 348 doc_m o0 grid;
+#X obj 97 288 doc_m i1 grid;
+#X obj 97 268 doc_m i0 grid;
+#X obj 97 248 doc_m i0 bang;
+#X obj 14 248 doc_ii 0;
+#X obj 14 188 doc_cc 0;
+#X obj 3 158 doc_c 0..1;
+#X obj 97 188 doc_m c0 grid;