aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/doc
diff options
context:
space:
mode:
authorN.N. <matju@users.sourceforge.net>2006-03-15 04:55:34 +0000
committerN.N. <matju@users.sourceforge.net>2006-03-15 04:55:34 +0000
commita89a3c9fecd05a623aef900114cf936ba9ecd9e7 (patch)
treeca324f1fce798773c13c065e25eb491451fbace1 /externals/gridflow/doc
parentfcc7e06dd433c53507f40eff12d3187a9ac13456 (diff)
0.8.1
svn path=/trunk/; revision=4710
Diffstat (limited to 'externals/gridflow/doc')
-rw-r--r--externals/gridflow/doc/architecture.html12
-rw-r--r--externals/gridflow/doc/architecture.xml2
-rw-r--r--externals/gridflow/doc/flow_classes/@complex_sq-icon.pngbin0 -> 336 bytes
-rw-r--r--externals/gridflow/doc/flow_classes/@join-icon.pngbin0 -> 242 bytes
-rw-r--r--externals/gridflow/doc/flow_classes/demux-icon.pngbin0 -> 235 bytes
-rw-r--r--externals/gridflow/doc/flow_classes/inv*-icon.pngbin0 -> 226 bytes
-rw-r--r--externals/gridflow/doc/flow_classes/rubyarray.pngbin0 -> 288 bytes
-rw-r--r--externals/gridflow/doc/flow_classes/unix_time-help.pd46
-rw-r--r--externals/gridflow/doc/format.html12
-rw-r--r--externals/gridflow/doc/format.xml2
-rw-r--r--externals/gridflow/doc/install.html12
-rw-r--r--externals/gridflow/doc/install.xml2
-rw-r--r--externals/gridflow/doc/internals.html12
-rw-r--r--externals/gridflow/doc/internals.xml2
-rw-r--r--externals/gridflow/doc/license.html2
-rw-r--r--externals/gridflow/doc/moulinette.rb60
-rw-r--r--externals/gridflow/doc/profiling.html2
-rw-r--r--externals/gridflow/doc/reference.html111
-rw-r--r--externals/gridflow/doc/reference.xml24
-rwxr-xr-xexternals/gridflow/doc/tutorials/0-0-intro_page.pd89
-rwxr-xr-xexternals/gridflow/doc/tutorials/2-3-4-image-modification-2-remap-image.pd55
-rwxr-xr-xexternals/gridflow/doc/tutorials/2-3-5-image-modification-2-convolve.pd120
-rwxr-xr-xexternals/gridflow/doc/tutorials/2-3-6-image-modification-2-cross-fade.pd93
-rwxr-xr-xexternals/gridflow/doc/tutorials/2nd-part-numop.pd80
-rwxr-xr-xexternals/gridflow/doc/tutorials/3-1-0-open-video.pd38
-rwxr-xr-xexternals/gridflow/doc/tutorials/3-2-video-manipulation.pd1
-rwxr-xr-xexternals/gridflow/doc/tutorials/3-3-record-video.pd51
-rwxr-xr-xexternals/gridflow/doc/tutorials/4-0-open-live-stream.pd24
-rwxr-xr-xexternals/gridflow/doc/tutorials/4-1-2-simple-motion-detection-absolute-value.pd31
-rwxr-xr-xexternals/gridflow/doc/tutorials/4-1-3-motion-detection-more-advanced-and-more-options.pd49
-rwxr-xr-xexternals/gridflow/doc/tutorials/4-1-simple-motion-detection.pd37
-rwxr-xr-xexternals/gridflow/doc/tutorials/PD-GF-Lecture.pd80
-rwxr-xr-xexternals/gridflow/doc/tutorials/PD-Lecture.pd64
-rwxr-xr-xexternals/gridflow/doc/tutorials/colors.pd12
-rw-r--r--externals/gridflow/doc/tutorials/d_gf_2_0-Intro_to_images_open_image.pd62
-rw-r--r--externals/gridflow/doc/tutorials/d_gf_2_2_1-image-modification-1-numop-all-in-one2.pd127
-rw-r--r--externals/gridflow/doc/tutorials/d_gf_2_2_2.pd68
-rwxr-xr-xexternals/gridflow/doc/tutorials/gf_1_0-Introduction_to_grids.pd98
-rw-r--r--externals/gridflow/doc/tutorials/gf_2-2-3-resize-image_dec_2005.pd60
-rw-r--r--externals/gridflow/doc/tutorials/gf_2-2-4-greyscale_dec_2005.pd27
-rwxr-xr-xexternals/gridflow/doc/tutorials/gf_2_0-Intro_to_images_open_image.pd62
-rwxr-xr-xexternals/gridflow/doc/tutorials/gf_2_2_1-image-modification-1-numop-all-in-one2.pd127
-rw-r--r--externals/gridflow/doc/tutorials/gf_2_2_2.pd68
-rwxr-xr-xexternals/gridflow/doc/tutorials/grid-intro.pd10
-rwxr-xr-xexternals/gridflow/doc/tutorials/probably_not_good_2-3-0-1-image-modification-1-numop-all-in-one.pd123
-rw-r--r--externals/gridflow/doc/tutorials/probably_not_good_2-3-0-2.pd61
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-1.pd71
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-2.pd73
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-3.pd70
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-4.pd87
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-5.pd108
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-6.pd92
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-7.pd106
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-8.pd89
-rwxr-xr-xexternals/gridflow/doc/tutorials/pure-data-9.pd43
-rwxr-xr-xexternals/gridflow/doc/tutorials/randomly-select-an-image.pd53
-rwxr-xr-xexternals/gridflow/doc/tutorials/title-page-pd-gf-in-one.pd129
-rwxr-xr-xexternals/gridflow/doc/tutorials/txt-for-resize-image.pd3
58 files changed, 2873 insertions, 69 deletions
diff --git a/externals/gridflow/doc/architecture.html b/externals/gridflow/doc/architecture.html
index 3009be34..009464a1 100644
--- a/externals/gridflow/doc/architecture.html
+++ b/externals/gridflow/doc/architecture.html
@@ -1,6 +1,6 @@
<html><head>
-<!-- $Id: architecture.html,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
-<title>GridFlow 0.8.0 - Reference Manual: Architecture</title>
+<!-- $Id: architecture.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
+<title>GridFlow 0.8.1 - Reference Manual: Architecture</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="gridflow.css" type="text/css">
</head>
@@ -14,7 +14,7 @@
<tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4" height="16">
- <h4>GridFlow 0.8.0 - Reference Manual: Architecture</h4>
+ <h4>GridFlow 0.8.1 - Reference Manual: Architecture</h4>
</td></tr>
<tr>
<td width="5%" rowspan="2">&nbsp;</td>
@@ -208,9 +208,9 @@ with the main part. </p></td></tr>
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4">
<p><font size="-1">
-GridFlow 0.8.0 Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+GridFlow 0.8.1 Documentation<br>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
diff --git a/externals/gridflow/doc/architecture.xml b/externals/gridflow/doc/architecture.xml
index ec0c5a14..bf87474e 100644
--- a/externals/gridflow/doc/architecture.xml
+++ b/externals/gridflow/doc/architecture.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE documentation SYSTEM 'jmax.dtd'>
<documentation title="Reference Manual: Architecture">
-<!-- $Id: architecture.xml,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
+<!-- $Id: architecture.xml,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Architecture
Copyright (c) 2001,2002,2003,2004 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/flow_classes/@complex_sq-icon.png b/externals/gridflow/doc/flow_classes/@complex_sq-icon.png
new file mode 100644
index 00000000..7c9dd8d5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/@complex_sq-icon.png
Binary files differ
diff --git a/externals/gridflow/doc/flow_classes/@join-icon.png b/externals/gridflow/doc/flow_classes/@join-icon.png
new file mode 100644
index 00000000..461f626e
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/@join-icon.png
Binary files differ
diff --git a/externals/gridflow/doc/flow_classes/demux-icon.png b/externals/gridflow/doc/flow_classes/demux-icon.png
new file mode 100644
index 00000000..d3937142
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/demux-icon.png
Binary files differ
diff --git a/externals/gridflow/doc/flow_classes/inv*-icon.png b/externals/gridflow/doc/flow_classes/inv*-icon.png
new file mode 100644
index 00000000..d887f1ba
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/inv*-icon.png
Binary files differ
diff --git a/externals/gridflow/doc/flow_classes/rubyarray.png b/externals/gridflow/doc/flow_classes/rubyarray.png
new file mode 100644
index 00000000..2d3ad9e5
--- /dev/null
+++ b/externals/gridflow/doc/flow_classes/rubyarray.png
Binary files differ
diff --git a/externals/gridflow/doc/flow_classes/unix_time-help.pd b/externals/gridflow/doc/flow_classes/unix_time-help.pd
index b0105ab5..d80b4c19 100644
--- a/externals/gridflow/doc/flow_classes/unix_time-help.pd
+++ b/externals/gridflow/doc/flow_classes/unix_time-help.pd
@@ -1,25 +1,29 @@
-#N canvas 696 154 450 446 10;
-#X obj 137 107 unix_time;
-#X obj 136 68 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#N canvas 134 38 639 312 10;
+#X obj 91 113 unix_time;
+#X obj 91 82 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X obj 78 146 #export_list;
-#X obj 167 171 display;
-#X obj 43 18 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+#X obj 8 172 #export_list;
+#X obj 91 40 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
-#X obj 283 243 nbx 9 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 11 290 display;
-#X text 381 243 <-- 1/100000 th of a second \, useful for generating
-filenames;
-#X text 213 170 <-- Unix timestamp;
-#X obj 86 30 metro 500;
-#X text 274 19 GridFlow 0.8.0;
-#X text 225 88 Outputs;
-#X text 62 287 <-- Ascii format for the date;
+#X obj 9 246 display;
+#X obj 91 58 metro 500;
+#X text 60 243 <-- Ascii format for the date;
+#X obj 308 221 display;
+#X obj 123 171 display;
+#X obj 307 195 display;
+#X obj 306 170 rubysprintf %04d%02d%02d-%02d%02d%02d;
+#X obj 8 282 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 289 GridFlow 0.8.0;
+#X obj 8 5 cnv 15 720 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 9 5 SUMMARY : the unixtime command;
#X connect 0 0 2 0;
-#X connect 0 1 3 0;
-#X connect 0 2 5 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 6 0;
-#X connect 4 0 9 0;
-#X connect 9 0 1 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;
diff --git a/externals/gridflow/doc/format.html b/externals/gridflow/doc/format.html
index 325a6409..243e508e 100644
--- a/externals/gridflow/doc/format.html
+++ b/externals/gridflow/doc/format.html
@@ -1,6 +1,6 @@
<html><head>
-<!-- $Id: format.html,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
-<title>GridFlow 0.8.0 - Reference Manual: Format Classes</title>
+<!-- $Id: format.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
+<title>GridFlow 0.8.1 - Reference Manual: Format Classes</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="gridflow.css" type="text/css">
</head>
@@ -14,7 +14,7 @@
<tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4" height="16">
- <h4>GridFlow 0.8.0 - Reference Manual: Format Classes</h4>
+ <h4>GridFlow 0.8.1 - Reference Manual: Format Classes</h4>
</td></tr>
<tr>
<td width="5%" rowspan="2">&nbsp;</td>
@@ -476,9 +476,9 @@
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4">
<p><font size="-1">
-GridFlow 0.8.0 Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+GridFlow 0.8.1 Documentation<br>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
diff --git a/externals/gridflow/doc/format.xml b/externals/gridflow/doc/format.xml
index 39f17cf3..030a777d 100644
--- a/externals/gridflow/doc/format.xml
+++ b/externals/gridflow/doc/format.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE documentation SYSTEM 'jmax.dtd'>
<documentation title="Reference Manual: Format Classes">
-<!-- $Id: format.xml,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
+<!-- $Id: format.xml,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Format Handler Reference
Copyright (c) 2001,2002,2003,2004,2005 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/install.html b/externals/gridflow/doc/install.html
index e65652e3..6127c79c 100644
--- a/externals/gridflow/doc/install.html
+++ b/externals/gridflow/doc/install.html
@@ -1,6 +1,6 @@
<html><head>
-<!-- $Id: install.html,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
-<title>GridFlow 0.8.0 - Installation</title>
+<!-- $Id: install.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
+<title>GridFlow 0.8.1 - Installation</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="gridflow.css" type="text/css">
</head>
@@ -14,7 +14,7 @@
<tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4" height="16">
- <h4>GridFlow 0.8.0 - Installation</h4>
+ <h4>GridFlow 0.8.1 - Installation</h4>
</td></tr>
<tr>
<td width="5%" rowspan="2">&nbsp;</td>
@@ -113,9 +113,9 @@ crashes, or changes didn't go through. <ul> <li><b>1</b> : Did you forget the "m
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4">
<p><font size="-1">
-GridFlow 0.8.0 Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+GridFlow 0.8.1 Documentation<br>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
diff --git a/externals/gridflow/doc/install.xml b/externals/gridflow/doc/install.xml
index 6a45e224..e1f1c434 100644
--- a/externals/gridflow/doc/install.xml
+++ b/externals/gridflow/doc/install.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE documentation SYSTEM 'jmax.dtd'>
<documentation title="Installation">
-<!-- $Id: install.xml,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
+<!-- $Id: install.xml,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Installation
Copyright (c) 2001,2002,2003,2004,2005 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/internals.html b/externals/gridflow/doc/internals.html
index dfc51b73..4a2e7978 100644
--- a/externals/gridflow/doc/internals.html
+++ b/externals/gridflow/doc/internals.html
@@ -1,6 +1,6 @@
<html><head>
-<!-- $Id: internals.html,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
-<title>GridFlow 0.8.0 - C++/Ruby Internals</title>
+<!-- $Id: internals.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
+<title>GridFlow 0.8.1 - C++/Ruby Internals</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="gridflow.css" type="text/css">
</head>
@@ -14,7 +14,7 @@
<tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4" height="16">
- <h4>GridFlow 0.8.0 - C++/Ruby Internals</h4>
+ <h4>GridFlow 0.8.1 - C++/Ruby Internals</h4>
</td></tr>
<tr>
<td width="5%" rowspan="2">&nbsp;</td>
@@ -197,9 +197,9 @@ and they point to each other using "peer pointers".
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4">
<p><font size="-1">
-GridFlow 0.8.0 Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+GridFlow 0.8.1 Documentation<br>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
diff --git a/externals/gridflow/doc/internals.xml b/externals/gridflow/doc/internals.xml
index 19173719..952d0507 100644
--- a/externals/gridflow/doc/internals.xml
+++ b/externals/gridflow/doc/internals.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE documentation SYSTEM 'jmax.dtd'>
<documentation title="C++/Ruby Internals">
-<!-- $Id: internals.xml,v 1.1 2005-10-04 02:09:42 matju Exp $ -->
+<!-- $Id: internals.xml,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Internals
Copyright (c) 2001,2002,2003,2004,2005 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/license.html b/externals/gridflow/doc/license.html
index 5b5d39b7..0414218f 100644
--- a/externals/gridflow/doc/license.html
+++ b/externals/gridflow/doc/license.html
@@ -1,6 +1,6 @@
<html>
<head>
-<!-- $Id: license.html,v 1.1 2005-10-04 02:09:43 matju Exp $ -->
+<!-- $Id: license.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Architecture
Copyright (c) 2001,2002,2003,2004 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/moulinette.rb b/externals/gridflow/doc/moulinette.rb
index 03dbfa86..c74933d6 100644
--- a/externals/gridflow/doc/moulinette.rb
+++ b/externals/gridflow/doc/moulinette.rb
@@ -1,5 +1,5 @@
=begin
- $Id: moulinette.rb,v 1.1 2005-10-04 02:02:14 matju Exp $
+ $Id: moulinette.rb,v 1.2 2006-03-15 04:44:50 matju Exp $
convert GridFlow Documentation XML to HTML with special formatting.
GridFlow
@@ -22,12 +22,12 @@
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
=end
-GF_VERSION = "0.8.0"
+GF_VERSION = "0.8.1"
#$use_rexml = true
$use_rexml = false
-#require "gridflow"
+require "gridflow"
if $use_rexml
# this is a pure ruby xml-parser
@@ -138,6 +138,9 @@ class XNode
# public :show_index
#}
end
+ def [](tag,att,*contents)
+ self.valid_tags[tag].new(tag,att,*contents)
+ end
end
def initialize tag, att, *contents
@@ -166,6 +169,7 @@ class XNode
end
def inspect; "#<XNode #{tag}>"; end
def to_s; inspect; end
+ def << x; contents << x; x.parent=self end
end
XNode.register("documentation") {}
@@ -549,8 +553,8 @@ puts <<EOF
<tr><td colspan="4">
<p><font size="-1">
GridFlow #{GF_VERSION} Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
EOF
@@ -561,12 +565,53 @@ end
$nodes = {}
XMLParserError = Exception if $use_rexml
+def harvest_doc_of_class xclass, v, way
+ doc = case way; when:in:v.doc; when:out:v.doc_out end
+ tag = case way; when:in:"inlet"; when:out:"outlet" end
+ doc.keys.each {|sel|
+ text = v.doc[sel]
+ m=/^_(\d+)_(\w+)/.match sel.to_s
+ if m then
+ xclass << XNode[tag,{"id"=>Integer(m[1])},
+ XNode["method",{"name"=>m[2]},XString.new(text)]]
+ else
+ xclass << XNode["method",{"name"=>sel.to_s},XString.new(text)]
+ end
+ }
+end
+
+def harvest_doc tree
+ kla = {}
+ tree.contents.find_all {|x| XNode===x and x.tag=="section" }.each {|sex|
+ sex.contents.each {|y|
+ next unless XNode===y and y.tag=="class"
+ kla[y.att["name"]] = y
+ }
+ }
+ #STDERR.puts kla.inspect
+ tree << (nu=XNode["section",{"name"=>"(new documentation)"}])
+ tree << (un=XNode["section",{"name"=>"(undocumented)"}])
+ alph = GridFlow.fclasses.keys.sort
+ alph.each {|k|
+ next if /^@/=~k and GridFlow.fclasses[k.gsub(/^@/,"#")]
+ v = GridFlow.fclasses[k]
+ if v.doc then
+ nu << (xclass=XNode["class",{"name"=>k}])
+ harvest_doc_of_class xclass, v, :in
+ harvest_doc_of_class xclass, v, :out
+ elsif not kla[k] then
+ un << XNode["p",{},XString.new("[#{k}]")]
+ end
+ }
+end
+
def read_one_page file
begin
STDERR.puts "reading #{file}"
parser = GFDocParser.new(file)
parser.do_it
$nodes[file] = parser.stack[0][0]
+ if file=="reference.xml" then harvest_doc $nodes[file] end
rescue Exception => e
puts ""
puts ""
@@ -587,8 +632,10 @@ def write_one_page file
$file = file
output_name = file.sub(/\.xml/,".html")
STDERR.puts "writing #{output_name}"
+ STDOUT.flush # bug in 1.9 ?
STDOUT.reopen output_name, "w"
tree = $nodes[file]
+# tree.contents.each {|x| STDERR.puts x.inspect }
write_header(tree)
mk(:tr) { mk(:td,:colspan,2) { mk(:div,:cols,tree.att["indexcols"]||1) {
tree.show_index
@@ -605,8 +652,9 @@ def write_one_page file
end
$files = %w(
- install.xml project_policy.xml
+ install.xml
reference.xml format.xml internals.xml architecture.xml)
+# project_policy.xml
$files.each {|input_name| read_one_page input_name }
$files.each {|input_name| write_one_page input_name }
diff --git a/externals/gridflow/doc/profiling.html b/externals/gridflow/doc/profiling.html
index aac2ea1f..f804e87d 100644
--- a/externals/gridflow/doc/profiling.html
+++ b/externals/gridflow/doc/profiling.html
@@ -1,6 +1,6 @@
<html>
<head>
-<!-- $Id: profiling.html,v 1.1 2005-10-04 02:09:43 matju Exp $ -->
+<!-- $Id: profiling.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Architecture
Copyright (c) 2001,2002,2003,2004 by Mathieu Bouchard
diff --git a/externals/gridflow/doc/reference.html b/externals/gridflow/doc/reference.html
index ac1f4373..8dce72ec 100644
--- a/externals/gridflow/doc/reference.html
+++ b/externals/gridflow/doc/reference.html
@@ -1,6 +1,6 @@
<html><head>
-<!-- $Id: reference.html,v 1.1 2005-10-04 02:09:43 matju Exp $ -->
-<title>GridFlow 0.8.0 - Reference Manual: Flow Classes</title>
+<!-- $Id: reference.html,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
+<title>GridFlow 0.8.1 - Reference Manual: Flow Classes</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="gridflow.css" type="text/css">
</head>
@@ -14,7 +14,7 @@
<tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4" height="16">
- <h4>GridFlow 0.8.0 - Reference Manual: Flow Classes</h4>
+ <h4>GridFlow 0.8.1 - Reference Manual: Flow Classes</h4>
</td></tr>
<tr>
<td width="5%" rowspan="2">&nbsp;</td>
@@ -129,6 +129,15 @@
<li><a href="#pd_netsend"><img src="flow_classes/pd_netsend-icon.png" alt="[pd_netsend]" border="0"></a></li>
<li><a href="#pd_netreceive"><img src="flow_classes/pd_netreceive-icon.png" alt="[pd_netreceive]" border="0"></a></li>
</ul>
+<h4><a href="#(new_documentation)">(new documentation)</a></h4><ul>
+<li><a href="#listfind"><img src="flow_classes/listfind-icon.png" alt="[listfind]" border="0"></a></li>
+<li><a href="#memstat"><img src="flow_classes/memstat-icon.png" alt="[memstat]" border="0"></a></li>
+<li><a href="#regsub"><img src="flow_classes/regsub-icon.png" alt="[regsub]" border="0"></a></li>
+<li><a href="#sendgui"><img src="flow_classes/sendgui-icon.png" alt="[sendgui]" border="0"></a></li>
+<li><a href="#sys_vgui"><img src="flow_classes/sys_vgui-icon.png" alt="[sys_vgui]" border="0"></a></li>
+</ul>
+<h4><a href="#(undocumented)">(undocumented)</a></h4><ul>
+</ul>
<br><br>
</div></td></tr> <tr><td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
@@ -208,6 +217,13 @@
<img src="flow_classes/%23color-icon.png" alt="[#color]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
<p>Triple slider for the selection of RGB values.</p> <br><b>method</b>&nbsp;init <b>(</b><i>float</i> min<b>, </b><i>float</i> max<b>, </b><i>0,1</i> hidepreview<b>)</b> <br>
<br><b>inlet&nbsp;0 </b><b>method</b>&nbsp;grid <b>(</b><b>)</b>
+ changes all three values (R,G,B). The grid must
+ be a Dim(3). <br>
+ <br><b>inlet&nbsp;0 </b><b>method</b>&nbsp;delegate <b>(</b><b>)</b>
+ sends the rest of the message to each of the three sliders.
+ this relies on the fact that [#color] is implemented using
+ three [hsl] and this might not still work in the far future. <br>
+ <br><b>outlet&nbsp;0 </b><b>method</b>&nbsp;grid <b>(</b><b>)</b>
Produces a Dim(3) grid of RGB values. <br>
<br></td></tr><tr><td></td><td></td><td> </td></tr>
<tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="#unpack">#unpack</a></td></tr><tr><td></td><td valign="top"><br>
@@ -874,7 +890,11 @@ Outputs the fractions of a second up to 10 microseconds (?) (actual precision is
This object is similar to the Unix list command
'ls'. It returns the names of files in a given
directory. May be used with [listlength] to retrieve the number of files.
- Hidden files are displayed. </p> <br><b>inlet&nbsp;0 </b><b>method</b>&nbsp;symbol <b>(</b><b>)</b> <br>
+ Hidden files are displayed. </p> <br><b>inlet&nbsp;0 </b><b>method</b>&nbsp;symbol <b>(</b><b>)</b>
+ lists all files in a given directory <br>
+ <br><b>inlet&nbsp;0 </b><b>method</b>&nbsp;glob <b>(</b><b>)</b>
+ lists all files matching a given pattern.
+ "symbol hello" is like "glob hello/*" <br>
<br></td></tr><tr><td></td><td></td><td> </td></tr>
<tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="exec">exec</a></td></tr><tr><td></td><td valign="top"><br>
<img src="flow_classes/exec-icon.png" alt="[exec]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
@@ -1057,13 +1077,88 @@ Outputs the HPGL commands in ASCII format <br></td></tr><tr><td></td><td></td><t
same as jmax_udpreceive but for PureData UDP connections. <br></td></tr><tr><td></td><td></td><td> </td></tr>
<tr><td>&nbsp;</td></tr>
- <td colspan="4" bgcolor="black">
+ <tr><td colspan="4" bgcolor="black">
+<img src="images/black.png" width="1" height="2"></td></tr>
+<tr><td colspan="4"><a name="(new_documentation)"></a><h4>(new documentation)</h4></td></tr><tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="listfind">listfind</a></td></tr><tr><td></td><td valign="top"><br>
+<img src="flow_classes/listfind-icon.png" alt="[listfind]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
+<br><b>method</b>&nbsp;_1_list <b>(</b><b>)</b> list to search into<br>
+<br><b>method</b>&nbsp;_0_float <b>(</b><b>)</b> float to find in that list<br>
+<br><b>method</b>&nbsp;_1_float <b>(</b><b>)</b> position of the incoming float in the stored list<br>
+<br></td></tr><tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="memstat">memstat</a></td></tr><tr><td></td><td valign="top"><br>
+<img src="flow_classes/memstat-icon.png" alt="[memstat]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
+<br><b>method</b>&nbsp;_0_bang <b>(</b><b>)</b> lookup process stats for the currently running pd+ruby and figure out how much RAM it uses.<br>
+<br><b>method</b>&nbsp;_0_float <b>(</b><b>)</b> virtual size of RAM in kilobytes (includes swapped out and shared memory)<br>
+<br></td></tr><tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="regsub">regsub</a></td></tr><tr><td></td><td valign="top"><br>
+<img src="flow_classes/regsub-icon.png" alt="[regsub]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
+<br><b>method</b>&nbsp;_1_symbol <b>(</b><b>)</b> a regexp pattern to be found inside of the string<br>
+<br><b>method</b>&nbsp;_0_symbol <b>(</b><b>)</b> a string to transform<br>
+<br><b>method</b>&nbsp;_2_symbol <b>(</b><b>)</b> a replacement for the found pattern<br>
+<br><b>method</b>&nbsp;_0_symbol <b>(</b><b>)</b> the transformed string<br>
+<br></td></tr><tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="sendgui">sendgui</a></td></tr><tr><td></td><td valign="top"><br>
+<img src="flow_classes/sendgui-icon.png" alt="[sendgui]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
+<br><b>method</b>&nbsp;_0_list <b>(</b><b>)</b> a Tcl/Tk command to send to the pd client.<br>
+<br></td></tr><tr><td colspan="4" bgcolor="#ffb080"><b>&nbsp;&nbsp;class </b><a name="sys_vgui">sys_vgui</a></td></tr><tr><td></td><td valign="top"><br>
+<img src="flow_classes/sys_vgui-icon.png" alt="[sys_vgui]" border="0"><br clear="left"><br><br><br clear="left"><br></td><td><br>
+<br><b>method</b>&nbsp;_0_list <b>(</b><b>)</b> a Tcl/Tk command to send to the pd client.<br>
+<br></td></tr><tr><td>&nbsp;</td></tr>
+<tr><td colspan="4" bgcolor="black">
+<img src="images/black.png" width="1" height="2"></td></tr>
+<tr><td colspan="4"><a name="(undocumented)"></a><h4>(undocumented)</h4></td></tr><tr><td></td><td></td><td><p>[#edit]</p></td></tr>
+<tr><td></td><td></td><td><p>[#in]</p></td></tr>
+<tr><td></td><td></td><td><p>[#in:aalib]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:file]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:grid]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:jpeg]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:mpeg]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:opengl]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:png]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:ppm]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:quicktime]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:sdl]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:targa]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:tk]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:videodev]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:window]</p></td></tr>
+<tr><td></td><td></td><td><p>[#io:x11]</p></td></tr>
+<tr><td></td><td></td><td><p>[#matrix_solve]</p></td></tr>
+<tr><td></td><td></td><td><p>[#out]</p></td></tr>
+<tr><td></td><td></td><td><p>[#peephole]</p></td></tr>
+<tr><td></td><td></td><td><p>[@!]</p></td></tr>
+<tr><td></td><td></td><td><p>[@eight]</p></td></tr>
+<tr><td></td><td></td><td><p>[@four]</p></td></tr>
+<tr><td></td><td></td><td><p>[@global]</p></td></tr>
+<tr><td></td><td></td><td><p>[@scale_to]</p></td></tr>
+<tr><td></td><td></td><td><p>[@three]</p></td></tr>
+<tr><td></td><td></td><td><p>[@two]</p></td></tr>
+<tr><td></td><td></td><td><p>[GridObject]</p></td></tr>
+<tr><td></td><td></td><td><p>[SoundMixer]</p></td></tr>
+<tr><td></td><td></td><td><p>[ascii]</p></td></tr>
+<tr><td></td><td></td><td><p>[broken]</p></td></tr>
+<tr><td></td><td></td><td><p>[button]</p></td></tr>
+<tr><td></td><td></td><td><p>[delcomusb]</p></td></tr>
+<tr><td></td><td></td><td><p>[for]</p></td></tr>
+<tr><td></td><td></td><td><p>[gfmessagebox]</p></td></tr>
+<tr><td></td><td></td><td><p>[gridflow]</p></td></tr>
+<tr><td></td><td></td><td><p>[jcomment]</p></td></tr>
+<tr><td></td><td></td><td><p>[jmax4_udpreceive]</p></td></tr>
+<tr><td></td><td></td><td><p>[jmax4_udpsend]</p></td></tr>
+<tr><td></td><td></td><td><p>[joystick_port]</p></td></tr>
+<tr><td></td><td></td><td><p>[jpatcher]</p></td></tr>
+<tr><td></td><td></td><td><p>[klippeltronics]</p></td></tr>
+<tr><td></td><td></td><td><p>[loadbang]</p></td></tr>
+<tr><td></td><td></td><td><p>[messbox]</p></td></tr>
+<tr><td></td><td></td><td><p>[parallel_port]</p></td></tr>
+<tr><td></td><td></td><td><p>[pd_netsocket]</p></td></tr>
+<tr><td></td><td></td><td><p>[system]</p></td></tr>
+<tr><td></td><td></td><td><p>[toggle]</p></td></tr>
+<tr><td>&nbsp;</td></tr>
+<td colspan="4" bgcolor="black">
<img src="images/black.png" width="1" height="2"></td></tr>
<tr><td colspan="4">
<p><font size="-1">
-GridFlow 0.8.0 Documentation<br>
-Copyright &copy; 2001,2002,2003,2004,2005 by Mathieu Bouchard
-<a href="mailto:matju@sympatico.ca">matju@artengine.ca</a>
+GridFlow 0.8.1 Documentation<br>
+Copyright &copy; 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
+<a href="mailto:matju@artengine.ca">matju@artengine.ca</a>
</font></p>
</td></tr></table></body></html>
diff --git a/externals/gridflow/doc/reference.xml b/externals/gridflow/doc/reference.xml
index 8a5f8f7e..e7bf94a1 100644
--- a/externals/gridflow/doc/reference.xml
+++ b/externals/gridflow/doc/reference.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE documentation SYSTEM 'gridflow.dtd'>
<documentation title="Reference Manual: Flow Classes" indexcols="3">
-<!-- $Id: reference.xml,v 1.1 2005-10-04 02:09:43 matju Exp $ -->
+<!-- $Id: reference.xml,v 1.2 2006-03-15 04:44:50 matju Exp $ -->
<!--
GridFlow Reference Manual: Class Reference
- Copyright (c) 2001,2002,2003,2004 by Mathieu Bouchard and Alexandre Castonguay
+ Copyright (c) 2001,2002,2003,2004,2005,2006
+ by Mathieu Bouchard and Alexandre Castonguay
-->
<section name="Objects for making grids and breaking them down">
@@ -148,8 +149,17 @@
<arg name="hidepreview" type="0,1"></arg>
</method>
<inlet id="0"><method name="grid">
- Produces a Dim(3) grid of RGB values.
+ changes all three values (R,G,B). The grid must
+ be a Dim(3).
+ </method>
+ <method name="delegate">
+ sends the rest of the message to each of the three sliders.
+ this relies on the fact that [#color] is implemented using
+ three [hsl] and this might not still work in the far future.
</method></inlet>
+ <outlet id="0"><method name="grid">
+ Produces a Dim(3) grid of RGB values.
+ </method></outlet>
</class>
<class name="#unpack">
@@ -1342,7 +1352,13 @@
directory. May be used with [listlength] to retrieve the number of files.
Hidden files are displayed.
</p>
- <inlet id="0"><method name="symbol"/></inlet>
+ <inlet id="0"><method name="symbol">
+ lists all files in a given directory
+ </method>
+ <method name="glob">
+ lists all files matching a given pattern.
+ "symbol hello" is like "glob hello/*"
+ </method></inlet>
</class>
<class name="exec">
diff --git a/externals/gridflow/doc/tutorials/0-0-intro_page.pd b/externals/gridflow/doc/tutorials/0-0-intro_page.pd
new file mode 100755
index 00000000..3ac9fb86
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/0-0-intro_page.pd
@@ -0,0 +1,89 @@
+#N canvas 226 0 429 638 10;
+#X obj -22 -68 cnv 1 430 80 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -24 49 cnv 1 430 520 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj -24 82 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 57 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -17 49 cnv 1 2 480 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 390 50 cnv 1 2 480 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 144 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 168 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 98 1.1 What is a grid?;
+#X obj 41 534 cnv 15 300 30 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 53 539 Stephanie Brodeur & Darsha Hewitt 2005;
+#X obj -22 7 cnv 15 430 30 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 88 -3 cnv 15 100 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 88 -5 GridFlow 0.8.0;
+#X obj -22 -68 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj -23 37 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj 189 11 cnv 15 63 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 188 8 Tutorials;
+#X obj -24 48 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj -24 528 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X text 14 63 1;
+#X obj 32 62 Introduction to Grids;
+#X text 26 178 2.1 How does GridFlow understand images?;
+#X text 15 150 2;
+#X obj 36 147 Introduction to Images;
+#X text 419 224 2.3 Different options on how to open an image.;
+#X text 445 241 2.3.1 Opening different images in one window.;
+#X text 445 258 2.3.2 Opening images using send and receive.;
+#X obj -24 310 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 334 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 18 317 3;
+#X obj 39 315 Introduction to Video;
+#X text 482 201 REMOVE 2.3 -- see pd tuts;
+#X text 17 405 4;
+#X obj 38 405 Introduction to Live Feed;
+#X obj 37 481 Putting it all Together;
+#X text 20 482 5;
+#X text 30 430 4.1 Opening a live video feed;
+#X text 30 446 4.2 Motion Detection;
+#X text 29 372 3.3 Recording video;
+#X obj -24 310 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 334 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 400 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 424 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 400 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 424 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 476 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 500 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 476 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj -24 500 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 114 1.2 How to create a grid;
+#X text 26 197 2.2 Opening an image;
+#X text 26 214 2.3 Image manipulation;
+#X text 55 244 2.3.2 Resizing an image;
+#X text 55 228 2.3.1 Numop;
+#X text 55 273 2.3.4 Remap image;
+#X text 55 259 2.3.3 Greyscale;
+#X text 55 286 2.3.5 Convolve;
+#X text 29 342 3.1 Opening a video;
+#X text 29 358 3.2 Video manipulation;
diff --git a/externals/gridflow/doc/tutorials/2-3-4-image-modification-2-remap-image.pd b/externals/gridflow/doc/tutorials/2-3-4-image-modification-2-remap-image.pd
new file mode 100755
index 00000000..b6e4755d
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/2-3-4-image-modification-2-remap-image.pd
@@ -0,0 +1,55 @@
+#N canvas 41 17 876 618 10;
+#X obj 10 519 cnv 15 720 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X msg 53 173 open b001.jpg;
+#X obj 23 116 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 23 204 #in;
+#X obj 23 142 t b b;
+#X obj 23 351 #out window;
+#X obj 102 323 #print;
+#X obj 184 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 203 225 5 0 0 0 - - -;
+#X obj 173 184 #for (0 0) (240 320) (1 1);
+#X obj 173 134 metro 100;
+#X obj 173 109 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 23 292 #remap_image;
+#X text 18 526 GridFlow 0.8.0;
+#X text 243 224 <-- Modify the value to see transformations.;
+#X obj 173 257 # / 1;
+#X text 227 261 The remap object works with numops.;
+#X obj 9 -17 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 9 -52 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 15 -17 2.4 Image Manipulation;
+#X text 16 -46 2 Introduction to Images;
+#X text 15 2 2.4.4 Remap Image;
+#X text 26 408 Remap image permits you to modify an image using numeric
+operators. Different numeric Operators have different effects ton the
+image and can be changed to give the desired effect. The multiplication
+operator multiplies the values and distorts the image. The division
+operator does the same but shrinks the operator...;
+#X text 467 24 Have the list of operators and what they do in order
+to know the various effects.;
+#X text 468 77 example:;
+#X obj 474 121 # / 2;
+#X text 523 114 multiplication multiplies the numbers in the grid and
+distorts the image.;
+#N canvas 0 0 450 300 META 0;
+#X restore 130 527 pd META;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 12 0;
+#X connect 4 0 3 0;
+#X connect 4 1 1 0;
+#X connect 7 0 9 0;
+#X connect 8 0 15 1;
+#X connect 9 0 15 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 5 0;
+#X connect 12 1 6 0;
+#X connect 15 0 12 1;
diff --git a/externals/gridflow/doc/tutorials/2-3-5-image-modification-2-convolve.pd b/externals/gridflow/doc/tutorials/2-3-5-image-modification-2-convolve.pd
new file mode 100755
index 00000000..4a099537
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/2-3-5-image-modification-2-convolve.pd
@@ -0,0 +1,120 @@
+#N canvas 47 0 787 658 10;
+#X msg 468 148 3 3 # 0 4 0 4 9 -4 0 -4 0;
+#X msg 467 100 3 3 # 4 0 0 0 1 0 0 0 4;
+#X obj 80 219 #store;
+#X obj 80 270 # / 9;
+#X msg 467 75 3 3 # 1 1 1 1 1 1 1 1 1;
+#X obj -13 201 #out window;
+#X msg 470 263 1 3 # 0 9 -9;
+#X obj -21 117 #in;
+#X msg 468 124 3 3 # 2 2 2 2 -7 2 2 2 2;
+#X obj 80 145 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 70 325 @! abs;
+#X obj -21 77 loadbang;
+#X obj 80 182 metro 33.3667;
+#X obj -21 139 t a;
+#X obj 80 244 #convolve \, seed 4;
+#X obj 401 78 loadbang;
+#X obj 80 299 shunt 2;
+#X obj 124 270 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0
+1;
+#X msg 170 280 0;
+#X obj 124 351 # + 128;
+#X msg 170 304 1;
+#X obj 469 174 display;
+#X obj -13 225 fps;
+#X obj -13 250 print;
+#X obj -50 466 cnv 15 780 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text -42 473 GridFlow 0.8.0;
+#X text -42 473 GridFlow 0.8.0;
+#X msg 470 242 1 3 # 0 2 -2;
+#X msg 470 325 3 3 # 0 -1 0 -1 4 -1 0 -1 0;
+#X msg 470 348 3 3 # -1 -1 -1 -1 8 -1 -1 -1 -1;
+#X msg 470 416 3 3 # 0 -1 0 -1 13 -1 0 -1 0;
+#X obj 124 325 # << 4;
+#X msg -21 97 open babbage.jpg \, bang;
+#X obj -49 -111 cnv 15 780 15 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj -49 -146 cnv 15 780 30 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 470 218 cnv 15 100 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X obj 468 52 cnv 15 37 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 470 218 Edge detection;
+#X obj 470 303 cnv 15 110 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 472 303 Laplacian masks;
+#X obj 470 393 cnv 15 50 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 470 393 Sharpen;
+#X obj -21 383 #clip;
+#X obj 190 118 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X obj 210 97 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X text 146 97 <-- step #1: load image;
+#X obj 173 141 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X text 109 141 <-- step #3: start metro;
+#X text 154 118 step #2: select transformation -->;
+#X text 468 52 Blurs;
+#N canvas 0 0 450 300 META 0;
+#X restore 69 473 pd META;
+#X text -44 -140 2 Introduction to Images;
+#X text -44 -112 2.4 Image Manipulation;
+#X obj -49 24 cnv 15 780 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text -49 23 (Source convolve.pd : Copyright Mathieu Bouchard 2002)
+;
+#X text -16 -67 Convolve is an abstraction used for modifying an image.
+In this patch you can choose to create a "blur" \, to view "edge detection"
+\, to add a "laplacian mask" or to "sharpen" an image. The image must
+be loaded \, the transformation selected and the metro started before
+seeing the transformation applied to the image.;
+#X obj -17 -89 cnv 15 100 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text -17 -90 2.4.4 Convolve;
+#X connect 0 0 18 0;
+#X connect 0 0 14 1;
+#X connect 0 0 21 0;
+#X connect 1 0 18 0;
+#X connect 1 0 14 1;
+#X connect 2 0 14 0;
+#X connect 3 0 16 0;
+#X connect 4 0 18 0;
+#X connect 4 0 14 1;
+#X connect 5 0 22 0;
+#X connect 6 0 14 1;
+#X connect 6 0 20 0;
+#X connect 7 0 13 0;
+#X connect 8 0 18 0;
+#X connect 8 0 14 1;
+#X connect 9 0 12 0;
+#X connect 10 0 42 0;
+#X connect 11 0 32 0;
+#X connect 12 0 2 0;
+#X connect 13 0 2 1;
+#X connect 13 0 5 0;
+#X connect 14 0 3 0;
+#X connect 15 0 4 0;
+#X connect 16 0 10 0;
+#X connect 16 1 31 0;
+#X connect 17 0 16 1;
+#X connect 18 0 17 0;
+#X connect 19 0 42 0;
+#X connect 20 0 17 0;
+#X connect 22 0 23 0;
+#X connect 27 0 18 0;
+#X connect 27 0 14 1;
+#X connect 28 0 14 1;
+#X connect 28 0 20 0;
+#X connect 29 0 20 0;
+#X connect 29 0 14 1;
+#X connect 30 0 18 0;
+#X connect 30 0 14 1;
+#X connect 31 0 19 0;
+#X connect 32 0 7 0;
+#X connect 42 0 13 0;
diff --git a/externals/gridflow/doc/tutorials/2-3-6-image-modification-2-cross-fade.pd b/externals/gridflow/doc/tutorials/2-3-6-image-modification-2-cross-fade.pd
new file mode 100755
index 00000000..6b8fe50a
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/2-3-6-image-modification-2-cross-fade.pd
@@ -0,0 +1,93 @@
+#N canvas 92 129 774 521 10;
+#X text 24 355 note: the #layer/#join objects can make the crossfade
+process simpler but it's still not faster.;
+#X obj 14 95 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 14 120 metro 33.3667;
+#X obj 14 140 float;
+#X obj 26 169 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 58 139 + 4;
+#X obj 14 190 pingpong 256;
+#X obj 25 212 hsl 129 15 0 256 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X text 25 393 also #draw_image/#join is a possibility;
+#X obj 13 40 cnv 15 680 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 27 53 Copyright 2002 Mathieu Bouchard;
+#X text 27 37 cross_fade.pd;
+#X obj 6 324 cnv 15 680 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 18 326 GridFlow 0.8.0;
+#N canvas 515 126 450 300 cross_fade 0;
+#X obj 40 198 # *>>8;
+#X text 67 242 first picture plus a fraction of the difference;
+#X obj 40 240 # +;
+#X obj 40 177 #store;
+#X obj 264 137 # inv+;
+#X obj 95 261 tgl 15 0 empty empty empty 0 -6 0 8 -241291 -1 -1 0 1
+;
+#X msg 422 195 open r001.jpg \, cast int16 \, bang;
+#X obj 321 156 #in;
+#X obj 40 156 #finished;
+#X text 116 264 click to clip out-of-range colours;
+#X text 89 197 multiply by a N/256 fraction;
+#X obj 88 302 # max 0;
+#X obj 254 89 #in;
+#X obj 88 281 # min 255;
+#X obj 44 337 #out window;
+#X obj 40 116 #cast int16;
+#X text 88 177 keep the difference between both pictures;
+#X obj 447 99 t b b;
+#X obj 445 74 loadbang;
+#X obj 40 260 shunt 2;
+#X obj 40 135 t a a;
+#X msg 459 137 open g001.jpg \, cast int16 \, bang;
+#X obj 30 75 inlet;
+#X connect 0 0 2 0;
+#X connect 2 0 19 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 1;
+#X connect 5 0 19 1;
+#X connect 6 0 7 0;
+#X connect 7 0 4 1;
+#X connect 8 0 3 0;
+#X connect 11 0 14 0;
+#X connect 12 0 4 0;
+#X connect 12 0 2 1;
+#X connect 13 0 11 0;
+#X connect 15 0 20 0;
+#X connect 17 0 21 0;
+#X connect 17 1 6 0;
+#X connect 18 0 17 0;
+#X connect 19 0 14 0;
+#X connect 19 1 13 0;
+#X connect 20 0 8 0;
+#X connect 20 1 0 1;
+#X connect 21 0 12 0;
+#X connect 22 0 15 0;
+#X restore 13 261 pd cross_fade;
+#X obj 15 11 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 18 11 What is a grid?;
+#X obj 15 -24 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 20 -25 2 Images;
+#X text 22 -11 Description: opening multiple images from one window.
+;
+#X obj 11 416 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 19 423 GridFlow 0.8.0;
+#X text 219 118 some objects have been created to perform specoific
+tasks. One of these is the crossfade patch it permits you to fade from
+one image to another. you can chose the images you want to ping pong
+between \, to get a nice steady fade between two images.;
+#N canvas 0 0 450 300 META 0;
+#X restore 146 428 pd META;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 5 0 3 1;
+#X connect 6 0 7 0;
+#X connect 6 0 14 0;
diff --git a/externals/gridflow/doc/tutorials/2nd-part-numop.pd b/externals/gridflow/doc/tutorials/2nd-part-numop.pd
new file mode 100755
index 00000000..a6f96f9c
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/2nd-part-numop.pd
@@ -0,0 +1,80 @@
+#N canvas 66 33 927 601 10;
+#X obj 16 -206 cnv 15 200 170 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 38 -178 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 24 -127 #in;
+#X obj 82 -114 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -241291
+-1 -1 0 1;
+#X obj 24 -88 # + \$1;
+#X obj 125 -157 metro 33.3;
+#X obj 125 -177 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0
+1;
+#X obj 462 -153 cnv 15 400 350 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 482 -109 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 468 -30 #in;
+#X msg 468 -132 open b001.jpg;
+#X obj 508 -49 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -241291
+-1 -1 0 1;
+#X obj 468 84 # + \$1;
+#X obj 514 -109 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1
+1;
+#X obj 468 128 #clip;
+#X obj 24 -60 s slider_metro;
+#X obj 468 154 s slider_metro_clip;
+#X floatatom 79 -86 5 0 0 0 - - -;
+#X text 10 210 In all these examples the [# +] numop is used. All the
+numeric operators can be found in the numeric operator help patch (right
+click on the [# +] and select help to view them). If you want to see
+what effects other numops can do \, try replacing the [# +] numop with
+another one (either cut and past a different numop from the help file
+or create the object in the current canvas.;
+#X obj 514 -89 metro 33.3;
+#X obj 552 -21 #color;
+#X msg 552 44 255 0 0;
+#X text 614 44 donner une liste changer couleurs;
+#X obj 552 88 #scale_by (8 8);
+#X msg 552 66 2 2 3 # 255 0 0 0 255 0 0 0 255 191 191 191;
+#X obj 834 211 r slider_metro;
+#X obj 843 238 r slider_metro_clip;
+#X obj 834 265 #out window;
+#X obj 16 -284 cnv 15 70 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 15 -284 Example #4;
+#X text 15 -261 Will demonstrate how to use the metro (see pd_intro
+#4) and the slider which allows you to scroll through values and modify
+a grid in real-time.;
+#X msg 24 -202 open b001.jpg;
+#X obj 456 -281 cnv 15 70 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 455 -281 Example #5;
+#X text 457 -260 We introduce the [#clip] object. It is used with numops
+in order to set constraints on the pixel to eliminate color wrapping.
+Colour wrapping occurs when the individual pixel values in a grid exceed
+255 which results in over-saturation of colour. GridFlow reads colours
+as values from 0 (black) to 255 (white). Refer to glossary for more
+information on colour.;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 3 0 17 0;
+#X connect 4 0 15 0;
+#X connect 5 0 2 0;
+#X connect 6 0 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 12 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 1;
+#X connect 12 0 14 0;
+#X connect 13 0 19 0;
+#X connect 14 0 16 0;
+#X connect 19 0 9 0;
+#X connect 20 0 12 1;
+#X connect 21 0 12 1;
+#X connect 23 0 12 1;
+#X connect 24 0 23 0;
+#X connect 25 0 27 0;
+#X connect 26 0 27 0;
+#X connect 31 0 2 0;
diff --git a/externals/gridflow/doc/tutorials/3-1-0-open-video.pd b/externals/gridflow/doc/tutorials/3-1-0-open-video.pd
new file mode 100755
index 00000000..2abf0e74
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/3-1-0-open-video.pd
@@ -0,0 +1,38 @@
+#N canvas 48 56 545 431 10;
+#X obj 100 156 #in;
+#X obj 100 222 #out window;
+#X obj 124 33 openpanel;
+#X obj 124 9 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 124 58 open \$1;
+#X obj 17 11 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 17 45 metro 33.33;
+#X floatatom 317 190 5 0 0 0 - - -;
+#X obj 401 166 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 401 193 print go;
+#X msg 201 124 loop 0;
+#X msg 201 97 loop 1;
+#X msg 283 13 open home/steph/Desktop/PDDP_summer;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 8 320 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 327 GridFlow 0.8.0;
+#X connect 0 0 1 0;
+#X connect 0 1 7 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 0 0;
+#X connect 8 0 9 0;
+#X connect 10 0 0 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
diff --git a/externals/gridflow/doc/tutorials/3-2-video-manipulation.pd b/externals/gridflow/doc/tutorials/3-2-video-manipulation.pd
new file mode 100755
index 00000000..78a7b427
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/3-2-video-manipulation.pd
@@ -0,0 +1 @@
+#N canvas 0 0 450 300 10;
diff --git a/externals/gridflow/doc/tutorials/3-3-record-video.pd b/externals/gridflow/doc/tutorials/3-3-record-video.pd
new file mode 100755
index 00000000..ff158554
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/3-3-record-video.pd
@@ -0,0 +1,51 @@
+#N canvas 151 21 517 609 10;
+#X obj 15 320 #camera;
+#X obj 15 260 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 142 370 #out window;
+#X obj 90 260 hsl 128 15 20 300 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 142 395 fps detailed;
+#X obj 142 419 print;
+#X obj 15 294 metro 100;
+#X obj 53 473 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 129 506 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 149 505 stop recording;
+#X text 73 471 select filename;
+#X text 111 488 start recording;
+#X obj 91 489 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 15 528 #record_quicktime;
+#X text 21 54 To record a video from a live stream or a video... you
+can use this patch.;
+#X text 224 315 xinitrc ssh pdrc bach rc export bookmarks;
+#X text 11 110 The outside of the patch uses objects seen in previous
+patches. The [#record_quicktime] object is an abstraction in which
+the settings and the optins are situated. to contruct the patch ...
+Do we explain how to do it if it is in an abstraction???;
+#X text 86 198 we don't nec have to explain how to build it since its
+available to them through the pd_examples and they have been through
+enough patvhes to easily understand what's going on.;
+#X obj 11 29 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 14 29 What is a grid?;
+#X obj 11 -6 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 -7 2 Images;
+#X text 18 7 Description: opening multiple images from one window.
+;
+#X obj 13 561 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 21 568 GridFlow 0.8.0;
+#X connect 0 0 2 0;
+#X connect 0 0 13 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 13 1;
+#X connect 8 0 13 3;
+#X connect 12 0 13 2;
diff --git a/externals/gridflow/doc/tutorials/4-0-open-live-stream.pd b/externals/gridflow/doc/tutorials/4-0-open-live-stream.pd
new file mode 100755
index 00000000..7ce60b4d
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/4-0-open-live-stream.pd
@@ -0,0 +1,24 @@
+#N canvas 286 99 571 305 10;
+#X obj 91 104 #camera;
+#X obj 40 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 91 12 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 91 59 metro 50;
+#X obj 91 151 #out window;
+#X text 162 103 In this case there is no need for the [#in] objec.
+Thereis one in the [#camera] object already.;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 10 197 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 18 204 GridFlow 0.8.0;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
diff --git a/externals/gridflow/doc/tutorials/4-1-2-simple-motion-detection-absolute-value.pd b/externals/gridflow/doc/tutorials/4-1-2-simple-motion-detection-absolute-value.pd
new file mode 100755
index 00000000..a4021d41
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/4-1-2-simple-motion-detection-absolute-value.pd
@@ -0,0 +1,31 @@
+#N canvas 452 202 450 438 10;
+#X obj 91 104 #camera;
+#X obj 40 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 91 12 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 91 59 metro 50;
+#X obj 100 253 #out window;
+#X obj 88 134 trigger anything anything;
+#X obj 133 162 # -;
+#X obj 133 201 #clip;
+#X obj 343 223 @! abs;
+#X obj 343 254 # + 50;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 8 320 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 327 GridFlow 0.8.0;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 5 0 6 1;
+#X connect 5 1 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
diff --git a/externals/gridflow/doc/tutorials/4-1-3-motion-detection-more-advanced-and-more-options.pd b/externals/gridflow/doc/tutorials/4-1-3-motion-detection-more-advanced-and-more-options.pd
new file mode 100755
index 00000000..112d2f8c
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/4-1-3-motion-detection-more-advanced-and-more-options.pd
@@ -0,0 +1,49 @@
+#N canvas 476 26 450 542 10;
+#X obj 91 104 #camera;
+#X obj 248 302 #out window;
+#X obj 40 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X text 167 102 there is an [#in] within [#camera];
+#X obj 80 12 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 248 325 fps detailed;
+#X obj 248 351 print;
+#X obj 108 20 metro 50;
+#X obj 248 198 # -;
+#X obj 248 269 #clip;
+#X obj 248 220 @! abs;
+#X obj 248 244 # + 50;
+#X obj 164 141 trigger anything anything;
+#X text 281 197 230400 (240x320x3);
+#X obj 101 303 #rgb_to_greyscale;
+#X obj 101 326 #centroid;
+#X floatatom 154 404 5 0 0 0 - - -;
+#X floatatom 200 403 5 0 0 0 - - -;
+#X obj 85 375 display;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 6 432 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 14 439 GridFlow 0.8.0;
+#X connect 0 0 12 0;
+#X connect 1 0 5 0;
+#X connect 2 0 0 0;
+#X connect 4 0 7 0;
+#X connect 5 0 6 0;
+#X connect 7 0 0 0;
+#X connect 8 0 10 0;
+#X connect 9 0 1 0;
+#X connect 9 0 14 0;
+#X connect 10 0 11 0;
+#X connect 11 0 9 0;
+#X connect 12 0 8 1;
+#X connect 12 1 8 0;
+#X connect 14 0 15 0;
+#X connect 15 0 18 0;
+#X connect 15 1 16 0;
+#X connect 15 2 17 0;
diff --git a/externals/gridflow/doc/tutorials/4-1-simple-motion-detection.pd b/externals/gridflow/doc/tutorials/4-1-simple-motion-detection.pd
new file mode 100755
index 00000000..bb3962a1
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/4-1-simple-motion-detection.pd
@@ -0,0 +1,37 @@
+#N canvas 83 181 707 437 10;
+#X obj 91 104 #camera;
+#X obj 40 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 91 12 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1;
+#X obj 91 59 metro 50;
+#X obj 100 253 #out window;
+#X obj 40 136 trigger anything anything;
+#X obj 89 187 # -;
+#X obj 89 226 #clip;
+#X text 245 235 as a short cut you can use [t a a]. The values of one
+frame are substracted from the previous frame only keeps the difference
+and gives allows you to see the movement that occured between the first
+seconde frame in relation to the first one.;
+#X text 242 38 Motion detection is a way to view only the movement
+in a space. Movement can be detected in darkness and seen as a video
+image. the detection occurs when one frame it substractes the current
+frame froom the last frame.;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 8 320 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 327 GridFlow 0.8.0;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 0;
+#X connect 5 0 6 1;
+#X connect 5 1 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
diff --git a/externals/gridflow/doc/tutorials/PD-GF-Lecture.pd b/externals/gridflow/doc/tutorials/PD-GF-Lecture.pd
new file mode 100755
index 00000000..1f7b6d52
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/PD-GF-Lecture.pd
@@ -0,0 +1,80 @@
+#N canvas 23 16 880 578 10;
+#X obj 5 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 5 550 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 666 549 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#X text 9 13 Welcome to Pure-Data...;
+#X obj 6 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 11 46 What is Pure-Data (aka PD)?;
+#X obj 4 233 cnv 15 430 145 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 25 271 pddp_open pure-data-1;
+#X obj 25 294 pddp_open pure-data-2;
+#X obj 25 317 pddp_open pure-data-3;
+#X obj 25 340 pddp_open pure-data-4;
+#X text 200 271 Pure-Data Introduction;
+#X text 200 294 GUI Objects for Interaction;
+#X text 200 317 Creating your first patch;
+#X text 200 340 Control: metro \, random & counter;
+#X obj 444 233 cnv 15 430 145 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X obj 5 391 cnv 15 430 145 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 25 416 pddp_open pure-data-5;
+#X obj 25 439 pddp_open pure-data-6;
+#X text 200 439 The powerful message object;
+#X obj 25 462 pddp_open pure-data-7;
+#X text 200 462 More about lists;
+#X text 200 485 Nesting collections of objects;
+#X text 200 416 Connectionless communications;
+#X obj 25 485 pddp_open pure-data-8;
+#X text 200 509 Using GUI's in abstractions;
+#X obj 25 509 pddp_open pure-data-9;
+#X obj 445 391 cnv 15 430 145 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X text 642 296 Introduction to Images;
+#X obj 468 271 pddp_open GridFlow-1;
+#X obj 468 294 pddp_open GridFlow-2;
+#X obj 468 317 pddp_open GridFlow-3;
+#X obj 468 340 pddp_open GridFlow-4;
+#X text 642 319 Introduction to video;
+#X text 642 342 Introduction to Live Feeds;
+#X obj 446 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 451 46 What is GridFLow?;
+#X text 642 457 Putting it all together;
+#X text 641 428 Interfacing with sensors;
+#X text 642 273 Introduction to Grids;
+#X obj 467 429 pddp_open GridFlow-6;
+#X obj 467 452 pddp_open GridFlow-7;
+#X text 451 236 2 Introduction to GridFlow;
+#X text 454 144 This section deals with the particular objects related
+to GridFlow. GridFlow uses the usual PD "control" objects \, as well
+as a set of GridFlow specific objects. Before we get into the tutorials
+we will explain the grid "#" \, the most important concept in GridFlow.
+;
+#X text 453 84 GridFlow is a plug-in for PureData that introduces the
+frid (#) data type into the PD environment. GridFlow allows you to
+work with live video \, still images and video files in a real-time
+environment.;
+#X text 14 85 Pure-Data is an open-source patching environment for
+multi-media (audio+image). Pure-Data is a programming language where
+you create relationships by connecting visual boxes (rather than typing
+complex commands). This lecture is separated into three sections: An
+Introduction to Pure-Data \, An introduction to GridFlow and intermediate
+PD and GridFlow.;
+#X obj 448 236 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X text 451 236 2 Introduction to GridFlow;
+#X obj 8 395 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X obj 449 395 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X obj 7 236 cnv 15 15 15 empty empty empty 20 12 0 14 -262144 -66577
+0;
+#X text 452 395 4 Intermediate GridFlow;
+#X text 10 236 1 Introduction to Pure-Data;
+#X text 11 395 3 Intermediate Pure-Data;
diff --git a/externals/gridflow/doc/tutorials/PD-Lecture.pd b/externals/gridflow/doc/tutorials/PD-Lecture.pd
new file mode 100755
index 00000000..e2f269c5
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/PD-Lecture.pd
@@ -0,0 +1,64 @@
+#N canvas 116 102 890 501 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 457 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 459 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#X text 12 13 Welcome to Pure-Data...;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 46 What is Pure-Data (aka PD)?;
+#X text 28 74 Pure-Data is an open-source patching environment for
+multi-media (audio+image). Pure-Data is a programming language where
+you create relationships by connecting visual boxes (rather than typing
+complex commands). This lecture is separated into three sections: An
+Introduction to Pure-Data \, An introduction to Gem and intermediate
+PD and Gem.;
+#X obj 8 176 cnv 15 430 120 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 22 198 pddp_open pure-data-1;
+#X obj 22 221 pddp_open pure-data-2;
+#X obj 22 244 pddp_open pure-data-3;
+#X obj 22 267 pddp_open pure-data-4;
+#X text 197 198 Pure-Data Introduction;
+#X text 197 221 GUI Objects for Interaction;
+#X text 197 244 Creating your first patch;
+#X text 197 267 Control: metro \, random & counter;
+#X obj 8 306 cnv 15 430 145 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 176 Introduction to Pure-Data;
+#X text 13 306 Introduction to Gem (Graphics Environment for Multimedia)
+;
+#X obj 22 328 pddp_open gem-1;
+#X obj 22 351 pddp_open gem-2;
+#X obj 22 374 pddp_open gem-3;
+#X obj 22 397 pddp_open gem-4;
+#X obj 22 421 pddp_open gem-5;
+#X text 197 328 Gem Introduction;
+#X text 197 351 What are gemchains?;
+#X text 197 374 translate \, rotate and scale;
+#X text 197 397 Texturing using pix objects;
+#X text 197 421 Video & Free Exploration;
+#X obj 448 46 cnv 15 430 145 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 46 Intermediate Pure-Data;
+#X obj 462 68 pddp_open pure-data-5;
+#X obj 462 91 pddp_open pure-data-6;
+#X text 637 91 The powerful message object;
+#X obj 462 114 pddp_open pure-data-7;
+#X text 637 114 More about lists;
+#X text 637 137 Nesting collections of objects;
+#X text 637 68 Connectionless communications;
+#X obj 462 137 pddp_open pure-data-8;
+#X text 637 161 Using GUI's in abstractions;
+#X obj 462 161 pddp_open pure-data-9;
+#X obj 448 200 cnv 15 430 95 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 637 222 Grouping Gem entities;
+#X text 637 245 Gem render order;
+#X text 453 200 Intermediate Gem;
+#X obj 462 222 pddp_open gem-6;
+#X obj 462 245 pddp_open gem-7;
+#X obj 462 268 pddp_open gem-8;
+#X text 637 268 Video Tracking & Pixel Operations;
diff --git a/externals/gridflow/doc/tutorials/colors.pd b/externals/gridflow/doc/tutorials/colors.pd
new file mode 100755
index 00000000..39582d52
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/colors.pd
@@ -0,0 +1,12 @@
+#N canvas 50 148 450 206 10;
+#X obj -10 -171 #pack 3;
+#X obj 46 -203 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -241291
+-1 -1 0 1;
+#X obj 46 -223 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -241291
+-1 -1 0 1;
+#X obj 46 -243 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -241291
+-1 -1 0 1;
+#X obj -6 -132 #color;
+#X connect 1 0 0 2;
+#X connect 2 0 0 1;
+#X connect 3 0 0 0;
diff --git a/externals/gridflow/doc/tutorials/d_gf_2_0-Intro_to_images_open_image.pd b/externals/gridflow/doc/tutorials/d_gf_2_0-Intro_to_images_open_image.pd
new file mode 100644
index 00000000..a95ac185
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/d_gf_2_0-Intro_to_images_open_image.pd
@@ -0,0 +1,62 @@
+#N canvas 0 0 887 417 10;
+#X obj 4 278 cnv 15 868 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 12 285 GridFlow 0.8.0;
+#X obj 5 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 5 -106 cnv 15 868 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 5 -106 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -99 2 Introduction to Images;
+#X text 556 86 <--- click here;
+#N canvas 0 0 450 300 META 0;
+#X restore 126 285 pd META;
+#X obj 452 191 #out window;
+#X msg 452 84 open b001.jpg;
+#X obj 473 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 13 84 step 3: Add a [bang<.;
+#X text 13 105 step 4: Create a [#out window].;
+#X text 13 63 step 2: Create [#in] object.;
+#X text 14 27 step 1: create message box [open< with the file name
+and extension you want to open.;
+#X text 506 110 <--- then click here;
+#X obj 447 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 450 -67 1.2 How to create a grid.;
+#X obj 447 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 8 -68 2.1 Opening an image.;
+#X text 456 -66 2.1 Patch example.;
+#X obj 452 130 cnv 15 22 15 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 452 129 #in;
+#X text 12 150 Tip: In order for GridFlow to be able to find your images
+you have to specify the correct path.;
+#X obj 14 151 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 12 -33 One of the first things you need to know when working
+with GridFlow is how to open an image. GridFlow accepts several image
+formats (.jpg \, .png \, .tiff etc.).;
+#X text 12 150 Tip: In order for GridFlow to be able to find your images
+you have to specify the correct path. Gridflow has an "images" folder
+\, put them there to access them by filename only.;
+#X obj 451 38 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 450 38 Tip: Sometimes the display window opens behind the patch
+\, try moving the patch if the display seems to be missing.;
+#X text 447 -45 To view the image you must initialize the patch. This
+is done in "run mode" by clicking on the message box \, and then on
+the bang. The image will be displayed in a display window \, off to
+the side of the patch.;
+#X text 476 216 In order to close the parent window displaying your
+image \, the [#out window] object must be deleted.;
+#X obj 512 133 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 489 132 <--Tip: remember \, as with the rest of PD \, you can
+obtain information regarding specific objects by right-clicking on
+it. Try this for [#in].;
+#X connect 9 0 22 0;
+#X connect 10 0 22 0;
+#X connect 22 0 8 0;
diff --git a/externals/gridflow/doc/tutorials/d_gf_2_2_1-image-modification-1-numop-all-in-one2.pd b/externals/gridflow/doc/tutorials/d_gf_2_2_1-image-modification-1-numop-all-in-one2.pd
new file mode 100644
index 00000000..ddf83eb1
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/d_gf_2_2_1-image-modification-1-numop-all-in-one2.pd
@@ -0,0 +1,127 @@
+#N canvas 53 0 670 470 10;
+#X obj 20 -34 cnv 15 130 150 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 70 2 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 35 41 #in;
+#X msg 35 -28 open b001.jpg;
+#X obj 35 91 # +;
+#X obj 21 231 cnv 15 185 150 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 29 313 #in;
+#X msg 29 239 open b001.jpg;
+#X obj 96 323 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 4300 1;
+#X obj 29 349 # + \$1;
+#X obj 54 287 metro 33.3;
+#X obj 54 265 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 82 64 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 82 42 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 83 86 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X msg 82 64 67;
+#X msg 82 42 2;
+#X msg 83 86 199;
+#X floatatom 93 349 5 0 0 0 - - -;
+#X text 21 -501 Numeric Operators (numop): transform an image or video
+by applying a mathematical operation to each pixel value in the grid.
+;
+#X obj 21 -522 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 23 -678 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 18 606 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 27 614 GridFlow 0.8.0;
+#X obj 339 -267 cnv 15 130 150 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 404 -228 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 358 -199 #in;
+#X msg 358 -260 open b001.jpg;
+#X obj 378 -171 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 20 -352 cnv 15 50 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 23 -86 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 -87 Example #2 demonstrates how to send the numop an argument
+using a message box. This method allows you to send the numop several
+different arguments.;
+#X text 35 -671 2.4 Image manipulation;
+#X text 57 -523 2.4.1 Numop;
+#X text 25 -445 To transform a grid (in this case an image) using numop
+\, it must first be given an argument (a number value). That value
+will be applied by numop to every value in the grid. The following
+examples show you the three methods that can be used to give the numop
+an argument.;
+#X obj 35 121 s to_out_window;
+#X obj 358 -142 s to_out_window;
+#X obj 29 382 s to_out_window;
+#X obj 246 546 r to_out_window;
+#X msg 498 547 close;
+#X msg 393 544 open window;
+#X obj 30 -294 cnv 15 200 180 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 161 -215 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 199 -318 display;
+#X msg 79 -282 1 2 3 4 5 6 7 8 9;
+#X obj 79 -253 #import (3 3);
+#X obj 179 -479 display;
+#X obj 140 -215 # + 42;
+#X obj 358 -171 # + 42;
+#X text 337 -288 Here is an example with an image.;
+#X text 19 -352 Example 1: shows how values in a grid are altered when
+an argument is placed directly into the numeric operator object.;
+#X text 157 63 1 click on the argument;
+#X text 124 6 2 click on the bang to see the updated image;
+#X text 94 8 <--;
+#X text 116 42 <--;
+#X text 116 65 <--;
+#X text 116 87 <--;
+#X text 194 -221 <-- argument in this case is 42;
+#X obj 353 581 #out window;
+#X text 22 433 In all these examples the [# +] numop is used. All the
+numeric operators can be found in the numeric operator help patch (right
+click on the [# +] and select help to view them). If you want to see
+what effects other numops can do \, try replacing the [# +] numop with
+another one (either cut and paste a different numop from the help file
+or create the object in the current canvas.;
+#X obj 20 181 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 179 Example #3 using the slider and metro.;
+#X text 467 -617 split into 3 patches using ben's switch arrange canvases
+and colors;
+#X text 24 -635 GridFlow performs high level grid processing \; in
+other words its main function is the manipulation of images and video.
+The numeric operators is one of the most common ways to modify an image.
+;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 35 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 1;
+#X connect 8 0 18 0;
+#X connect 9 0 37 0;
+#X connect 10 0 6 0;
+#X connect 11 0 10 0;
+#X connect 15 0 4 1;
+#X connect 16 0 4 1;
+#X connect 17 0 4 1;
+#X connect 25 0 26 0;
+#X connect 26 0 48 0;
+#X connect 27 0 26 0;
+#X connect 38 0 58 0;
+#X connect 39 0 58 0;
+#X connect 40 0 58 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 45 0 47 0;
+#X connect 47 0 43 0;
+#X connect 48 0 36 0;
diff --git a/externals/gridflow/doc/tutorials/d_gf_2_2_2.pd b/externals/gridflow/doc/tutorials/d_gf_2_2_2.pd
new file mode 100644
index 00000000..a918d620
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/d_gf_2_2_2.pd
@@ -0,0 +1,68 @@
+#N canvas 38 0 687 415 10;
+#X obj 31 -223 cnv 15 243 358 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 39 -141 #in;
+#X msg 39 -215 open b001.jpg;
+#X obj 79 -132 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 39 -18 # + \$1;
+#X obj 62 -189 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 69 76 #clip;
+#X obj 28 -322 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 62 -167 metro 33.3;
+#X obj 94 -99 #color;
+#X obj 23 -678 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 36 168 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 44 175 GridFlow 0.8.0;
+#X obj 39 108 #out window;
+#X text 35 -671 2.2 Image manipulation \, colour wrapping;
+#X obj 12 -518 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 18 -519 Example #1 colour wrapping;
+#X msg 74 -491 240 0 0;
+#X obj 179 -368 display;
+#X obj 74 -457 # + 20;
+#X obj 178 -423 #cast uint8;
+#X obj 23 -368 display;
+#X text 274 -429 <-- This transforms the grid into 8 bit values \,
+that corresponds to the way that images are usually shown in images
+and video;
+#X text 42 -323 Example #2 clipping the values;
+#X text 10 -545 Tip: Refer to glossary for more information on colour.
+;
+#X text 215 -132 <-- add value to all channels at once;
+#X obj 39 37 shunt;
+#X obj 69 11 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X text 93 12 <-- switch to see clip's effect;
+#X text 96 38 <-- directs the flow of data;
+#X text 7 -643 When an image is represented as a grid every pixel value
+will vary between 0 and 255 Color wrapping occurs when the result of
+the operation on the pixel value would be higher than 255 Values above
+255 are counted from 0 For example: if a pixel has a red value of 240
+and 20 is added to it \, you get 5 instead of displaying 260 (240 +
+20 - 255 = 5);
+#X text 450 -583 aks matju to fix bug in [display]'s display;
+#X text 32 -301 The [#clip] object is used with numops in order to
+set an lower and upper range to pixel values in order to eliminate
+color wrapping (those nifty 60s effects).;
+#X text 288 -70 <-- drag to add value to specific channel;
+#X text 163 -206 remember to load the image and strat the metro;
+#X connect 1 0 4 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 1;
+#X connect 4 0 26 0;
+#X connect 5 0 8 0;
+#X connect 6 0 13 0;
+#X connect 8 0 1 0;
+#X connect 9 0 4 1;
+#X connect 17 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 18 0;
+#X connect 26 0 13 0;
+#X connect 26 1 6 0;
+#X connect 27 0 26 1;
diff --git a/externals/gridflow/doc/tutorials/gf_1_0-Introduction_to_grids.pd b/externals/gridflow/doc/tutorials/gf_1_0-Introduction_to_grids.pd
new file mode 100755
index 00000000..fb78a496
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_1_0-Introduction_to_grids.pd
@@ -0,0 +1,98 @@
+#N canvas 0 207 762 514 10;
+#X obj 470 287 display;
+#X obj 7 6 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 7 -29 cnv 15 970 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 7 -29 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 12 661 cnv 15 970 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 20 668 GridFlow 0.8.0;
+#X text 10 6 1.1 What is a grid?;
+#X text 12 -22 1 Introduction to Grids;
+#X text 10 333 GridFlow can create a grid from a list of numbers. The
+[#import] object permits you to set the desired amount of rows and
+columns. A message box permits you to tell the grid which numbers to
+display.;
+#X msg 473 429 3 3 # 6 1 3 6 3 324 6 3 4;
+#X msg 550 169 reset;
+#X msg 494 475 3 3 # 1 0 0 0;
+#X obj 474 572 display;
+#X obj 9 307 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 12 307 1.2 How to create a grid.;
+#X obj 9 307 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 13 307 1.2 How to create a grid using the [#import] object.
+;
+#X text 10 427 1 - Create a list of numbers using a message box. The
+numbers must be seperated by a space. The list can have as many numbers
+as you want but only the amount defined by [#import] will be displayed.
+As you click on the message box the numbers will appear in the grid.
+The numbers are positioned in the grid from left to right and from
+the top to the bottom.;
+#X text 12 605 3 - Connect the objects to a [display] object or a [print]
+object to see the resulting grid. You don't have to "see" the grid
+in order to manipulate it.;
+#X text 558 306 display object;
+#N canvas 0 0 450 300 META 0;
+#X restore 921 616 pd META;
+#X obj 457 6 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 460 6 1.2 How to create a grid.;
+#X obj 457 6 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 663 43 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X obj 469 238 cnv 15 92 15 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 469 237 #import (3 3);
+#X obj 473 520 cnv 15 37 15 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 473 519 # + 0;
+#X text 8 267 The following examples illustrate how grids are interpreted
+and represented in GridFlow.;
+#X text 3 402 Steps for creating a grid:;
+#X text 11 537 2 - Create the [#import] object and indicate the parameters
+you want as grid dimensions. By indicating 3 3 in brackets following
+[#import] \, you are creating a grid that has 3 rows and 3 columns.
+This 3 by 3 grid will display 9 numbers.;
+#X text 518 516 works like the [#import] object but allows you to put
+your grid parameters and values into one message box;
+#X text 10 29 A grid is composed of rows and columns that contain numeric
+data. For instance \, a checkerboard is a grid that consists in a series
+of rows and columns containing information: a dark square or a light
+square.;
+#X text 10 91 Computers interpret images as three-dimentional grids:
+the rows (height) and columns (width) contain pixel positions. There
+are usually three channels (depth) of rows and columns. Channels are
+the colours that make up an image. Each channel is a single colour
+\, usually red \, green and blue (RGB). Videos are also interpreted
+as grids since they are a series of still images.;
+#X text 9 194 Because GridFlow uses grids \, images and videos are
+represented as such. GridFlow objects that accept or produce grids
+are identified by the number sign "#" (think of that symbol as a mini
+grid). From now on we will refer to images and videos as grids.;
+#X msg 469 44 1 2 3 4 5 6 7 8 9;
+#X msg 537 107 1 2 3 4;
+#X text 466 6 1.2 Patch example.;
+#X text 471 405 Other objects can create grids...;
+#X text 601 42 <-- step 1: click here to view the numbers from the
+list in a grid.;
+#X text 601 104 <-- click here three times to see how import only outputs
+a grid once it recieves the number of values iassociated with its dimensions
+;
+#X text 602 169 <-- resets the grid to only display the numbers from
+the list;
+#X obj 634 236 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X text 572 236 <-- step 2: This object creates a grid that is 3 rows
+by 3 columns;
+#X connect 9 0 28 0;
+#X connect 10 0 26 0;
+#X connect 11 0 28 0;
+#X connect 26 0 0 0;
+#X connect 28 0 12 0;
+#X connect 36 0 26 0;
+#X connect 37 0 26 0;
diff --git a/externals/gridflow/doc/tutorials/gf_2-2-3-resize-image_dec_2005.pd b/externals/gridflow/doc/tutorials/gf_2-2-3-resize-image_dec_2005.pd
new file mode 100644
index 00000000..02cf9166
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_2-2-3-resize-image_dec_2005.pd
@@ -0,0 +1,60 @@
+#N canvas 127 0 672 603 10;
+#X obj 22 160 metro 10;
+#X obj 22 118 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X floatatom 80 298 5 1 4 0 - - -;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 26 478 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 34 485 GridFlow 0.8.0;
+#X obj 22 438 #out window;
+#X obj 59 248 #in;
+#X msg 59 225 load bluemarble.jpg;
+#X obj 80 387 #pack 2;
+#X floatatom 124 369 5 1 4 0 - - -;
+#X obj 22 272 #store;
+#X text 21 -67 2.4 Image manipulation;
+#X text 46 -37 2.4.1 Resizing an image;
+#X obj 22 272 #store;
+#X obj 59 202 loadbang;
+#N canvas 0 0 450 300 META 0;
+#X restore 154 484 pd META;
+#X obj 274 226 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X obj 23 414 cnv 15 63 15 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 113 118 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X text 49 117 <-- step #2 : start the metro;
+#X obj 22 413 #scale_by;
+#X obj 468 344 cnv 15 15 15 empty empty empty 20 12 0 14 -259603 -66577
+0;
+#X obj 165 379 cnv 15 152 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 167 365 changing this number permits you to change the image's
+horizontal parameters.;
+#X text 404 344 <-- step #3 : change the parameters;
+#X text 11 -10 [#scale_by] resizes grids by multiplying its parameters
+(width and height). To resize an image proportionatily a specific scaleing
+size must appylied \, ex: [#scale_by 4].;
+#X text 11 31 [# pack] lets you resize grids by altering the vertical
+and horizontal parameters.;
+#X text 88 157 the metro refreshes the display window so you don't
+have to reload the grid every time it's altered.;
+#X text 210 225 <-- step #1 : load the image;
+#X text 132 295 changing this number changes the grid's vertical parameters.
+(a slider can be connected to [#pack] instead of a number box.;
+#X connect 0 0 12 0;
+#X connect 0 0 15 0;
+#X connect 1 0 0 0;
+#X connect 2 0 10 0;
+#X connect 8 0 12 1;
+#X connect 8 0 15 1;
+#X connect 9 0 8 0;
+#X connect 10 0 22 1;
+#X connect 11 0 10 1;
+#X connect 15 0 22 0;
+#X connect 16 0 9 0;
diff --git a/externals/gridflow/doc/tutorials/gf_2-2-4-greyscale_dec_2005.pd b/externals/gridflow/doc/tutorials/gf_2-2-4-greyscale_dec_2005.pd
new file mode 100644
index 00000000..cbb11af1
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_2-2-4-greyscale_dec_2005.pd
@@ -0,0 +1,27 @@
+#N canvas 183 58 542 460 10;
+#X obj 21 207 #rgb_to_greyscale;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 320 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 327 GridFlow 0.8.0;
+#X obj 21 178 #in;
+#X text 21 -67 2.4 Image manipulation;
+#X text 48 -37 2.4.2 Greyscale;
+#N canvas 0 0 450 300 META 0;
+#X restore 147 327 pd META;
+#X text 149 242 This patch and other image modifications can be can
+be found in the gridflow help files.;
+#X text 159 102 insert your own images to convert it to greyscale.
+click on the message to load image.;
+#X text 19 4 To convert an image to greyscale use [#rgb_to_greyscale].
+It transforms colour information into a black to white gradient.;
+#X obj 33 157 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 21 135 open bluemarble.jpg;
+#X obj 21 282 #out window;
+#X connect 5 0 0 0;
+#X connect 12 0 5 0;
+#X connect 13 0 5 0;
diff --git a/externals/gridflow/doc/tutorials/gf_2_0-Intro_to_images_open_image.pd b/externals/gridflow/doc/tutorials/gf_2_0-Intro_to_images_open_image.pd
new file mode 100755
index 00000000..ea6aa98d
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_2_0-Intro_to_images_open_image.pd
@@ -0,0 +1,62 @@
+#N canvas 0 0 894 417 10;
+#X obj 4 278 cnv 15 868 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 12 285 GridFlow 0.8.0;
+#X obj 5 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 5 -106 cnv 15 868 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 5 -106 cnv 15 780 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -99 2 Introduction to Images;
+#X text 556 86 <--- click here;
+#N canvas 0 0 450 300 META 0;
+#X restore 126 285 pd META;
+#X obj 452 191 #out window;
+#X msg 452 84 open b001.jpg;
+#X obj 473 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X text 13 84 step 3: Add a [bang<.;
+#X text 13 105 step 4: Create a [#out window].;
+#X text 13 63 step 2: Create [#in] object.;
+#X text 14 27 step 1: create message box [open< with the file name
+and extension you want to open.;
+#X text 506 110 <--- then click here;
+#X obj 447 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 450 -67 1.2 How to create a grid.;
+#X obj 447 -67 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 8 -68 2.1 Opening an image.;
+#X text 456 -66 2.1 Patch example.;
+#X obj 452 130 cnv 15 22 15 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 452 129 #in;
+#X text 12 150 Tip: In order for GridFlow to be able to find your images
+you have to specify the correct path.;
+#X obj 14 151 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 12 -33 One of the first things you need to know when working
+with GridFlow is how to open an image. GridFlow accepts several image
+formats (.jpg \, .png \, .tiff etc.).;
+#X text 12 150 Tip: In order for GridFlow to be able to find your images
+you have to specify the correct path. Gridflow has an "images" folder
+\, put them there to access them by filename only.;
+#X obj 451 38 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 450 38 Tip: Sometimes the display window opens behind the patch
+\, try moving the patch if the display seems to be missing.;
+#X text 447 -45 To view the image you must initialize the patch. This
+is done in "run mode" by clicking on the message box \, and then on
+the bang. The image will be displayed in a display window \, off to
+the side of the patch.;
+#X text 476 216 In order to close the parent window displaying your
+image \, the [#out window] object must be deleted.;
+#X obj 512 133 cnv 15 25 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 489 132 <--Tip: remember \, as with the rest of PD \, you can
+obtain information regarding specific objects by right-clicking on
+it. Try this for [#in].;
+#X connect 9 0 22 0;
+#X connect 10 0 22 0;
+#X connect 22 0 8 0;
diff --git a/externals/gridflow/doc/tutorials/gf_2_2_1-image-modification-1-numop-all-in-one2.pd b/externals/gridflow/doc/tutorials/gf_2_2_1-image-modification-1-numop-all-in-one2.pd
new file mode 100755
index 00000000..cc1d1902
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_2_2_1-image-modification-1-numop-all-in-one2.pd
@@ -0,0 +1,127 @@
+#N canvas 53 0 670 470 10;
+#X obj 20 -34 cnv 15 130 150 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 70 2 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1 -1
+;
+#X obj 35 41 #in;
+#X msg 35 -28 open b001.jpg;
+#X obj 35 91 # +;
+#X obj 21 231 cnv 15 185 150 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 29 313 #in;
+#X msg 29 239 open b001.jpg;
+#X obj 96 323 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 4300 1;
+#X obj 29 349 # + \$1;
+#X obj 54 287 metro 33.3;
+#X obj 54 265 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 82 64 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 82 42 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 83 86 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X msg 82 64 67;
+#X msg 82 42 2;
+#X msg 83 86 199;
+#X floatatom 93 349 5 0 0 0 - - -;
+#X text 21 -501 Numeric Operators (numop): transform an image or video
+by applying a mathematical operation to each pixel value in the grid.
+;
+#X obj 21 -522 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 23 -678 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 18 606 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 27 614 GridFlow 0.8.0;
+#X obj 339 -267 cnv 15 130 150 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 404 -228 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 358 -199 #in;
+#X msg 358 -260 open b001.jpg;
+#X obj 378 -171 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 20 -352 cnv 15 50 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 23 -86 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 -87 Example #2 demonstrates how to send the numop an argument
+using a message box. This method allows you to send the numop several
+different arguments.;
+#X text 35 -671 2.4 Image manipulation;
+#X text 57 -523 2.4.1 Numop;
+#X text 25 -445 To transform a grid (in this case an image) using numop
+\, it must first be given an argument (a number value). That value
+will be applied by numop to every value in the grid. The following
+examples show you the three methods that can be used to give the numop
+an argument.;
+#X obj 35 121 s to_out_window;
+#X obj 358 -142 s to_out_window;
+#X obj 29 382 s to_out_window;
+#X obj 246 546 r to_out_window;
+#X msg 498 547 close;
+#X msg 393 544 open window;
+#X obj 30 -294 cnv 15 200 180 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 161 -215 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 199 -318 display;
+#X msg 79 -282 1 2 3 4 5 6 7 8 9;
+#X obj 79 -253 #import (3 3);
+#X obj 179 -479 display;
+#X obj 140 -215 # + 42;
+#X obj 358 -171 # + 42;
+#X text 337 -288 Here is an example with an image.;
+#X text 19 -352 Example 1: shows how values in a grid are altered when
+an argument is placed directly into the numeric operator object.;
+#X text 157 63 1 click on the argument;
+#X text 124 6 2 click on the bang to see the updated image;
+#X text 94 8 <--;
+#X text 116 42 <--;
+#X text 116 65 <--;
+#X text 116 87 <--;
+#X text 194 -221 <-- argument in this case is 42;
+#X obj 353 581 #out window;
+#X text 22 433 In all these examples the [# +] numop is used. All the
+numeric operators can be found in the numeric operator help patch (right
+click on the [# +] and select help to view them). If you want to see
+what effects other numops can do \, try replacing the [# +] numop with
+another one (either cut and paste a different numop from the help file
+or create the object in the current canvas.;
+#X obj 20 181 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 26 179 Example #3 using the slider and metro.;
+#X text 467 -617 split into 3 patches using ben's switch arrange canvases
+and colors;
+#X text 24 -635 GridFlow performs high level grid processing \; in
+other words its main function is the manipulation of images and video.
+There are several ways to modify images \, one of the most common is
+the numeric operators.;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 35 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 1;
+#X connect 8 0 18 0;
+#X connect 9 0 37 0;
+#X connect 10 0 6 0;
+#X connect 11 0 10 0;
+#X connect 15 0 4 1;
+#X connect 16 0 4 1;
+#X connect 17 0 4 1;
+#X connect 25 0 26 0;
+#X connect 26 0 48 0;
+#X connect 27 0 26 0;
+#X connect 38 0 58 0;
+#X connect 39 0 58 0;
+#X connect 40 0 58 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 45 0 47 0;
+#X connect 47 0 43 0;
+#X connect 48 0 36 0;
diff --git a/externals/gridflow/doc/tutorials/gf_2_2_2.pd b/externals/gridflow/doc/tutorials/gf_2_2_2.pd
new file mode 100644
index 00000000..2728c61c
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/gf_2_2_2.pd
@@ -0,0 +1,68 @@
+#N canvas 38 0 687 415 10;
+#X obj 31 -223 cnv 15 243 358 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 39 -141 #in;
+#X msg 39 -215 open b001.jpg;
+#X obj 79 -132 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 39 -18 # + \$1;
+#X obj 62 -189 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+;
+#X obj 69 76 #clip;
+#X obj 28 -322 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 62 -167 metro 33.3;
+#X obj 94 -99 #color;
+#X obj 23 -678 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 36 168 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 44 175 GridFlow 0.8.0;
+#X obj 39 108 #out window;
+#X text 35 -671 2.2 Image manipulation \, colour wrapping;
+#X obj 12 -518 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 18 -519 Example #1 colour wrapping;
+#X msg 74 -491 240 0 0;
+#X obj 179 -368 display;
+#X obj 74 -457 # + 20;
+#X obj 178 -423 #cast uint8;
+#X obj 23 -368 display;
+#X text 274 -429 <-- This transforms the grid into 8 bit values \,
+that corresponds to the way that images are usually shown in images
+and video;
+#X text 42 -323 Example #2 clipping the values;
+#X text 10 -545 Tip: Refer to glossary for more information on colour.
+;
+#X text 215 -132 <-- add value to all channels at once;
+#X obj 39 37 shunt;
+#X obj 69 11 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1;
+#X text 93 12 <-- switch to see clip's effect;
+#X text 96 38 <-- directs the flow of data;
+#X text 7 -643 When an image is represented as a grid every pixel value
+will vary between 0 and 255 Color wrapping occurs when the result of
+the operation on the pixel value would be higher than 255 Values above
+255 are counted from 0 For example: if a pixel has a red value of 240
+and 20 is added to it \, you get 5 instead of displaying 260 (240 +
+20 - 255 = 5);
+#X text 451 -583 aks matju to fix bug in [display]'s display;
+#X text 32 -301 The [#clip] object is used with numops in order to
+set an lower and upper range to pixel values in order to eliminate
+color wrapping (those nifty 60s effects).;
+#X text 288 -70 <-- drag to add value to specific channel;
+#X text 163 -206 remember to load the image and strat the metro;
+#X connect 1 0 4 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 1;
+#X connect 4 0 26 0;
+#X connect 5 0 8 0;
+#X connect 6 0 13 0;
+#X connect 8 0 1 0;
+#X connect 9 0 4 1;
+#X connect 17 0 19 0;
+#X connect 19 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 18 0;
+#X connect 26 0 13 0;
+#X connect 26 1 6 0;
+#X connect 27 0 26 1;
diff --git a/externals/gridflow/doc/tutorials/grid-intro.pd b/externals/gridflow/doc/tutorials/grid-intro.pd
new file mode 100755
index 00000000..e3aa53b8
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/grid-intro.pd
@@ -0,0 +1,10 @@
+#N canvas 0 0 476 213 10;
+#X text 29 30 GridFlow is a plug-in for PureData that introduces the
+frid (#) data type into the PD environment. GridFlow allows you to
+work with live video \, still images and video files in a rel-time
+environment.;
+#X text 32 97 This section deals with the particular objects related
+to GridFlow. GridFlow uses the usual PD "control" objects \, as well
+as a set of GridFlow specific objects. Before we get into the tutorials
+we will explain the grid "#" \, the most important concept in GridFlow.
+;
diff --git a/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-1-image-modification-1-numop-all-in-one.pd b/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-1-image-modification-1-numop-all-in-one.pd
new file mode 100755
index 00000000..a743e82d
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-1-image-modification-1-numop-all-in-one.pd
@@ -0,0 +1,123 @@
+#N canvas 0 0 977 630 10;
+#X obj 17 -114 #out window;
+#X obj 43 -174 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 17 -143 #in;
+#X msg 17 -205 open b001.jpg;
+#X obj 507 -245 cnv 15 185 150 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 529 -205 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 515 -166 #in;
+#X msg 515 -238 open b001.jpg;
+#X obj 555 -167 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 515 -110 s slider;
+#X obj 515 -138 # + 1;
+#X text 11 -499 Numeric Operators (numop): transform an image or video
+by applying a mathematical operation to each pixel value in the grid.
+;
+#X text 12 -445 To transform a grid (in this case an image) using numop
+\, it must first be given an argument (a number value) in order to
+affect a pixel value. The examples here show you the three methods
+that can be used to give the numop an argument.;
+#X obj 3 -643 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 3 -678 cnv 15 970 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 10 -618 GridFlow performs high level grid processing \; in
+other words its main function is the manipulation of images and video.
+There are several ways to madify images in GridFlow \, some are very
+basic while others are more advanced (and are saved for the intermediate
+tutorials.) In this section we will introduce some very basic functions
+of the numeric operator \, one of the most common methods used for
+image transformation.;
+#X obj 155 -220 cnv 15 130 150 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 220 -181 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 174 -152 #in;
+#X msg 174 -213 open b001.jpg;
+#X obj 199 -124 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 174 -124 # + 109;
+#X obj 174 -95 s argument;
+#X text 235 -125 <--- argument in this case is 109;
+#X obj 13 -273 + 1;
+#X floatatom 13 -297 5 0 0 0 - - -;
+#X floatatom 13 -249 5 0 0 0 - - -;
+#X text 54 -282 this is a basic numop. GridFlow has its own set of
+numops that are applied to grids \, 3 dimensions \, on each channel.
+;
+#X obj 14 -357 cnv 15 70 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 11 -672 2.4 Image manipulation;
+#X text 11 -644 2.4.3 Numop;
+#X obj 500 -559 cnv 15 130 150 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 550 -523 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 515 -484 #in;
+#X msg 515 -553 open b001.jpg;
+#X obj 515 -434 # +;
+#X obj 515 -404 s message;
+#X obj 562 -461 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 562 -483 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X obj 563 -439 cnv 15 25 17 empty empty empty 20 12 0 14 -241291 -66577
+0;
+#X msg 562 -461 67;
+#X msg 562 -483 2;
+#X msg 563 -439 199;
+#X text 596 -461 <--- messages used as arguments;
+#X text 596 -486 <---;
+#X text 596 -438 <---;
+#X obj 764 -116 r argument;
+#X obj 891 -91 #out window;
+#X obj 842 -115 r message;
+#X obj 911 -115 r slider;
+#X obj 3 -67 cnv 15 970 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 14 -57 GridFlow 0.8.0;
+#N canvas 0 0 450 300 META 0;
+#X restore 919 -60 pd META;
+#X text 13 -357 Example #1;
+#X text 12 -338 Shows you how to put an argument directly into the
+numeric operator object.;
+#X obj 507 -320 cnv 15 70 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X obj 497 -629 cnv 15 70 15 empty empty empty 20 12 0 14 -260818 -66577
+0;
+#X text 496 -628 Example #2;
+#X text 506 -320 Example #3;
+#X text 497 -608 Demonstrates how to send the numop an argument using
+a message box. This method allows you to send the numop several different
+arguments.;
+#X text 507 -299 Introduces the use of the slider as a method to give
+the numop an argument. The slider allows you to easily scroll through
+a series of values.;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 10 1;
+#X connect 10 0 9 0;
+#X connect 17 0 18 0;
+#X connect 18 0 21 0;
+#X connect 19 0 18 0;
+#X connect 21 0 22 0;
+#X connect 24 0 26 0;
+#X connect 25 0 24 0;
+#X connect 32 0 33 0;
+#X connect 33 0 35 0;
+#X connect 34 0 33 0;
+#X connect 35 0 36 0;
+#X connect 40 0 35 1;
+#X connect 41 0 35 1;
+#X connect 42 0 35 1;
+#X connect 46 0 47 0;
+#X connect 48 0 47 0;
+#X connect 49 0 47 0;
diff --git a/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-2.pd b/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-2.pd
new file mode 100644
index 00000000..18625731
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/probably_not_good_2-3-0-2.pd
@@ -0,0 +1,61 @@
+#N canvas 58 0 665 421 10;
+#X obj 29 -473 cnv 15 185 190 empty empty empty 20 12 0 14 -228992
+-66577 0;
+#X obj 37 -391 #in;
+#X msg 37 -465 open b001.jpg;
+#X obj 77 -382 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 37 -359 # + \$1;
+#X obj 60 -439 tgl 15 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 37 -315 #clip;
+#X obj 27 -634 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 60 -417 metro 33.3;
+#X obj 278 -430 #pack 3;
+#X obj 326 -455 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 326 -475 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 326 -495 hsl 128 15 0 255 0 0 empty empty empty -2 -6 0 8 -260818
+-1 -1 0 1;
+#X obj 286 -391 #color;
+#X msg 269 -301 255 0 0;
+#X text 336 -304 donner une liste changer couleurs;
+#X obj 234 -245 #scale_by (8 8);
+#X msg 235 -265 2 2 3 # 255 0 0 0 255 0 0 0 255 191 191 191;
+#X obj 37 -273 s to_out_window;
+#X text 29 -633 Example #4 the [#clip] object is used with numops in
+order to set constraints on pixels to eliminate color wrapping. Colour
+wrapping occurs when the individual pixel values in a grid exceed 255
+which results in of colour. GridFlow reads colours as values from 0
+(black) to 255 (white). Refer to glossary for more information on colour.
+;
+#X obj 23 -678 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 35 -671 2.4 Image manipulation;
+#X obj 25 -102 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 34 -94 GridFlow 0.8.0;
+#X obj 253 -162 r to_out_window;
+#X msg 505 -161 close;
+#X msg 400 -164 open window;
+#X obj 360 -127 #out window;
+#X connect 1 0 4 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 1;
+#X connect 4 0 6 0;
+#X connect 5 0 8 0;
+#X connect 6 0 18 0;
+#X connect 8 0 1 0;
+#X connect 9 0 4 1;
+#X connect 10 0 9 2;
+#X connect 11 0 9 1;
+#X connect 12 0 9 0;
+#X connect 13 0 4 1;
+#X connect 14 0 4 1;
+#X connect 16 0 4 1;
+#X connect 17 0 16 0;
+#X connect 24 0 27 0;
+#X connect 25 0 27 0;
+#X connect 26 0 27 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-1.pd b/externals/gridflow/doc/tutorials/pure-data-1.pd
new file mode 100755
index 00000000..7be2a91a
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-1.pd
@@ -0,0 +1,71 @@
+#N canvas 221 110 894 498 10;
+#N canvas 0 22 450 300 this 0;
+#X obj 192 128 inlet;
+#X obj 192 171 outlet;
+#X text 8 7 If you're looking at this you're just going to confuse
+yourself!;
+#X connect 0 0 1 0;
+#X restore 499 380 pd this is an object;
+#X text 509 358 <- This is a connection;
+#X msg 499 319 10;
+#X text 13 348 Objects are like filters \, they change the way messages
+flow through them.;
+#X text 13 153 You can think of a patch as plumbing. The way water
+flows through the plumbing of your house \, messages flow through the
+connections in your patch. Objects change the flow of the messages
+to allow different things to happen. Messages always go into objects
+at the top \, called the inlet \, and always come out at the bottom
+\, called the outlet. In PD messages flow from top to bottom.;
+#X text 458 236 This is a very simple example of a patch \, the message
+"10" can be sent through the "pd this is an object" and can be seen
+being passed out the outlet.;
+#X floatatom 499 416 5 0 0 0 - - -;
+#X text 539 415 <- This number box shows the float message;
+#X text 553 334 and watch the output!;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 252 You can work with PD in two ways \, the first is in
+"edit mode". Edit-mode is where you create your patch by adding objects
+and the connections between them. "Run mode" is when you're done with
+the construction of your patch \, and you wish to send messages through
+it. In run-mode your cursor is an arrow (as it is right now since we
+are in run-mode) \, in edit-mode your cursor is a pointing hand.;
+#X text 458 136 Messages are what allow objects to communicate with
+one and other. Messages can change the way an object acts \, and/or
+express the work the object is doing. Messages come in different types.
+They can contain words \, numbers and groups of these. The main types
+of messages we will be dealing with are floats (numbers). You can click
+on a message \, when in run-mode \, to send it through your patch.
+;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 448 290 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 447 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 449 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#X text 12 20 DESCRIPTION: What is a patch? An object? A message?;
+#N canvas 0 22 466 316 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: metaphor object message GUI introduction;
+#X restore 16 453 pd META;
+#X text 457 67 GUI objects allow you to interact with your PD patch
+as it is running. They allow you to change what your patch is doing
+without reconnecting the objects. The simplest GUI object is the "Message"
+that simply contains a message you want to send in your patch.;
+#X text 453 290 A patch that connects a GUI to an object to a second
+GUI.;
+#X text 531 320 <- This GUI sends a float message (click on it);
+#X text 13 66 When working with PD you are dealing primarily with objects
+\, GUI (Graphical User Interface) objects \, connections and messages.
+These are the building blocks of PD programming. When you connect objects
+\, GUI objects \, and messages you are creating a "patch". Patching
+is making something complex out of smaller building blocks.;
+#X text 13 46 The "patch" \, "objects" and "connections";
+#X text 453 46 "GUI objects" and "messages";
+#X text 12 8 1 Introduction to Pure-Data & its Metaphors;
+#X connect 0 0 6 0;
+#X connect 2 0 0 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-2.pd b/externals/gridflow/doc/tutorials/pure-data-2.pd
new file mode 100755
index 00000000..151af26f
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-2.pd
@@ -0,0 +1,73 @@
+#N canvas 197 100 899 548 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 497 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 499 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 470 320 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: GUI slider toggle number message introduction
+;
+#X restore 16 503 pd META;
+#X text 12 20 DESCRIPTION: Message \, slider \, toggle \, bang and
+number;
+#X msg 93 145 hello world;
+#X obj 93 168 print;
+#X text 181 146 <- Click on this message;
+#X text 18 74 Messages control the behavior of objects and it is the
+objects that change what a patch does. The first object we're going
+to learn is "print". All "print" does is print out the messages you
+send it to the terminal:;
+#X text 19 197 TIP: If you forget what an object does you can always
+double-click (on a mac) or right-click (on a PC) and then choose "help".
+;
+#X text 19 250 In this tutorial we will use two different types of
+objects: "objects" (of which "print" is an example) and GUI objects
+\, (of which "message" is an example). GUI objects allow you to interact
+with your patch \, control PD and change parameters of objects. We
+are going to learn four types of GUI objects (but there are many more):
+Slider \, Toggle \, Bang \, and Number.;
+#X obj 76 355 hsl 300 30 0 127 0 0 empty empty This_is_a_HSlider_(Horizontal)
+10 15 1 10 -262144 -1 -1 0 1;
+#X obj 73 393 print;
+#X text 21 421 This "hslider" is connected to the print object. This
+way we can see what messages the "hslider" sends. Try clicking and
+dragging in the Slider. You can change the scale (and other properties)
+of some GUI Objects by double-clicking (mac) or right-clicking (pc)
+and choosing "properties".;
+#X text 13 46 The "message" and "hslider" GUI Objects:;
+#X text 453 46 "toggle" \, "bang" \, "number";
+#X obj 519 176 tgl 30 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 629 176 bng 30 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 629 210 print Bang;
+#X obj 519 210 print Toggle;
+#X obj 739 210 print Number;
+#X floatatom 739 192 5 0 0 0 - - -;
+#X text 466 76 "slider" \, "toggle" and "number" all send messages
+made up of floats (numbers). "bang" is a special case and it only sends
+the message "bang". Below we're using an argument to the print object
+that tags each message sent to the terminal. This way when we have
+multiple "print" objects in one patch we can differenciate thier output.
+;
+#X text 465 268 "toggle" sends the message "1" or "0" \, "bang" always
+sends "bang" and if you click and drag on the "number" you can see
+it acts a lot like a Slider. With "number" you can also click once
+\, and then type a number to send.;
+#X text 467 335 TIP: You can send floating point numbers by holding
+down the SHIFT key as you click and drag on the "number".;
+#X text 467 375 There are other types of GUI objects not covered here.
+See the guis-about.pd PDDP patch:;
+#X text 12 8 2 PD Introduction - Some Useful GUI Objects in Pure-Data
+;
+#X connect 7 0 8 0;
+#X connect 13 0 14 0;
+#X connect 18 0 21 0;
+#X connect 19 0 20 0;
+#X connect 23 0 22 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-3.pd b/externals/gridflow/doc/tutorials/pure-data-3.pd
new file mode 100755
index 00000000..729b2dc7
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-3.pd
@@ -0,0 +1,70 @@
+#N canvas 261 121 900 544 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 448 366 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 497 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 499 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 474 324 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: patch first connecting placing place connect
+;
+#X restore 16 503 pd META;
+#X text 12 20 DESCRIPTION: Using PD to create your first patch;
+#X text 13 46 Adding Objects:;
+#X text 19 75 In order to create a patch you need to first place objects
+and GUI objects \, and second make connections between these objects.
+To place an object you need to be in "edit-mode". You should now be
+in run mode \, so please go to the "Edit" pull-down menu and choose
+"Edit mode" at the bottom. You should see your cursor change from an
+arrow to a pointing hand.;
+#X text 19 175 SHORTCUT: You can press "Control" and "e" simultaneously
+in order to toggle (switch) between edit and Run modes.;
+#X obj 448 386 cnv 15 430 100 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X floatatom 506 406 5 0 0 0 - - -;
+#X text 19 355 SHORTCUT: You can press "Control" and "3" simultaneously
+in order to place a number. All shortcuts are listed next to the items
+in the "Put" menu.;
+#X text 453 366 Patch work area:;
+#X text 19 215 Once you are in "edit-mode" you are now free to place
+objects. To place an object go to the "Put" pull-down menu and choose
+"Number". Once you have chosen this menu item you will see that a "number"
+gui is attached to your mouse pointer. In order to place the number
+into the patch move your pointer to the grey area to the right (in
+the "Patch work area" -> Click once to release it from your mouse.
+Note that the number is coloured blue. The blue colour shows that an
+item in your patch is selected. To unselect any item simply click once
+on the blank (white) space between items.;
+#X obj 520 440 print;
+#X obj 448 156 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 156 Connecting Objects:;
+#X text 19 411 Next we're going to place the familar "print" object
+beneath the "number" GUI. Press "Control" and "1" to place an object
+box. Again the object gets attached to your mouse and again click once
+to place it in the patch area somewhere under the "number".;
+#X text 459 41 While the number box is still selected (coloured blue)
+you can see a flashing cursor. Type the word "print" into the object
+box. The object will retain a dashed line while you type. In order
+to create the object you simply need to unselect \, by clicking somewhere
+outside the object. Note that once you have clicked to create the object
+the dashed line turns solid and an inlet (small rectangle) gets drawn
+around the word "print". The objects have now been created!;
+#X text 459 185 All connections between objects in PD are created from
+outlet to inlet (top to bottom). To start making a connection move
+your hand-pointer over the outlet of the "number" gui. When over the
+outlet your pointer will change to a circle. When you see the circle
+press and hold the mouse button. As you drag (holding the mouse button
+down) the pointer you see a line being drawn from the outlet to your
+pointer. To attach this connection to another object drag your mouse
+to an inlet of another object. The pointer will again change to a circle
+and at this point you can release the mouse button. Once released the
+objects are now connected! To play with your patch go back into run-mode
+and click and drag on the number-box while watching the terminal.;
+#X text 12 8 3 PD Introduction - Creating your first patch;
+#X connect 11 0 15 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-4.pd b/externals/gridflow/doc/tutorials/pure-data-4.pd
new file mode 100755
index 00000000..4d38f41d
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-4.pd
@@ -0,0 +1,87 @@
+#N canvas 183 61 890 531 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 96 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 487 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 489 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 478 328 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: metro counter random;
+#X restore 16 493 pd META;
+#X text 12 20 DESCRIPTION: Learning "metro" \, "counter" & "random"
+;
+#X text 13 96 Using the "metro" object:;
+#X text 21 47 In this section we will learn three new objects \, "metro"
+\, "counter" \, and "random". Metro sends a bang at regular intervals
+\, just like a metronome.;
+#X obj 164 142 metro 250;
+#X obj 164 123 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 164 163 bng 15 100 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 222 123 5 0 0 0 - - -;
+#X text 21 187 You can turn a Metro on and off by sending it a "1"
+or "0" message. Because a toggle sends 0/1 messages \, we can simply
+connect it directly. Metro also accepts an argument (words or numbers
+wirtten after the object name). This argument is how fast the metro
+should send out bangs (in milliseconds). You can always change the
+speed of the metro by sending it number messages through the rightmost
+inlet.;
+#X obj 8 306 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 306 Using the "random" object:;
+#X text 21 277 For more info see the metro-help.pd patch.;
+#X obj 168 385 bng 15 100 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 168 425 print;
+#X obj 168 404 random 100;
+#X floatatom 233 385 5 0 0 0 - - -;
+#X text 20 327 The Random object returns a number between 0 and the
+(number) argument when it receives a bang message in the leftmost inlet.
+You can also change the upper limit by sending a message to the rightmost
+inlet.;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 46 Using the "random" object:;
+#X obj 559 154 bng 15 100 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 590 154 3 1 3 0 - - -;
+#X floatatom 621 174 3 0 0 0 - - -;
+#X floatatom 652 194 3 0 0 0 - - -;
+#X obj 652 234 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 559 234 8 0 0 0 - - -;
+#X obj 559 213 counter 0 10 1;
+#X text 21 447 For more info see the random-help.pd patch.;
+#X text 461 77 "counter" is simply an object that counts. It can count
+up \, count down and count up and then down. Where it starts and where
+it stops are all definable. This is the counter that in included with
+Gem \, it is not compatible with other counter objects.;
+#X text 461 274 The first argument for counter is the lower limit (number
+to start counting at). The second is the upper limit to count to. The
+third argument is the direction in which to count. "1" means forward
+\, "2" means backward and "3" means forward and then backward. You
+can also use the three rightmost inlets to change the behaviour of
+counter. The rightmost inlet is the upper limit \, the second right-most
+the lower limit \, and the third right-most as the direction. The rightmost
+outlet sends out a bang message when the counter loops.;
+#X text 681 193 Rightmost inlet;
+#X text 651 173 Second Rightmost inlet;
+#X text 621 153 Third Rightmost inlet;
+#X text 461 407 For more info see the counter-help.pd patch.;
+#X text 12 8 4 Introduction to PD - More objects;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 11 0 8 1;
+#X connect 16 0 18 0;
+#X connect 18 0 17 0;
+#X connect 19 0 18 1;
+#X connect 23 0 29 0;
+#X connect 24 0 29 1;
+#X connect 25 0 29 2;
+#X connect 26 0 29 3;
+#X connect 29 0 28 0;
+#X connect 29 1 27 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-5.pd b/externals/gridflow/doc/tutorials/pure-data-5.pd
new file mode 100755
index 00000000..dc357bb1
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-5.pd
@@ -0,0 +1,108 @@
+#N canvas -235 0 891 673 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 627 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 629 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 482 332 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: send receive netsend netreceive cordless communication
+network TCP/IP UDP internet;
+#X restore 16 633 pd META;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 12 20 DESCRIPTION: Communicating between objects w/out connections
+;
+#X text 13 46 "send" & "receive";
+#X obj 86 223 send invisible-link;
+#X obj 86 248 receive invisible-link;
+#X floatatom 86 273 5 0 0 0 - - -;
+#X msg 86 198 10;
+#X floatatom 266 273 5 0 0 0 - - -;
+#X floatatom 266 203 5 0 0 0 - - -;
+#X obj 266 223 s invisible-link2;
+#X obj 266 248 r invisible-link2;
+#X obj 102 483 r send-from-number;
+#X floatatom 102 508 5 0 0 0 - - -;
+#X floatatom 102 462 5 0 0 0 - - send-from-number;
+#X floatatom 242 462 5 0 0 0 - - -;
+#X obj 242 483 s send-to-number2;
+#X floatatom 242 508 5 0 0 0 - send-to-number2 -;
+#X text 19 385 Note: Many GUI objects have built-in send and receive
+objects. The tag names are specified in the GUI properties. Remeber
+to get the GUI properties Right-Click or Control-Click on the GUI object
+and select "Properties".;
+#X text 453 46 "netsend" & "netreceive";
+#X text 19 575 For more info see: send-help.pd \, receive-help.pd \,
+netsend-help.pd and netreceive-help.pd;
+#X text 459 75 While "send" and "receive" allow you to send messages
+without connecting objects with patch-cords "netsend" and "netreceive"
+do the same but communicate between objects using TCP/IP the internet
+protocol. This means that you can send messages from a patch running
+on one machine to a second patch running on a second machine on the
+same network \, or even over the internet.;
+#X text 19 545 You can also send messages using UDP rather than TCP/IP.
+See "more info" below for details.;
+#X obj 589 292 netreceive 8001;
+#X text 459 185 The first argument of "netreceive" is the port the
+netrecive should listen on. "netsend" can connect to this port from
+other machines. "netreceive" has two outlets. The first outlet sends
+out the messages it receives over network \, and the second argument
+send a "1" when netsend is connected and "0" when netsend disconnects.
+;
+#X obj 589 318 print;
+#X obj 689 318 tgl 16 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 503 563 netsend;
+#X text 459 355 "netsend" is controlled using three messages: "connect"
+\, "disconnect" and "send". "connect" has two arguments \, the host
+or IP and the port number you wish to connect to. There needs to be
+a "netreceive" listening on the port you connect to. "disconnect" drops
+the current connection. "send" sends any arguments to the "netreceive"
+over the network. The single outlet of "netsend" prints "1" when a
+connection is made and "0" when the connection is lost.;
+#X obj 503 586 tgl 16 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X msg 503 486 connect localhost 8001;
+#X msg 516 511 disconnect;
+#X msg 525 537 send hello from the internet;
+#X text 602 510 Close connection;
+#X text 673 486 Connect to this machine;
+#X text 733 536 Send message;
+#X text 19 75 In some cases you will want to send messages without
+connecting objects. You may be sending one message to many different
+places that would make connections too laborious. "send" and "receive"
+both have a single argument. This argument is the tag name for the
+communication. "send" will always send any messages it gets in it inlet
+to any number of "receive" objects in a patch with the same tag name.
+"s" and "r" can be used in the place of "send" and "receive".;
+#X obj 86 336 s broadcast;
+#X floatatom 86 317 5 0 0 0 - - -;
+#X obj 176 316 r broadcast;
+#X floatatom 176 339 5 0 0 0 - - -;
+#X obj 266 316 r broadcast;
+#X floatatom 266 339 5 0 0 0 - - -;
+#X text 12 8 5 Intermediate Pure-Data - send and receive;
+#X msg 585 598 send \$1;
+#X floatatom 584 567 5 0 0 0 - - -;
+#X text 651 596 send variables to another computer;
+#X connect 9 0 10 0;
+#X connect 11 0 8 0;
+#X connect 13 0 14 0;
+#X connect 15 0 12 0;
+#X connect 16 0 17 0;
+#X connect 19 0 20 0;
+#X connect 27 0 29 0;
+#X connect 27 1 30 0;
+#X connect 31 0 33 0;
+#X connect 34 0 31 0;
+#X connect 35 0 31 0;
+#X connect 36 0 31 0;
+#X connect 42 0 41 0;
+#X connect 43 0 44 0;
+#X connect 45 0 46 0;
+#X connect 48 0 31 0;
+#X connect 49 0 48 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-6.pd b/externals/gridflow/doc/tutorials/pure-data-6.pd
new file mode 100755
index 00000000..01e6dcd7
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-6.pd
@@ -0,0 +1,92 @@
+#N canvas 304 98 891 675 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 627 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 629 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 486 336 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: message comma semicolon dollersign receive
+list;
+#X restore 16 633 pd META;
+#X text 12 20 DESCRIPTION: Advanced uses for the message object;
+#X text 19 45 In Pure-Data there are two distinct concepts with the
+name "message". Messages are the data that gets send in PD from object
+to object. There is also the Messsage object that contains a message
+you want to send. The message object is the first GUI object we covered
+in this tutorial. The message is not the only way to send messages
+in a patch \, since all GUI objects also send messages. So what makes
+the message object different? The message object can sent messages
+of any type \, where a number for example can only send float (number)
+messages. There are a number of powerful features in the message object.
+We are familar with the "usual" way of using the message object:;
+#X msg 163 208 hello;
+#X msg 212 208 bye;
+#X obj 196 238 print messages;
+#X text 459 556 Note: It is a very common mistake to confuse the message
+object with an object box. The object box is framed in a rectangle.
+The message object has a notch removed from the right edge.;
+#X obj 106 385 print messages;
+#X msg 106 358 hello \, bye;
+#X text 19 305 You can send multiple messages in succession from a
+single message box by using a comma " \, " between the messages. The
+messages get send from left to right.;
+#X obj 8 276 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X obj 8 416 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 416 Semicolon in message boxes;
+#X text 13 276 Comma in message boxes;
+#X text 19 445 Just like you can specify receive tags directly in GUI
+objects you can also use a message box to send a message directly to
+a particular "receive".;
+#X obj 34 536 r myreceive;
+#X floatatom 34 560 5 0 0 0 - - -;
+#X text 189 360 Click to send both messages;
+#X text 136 502 send "10" to receive tag "myreceive";
+#X text 19 585 For more info see: message-help.pd 04.messages.pd 10.more.messages.pd
+;
+#X msg 34 498 \; myreceive 10;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 46 Dollarsign in message boxes;
+#X msg 534 175 \$1 \$1 \$1;
+#X msg 534 154 10;
+#X text 459 75 In messages there are placeholders that start with "$".
+These placeholders are variables that get replaced with messages you
+send to the message box. In the example below we have a single message
+"10". Each "$1" in the message box gets replaced with the message "10".
+;
+#X text 601 175 \$1 placeholder gets replaced;
+#X text 570 154 message sent to message box;
+#X msg 534 304 list 1 2;
+#X text 600 304 a list with items "1" and "2";
+#X msg 534 325 \$2 \$1;
+#X text 584 325 \$1 becomes "1" and \$2 becomes "2";
+#X obj 534 347 print reverse-list;
+#X text 459 235 The "$1" placeholder refers to the first element of
+the list the message box gets from its inlet. We can use this to use
+a message box to reverse the order of elements (called atoms) in a
+list.;
+#X text 459 385 In this case the list "1 2" has two elements (called
+atoms) when this list gets sent to the inlet of a message box its atoms
+are available to the message box through the $ variables. \$1 gets
+replaced with the first element \, \$2 the second and so on.;
+#X obj 534 197 print repeated-message;
+#X obj 480 511 print complex-message;
+#X msg 480 468 list Fred Marcus;
+#X text 607 468 a list with two symbol atoms;
+#X msg 480 489 Hi \$1. \, Ya know \$2?;
+#X text 623 489 Becomes: "Hi Fred \, Ya know Marcus?";
+#X text 12 8 6 Intermediate Pure-Data - Using the message object;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 11 0 10 0;
+#X connect 18 0 19 0;
+#X connect 26 0 38 0;
+#X connect 27 0 26 0;
+#X connect 31 0 33 0;
+#X connect 33 0 35 0;
+#X connect 40 0 42 0;
+#X connect 42 0 39 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-7.pd b/externals/gridflow/doc/tutorials/pure-data-7.pd
new file mode 100755
index 00000000..0d8360ec
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-7.pd
@@ -0,0 +1,106 @@
+#N canvas 280 89 936 678 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 627 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 629 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 482 332 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: send receive netsend netreceive cordless communication
+network TCP/IP UDP internet;
+#X restore 16 633 pd META;
+#X obj 8 266 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 266 "pack" object;
+#X msg 96 543 2;
+#X msg 45 521 1;
+#X obj 45 588 print mylist;
+#X text 12 20 DESCRIPTION: Using pack \, unpack and route with lists
+;
+#X text 19 75 In the Pure-Data introduction we discussed the three
+different types of data in PD. These are floats (numbers) \, symbols
+(words) and lists (groups of floats and words). Floats and symbols
+are known as atoms. Atoms are single elements \, they do not contain
+spaces or other special characters. Atoms can be grouped into lists.
+;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 46 What is a list?;
+#X msg 145 216 list one two three;
+#X obj 145 239 print this is a list;
+#X text 19 155 Lists can be created in a number of ways \, but we are
+going to cover the two most common ways of creating lists. The most
+simple way to create a list is to type the list into a message box
+starting with the word (symbol) "list":;
+#X text 19 295 The "pack" object is the second most common way to create
+a list. "pack" allows you to take individual atoms and combine them
+into a single list. "pack" accepts a number of arguments. Each argument
+defines the type of atom in the resulting list. The "f" argument creates
+an inlet that accepts float atoms. The "s" argument creates an inlet
+accepts symbol atoms. The number of arguments is the same as the number
+of elements in the resultant list.;
+#X text 19 405 "pack" is the first object we are going to learn that
+has a "cold" inlet. Some control objects in PD have "hot" and "cold"
+inlets. When you send a message to a "cold" inlet the object does not
+generate any output (it does not send any messages). When "hot" inlets
+get messages then the object does generate output. The leftmost inlet
+is always the "hot" inlet and all other inlets are "cold" or in some
+cases all inlets are "hot";
+#X text 75 521 sets the first atom "1" and then sends the list;
+#X text 132 543 sets the second atom "2";
+#X obj 45 566 pack f f;
+#X text 459 45 Note that if you do not set the second and onwards atoms
+via thier "cold" inlets and you generate the list by setting the first
+atom via the "hot" inlet then all float atoms will be set to "0" and
+all symbol atoms will be set to "symbol" in the resultant list.;
+#X obj 448 126 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 126 "unpack" object;
+#X obj 596 241 unpack f f f;
+#X msg 596 219 list 1 2 3;
+#X floatatom 596 294 5 0 0 0 - - -;
+#X floatatom 635 277 5 0 0 0 - - -;
+#X floatatom 675 262 5 0 0 0 - - -;
+#X text 639 293 First Atom;
+#X text 678 277 Second Atom;
+#X text 718 261 Third Atom;
+#X text 459 156 The "unpack" object is very similar to the "pack" object
+except it works in reverse. "unpack" takes a list and splits it up
+into a number of atoms. It uses the same arguments as "pack" but generates
+outlets rather than inlets.;
+#X obj 448 319 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 319 "route" object;
+#X text 459 349 The "route" object sorts lists based on the first atom
+of the list. It as a number of float or symbol arguments. For each
+argument "route" creates one outlet. "route" also creates one additional
+rightmost outlet for rejections. For each list route gets it compares
+the first atom to all its arguments. If the first atom matches one
+of the arguments it the rest of the list \, without the first atom
+\, gets send through the outlet corresponding to that argument. If
+the first atom of the list does not match any arguments the entire
+list \, including the first atom \, gets sent out the rejection outlet.
+;
+#X msg 688 493 rejection 1;
+#X obj 685 553 print rejection;
+#X msg 538 493 o1 2;
+#X msg 613 493 o2 3;
+#X obj 613 531 route o1 o2;
+#X obj 613 593 print o1;
+#X obj 649 573 print o2;
+#X text 12 8 7 Intermediate Pure-Data - Working with lists;
+#X connect 6 0 20 1;
+#X connect 7 0 20 0;
+#X connect 13 0 14 0;
+#X connect 20 0 8 0;
+#X connect 24 0 26 0;
+#X connect 24 1 27 0;
+#X connect 24 2 28 0;
+#X connect 25 0 24 0;
+#X connect 36 0 40 0;
+#X connect 38 0 40 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 40 1 42 0;
+#X connect 40 2 37 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-8.pd b/externals/gridflow/doc/tutorials/pure-data-8.pd
new file mode 100755
index 00000000..aa95c087
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-8.pd
@@ -0,0 +1,89 @@
+#N canvas 238 94 891 621 10;
+#X obj 8 6 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 577 cnv 15 870 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 668 579 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 482 332 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: send receive netsend netreceive cordless communication
+network TCP/IP UDP internet;
+#X restore 16 583 pd META;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 12 20 DESCRIPTION: nested patches using abstractions & subpatches
+;
+#X text 13 46 What is an abstraction?;
+#X text 23 76 Since objects are very simple in Pure-Data doing complex
+tasks often leads to very complex patches. Often it is useful to use
+the same bit of patching you do for one project for another. Pure-Data
+has a facility to "nest" \, that is to take a number of objects in
+a collection and place them into a group that looks like a single object.
+This is also handy to make a complex patch look simple and clear by
+hiding the nitty-gritty details. There are two types of these collections
+\, the subpatch and the abstraction.;
+#X obj 8 216 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 13 216 The subpatch;
+#X text 23 246 Subpatches are collections of objects that get "hidden"
+inside a container that looks like a normal PD object. Subpatches are
+created by creating an object box \, and typing the word "pd" followed
+by whatever you want to describe the contents of the subpatch. Subpatches
+are saved at the same time as the "parent" patch. Here is a subpatch:
+;
+#N canvas 0 22 460 310 subpatch 0;
+#X obj 30 34 inlet;
+#X obj 30 77 outlet;
+#X text 99 35 This is inside the subpatch.;
+#X connect 0 0 1 0;
+#X restore 178 359 pd subpatch;
+#X floatatom 178 336 5 0 0 0 - - -;
+#X floatatom 178 387 5 0 0 0 - - -;
+#X text 23 416 To open a subpatch simply click once on the subpatch
+in run-mode or control-click (or right-click) and select open in edit-mode.
+Both subpatches and abstractions communicate with the parent patch
+through special objects called "inlet" and "outlet" for each "inlet"
+in a subpatch or abstraction an inlet is created on the subpatch. This
+example has one inlet and one outlet.;
+#X obj 448 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 46 The abstraction;
+#X text 463 76 Abstractions are very similar to subpatches. They are
+collections of objects that are "hidden" inside PD objects \, and they
+both use "inlet" and "outlet" objects to communicate with the parent
+patch. The difference between subpatches and abstractions is that abstractions
+are saved in a separate file from the parent. This means when you save
+the parent patch containing abstractions the abstractions are not saved.
+The abstractions are saved as separate files so that they can be used
+in multiple patches. A second feature that exists in abstractions and
+not in subpatches is the ability to use arguments. "send" and "receive"
+can be used inside abstractions to send data without connections (patch-cords).
+;
+#X obj 682 253 r output;
+#X obj 682 277 print;
+#X obj 564 253 abstraction 1 2;
+#X text 463 316 To create an abstraction all you need to do is create
+a new PD patch ("File" -> "New"). Create the contents of the abstraction
+and then save it in the same directory as the patch you want to use
+it in. In this case the abstraction is saved as "abstraction.pd". Once
+saved you can easily embed the abstraction simply by typing its name
+\, without the .pd extension \, into an object box.;
+#X obj 448 416 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 453 416 Dollarsign in object boxes;
+#X text 463 446 If you open the above example you will see that the
+familiar "pack" object has a number of "$" arguments. The "$" arguments
+in a object box differ entirely from the "$" used in message objects.
+When you use a "$" in an object box inside an abstraction the values
+get replaced with the arguments to that abstraction. In the case above
+the "pack" object's first argument "$1" gets replaced with the first
+argument of the abstraction "1" "$2" gets replaced with the second
+argument "2".;
+#X text 23 536 For more info see: 12.PART2.subpatch.pd 14.dollersign.pd
+;
+#X text 12 8 8 Intermediate Pure-Data - Using abstractions and subpacthes
+;
+#X connect 11 0 13 0;
+#X connect 12 0 11 0;
+#X connect 18 0 19 0;
diff --git a/externals/gridflow/doc/tutorials/pure-data-9.pd b/externals/gridflow/doc/tutorials/pure-data-9.pd
new file mode 100755
index 00000000..e5188ee0
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/pure-data-9.pd
@@ -0,0 +1,43 @@
+#N canvas 291 108 450 562 10;
+#X obj 8 6 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 517 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 228 519 Copyright Ben Bogart 2005 \; (See COPYING.TXT for details)
+;
+#N canvas 0 22 486 336 META 0;
+#X text 12 5 CATEGORY: tutorial;
+#X text 12 15 KEYWORDS: GOP graph parent abstraction nesting ui interface
+;
+#X restore 16 523 pd META;
+#X obj 8 46 cnv 15 430 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text 12 20 DESCRIPTION: Using Graph on Parent abstractions;
+#X text 13 46 What is Graph on Parent?;
+#X text 13 76 Graph on Parent is a feature of PD that allows you to
+show the GUI objects contained in an abstraction on the parent patch.
+This means that you can create abstractions that not only include a
+collection of objects but can also include a user interface. To use
+graph on parent you simply need to create an abstraction the usual
+way but before saving it you need should Control-Click (Right-Click)
+on the background (white area) in the abstraction and choose "properties".
+From the properties menu check the "graph on parent" option. Now when
+you save the patch and embed it in a second patch all GUI objects will
+be visible.;
+#X obj 154 250 gop_abstraction;
+#X text 13 331 In this simple example there is only one GUI object
+\, a slider. Inside the abstraction the slider is connected to an inlet
+and an outlet. If you move the slider you can see the result in the
+outlet. If you set a value in the inlet with the number GUI you can
+see the position of the slider change.;
+#X floatatom 154 231 5 0 0 0 - - -;
+#X floatatom 154 297 5 0 0 0 - - -;
+#X text 13 421 Note you can change the size of the abstractions bounding
+box by Control-Click (Right-Click) on the abstraction and choose "properties".
+The size of the bounding-box is specified by the "screen width" and
+"screen height".;
+#X text 13 487 For more info see:;
+#X text 12 8 9 Intermediate Pure-Data - Using GUI's in abstractions
+;
+#X connect 8 0 11 0;
+#X connect 10 0 8 0;
diff --git a/externals/gridflow/doc/tutorials/randomly-select-an-image.pd b/externals/gridflow/doc/tutorials/randomly-select-an-image.pd
new file mode 100755
index 00000000..5817aa32
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/randomly-select-an-image.pd
@@ -0,0 +1,53 @@
+#N canvas 417 0 446 428 10;
+#X text 6 15 You can open multiple images in the same window. To do
+so you connect the outputs from the images to the inlet of the out
+window.;
+#X obj 136 295 #out window;
+#X obj 65 198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 28 232 #in;
+#X msg 28 160 open b001.jpg;
+#X obj 188 197 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 151 231 #in;
+#X msg 151 159 open r001.jpg;
+#X obj 301 196 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 264 230 #in;
+#X msg 264 158 open g001.jpg;
+#X obj 7 -37 cnv 15 430 15 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 10 -37 What is a grid?;
+#X obj 8 320 cnv 15 430 30 empty empty empty 20 12 0 14 -200249 -66577
+0;
+#X text 16 327 GridFlow 0.8.0;
+#X obj 7 -72 cnv 15 430 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 -73 2 Images;
+#X text 14 -59 Description: opening multiple images from one window.
+;
+#X obj 56 115 random 3;
+#X floatatom 195 81 5 0 0 0 - - -;
+#X obj 3 55 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1;
+#X obj 163 112 sel 0;
+#X obj 226 127 sel 1;
+#X obj 304 115 sel 2;
+#X obj 55 92 metro 1000;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 6 0 1 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 1 0;
+#X connect 10 0 9 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 0;
+#X connect 19 0 22 0;
+#X connect 19 0 23 0;
+#X connect 20 0 24 0;
+#X connect 21 0 2 0;
+#X connect 22 0 5 0;
+#X connect 23 0 8 0;
+#X connect 24 0 18 0;
diff --git a/externals/gridflow/doc/tutorials/title-page-pd-gf-in-one.pd b/externals/gridflow/doc/tutorials/title-page-pd-gf-in-one.pd
new file mode 100755
index 00000000..18798314
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/title-page-pd-gf-in-one.pd
@@ -0,0 +1,129 @@
+#N canvas 18 0 762 514 10;
+#X obj 102 -15 cnv 15 430 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 102 66 cnv 1 430 430 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 102 98 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 102 73 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 108 66 cnv 1 2 430 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 516 67 cnv 1 2 430 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 102 158 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 102 182 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 152 114 1.1 What is a grid?;
+#X obj 142 456 cnv 15 300 30 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 154 461 Stephanie Brodeur & Darsha Hewitt 2005;
+#X obj 102 36 cnv 15 430 30 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 214 -6 cnv 15 100 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 214 -6 GridFlow 0.8.0;
+#X obj 102 -15 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj 102 34 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj 315 8 cnv 15 63 17 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 314 8 Tutorials;
+#X obj 102 65 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X obj 102 495 cnv 1 430 1 empty empty empty 20 12 0 14 -66577 -66577
+0;
+#X text 140 79 1;
+#X obj 158 78 Introduction to Grids;
+#X text 152 130 1.2 How to create grid.;
+#X text 152 192 2.1 How does GridFlow understand images?;
+#X text 141 164 2;
+#X obj 162 161 Introduction to Images;
+#X text 152 211 2.2 Opening an image.;
+#X text 152 230 2.3 Different options on how to open an image.;
+#X text 178 247 2.3.1 Opening different images in one window.;
+#X text 178 264 2.3.2 Opening images using send and receive.;
+#X obj 102 356 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X obj 102 380 cnv 1 430 2 empty empty empty 20 12 0 14 -228992 -66577
+0;
+#X text 141 362 3;
+#X obj 162 359 Introduction to Video;
+#X text 178 300 2.4.1 Resizing an image.;
+#X text 151 284 2.4 Image manipulation.;
+#X text 178 315 2.4.2 Greyscale.;
+#X text 178 330 2.4.3 numop.;
+#X text 149 394 4 Introduction to live feed;
+#X text 150 422 5 Putting it all together;
+#X obj -401 -18 cnv 15 455 30 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj -398 898 cnv 15 870 30 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X text -393 898 Copyright Ben Bogart 2005 \; (See COPYING.TXT for
+details);
+#X text -397 -11 Welcome to Pure-Data...;
+#X obj -401 22 cnv 15 455 15 empty empty empty 20 12 0 14 -179884 -66577
+0;
+#X text -396 22 What is Pure-Data (aka PD)?;
+#X text -381 50 Pure-Data is an open-source patching environment for
+multi-media (audio+image). Pure-Data is a programming language where
+you create relationships by connecting visual boxes (rather than typing
+complex commands). This lecture is separated into three sections: An
+Introduction to Pure-Data \, An introduction to Gem and intermediate
+PD and Gem.;
+#X obj -381 152 cnv 15 430 120 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X obj -367 174 pddp_open pure-data-1;
+#X obj -367 197 pddp_open pure-data-2;
+#X obj -367 220 pddp_open pure-data-3;
+#X obj -367 243 pddp_open pure-data-4;
+#X text -192 174 Pure-Data Introduction;
+#X text -192 197 GUI Objects for Interaction;
+#X text -192 220 Creating your first patch;
+#X text -192 243 Control: metro \, random & counter;
+#X obj -382 376 cnv 15 430 145 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X obj -378 580 cnv 15 430 145 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X obj -364 602 pddp_open pure-data-5;
+#X obj -364 625 pddp_open pure-data-6;
+#X text -189 625 The powerful message object;
+#X obj -364 648 pddp_open pure-data-7;
+#X text -189 648 More about lists;
+#X text -189 671 Nesting collections of objects;
+#X text -189 602 Connectionless communications;
+#X obj -364 671 pddp_open pure-data-8;
+#X text -189 695 Using GUI's in abstractions;
+#X obj -364 695 pddp_open pure-data-9;
+#X obj -378 787 cnv 15 430 95 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X text -194 422 Introduction to Images;
+#X text -194 468 Introduction to Live Feeds;
+#X obj -401 308 cnv 15 455 15 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X text -189 837 Putting it all together;
+#X text -190 808 Interfacing with sensors;
+#X text -194 399 Introduction to Grids;
+#X text -384 331 GridFlow is a multidimentional dataflow processing
+library for PureData and Ruby \, designed for interactive multimedia.
+;
+#X text -377 376 2 Introduction to GridFlow;
+#X text -376 152 1 Introduction to Pure-Data;
+#X text -373 580 3 Intermediate Pure-Data;
+#X text -373 787 4 Intermediate GridFlow;
+#X obj -401 542 cnv 15 455 15 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X text -396 542 What is GridFLow?;
+#X obj -400 751 cnv 15 455 15 empty empty empty 20 12 0 14 -179884
+-66577 0;
+#X text -395 751 What is GridFLow?;
+#X obj -283 400 GridFlow-1;
+#X obj -283 423 GridFlow-2;
+#X obj -283 446 GridFlow-3;
+#X obj -283 469 GridFlow-4;
+#X obj -281 809 GridFlow-6;
+#X obj -281 832 GridFlow-7;
+#X text -395 308 What is GridFlow?;
+#X text -194 445 Introduction to Video;
diff --git a/externals/gridflow/doc/tutorials/txt-for-resize-image.pd b/externals/gridflow/doc/tutorials/txt-for-resize-image.pd
new file mode 100755
index 00000000..f991ba07
--- /dev/null
+++ b/externals/gridflow/doc/tutorials/txt-for-resize-image.pd
@@ -0,0 +1,3 @@
+#N canvas 0 0 450 300 10;
+#X text 48 29 How to resize an image:;
+#X text 39 70 # scale 640 480 pour les images;