#N canvas 0 0 640 480 10 ;
#X obj 157 50 # +;
#X text 200 50 plain numeric operators on grids: + - * / etc;
#X obj -11 82 #apply_colormap_channelwise;
#X text 200 82 apply color correction tables separately on each channel;
#X obj 59 114 #background_model;
#X text 200 114 make mask from learning to distinguish background from foreground;
#X obj 129 146 #border;
#X text 200 146 add padding on sides of a grid;
#X obj 129 178 #camera;
#X text 200 178 control panel for opening cameras;
#X obj 129 210 #cast i;
#X text 200 210 convert grid from one number type to another;
#X obj 115 242 #centroid;
#X text 200 242 find centroid (weighted average) of the coordinates of a grid;
#X obj 129 274 #change;
#X text 200 274 send grid only if different from previous grid;
#X obj 115 306 #checkers;
#X text 200 306 make image of chequered background in two tones of grey;
#X obj 143 338 #clip;
#X text 200 338 min and max;
#X obj 24 370 #color;
#X text 200 370 GUI for selecting a colour;
#X obj 115 442 #contrast;
#X text 200 442 adjust contrast in two different ways;
#X obj 115 474 #convolve;
#X text 200 474 compute convolution product of a grid (blur and edge-detection);
#X obj 150 506 #dim;
#X text 200 506 get the size (dimensions) of a grid;
#X obj 87 538 #downscale_by;
#X text 200 538 reduce the size of an image by a whole factor;
#X obj 101 570 #draw_image;
#X text 200 570 picture-in-picture;
#X obj 94 602 #draw_points;
#X text 200 602 (future use);
#X obj 87 634 #draw_polygon;
#X text 200 634 draw polygon in an image;
#X obj 108 666 #draw_rect;
#X text 200 666 draw a rectangle in an image;
#X obj 94 698 #draw_slider;
#X text 200 698 draw a slider in an image;
#X obj 87 730 #edit_polygon;
#X text 200 730 draw a polygon in an image and react to mouse events;
#X obj 143 762 #fade;
#X text 200 762 fade in exponential-decay fashion (linear recurrence);
#X obj 115 794 #fade_lin;
#X text 200 794 fade in piecewise-linear fashion;
#X obj 115 826 #fastblur;
#X text 200 826 speedy shortcut for rectangular blur;
#X obj 150 858 #fft;
#X text 200 858 compute forward or inverse one-or-two-dimensional complex FFT of a grid;
#X obj 115 890 #finished;
#X text 200 890 bang when grid transmission has ended;
#X obj 129 922 #fold +;
#X text 200 922 compute the sum of each row \,  product of each row, and other similar operations;
#X obj 108 954 #for 0 4 1;
#X text 200 954 make a grid from all numbers or coordinates in a certain range;
#X obj 115 986 #from_pix;
#X text 200 986 convert pix (GEM) to grid;
#X obj 136 1018 #gamma;
#X text 200 1018 apply gamma correction;
#X obj 136 1050 #grade;
#X text 200 1050 make an index of the sorting of a grid;
#X obj 59 1082 #greyscale_to_rgb;
#X text 200 1082 convert greyscale to RGB;
#X obj 136 1114 #hello;
#X text 200 1114 make 7 colour bars;
#X obj 115 1146 #hueshift;
#X text 200 1146 apply hue shift by rotating the color wheel;
#X obj 129 1178 #import;
#X text 200 1178 convert float \,  list, or symbol ASCII codes, to a grid;
#X obj 101 1210 #import_pix;
#X text 200 1210 old name of #from_pix;
#X obj 157 1242 #in;
#X text 200 1242 open file or device for reading or download;
#X obj 136 1274 #inner;
#X text 200 1274 scalar ("dot") product \,  matrix product, tensor contraction, image channel remapping, etc.;
#X obj 115 1306 #io.aalib;
#X text 200 1306 open an aalib window;
#X obj 108 1338 #io.dc1394;
#X text 200 1338 open a faiawaia "DC" camera (not DV) using a Linux-compatible OS;
#X obj 122 1370 #io.grid;
#X text 200 1370 read or write a .grid file (GridFlow storage format);
#X obj 122 1402 #io.jpeg;
#X text 200 1402 read or write a .jpeg file;
#X obj 122 1434 #io.mpeg;
#X text 200 1434 read a .mpeg video file;
#X obj 129 1466 #io.png;
#X text 200 1466 read a .png image file;
#X obj 129 1498 #io.ppm;
#X text 200 1498 read or write a .pbm or .pgm or .ppm image file;
#X obj 87 1530 #io.quicktime;
#X text 200 1530 read a .mov video file (or perhaps .avi);
#X obj 129 1562 #io.sdl;
#X text 200 1562 open a SDL window;
#X obj 94 1594 #io.videodev;
#X text 200 1594 open a V4L1 device (Linux interface for video cameras and video digitisers);
#X obj 129 1626 #io.x11;
#X text 200 1626 open a X11 window;
#X obj 115 1658 #labeling;
#X text 200 1658 tag connected pixels with region numbers in a two-tone single-channel image;
#X obj 136 1690 #layer;
#X text 200 1690 layer two same-sized images;
#X obj 66 1722 #line_to_polygon;
#X text 200 1722 convert line (as point pair) to polygon (rotated rectangle);
#X obj 101 1754 #make_cross;
#X text 200 1754 make cross-shaped polygon;
#X obj 129 1786 #moment;
#X text 200 1786 find 1st or 2nd order moment (weighted average or variance) of the coordinates of a grid;
#X obj 87 1818 #moment_polar;
#X text 200 1818 convert covariance matrix to the longest and shortest radius of an ellipse and a rotation angle;
#X obj 59 1850 #motion_detection;
#X text 200 1850 frame difference with some options;
#X obj 136 1882 #mouse;
#X text 200 1882 converts mouse events to reports of clicks \,  drags, unclicks, motions, and separate buttons and wheel;
#X obj 66 1914 #noise_gate_yuvs;
#X text 200 1914 replaces dark pixels by black pixels in signed YUV images;
#X obj 150 1946 #out;
#X text 200 1946 open file or device for writing or upload;
#X obj 122 1978 #outer +;
#X text 200 1978 apply numeric operator on all possible combinations of elements of one grid with elements of another;
#X obj 143 2010 #pack;
#X text 200 2010 combine floats on separate inlets to make a grid;
#X obj 94 2042 #perspective;
#X text 200 2042 divide each point by its depth;
#X obj 87 2074 #polygon_area;
#X text 200 2074 find area of a polygon in square pixels;
#X obj 45 2106 #polygon_comparator;
#X text 200 2106 find similarity between two polygons independently of rotation \,  by radial maps and FFT;
#X obj 52 2138 #polygon_each_edge;
#X text 200 2138 convert a polygon to a sequence of overlapping 2-sided polygons representing edges;
#X obj 73 2170 #polygon_moment;
#X text 200 2170 find average of all points inside of a polygon;
#X obj 52 2202 #polygon_perimetre;
#X text 200 2202 find perimetre of a polygon in pixels (euclidian);
#X obj 45 2234 #polygon_radial_map;
#X text 200 2234 find radius of a polygon from a given origin \,  sampled at equally spaced angles;
#X obj 101 2266 #polygonize;
#X text 200 2266 (future use);
#X obj 108 2298 #posterize;
#X text 200 2298 quantise pixel values;
#X obj 136 2330 #print;
#X text 200 2330 print to console;
#X obj 136 2362 #ravel;
#X text 200 2362 do #redim so that a grid keeps same number of elements but just one dimension;
#X obj 129 2394 #record;
#X text 200 2394 wrapper around [#in quicktime];
#X obj 115 2426 #redim ();
#X text 200 2426 change the size of a grid by restreaming contents into a new shape;
#X obj 94 2458 #remap_image;
#X text 200 2458 apply object chain on pixel positions to make new image from chosen pixels of the input image;
#X obj 122 2490 #reverse;
#X text 200 2490 mirror image of a grid along a dimension;
#X obj 59 2522 #rgb_to_greyscale;
#X text 200 2522 convert RGB to greyscale;
#X obj 94 2554 #rgb_to_rgba;
#X text 200 2554 convert RGB to RGBA (but setting alpha to 0);
#X obj 101 2586 #rgb_to_yuv;
#X text 200 2586 convert RGB to unsigned YUV;
#X obj 94 2618 #rgba_to_rgb;
#X text 200 2618 convert RGBA to RGB;
#X obj 129 2650 #rotate;
#X text 200 2650 rotate points through two axes (or rotate pixels as points in a colorspace);
#X obj 80 2682 #rotatificator;
#X text 200 2682 make rotation matrix for any two dimensions chosen from manyou;
#X obj 101 2714 #saturation;
#X text 200 2714 multiply chroma by some value;
#X obj 115 2746 #scale_by;
#X text 200 2746 reduce the size of an image by a whole factor;
#X obj 115 2778 #scale_to;
#X text 200 2778 scale an image from one size to any other size by deleting or duplicating rows and columns;
#X obj 129 2810 #scan +;
#X text 200 2810 compute the cumulative sums of each row \,  and other similar operations;
#X obj 115 2842 #seq_fold;
#X text 200 2842 cascade the use of an object on all elements of an incoming grid message sequence;
#X obj 136 2874 #slice;
#X text 200 2874 crop an image using a start point (top left) and end point (bottom right);
#X obj 115 2906 #solarize;
#X text 200 2906 like pingpong but on all pixel values of a grid;
#X obj 143 2938 #sort;
#X text 200 2938 sort each row of a grid;
#X obj 129 2970 #spread;
#X text 200 2970 add noise to each vector (point or pixel);
#X obj 136 3002 #store;
#X text 200 3002 store image in RAM \,  in-place picture-in-picture, and make lookups in various ways;
#X obj 143 3034 #swap;
#X text 200 3034 like [swap] for grids;
#X obj 157 3066 #t;
#X text 200 3066 like [t a a] for grids;
#X obj 80 3098 #text_to_image;
#X text 200 3098 use a fixed-width font grid to make a tiling of characters as specified by a text string;
#X obj 115 3130 #to_float;
#X text 200 3130 convert grid to sequence of floats;
#X obj 122 3162 #to_list;
#X text 200 3162 convert grid to list;
#X obj 101 3194 #to_literal;
#X text 200 3194 convert grid to grid-literal (list with a # sign);
#X obj 129 3226 #to_pix;
#X text 200 3226 convert grid to pix (GEM);
#X obj 108 3258 #to_symbol;
#X text 200 3258 convert grid of ASCII codes to symbol;
#X obj 108 3290 #transpose;
#X text 200 3290 swap two dimensions out of any \,  in a grid;
#X obj 143 3322 #type;
#X text 200 3322 get a symbol representing the number type of a grid;
#X obj 129 3354 #unpack;
#X text 200 3354 split a grid into floats on separate outlets;
#X obj 129 3386 #window;
#X text 200 3386 a [#out window] that can be toggled to appear and disappear;
#X obj 101 3418 #yuv_to_rgb;
#X text 200 3418 convert unsigned YUV to RGB;
#X obj 143 3450 @join;
#X text 200 3450 join two grids together along any dimension;
#X obj 150 3482 args;
#X text 200 3482 pick up the arguments of an abstraction instance \,  including nested lists and init-messages;
#X obj 143 3514 ascii;
#X text 200 3514 write integer as decimal in ascii codes;
#X obj 108 3546 ascii_to_f;
#X text 200 3546 converts a list of ascii codes to a float;
#X obj 94 3578 class_exists;
#X text 200 3578 figure out whether a class has been loaded by pd;
#X obj 115 3610 condition;
#X text 200 3610 Castonguay rectangle bounds-checking;
#X obj 143 3642 count;
#X text 200 3642 Castonguay counter;
#X obj 136 3674 cv.Add;
#X text 200 3674 OpenCV addition;
#X obj 136 3706 cv.Div;
#X text 200 3706 OpenCV division;
#X obj 38 3738 cv.HaarDetectObjects;
#X text 200 3738 OpenCV (future use);
#X obj 115 3770 cv.Invert;
#X text 200 3770 OpenCV invert matrix;
#X obj 115 3802 cv.Kalman;
#X text 200 3802 OpenCV (future use);
#X obj 136 3834 cv.Mul;
#X text 200 3834 OpenCV multiplication;
#X obj 136 3866 cv.SVD;
#X text 200 3866 OpenCV singular value decomposition (eigendecomposition);
#X obj 136 3898 cv.Sub;
#X text 200 3898 OpenCV subtraction;
#X obj 129 3930 display;
#X text 200 3930 print message or grid inside of the patch;
#X obj 136 3962 expect;
#X text 200 3962 currently does like list.== (will do more than that in the future);
#X obj 157 3994 for;
#X text 200 3994 make sequence of float messages for each number in a range with specified stepping;
#X obj 129 4026 foreach;
#X text 200 4026 convert a list to a sequence of atom messages;
#X obj 157 4058 fps;
#X text 200 4058 measure frames per second and make statistics;
#X obj 122 4090 gf.error;
#X text 200 4090 emit error message from the perspective of the current abstraction instance in its parent patch;
#X obj 80 4122 gf.io_generate;
#X text 200 4122 for internal use by #in and #out;
#X obj 108 4154 gf.oneshot;
#X text 200 4154 spigot that shuts itself down after each message;
#X obj 66 4186 gf.suffix_lookup;
#X text 200 4186 find the objectclass corresponding ;
#X obj 150 4218 inv*;
#X text 200 4218 swapped /;
#X obj 150 4250 inv+;
#X text 200 4250 swapped -;
#X obj 129 4282 list.==;
#X text 200 4282 test two lists of floats and/or symbols for equality;
#X obj 122 4314 listfind;
#X text 200 4314 find index of an element in a list;
#X obj 101 4346 listflatten;
#X text 200 4346 merge all nested lists together \,  depth-first;
#X obj 122 4378 listread;
#X text 200 4378 find element at an index in a list;
#X obj 101 4410 listreverse;
#X text 200 4410 mirror image of a list;
#X obj 87 4442 parallel_port;
#X text 200 4442 send to and receive from a DB25 parallel port;
#X obj 122 4474 pingpong;
#X text 200 4474 turns value of a counter into a zigzag between 0 and a given value;
#X obj 73 4506 plotter_control;
#X text 200 4506 make HPGL commands;
#X obj 80 4538 plotter_parser;
#X text 200 4538 interprets ascii codes as HPGL commands and output them as messages;
#X obj 143 4570 range;
#X text 200 4570 multiple moses in cascade;
#X obj 94 4602 receives \$0-;
#X text 200 4602 multiple receives with common outlet and other outlet telling the name of intended destination;
#X obj 136 4634 route2;
#X text 200 4634 route messages but keep them intact (does not remove selector);
#X obj 45 4666 send39 \$0-patchname;
#X text 200 4666 backward-compatibility crutch for dynamic patching in pd 0.39;
#X obj 122 4698 seq_fold;
#X text 200 4698 cascade the use of an object on all elements of an incoming message sequence;
#X obj 143 4730 shunt;
#X text 200 4730 demultiplexer: send input to separately specified outlet;
#X obj 108 4762 systemtime;
#X text 200 4762 time spent by process in kernel mode \,  as measured by the OS;
#X obj 129 4794 tsctime;
#X text 200 4794 high-resolution real time \,  as measured by the CPU;
#X obj 115 4826 unix_time;
#X text 200 4826 real time as measured by the OS \,  including date;
#X obj 122 4858 usertime;
#X text 200 4858 time spent by process in non-kernel mode \,  as measured by the OS;
#X obj 143 4890 var.#;
#X text 200 4890 like [f] for grids;