aboutsummaryrefslogtreecommitdiff
path: root/abstractions
diff options
context:
space:
mode:
Diffstat (limited to 'abstractions')
-rw-r--r--abstractions/arrayRouterIn.pd21
-rw-r--r--abstractions/arrayRouterOut.pd19
-rw-r--r--abstractions/cclearn.pd80
-rw-r--r--abstractions/createOscName.pd33
-rw-r--r--abstractions/dir2abstractionArray.pd115
-rw-r--r--abstractions/dirlist.pd36
-rw-r--r--abstractions/dirpanel.pd13
-rw-r--r--abstractions/fx/edge.pd31
-rw-r--r--abstractions/fx/emboss.pd11
-rw-r--r--abstractions/fx/gain.pd20
-rw-r--r--abstractions/fx/motionblur.pd18
-rw-r--r--abstractions/fx/negative.pd10
-rw-r--r--abstractions/fx/normalize.pd12
-rw-r--r--abstractions/fx/posterize.pd22
-rw-r--r--abstractions/fx/randomdot.pd12
-rw-r--r--abstractions/fx/roll.pd20
-rw-r--r--abstractions/fx/rtx-DANGER_USE_AT_YOUR_OWN_RISK.pd12
-rw-r--r--abstractions/fx/scanline.pd19
-rw-r--r--abstractions/interp1.pd85
-rw-r--r--abstractions/interp3.pd189
-rw-r--r--abstractions/interp4.pd246
-rw-r--r--abstractions/invert_scale.pd15
-rw-r--r--abstractions/list2osc.pd13
-rw-r--r--abstractions/mementoSetup.pd69
-rw-r--r--abstractions/pix_dvts.pd4
-rw-r--r--abstractions/popup_lister.pd19
-rw-r--r--abstractions/pt.animate.pd150
-rw-r--r--abstractions/pt.dualfx.pd141
-rw-r--r--abstractions/pt.entry.pd105
-rw-r--r--abstractions/pt.fader.pd119
-rw-r--r--abstractions/pt.feedback.pd204
-rw-r--r--abstractions/pt.file.pd36
-rw-r--r--abstractions/pt.filelist.pd97
-rw-r--r--abstractions/pt.interp.pd60
-rw-r--r--abstractions/pt.layer.pd74
-rw-r--r--abstractions/pt.layerfx.pd100
-rw-r--r--abstractions/pt.light.pd125
-rw-r--r--abstractions/pt.live.pd58
-rw-r--r--abstractions/pt.loop.pd153
-rw-r--r--abstractions/pt.model.pd22
-rw-r--r--abstractions/pt.presets.pd65
-rw-r--r--abstractions/pt.rotate.pd57
-rw-r--r--abstractions/pt.scale.pd49
-rw-r--r--abstractions/pt.source.pd131
-rw-r--r--abstractions/pt.squeeze.pd57
-rw-r--r--abstractions/pt.stream.pd38
-rw-r--r--abstractions/pt.text.pd25
-rw-r--r--abstractions/pt.translate.pd59
-rw-r--r--abstractions/pt.video.pd35
-rw-r--r--abstractions/pt.whatcolour.pd105
-rw-r--r--abstractions/pt.window.pd306
-rw-r--r--abstractions/register-dump.pd16
-rw-r--r--abstractions/register-get.pd30
-rw-r--r--abstractions/register-head.pd50
-rw-r--r--abstractions/register-tail.pd53
-rw-r--r--abstractions/register.pd59
-rwxr-xr-xabstractions/smooth.pd27
-rw-r--r--abstractions/stripExtension.pd8
-rw-r--r--abstractions/stripPath.pd8
59 files changed, 3766 insertions, 0 deletions
diff --git a/abstractions/arrayRouterIn.pd b/abstractions/arrayRouterIn.pd
new file mode 100644
index 0000000..f887db0
--- /dev/null
+++ b/abstractions/arrayRouterIn.pd
@@ -0,0 +1,21 @@
+#N canvas 218 167 502 352 10;
+#X obj 110 129 r \$2-selector;
+#X obj 13 249 spigot;
+#X obj 13 93 r \$2-in;
+#X text 8 9 this abstraction deals with routing the global input if
+this is the selected abstraction.;
+#X obj 13 274 outlet;
+#X text 12 44 The first argument is the selector ID starting at 0 (generated
+by dir2abstractionArray) and the second argument is the \$0 variable
+for locality.;
+#X obj 110 155 == \$1;
+#X obj 153 249 spigot;
+#X obj 153 274 outlet;
+#X obj 153 93 r \$2-in2;
+#X connect 0 0 6 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 0;
+#X connect 6 0 1 1;
+#X connect 6 0 7 1;
+#X connect 7 0 8 0;
+#X connect 9 0 7 0;
diff --git a/abstractions/arrayRouterOut.pd b/abstractions/arrayRouterOut.pd
new file mode 100644
index 0000000..8fc86a4
--- /dev/null
+++ b/abstractions/arrayRouterOut.pd
@@ -0,0 +1,19 @@
+#N canvas 552 368 453 387 10;
+#X text 8 9 this abstraction deals with routing the global input if
+this is the selected abstraction.;
+#X obj 18 77 inlet;
+#X text 13 43 The only argument is the \$0 variable for locality.;
+#X obj 158 77 inlet;
+#X obj 18 249 spigot;
+#X obj 115 155 == \$1;
+#X obj 158 249 spigot;
+#X obj 18 313 s \$2-out;
+#X obj 158 313 s \$2-out2;
+#X obj 115 129 r \$2-selector;
+#X connect 1 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 7 0;
+#X connect 5 0 4 1;
+#X connect 5 0 6 1;
+#X connect 6 0 8 0;
+#X connect 9 0 5 0;
diff --git a/abstractions/cclearn.pd b/abstractions/cclearn.pd
new file mode 100644
index 0000000..f2488c8
--- /dev/null
+++ b/abstractions/cclearn.pd
@@ -0,0 +1,80 @@
+#N canvas 663 22 592 506 10;
+#X obj 117 91 ctlin;
+#X obj 61 266 f;
+#X text 88 265 CC;
+#X obj 144 271 f;
+#X text 172 269 Channel;
+#X obj 193 400 spigot;
+#X obj 45 290 ==;
+#X obj 411 124 select 0 1;
+#X obj 380 286 invert;
+#X obj 128 298 ==;
+#X obj 83 319 &&;
+#X obj 402 153 t b b;
+#X text 132 471 If We're not in learn mode && CC+CH match then pass
+number;
+#X text 133 457 If we're in learn mode don't pass number;
+#X msg 443 153 0;
+#X obj 139 347 &&;
+#X obj 244 130 f;
+#X obj 274 130 f;
+#X obj 265 168 spigot;
+#X obj 315 168 spigot;
+#X obj 380 78 f;
+#X obj 193 431 outlet;
+#X obj 380 55 inlet;
+#X obj 265 188 outlet;
+#X obj 315 188 outlet;
+#X obj 266 46 inlet;
+#X obj 306 46 inlet;
+#X text 266 27 CC;
+#X text 305 27 Chan;
+#X text 412 79 Learn;
+#X obj 138 26 unpack f f f;
+#X obj 138 4 inlet;
+#X obj 213 77 t b b b;
+#X obj 212 130 f;
+#X connect 0 0 1 1;
+#X connect 0 0 6 0;
+#X connect 0 0 18 0;
+#X connect 0 1 3 1;
+#X connect 0 1 9 0;
+#X connect 0 1 19 0;
+#X connect 0 2 5 0;
+#X connect 1 0 6 1;
+#X connect 3 0 9 1;
+#X connect 5 0 21 0;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 7 1 14 0;
+#X connect 8 0 15 1;
+#X connect 9 0 10 1;
+#X connect 10 0 5 1;
+#X connect 11 0 1 0;
+#X connect 11 1 3 0;
+#X connect 14 0 5 1;
+#X connect 15 0 5 1;
+#X connect 16 0 6 0;
+#X connect 16 0 1 1;
+#X connect 16 0 18 0;
+#X connect 17 0 3 1;
+#X connect 17 0 9 0;
+#X connect 17 0 19 0;
+#X connect 18 0 23 0;
+#X connect 19 0 24 0;
+#X connect 20 0 7 0;
+#X connect 20 0 8 0;
+#X connect 20 0 18 1;
+#X connect 20 0 19 1;
+#X connect 22 0 20 0;
+#X connect 25 0 6 1;
+#X connect 26 0 9 1;
+#X connect 30 0 16 1;
+#X connect 30 0 32 0;
+#X connect 30 1 17 1;
+#X connect 30 2 33 1;
+#X connect 31 0 30 0;
+#X connect 32 0 33 0;
+#X connect 32 1 16 0;
+#X connect 32 2 17 0;
+#X connect 33 0 5 0;
diff --git a/abstractions/createOscName.pd b/abstractions/createOscName.pd
new file mode 100644
index 0000000..c4ec111
--- /dev/null
+++ b/abstractions/createOscName.pd
@@ -0,0 +1,33 @@
+#N canvas 180 174 375 395 10;
+#X text 11 7 Create OSC name for this abstraction;
+#X obj 53 264 list2osc;
+#X text 19 342 OSC Name: /pt/1/pt.fader/1;
+#X text 89 355 /pt/[layer]/pt.fader/[instance];
+#X text 11 24 createOscName [abstractioName];
+#X obj 114 69 inlet;
+#X obj 114 100 route layerNum instance;
+#X obj 53 69 inlet;
+#X obj 53 100 bang;
+#X obj 79 193 pack f f s;
+#X obj 169 174 symbol \$1;
+#X obj 169 151 loadbang;
+#X obj 53 243 lister;
+#X msg 79 214 list pt \$1 \$3 \$2;
+#X obj 53 285 outlet;
+#X obj 111 163 f;
+#X obj 53 136 t b b b;
+#X connect 1 0 14 0;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 6 1 15 0;
+#X connect 7 0 8 0;
+#X connect 8 0 16 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 2;
+#X connect 11 0 10 0;
+#X connect 12 0 1 0;
+#X connect 13 0 12 1;
+#X connect 15 0 9 1;
+#X connect 16 0 12 0;
+#X connect 16 1 9 0;
+#X connect 16 2 15 0;
diff --git a/abstractions/dir2abstractionArray.pd b/abstractions/dir2abstractionArray.pd
new file mode 100644
index 0000000..2011e75
--- /dev/null
+++ b/abstractions/dir2abstractionArray.pd
@@ -0,0 +1,115 @@
+#N canvas 393 22 707 710 10;
+#X obj 362 408 + 10;
+#X obj 365 363 t f f;
+#X obj 392 341 + 1;
+#X obj 336 318 t a b;
+#X obj 360 341 f 0;
+#X msg 382 318 0;
+#X text 453 221 reset;
+#X obj 409 437 f \$0;
+#X obj 362 387 * 120;
+#X obj 455 240 loadbang;
+#X obj 336 297 stripExtension;
+#X obj 18 167 inlet;
+#X obj 28 190 s \$0-in;
+#X obj 28 403 r \$0-out;
+#X obj 18 426 outlet;
+#X obj 241 115 inlet;
+#X obj 467 314 makesymbol pd-%s-array;
+#X obj 467 294 f \$0;
+#N canvas 198 331 842 530 1590-array 0;
+#X restore 19 455 pd \$0-array;
+#X obj 313 158 t a b;
+#X obj 464 178 s \$0-selector;
+#X obj 446 149 inlet;
+#X obj 525 441 outlet;
+#X text 281 114 which Abst to route through?;
+#X text 528 459 List of options;
+#X obj 525 421 prepend Passthrough;
+#X obj 18 373 spigot;
+#X msg 363 182 1;
+#X obj 430 178 == 0;
+#X obj 382 437 + 1;
+#X obj 106 167 inlet;
+#X obj 106 426 outlet;
+#X obj 106 373 spigot;
+#X obj 116 190 s \$0-in2;
+#X obj 116 403 r \$0-out2;
+#X obj 241 631 makesymbol pd-%s-array;
+#X msg 241 651 \; \$1 clear;
+#X obj 241 611 f \$0;
+#X obj 241 186 route clear;
+#X obj 336 470 pack s f f f s f;
+#X obj 443 437 f \$1;
+#X obj 456 262 t b b b;
+#X msg 336 496 \; \$5 obj \$2 10 \$1 \$3 \$4 \$6;
+#X text 14 10 This abstraction takes a glob pattern in a directory
+and creates an array of the abstractions in that folder in an internal
+subpatch called [pd \$0-array]. The abstractions are meant to be routing
+objects so they all have a global receive and send \, but only one
+abstraction in the array at a time will receive input. The abstractions
+must contain at least a arrayRouterIn abstraction to broker the communication.
+;
+#X obj 313 210 dirlist;
+#X msg 313 533 symbol \$1;
+#X obj 313 254 drip;
+#X obj 313 553 stripPath;
+#X obj 313 275 t l l;
+#X obj 313 573 makesymbol pd-%s;
+#X msg 313 593 \; \$1 loadbang;
+#X text 407 600 <- Special Thanks to Roman Haefeli;
+#X connect 0 0 39 1;
+#X connect 1 0 8 0;
+#X connect 1 1 29 0;
+#X connect 2 0 4 1;
+#X connect 3 0 39 0;
+#X connect 3 1 4 0;
+#X connect 4 0 2 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 1;
+#X connect 7 0 39 3;
+#X connect 8 0 0 0;
+#X connect 9 0 5 0;
+#X connect 9 0 27 0;
+#X connect 9 0 41 0;
+#X connect 10 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 26 0;
+#X connect 13 0 14 0;
+#X connect 15 0 19 0;
+#X connect 16 0 39 4;
+#X connect 17 0 16 0;
+#X connect 19 0 38 0;
+#X connect 19 1 17 0;
+#X connect 19 1 5 0;
+#X connect 19 1 27 0;
+#X connect 21 0 20 0;
+#X connect 21 0 28 0;
+#X connect 25 0 22 0;
+#X connect 26 0 14 0;
+#X connect 27 0 26 1;
+#X connect 27 0 32 1;
+#X connect 28 0 26 1;
+#X connect 28 0 32 1;
+#X connect 29 0 39 2;
+#X connect 30 0 32 0;
+#X connect 30 0 33 0;
+#X connect 32 0 31 0;
+#X connect 34 0 31 0;
+#X connect 35 0 36 0;
+#X connect 37 0 35 0;
+#X connect 38 0 37 0;
+#X connect 38 1 44 0;
+#X connect 39 0 42 0;
+#X connect 40 0 39 5;
+#X connect 41 0 7 0;
+#X connect 41 1 17 0;
+#X connect 41 2 40 0;
+#X connect 44 0 25 0;
+#X connect 44 0 46 0;
+#X connect 45 0 47 0;
+#X connect 46 0 48 0;
+#X connect 47 0 49 0;
+#X connect 48 0 45 0;
+#X connect 48 1 10 0;
+#X connect 49 0 50 0;
diff --git a/abstractions/dirlist.pd b/abstractions/dirlist.pd
new file mode 100644
index 0000000..45946df
--- /dev/null
+++ b/abstractions/dirlist.pd
@@ -0,0 +1,36 @@
+#N canvas 133 243 538 370 10;
+#X obj 20 61 inlet;
+#X obj 20 234 outlet;
+#X obj 215 84 loadbang;
+#X text 129 200 \$1 is pattern \$2 is dir;
+#N canvas 0 22 462 312 pwd 0;
+#X text 18 27 This is where used to be.;
+#X obj 35 92 inlet;
+#X obj 41 184 outlet;
+#X obj 48 153 symbol /;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X restore 215 123 pd pwd;
+#X text 15 284 ONLY sends absolute pathnames \, otherwise hard to add
+before load!;
+#X msg 54 175 \$1 \$2;
+#X obj 20 210 py pt dirlist;
+#X obj 20 84 route pattern set-dir bang;
+#X obj 54 154 pack s s;
+#X obj 125 122 symbol \$2;
+#X obj 54 122 symbol \$1;
+#X text 20 17 Lists the files in a set with 'set-dir' selector. Sends
+the files matching 'pattern' selector as a list. Requires PWD to provide
+a reasonable default location.;
+#X connect 0 0 8 0;
+#X connect 2 0 4 0;
+#X connect 4 0 9 1;
+#X connect 6 0 7 1;
+#X connect 7 0 1 0;
+#X connect 8 0 11 0;
+#X connect 8 1 10 0;
+#X connect 8 2 10 0;
+#X connect 8 2 11 0;
+#X connect 9 0 6 0;
+#X connect 10 0 9 1;
+#X connect 11 0 9 0;
diff --git a/abstractions/dirpanel.pd b/abstractions/dirpanel.pd
new file mode 100644
index 0000000..fec4612
--- /dev/null
+++ b/abstractions/dirpanel.pd
@@ -0,0 +1,13 @@
+#N canvas 500 454 458 308 10;
+#X obj 39 130 tot .;
+#X msg 39 105 query tk_chooseDirectory;
+#X obj 39 54 inlet;
+#X obj 39 78 bang;
+#X obj 39 155 tosymbol;
+#X obj 39 180 outlet;
+#X text 16 9 Sends the pathname of a directory on bang;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
diff --git a/abstractions/fx/edge.pd b/abstractions/fx/edge.pd
new file mode 100644
index 0000000..2389dae
--- /dev/null
+++ b/abstractions/fx/edge.pd
@@ -0,0 +1,31 @@
+#N canvas 454 228 536 486 10;
+#X obj 181 254 + 1;
+#X obj 184 230 * 7;
+#X obj 131 241 * -1;
+#X msg 131 299 \$1 \$1 \$1 \$1 \$2 \$1 \$1 \$1 \$1;
+#X obj 131 276 pack f f;
+#X obj 140 208 t f f;
+#X text 26 14 Edge Detection abstraction;
+#X text 25 55 Gemchain;
+#X text 124 62 fxAmount 0-1;
+#X obj 24 375 arrayRouterOut \$1 \$2;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 24 323 pix_convolve 3 3;
+#X obj 166 81 inlet;
+#X obj 37 295 inlet;
+#X obj 144 144 interp1;
+#X obj 44 351 outlet;
+#X connect 0 0 4 1;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 11 2;
+#X connect 4 0 3 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 10 0 11 0;
+#X connect 10 1 14 0;
+#X connect 11 0 9 0;
+#X connect 11 0 15 0;
+#X connect 12 0 14 0;
+#X connect 13 0 11 0;
+#X connect 14 0 5 0;
diff --git a/abstractions/fx/emboss.pd b/abstractions/fx/emboss.pd
new file mode 100644
index 0000000..54766e4
--- /dev/null
+++ b/abstractions/fx/emboss.pd
@@ -0,0 +1,11 @@
+#N canvas 576 244 478 328 10;
+#X obj 44 230 pix_emboss;
+#X obj 22 48 inlet;
+#X text 64 47 Gemchain;
+#X obj 42 80 arrayRouterIn \$1 \$2;
+#X obj 44 286 arrayRouterOut \$1 \$2;
+#X obj 61 260 outlet;
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 3 0 0 0;
diff --git a/abstractions/fx/gain.pd b/abstractions/fx/gain.pd
new file mode 100644
index 0000000..688011d
--- /dev/null
+++ b/abstractions/fx/gain.pd
@@ -0,0 +1,20 @@
+#N canvas 443 137 474 324 10;
+#X obj 34 213 pix_gain;
+#X obj 59 182 * 5;
+#X obj 96 123 inlet;
+#X obj 46 125 inlet;
+#X text 17 59 Gemchain;
+#X text 100 63 fxAmount 0-1;
+#X text 25 16 luminosity gain;
+#X obj 17 86 arrayRouterIn \$1 \$2;
+#X obj 34 264 arrayRouterOut \$1 \$2;
+#X obj 59 158 interp1;
+#X obj 50 239 outlet;
+#X connect 0 0 8 0;
+#X connect 0 0 10 0;
+#X connect 1 0 0 1;
+#X connect 2 0 9 0;
+#X connect 3 0 0 0;
+#X connect 7 0 0 0;
+#X connect 7 1 9 0;
+#X connect 9 0 1 0;
diff --git a/abstractions/fx/motionblur.pd b/abstractions/fx/motionblur.pd
new file mode 100644
index 0000000..4ad2e42
--- /dev/null
+++ b/abstractions/fx/motionblur.pd
@@ -0,0 +1,18 @@
+#N canvas 0 22 474 324 10;
+#X obj 133 131 inlet;
+#X obj 39 154 inlet;
+#X text 6 67 Gemchain;
+#X text 82 66 fxAmount 0-1;
+#X obj 28 181 pix_motionblur;
+#X text 21 18 Motion Blur;
+#X obj 8 89 arrayRouterIn \$1 \$2;
+#X obj 28 229 arrayRouterOut \$1 \$2;
+#X obj 121 155 interp1;
+#X obj 41 206 outlet;
+#X connect 0 0 8 0;
+#X connect 1 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 0 9 0;
+#X connect 6 0 4 0;
+#X connect 6 1 8 0;
+#X connect 8 0 4 1;
diff --git a/abstractions/fx/negative.pd b/abstractions/fx/negative.pd
new file mode 100644
index 0000000..390f2b2
--- /dev/null
+++ b/abstractions/fx/negative.pd
@@ -0,0 +1,10 @@
+#N canvas 0 22 462 312 10;
+#X text 64 47 Gemchain;
+#X obj 37 170 pix_invert;
+#X text 19 10 colour Negative;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 37 215 arrayRouterOut \$1 \$2;
+#X obj 49 194 outlet;
+#X connect 1 0 4 0;
+#X connect 1 0 5 0;
+#X connect 3 0 1 0;
diff --git a/abstractions/fx/normalize.pd b/abstractions/fx/normalize.pd
new file mode 100644
index 0000000..50810d1
--- /dev/null
+++ b/abstractions/fx/normalize.pd
@@ -0,0 +1,12 @@
+#N canvas 0 22 458 308 10;
+#X obj 46 138 inlet;
+#X text 25 54 Gemchain;
+#X obj 32 168 pix_normalize;
+#X text 28 16 Normalize pixels;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 32 220 arrayRouterOut \$1 \$2;
+#X obj 47 193 outlet;
+#X connect 0 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 4 0 2 0;
diff --git a/abstractions/fx/posterize.pd b/abstractions/fx/posterize.pd
new file mode 100644
index 0000000..92fc1d1
--- /dev/null
+++ b/abstractions/fx/posterize.pd
@@ -0,0 +1,22 @@
+#N canvas 482 104 414 459 10;
+#X obj 37 247 pix_posterize;
+#X obj 80 222 + 0.01;
+#X obj 80 199 * 0.18;
+#X obj 116 144 inlet;
+#X obj 54 171 inlet;
+#X text 24 52 Gemchain;
+#X text 96 55 fxAmount 0-1;
+#X text 25 4 Posterize;
+#X obj 17 78 arrayRouterIn \$1 \$2;
+#X obj 37 302 arrayRouterOut \$1 \$2;
+#X obj 102 170 interp1;
+#X obj 52 274 outlet;
+#X connect 0 0 9 0;
+#X connect 0 0 11 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 10 0;
+#X connect 4 0 0 0;
+#X connect 8 0 0 0;
+#X connect 8 1 10 0;
+#X connect 10 0 2 0;
diff --git a/abstractions/fx/randomdot.pd b/abstractions/fx/randomdot.pd
new file mode 100644
index 0000000..189b143
--- /dev/null
+++ b/abstractions/fx/randomdot.pd
@@ -0,0 +1,12 @@
+#N canvas 336 435 466 316 10;
+#X text 15 9 randomdot;
+#X obj 46 113 inlet;
+#X text 64 47 Gemchain;
+#X obj 32 144 pix_rds;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 32 206 arrayRouterOut \$1 \$2;
+#X obj 56 171 outlet;
+#X connect 1 0 3 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 3 0;
diff --git a/abstractions/fx/roll.pd b/abstractions/fx/roll.pd
new file mode 100644
index 0000000..0901cb7
--- /dev/null
+++ b/abstractions/fx/roll.pd
@@ -0,0 +1,20 @@
+#N canvas 506 429 470 320 10;
+#X obj 50 188 pix_roll;
+#X obj 101 163 * 480;
+#X obj 117 107 inlet;
+#X obj 58 156 inlet;
+#X text 25 59 Gemchain;
+#X text 97 57 fxAmount 0-1;
+#X text 22 10 Offset pixels over Y.;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 50 258 arrayRouterOut \$1 \$2;
+#X obj 101 138 interp1;
+#X obj 74 225 outlet;
+#X connect 0 0 8 0;
+#X connect 0 0 10 0;
+#X connect 1 0 0 1;
+#X connect 2 0 9 0;
+#X connect 3 0 0 0;
+#X connect 7 0 0 0;
+#X connect 7 1 9 0;
+#X connect 9 0 1 0;
diff --git a/abstractions/fx/rtx-DANGER_USE_AT_YOUR_OWN_RISK.pd b/abstractions/fx/rtx-DANGER_USE_AT_YOUR_OWN_RISK.pd
new file mode 100644
index 0000000..ebe0de4
--- /dev/null
+++ b/abstractions/fx/rtx-DANGER_USE_AT_YOUR_OWN_RISK.pd
@@ -0,0 +1,12 @@
+#N canvas 0 22 458 308 10;
+#X obj 23 146 pix_rtx;
+#X obj 37 117 inlet;
+#X text 30 55 Gemchain;
+#X text 19 18 Time to X mapping;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 40 206 arrayRouterOut \$1 \$2;
+#X obj 53 175 outlet;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 4 0 0 0;
diff --git a/abstractions/fx/scanline.pd b/abstractions/fx/scanline.pd
new file mode 100644
index 0000000..e2c4e24
--- /dev/null
+++ b/abstractions/fx/scanline.pd
@@ -0,0 +1,19 @@
+#N canvas 0 22 478 328 10;
+#X obj 130 147 inlet;
+#X obj 54 191 inlet;
+#X text 33 53 Gemchain;
+#X text 106 53 fxAmount 0-1;
+#X obj 38 221 pix_scanline;
+#X obj 118 196 * 500;
+#X obj 24 81 arrayRouterIn \$1 \$2;
+#X obj 38 285 arrayRouterOut \$1 \$2;
+#X obj 117 173 interp1;
+#X obj 53 253 outlet;
+#X connect 0 0 8 0;
+#X connect 1 0 4 0;
+#X connect 4 0 7 0;
+#X connect 4 0 9 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 0;
+#X connect 6 1 8 0;
+#X connect 8 0 5 0;
diff --git a/abstractions/interp1.pd b/abstractions/interp1.pd
new file mode 100644
index 0000000..f3cbb13
--- /dev/null
+++ b/abstractions/interp1.pd
@@ -0,0 +1,85 @@
+#N canvas 859 396 375 365 10;
+#X obj 16 227 smooth 0.8 10;
+#X obj 16 153 spigot;
+#N canvas 591 359 419 260 selector 0;
+#X obj 23 34 inlet;
+#X obj 34 178 outlet;
+#X obj 81 178 outlet;
+#X obj 128 178 outlet;
+#X obj 34 156 == 0;
+#X obj 81 156 == 1;
+#X obj 128 156 == 2;
+#X obj 42 112 loadbang;
+#X text 104 113 Default;
+#X msg 42 132 0;
+#X text 67 35 Which type? (0-lowpass \, 1-linear \, 2-none);
+#X obj 116 86 r init;
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 9 0 4 0;
+#X connect 11 0 9 0;
+#X restore 53 84 pd selector;
+#X obj 116 153 spigot;
+#X obj 116 227 line;
+#N canvas 0 22 478 328 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 116 204 pd pack;
+#X text 10 29 linear (10 - 510);
+#N canvas 0 22 490 340 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 59 204 pd scl;
+#X obj 171 152 spigot;
+#X obj 53 63 r ptInterpType;
+#X obj 129 177 r ptInterpSmoothness;
+#X text 9 11 lowpass (1.5 - 0.2);
+#X obj 187 111 f;
+#X obj 209 83 inlet;
+#X obj 175 83 r \$1;
+#X obj 81 294 f;
+#X obj 81 315 outlet;
+#X connect 0 0 15 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 1;
+#X connect 2 1 3 1;
+#X connect 2 2 8 1;
+#X connect 3 0 5 0;
+#X connect 4 0 15 0;
+#X connect 5 0 4 0;
+#X connect 7 0 0 1;
+#X connect 8 0 15 0;
+#X connect 9 0 2 0;
+#X connect 10 0 5 1;
+#X connect 10 0 7 0;
+#X connect 12 0 1 0;
+#X connect 12 0 3 0;
+#X connect 12 0 8 0;
+#X connect 13 0 12 0;
+#X connect 14 0 12 0;
+#X connect 15 0 16 0;
diff --git a/abstractions/interp3.pd b/abstractions/interp3.pd
new file mode 100644
index 0000000..58aceb6
--- /dev/null
+++ b/abstractions/interp3.pd
@@ -0,0 +1,189 @@
+#N canvas 524 405 728 375 10;
+#X obj 171 314 outlet;
+#X obj 16 277 smooth 0.8 10;
+#X obj 16 153 spigot;
+#N canvas 591 359 399 240 selector 0;
+#X obj 23 34 inlet;
+#X obj 33 178 outlet;
+#X obj 81 178 outlet;
+#X obj 128 178 outlet;
+#X obj 34 156 == 0;
+#X obj 81 156 == 1;
+#X obj 128 156 == 2;
+#X obj 42 112 loadbang;
+#X text 104 113 Default;
+#X msg 42 132 0;
+#X text 67 35 Which type? (0-lowpass \, 1-linear \, 2-none);
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 9 0 4 0;
+#X restore 263 38 pd selector;
+#X obj 116 153 spigot;
+#X obj 116 277 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 116 254 pd pack;
+#X text 10 29 linear (10 - 510);
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 59 254 pd scl;
+#X obj 171 152 spigot;
+#X obj 263 17 r ptInterpType;
+#X obj 294 193 r ptInterpSmoothness;
+#X text 9 11 lowpass (1.5 - 0.2);
+#X obj 381 313 outlet;
+#X obj 226 276 smooth 0.8 10;
+#X obj 226 152 spigot;
+#X obj 326 152 spigot;
+#X obj 326 276 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 326 253 pd pack;
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 269 253 pd scl;
+#X obj 381 151 spigot;
+#X obj 591 312 outlet;
+#X obj 436 275 smooth 0.8 10;
+#X obj 436 151 spigot;
+#X obj 536 151 spigot;
+#X obj 536 275 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 536 252 pd pack;
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 479 252 pd scl;
+#X obj 591 150 spigot;
+#X obj 83 72 r \$1;
+#X obj 123 72 inlet;
+#X obj 116 100 f;
+#X obj 333 72 inlet;
+#X obj 543 72 inlet;
+#X obj 293 72 r \$2;
+#X obj 503 72 r \$3;
+#X obj 326 99 f;
+#X obj 536 98 f;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 1;
+#X connect 3 0 15 1;
+#X connect 3 0 23 1;
+#X connect 3 1 4 1;
+#X connect 3 1 16 1;
+#X connect 3 1 24 1;
+#X connect 3 2 9 1;
+#X connect 3 2 20 1;
+#X connect 3 2 28 1;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X connect 8 0 1 1;
+#X connect 9 0 0 0;
+#X connect 10 0 3 0;
+#X connect 11 0 6 1;
+#X connect 11 0 8 0;
+#X connect 11 0 18 1;
+#X connect 11 0 19 0;
+#X connect 11 0 26 1;
+#X connect 11 0 27 0;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 18 0;
+#X connect 17 0 13 0;
+#X connect 18 0 17 0;
+#X connect 19 0 14 1;
+#X connect 20 0 13 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 26 0;
+#X connect 25 0 21 0;
+#X connect 26 0 25 0;
+#X connect 27 0 22 1;
+#X connect 28 0 21 0;
+#X connect 29 0 31 0;
+#X connect 30 0 31 0;
+#X connect 31 0 2 0;
+#X connect 31 0 4 0;
+#X connect 31 0 9 0;
+#X connect 32 0 36 0;
+#X connect 33 0 37 0;
+#X connect 34 0 36 0;
+#X connect 35 0 37 0;
+#X connect 36 0 15 0;
+#X connect 36 0 16 0;
+#X connect 36 0 20 0;
+#X connect 37 0 23 0;
+#X connect 37 0 24 0;
+#X connect 37 0 28 0;
diff --git a/abstractions/interp4.pd b/abstractions/interp4.pd
new file mode 100644
index 0000000..2a08a4b
--- /dev/null
+++ b/abstractions/interp4.pd
@@ -0,0 +1,246 @@
+#N canvas 175 40 1029 555 10;
+#X obj 171 264 outlet;
+#X obj 16 227 smooth 0.8 10;
+#X obj 16 153 spigot;
+#N canvas 591 359 399 240 selector 0;
+#X obj 23 34 inlet;
+#X obj 33 178 outlet;
+#X obj 81 178 outlet;
+#X obj 128 178 outlet;
+#X obj 34 156 == 0;
+#X obj 81 156 == 1;
+#X obj 128 156 == 2;
+#X obj 42 112 loadbang;
+#X text 104 113 Default;
+#X msg 42 132 0;
+#X text 67 35 Which type? (0-lowpass \, 1-linear \, 2-none);
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 3 0;
+#X connect 7 0 9 0;
+#X connect 9 0 4 0;
+#X restore 400 31 pd selector;
+#X obj 116 153 spigot;
+#X obj 116 227 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 116 204 pd pack;
+#X text 10 29 linear (10 - 510);
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 59 204 pd scl;
+#X obj 171 152 spigot;
+#X obj 400 10 r ptInterpType;
+#X obj 129 177 r ptInterpSmoothness;
+#X text 9 11 lowpass (1.5 - 0.2);
+#X obj 381 263 outlet;
+#X obj 226 226 smooth 0.8 10;
+#X obj 226 152 spigot;
+#X obj 326 152 spigot;
+#X obj 326 226 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 326 203 pd pack;
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 269 203 pd scl;
+#X obj 381 151 spigot;
+#X obj 339 176 r ptInterpSmoothness;
+#X obj 591 262 outlet;
+#X obj 436 225 smooth 0.8 10;
+#X obj 436 151 spigot;
+#X obj 536 151 spigot;
+#X obj 536 225 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 536 202 pd pack;
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 479 202 pd scl;
+#X obj 591 150 spigot;
+#X obj 549 175 r ptInterpSmoothness;
+#X obj 801 262 outlet;
+#X obj 646 225 smooth 0.8 10;
+#X obj 646 151 spigot;
+#X obj 746 151 spigot;
+#X obj 746 225 line;
+#N canvas 0 22 466 316 pack 0;
+#X obj 20 35 inlet;
+#X obj 90 35 inlet;
+#X msg 39 226 \$1 \$2;
+#X obj 39 195 pack f f;
+#X obj 39 250 outlet;
+#X obj 155 95 * 5;
+#X obj 155 116 + 10;
+#X text 193 96 from 0-100 to 10-510;
+#X connect 0 0 3 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 1;
+#X restore 746 202 pd pack;
+#N canvas 0 22 474 324 scl 0;
+#X obj 19 16 inlet;
+#X obj 17 118 outlet;
+#X obj 19 65 / 77;
+#X obj 19 40 * -1;
+#X obj 19 89 + 1.5;
+#X text 57 66 from 0-100 to 1.5-0.2;
+#X connect 0 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X restore 689 202 pd scl;
+#X obj 801 150 spigot;
+#X obj 759 175 r ptInterpSmoothness;
+#X obj 58 65 r \$1;
+#X obj 91 65 inlet;
+#X obj 78 89 f;
+#X obj 291 49 inlet;
+#X obj 551 29 inlet;
+#X obj 711 59 inlet;
+#X obj 258 49 r \$2;
+#X obj 518 29 r \$3;
+#X obj 678 59 r \$4;
+#X obj 708 87 f;
+#X obj 498 87 f;
+#X obj 288 88 f;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 1;
+#X connect 3 0 15 1;
+#X connect 3 0 24 1;
+#X connect 3 0 33 1;
+#X connect 3 1 4 1;
+#X connect 3 1 16 1;
+#X connect 3 1 25 1;
+#X connect 3 1 34 1;
+#X connect 3 2 9 1;
+#X connect 3 2 20 1;
+#X connect 3 2 29 1;
+#X connect 3 2 38 1;
+#X connect 4 0 6 0;
+#X connect 5 0 0 0;
+#X connect 6 0 5 0;
+#X connect 8 0 1 1;
+#X connect 9 0 0 0;
+#X connect 10 0 3 0;
+#X connect 11 0 6 1;
+#X connect 11 0 8 0;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 18 0;
+#X connect 17 0 13 0;
+#X connect 18 0 17 0;
+#X connect 19 0 14 1;
+#X connect 20 0 13 0;
+#X connect 21 0 18 1;
+#X connect 21 0 19 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 25 0 27 0;
+#X connect 26 0 22 0;
+#X connect 27 0 26 0;
+#X connect 28 0 23 1;
+#X connect 29 0 22 0;
+#X connect 30 0 27 1;
+#X connect 30 0 28 0;
+#X connect 32 0 31 0;
+#X connect 33 0 32 0;
+#X connect 34 0 36 0;
+#X connect 35 0 31 0;
+#X connect 36 0 35 0;
+#X connect 37 0 32 1;
+#X connect 38 0 31 0;
+#X connect 39 0 36 1;
+#X connect 39 0 37 0;
+#X connect 40 0 42 0;
+#X connect 41 0 42 0;
+#X connect 42 0 2 0;
+#X connect 42 0 4 0;
+#X connect 42 0 9 0;
+#X connect 43 0 51 0;
+#X connect 44 0 50 0;
+#X connect 45 0 49 0;
+#X connect 46 0 51 0;
+#X connect 47 0 50 0;
+#X connect 48 0 49 0;
+#X connect 49 0 33 0;
+#X connect 49 0 34 0;
+#X connect 49 0 38 0;
+#X connect 50 0 24 0;
+#X connect 50 0 25 0;
+#X connect 50 0 29 0;
+#X connect 51 0 15 0;
+#X connect 51 0 16 0;
+#X connect 51 0 20 0;
diff --git a/abstractions/invert_scale.pd b/abstractions/invert_scale.pd
new file mode 100644
index 0000000..5985e78
--- /dev/null
+++ b/abstractions/invert_scale.pd
@@ -0,0 +1,15 @@
+#N canvas 343 241 489 295 10;
+#X obj 25 74 inlet;
+#X obj 45 207 outlet;
+#X obj 41 103 * -1;
+#X obj 46 141 + \$2;
+#X obj 43 172 + \$1;
+#X text 83 141 Upper Limit;
+#X text 78 173 Lower Limit;
+#X text 22 17 Inverts a scale of numbers so that the upper and lower
+limits are reversed. This works for all states inbetween limits as
+well. Usage: [invert_scale lower upper];
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 1 0;
diff --git a/abstractions/list2osc.pd b/abstractions/list2osc.pd
new file mode 100644
index 0000000..10757b8
--- /dev/null
+++ b/abstractions/list2osc.pd
@@ -0,0 +1,13 @@
+#N canvas 341 314 454 304 10;
+#X obj 21 132 l2s;
+#X msg 37 108 symbol /;
+#X obj 21 160 makesymbol /%s;
+#X obj 21 188 outlet;
+#X obj 37 86 loadbang;
+#X obj 21 57 inlet;
+#X text 17 9 Make an OSC name from a list;
+#X connect 0 0 2 0;
+#X connect 1 0 0 1;
+#X connect 2 0 3 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
diff --git a/abstractions/mementoSetup.pd b/abstractions/mementoSetup.pd
new file mode 100644
index 0000000..697c4fa
--- /dev/null
+++ b/abstractions/mementoSetup.pd
@@ -0,0 +1,69 @@
+#N canvas 702 30 540 777 10;
+#X obj 29 66 t b f;
+#X msg 29 90 set;
+#X msg 59 90 substate \$1;
+#X obj 222 230 route osc;
+#X msg 338 160 instance \$1;
+#X obj 117 230 prepend create;
+#X obj 29 46 r pt.currentPreset;
+#X text 16 9 Does all the crap for memento naming/collection and abstraction
+registration \$1 is abst-name \$2 is \$0 variable;
+#X obj 305 75 inlet;
+#X obj 305 262 outlet;
+#X text 97 129 Create OSC name here;
+#X obj 117 202 createOscName \$1;
+#X obj 118 252 originator NOTSET \$2;
+#X obj 305 117 register \$1 \$2;
+#X obj 87 149 route createOscName;
+#X obj 87 174 t b b;
+#X obj 50 328 outlet;
+#X text 107 329 output a bang after we have created OSC Name;
+#X obj 44 438 cnv 15 400 300 empty empty EXPERIMENTAL 20 12 0 14 -259544
+-1 0;
+#X obj 216 701 pool OSC;
+#X obj 141 490 r \$0-RRADMIN;
+#X obj 139 668 prepend set;
+#X obj 193 555 symbol \$1;
+#X msg 233 670 mkchdir \$1;
+#X text 48 359 The following section is experimental \, a design-concept
+that will be properly implimented into the next version of memento
+for OSC name collection. "commun" and "originator" are hacked versioned
+from the offical release. We will hopefully be able to remove this
+whole section in the future.;
+#X obj 271 554 symbol;
+#X obj 164 518 t a b b;
+#X obj 223 635 makesymbol %s/%s;
+#X obj 223 588 pack s s;
+#X obj 334 668 print me;
+#X msg 223 611 \$2 \$1;
+#X text 97 508 Cut ->;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 1 0 12 0;
+#X connect 2 0 12 0;
+#X connect 3 0 12 1;
+#X connect 4 0 11 1;
+#X connect 5 0 12 0;
+#X connect 6 0 0 0;
+#X connect 8 0 3 0;
+#X connect 8 0 11 1;
+#X connect 8 0 13 0;
+#X connect 8 0 14 0;
+#X connect 11 0 5 0;
+#X connect 11 0 25 1;
+#X connect 13 0 9 0;
+#X connect 13 1 4 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 15 1 11 0;
+#X connect 21 0 19 0;
+#X connect 22 0 28 0;
+#X connect 23 0 19 0;
+#X connect 25 0 28 1;
+#X connect 26 0 21 0;
+#X connect 26 1 22 0;
+#X connect 26 2 25 0;
+#X connect 27 0 23 0;
+#X connect 27 0 29 0;
+#X connect 28 0 30 0;
+#X connect 30 0 27 0;
diff --git a/abstractions/pix_dvts.pd b/abstractions/pix_dvts.pd
new file mode 100644
index 0000000..22c16f2
--- /dev/null
+++ b/abstractions/pix_dvts.pd
@@ -0,0 +1,4 @@
+#N canvas 0 22 454 304 10;
+#X text 18 14 pix_dvts placeholder;
+#X obj 46 80 inlet;
+#X obj 45 137 outlet;
diff --git a/abstractions/popup_lister.pd b/abstractions/popup_lister.pd
new file mode 100644
index 0000000..501329e
--- /dev/null
+++ b/abstractions/popup_lister.pd
@@ -0,0 +1,19 @@
+#N canvas 0 22 458 308 10;
+#X text 20 11 Our special message "options blah blah ..." needs this
+kludge to be able to store the message in "lister" temporarily. UGLY!
+is this PD or Zexy's fault? (or popup's?);
+#X obj 49 183 lister;
+#X obj 86 161 prepend list;
+#X obj 49 204 route list;
+#X obj 86 139 inlet;
+#X obj 49 82 inlet;
+#X obj 49 225 outlet;
+#X obj 49 106 delay \$1;
+#X obj 129 139 r \$2;
+#X connect 1 0 3 0;
+#X connect 2 0 1 1;
+#X connect 3 0 6 0;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 7 0 1 0;
+#X connect 8 0 2 0;
diff --git a/abstractions/pt.animate.pd b/abstractions/pt.animate.pd
new file mode 100644
index 0000000..af1f33d
--- /dev/null
+++ b/abstractions/pt.animate.pd
@@ -0,0 +1,150 @@
+#N canvas 73 204 530 82 10;
+#X obj 1 1 cnv 5 528 80 empty empty Animate_Presets 6 13 1 12 -133153
+-1 0;
+#N canvas 349 89 765 585 interna 0;
+#X obj 9 22 cnv 15 600 450 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 413 151 inlet;
+#X obj 445 294 r \$0-save;
+#X obj 430 223 r \$0-load;
+#X text 458 150 care-taker commands;
+#X obj 413 425 caretaker RRADICAL;
+#X obj 430 243 openpanel;
+#X obj 445 314 savepanel;
+#X msg 445 334 file \$1 \, save RRADICAL;
+#X msg 430 263 file \$1 \, load RRADICAL;
+#X obj 17 438 outlet;
+#X msg 17 416 numFrames \$1;
+#X obj 17 353 f \$1;
+#X obj 27 329 loadbang;
+#X text 10 7 Preset Animation;
+#X obj 165 299 + 1;
+#X obj 277 299 - 1;
+#X obj 165 237 r \$0-right;
+#X obj 277 237 r \$0-left;
+#X obj 194 151 inlet;
+#X text 194 130 Frame;
+#X obj 165 340 clip 0 \$1;
+#X obj 277 340 clip 0 \$1;
+#X obj 181 258 r \$0-slider-out;
+#X obj 293 258 r \$0-slider-out;
+#X obj 150 188 s \$0-slider-in;
+#X obj 165 360 s \$0-slider-in;
+#X obj 277 360 s \$0-slider-in;
+#X obj 277 279 f;
+#X obj 165 279 f;
+#X obj 277 319 int;
+#X obj 165 319 int;
+#X obj 274 123 r \$0-slider-out;
+#X obj 274 143 int;
+#X obj 274 185 s pt.currentPreset;
+#X obj 17 30 inlet;
+#X text 24 526 Simple scrubbing interface for states \, dynamic number
+of frames!;
+#X text 24 501 \$1 Argument Specifies the # of Frames/Presets;
+#X obj 111 437 s \$0-slider-in;
+#X msg 111 416 range 0 \$1;
+#X obj 17 61 route numKeys loopPos;
+#X obj 215 416 s \$0-numKeys;
+#X text 187 66 numFrames = NumKeys * 100 \, otherwise we're going at
+30keyframes/s! too fast. 3s per keyframe is better;
+#X obj 17 394 * 30;
+#X obj 150 99 expr int($f1/30);
+#N canvas 0 22 454 304 defaults 0;
+#X obj 37 26 loadbang;
+#X obj 37 49 f \$1;
+#X obj 37 71 select 0;
+#X obj 55 120 print pt.animate;
+#X msg 55 98 No arguments given. Using 10 Key-Frames.;
+#X msg 37 156 numKeys 10;
+#X obj 37 179 outlet;
+#X text 28 254 if (arg1 == "0" || not set) then sey numKeys 10;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X restore 60 30 pd defaults;
+#X obj 274 164 change;
+#X obj 348 396 bang;
+#X text 385 397 Resend numFrames on load/save;
+#N canvas 349 89 462 312 OSC-stuff 0;
+#X obj 12 13 r pt.osc;
+#X obj 12 34 OSCroute /pt;
+#X obj 12 55 OSCroute /animate;
+#X obj 12 76 OSCroute /frame;
+#X text 172 16 How to register this OSC name?;
+#X obj 12 97 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 5 0;
+#X restore 182 31 pd OSC-stuff;
+#X text 274 32 Problem of registering this?;
+#X connect 1 0 5 0;
+#X connect 2 0 7 0;
+#X connect 2 0 47 0;
+#X connect 3 0 6 0;
+#X connect 3 0 47 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 0;
+#X connect 9 0 5 0;
+#X connect 11 0 10 0;
+#X connect 12 0 39 0;
+#X connect 12 0 41 0;
+#X connect 12 0 43 0;
+#X connect 13 0 12 0;
+#X connect 15 0 31 0;
+#X connect 16 0 30 0;
+#X connect 17 0 29 0;
+#X connect 18 0 28 0;
+#X connect 19 0 25 0;
+#X connect 21 0 26 0;
+#X connect 22 0 27 0;
+#X connect 23 0 29 1;
+#X connect 24 0 28 1;
+#X connect 28 0 16 0;
+#X connect 29 0 15 0;
+#X connect 30 0 22 0;
+#X connect 31 0 21 0;
+#X connect 32 0 33 0;
+#X connect 33 0 46 0;
+#X connect 35 0 40 0;
+#X connect 39 0 38 0;
+#X connect 40 0 12 0;
+#X connect 40 0 21 2;
+#X connect 40 0 22 2;
+#X connect 40 1 44 0;
+#X connect 43 0 11 0;
+#X connect 44 0 25 0;
+#X connect 45 0 40 0;
+#X connect 46 0 34 0;
+#X connect 47 0 12 0;
+#X connect 49 0 25 0;
+#X restore 7 148 pd interna;
+#X obj 430 6 bng 15 250 50 0 \$0-save \$0 Save 20 8 1 9 -237178 -1
+-1;
+#X obj 480 6 bng 15 250 50 0 \$0-load \$0 Load 20 8 1 9 -237178 -1
+-1;
+#X obj 92 124 inlet;
+#X obj 7 172 outlet;
+#X text 4 104 Preset Animation;
+#X obj 10 26 hsl 510 30 0 10 0 0 \$0-slider-out \$0-slider-in empty
+-2 -6 0 8 -262144 -1 -1 0 0;
+#X obj 7 60 nbx 5 14 -1e+37 1e+37 0 0 \$0- pt.currentPreset Current-Key-Frame
+60 9 1 12 -262144 -1 -1 0 256;
+#X obj 466 60 nbx 5 14 -1e+37 1e+37 0 0 empty \$0-numKeys Number-of-Key-Frames
+-145 9 1 12 -262144 -1 -1 10 256;
+#X obj 221 6 bng 15 250 50 0 \$0-left \$0 << 18 8 1 12 -237178 -1 -1
+;
+#X obj 281 6 bng 15 250 50 0 \$0-right \$0 >> -17 8 1 12 -237178 -1
+-1;
+#X obj 47 124 inlet;
+#X obj 5 124 inlet;
+#X connect 1 0 5 0;
+#X connect 4 0 1 2;
+#X connect 12 0 1 1;
+#X connect 13 0 1 0;
+#X coords 0 0 1 1 530 82 1;
diff --git a/abstractions/pt.dualfx.pd b/abstractions/pt.dualfx.pd
new file mode 100644
index 0000000..6de89b8
--- /dev/null
+++ b/abstractions/pt.dualfx.pd
@@ -0,0 +1,141 @@
+#N canvas 797 67 403 214 10;
+#N canvas 161 339 670 348 interna 0;
+#X obj 10 39 cnv 15 350 250 empty empty empty 5 8 1 10 -3121 -1 0;
+#N canvas 591 359 469 378 selector 0;
+#X obj 23 34 inlet;
+#X obj 33 178 outlet;
+#X obj 81 178 outlet;
+#N canvas 0 22 454 304 another 0;
+#X obj 24 75 select 1;
+#X obj 74 96 select 2;
+#X obj 124 115 select 3;
+#X obj 175 136 select 4;
+#X msg 25 122 1 0 0 0;
+#X msg 75 152 0 1 0 0;
+#X msg 125 182 0 0 1 0;
+#X msg 175 212 0 0 0 1;
+#X obj 26 252 unpack f f f f;
+#X connect 0 0 4 0;
+#X connect 0 1 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 6 0;
+#X connect 2 1 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 8 0;
+#X connect 5 0 8 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X restore 286 75 pd another approach;
+#X obj 34 156 == 0;
+#X obj 81 156 == 1;
+#X obj 44 101 loadbang;
+#X msg 44 121 0;
+#X text 67 35 Which effect?;
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
+#X restore 256 67 pd selector;
+#X obj 22 42 inlet;
+#X obj 22 266 outlet;
+#X obj 22 200 pix_chroma_key;
+#X obj 115 43 inlet;
+#X obj 22 180 spigot;
+#X obj 188 179 spigot;
+#X obj 115 180 spigot;
+#X obj 239 179 spigot;
+#X obj 256 46 r \$0-effect;
+#X text 23 9 2 Channel Pixel Effects;
+#X obj 368 39 cnv 15 200 250 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 519 46 inlet;
+#X obj 519 266 outlet;
+#X text 426 268 Passthrough;
+#N canvas 0 22 458 308 options 0;
+#X obj 13 271 outlet;
+#X obj 15 23 r \$0-rv;
+#X obj 75 23 r \$0-gv;
+#X obj 135 23 r \$0-bv;
+#X obj 64 79 pack f f f;
+#X obj 64 100 prepend value;
+#X obj 145 52 bang;
+#X obj 154 199 pack f f f;
+#X obj 235 172 bang;
+#X obj 105 143 r \$0-rr;
+#X obj 165 143 r \$0-gr;
+#X obj 225 143 r \$0-br;
+#X obj 154 220 prepend range;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 2 0 6 0;
+#X connect 3 0 4 2;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 0 0;
+#X connect 6 0 4 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 0;
+#X connect 10 0 7 1;
+#X connect 10 0 8 0;
+#X connect 11 0 7 2;
+#X connect 11 0 8 0;
+#X connect 12 0 0 0;
+#X restore 34 130 pd options;
+#X text 13 291 It would be good if the colour_key sliders ghosted when
+on "mask" mode.;
+#X obj 188 200 pix_compare;
+#X obj 214 225 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X msg 214 251 direction \$1;
+#X connect 1 0 6 1;
+#X connect 1 0 8 1;
+#X connect 1 1 7 1;
+#X connect 1 1 9 1;
+#X connect 2 0 6 0;
+#X connect 2 0 7 0;
+#X connect 4 0 3 0;
+#X connect 5 0 8 0;
+#X connect 5 0 9 0;
+#X connect 6 0 4 0;
+#X connect 7 0 18 0;
+#X connect 8 0 4 1;
+#X connect 9 0 18 1;
+#X connect 10 0 1 0;
+#X connect 13 0 14 0;
+#X connect 16 0 4 0;
+#X connect 18 0 3 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X restore 13 157 pd interna;
+#X obj 13 93 inlet;
+#X obj 45 114 inlet;
+#X obj 78 135 inlet;
+#X obj 13 177 outlet;
+#X obj 78 177 outlet;
+#X obj 4 21 popup 124 25 grey95 Channel_fx Chroma-Key Luma-Key;
+#X obj 2 2 cnv 5 260 72 empty empty Channel_fx 5 6 1 9 -249661 -66577
+0;
+#X obj 140 6 hsl 115 15 125 1898 0 0 \$0-rv \$0-rvs key_out 40 8 1
+8 -258699 -1 -1 0 1;
+#X obj 140 21 hsl 115 15 125 1898 0 0 \$0-gv \$0-gvs key_out 40 8 1
+8 -24198 -1 -1 0 1;
+#X obj 140 36 hsl 115 15 125 1898 0 0 \$0-bv \$0-bvs key_out 40 8 1
+8 -62784 -1 -1 0 1;
+#X obj 137 55 nbx 4 15 0 1e+06 0 0 \$0-rr \$0-rrs empty -40 8 1 8 -258699
+-1 -1 0 256;
+#X obj 180 55 nbx 4 15 0 1e+06 0 0 \$0-gr \$0-grs empty 40 8 1 8 -24198
+-1 -1 0 256;
+#X obj 222 55 nbx 4 15 0 1e+06 0 0 \$0-br \$0-brs empty 40 8 1 8 -62784
+-1 -1 0 256;
+#X obj 30 53 comment 0 10 helvetica ? 0 0 0 0 Key Range: ->;
+#X obj 81 82 s \$0-effect;
+#X connect 0 0 4 0;
+#X connect 0 1 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 3 0 0 2;
+#X connect 6 0 15 0;
diff --git a/abstractions/pt.entry.pd b/abstractions/pt.entry.pd
new file mode 100644
index 0000000..04b8a05
--- /dev/null
+++ b/abstractions/pt.entry.pd
@@ -0,0 +1,105 @@
+#N canvas 531 201 130 142 10;
+#N canvas 667 321 508 411 interna 0;
+#X text 10 3 Control of text object in chain;
+#X obj 9 21 cnv 15 450 350 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 386 31 inlet;
+#X obj 402 350 outlet;
+#X obj 26 261 prepend text;
+#X obj 92 31 r \$0-text;
+#X msg 44 227 font \$1;
+#X obj 9 31 cnv 15 70 90 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 22 38 inlet;
+#X obj 22 65 outlet;
+#X obj 14 137 r \$0-font-size;
+#X msg 14 159 size \$1;
+#X obj 92 51 prepend text;
+#X obj 148 94 mementoSetup pt.entry \$0;
+#X obj 44 204 r \$0-font;
+#X obj 207 279 s \$0-font-popup;
+#X obj 207 222 dirlist;
+#X obj 268 234 print pt.entry-Font-Dir;
+#X msg 158 164 pattern *.ttf;
+#X obj 148 115 t b b;
+#X msg 207 190 set-dir /Applications/PixelTANGO/fonts;
+#X obj 156 138 delay 150;
+#X msg 33 302 list 1 2;
+#X obj 40 353 print;
+#X obj 39 325 t b l;
+#X obj 268 215 route set-dir;
+#X obj 207 256 prepend options;
+#X connect 2 0 13 0;
+#X connect 4 0 3 0;
+#X connect 5 0 12 0;
+#X connect 6 0 4 0;
+#X connect 8 0 9 0;
+#X connect 10 0 11 0;
+#X connect 11 0 4 0;
+#X connect 12 0 4 0;
+#X connect 13 0 19 0;
+#X connect 13 1 3 0;
+#X connect 14 0 6 0;
+#X connect 16 0 26 0;
+#X connect 18 0 16 0;
+#X connect 19 0 21 0;
+#X connect 19 1 20 0;
+#X connect 20 0 16 0;
+#X connect 20 0 25 0;
+#X connect 21 0 18 0;
+#X connect 22 0 24 0;
+#X connect 24 0 23 0;
+#X connect 24 1 23 0;
+#X connect 25 0 17 0;
+#X connect 26 0 15 0;
+#X restore 9 241 pd interna;
+#X obj 9 219 inlet;
+#X obj 74 219 inlet;
+#X obj 9 263 outlet;
+#X obj 74 263 outlet;
+#X obj 160 65 s \$0-text;
+#X obj 5 150 s \$0-font-size;
+#X msg 114 145 clear;
+#X obj 1 1 cnv 5 128 140 empty empty Text_Entry 5 6 1 9 -249661 -66577
+0;
+#X obj 7 121 nbx 3 14 -1e+37 1e+37 0 0 empty empty Size 35 8 1 9 -262144
+-1 -1 0 256;
+#X obj 114 2 bng 11 250 50 0 \$0- \$0 Send -22 6 1 8 -262144 -1 -1
+;
+#X obj 114 123 bng 11 250 50 0 \$0- \$0 Clear -22 7 1 8 -262144 -1
+-1;
+#X obj 141 3 commun /text \$0;
+#X obj 39 175 commun /font-size \$0;
+#X obj 171 43 prepend set;
+#X obj 3 14 entry 124 75 white black;
+#X obj 141 22 t b a;
+#X obj 165 199 s \$0-font;
+#X obj 251 116 commun /font \$0;
+#X obj 186 94 route bang;
+#X msg 159 236 options Empty;
+#X obj 186 146 popup_lister 500 \$0-font-popup;
+#X obj 3 92 popup 124 25 grey95 Font Empty;
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 7 0 15 0;
+#X connect 9 0 6 0;
+#X connect 9 0 13 0;
+#X connect 10 0 15 0;
+#X connect 11 0 7 0;
+#X connect 11 0 15 0;
+#X connect 12 0 16 0;
+#X connect 13 0 9 0;
+#X connect 14 0 15 0;
+#X connect 15 0 5 0;
+#X connect 15 0 12 0;
+#X connect 16 0 15 0;
+#X connect 16 1 14 0;
+#X connect 18 0 22 0;
+#X connect 19 0 21 0;
+#X connect 19 1 18 0;
+#X connect 20 0 22 0;
+#X connect 21 0 22 0;
+#X connect 22 0 19 0;
+#X connect 22 1 17 0;
+#X coords 0 0 1 1 130 142 1;
diff --git a/abstractions/pt.fader.pd b/abstractions/pt.fader.pd
new file mode 100644
index 0000000..5f545e5
--- /dev/null
+++ b/abstractions/pt.fader.pd
@@ -0,0 +1,119 @@
+#N canvas 1018 22 130 72 10;
+#X obj 1 1 cnv 5 128 70 empty empty empty 5 6 1 9 -249661 -66577 0
+;
+#X obj 9 23 hsl 112 15 0 255 0 0 \$0-r \$0-s empty -2 -6 0 8 -258699
+-1 -1 9744 1;
+#X obj 9 38 hsl 112 15 0 255 0 0 \$0-g \$0-s empty -2 -6 0 8 -24198
+-1 -1 6644 1;
+#X obj 9 53 hsl 112 15 0 255 0 0 \$0-b \$0-s empty -2 -6 0 8 -62784
+-1 -1 5600 1;
+#X text 4 75 Fader;
+#N canvas 59 504 724 521 interna 0;
+#X obj 9 24 cnv 15 200 250 empty empty empty 5 8 1 10 -3121 -1 0;
+#X text 10 7 Alpha based fader;
+#X obj 18 61 inlet;
+#X obj 35 247 outlet;
+#X obj 104 214 alpha;
+#X obj 52 142 colorRGB;
+#X obj 229 21 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 480 330 outlet;
+#X obj 427 29 inlet;
+#X obj 236 319 prepend alpha;
+#N canvas 147 263 235 178 invert 0;
+#X text 22 17 0-1 to 1-0;
+#X obj 25 49 inlet;
+#X obj 25 104 outlet;
+#X obj 25 76 expr (-1*$f1)+1;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X restore 236 300 pd invert;
+#X obj 236 338 outlet;
+#X text 282 338 Xfade;
+#X text 392 327 passthrough;
+#X obj 14 33 interp4 \$0-r \$0-g \$0-b \$0-a;
+#X obj 236 281 r \$0-a;
+#X obj 317 115 mementoSetup pt.fader \$0;
+#X text 20 313 test case for memento;
+#X obj 274 223 s \$0-s;
+#X text 312 204 <- conflict w/ state-saving?!;
+#X obj 273 182 delay 25;
+#X text 23 384 now turns alpha blending off when alpha value is set
+to >= 1;
+#X obj 126 170 r \$0-alpha;
+#X obj 239 115 pack f f f;
+#X obj 239 135 prepend colour;
+#X obj 237 31 r \$0-r;
+#X obj 287 31 r \$0-g;
+#X obj 337 31 r \$0-b;
+#X obj 287 53 t b f;
+#X obj 337 53 t b f;
+#X obj 42 86 / 255;
+#X obj 67 62 / 255;
+#X obj 97 87 / 255;
+#X obj 239 85 int;
+#X obj 284 85 int;
+#X obj 324 85 int;
+#X msg 274 202 255;
+#X connect 2 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 8 0 16 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 14 0 30 0;
+#X connect 14 1 31 0;
+#X connect 14 2 32 0;
+#X connect 14 3 5 4;
+#X connect 15 0 10 0;
+#X connect 16 0 20 0;
+#X connect 16 1 7 0;
+#X connect 20 0 36 0;
+#X connect 22 0 4 0;
+#X connect 23 0 24 0;
+#X connect 24 0 7 0;
+#X connect 25 0 33 0;
+#X connect 26 0 28 0;
+#X connect 27 0 29 0;
+#X connect 28 0 23 0;
+#X connect 28 1 34 0;
+#X connect 29 0 23 0;
+#X connect 29 1 35 0;
+#X connect 30 0 5 1;
+#X connect 31 0 5 2;
+#X connect 32 0 5 3;
+#X connect 33 0 23 0;
+#X connect 34 0 23 1;
+#X connect 35 0 23 2;
+#X connect 36 0 18 0;
+#X restore 14 123 pd interna;
+#X obj 14 101 inlet;
+#X obj 79 101 inlet;
+#X obj 14 145 outlet;
+#X obj 46 165 outlet;
+#X obj 79 185 outlet;
+#X obj 157 56 commun /a \$0;
+#X obj 157 75 commun /r \$0;
+#X obj 157 94 commun /g \$0;
+#X obj 157 113 commun /b \$0;
+#X obj 24 4 hsl 97 15 0 1 0 0 \$0-a \$0-s Fader 45 8 1 8 -225280 -1
+-1 9600 1;
+#X obj 6 4 tgl 15 0 \$0-alpha \$0-s empty 0 -6 0 8 -225280 -1 -1 1
+1;
+#X obj 157 36 commun /alpha \$0;
+#X connect 1 0 12 0;
+#X connect 2 0 13 0;
+#X connect 3 0 14 0;
+#X connect 5 0 8 0;
+#X connect 5 1 9 0;
+#X connect 5 2 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 1;
+#X connect 11 0 15 0;
+#X connect 12 0 1 0;
+#X connect 13 0 2 0;
+#X connect 14 0 3 0;
+#X connect 15 0 11 0;
+#X connect 16 0 17 0;
+#X connect 17 0 16 0;
+#X coords 0 0 1 1 130 72 1;
diff --git a/abstractions/pt.feedback.pd b/abstractions/pt.feedback.pd
new file mode 100644
index 0000000..46179f4
--- /dev/null
+++ b/abstractions/pt.feedback.pd
@@ -0,0 +1,204 @@
+#N canvas 433 42 134 136 10;
+#N canvas 433 329 796 469 interna 0;
+#X obj 425 20 cnv 15 300 300 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 8 20 cnv 15 400 350 empty empty empty 5 8 1 10 -3121 -1 0;
+#X msg 49 75 snap;
+#X obj 27 51 render_trigger;
+#X text 331 47 Before;
+#X obj 335 28 gemhead 1;
+#X obj 27 326 outlet;
+#X obj 27 28 inlet;
+#X msg 298 162 \$1 \$2;
+#X obj 198 138 pack f f;
+#X obj 198 68 r \$0-x-off;
+#X obj 219 112 t b f;
+#X obj 298 138 pack f f;
+#X obj 319 112 t b f;
+#X obj 298 68 r \$0-x-size;
+#X obj 319 89 r \$0-y-size;
+#X obj 672 297 outlet;
+#X obj 586 28 inlet;
+#X obj 27 275 translateXYZ 0 0 -1;
+#X obj 453 268 prepend videoPlaneCorrection;
+#X msg 453 246 1.33333;
+#X obj 219 89 r \$0-y-off;
+#X msg 198 162 \$1 \$2;
+#X text 511 246 A*;
+#X text 12 379 A* The feedback surface goes in front of the stack \,
+so it occludes anything that would normally feedback on it. We can't
+make the surface ORTHO or it stays in front of everything. Only problem
+with setting it back in the Z dimen is that it'll throw off the Video_Plane
+size!!! This is how we correct for the video plane size.;
+#X obj 453 181 delay 250;
+#X obj 453 155 mementoSetup pt.feedback \$0;
+#X obj 586 58 route headSet;
+#X obj 27 100 t a;
+#X obj 27 180 spigot;
+#X obj 27 228 pix_snap2tex \$1 \$2 \$3 \$4;
+#X obj 84 180 spigot;
+#X obj 63 112 r \$0-type;
+#N canvas 0 22 258 148 select 0;
+#X obj 47 97 outlet;
+#X obj 48 75 == 0;
+#X obj 56 31 loadbang;
+#X text 118 32 Default;
+#X msg 56 51 0;
+#X obj 103 97 outlet;
+#X obj 104 75 == 1;
+#X obj 32 8 inlet;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
+#X connect 6 0 5 0;
+#X connect 7 0 1 0;
+#X connect 7 0 6 0;
+#X restore 63 132 pd select;
+#X obj 84 251 pix_snap \$1 \$2 \$3 \$4;
+#N canvas 728 459 454 304 defaults 0;
+#X obj 18 46 f \$0;
+#X msg 18 67 \; \$1-x-off-set 64 \; \$1-y-off-set -16 \; \$1-x-size-set
+512 \; \$1-y-size-set 512;
+#X obj 18 25 inlet;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X restore 470 213 pd defaults;
+#N canvas 21 57 832 445 windowResolution 0;
+#X obj 62 23 r pt.windowResolution;
+#X obj 157 115 strcmp 640 480;
+#X obj 157 136 == 0;
+#X obj 297 112 strcmp 512 512;
+#X obj 437 112 strcmp 1024 512;
+#X obj 297 134 == 0;
+#X obj 437 134 == 0;
+#X obj 25 288 prepend \$0;
+#X msg 25 308 \; \$1-x-off-set 0 \; \$1-y-off-set 0 \; \$1-x-size-set
+\$2 \; \$1-y-size-set \$3;
+#X obj 157 267 select 1;
+#X obj 297 264 select 1;
+#X obj 437 264 select 1;
+#X obj 157 288 f \$0;
+#X msg 157 308 \; \$1-x-off-set 64 \; \$1-y-off-set -16 \; \$1-x-size-set
+512 \; \$1-y-size-set 512;
+#X obj 297 288 f \$0;
+#X obj 437 288 f \$0;
+#X msg 297 308 \; \$1-x-off-set 0 \; \$1-y-off-set 0 \; \$1-x-size-set
+512 \; \$1-y-size-set 512;
+#X msg 437 308 \; \$1-x-off-set 0 \; \$1-y-off-set 0 \; \$1-x-size-set
+1024 \; \$1-y-size-set 512;
+#X obj 62 44 prepend list;
+#X obj 25 267 lister;
+#X obj 72 67 t l l l;
+#X obj 227 182 ||;
+#X obj 211 207 ||;
+#X obj 211 229 select 0;
+#X text 226 22 Chooses good guess of pt.feedback settings for each
+window resolution.;
+#X text 319 379 ^ Redundant!;
+#X text 437 380 ^ Redundant!;
+#X connect 0 0 18 0;
+#X connect 1 0 2 0;
+#X connect 2 0 9 0;
+#X connect 2 0 22 0;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 10 0;
+#X connect 5 0 21 0;
+#X connect 6 0 11 0;
+#X connect 6 0 21 1;
+#X connect 7 0 8 0;
+#X connect 9 0 12 0;
+#X connect 10 0 14 0;
+#X connect 11 0 15 0;
+#X connect 12 0 13 0;
+#X connect 14 0 16 0;
+#X connect 15 0 17 0;
+#X connect 18 0 20 0;
+#X connect 18 0 19 1;
+#X connect 19 0 7 0;
+#X connect 20 0 1 0;
+#X connect 20 1 3 0;
+#X connect 20 2 4 0;
+#X connect 21 0 22 1;
+#X connect 22 0 23 0;
+#X connect 23 0 19 0;
+#X restore 246 335 pd windowResolution;
+#X connect 2 0 28 0;
+#X connect 3 0 28 0;
+#X connect 3 2 2 0;
+#X connect 5 0 28 0;
+#X connect 7 0 3 0;
+#X connect 8 0 30 2;
+#X connect 8 0 34 2;
+#X connect 9 0 22 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 11 1 9 1;
+#X connect 12 0 8 0;
+#X connect 13 0 12 0;
+#X connect 13 1 12 1;
+#X connect 14 0 12 0;
+#X connect 15 0 13 0;
+#X connect 17 0 27 0;
+#X connect 18 0 6 0;
+#X connect 19 0 16 0;
+#X connect 20 0 19 0;
+#X connect 21 0 11 0;
+#X connect 22 0 30 1;
+#X connect 22 0 34 1;
+#X connect 25 0 20 0;
+#X connect 25 0 35 0;
+#X connect 26 0 25 0;
+#X connect 26 1 16 0;
+#X connect 27 0 5 0;
+#X connect 27 1 26 0;
+#X connect 28 0 29 0;
+#X connect 28 0 31 0;
+#X connect 29 0 30 0;
+#X connect 30 0 18 0;
+#X connect 31 0 34 0;
+#X connect 32 0 33 0;
+#X connect 33 0 29 1;
+#X connect 33 1 31 1;
+#X connect 34 0 18 0;
+#X restore 9 191 pd interna;
+#X obj 9 169 inlet;
+#X obj 74 169 inlet;
+#X obj 9 213 outlet;
+#X obj 74 213 outlet;
+#X obj 1 1 cnv 5 128 130 empty empty Texture_Feedback 5 6 1 9 -249661
+-66577 0;
+#X obj 23 50 nbx 4 14 -1e+37 1e+37 0 0 \$0-x-off \$0-x-off-set X_Offset
+45 8 1 9 -262144 -1 -1 0 256;
+#X obj 23 90 nbx 4 14 -1e+37 1e+37 0 0 \$0-x-size \$0-x-size-set X_Size
+45 8 1 9 -262144 -1 -1 512 256;
+#X obj 23 110 nbx 4 14 -1e+37 1e+37 0 0 \$0-y-size \$0-y-size-set Y_Size
+45 8 1 9 -262144 -1 -1 512 256;
+#X obj 23 70 nbx 4 14 -1e+37 1e+37 0 0 \$0-y-off \$0-y-off-set Y_Offset
+45 8 1 9 -262144 -1 -1 0 256;
+#X obj 157 76 commun /x_off \$0;
+#X obj 157 95 commun /y_off \$0;
+#X obj 157 114 commun /x_size \$0;
+#X obj 157 134 commun /y_size \$0;
+#X obj 2 17 popup 124 25 grey95 Type snap snap2tex;
+#X obj 166 45 commun /type \$0;
+#X obj 164 16 route bang;
+#X text 8 244 Need to add functionality for popup and;
+#X obj 277 45 s \$0-type;
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 6 0 10 0;
+#X connect 7 0 12 0;
+#X connect 8 0 13 0;
+#X connect 9 0 11 0;
+#X connect 10 0 6 0;
+#X connect 11 0 9 0;
+#X connect 12 0 7 0;
+#X connect 13 0 8 0;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
+#X connect 16 1 15 0;
+#X connect 16 1 18 0;
+#X coords 0 0 1 1 130 132 1;
diff --git a/abstractions/pt.file.pd b/abstractions/pt.file.pd
new file mode 100644
index 0000000..af05ce2
--- /dev/null
+++ b/abstractions/pt.file.pd
@@ -0,0 +1,36 @@
+#N canvas 706 141 134 46 10;
+#X obj 1 1 cnv 5 128 40 empty empty File_Management 5 6 1 9 -249661
+-66577 0;
+#X text 8 133 Facility to choose and select files;
+#N canvas 0 22 489 278 interna 0;
+#X text 9 4 Facility to choose and select files;
+#X obj 115 20 cnv 15 350 240 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 293 156 prepend file;
+#X obj 417 27 inlet;
+#X obj 415 234 outlet;
+#X obj 8 20 cnv 15 100 240 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 21 34 inlet;
+#X obj 21 234 outlet;
+#X obj 293 134 prepend open;
+#X obj 293 112 openpanel;
+#X obj 293 92 r \$0-open;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 6 0 7 0;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X restore 10 185 pd interna;
+#X obj 10 163 inlet;
+#X obj 75 164 inlet;
+#X obj 10 207 outlet;
+#X obj 75 208 outlet;
+#X obj 143 110 s \$0-path;
+#X obj 7 18 bng 15 250 50 0 \$0-open \$0 Open 20 8 1 9 -262144 -1 -1
+;
+#X connect 2 0 5 0;
+#X connect 2 1 6 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 1;
+#X coords 0 0 1 1 130 42 1;
diff --git a/abstractions/pt.filelist.pd b/abstractions/pt.filelist.pd
new file mode 100644
index 0000000..1b7bb71
--- /dev/null
+++ b/abstractions/pt.filelist.pd
@@ -0,0 +1,97 @@
+#N canvas 394 251 130 112 10;
+#X obj 1 1 cnv 5 128 110 empty empty List_Files 5 6 1 9 -249661 -66577
+0;
+#N canvas 544 188 599 585 interna 0;
+#X obj 115 20 cnv 15 350 500 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 326 474 prepend file;
+#X obj 236 29 inlet;
+#X obj 420 503 outlet;
+#X obj 8 20 cnv 15 100 340 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 21 34 inlet;
+#X obj 21 334 outlet;
+#X obj 326 454 prepend open;
+#X text 9 4 Facility to glob directories of files;
+#X obj 164 218 dirlist;
+#X obj 235 145 r \$0-dir;
+#X obj 123 145 r \$0-pattern;
+#X obj 123 165 prepend pattern;
+#X obj 236 50 mementoSetup pt.filelist \$0;
+#X obj 236 90 f \$0;
+#X obj 164 266 s \$0-files;
+#X obj 326 434 r \$0-file;
+#X obj 164 242 prepend options;
+#X msg 253 191 set-dir \$1;
+#X msg 236 110 \; \$1-set-pattern symbol *;
+#X obj 235 219 s \$0-dir-in;
+#X obj 124 475 r \$0-reload;
+#X obj 124 497 s \$0-set-pattern;
+#X obj 304 145 r \$0-dir-out;
+#X obj 236 70 delay 65;
+#X text 21 533 if the directory is the same then don't send back to
+symbol;
+#X obj 235 165 dirpanel;
+#X connect 1 0 3 0;
+#X connect 2 0 13 0;
+#X connect 5 0 6 0;
+#X connect 7 0 1 0;
+#X connect 9 0 17 0;
+#X connect 10 0 26 0;
+#X connect 11 0 12 0;
+#X connect 12 0 9 0;
+#X connect 13 0 24 0;
+#X connect 13 1 3 0;
+#X connect 14 0 19 0;
+#X connect 16 0 7 0;
+#X connect 17 0 15 0;
+#X connect 18 0 9 0;
+#X connect 21 0 22 0;
+#X connect 23 0 18 0;
+#X connect 24 0 14 0;
+#X connect 26 0 18 0;
+#X connect 26 0 20 0;
+#X restore 10 295 pd interna;
+#X obj 10 273 inlet;
+#X obj 75 274 inlet;
+#X obj 10 317 outlet;
+#X obj 75 318 outlet;
+#X obj 7 18 bng 15 250 50 0 \$0-dir \$0 Dir 20 8 1 9 -262144 -1 -1
+;
+#X symbolatom 7 60 10 0 0 1 - #0-set-pattern #0-pattern;
+#X obj 83 62 cnv 5 15 10 empty empty Pattern 5 6 1 9 -249661 -1 0;
+#X obj 120 119 s \$0-file;
+#X text 9 249 Facility to glob directories of files;
+#X obj 386 30 commun /directory \$0;
+#X obj 245 122 s \$0-set-pattern;
+#X obj 245 30 commun /pattern \$0;
+#X text 118 291 Only pattern and directory are state-saved.;
+#X obj 245 10 r \$0-pattern;
+#X obj 106 18 bng 15 250 50 0 \$0-reload \$0 Update -38 8 1 9 -262144
+-1 -1;
+#X symbolatom 7 40 16 0 0 1 - #0-dir-in #0-dir-out;
+#X obj 386 51 prepend set;
+#X obj 245 51 prepend set;
+#X obj 301 76 r \$0-reload;
+#X obj 386 9 r \$0-dir-out;
+#X obj 386 122 s \$0-dir-in;
+#X obj 301 97 t b b;
+#X msg 17 215 options empty \, name files;
+#X obj 3 81 popup 124 25 grey95 files empty;
+#X obj 147 22 r \$0-files;
+#X connect 1 0 4 0;
+#X connect 1 1 5 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 1;
+#X connect 11 0 18 0;
+#X connect 13 0 19 0;
+#X connect 15 0 13 0;
+#X connect 18 0 22 0;
+#X connect 19 0 12 0;
+#X connect 20 0 23 0;
+#X connect 21 0 11 0;
+#X connect 23 0 12 0;
+#X connect 23 1 22 0;
+#X connect 24 0 25 0;
+#X connect 25 1 9 0;
+#X connect 26 0 25 0;
+#X coords 0 0 1 1 130 112 1;
diff --git a/abstractions/pt.interp.pd b/abstractions/pt.interp.pd
new file mode 100644
index 0000000..44be78b
--- /dev/null
+++ b/abstractions/pt.interp.pd
@@ -0,0 +1,60 @@
+#N canvas 330 211 130 49 10;
+#X obj 1 1 cnv 5 128 47 empty empty empty 5 6 1 9 -133153 -66577 0
+;
+#X text 6 52 Interpolation control;
+#N canvas 0 22 773 342 defaults 0;
+#X obj 80 74 f \$0;
+#X obj 31 19 loadbang;
+#X text 181 83 53.9 is equivalent to 0.8 after scaling.;
+#X obj 31 194 outlet;
+#X msg 31 169 0;
+#X text 66 169 Low-pass is the default;
+#X text 32 226 * Why does popup crash when you set its value? Is it
+taking too long to initialize so that its getting caught in the middle??
+;
+#X msg 79 96 53.9;
+#X obj 82 135 outlet;
+#X obj 57 51 delay 25;
+#X connect 0 0 7 0;
+#X connect 1 0 9 0;
+#X connect 4 0 3 0;
+#X connect 7 0 8 0;
+#X connect 9 0 0 0;
+#X restore 157 148 pd defaults;
+#X obj 95 99 s ptInterpType;
+#X obj 174 17 commun /smoothness \$0;
+#X obj 198 99 commun /type \$0;
+#N canvas 449 141 529 456 memento 0;
+#X obj 29 66 t b f;
+#X msg 29 90 set;
+#X msg 59 90 substate \$1;
+#X obj 222 217 route osc;
+#X obj 29 46 r pt.currentPreset;
+#X text 16 9 Does all the crap for memento naming/collection and abstraction
+registration \$1 is abst-name \$2 is \$0 variable;
+#X obj 305 75 inlet;
+#X obj 115 252 originator /pt/interp \$0;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 1 0 7 0;
+#X connect 2 0 7 0;
+#X connect 3 0 7 1;
+#X connect 4 0 0 0;
+#X connect 6 0 3 0;
+#X restore 42 175 pd memento;
+#X obj 43 151 r pt.osc;
+#X text 12 127 receive OSC on pt.osc;
+#X obj 3 21 popup 124 25 grey50 Interpolate Low-Pass Linear None;
+#X obj 9 4 hsl 112 14 1 100 1 0 ptInterpSmoothness \$0-set Smoothness
+30 8 1 8 -262144 -1 -128992 9610 1;
+#X obj 229 178 s \$0-set;
+#X obj 90 75 route bang;
+#X connect 2 1 11 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 7 0 6 0;
+#X connect 9 0 12 0;
+#X connect 10 0 4 0;
+#X connect 12 1 5 0;
+#X connect 12 1 3 0;
+#X coords 0 0 1 1 130 49 1;
diff --git a/abstractions/pt.layer.pd b/abstractions/pt.layer.pd
new file mode 100644
index 0000000..667fd35
--- /dev/null
+++ b/abstractions/pt.layer.pd
@@ -0,0 +1,74 @@
+#N canvas 80 467 130 22 10;
+#X obj 1 1 cnv 5 128 20 empty empty empty 5 6 1 9 -128992 -66577 0
+;
+#X obj 7 3 tgl 15 0 \$0-head \$0-headset \$1-Layer 20 9 1 12 -262144
+-1 -33289 1 1;
+#N canvas 100 22 579 363 interna 0;
+#X text 5 6 Render priority \, layer visibility;
+#X obj 263 6 cnv 15 200 250 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 414 230 outlet;
+#X obj 10 23 cnv 15 100 230 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 22 185 outlet;
+#X obj 22 160 gemhead \$1;
+#X obj 22 55 r \$0-head;
+#X obj 39 109 loadbang;
+#X obj 287 171 r \$0-head;
+#X obj 287 193 prepend headSet;
+#X obj 339 130 register-head \$1;
+#N canvas 47 258 474 324 memento 0;
+#X obj 29 66 t b f;
+#X msg 29 90 set;
+#X msg 59 90 substate \$1;
+#X obj 222 217 route osc;
+#X obj 115 214 prepend create;
+#X obj 29 46 r pt.currentPreset;
+#X text 16 9 Does all the crap for memento naming/collection and abstraction
+registration \$1 is abst-name \$2 is \$0 variable;
+#X obj 305 75 inlet;
+#X obj 305 262 outlet;
+#X obj 150 168 list2osc;
+#X obj 150 121 f \$1;
+#X obj 150 99 loadbang;
+#X msg 150 144 list pt \$1;
+#X obj 115 252 originator NOTSET \$0;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 1 0 13 0;
+#X connect 2 0 13 0;
+#X connect 3 0 13 1;
+#X connect 4 0 13 0;
+#X connect 5 0 0 0;
+#X connect 7 0 3 0;
+#X connect 7 0 8 0;
+#X connect 9 0 4 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
+#X connect 12 0 9 0;
+#X restore 368 90 pd memento;
+#X obj 416 14 inlet;
+#X msg 39 133 0;
+#X text 22 270 All layers are initiall invisible \, overridden by memento
+state;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 13 0;
+#X connect 8 0 9 0;
+#X connect 9 0 2 0;
+#X connect 10 0 2 0;
+#X connect 11 0 2 0;
+#X connect 12 0 11 0;
+#X connect 13 0 5 0;
+#X connect 13 0 9 0;
+#X restore 5 73 pd interna;
+#X text 3 29 Render priority \, layer visibility;
+#X obj 5 96 outlet;
+#X obj 69 96 outlet;
+#X obj 5 50 inlet;
+#X obj 145 58 commun /vis \$0;
+#X connect 1 0 7 0;
+#X connect 2 0 4 0;
+#X connect 2 1 5 0;
+#X connect 6 0 2 0;
+#X connect 7 0 1 0;
+#X coords 0 0 1 1 130 22 1;
diff --git a/abstractions/pt.layerfx.pd b/abstractions/pt.layerfx.pd
new file mode 100644
index 0000000..79deff6
--- /dev/null
+++ b/abstractions/pt.layerfx.pd
@@ -0,0 +1,100 @@
+#N canvas 76 42 130 49 10;
+#X obj 1 1 cnv 5 128 47 empty empty empty 5 6 1 9 -249661 -66577 0
+;
+#X text 6 52 layer_fx;
+#X obj 10 91 inlet;
+#X obj 10 135 outlet;
+#X obj 75 135 outlet;
+#X obj 152 4 commun /amount \$0;
+#X obj 212 82 commun /fx-index \$0;
+#X obj 9 4 hsl 112 14 0.01 1 0 0 \$0-fxAmount \$0 fx_amount 38 8 1
+8 -262144 -1 -128992 0 1;
+#X obj 233 57 s \$0-index;
+#X text 122 262 Due to dynamics this index could change!! Use symbol
+references? (how to manage them?) dir2Abstraction array would need
+to do the work... the paths would be absolute.;
+#X obj 159 28 route bang;
+#X obj 75 91 inlet;
+#N canvas 135 22 674 578 new 0;
+#X obj 13 28 inlet;
+#X text 13 -1 Pixel Effects;
+#X obj 13 447 outlet;
+#X obj 380 8 cnv 15 250 140 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 569 20 inlet;
+#X obj 569 123 outlet;
+#X obj 65 46 r \$0-fxAmount;
+#X obj 392 58 mementoSetup pt.layerfx \$0;
+#X obj 119 389 prepend options;
+#X obj 169 313 r \$0-index;
+#X obj 119 416 s \$0-index-set;
+#X msg 72 168 pattern fx/*.pd;
+#X text 416 233 ^ Hard-coded \, bad bad bad!;
+#X obj 84 72 r pt.updateArrays;
+#X obj 137 95 loadbang;
+#X msg 202 247 clear bang;
+#X obj 248 343 print pt.layerfx-Dynamic-FX;
+#X msg 248 293 bang;
+#X obj 13 346 dir2abstractionArray \$0;
+#X obj 392 80 s \$0-defaults;
+#X obj 448 129 route layerNum;
+#X obj 383 419 print DEBUG;
+#X msg 145 198 set-dir /Applications/PixelTANGO-CVS/abstractions/;
+#X obj 383 370 pack s s f;
+#X obj 262 318 prepend symbol;
+#X msg 383 397 Dir: \$2 Read-dir: \$1 Layernum \$3;
+#X obj 415 292 prepend symbol;
+#X obj 123 116 t b b b;
+#X obj 415 270 route set-dir;
+#X connect 0 0 18 0;
+#X connect 4 0 7 0;
+#X connect 6 0 18 1;
+#X connect 7 0 19 0;
+#X connect 7 1 5 0;
+#X connect 7 1 20 0;
+#X connect 8 0 10 0;
+#X connect 9 0 18 3;
+#X connect 11 0 17 0;
+#X connect 11 0 18 2;
+#X connect 13 0 27 0;
+#X connect 14 0 27 0;
+#X connect 15 0 18 2;
+#X connect 17 0 16 0;
+#X connect 17 0 24 0;
+#X connect 18 0 2 0;
+#X connect 18 2 8 0;
+#X connect 20 0 23 2;
+#X connect 22 0 18 2;
+#X connect 22 0 28 0;
+#X connect 23 0 25 0;
+#X connect 24 0 23 0;
+#X connect 25 0 21 0;
+#X connect 26 0 23 1;
+#X connect 27 0 11 0;
+#X connect 27 1 22 0;
+#X connect 27 2 15 0;
+#X connect 28 0 26 0;
+#X restore 16 112 pd new interna;
+#X msg 140 207 options empty;
+#X obj 3 21 popup 124 25 grey95 Effects Passthrough /Applications/PixelTANGO-CVS/abstractions/fx/edge.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/emboss.pd /Applications/PixelTANGO-CVS/abstractions/fx/gain.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/motionblur.pd /Applications/PixelTANGO-CVS/abstractions/fx/negative.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/normalize.pd /Applications/PixelTANGO-CVS/abstractions/fx/posterize.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/randomdot.pd /Applications/PixelTANGO-CVS/abstractions/fx/roll.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/rtx-DANGER_USE_AT_YOUR_OWN_RISK.pd
+/Applications/PixelTANGO-CVS/abstractions/fx/scanline.pd;
+#X obj 159 105 popup_lister 500 \$0-index-set;
+#X connect 2 0 12 0;
+#X connect 5 0 7 0;
+#X connect 6 0 14 0;
+#X connect 7 0 5 0;
+#X connect 10 0 15 0;
+#X connect 10 1 6 0;
+#X connect 10 1 8 0;
+#X connect 11 0 12 1;
+#X connect 12 0 3 0;
+#X connect 12 1 4 0;
+#X connect 13 0 14 0;
+#X connect 14 0 10 0;
+#X connect 15 0 14 0;
+#X coords 0 0 1 1 130 49 1;
diff --git a/abstractions/pt.light.pd b/abstractions/pt.light.pd
new file mode 100644
index 0000000..70c7916
--- /dev/null
+++ b/abstractions/pt.light.pd
@@ -0,0 +1,125 @@
+#N canvas 607 382 130 132 10;
+#X obj 1 1 cnv 5 128 130 empty empty \$1-Light 5 7 1 11 -133153 -1
+0;
+#X obj 113 3 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#X obj 34 39 hsl 60 15 0 1 0 0 \$0-r \$0-sc empty -2 -6 2 8 -258699
+-1 -1 5900 1;
+#X obj 34 56 hsl 60 15 0 1 0 0 \$0-g \$0-sc empty -2 -6 2 8 -24198
+-1 -1 5900 1;
+#X obj 34 73 hsl 60 15 0 1 0 0 \$0-b \$0-sc empty -2 -6 2 8 -62784
+-1 -1 5900 1;
+#X obj 14 111 hsl 100 15 -2 7 0 0 \$0-z \$0-sz empty -2 -6 2 8 -262144
+-1 -1 6600 1;
+#X obj 11 35 vsl 15 70 -4 4 0 0 \$0-y \$0-sxy empty 0 -8 2 8 -262144
+-1 -1 3450 1;
+#X obj 29 18 hsl 70 15 -4 4 0 0 \$0-x \$0-sxy empty -2 -6 2 8 -262144
+-1 -1 3450 1;
+#X obj 101 33 cnv 15 15 75 empty empty empty 20 12 0 14 -166441 -66577
+0;
+#X obj 34 90 hsl 60 15 0 1 0 0 \$0-sc \$0-sb empty -2 -6 2 8 -262144
+-1 -1 5900 1;
+#N canvas 518 270 481 403 interna 0;
+#X obj 19 127 translateXYZ;
+#N canvas 736 91 337 192 defaults 0;
+#X obj 151 25 r \$0-reset;
+#X msg 30 69 1;
+#X obj 30 90 s \$0-sc;
+#X obj 87 90 s \$0-sxy;
+#X msg 87 69 0;
+#X msg 151 69 4;
+#X obj 151 90 s \$0-sz;
+#X obj 15 112 s \$0-sb;
+#X obj 30 26 bang;
+#X obj 30 5 inlet;
+#X connect 0 0 5 0;
+#X connect 0 0 4 0;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 7 0;
+#X connect 4 0 3 0;
+#X connect 5 0 6 0;
+#X connect 8 0 1 0;
+#X connect 8 0 4 0;
+#X connect 8 0 5 0;
+#X connect 9 0 8 0;
+#X restore 241 185 pd defaults;
+#X obj 29 86 interp3 \$0-x \$0-y \$0-z;
+#X obj 19 325 light;
+#X obj 49 285 pack f f f;
+#X obj 125 285 bang;
+#X text 7 3 Light;
+#X obj 18 44 gemhead 5;
+#N canvas 632 292 525 452 memento 0;
+#X obj 29 66 t b f;
+#X msg 29 90 set;
+#X msg 59 90 substate \$1;
+#X obj 222 237 route osc;
+#X obj 29 46 r pt.currentPreset;
+#X obj 305 75 inlet;
+#X obj 66 281 originator /pt/light \$0;
+#X obj 84 253 prepend create;
+#X obj 84 225 list2osc;
+#X msg 84 200 pt light \$1;
+#X obj 84 179 f \$1;
+#X obj 69 120 loadbang;
+#X text 16 9 Here we are using the first creation argument to pt.light
+as the instance number. 1-8;
+#X obj 53 150 t b b;
+#X obj 53 328 outlet;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 3 0 6 1;
+#X connect 4 0 0 0;
+#X connect 5 0 3 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 11 0 13 0;
+#X connect 13 0 14 0;
+#X connect 13 1 10 0;
+#X restore 241 139 pd memento;
+#X obj 241 117 r pt.osc;
+#X text 210 93 receive OSC on pt.osc;
+#X obj 241 162 delay 25;
+#X text 32 362 Added interpolation for light colours (for state-animation)
+;
+#X obj 49 241 interp3 \$0-r \$0-g \$0-b;
+#X connect 0 0 3 0;
+#X connect 2 0 0 1;
+#X connect 2 1 0 2;
+#X connect 2 2 0 3;
+#X connect 4 0 3 1;
+#X connect 5 0 4 0;
+#X connect 7 0 0 0;
+#X connect 8 0 11 0;
+#X connect 9 0 8 0;
+#X connect 11 0 1 0;
+#X connect 13 0 4 0;
+#X connect 13 1 4 1;
+#X connect 13 1 5 0;
+#X connect 13 2 4 2;
+#X connect 13 2 5 0;
+#X restore 11 141 pd interna;
+#X obj 157 55 commun /r \$0;
+#X obj 157 74 commun /g \$0;
+#X obj 157 93 commun /b \$0;
+#X obj 157 16 commun /x \$0;
+#X obj 157 36 commun /y \$0;
+#X obj 157 112 commun /z \$0;
+#X connect 2 0 11 0;
+#X connect 3 0 12 0;
+#X connect 4 0 13 0;
+#X connect 5 0 16 0;
+#X connect 6 0 15 0;
+#X connect 7 0 14 0;
+#X connect 11 0 2 0;
+#X connect 12 0 3 0;
+#X connect 13 0 4 0;
+#X connect 14 0 7 0;
+#X connect 15 0 6 0;
+#X connect 16 0 5 0;
+#X coords 0 0 0.00214592 0.00316456 130 132 1;
diff --git a/abstractions/pt.live.pd b/abstractions/pt.live.pd
new file mode 100644
index 0000000..0dd694b
--- /dev/null
+++ b/abstractions/pt.live.pd
@@ -0,0 +1,58 @@
+#N canvas 774 401 130 25 10;
+#X obj 1 1 cnv 5 128 23 empty empty live 5 10 1 9 -249661 -66577 0
+;
+#N canvas 659 355 538 319 interna 0;
+#X obj 20 38 inlet;
+#X obj 22 266 outlet;
+#X obj 225 32 cnv 15 300 250 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 441 46 inlet;
+#X obj 442 259 outlet;
+#X text 23 9 Live Video;
+#X obj 32 191 pix_video \$1 \$2;
+#X msg 100 112 dimen \$1 \$2;
+#X obj 102 48 r \$0-x;
+#X obj 152 48 r \$0-y;
+#X obj 110 82 pack f f;
+#X obj 172 82 bang;
+#N canvas 0 22 466 316 defaults 0;
+#X obj 17 75 f \$1;
+#X obj 57 75 f \$2;
+#X obj 17 104 s \$0-xs;
+#X obj 57 129 s \$0-ys;
+#X obj 17 17 inlet;
+#X text 42 203 Do these make any sense as defaults???;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 4 0 0 0;
+#X connect 4 0 1 0;
+#X restore 286 167 pd defaults;
+#X obj 286 142 delay 25;
+#X obj 286 115 mementoSetup pt.live \$0;
+#X connect 0 0 6 0;
+#X connect 3 0 14 0;
+#X connect 6 0 1 0;
+#X connect 7 0 6 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 9 0 10 1;
+#X connect 10 0 7 0;
+#X connect 11 0 10 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 14 1 4 0;
+#X restore 10 103 pd interna;
+#X obj 10 81 inlet;
+#X obj 75 81 inlet;
+#X obj 10 125 outlet;
+#X obj 75 125 outlet;
+#X obj 27 4 nbx 4 14 -1e+37 1e+37 0 0 \$0-x \$0-xs empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X obj 77 4 nbx 4 14 -1e+37 1e+37 0 0 \$0-y \$0-ys empty 0 -6 0 10
+-262144 -1 -1 0 256;
+#X text 6 52 live video;
+#X connect 1 0 4 0;
+#X connect 1 1 5 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 1;
+#X coords 0 0 1 1 130 25 1;
diff --git a/abstractions/pt.loop.pd b/abstractions/pt.loop.pd
new file mode 100644
index 0000000..6657ceb
--- /dev/null
+++ b/abstractions/pt.loop.pd
@@ -0,0 +1,153 @@
+#N canvas 1024 150 130 138 10;
+#X obj 1 1 cnv 5 128 136 empty empty empty 5 6 1 9 -249661 -66577 0
+;
+#X obj 4 4 tgl 15 0 \$0-loop \$0- Loop_Film 25 8 1 8 -262144 -1 -33289
+0 1;
+#X obj 8 92 hsl 112 15 198 5 1 0 \$0-rate empty play_rate 38 8 1 8
+-262144 -1 -128992 0 1;
+#X obj 8 23 hsl 115 15 0 100 0 0 \$0-in_slider \$0-ins in_point 40
+8 1 8 -262144 -1 -128992 0 1;
+#X obj 8 38 hsl 115 15 0 100 0 0 \$0-out_slider \$0-outs out_point
+37 8 1 8 -262144 -1 -128992 0 1;
+#N canvas 722 265 625 550 interna 0;
+#X text 15 9 Film Looper;
+#X obj 146 8 cnv 15 270 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 353 16 inlet;
+#X obj 366 325 outlet;
+#X obj 8 27 cnv 15 100 320 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 16 38 inlet;
+#X obj 19 326 outlet;
+#X obj 178 259 prepend loopPos;
+#X obj 151 149 route loop rate type in out numFrames;
+#N canvas 207 285 609 630 looper 0;
+#X text 74 18 Initialize;
+#X msg 26 78 33;
+#X obj 87 157 r \$0-loop;
+#X obj 87 205 metro 33;
+#X obj 152 231 + 1;
+#X obj 152 206 r \$0-direction;
+#X obj 86 407 outlet;
+#X obj 87 382 counter 1 100 3;
+#X obj 102 102 s \$0-ins;
+#X obj 163 102 s \$0-outs;
+#X obj 43 157 inlet;
+#X obj 247 179 inlet;
+#X obj 257 206 inlet;
+#X obj 283 240 inlet;
+#X obj 312 312 inlet;
+#X obj 158 328 t b f;
+#X msg 163 77 100;
+#X obj 382 107 inlet;
+#X obj 211 355 expr ($f1/100)*$f2;
+#X obj 189 283 expr ($f1/100)*$f2;
+#X obj 122 38 r \$0-reset;
+#X obj 233 101 s \$0-directions;
+#X obj 26 102 s \$0-rates;
+#X msg 233 77 0;
+#X obj 382 134 t b b f f;
+#X msg 102 77 0;
+#X text 42 455 Replace with cyclone counter in future?;
+#X text 45 476 * added to fix expr /0 error;
+#X msg 99 355 clear;
+#X obj 21 39 bang;
+#X obj 20 14 inlet;
+#X obj 189 240 r \$0-loop-in;
+#X obj 211 312 r \$0-loop-out;
+#X obj 137 179 r \$0-rate;
+#X connect 1 0 22 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 7 1;
+#X connect 5 0 4 0;
+#X connect 7 0 6 0;
+#X connect 10 0 3 0;
+#X connect 11 0 3 1;
+#X connect 12 0 4 0;
+#X connect 13 0 19 0;
+#X connect 14 0 18 0;
+#X connect 15 0 28 0;
+#X connect 15 1 7 2;
+#X connect 16 0 9 0;
+#X connect 17 0 24 0;
+#X connect 18 0 7 3;
+#X connect 19 0 15 0;
+#X connect 20 0 1 0;
+#X connect 20 0 25 0;
+#X connect 20 0 16 0;
+#X connect 20 0 23 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 24 1 16 0;
+#X connect 24 2 19 1;
+#X connect 24 3 18 1;
+#X connect 25 0 8 0;
+#X connect 28 0 7 0;
+#X connect 29 0 1 0;
+#X connect 29 0 25 0;
+#X connect 29 0 16 0;
+#X connect 30 0 29 0;
+#X connect 31 0 19 0;
+#X connect 32 0 18 0;
+#X connect 33 0 3 1;
+#X restore 178 216 pd looper ------------;
+#X text 16 356 Outputs absolute frame numbers;
+#X text 19 378 Find different method to send "numFrames" through control
+bus.;
+#X obj 178 46 mementoSetup pt.loop \$0;
+#X obj 178 72 delay 250;
+#X connect 2 0 12 0;
+#X connect 2 0 8 0;
+#X connect 5 0 6 0;
+#X connect 7 0 3 0;
+#X connect 8 0 9 1;
+#X connect 8 1 9 2;
+#X connect 8 2 9 3;
+#X connect 8 3 9 4;
+#X connect 8 4 9 5;
+#X connect 8 5 9 6;
+#X connect 8 6 3 0;
+#X connect 9 0 7 0;
+#X connect 12 0 13 0;
+#X connect 12 1 3 0;
+#X connect 13 0 9 0;
+#X restore 10 219 pd interna;
+#X obj 10 197 inlet;
+#X obj 75 198 inlet;
+#X obj 10 241 outlet;
+#X obj 75 242 outlet;
+#X obj 193 185 s \$0-direction;
+#X obj 5 57 nbx 8 15 0 1e+06 0 0 \$0-loop-in \$0-in_slider In_Point
+65 8 1 8 -262144 -1 -1 0 256;
+#X obj 5 73 nbx 8 15 0 1e+06 0 0 \$0-loop-out \$0-out_slider Out_Point
+65 8 1 8 -262144 -1 -1 0 256;
+#X obj 113 6 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#X obj 168 136 r \$0-directions;
+#X obj 143 5 commun /loop \$0;
+#X obj 151 51 commun /in-point \$0;
+#X obj 151 74 commun /out-point \$0;
+#X obj 151 106 commun /rate \$0;
+#X obj 151 205 commun /direction \$0;
+#X text 14 148 Film Looper;
+#X obj 128 163 route bang;
+#X obj 2 110 popup 124 25 grey95 Direction Forward Reverse Ping-Pong
+;
+#X connect 1 0 15 0;
+#X connect 2 0 18 0;
+#X connect 3 0 16 0;
+#X connect 4 0 17 0;
+#X connect 5 0 8 0;
+#X connect 5 1 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 1;
+#X connect 14 0 22 0;
+#X connect 15 0 1 0;
+#X connect 16 0 3 0;
+#X connect 17 0 4 0;
+#X connect 18 0 2 0;
+#X connect 19 0 22 0;
+#X connect 21 1 19 0;
+#X connect 21 1 10 0;
+#X connect 22 0 21 0;
+#X coords 0 0 1 1 130 138 1;
diff --git a/abstractions/pt.model.pd b/abstractions/pt.model.pd
new file mode 100644
index 0000000..6035e3a
--- /dev/null
+++ b/abstractions/pt.model.pd
@@ -0,0 +1,22 @@
+#N canvas 684 385 150 42 10;
+#N canvas 594 292 458 308 interna 0;
+#X obj 16 33 inlet;
+#X obj 18 228 model;
+#X text 12 5 Obj Model;
+#X obj 159 5 cnv 15 200 250 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 311 15 inlet;
+#X obj 195 109 route file;
+#X obj 232 185 register-tail;
+#X connect 0 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
+#X connect 5 1 6 0;
+#X restore 13 52 pd interna;
+#X obj 13 29 inlet;
+#X obj 78 30 inlet;
+#X obj 2 1 cnv 5 128 16 empty empty 3D_Model 5 9 1 12 -128992 -1 0
+;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X coords 0 0 1 1 130 16 1;
diff --git a/abstractions/pt.presets.pd b/abstractions/pt.presets.pd
new file mode 100644
index 0000000..7902570
--- /dev/null
+++ b/abstractions/pt.presets.pd
@@ -0,0 +1,65 @@
+#N canvas 110 194 130 71 10;
+#X obj 1 1 cnv 5 128 70 empty empty Parameter_Presets 5 6 1 9 -133153
+-1 0;
+#N canvas 390 164 447 548 interna 0;
+#X obj 10 24 cnv 15 280 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X text 10 7 Manage Memento Presets;
+#X obj 43 39 inlet;
+#X obj 106 230 r \$0-save;
+#X obj 65 93 r \$0-load;
+#X text 89 38 care-taker commands;
+#X obj 43 327 caretaker RRADICAL;
+#X obj 65 113 openpanel;
+#X obj 106 250 savepanel;
+#X msg 106 270 file \$1 \, save RRADICAL;
+#X text 21 394 Recreate pt.presets with a "symbol" to store the preset
+name. The default name should be [patchname-presets.dat] saved to the
+same folder as the main patch. Need externas (toxy?) to get the directory
+of the main patch \, and also the name of the main patch. You know
+what is better? Leave it like this and add a space for a custom name
+for each preset state.;
+#X msg 65 133 file \$1 \, load RRADICAL;
+#X connect 2 0 6 0;
+#X connect 3 0 8 0;
+#X connect 4 0 7 0;
+#X connect 7 0 11 0;
+#X connect 8 0 9 0;
+#X connect 9 0 6 0;
+#X connect 11 0 6 0;
+#X restore 7 168 pd interna;
+#X obj 10 46 bng 15 250 50 0 \$0-save \$0 Save 20 8 1 9 -237178 -1
+-1;
+#X text 218 76 The file Management here is a little ugly...;
+#X obj 60 46 bng 15 250 50 0 \$0-load \$0 Load 20 8 1 9 -237178 -1
+-1;
+#X text 4 124 Preset Control;
+#X text 233 399 TODO: Add "append" functionality to popup so that each
+of the presets can be named.;
+#X text 239 115 What is the easiest and most simple way to create this
+object? On loadbang it could load the pool \, and this way you would
+not really have to worry about it \, unless you need to manage the
+files \, ie sets of sets... This would be most useful for the animation
+stuff... maybe only the "save" bang should be available? Other methods
+can be accessed via messages? open \, save and file can be accessed
+by sending messages to inlet;
+#X obj 52 144 inlet;
+#X obj 4 79 inlet;
+#X text 48 80 Set Preset;
+#X obj 3 14 popup 124 25 grey50 Presets Preset-01 Preset-02 Preset-03
+Preset-04 Preset-05 Preset-06 Preset-07 Preset-08 Preset-09 Preset-10
+;
+#X obj 140 35 s pt.currentPreset;
+#X text 237 230 After discussion on mailinglist you decided that both
+"load" and "save" would actually set the filename explicitly first.
+[file \$1 \, load] [file \$1 \, save];
+#X text 236 295 Recreate pt.presets with a "symbol" to store the preset
+name. The default name should be [patchname-presets.dat] saved to the
+same folder as the main patch. Need externas (toxy?) to get the directory
+of the main patch \, and also the name of the main patch. You know
+what is better? Leave it like this and add a space for a custom name
+for each preset state.;
+#X connect 8 0 1 0;
+#X connect 9 0 11 0;
+#X connect 11 0 12 0;
+#X coords 0 0 1 1 130 72 1;
diff --git a/abstractions/pt.rotate.pd b/abstractions/pt.rotate.pd
new file mode 100644
index 0000000..88f0466
--- /dev/null
+++ b/abstractions/pt.rotate.pd
@@ -0,0 +1,57 @@
+#N canvas 568 49 130 68 10;
+#N canvas 608 369 558 377 interna 0;
+#X obj 12 43 inlet;
+#X obj 19 325 outlet;
+#X obj 222 4 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 407 14 inlet;
+#X obj 424 319 outlet;
+#X obj 65 251 rotateXYZ;
+#X text 7 3 Rotate;
+#X obj 43 121 interp3 \$0-x \$0-y \$0-z;
+#X obj 237 247 s \$0-s;
+#X obj 247 205 delay 250;
+#X text 317 205 <- conflict w/ state-saving!;
+#X msg 237 226 0;
+#X obj 237 79 r \$0-reset;
+#X obj 254 148 mementoSetup pt.rotate \$0;
+#X connect 0 0 5 0;
+#X connect 3 0 13 0;
+#X connect 5 0 1 0;
+#X connect 7 0 5 1;
+#X connect 7 1 5 2;
+#X connect 7 2 5 3;
+#X connect 9 0 11 0;
+#X connect 11 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 9 0;
+#X connect 13 1 4 0;
+#X restore 11 99 pd interna;
+#X obj 1 1 cnv 5 128 66 empty empty Rotate 5 7 1 9 -249661 -66577 0
+;
+#X obj 6 19 hsl 117 15 -180 180 0 0 \$0-x \$0-s X 53 8 1 8 -262144
+-1 -1 2950 1;
+#X obj 6 34 hsl 117 15 -180 180 0 0 \$0-y \$0-s Y 53 8 1 8 -262144
+-1 -1 5350 1;
+#X obj 6 49 hsl 117 15 -180 180 0 0 \$0-z \$0-s Z 53 8 1 8 -262144
+-1 -1 2950 1;
+#X obj 113 3 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#X obj 11 78 inlet;
+#X obj 76 78 inlet;
+#X obj 11 120 outlet;
+#X obj 76 120 outlet;
+#X obj 157 56 commun /x \$0;
+#X obj 157 75 commun /y \$0;
+#X obj 157 94 commun /z \$0;
+#X connect 0 0 8 0;
+#X connect 0 1 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 11 0;
+#X connect 4 0 12 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 1;
+#X connect 10 0 2 0;
+#X connect 11 0 3 0;
+#X connect 12 0 4 0;
+#X coords 0 0 1 1 130 68 1;
diff --git a/abstractions/pt.scale.pd b/abstractions/pt.scale.pd
new file mode 100644
index 0000000..9963fd5
--- /dev/null
+++ b/abstractions/pt.scale.pd
@@ -0,0 +1,49 @@
+#N canvas 277 474 130 42 10;
+#N canvas 96 361 525 397 intera 0;
+#X obj 26 56 inlet;
+#X obj 26 322 outlet;
+#X obj 154 4 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 407 14 inlet;
+#X obj 411 319 outlet;
+#X obj 26 277 scaleXYZ;
+#X text 7 3 Scale;
+#X obj 53 182 r \$0-scale;
+#X obj 53 236 interp1;
+#X obj 170 247 s \$0-s;
+#X obj 180 205 delay 250;
+#X text 250 205 <- conflict w/ state-saving!;
+#X obj 170 79 r \$0-reset;
+#X msg 170 226 1;
+#X obj 248 140 mementoSetup pt.scale \$0;
+#X connect 0 0 5 0;
+#X connect 3 0 14 0;
+#X connect 5 0 1 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 1;
+#X connect 8 0 5 2;
+#X connect 8 0 5 3;
+#X connect 10 0 13 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X connect 14 0 10 0;
+#X connect 14 1 4 0;
+#X restore 16 104 pd intera;
+#X obj 1 1 cnv 5 128 40 empty empty Scale 5 7 1 9 -249661 -66577 0
+;
+#X obj 10 19 hsl 112 15 0.1 7 0 0 \$0-scale \$0-s Scale 47 8 1 8 -262144
+-1 -1 0 1;
+#X obj 113 3 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#X obj 16 82 inlet;
+#X obj 74 82 inlet;
+#X obj 16 126 outlet;
+#X obj 74 126 outlet;
+#X obj 157 56 commun /s \$0;
+#X connect 0 0 6 0;
+#X connect 0 1 7 0;
+#X connect 2 0 8 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 1;
+#X connect 8 0 2 0;
+#X coords 0 0 1 1 130 42 1;
diff --git a/abstractions/pt.source.pd b/abstractions/pt.source.pd
new file mode 100644
index 0000000..2b6d96b
--- /dev/null
+++ b/abstractions/pt.source.pd
@@ -0,0 +1,131 @@
+#N canvas 262 445 130 32 10;
+#N canvas 207 307 869 475 interna 0;
+#X obj 364 47 cnv 15 300 250 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 605 57 inlet;
+#X obj 11 47 cnv 15 350 250 empty empty empty 5 8 1 10 -3121 -1 0;
+#X text 10 3 Input Source Selection (dv \, stream \, analog \, qt \,
+image \, buffer);
+#X obj 22 187 pix_image;
+#X obj 110 187 pix_film;
+#X obj 22 162 spigot;
+#X obj 110 163 spigot;
+#X obj 615 276 outlet;
+#X obj 21 57 inlet;
+#N canvas 591 359 481 390 selector 0;
+#X obj 23 34 inlet;
+#X obj 33 178 outlet;
+#X obj 81 178 outlet;
+#X obj 128 178 outlet;
+#X obj 34 156 == 0;
+#X obj 81 156 == 1;
+#X obj 128 156 == 2;
+#X obj 84 111 loadbang;
+#X msg 84 131 1;
+#X text 146 112 Default;
+#X text 67 35 Which stream? (0-image \, 1-movie \, 2-stream);
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 4 0 1 0;
+#X connect 5 0 2 0;
+#X connect 6 0 3 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 0;
+#X connect 8 0 4 0;
+#X connect 8 0 6 0;
+#X restore 256 77 pd selector;
+#X obj 211 162 spigot;
+#X obj 256 56 r \$0-source;
+#X obj 439 119 s \$0-ip;
+#X obj 493 119 s \$0-port;
+#X obj 561 119 s \$0-connect;
+#X obj 567 144 s \$0-loopPos;
+#N canvas 650 370 503 404 loop 0;
+#X text 2 6 Changes incoming relative loopPos into frame numbers for
+this film.;
+#X obj 167 60 r \$0-numFrames;
+#X obj 18 220 outlet;
+#X obj 18 42 r \$0-loopPos;
+#X floatatom 39 160 8 0 0 0 - - -;
+#X floatatom 49 100 8 0 0 0 - - -;
+#X obj 18 187 int;
+#X text 16 274 I'm not quite sure how to fix this... suggestions? How
+can we get this relative loop reference to work? We still need a high-resolution
+relative position \, but want 33ms per frame \, not for the least significant
+digit!;
+#X obj 18 131 expr $f1/(1000000/$f2);
+#X floatatom 199 105 5 0 0 0 - - -;
+#X floatatom 56 186 5 0 0 0 - - -;
+#X text 184 131 frame = loopPos/(1000000/numFrames);
+#X text 19 252 This does not work. each 1/100 of a frame takes 33ms!!
+;
+#X text 17 335 Using non-relative frames seems to be the only answer
+\, but how best to pass numframes data from pt.source to pt.loop? 3rd
+inlet??;
+#X connect 1 0 8 1;
+#X connect 1 0 9 0;
+#X connect 3 0 5 0;
+#X connect 3 0 8 0;
+#X connect 6 0 2 0;
+#X connect 8 0 4 0;
+#X connect 8 0 6 0;
+#X connect 10 0 2 0;
+#X restore 37 343 pd loop;
+#X obj 22 267 outlet;
+#X obj 69 57 r \$0-file;
+#X obj 371 119 s \$0-file;
+#X obj 135 206 unpack f f f;
+#X obj 211 187 pix_dvts;
+#X obj 172 187 t f;
+#X obj 382 90 route file ip port connect loopPos;
+#X obj 135 225 prepend numFrames;
+#X text 229 145 Deferred for TOT2;
+#X text 248 310 Accept absolute frame number! (loopPos);
+#X obj 161 55 r \$0-loopPos;
+#X text 94 343 Depreciated method using relative frame;
+#X obj 135 244 prepend loopBack;
+#X connect 1 0 24 0;
+#X connect 4 0 18 0;
+#X connect 5 0 18 0;
+#X connect 5 1 21 0;
+#X connect 5 2 23 0;
+#X connect 6 0 4 0;
+#X connect 7 0 5 0;
+#X connect 9 0 6 0;
+#X connect 9 0 7 0;
+#X connect 9 0 11 0;
+#X connect 10 0 6 1;
+#X connect 10 1 7 1;
+#X connect 11 0 22 0;
+#X connect 12 0 10 0;
+#X connect 19 0 6 0;
+#X connect 19 0 7 0;
+#X connect 21 0 25 0;
+#X connect 22 0 18 0;
+#X connect 23 0 5 1;
+#X connect 24 0 20 0;
+#X connect 24 1 13 0;
+#X connect 24 2 14 0;
+#X connect 24 3 15 0;
+#X connect 24 4 16 0;
+#X connect 24 5 8 0;
+#X connect 25 0 30 0;
+#X connect 28 0 5 1;
+#X connect 30 0 8 0;
+#X restore 10 90 pd interna;
+#X obj 10 67 inlet;
+#X obj 75 68 inlet;
+#X obj 9 112 outlet;
+#X obj 75 112 outlet;
+#X text 14 43 Input Source;
+#X obj 1 1 cnv 5 128 30 empty empty empty 5 6 1 9 -249661 -66577 0
+;
+#X obj 141 8 s \$0-source;
+#X obj 3 3 popup 124 25 grey95 Source Image Movie;
+#X connect 0 0 3 0;
+#X connect 0 1 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X connect 8 0 7 0;
+#X coords 0 0 1 1 130 32 1;
diff --git a/abstractions/pt.squeeze.pd b/abstractions/pt.squeeze.pd
new file mode 100644
index 0000000..e4f8f4f
--- /dev/null
+++ b/abstractions/pt.squeeze.pd
@@ -0,0 +1,57 @@
+#N canvas 502 22 130 68 10;
+#N canvas 67 346 536 371 intera 0;
+#X obj 26 56 inlet;
+#X obj 19 325 outlet;
+#X obj 214 4 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 459 12 inlet;
+#X obj 461 319 outlet;
+#X obj 26 277 scaleXYZ;
+#X obj 43 134 interp3 \$0-x \$0-y \$0-z;
+#X text 7 3 Squeeze;
+#X obj 237 247 s \$0-s;
+#X obj 247 205 delay 250;
+#X text 317 205 <- conflict w/ state-saving!;
+#X obj 237 79 r \$0-reset;
+#X msg 237 226 1;
+#X obj 284 147 mementoSetup pt.squeeze \$0;
+#X connect 0 0 5 0;
+#X connect 3 0 13 0;
+#X connect 5 0 1 0;
+#X connect 6 0 5 1;
+#X connect 6 1 5 2;
+#X connect 6 2 5 3;
+#X connect 9 0 12 0;
+#X connect 11 0 12 0;
+#X connect 12 0 8 0;
+#X connect 13 0 9 0;
+#X connect 13 1 4 0;
+#X restore 16 104 pd intera;
+#X obj 1 1 cnv 5 128 66 empty empty Squeeze 5 7 1 9 -249661 -66577
+0;
+#X obj 10 19 hsl 112 15 0.1 4 0 0 \$0-x \$0-s X 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 10 34 hsl 112 15 0.1 4 0 0 \$0-y \$0-s Y 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 10 49 hsl 112 15 0.1 4 0 0 \$0-z \$0-s Z 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 113 3 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#X obj 16 82 inlet;
+#X obj 74 82 inlet;
+#X obj 16 126 outlet;
+#X obj 74 126 outlet;
+#X obj 157 56 commun /x \$0;
+#X obj 157 75 commun /y \$0;
+#X obj 157 94 commun /z \$0;
+#X connect 0 0 8 0;
+#X connect 0 1 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 11 0;
+#X connect 4 0 12 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 1;
+#X connect 10 0 2 0;
+#X connect 11 0 3 0;
+#X connect 12 0 4 0;
+#X coords 0 0 1 1 130 68 1;
diff --git a/abstractions/pt.stream.pd b/abstractions/pt.stream.pd
new file mode 100644
index 0000000..e4a9276
--- /dev/null
+++ b/abstractions/pt.stream.pd
@@ -0,0 +1,38 @@
+#N canvas 0 22 145 181 10;
+#X obj 2 2 cnv 5 128 82 empty empty Stream_Management 5 6 1 9 -249661
+-66577 0;
+#X symbolatom 5 16 15 0 0 1 IP - -;
+#X obj 5 33 nbx 5 14 -1e+37 1e+37 0 0 empty empty Port 47 8 1 9 -262144
+-1 -1 0 256;
+#X obj 5 51 tgl 30 0 \$0- \$0 Connect/Disconnect 35 15 1 8 -262144
+-1 -33289 0 1;
+#N canvas 0 22 454 304 interna 0;
+#X obj 73 22 cnv 15 300 250 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 11 24 inlet;
+#X obj 11 234 outlet;
+#X obj 317 33 inlet;
+#X obj 315 250 outlet;
+#X obj 81 171 prepend ip;
+#X obj 81 148 r \$0-ip;
+#X obj 161 148 r \$0-port;
+#X obj 161 171 prepend port;
+#X obj 251 148 r \$0-port;
+#X obj 251 171 prepend port;
+#X text 9 4 Facility to choose and select streams;
+#X connect 1 0 2 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 4 0;
+#X connect 9 0 10 0;
+#X restore 15 127 pd interna;
+#X obj 15 104 inlet;
+#X obj 80 104 inlet;
+#X obj 15 150 outlet;
+#X obj 80 150 outlet;
+#X connect 4 0 7 0;
+#X connect 4 1 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 1;
diff --git a/abstractions/pt.text.pd b/abstractions/pt.text.pd
new file mode 100644
index 0000000..78ef4fd
--- /dev/null
+++ b/abstractions/pt.text.pd
@@ -0,0 +1,25 @@
+#N canvas 328 143 130 16 10;
+#N canvas 665 93 406 418 interna 0;
+#X obj 172 37 cnv 15 200 340 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 9 37 cnv 15 150 340 empty empty empty 5 8 1 10 -3121 -1 0;
+#X text 12 5 Text (size \, type \, font etc..);
+#X obj 16 58 inlet;
+#X obj 322 51 inlet;
+#X obj 257 131 route text;
+#X obj 216 175 route size;
+#X obj 16 350 text3d pixelTANGO;
+#X obj 241 295 register-tail;
+#X connect 3 0 7 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 1 8 0;
+#X connect 6 0 7 1;
+#X connect 6 1 7 0;
+#X restore 12 54 pd interna;
+#X obj 77 33 inlet;
+#X obj 12 33 inlet;
+#X obj 1 1 cnv 5 128 16 empty empty Text 5 9 1 12 -128992 -1 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 0;
+#X coords 0 0 1 1 130 16 1;
diff --git a/abstractions/pt.translate.pd b/abstractions/pt.translate.pd
new file mode 100644
index 0000000..8caeaf7
--- /dev/null
+++ b/abstractions/pt.translate.pd
@@ -0,0 +1,59 @@
+#N canvas 181 373 130 68 10;
+#X obj 1 1 cnv 5 128 66 empty empty Translate 5 7 1 9 -249661 -66577
+0;
+#X obj 10 19 hsl 112 15 -11 11 0 0 \$0-x \$0-s X 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 10 34 hsl 112 15 -11 11 0 0 \$0-y \$0-s Y 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 10 49 hsl 112 15 -11 11 0 0 \$0-z \$0-s Z 53 8 1 8 -262144 -1
+-1 0 1;
+#X obj 113 3 bng 11 250 50 0 \$0-reset \$0- Reset -25 6 1 8 -262144
+-1 -1;
+#N canvas 400 284 666 434 interna 0;
+#X obj 12 43 inlet;
+#X obj 77 257 translateXYZ;
+#X obj 19 325 outlet;
+#X obj 224 4 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 407 14 inlet;
+#X obj 411 319 outlet;
+#X text 7 3 Translate;
+#X obj 60 145 interp3 \$0-x \$0-y \$0-z;
+#X obj 237 247 s \$0-s;
+#X obj 247 205 delay 250;
+#X text 317 205 <- conflict w/ state-saving!;
+#X text 51 371 removed "route" based remote control \, waiting for
+OSCroute changes.;
+#X obj 294 158 mementoSetup pt.translate \$0;
+#X msg 237 226 0;
+#X obj 237 79 r \$0-reset;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 4 0 12 0;
+#X connect 7 0 1 1;
+#X connect 7 1 1 2;
+#X connect 7 2 1 3;
+#X connect 9 0 13 0;
+#X connect 12 0 9 0;
+#X connect 12 1 5 0;
+#X connect 13 0 8 0;
+#X connect 14 0 13 0;
+#X restore 13 109 pd interna;
+#X obj 13 86 inlet;
+#X obj 78 86 inlet;
+#X obj 13 132 outlet;
+#X obj 78 132 outlet;
+#X obj 157 56 commun /x \$0;
+#X obj 157 75 commun /y \$0;
+#X obj 157 94 commun /z \$0;
+#X connect 1 0 10 0;
+#X connect 2 0 11 0;
+#X connect 3 0 12 0;
+#X connect 5 0 8 0;
+#X connect 5 1 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 1;
+#X connect 10 0 1 0;
+#X connect 11 0 2 0;
+#X connect 12 0 3 0;
+#X coords 0 0 1 1 130 68 1;
diff --git a/abstractions/pt.video.pd b/abstractions/pt.video.pd
new file mode 100644
index 0000000..cc98e42
--- /dev/null
+++ b/abstractions/pt.video.pd
@@ -0,0 +1,35 @@
+#N canvas 492 644 130 18 10;
+#N canvas 85 81 670 362 interna 0;
+#X obj 15 42 inlet;
+#X obj 192 26 cnv 15 300 250 empty empty empty 5 8 1 10 -260390 -1
+0;
+#X obj 14 255 rectangle;
+#X obj 342 37 inlet;
+#X obj 43 184 unpack f f;
+#X text 13 7 Video Plane;
+#X obj 15 63 pix_texture;
+#X text 22 84 Where else to put this?;
+#X obj 108 225 * 1;
+#X obj 43 225 * 1;
+#X obj 199 111 register-tail;
+#X obj 43 156 r pt.videoPlaneSize;
+#X obj 285 148 route videoPlaneCorrection;
+#X connect 0 0 6 0;
+#X connect 3 0 10 0;
+#X connect 4 0 9 0;
+#X connect 4 1 8 0;
+#X connect 6 0 2 0;
+#X connect 8 0 2 2;
+#X connect 9 0 2 1;
+#X connect 10 1 12 0;
+#X connect 11 0 4 0;
+#X connect 12 0 8 1;
+#X connect 12 0 9 1;
+#X restore 13 55 pd interna;
+#X obj 13 34 inlet;
+#X obj 78 34 inlet;
+#X obj 1 1 cnv 5 128 16 empty empty Video_Plane 5 9 1 12 -128992 -1
+0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 1;
+#X coords 0 0 1 1 130 16 1;
diff --git a/abstractions/pt.whatcolour.pd b/abstractions/pt.whatcolour.pd
new file mode 100644
index 0000000..b5c97de
--- /dev/null
+++ b/abstractions/pt.whatcolour.pd
@@ -0,0 +1,105 @@
+#N canvas 295 360 130 42 10;
+#N canvas 590 361 553 425 intera 0;
+#X obj 26 56 inlet;
+#X obj 154 4 cnv 15 300 340 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X obj 387 14 inlet;
+#X obj 387 319 outlet;
+#X obj 26 322 outlet;
+#X text 7 3 WhatColour?;
+#X obj 213 77 route colour;
+#X obj 213 120 unpack f f f;
+#N canvas 88 146 620 498 colourMess 0;
+#X obj 156 4 inlet;
+#X obj 233 6 inlet;
+#X obj 299 7 inlet;
+#X text 161 -21 red;
+#X text 231 -19 green;
+#X text 303 -19 blue;
+#X obj 183 119 t b f;
+#X obj 117 177 +;
+#X obj 117 202 t b f;
+#X obj 117 233 +;
+#X obj 40 96 * -65536;
+#X obj 117 97 * -256;
+#X obj 183 97 * -1;
+#X obj 117 264 - 1;
+#X obj 189 391 outlet;
+#X obj 232 69 invert_scale 0 255;
+#X obj 374 158 t b f;
+#X obj 308 216 +;
+#X obj 308 241 t b f;
+#X obj 308 272 +;
+#X obj 231 135 * -65536;
+#X obj 308 136 * -256;
+#X obj 374 136 * -1;
+#X obj 308 303 - 1;
+#X obj 308 91 invert_scale 0 255;
+#X obj 374 113 invert_scale 0 255;
+#X obj 299 29 t f f;
+#X obj 233 28 t f f;
+#X obj 156 27 t f f;
+#X obj 189 341 pack f f;
+#X msg 189 365 color \$1 \$2;
+#X obj 383 11 loadbang;
+#X msg 383 35 200;
+#X connect 0 0 28 0;
+#X connect 1 0 27 0;
+#X connect 2 0 26 0;
+#X connect 6 0 7 0;
+#X connect 6 1 7 1;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 1 9 1;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 7 0;
+#X connect 12 0 6 0;
+#X connect 13 0 29 0;
+#X connect 15 0 20 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 19 0 23 0;
+#X connect 20 0 19 0;
+#X connect 21 0 17 0;
+#X connect 22 0 16 0;
+#X connect 23 0 29 1;
+#X connect 24 0 21 0;
+#X connect 25 0 22 0;
+#X connect 26 0 12 0;
+#X connect 26 1 25 0;
+#X connect 27 0 11 0;
+#X connect 27 1 24 0;
+#X connect 28 0 10 0;
+#X connect 28 1 15 0;
+#X connect 29 0 30 0;
+#X connect 30 0 14 0;
+#X connect 31 0 32 0;
+#X connect 32 0 26 0;
+#X connect 32 0 27 0;
+#X connect 32 0 28 0;
+#X restore 185 167 pd colourMess;
+#X obj 190 230 s \$0-whatColour;
+#X connect 0 0 4 0;
+#X connect 2 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 1 3 0;
+#X connect 7 0 8 0;
+#X connect 7 1 8 1;
+#X connect 7 2 8 2;
+#X connect 8 0 9 0;
+#X restore 16 104 pd intera;
+#X obj 1 1 cnv 5 128 40 empty \$0-whatColour Colour? 5 7 1 9 -208051
+-54094 0;
+#X obj 16 82 inlet;
+#X obj 74 82 inlet;
+#X obj 16 126 outlet;
+#X obj 74 126 outlet;
+#X connect 0 0 4 0;
+#X connect 0 1 5 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 1;
+#X coords 0 0 1 1 130 42 1;
diff --git a/abstractions/pt.window.pd b/abstractions/pt.window.pd
new file mode 100644
index 0000000..811ec3d
--- /dev/null
+++ b/abstractions/pt.window.pd
@@ -0,0 +1,306 @@
+#N canvas 687 246 130 212 10;
+#X text 8 259 Gemwin Control (for gemwin);
+#X obj 229 200 s \$0-resolution;
+#X obj 1 1 cnv 5 128 210 empty empty Window_Management 5 6 1 9 -133153
+-1 0;
+#X obj 7 53 tgl 15 0 \$0-window \$0 Window 20 8 1 8 -262144 -1 -1 0
+1;
+#X obj 7 35 tgl 15 0 \$0-fsaa \$0 FSAA(6) 20 8 1 8 -262144 -1 -1 0
+1;
+#X obj 7 17 tgl 15 0 \$0-fullscreen \$0 Fullscreen 20 8 1 8 -262144
+-1 -1 0 1;
+#X obj 10 74 hsl 112 15 0 1 0 0 \$0-r \$0-s empty -2 -6 0 8 -258699
+-1 -1 0 1;
+#X obj 10 89 hsl 112 15 0 1 0 0 \$0-g \$0-s empty -2 -6 0 8 -24198
+-1 -1 0 1;
+#X obj 10 104 hsl 112 15 0 1 0 0 \$0-b \$0-s empty -2 -6 0 8 -62784
+-1 -1 0 1;
+#X obj 76 17 tgl 15 0 \$0-light \$0 Light 20 8 1 8 -262144 -1 -1 0
+1;
+#X text 6 352 In the future it would be nice to visuall choose a corner
+of the window to put the gemwin. We can get the size of the screen
+in tcl with winfo vrootheight . and winfo vrootwidth . Suggest on gem-dev?
+;
+#X obj 215 115 commun /r \$0;
+#X obj 215 134 commun /g \$0;
+#X obj 215 153 commun /b \$0;
+#X obj 6 285 inlet;
+#X obj 226 253 s \$0-offset;
+#X obj 339 200 commun /resolution \$0;
+#X obj 76 35 tgl 15 0 \$0-cursor \$0-cursor-set Cursor 20 8 1 8 -262144
+-1 -1 0 1;
+#X obj 309 253 commun /offset \$0;
+#X obj 215 5 commun /fullscreen \$0;
+#X obj 215 25 commun /fsaa \$0;
+#X obj 215 45 commun /light \$0;
+#X obj 215 65 commun /cursor \$0;
+#X obj 206 227 route bang;
+#X text 287 227 <- fix for initial bang;
+#X obj 222 170 route bang;
+#N canvas 107 93 694 550 interna 0;
+#X text 7 6 Gemwin Control (for gemwin);
+#X obj 10 44 cnv 15 650 400 empty empty empty 5 8 1 10 -260390 -1 0
+;
+#X msg 27 162 color \$1 \$2 \$3;
+#X obj 27 142 pack f f f;
+#X obj 27 223 s \$0-ctrl;
+#X obj 546 238 s \$0-ctrl;
+#X msg 546 133 640 480;
+#X obj 546 85 r \$0-resolution;
+#X obj 12 464 cnv 15 130 50 empty empty empty 5 8 1 10 -3121 -1 0;
+#X obj 214 57 r \$0-window;
+#X obj 220 150 s \$0-ctrl;
+#X obj 348 54 r \$0-fsaa;
+#X obj 348 147 s \$0-ctrl;
+#X msg 377 124 FSAA 0;
+#X obj 214 80 route 1 0;
+#X obj 348 77 route 1 0;
+#X obj 546 107 route 0 1 2;
+#X msg 563 153 1024 512;
+#X msg 580 173 512 512;
+#X obj 430 416 s \$0-ctrl;
+#X msg 430 395 offset \$1 \$2;
+#X msg 249 127 0 \, destroy;
+#X msg 220 104 create \, 1;
+#X obj 282 245 r \$0-resolution;
+#X obj 282 267 route 0 1 2;
+#X msg 282 293 5.3333 4;
+#X msg 299 313 8 4;
+#X msg 316 333 4 4;
+#X obj 443 130 loadbang;
+#X text 442 152 Defaults;
+#X obj 202 179 s windowCreate;
+#X text 198 199 Signal to FTGL render;
+#X msg 348 101 FSAA 6;
+#X obj 24 263 r \$0-frameRate;
+#X obj 24 285 route 0 1;
+#X msg 24 311 30;
+#X msg 54 331 60;
+#N canvas 0 22 455 226 dynamic 0;
+#X obj 82 69 f \$0;
+#X obj 81 93 makefilename pd-%d-interna;
+#X msg 16 144 \; \$3 obj 21 423 gemwindow \$1 \$2;
+#X obj 16 118 pack f f s;
+#X text 8 7 Dynamically generates the gemwindow abstraction at the
+correct framerate with the correct receive name.;
+#X obj 16 45 inlet;
+#X obj 82 46 loadbang;
+#X msg 143 46 bang;
+#X text 11 189 Crap \, we need to be able to delete the old one first!
+How? "cut" crashes when the patcher is not open!;
+#X connect 0 0 1 0;
+#X connect 0 0 3 1;
+#X connect 1 0 3 2;
+#X connect 3 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X restore 24 357 pd dynamic patcher;
+#X obj 165 270 s \$0-ctrl;
+#X obj 165 230 r \$0-light;
+#X msg 165 250 lighting \$1;
+#X obj 166 334 s \$0-ctrl;
+#X obj 166 296 r \$0-fullscreen;
+#X msg 166 315 fullscreen \$1;
+#X obj 282 359 s pt.videoPlaneSize;
+#X obj 21 471 inlet;
+#N canvas 276 506 466 316 select 0;
+#X obj 18 17 inlet;
+#X obj 18 43 select 0 1 2 3 4 5;
+#X msg 18 67 1600 -50;
+#X msg 38 87 1600 0;
+#X msg 58 107 1280 -50;
+#X msg 78 127 1280 0;
+#X msg 98 147 1024 -50;
+#X msg 118 167 1024 0;
+#X msg 139 187 0 0;
+#X obj 35 226 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 1 2 4 0;
+#X connect 1 3 5 0;
+#X connect 1 4 6 0;
+#X connect 1 5 7 0;
+#X connect 1 6 8 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 4 0 9 0;
+#X connect 5 0 9 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 9 0;
+#X restore 430 374 pd select;
+#X obj 430 352 r \$0-offset;
+#X obj 427 311 s \$0-ctrl;
+#X obj 427 258 r \$0-cursor;
+#X msg 427 285 cursor \$1;
+#N canvas 672 103 529 518 memento 0;
+#X obj 29 66 t b f;
+#X msg 29 90 set;
+#X msg 59 90 substate \$1;
+#X obj 29 46 r pt.currentPreset;
+#X text 16 9 Does all the crap for memento naming/collection and abstraction
+registration \$1 is abst-name \$2 is \$0 variable;
+#X obj 305 75 inlet;
+#X obj 115 122 originator /pt/window \$0;
+#X obj 44 158 cnv 15 400 300 empty empty EXPERIMENTAL 20 12 0 14 -259544
+-1 0;
+#X obj 234 360 pool OSC;
+#X obj 175 218 r \$0-RRADMIN;
+#X obj 157 307 prepend set;
+#X obj 182 252 t a b;
+#X obj 258 284 symbol \$1;
+#X msg 251 309 mkchdir \$1;
+#X connect 0 0 1 0;
+#X connect 0 1 2 0;
+#X connect 1 0 6 0;
+#X connect 2 0 6 0;
+#X connect 3 0 0 0;
+#X connect 5 0 6 1;
+#X connect 9 0 11 0;
+#X connect 10 0 8 0;
+#X connect 11 0 10 0;
+#X connect 11 1 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X restore 449 96 pd memento;
+#X obj 449 74 r pt.osc;
+#X text 431 51 receive OSC on pt.osc;
+#X obj 27 201 spigot;
+#X obj 27 73 interp3 \$0-r \$0-g \$0-b;
+#X obj 104 142 bang;
+#X obj 65 471 r \$0-ctrl;
+#X obj 546 418 s \$0-ctrl;
+#X obj 546 265 r \$0-framerate;
+#X obj 546 287 route 0 1 2 3;
+#X msg 546 313 15;
+#X msg 563 333 30;
+#X msg 580 353 60;
+#X msg 600 373 100;
+#X obj 546 396 prepend frame;
+#X text 8 25 Render \, Creation \, Colour? \, frame-rate \,;
+#X obj 165 400 s \$0-ctrl;
+#X obj 165 360 r \$0-border;
+#X msg 165 380 border \$1;
+#X obj 413 184 f \$0;
+#X obj 511 463 s pt.windowResolution;
+#X obj 546 216 prepend dimen;
+#X obj 21 493 gemwin 30;
+#X obj 546 196 t a;
+#X msg 414 204 \; \$1-border-set 1 \; \$1-cursor-set 1 \;;
+#X connect 2 0 54 0;
+#X connect 3 0 2 0;
+#X connect 6 0 74 0;
+#X connect 7 0 16 0;
+#X connect 9 0 14 0;
+#X connect 9 0 54 1;
+#X connect 11 0 15 0;
+#X connect 13 0 12 0;
+#X connect 14 0 22 0;
+#X connect 14 0 30 0;
+#X connect 14 1 21 0;
+#X connect 15 0 32 0;
+#X connect 15 1 13 0;
+#X connect 16 0 6 0;
+#X connect 16 1 17 0;
+#X connect 16 2 18 0;
+#X connect 17 0 74 0;
+#X connect 18 0 74 0;
+#X connect 20 0 19 0;
+#X connect 21 0 10 0;
+#X connect 22 0 10 0;
+#X connect 23 0 24 0;
+#X connect 24 0 25 0;
+#X connect 24 1 26 0;
+#X connect 24 2 27 0;
+#X connect 25 0 44 0;
+#X connect 26 0 44 0;
+#X connect 27 0 44 0;
+#X connect 28 0 6 0;
+#X connect 28 0 25 0;
+#X connect 28 0 70 0;
+#X connect 32 0 12 0;
+#X connect 33 0 34 0;
+#X connect 34 0 35 0;
+#X connect 34 1 36 0;
+#X connect 35 0 37 0;
+#X connect 36 0 37 0;
+#X connect 39 0 40 0;
+#X connect 40 0 38 0;
+#X connect 42 0 43 0;
+#X connect 43 0 41 0;
+#X connect 45 0 73 0;
+#X connect 46 0 20 0;
+#X connect 47 0 46 0;
+#X connect 49 0 50 0;
+#X connect 50 0 48 0;
+#X connect 52 0 51 0;
+#X connect 54 0 4 0;
+#X connect 55 0 3 0;
+#X connect 55 1 56 0;
+#X connect 55 1 3 1;
+#X connect 55 2 56 0;
+#X connect 55 2 3 2;
+#X connect 56 0 3 0;
+#X connect 57 0 73 0;
+#X connect 59 0 60 0;
+#X connect 60 0 61 0;
+#X connect 60 1 62 0;
+#X connect 60 2 63 0;
+#X connect 60 3 64 0;
+#X connect 61 0 65 0;
+#X connect 62 0 65 0;
+#X connect 63 0 65 0;
+#X connect 64 0 65 0;
+#X connect 65 0 58 0;
+#X connect 68 0 69 0;
+#X connect 69 0 67 0;
+#X connect 70 0 75 0;
+#X connect 72 0 5 0;
+#X connect 74 0 72 0;
+#X connect 74 0 71 0;
+#X restore 6 307 pd interna;
+#X obj 215 280 route bang;
+#X text 296 280 <- fix for initial bang;
+#X obj 215 306 s \$0-framerate;
+#X obj 318 306 commun /framerate \$0;
+#X obj 76 53 tgl 15 0 \$0-border \$0-border-set Border 20 8 1 8 -262144
+-1 -1 1 1;
+#X obj 215 85 commun /border \$0;
+#X obj 4 124 popup 124 25 grey50 Resolution 640x480 1024x512 512x512
+;
+#X obj 4 153 popup 124 25 grey50 Offset 1600/-50 1600/0 1280/-50 1280/0
+1024/-50 1024/0 0/0;
+#X obj 4 181 popup 124 25 grey50 Frame-rate 15fps 30fps 60fps 100fps
+;
+#X connect 4 0 20 0;
+#X connect 5 0 19 0;
+#X connect 6 0 11 0;
+#X connect 7 0 12 0;
+#X connect 8 0 13 0;
+#X connect 9 0 21 0;
+#X connect 11 0 6 0;
+#X connect 12 0 7 0;
+#X connect 13 0 8 0;
+#X connect 14 0 26 0;
+#X connect 16 0 33 0;
+#X connect 17 0 22 0;
+#X connect 18 0 34 0;
+#X connect 19 0 5 0;
+#X connect 20 0 4 0;
+#X connect 21 0 9 0;
+#X connect 22 0 17 0;
+#X connect 23 1 15 0;
+#X connect 23 1 18 0;
+#X connect 25 1 16 0;
+#X connect 25 1 1 0;
+#X connect 27 1 29 0;
+#X connect 27 1 30 0;
+#X connect 30 0 35 0;
+#X connect 31 0 32 0;
+#X connect 32 0 31 0;
+#X connect 33 0 25 0;
+#X connect 34 0 23 0;
+#X connect 35 0 27 0;
+#X coords 0 0 1 1 130 212 1;
diff --git a/abstractions/register-dump.pd b/abstractions/register-dump.pd
new file mode 100644
index 0000000..a2bc8b9
--- /dev/null
+++ b/abstractions/register-dump.pd
@@ -0,0 +1,16 @@
+#N canvas 599 155 280 253 10;
+#X msg 24 51 getrec;
+#X obj 24 88 pool register;
+#X obj 45 187 print pt.register;
+#X obj 67 112 prepend Directory;
+#X obj 45 134 prepend Key;
+#X obj 24 157 prepend Value;
+#X obj 24 28 inlet;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 4 0;
+#X connect 1 2 3 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X connect 6 0 0 0;
diff --git a/abstractions/register-get.pd b/abstractions/register-get.pd
new file mode 100644
index 0000000..f846322
--- /dev/null
+++ b/abstractions/register-get.pd
@@ -0,0 +1,30 @@
+#N canvas 219 138 473 435 10;
+#X obj 34 54 inlet;
+#X obj 29 368 pool register;
+#X text 25 8 This abstraction is used to access the unique \$0 ID from
+the instance number of a particular abstraction on a particular layer.
+;
+#X obj 29 393 outlet;
+#X msg 29 314 chdir \$1 \$2;
+#X obj 149 314 prepend get;
+#X obj 61 107 route dir;
+#X text 117 286 \$1 layerNum \, \$2 Abstraction Name;
+#X obj 29 144 prepend list;
+#X obj 119 188 oneshot;
+#X obj 119 144 t b f;
+#X obj 39 288 pack \$1 s;
+#X obj 97 265 symbol \$2;
+#X obj 97 243 loadbang;
+#X connect 0 0 6 0;
+#X connect 1 0 3 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 8 0;
+#X connect 6 1 10 0;
+#X connect 8 0 4 0;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 10 1 5 0;
+#X connect 11 0 4 0;
+#X connect 12 0 11 1;
+#X connect 13 0 12 0;
diff --git a/abstractions/register-head.pd b/abstractions/register-head.pd
new file mode 100644
index 0000000..4e4758a
--- /dev/null
+++ b/abstractions/register-head.pd
@@ -0,0 +1,50 @@
+#N canvas 257 138 873 497 10;
+#X obj 203 383 outlet;
+#X msg 203 298 register-head 0;
+#X obj 10 165 loadbang;
+#X msg 10 298 layerNum \$1;
+#X obj 10 277 f \$1;
+#X text 49 278 Layer Number Argument;
+#X text 9 5 Register-head (starts the abstraction registration process.)
+;
+#X obj 203 165 r pt.layerNumDone;
+#X obj 203 193 select \$1;
+#X obj 219 264 r pt.register;
+#X obj 9 453 delay 250;
+#X msg 72 165 bang;
+#X text 9 140 1 Send LayerNum;
+#X text 155 140 2 when layerNum gets to end send register-head;
+#X text 347 163 3 When register-head gets to end then send createOscName
+;
+#X obj 357 212 select \$1;
+#X obj 357 184 r pt.registerDone;
+#X obj 373 283 r pt.createOsc;
+#X msg 357 317 createOscName;
+#X text 10 30 When layerNum reacher the footer it sends a signal here
+to register layer which in turn sends a signal to generate OSC names
+;
+#X obj 217 227 delay 250;
+#X obj 379 246 delay 250;
+#X text 83 452 This is really ugly... May cause problems later... what
+to do about it? short answer for future problems is to increase the
+delay! 250 is pretty long though...;
+#X obj 474 306 r pt.loopBack;
+#X text 10 87 Added pt.loopBack to send misc messages from tail to
+head.;
+#X obj 474 331 route \$1;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 0;
+#X connect 7 0 8 0;
+#X connect 8 0 20 0;
+#X connect 9 0 1 0;
+#X connect 11 0 4 0;
+#X connect 15 0 21 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 0 0;
+#X connect 20 0 1 0;
+#X connect 21 0 18 0;
+#X connect 23 0 25 0;
+#X connect 25 0 0 0;
diff --git a/abstractions/register-tail.pd b/abstractions/register-tail.pd
new file mode 100644
index 0000000..81a0010
--- /dev/null
+++ b/abstractions/register-tail.pd
@@ -0,0 +1,53 @@
+#N canvas 554 62 607 624 10;
+#X obj 29 365 prepend list;
+#X msg 29 391 mkdir \$1 \$2 \, chsub \$1 \$2 \, set \$3 \$4 \, updir
+2;
+#X obj 29 112 inlet;
+#X msg 63 500 save register.dat;
+#X text 63 468 Since the contents of this pool may change on boot-up
+there is really no reason to save it. Temporary storage only.;
+#X obj 346 161 outlet;
+#X obj 29 528 pool register;
+#X msg 55 448 reset;
+#X text 25 8 This abstraction routes the data from register and puts
+it in a pool. Sent a "registerReset" message to clear abstractions.
+(when you modify a patch);
+#X obj 55 425 r pt.registerReset;
+#X text 120 366 when we get the layerNum signal \, then register THIS
+layer;
+#X obj 43 327 s pt.layerNumDone;
+#X obj 187 216 s pt.registerDone;
+#X obj 166 187 f;
+#X text 133 532 This pool is not functionally required. It may be useful
+in the future though (rewritten to store OSC names for all params?
+Or could this be generated from the memento pool? Better place is probably
+inside the "register" abstraction. using the state-saving pool?;
+#X text 100 188 layerNum;
+#X obj 166 162 bang;
+#X text 198 186 when we get register-head then send layerNum to pt.registerDone
+;
+#X obj 166 327 outlet;
+#X obj 266 260 prepend N;
+#X msg 108 231 set \$1;
+#X obj 266 285 s pt.loopBack;
+#X obj 29 137 route register layerNum register-head loopBack;
+#X text 32 68 Added loopBack to send messages from tail to head;
+#X text 236 306 on getting loopBack message \, add layerNum and send
+to global receive;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 2 0 22 0;
+#X connect 3 0 6 0;
+#X connect 7 0 6 0;
+#X connect 9 0 7 0;
+#X connect 13 0 12 0;
+#X connect 13 0 18 0;
+#X connect 16 0 13 0;
+#X connect 19 0 21 0;
+#X connect 20 0 19 0;
+#X connect 22 1 11 0;
+#X connect 22 1 13 1;
+#X connect 22 1 20 0;
+#X connect 22 2 16 0;
+#X connect 22 3 19 0;
+#X connect 22 4 5 0;
diff --git a/abstractions/register.pd b/abstractions/register.pd
new file mode 100644
index 0000000..498aecb
--- /dev/null
+++ b/abstractions/register.pd
@@ -0,0 +1,59 @@
+#N canvas 217 86 800 557 10;
+#X obj -78 116 inlet;
+#X obj -59 266 + 1;
+#X obj 166 177 loadbang;
+#X obj 115 437 prepend register;
+#X obj -24 240 spigot;
+#X msg 25 216 1;
+#X obj -4 194 bang;
+#X msg -4 216 0;
+#X text -75 13 This is the abstraction registration system.;
+#X text -75 33 Usage: [register abstraction-name \$0];
+#X obj -59 340 prepend \$1;
+#X obj -78 364 prepend register-head;
+#X obj 166 293 f \$2;
+#X text -75 53 Start the registration process by sending register-head
+0 message.;
+#X text 241 215 For some reason four abstractions seem to send 5 register
+messages! This is because each sends out a value in the process of
+it counting! how to avoid this? Of course the newer value will over-write
+the older one \, but this is a bit ugly.;
+#X obj -78 139 route register-head \$1 layerNum;
+#X obj 81 260 f;
+#X obj 115 320 pack f f;
+#X obj 115 346 prepend \$1;
+#X msg 81 284 set \$1;
+#X text 240 155 Once this abstraction has been counted ignore "register-head"
+messages.;
+#X obj 63 402 prepend layerNum;
+#X obj 115 372 prepend N;
+#X obj 120 498 outlet;
+#X obj -78 474 outlet;
+#X text -18 474 how to Make sure that messages pass in order??;
+#X connect 0 0 15 0;
+#X connect 1 0 10 0;
+#X connect 1 0 17 0;
+#X connect 1 0 23 0;
+#X connect 2 0 5 0;
+#X connect 2 0 12 0;
+#X connect 3 0 24 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 1;
+#X connect 6 0 7 0;
+#X connect 7 0 4 1;
+#X connect 10 0 24 0;
+#X connect 11 0 24 0;
+#X connect 12 0 17 1;
+#X connect 15 0 4 0;
+#X connect 15 0 11 0;
+#X connect 15 1 6 0;
+#X connect 15 1 1 0;
+#X connect 15 2 16 0;
+#X connect 15 2 21 0;
+#X connect 15 3 24 0;
+#X connect 16 0 19 0;
+#X connect 17 0 18 0;
+#X connect 18 0 22 0;
+#X connect 19 0 22 0;
+#X connect 21 0 24 0;
+#X connect 22 0 3 0;
diff --git a/abstractions/smooth.pd b/abstractions/smooth.pd
new file mode 100755
index 0000000..c69ee88
--- /dev/null
+++ b/abstractions/smooth.pd
@@ -0,0 +1,27 @@
+#N canvas 447 234 696 300 12;
+#X obj 38 63 sig~;
+#X obj 39 141 snapshot~;
+#X obj 151 68 loadbang;
+#X obj 38 99 lop~ \$1;
+#X obj 151 97 metro \$2;
+#X obj 38 23 inlet;
+#X obj 41 214 outlet;
+#X obj 40 178 change;
+#X text 258 66 arguments:;
+#X text 258 85 \$1 ... smoothing (the higher \, the faster);
+#X text 258 103 \$2 ... message output interval (in ms);
+#X text 258 26 low-pass filters a message stream (by use of dsp);
+#X obj 98 23 inlet;
+#X obj 161 23 inlet;
+#X text 401 263 Copyright Thomas Grill 2003;
+#X msg 140 124 \; pd dsp 1;
+#X connect 0 0 3 0;
+#X connect 1 0 7 0;
+#X connect 2 0 4 0;
+#X connect 2 0 15 0;
+#X connect 3 0 1 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 7 0 6 0;
+#X connect 12 0 3 1;
+#X connect 13 0 4 1;
diff --git a/abstractions/stripExtension.pd b/abstractions/stripExtension.pd
new file mode 100644
index 0000000..942a51f
--- /dev/null
+++ b/abstractions/stripExtension.pd
@@ -0,0 +1,8 @@
+#N canvas 599 457 398 185 10;
+#X obj 17 51 inlet;
+#X obj 17 141 outlet;
+#X obj 17 104 py pt stripExtension;
+#X text 4 5 Uses py to remove the extension from a symbol using os.path.splitext()
+;
+#X connect 0 0 2 1;
+#X connect 2 0 1 0;
diff --git a/abstractions/stripPath.pd b/abstractions/stripPath.pd
new file mode 100644
index 0000000..ca3129e
--- /dev/null
+++ b/abstractions/stripPath.pd
@@ -0,0 +1,8 @@
+#N canvas 599 457 406 193 10;
+#X obj 17 51 inlet;
+#X obj 17 141 outlet;
+#X obj 17 103 py pt stripPath;
+#X text 4 5 Uses py to remove the path component from a symbol using
+os.path.basename();
+#X connect 0 0 2 1;
+#X connect 2 0 1 0;