aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Bogart <bbogart@users.sourceforge.net>2005-11-26 22:21:07 +0000
committerB. Bogart <bbogart@users.sourceforge.net>2005-11-26 22:21:07 +0000
commit33789244c6dbe3611607e77fa98f0f0c72f354ee (patch)
treec1c0c3d40f010b7be1e3bc223cecdaaf2e0bd74b
Initial Commit of pixelTANGO 0.3.4svn2git-root
svn path=/trunk/abstractions/pixelTANGO/; revision=4049
-rw-r--r--COPYING.txt340
-rw-r--r--Example-Patches/Preset-Animation-Example.pd94
-rw-r--r--Example-Patches/Two-Layer-Example.pd63
-rw-r--r--Example-Patches/Typical-Example-Feedback.pd114
-rw-r--r--Example-Patches/Typical-Example-Presets.pd97
-rw-r--r--Example-Patches/Typical-Example.pd95
-rw-r--r--README.txt70
-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
-rw-r--r--dev-notes/Developer-Reference.txt113
-rw-r--r--dev-notes/GOP_layout.txt27
-rw-r--r--fonts/arial.ttfbin0 -> 143300 bytes
-rw-r--r--fonts/times.ttfbin0 -> 188996 bytes
-rw-r--r--help/pixelTANGO-help.pd127
-rw-r--r--help/pt.animate-help.pd100
-rw-r--r--help/pt.entry-help.pd44
-rw-r--r--help/pt.fader-help.pd21
-rw-r--r--help/pt.feedback-help.pd34
-rw-r--r--help/pt.file-help.pd19
-rw-r--r--help/pt.filelist-help.pd45
-rw-r--r--help/pt.interp-help.pd32
-rw-r--r--help/pt.layer-help.pd25
-rw-r--r--help/pt.layerfx-help.pd36
-rw-r--r--help/pt.light-help.pd31
-rw-r--r--help/pt.live-help.pd27
-rw-r--r--help/pt.loop-help.pd55
-rw-r--r--help/pt.model-help.pd23
-rw-r--r--help/pt.presets-help.pd30
-rw-r--r--help/pt.rotate-help.pd23
-rw-r--r--help/pt.scale-help.pd24
-rw-r--r--help/pt.source-help.pd30
-rw-r--r--help/pt.squeeze-help.pd25
-rw-r--r--help/pt.text-help.pd21
-rw-r--r--help/pt.translate-help.pd23
-rw-r--r--help/pt.video-help.pd19
-rw-r--r--help/pt.whatcolour-help.pd25
-rw-r--r--help/pt.window-help.pd43
-rw-r--r--scripts/pt.py37
95 files changed, 5698 insertions, 0 deletions
diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..486449c
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Example-Patches/Preset-Animation-Example.pd b/Example-Patches/Preset-Animation-Example.pd
new file mode 100644
index 0000000..bb6b5d7
--- /dev/null
+++ b/Example-Patches/Preset-Animation-Example.pd
@@ -0,0 +1,94 @@
+#N canvas 447 137 737 616 10;
+#X obj 12 41 pt.window 60;
+#X obj 12 273 pt.interp;
+#X obj 160 132 pt.translate;
+#X obj 160 388 pt.video;
+#X obj 160 59 pt.fader;
+#X obj 300 388 pt.video;
+#X obj 300 132 pt.translate;
+#X obj 160 201 pt.rotate;
+#X obj 300 201 pt.rotate;
+#X obj 440 464 pt.video;
+#X obj 440 59 pt.feedback;
+#X obj 440 261 pt.rotate;
+#X obj 440 192 pt.translate;
+#X obj 160 270 pt.squeeze;
+#X obj 160 339 pt.scale;
+#X obj 300 339 pt.scale;
+#X obj 13 388 pt.presets;
+#X obj 160 36 pt.layer 1;
+#X obj 440 36 pt.layer 3;
+#X obj 300 36 pt.layer 2;
+#X obj 300 59 pt.fader;
+#X obj 300 270 pt.squeeze;
+#X text 18 5 Preset Animation Example pixelTANGO CVS: $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $
+;
+#X text 32 473 1 Load the Animation-presets.dat preset file;
+#X text 32 493 2 Select preset-01;
+#X text 32 513 3 Create the render-window;
+#X text 32 533 4 Switch back and forth between preset-01 and preset-02
+OR press the toggle ----------------------------------------->;
+#X obj 13 365 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 478 529 tgl 30 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 13 340 metro 3000;
+#X obj 580 464 pt.video;
+#X obj 580 59 pt.feedback;
+#X obj 580 261 pt.rotate;
+#X obj 580 192 pt.translate;
+#X obj 580 36 pt.layer 4;
+#X obj 440 334 pt.fader;
+#X obj 440 415 pt.scale;
+#X obj 580 334 pt.fader;
+#X obj 580 415 pt.scale;
+#X connect 2 0 7 0;
+#X connect 2 1 7 1;
+#X connect 4 0 2 0;
+#X connect 4 2 2 1;
+#X connect 6 0 8 0;
+#X connect 6 1 8 1;
+#X connect 7 0 13 0;
+#X connect 7 1 13 1;
+#X connect 8 0 21 0;
+#X connect 8 1 21 1;
+#X connect 10 0 12 0;
+#X connect 10 1 12 1;
+#X connect 11 0 35 0;
+#X connect 11 1 35 1;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 14 0;
+#X connect 13 1 14 1;
+#X connect 14 0 3 0;
+#X connect 14 1 3 1;
+#X connect 15 0 5 0;
+#X connect 15 1 5 1;
+#X connect 17 0 4 0;
+#X connect 17 1 4 1;
+#X connect 18 0 10 0;
+#X connect 18 1 10 1;
+#X connect 19 0 20 0;
+#X connect 19 1 20 1;
+#X connect 20 0 6 0;
+#X connect 20 2 6 1;
+#X connect 21 0 15 0;
+#X connect 21 1 15 1;
+#X connect 27 0 16 0;
+#X connect 28 0 29 0;
+#X connect 29 0 27 0;
+#X connect 31 0 33 0;
+#X connect 31 1 33 1;
+#X connect 32 0 37 0;
+#X connect 32 1 37 1;
+#X connect 33 0 32 0;
+#X connect 33 1 32 1;
+#X connect 34 0 31 0;
+#X connect 34 1 31 1;
+#X connect 35 0 36 0;
+#X connect 35 2 9 1;
+#X connect 36 0 9 0;
+#X connect 37 0 38 0;
+#X connect 37 2 38 1;
+#X connect 38 0 30 0;
+#X connect 38 1 30 1;
diff --git a/Example-Patches/Two-Layer-Example.pd b/Example-Patches/Two-Layer-Example.pd
new file mode 100644
index 0000000..2159ae2
--- /dev/null
+++ b/Example-Patches/Two-Layer-Example.pd
@@ -0,0 +1,63 @@
+#N canvas 617 54 503 725 10;
+#X obj 31 45 pt.window;
+#X obj 31 407 pt.interp;
+#X obj 31 271 pt.light 1;
+#X text 17 5 Two Channel Mixer Example pixelTANGO CVS: $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $
+;
+#X obj 31 473 pt.presets;
+#X obj 194 186 pt.loop;
+#X obj 194 643 pt.scale;
+#X obj 194 689 pt.video;
+#X obj 194 328 pt.source;
+#X obj 194 70 pt.filelist;
+#X obj 194 364 pt.layerfx;
+#X obj 194 497 pt.translate;
+#X obj 194 570 pt.rotate;
+#X obj 194 418 pt.fader;
+#X obj 334 186 pt.loop;
+#X obj 334 642 pt.scale;
+#X obj 334 70 pt.filelist;
+#X obj 334 364 pt.layerfx;
+#X obj 334 497 pt.translate;
+#X obj 334 570 pt.rotate;
+#X obj 334 418 pt.fader;
+#X obj 334 328 pt.source;
+#X obj 334 688 pt.video;
+#X obj 194 44 pt.layer 1;
+#X obj 334 44 pt.layer 2;
+#X connect 5 0 8 0;
+#X connect 5 1 8 1;
+#X connect 6 0 7 0;
+#X connect 6 1 7 1;
+#X connect 8 0 10 0;
+#X connect 8 1 10 1;
+#X connect 9 0 5 0;
+#X connect 9 1 5 1;
+#X connect 10 0 13 0;
+#X connect 10 1 13 1;
+#X connect 11 0 12 0;
+#X connect 11 1 12 1;
+#X connect 12 0 6 0;
+#X connect 12 1 6 1;
+#X connect 13 0 11 0;
+#X connect 13 2 11 1;
+#X connect 14 0 21 0;
+#X connect 14 1 21 1;
+#X connect 15 0 22 0;
+#X connect 15 1 22 1;
+#X connect 16 0 14 0;
+#X connect 16 1 14 1;
+#X connect 17 0 20 0;
+#X connect 17 1 20 1;
+#X connect 18 0 19 0;
+#X connect 18 1 19 1;
+#X connect 19 0 15 0;
+#X connect 19 1 15 1;
+#X connect 20 0 18 0;
+#X connect 20 2 18 1;
+#X connect 21 0 17 0;
+#X connect 21 1 17 1;
+#X connect 23 0 9 0;
+#X connect 23 1 9 1;
+#X connect 24 0 16 0;
+#X connect 24 1 16 1;
diff --git a/Example-Patches/Typical-Example-Feedback.pd b/Example-Patches/Typical-Example-Feedback.pd
new file mode 100644
index 0000000..d7ab4c1
--- /dev/null
+++ b/Example-Patches/Typical-Example-Feedback.pd
@@ -0,0 +1,114 @@
+#N canvas 188 84 1039 708 10;
+#X obj 194 128 pt.layerfx;
+#X obj 194 329 pt.rotate;
+#X obj 49 707 pt.dualfx;
+#X obj 669 468 pt.model;
+#X obj 524 378 pt.rotate;
+#X obj 669 348 pt.rotate;
+#X obj 524 305 pt.translate;
+#X obj 524 227 pt.fader;
+#X obj 364 198 pt.loop;
+#X obj 524 498 pt.text;
+#X obj 364 341 pt.source;
+#X obj 364 645 pt.scale;
+#X obj 194 402 pt.scale;
+#X obj 524 451 pt.scale;
+#X obj 669 421 pt.scale;
+#X obj 21 415 pt.interp;
+#X obj 194 257 pt.translate;
+#X obj 364 509 pt.translate;
+#X obj 669 275 pt.translate;
+#X obj 194 181 pt.fader;
+#X obj 364 432 pt.fader;
+#X obj 669 198 pt.fader;
+#X obj 21 279 pt.light 1;
+#X obj 364 378 pt.layerfx;
+#X obj 21 53 pt.window;
+#X obj 364 582 pt.rotate;
+#X obj 194 92 pt.live 640 480;
+#X obj 524 80 pt.entry;
+#X obj 194 54 pt.layer 1;
+#X obj 364 54 pt.layer 2;
+#X obj 364 692 pt.video;
+#X obj 194 449 pt.video;
+#X obj 817 53 pt.layer 5;
+#X obj 817 338 pt.rotate;
+#X obj 817 265 pt.translate;
+#X obj 817 486 pt.video;
+#X obj 817 80 pt.feedback;
+#X obj 817 411 pt.squeeze;
+#X obj 817 187 pt.fader;
+#X obj 524 53 pt.layer 3;
+#X obj 669 54 pt.layer 4;
+#X text 18 6 Typical Example with Feedback Layer pixelTANGO CVS: $Revision: 1.1 $
+$Date: 2005-11-26 22:21:06 $;
+#X obj 364 81 pt.filelist;
+#X obj 669 81 pt.filelist;
+#X connect 0 0 19 0;
+#X connect 0 1 19 1;
+#X connect 1 0 12 0;
+#X connect 1 1 12 1;
+#X connect 4 0 13 0;
+#X connect 4 1 13 1;
+#X connect 5 0 14 0;
+#X connect 5 1 14 1;
+#X connect 6 0 4 0;
+#X connect 6 1 4 1;
+#X connect 7 0 6 0;
+#X connect 7 2 6 1;
+#X connect 8 0 10 0;
+#X connect 8 1 10 1;
+#X connect 10 0 23 0;
+#X connect 10 1 23 1;
+#X connect 11 0 30 0;
+#X connect 11 1 30 1;
+#X connect 12 0 31 0;
+#X connect 12 1 31 1;
+#X connect 13 0 9 0;
+#X connect 13 1 9 1;
+#X connect 14 0 3 0;
+#X connect 14 1 3 1;
+#X connect 16 0 1 0;
+#X connect 16 1 1 1;
+#X connect 17 0 25 0;
+#X connect 17 1 25 1;
+#X connect 18 0 5 0;
+#X connect 18 1 5 1;
+#X connect 19 0 16 0;
+#X connect 19 2 16 1;
+#X connect 20 0 17 0;
+#X connect 20 2 17 1;
+#X connect 21 0 18 0;
+#X connect 21 2 18 1;
+#X connect 23 0 20 0;
+#X connect 23 1 20 1;
+#X connect 25 0 11 0;
+#X connect 25 1 11 1;
+#X connect 26 0 0 0;
+#X connect 26 1 0 1;
+#X connect 27 0 7 0;
+#X connect 27 1 7 1;
+#X connect 28 0 26 0;
+#X connect 28 1 26 1;
+#X connect 29 0 42 0;
+#X connect 29 1 42 1;
+#X connect 32 0 36 0;
+#X connect 32 1 36 1;
+#X connect 33 0 37 0;
+#X connect 33 1 37 1;
+#X connect 34 0 33 0;
+#X connect 34 1 33 1;
+#X connect 36 0 38 0;
+#X connect 36 1 38 1;
+#X connect 37 0 35 0;
+#X connect 37 1 35 1;
+#X connect 38 0 34 0;
+#X connect 38 2 34 1;
+#X connect 39 0 27 0;
+#X connect 39 1 27 1;
+#X connect 40 0 43 0;
+#X connect 40 1 43 1;
+#X connect 42 0 8 0;
+#X connect 42 1 8 1;
+#X connect 43 0 21 0;
+#X connect 43 1 21 1;
diff --git a/Example-Patches/Typical-Example-Presets.pd b/Example-Patches/Typical-Example-Presets.pd
new file mode 100644
index 0000000..826e4c6
--- /dev/null
+++ b/Example-Patches/Typical-Example-Presets.pd
@@ -0,0 +1,97 @@
+#N canvas 221 38 895 753 10;
+#X obj 194 128 pt.layerfx;
+#X obj 194 329 pt.rotate;
+#X obj 194 449 pt.video;
+#X obj 364 702 pt.video;
+#X obj 524 80 pt.entry;
+#X obj 669 468 pt.model;
+#X obj 194 54 pt.layer 1;
+#X obj 524 378 pt.rotate;
+#X obj 669 348 pt.rotate;
+#X obj 524 305 pt.translate;
+#X obj 524 227 pt.fader;
+#X obj 364 198 pt.loop;
+#X obj 524 498 pt.text;
+#X obj 364 54 pt.layer 2;
+#X obj 669 54 pt.layer 5;
+#X obj 524 53 pt.layer 4;
+#X obj 364 341 pt.source;
+#X obj 364 655 pt.scale;
+#X obj 194 402 pt.scale;
+#X obj 524 451 pt.scale;
+#X obj 669 421 pt.scale;
+#X obj 21 405 pt.interp;
+#X obj 194 257 pt.translate;
+#X obj 364 509 pt.translate;
+#X obj 669 275 pt.translate;
+#X obj 194 181 pt.fader;
+#X obj 364 432 pt.fader;
+#X obj 669 198 pt.fader;
+#X obj 21 269 pt.light 1;
+#X obj 364 378 pt.layerfx;
+#X obj 21 53 pt.window;
+#X obj 364 582 pt.rotate;
+#X obj 194 92 pt.live 640 480;
+#X obj 21 459 pt.presets;
+#X text 46 559 2 Create window and start rendering;
+#X text 46 579 3 Choose "preset-01" and "preset-02";
+#X text 18 5 Typical Example pixelTANGO CVS: $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $;
+#X text 25 539 ^^ 1 Load the "Typical-presets.dat" file;
+#X obj 364 81 pt.filelist;
+#X obj 669 81 pt.filelist;
+#X connect 0 0 25 0;
+#X connect 0 1 25 1;
+#X connect 1 0 18 0;
+#X connect 1 1 18 1;
+#X connect 4 0 10 0;
+#X connect 4 1 10 1;
+#X connect 6 0 32 0;
+#X connect 6 1 32 1;
+#X connect 7 0 19 0;
+#X connect 7 1 19 1;
+#X connect 8 0 20 0;
+#X connect 8 1 20 1;
+#X connect 9 0 7 0;
+#X connect 9 1 7 1;
+#X connect 10 0 9 0;
+#X connect 10 2 9 1;
+#X connect 11 0 16 0;
+#X connect 11 1 16 1;
+#X connect 13 0 38 0;
+#X connect 13 1 38 1;
+#X connect 14 0 39 0;
+#X connect 14 1 39 1;
+#X connect 15 0 4 0;
+#X connect 15 1 4 1;
+#X connect 16 0 29 0;
+#X connect 16 1 29 1;
+#X connect 17 0 3 0;
+#X connect 17 1 3 1;
+#X connect 18 0 2 0;
+#X connect 18 1 2 1;
+#X connect 19 0 12 0;
+#X connect 19 1 12 1;
+#X connect 20 0 5 0;
+#X connect 20 1 5 1;
+#X connect 22 0 1 0;
+#X connect 22 1 1 1;
+#X connect 23 0 31 0;
+#X connect 23 1 31 1;
+#X connect 24 0 8 0;
+#X connect 24 1 8 1;
+#X connect 25 0 22 0;
+#X connect 25 2 22 1;
+#X connect 26 0 23 0;
+#X connect 26 2 23 1;
+#X connect 27 0 24 0;
+#X connect 27 2 24 1;
+#X connect 29 0 26 0;
+#X connect 29 1 26 1;
+#X connect 31 0 17 0;
+#X connect 31 1 17 1;
+#X connect 32 0 0 0;
+#X connect 32 1 0 1;
+#X connect 38 0 11 0;
+#X connect 38 1 11 1;
+#X connect 39 0 27 0;
+#X connect 39 1 27 1;
diff --git a/Example-Patches/Typical-Example.pd b/Example-Patches/Typical-Example.pd
new file mode 100644
index 0000000..a38d0d8
--- /dev/null
+++ b/Example-Patches/Typical-Example.pd
@@ -0,0 +1,95 @@
+#N canvas 291 46 895 753 10;
+#X obj 194 344 pt.rotate;
+#X obj 194 464 pt.video;
+#X obj 364 701 pt.video;
+#X obj 524 80 pt.entry;
+#X obj 669 468 pt.model;
+#X obj 194 54 pt.layer 1;
+#X obj 524 378 pt.rotate;
+#X obj 669 348 pt.rotate;
+#X obj 524 305 pt.translate;
+#X obj 524 227 pt.fader;
+#X obj 364 197 pt.loop;
+#X obj 524 498 pt.text;
+#X obj 364 54 pt.layer 2;
+#X obj 669 54 pt.layer 5;
+#X obj 524 53 pt.layer 4;
+#X obj 364 340 pt.source;
+#X obj 364 654 pt.scale;
+#X obj 194 417 pt.scale;
+#X obj 524 451 pt.scale;
+#X obj 669 421 pt.scale;
+#X obj 21 415 pt.interp;
+#X obj 194 272 pt.translate;
+#X obj 364 508 pt.translate;
+#X obj 669 275 pt.translate;
+#X obj 194 196 pt.fader;
+#X obj 364 431 pt.fader;
+#X obj 669 198 pt.fader;
+#X obj 21 279 pt.light 1;
+#X obj 21 53 pt.window;
+#X obj 364 581 pt.rotate;
+#X text 18 6 Typical Example pixelTANGO CVS: $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $;
+#X obj 194 143 pt.layerfx;
+#X obj 364 377 pt.layerfx;
+#X obj 364 81 pt.filelist;
+#X obj 669 81 pt.filelist;
+#X obj 194 107 pt.live 640 480;
+#X msg 204 84 reset;
+#X connect 0 0 17 0;
+#X connect 0 1 17 1;
+#X connect 3 0 9 0;
+#X connect 3 1 9 1;
+#X connect 5 0 35 0;
+#X connect 5 1 35 1;
+#X connect 6 0 18 0;
+#X connect 6 1 18 1;
+#X connect 7 0 19 0;
+#X connect 7 1 19 1;
+#X connect 8 0 6 0;
+#X connect 8 1 6 1;
+#X connect 9 0 8 0;
+#X connect 9 2 8 1;
+#X connect 10 0 15 0;
+#X connect 10 1 15 1;
+#X connect 12 0 33 0;
+#X connect 12 1 33 1;
+#X connect 13 0 34 0;
+#X connect 13 1 34 1;
+#X connect 14 0 3 0;
+#X connect 14 1 3 1;
+#X connect 15 0 32 0;
+#X connect 15 1 32 1;
+#X connect 16 0 2 0;
+#X connect 16 1 2 1;
+#X connect 17 0 1 0;
+#X connect 17 1 1 1;
+#X connect 18 0 11 0;
+#X connect 18 1 11 1;
+#X connect 19 0 4 0;
+#X connect 19 1 4 1;
+#X connect 21 0 0 0;
+#X connect 21 1 0 1;
+#X connect 22 0 29 0;
+#X connect 22 1 29 1;
+#X connect 23 0 7 0;
+#X connect 23 1 7 1;
+#X connect 24 0 21 0;
+#X connect 24 2 21 1;
+#X connect 25 0 22 0;
+#X connect 25 2 22 1;
+#X connect 26 0 23 0;
+#X connect 26 2 23 1;
+#X connect 29 0 16 0;
+#X connect 29 1 16 1;
+#X connect 31 0 24 0;
+#X connect 31 1 24 1;
+#X connect 32 0 25 0;
+#X connect 32 1 25 1;
+#X connect 33 0 10 0;
+#X connect 33 1 10 1;
+#X connect 34 0 26 0;
+#X connect 34 1 26 1;
+#X connect 35 0 31 0;
+#X connect 35 1 31 1;
+#X connect 36 0 35 0;
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..546e546
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,70 @@
+This is the readme for the pre-release of pixelTANGO.
+pixelTANGO CVS Release $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $
+
+PixelTANGO is a set of abstractions and patches that make use
+of pd/Gem for creating visuals in a live performance setting.
+Of course it can be used for many other things and provides
+an interface to use the power of pd/Gem with a less-steep
+learning curve.
+
+PixelTANGO was written by Ben Bogart and Franz Hildgen @
+The SociŽtŽ des arts technologiques (SAT) as part of the
+Territoires Ouverts / Open Territories (TOT) project funded
+by Heritage Canada.
+
+For more information: http://www.tot.sat.qc.ca
+
+pixelTANGO is Copyright Ben Bogart, Franz Hildgen and The
+SociŽtŽ des arts technologiques.
+
+This is a pre-release, and not an official release supported
+by the SAT. There are many bugs and the software is incomplete.
+Nevertheless it is quite usable and will be the basis of future
+releases.
+
+This program is distributed under the terms of the GNU General Public
+License
+
+PixelTANGO is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+PixelTANGO is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with PixelTANGO; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+USAGE:
+
+Note this release is only supported by MacOSX (tested on 10.3) the
+required externals are available under linux, and the patches should
+be fully linux compatible. Feel free to take a crack at running it
+under linux.
+
+You must have PD/Gem installed to use pixelTANGO.
+Choose a place for PixelTANGO /usr/local/lib/pd seems natural.
+Add the "externals" folder to your PD path.
+Add the "abstractions" folder to your PD path.
+Add the "abstractions-memento" folder to your PD path.
+Add the "scripts" folder to your PD path.
+
+Run PD will flags such as:
+
+pd -rt -helppath /usr/local/lib/pd/PixelTANGO-release-0.1/help -path /usr/local/lib/pd/PixelTANGO-release-0.1/abstractions/ -path /usr/local/lib/pd/PixelTANGO-release-0.1/abstractions-memento -path /usr/local/lib/pd/PixelTANGO-release-0.1/externals/ -path /usr/local/lib/pd/PixelTANGO-release-0.1/scripts -nosound -nomidi -lib Gem:zexy:OSC:py
+
+Linux uses note that pixelTANGO has hard-coded directories for OSX in
+pt.entry and pt.layerfx. Open these files in an editor and change the
+"/Applications/..." paths to reflect where your fonts (for pt.entry)
+and fx/ abstractions (for pt.layerfx) are located.
+
+Try the included Example-Patches and give it a go. To get a run of
+existing PixelTANGO modules open the PixelTANGO-help.pd file. Help
+For each abstraction is available through the usual Right-Click or
+Bouble-Click menu.
+
+Have fun!
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;
diff --git a/dev-notes/Developer-Reference.txt b/dev-notes/Developer-Reference.txt
new file mode 100644
index 0000000..2f37baf
--- /dev/null
+++ b/dev-notes/Developer-Reference.txt
@@ -0,0 +1,113 @@
+pixelTANGO Developer Reference:
+CVS: $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $
+
+Required Externals:
+entry, Gem, OSC, pool, popup, prepend, pwd, tosymbol, tot, zexy, py
+
+Memento Note: (Put this in the pt.abstraction how-to)
+DO NOT USE a $0-in send or receive in any pt compatible abstraction. This s/r is reserved for memento functions.
+
+Creating .app using tcl/tk 8.4.9 standalone:
+1. Duplicate Miller's pd.app
+2. replace frameworks with those from tcl/tk standalone
+3. copy the "Wish Shell.rsrc" file as "Pd.rsrc" to Resources
+4. Copy the "Wish Shell" exec from tcl/tk standalone/MacOS to MacOS as "Pd"
+5. Add set tk::mac::CGAntialiasLimit 0 in pd.tk (aka AppMain.tcl) OPTIONAL for Antialiasing
+6. cd Resource/src then ./configure && make OPTIONAL perhaps for s_inter.c hack
+
+HACKS: (bad programming that is there just to make things work and need to be replaced by a better system!)
+
+delay 250 in register-head.pd is used to make sure that all abstractions have gotten the layerNum before sending the "register-head 0" message.
+
+Internal (Helper) Abstractions:
+
+Global Receives:
+
+Receive Name: Value: Notes:
+pt.loopBack layerNum [list] This receive is used to send data from a lower abstraction to an upper through bus. Only when the head matches is it sent.
+pt.layerNumDone layerNum When all abstractions in a layer get the layerNum, through control-bus, send this signal back to header to start abstraction registration by sending signal "register-head 0" through control-bus.
+pt.registerDone layerNum When the register-tail gets the register signal then send the layer number of the done layer and use this signal to generate the OSC names.
+pt.currentPreset float Set the current preset Value
+pt.videoPlaneSize 2 float list Sends the current gemwindow size to pt.video for filling screen
+pt.windowResolution 2 float list Sends the current gemwindow resolution to pt.feedback for good responce
+pt.osc osc message All modules not in layers get OSC messages from this receive.
+pt.updateArrays bang Updates dir2abstractionArray arrays
+
+OSC Names:
+
+General:
+pt.window /pt/window/fullscreen Fullscreen on Primary (0/1 for On/Off)
+ /pt/window/fsaa Full Scene Anti-Aliasing (6) (0/1 for On/Off)
+ /pt/window/light Render Lighting Effects (0/1 for On/Off)
+ /pt/window/cursor Cursor Visibility (0/1 for On/Off)
+ /pt/window/r Background Red Component (0 to 1)
+ /pt/window/g Background Green Component (0 to 1)
+ /pt/window/b Background Blue Component (0 to 1)
+ /pt/window/resolution Window Resolution (0:640x480,1:1024x512,2:512x512)
+ /pt/window/framerate Render Framerate (0:15fps,1:30fps,2:60fps,3:100fps)
+
+pt.interp /pt/interp/smoothness How fast to interpolate (1 Slow to 100 for Fast)
+ /pt/interp/type Interpolation Type (0-Low-Pass, 1-Linear, 2-None)
+
+pt.light /pt/light/[i]/x X position of Light (? to ?)
+ /pt/light/[i]/y Y position of Light (? to ?)
+ /pt/light/[i]/z Z position of Light (? to ?)
+ /pt/light/[i]/r Amount of red Light (0 to 1)
+ /pt/light/[i]/g Amount of green Light (0 to 1)
+ /pt/light/[i]/b Amount of blue Light (0 to 1)
+
+pt.animate /pt/animate/frame Set the Keyframe (0 to NumberOfKeyFrames)
+ (This is NOT state-saved)
+
+Headers:
+pt.layer /pt/[l]/vis Layer Visibility (0/1, turn on/off gemhead(s) )
+
+Modifiers:
+[l] for Layer Num (pt.layer creation argument)
+[i] for abstraction Instance name (starting with 1)
+
+pt.fader /pt/[l]/pt.fader/[i]/r Red Value (0 to 1)
+ /pt/[l]/pt.fader/[i]/g Green Value (0 to 1)
+ /pt/[l]/pt.fader/[i]/b Blue Value (0 to 1)
+ /pt/[l]/pt.fader/[i]/a Alpha Value (0 to 1)
+ /pt/[l]/pt.fader/[i]/alpha Turn Alpha Belending on/off (0/1)
+
+pt.translate /pt/[l]/pt.translate/[i]/x X Translation (-4 to 4)
+ /pt/[l]/pt.translate/[i]/y Y Translation (-4 to 4)
+ /pt/[l]/pt.translate/[i]/z Z Translation (-4 to 4)
+
+pt.rotate /pt/[l]/pt.rotate/[i]/x X Rotation (-180 to 180 Degrees)
+ /pt/[l]/pt.rotate/[i]/y Y Rotation (-180 to 180 Degrees)
+ /pt/[l]/pt.rotate/[i]/z Z Rotation (-180 to 180 Degrees)
+
+pt.scale /pt/[l]/pt.scale/[i]/s XYZ Scale (0.1 to 7)
+
+pt.squeeze /pt/[l]/pt.squeeze/[i]/x X Scale (0.1 to 4)
+ /pt/[l]/pt.squeeze/[i]/y Y Scale (0.1 to 4)
+ /pt/[l]/pt.squeeze/[i]/z Z Scale (0.1 to 4)
+
+pt.feedback /pt/[l]/pt.feedback/[i]/x_off Left Edge of Capture Area
+ /pt/[l]/pt.feedback/[i]/y_off Top Edge of Capture Area
+ /pt/[l]/pt.feedback/[i]/x_size Width of Capture Area
+ /pt/[l]/pt.feedback/[i]/y_size Height of Capture Area
+ /pt/[l]/pt.feedback/[i]/type Type of feedback: 0:snap,1:snap2tex
+
+pt.entry /pt/[l]/pt.entry/[i]/text List defining text
+ /pt/[l]/pt.entry/[i]/font-index Index # for font. (change to symbol in future?)
+ /pt/[l]/pt.entry/[i]/font-size Point size for font
+
+pt.layerfx /pt/[l]/pt.layerfx/[i]/amount Amount of effect (0 to 1)
+ /pt/[l]/pt.layerfx/[i]/fx-index Index # for effect (now 0 to 11)
+
+
+pt.live /pt/[l]/pt.live/[i]/width Pixel Width of Captured Frames (DO NOT change while render window is open!)
+ /pt/[l]/pt.live/[i]/height Pixel Height of Captured Frames "
+
+pt.loop /pt/[l]/pt.loop/[i]/loop Loop on/off (1/0)
+ /pt/[l]/pt.loop/[i]/in-point Loop in point (0-100%)
+ /pt/[l]/pt.loop/[i]/out-point Loop out point (0-100%)
+ /pt/[l]/pt.loop/[i]/rate playback speed in ms/frame
+ /pt/[l]/pt.loop/[i]/direction Loop direction (0-forward, 1-reverse, 2-ping-pong)
+
+pt.filelist /pt/[l]/pt.filelist/[i]/directory Directory in which to look for files
+ /pt/[l]/pt.filelist/[i]/pattern Glob pattern to select files eg *.mov
diff --git a/dev-notes/GOP_layout.txt b/dev-notes/GOP_layout.txt
new file mode 100644
index 0000000..b10bda9
--- /dev/null
+++ b/dev-notes/GOP_layout.txt
@@ -0,0 +1,27 @@
+GOP Sizes $Revision: 1.1 $ $Date: 2005-11-26 22:21:06 $
+
+Abstraction: Canvas Size: GOP Size:
+---------------------------------------------------------
+pt.window 128x210 130x212
+pt.layer 128x20 130x22
+pt.file 128x40 130x42
+pt.loop 128x136 130x138
+pt.source 128x30 130x32
+pt.layerfx 128x47 130x49
+pt.fader 128x70 130x72
+pt.translate 128x66 130x68
+pt.rotate 128x66 130x68
+pt.scale 128x40 130x42
+pt.video 128x16 130x18
+pt.light 128x130 130x132
+pt.interp 128x47 130x49
+pt.entry 128x140 130x142
+pt.text 128x14 130x16
+pt.model 128x14 130x16
+pt.live 128x23 130x25
+pt.feedback 128x130 130x132
+pt.squeeze 128x66 130x68
+pt.presets 128x70 130x72
+pt.animate 528x80 530x82
+pt.filelist 128x110 130x112
+pt.whatcolour 128x40 130x42
diff --git a/fonts/arial.ttf b/fonts/arial.ttf
new file mode 100644
index 0000000..fc0a41b
--- /dev/null
+++ b/fonts/arial.ttf
Binary files differ
diff --git a/fonts/times.ttf b/fonts/times.ttf
new file mode 100644
index 0000000..34b0864
--- /dev/null
+++ b/fonts/times.ttf
Binary files differ
diff --git a/help/pixelTANGO-help.pd b/help/pixelTANGO-help.pd
new file mode 100644
index 0000000..23eff46
--- /dev/null
+++ b/help/pixelTANGO-help.pd
@@ -0,0 +1,127 @@
+#N canvas 329 23 931 558 10;
+#X obj 18 259 cnv 15 440 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 485 cnv 15 900 45 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 6 cnv 15 900 30 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 21 259 * Headers (Modules at the top of layers);
+#X obj 19 280 pt.layer-help;
+#X obj 118 280 cnv 16 340 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 18 322 cnv 15 440 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 42 cnv 15 450 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 11 42 Start Here First: (from the readme);
+#X text 17 68 PixelTANGO is a set of abstractions and patches that
+make use of pd/Gem for creating visuals in a live performance setting.
+Of course it can be used for many other things and provides an interface
+to use the power of pd/Gem with a less-steep learning curve.;
+#X text 123 280 Header for all pT layers;
+#X text 21 322 * Footers (Modules at the bottom of layers);
+#X obj 19 343 pt.video-help;
+#X obj 118 343 cnv 16 340 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 118 363 cnv 16 340 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 19 363 pt.text-help;
+#X text 123 343 Defines a 2D video layer;
+#X text 123 363 Defines a text layer;
+#X obj 118 383 cnv 16 340 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 19 383 pt.model-help;
+#X text 123 383 Defines a 3D model (OBJ) layer;
+#X obj 468 42 cnv 15 440 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 598 63 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 471 42 * Modifiers (Go between Headers and Footers);
+#X obj 469 63 pt.entry-help;
+#X obj 598 83 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 83 pt.fader-help;
+#X text 603 83 RGBA colour fading for layer;
+#X obj 598 103 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 103 pt.file-help;
+#X text 603 63 Text entry for text layers;
+#X text 603 103 File selection for QTs \, Models etc.;
+#X obj 598 143 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 143 pt.layerfx-help;
+#X obj 469 283 pt.translate-help;
+#X obj 598 283 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 603 143 Pixel effects for layer textures;
+#X obj 598 163 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 163 pt.live-help;
+#X text 603 163 Live DV/firewire video input;
+#X obj 598 183 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 183 pt.loop-help;
+#X text 603 183 Looper for QT files;
+#X obj 598 203 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 203 pt.rotate-help;
+#X text 603 203 Control 3D rotation of layer;
+#X text 603 283 Control 3D translation of layer;
+#X obj 598 223 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 223 pt.scale-help;
+#X text 603 223 Control scale of layer;
+#X obj 598 243 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 243 pt.source-help;
+#X text 603 243 Texture source switcher;
+#X obj 598 263 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 263 pt.squeeze-help;
+#X text 603 263 Control independant XYZ scale of layer;
+#X obj 468 322 cnv 15 440 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 598 343 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 598 363 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 598 383 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 471 322 * General (Effect all layers in patch);
+#X obj 469 343 pt.light-help;
+#X text 603 343 Control lighting in scene;
+#X obj 469 363 pt.window-help;
+#X text 603 363 Render window controls;
+#X obj 469 383 pt.interp-help;
+#X text 603 383 Interpolation control;
+#X text 548 488 Copyright Ben Bogart \, Franz Hildgen \, \; The Societe
+des arts technologiques (SAT) & \; The Interaccess Electronic Media
+Arts Centre 2004;
+#X text 17 138 PixelTANGO was written by Ben Bogart and Franz Hildgen
+@ The Societe des arts technologiques (SAT) and at the Interaccess
+Electronic Media Arts Centre as part of the Territoires Ouverts / Open
+Territories (TOT) project funded by Heritage Canada.;
+#X text 17 208 PixelTANGO is Copyright Ben Bogart \, Franz Hildgen
+\, The Societe des arts technologiques and The Interaccess Electronic
+Media Arts Centre;
+#X text 468 7 Click on each pT object to get the full help for that
+module.;
+#X obj 598 403 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 403 pt.presets-help;
+#X text 603 403 Presets (State-Saving);
+#X obj 598 423 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 603 423 Animate params using presets;
+#X text 12 6 pixelTANGO HELP - Listing of Modules - CVS: $Revsion$
+;
+#X obj 469 423 pt.animate-help;
+#X obj 598 123 cnv 16 310 16 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 469 123 pt.filelist-help;
+#X text 603 123 Load a directory of files by wildcard;
+#N canvas 0 22 462 312 META 0;
+#X text 12 5 CATEGORY: PixelTANGO;
+#X text 12 15 KEYWORDS: pixeltango video gem graphics rradical index
+objects;
+#X restore 13 490 pd META;
diff --git a/help/pt.animate-help.pd b/help/pt.animate-help.pd
new file mode 100644
index 0000000..546af84
--- /dev/null
+++ b/help/pt.animate-help.pd
@@ -0,0 +1,100 @@
+#N canvas 194 100 932 627 10;
+#X obj 9 77 cnv 15 900 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 458 146 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 9 100 cnv 15 430 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 458 100 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 458 310 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 461 100 *Sliders:;
+#X obj 8 575 cnv 15 900 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 576 577 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 900 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 23 Type: General. Effects all layers in patch.;
+#X text 12 6 pixelTANGO HELP - pt.animate - Animate Parameters w/ Presets
+;
+#X text 11 77 Preset Animation Functions:;
+#X obj 180 464 pt.animate 10;
+#X text 12 100 *Introduction:;
+#X obj 458 210 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 461 310 *Notes;
+#X obj 8 350 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 11 350 *Bangs:;
+#X text 21 388 >>: Go to next key-frame;
+#X text 21 371 <<: Go to previous key-frame;
+#X text 21 407 Save: Write all key-frames to preset file;
+#X text 21 424 Load: Read all key-frames from preset file;
+#X text 471 121 Choose a key-frame \, random access with jump-on-click
+;
+#X text 471 167 Current-Key-Frame: Shows the key-frame set by the slider
+;
+#X text 12 39 Creation Arguments: pt.animate [number-of-keyframes]
+;
+#X text 471 184 Number-of-Key-Frame: Shows the total number of key-frames.
+;
+#X text 461 146 *Number Boxes: (Output only \, non-interactive);
+#X text 461 210 *Methods: Messages you can send to pt.animate;
+#X text 471 231 First Inlet:;
+#X text 481 248 "numKeys [integer]" sets the number of key-frames.
+;
+#X text 471 267 Second Inlet:;
+#X text 481 284 "[integer]" sets the current key-frame;
+#N canvas 121 78 745 414 Using 0;
+#X obj 8 356 cnv 15 700 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 376 358 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 700 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 176 25 You can use pt.loop to control pt.animate just like
+a video clip. Connect the left outleft of pt.animate to the right inlet
+of pt.loop. Connect the right outlet of pt.loop to the left inlet of
+pt.animate. pt.animate needs to tell pt.loop how many key-frames there
+are. This happens on load-bang so if pt.loop is not attached when pt.animate
+gets created pt.loop will not get the number of keyframes. To solve
+this copy and paste the pt.loop and pt.animate together or send the
+"numKeys [integer]" message to pt.animate to force it to resend the
+number of key-frames.;
+#X text 12 6 pixelTANGO HELP - Using pt.loop to control pt.animate
+;
+#X obj 177 254 pt.animate 10;
+#X obj 10 198 pt.loop;
+#X msg 177 231 numKeys 10;
+#X text 176 155 At this point you can now use pt.loop to control the
+playback of the frames just as you would control the playback of a
+video clip. The state of pt.loop will not be saved when used outside
+of a layer.;
+#X connect 5 0 6 1;
+#X connect 6 1 5 0;
+#X connect 7 0 5 0;
+#X restore 473 402 pd Using pt.loop with pt.animate;
+#X text 22 121 pt.animate provides the ability to animate all state-saved
+parameters in a patch. In actually pt.animate is a specialized interface
+for pt.presets. This means you cannot have both in one patch because
+as they will interfere. Presets can be thought of as key-frames when
+using this module. Unlike pt.presets the first key-frame/preset is
+selected by default. This means that any changes you make to parameters
+are automatically saved in the first key-frame.;
+#X text 22 238 The animation process is: Add pt.animate to a patch
+\, alter patch parameters to the desired intitial state. (This includes
+the interpolation params.) Press the ">>" Bang to go to the next frame
+and set the params for the next state. Once you have set a number of
+key-frames you can use the "<<" and ">>" to jump from one key-frame
+to the next \, or use the slider to jump to any frame and tween from
+the current frame.;
+#X text 471 332 Will interfere with pt.presets if both are in the patch.
+Like presets only parameters that have been changed will be saved in
+the key-frame. If you do not change a value it will stay the same throughout
+the animation regardless of the current keyframe.;
+#N canvas 0 22 466 316 META 0;
+#X text 12 5 CATEGORY: PixelTANGO;
+#X text 12 16 KEYWORDS: pixeltango animate presets keyframe;
+#X restore 13 582 pd META;
diff --git a/help/pt.entry-help.pd b/help/pt.entry-help.pd
new file mode 100644
index 0000000..9ae896a
--- /dev/null
+++ b/help/pt.entry-help.pd
@@ -0,0 +1,44 @@
+#N canvas 422 71 658 362 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 251 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 208 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 165 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 208 *Popup:;
+#X obj 8 315 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 317 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 23 Type: Modifier. Effects only layer with a pt.text footer.
+;
+#X text 12 6 pixelTANGO HELP - pt.entry - Text Control;
+#X text 177 77 Text Control Functions:;
+#N canvas 17 425 450 161 bugs 0;
+#X text 13 23 Entry send raw pd messages \, it is not parsed for special
+characters. this means that using " \; " or "$" or " \, " will cause
+strange things to happen. The benifit of this is you can use entry
+just like the "File" -> "Message" command. \; \; This may be fixed
+in a future release to remove special message characters. You can escape
+special characters with backslash.;
+#X restore 582 22 pd bugs;
+#X obj 24 95 pt.entry;
+#X text 12 39 Creation Arguments: None;
+#X text 187 165 *Entry:;
+#X text 197 186 Place to type your text. Copy-Paste works fine.;
+#X text 197 229 Change the type-face of the text.;
+#X text 187 97 *Bangs:;
+#X text 197 118 Send: Send message typed into entry box.;
+#X text 197 138 Clear: Clear message typed into entry box.;
+#X text 187 251 *Number Box:;
+#X text 197 272 Specify the point size of the type. Integers only.
+;
+#X obj 24 243 pt.text;
+#X connect 13 0 23 0;
+#X connect 13 1 23 1;
diff --git a/help/pt.fader-help.pd b/help/pt.fader-help.pd
new file mode 100644
index 0000000..6aec404
--- /dev/null
+++ b/help/pt.fader-help.pd
@@ -0,0 +1,21 @@
+#N canvas 422 71 661 242 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 195 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 197 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X obj 24 90 pt.fader;
+#X text 12 6 pixelTANGO HELP - pt.fader - Red \, Green \, Blue and
+Alpha;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 177 77 Red \, Green \, Blue and Alpha Functions:;
+#X text 187 97 *Sliders:;
+#X text 197 118 Alpha: Control transparency of layer;
+#X text 197 138 R/G/B: Control amount of Red \, Green & Blue in layer
+;
diff --git a/help/pt.feedback-help.pd b/help/pt.feedback-help.pd
new file mode 100644
index 0000000..72ce80e
--- /dev/null
+++ b/help/pt.feedback-help.pd
@@ -0,0 +1,34 @@
+#N canvas 422 71 666 370 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 100 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 315 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 317 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 6 pixelTANGO HELP - pt.feedback - Copy render window to
+layer;
+#X obj 24 135 pt.feedback;
+#X text 12 23 Type: Modifier. Uses images from all preceeding layers.
+;
+#X text 177 77 Feedback Functions:;
+#X text 187 100 *Number Boxs: (Set feedback cropping box of render
+window);
+#X text 197 121 X_Offset: Distance between left edge of render window
+and the left edge of the copied area.;
+#X text 197 151 Y_Offset: Distance between top edge of render window
+and the top edge of the copied area.;
+#X text 197 181 X_Size: Width of the copied area. (On some platforms
+this needs to be a value of 2^x);
+#X text 197 211 Y_Size: Height of the copied area. (On some platforms
+this needs to be a value of 2^x);
+#X obj 184 243 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 243 *Notes:;
+#X text 197 261 Default values presume a 640x480 render window. For
+a 512x512 window values should be 0 \, 0 \, 512 \, 512 or 0 \, 0 \,
+1024 \, 512 for 1024x512 window.;
diff --git a/help/pt.file-help.pd b/help/pt.file-help.pd
new file mode 100644
index 0000000..88883d4
--- /dev/null
+++ b/help/pt.file-help.pd
@@ -0,0 +1,19 @@
+#N canvas 422 71 658 210 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 165 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 167 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 97 *Bang:;
+#X obj 24 90 pt.file;
+#X text 197 118 Open: Popup file requester and pass filename to control
+bus.;
+#X text 177 77 File Management Functions:;
+#X text 12 6 pixelTANGO HELP - pt.file - File Management;
diff --git a/help/pt.filelist-help.pd b/help/pt.filelist-help.pd
new file mode 100644
index 0000000..878651b
--- /dev/null
+++ b/help/pt.filelist-help.pd
@@ -0,0 +1,45 @@
+#N canvas 358 149 657 499 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 458 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 460 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 97 *Bang:;
+#X obj 24 200 pt.filelist;
+#X text 197 118 Open: Popup requester to choose a directory.;
+#X obj 184 137 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 137 *Symbol:;
+#X text 197 158 The first Symbol box shows the directory chosen via
+the bang above. You can also type a path-name in manually here by clicking
+once and typing. Press enter to send path-name.;
+#X text 12 6 pixelTANGO HELP - pt.filelist - Choose files from directory
+;
+#X text 177 77 Functions:;
+#X obj 184 292 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 292 *Popup:;
+#X text 197 313 This popup lists all files matching the pattern. You
+can load a file by selecting.;
+#X obj 184 344 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 344 *Notes:;
+#X text 197 201 The second Symbol box labbeled "Pattern" is the glob
+style pattern for choosing files in the directory. For example to list
+all quicktime movies you can use the pattern "*.mov" Where "*" is expanded
+to refer to anything. The pattern "*" will list all files in the directory
+(including sub-directories!) The popup is updated when this value is
+sent.;
+#X text 197 365 Only the directory and pattern values are state-saved.
+The directory listing is not updated on load \, but only when a preset
+is selected \, or a new pattern has been entered.;
+#X text 197 405 The popup box saves a copy of the file-list when the
+patch is saved. If the files have not changed you can use the popup
+without updating the directory listing.;
diff --git a/help/pt.interp-help.pd b/help/pt.interp-help.pd
new file mode 100644
index 0000000..b2b13a7
--- /dev/null
+++ b/help/pt.interp-help.pd
@@ -0,0 +1,32 @@
+#N canvas 422 71 665 319 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 274 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 276 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 177 77 File Management Functions:;
+#X text 12 6 pixelTANGO HELP - pt.interp - Interpolation Control;
+#X obj 24 140 pt.interp;
+#X obj 184 151 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 151 *Popup:;
+#X text 187 97 *Slider:;
+#X text 197 189 Linear: Use normal linear interpolation.;
+#X text 197 172 Low-Pass: Use DSP lop~ to smooth out linear interpolation.
+;
+#X text 12 23 Type: General. Effects all interpolated controls in a
+patch.;
+#X text 197 118 Smoothness: Controls how smooth the controls are. Left
+for faster/rougher and right for slower/smoother.;
+#X obj 184 226 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 226 *Notes:;
+#X text 197 247 Low-Pass is the default value;
+#X text 197 207 None: Use no interpolation. Controls pass through.
+;
diff --git a/help/pt.layer-help.pd b/help/pt.layer-help.pd
new file mode 100644
index 0000000..8cf2822
--- /dev/null
+++ b/help/pt.layer-help.pd
@@ -0,0 +1,25 @@
+#N canvas 422 71 662 288 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 245 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 247 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 24 141 pt.layer 1;
+#X text 12 39 Creation Arguments: pt.layer [render order];
+#X obj 184 101 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 6 pixelTANGO HELP - pt.layer - Layer Header;
+#X text 12 23 Type: Header. Top of every pt layer;
+#X obj 184 151 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 151 *Notes:;
+#X text 187 101 *Toggle:;
+#X text 197 122 Show/Hide this layer;
+#X text 177 77 Layer Functions:;
+#X text 197 172 The creation argument (render order) starts in the
+back with 1 and goes forward up to 100 The back-most layer \, render
+order == 1 \, is turned on by default. All other layers are off by
+default.;
diff --git a/help/pt.layerfx-help.pd b/help/pt.layerfx-help.pd
new file mode 100644
index 0000000..b821a73
--- /dev/null
+++ b/help/pt.layerfx-help.pd
@@ -0,0 +1,36 @@
+#N canvas 422 71 670 487 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 394 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 396 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X obj 184 151 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 97 *Slider:;
+#X obj 184 327 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 327 *Notes:;
+#X text 12 6 pixelTANGO HELP - pt.layerfx - Pixel Based Effects;
+#X text 12 23 Type: Modifier. Effects only pixels/textures of own layer.
+;
+#X text 177 77 Layer Effects Functions:;
+#X text 197 118 fx_amount: Degree of effect;
+#X text 187 151 *Popup:;
+#X text 197 172 None: No pixel effect (inactive slider) \; edge: Edge-detection
+convolution \; emboss: Random bevelling effect (inactive slider) \;
+gain: Change gain/brightness of image \; motionblur: Fast objects become
+less visible \; negative: Reverse colour values (inactive slider) \;
+normalize: Normalize pixels (inactive slider) \; posterize: Reduce
+number of colours \; randomdot: Creates random-dot stereogram (inactive
+slider) \; roll: Shift pixels up with roll-over \; rtx: Transpose Time
+and X axes. BROKEN (inactive slider) \; scanline: Reduce number of
+vertical pixels;
+#X text 197 348 Only effects pixels/textures of layers. Will be a future
+interface to add your own filters.;
+#X obj 24 200 pt.layerfx;
diff --git a/help/pt.light-help.pd b/help/pt.light-help.pd
new file mode 100644
index 0000000..fa199d5
--- /dev/null
+++ b/help/pt.light-help.pd
@@ -0,0 +1,31 @@
+#N canvas 422 71 671 361 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 306 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 308 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X obj 184 233 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 233 *Notes:;
+#X text 177 77 Layer Effects Functions:;
+#X text 12 6 pixelTANGO HELP - pt.light - Lighting Control;
+#X text 12 23 Type: General. Effects all layers in patch.;
+#X obj 184 141 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 141 *Sliders:;
+#X text 197 162 Top: X position of light \; Left: Y position of light
+\; Bottom: Z position of light \; Red/Green/Blue: Amount of R/G/B in
+light \; White: Overall brightness of light (changes R \, G & B);
+#X text 187 97 *Bang:;
+#X text 197 118 Reset: Reset all controls to defaults w/ interpolation.
+;
+#X text 197 254 You must turn lighting on in the pt.window controls.
+You can have up to 8 lights in a patch but the more you add the slower
+the machine will render;
+#X obj 24 116 pt.light 1;
diff --git a/help/pt.live-help.pd b/help/pt.live-help.pd
new file mode 100644
index 0000000..b7a26cd
--- /dev/null
+++ b/help/pt.live-help.pd
@@ -0,0 +1,27 @@
+#N canvas 422 71 666 272 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 226 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 228 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 163 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 163 *Notes:;
+#X text 12 6 pixelTANGO HELP - pt.live - Capture live video (firewire)
+;
+#X text 12 39 Creation Arguments: pt.live [width] [height];
+#X obj 24 126 pt.live 320 240;
+#X text 187 97 *Number Boxes:;
+#X text 196 118 Left: Shows the pixel width of the captured video image.
+;
+#X text 196 135 Right: Shows the pixel height of the captured video
+image.;
+#X text 197 184 The width and height of the video capture can only
+be set on object creation via creation arguments.;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 177 77 Live Video Functions:;
diff --git a/help/pt.loop-help.pd b/help/pt.loop-help.pd
new file mode 100644
index 0000000..c917eba
--- /dev/null
+++ b/help/pt.loop-help.pd
@@ -0,0 +1,55 @@
+#N canvas 422 71 669 546 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 493 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 495 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 24 180 pt.loop;
+#X obj 24 322 pt.source;
+#X obj 184 273 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 339 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 194 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 194 *Sliders:;
+#X text 187 339 *Popup:;
+#X text 187 273 *Number Boxes:;
+#X text 187 97 *Toggle:;
+#X text 197 118 Loop_Film: Turn on and off looping of video file. Off
+by default.;
+#X obj 184 150 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 150 *Bang:;
+#X text 197 233 Out_Point: Set the relative out point of the loop;
+#X text 197 296 In_Point: Show the relative in point as percentage
+;
+#X text 197 314 Out_Point: Show the relative out point as percentage
+;
+#X text 12 23 Type: Modifier. Effects only layer. Requires pt.source
+;
+#X text 12 6 pixelTANGO HELP - pt.loop - Loop video file (Quicktime)
+;
+#X text 12 39 Creation Arguments: None;
+#X text 177 77 Loop Functions:;
+#X text 197 215 In_Point: Set the relative in point of the loop;
+#X text 197 251 Play_Rate: Control loop speed left(slow) to Right(fast)
+;
+#X text 197 360 Set the Loop direction (forward \, reverse and ping-pong)
+;
+#X text 197 171 Reset: Reset controls to defaults.;
+#X obj 184 381 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 381 *Notes:;
+#X text 197 402 The in and out points are relative because the left
+edge of the slider is the first frame and the right edge is the last
+frame. pt.loop requires pt.source to work properly. The number of frames
+is reported by pt.source and is passed to pt.loop via a loopBack in
+header and footers.;
+#X connect 4 0 5 0;
+#X connect 4 1 5 1;
diff --git a/help/pt.model-help.pd b/help/pt.model-help.pd
new file mode 100644
index 0000000..318df01
--- /dev/null
+++ b/help/pt.model-help.pd
@@ -0,0 +1,23 @@
+#N canvas 425 78 664 201 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 157 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 159 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 23 Type: Footer. Effects only its own layer;
+#X text 12 39 Creation Arguments: None;
+#X obj 24 124 pt.model;
+#X text 177 77 3D Model Functions:;
+#X obj 184 101 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 101 *Notes:;
+#X text 12 6 pixelTANGO HELP - pt.model - Load an 3D Model as layer
+;
+#X obj 24 77 pt.file;
+#X text 197 122 To load a model use an immediatly preceeding pt.file.
+Support Alias|Wavefront obj models.;
+#X connect 11 0 6 0;
+#X connect 11 1 6 1;
diff --git a/help/pt.presets-help.pd b/help/pt.presets-help.pd
new file mode 100644
index 0000000..daf6e81
--- /dev/null
+++ b/help/pt.presets-help.pd
@@ -0,0 +1,30 @@
+#N canvas 422 71 674 320 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 276 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 278 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 163 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: pt.live [width] [height];
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 12 6 pixelTANGO HELP - pt.presets - Manage Presets;
+#X text 177 77 Presets:;
+#X obj 24 128 pt.presets;
+#X text 187 97 *Popup:;
+#X text 196 118 Selecting the popup will associate the current state
+positions with that preset. Only changed parameters are stored.;
+#X text 13 289 CVS: $revision$;
+#X obj 184 216 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 216 *Notes:;
+#X text 197 237 The width and height of the video capture can only
+be set on object creation via creation arguments.;
+#X text 187 163 *Bangs:;
+#X text 197 184 Save: Save the set of presets to a file Load: Load
+the set of presets from a file;
diff --git a/help/pt.rotate-help.pd b/help/pt.rotate-help.pd
new file mode 100644
index 0000000..2c0b56c
--- /dev/null
+++ b/help/pt.rotate-help.pd
@@ -0,0 +1,23 @@
+#N canvas 422 71 660 252 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 147 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 205 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 207 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 147 *Sliders:;
+#X text 12 6 pixelTANGO HELP - pt.rotate - Rotate Layer;
+#X text 177 77 Rotational Functions:;
+#X obj 24 95 pt.rotate;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 97 *Bangs:;
+#X text 197 171 X/Y/Z: Control rotation on X \, Y and Z axes.;
+#X text 197 118 Reset: Reset controls to defaults w/ interpolation.
+;
diff --git a/help/pt.scale-help.pd b/help/pt.scale-help.pd
new file mode 100644
index 0000000..a6337e8
--- /dev/null
+++ b/help/pt.scale-help.pd
@@ -0,0 +1,24 @@
+#N canvas 422 71 662 245 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 147 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 200 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 202 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 147 *Sliders:;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 97 *Bangs:;
+#X text 197 118 Reset: Reset controls to defaults w/ interpolation.
+;
+#X text 12 6 pixelTANGO HELP - pt.scale - Scale Layer;
+#X text 177 77 Scaling Functions:;
+#X obj 24 108 pt.scale;
+#X text 197 171 Scale: Control scale on X \, Y and Z axes simultaneously.
+;
diff --git a/help/pt.source-help.pd b/help/pt.source-help.pd
new file mode 100644
index 0000000..4381f1b
--- /dev/null
+++ b/help/pt.source-help.pd
@@ -0,0 +1,30 @@
+#N canvas 422 71 662 347 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 245 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 302 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 304 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 24 164 pt.source;
+#X text 177 77 Source Functions:;
+#X text 187 97 *Popup: Set source of texture/pixel data;
+#X text 197 118 Image: pix_image is the image source. (This may cause
+crashes in some cases on OSX);
+#X text 197 147 Movie: pix_movie is the image source. (On OSX this
+loads all file types QT supports with the exception of MPEG1 and flash
+files. Other platforms support various file types.);
+#X text 197 187 Network_Stream: pix_dvts is the image source. This
+feature is not yet implimented but will allow receiving a network DV
+stream. In the mean-time try loading a SDP file with "Movie".;
+#X text 187 245 *Notes:;
+#X text 197 267 The middle outlet sends the number of frames in a video
+file.;
+#X text 12 6 pixelTANGO HELP - pt.source - Set texture source;
diff --git a/help/pt.squeeze-help.pd b/help/pt.squeeze-help.pd
new file mode 100644
index 0000000..271d96d
--- /dev/null
+++ b/help/pt.squeeze-help.pd
@@ -0,0 +1,25 @@
+#N canvas 422 71 664 256 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 147 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 205 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 207 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 147 *Sliders:;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 97 *Bangs:;
+#X text 197 118 Reset: Reset controls to defaults w/ interpolation.
+;
+#X text 12 6 pixelTANGO HELP - pt.squeeze - Squeeze and Stretch Layer
+;
+#X text 197 171 X/Y/Z: Control scaling on X \, Y and Z axes independantly.
+;
+#X text 177 77 Squeeze Functions:;
+#X obj 24 95 pt.squeeze;
diff --git a/help/pt.text-help.pd b/help/pt.text-help.pd
new file mode 100644
index 0000000..1ca299f
--- /dev/null
+++ b/help/pt.text-help.pd
@@ -0,0 +1,21 @@
+#N canvas 177 256 662 311 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 265 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 267 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 24 75 pt.entry;
+#X text 12 39 Creation Arguments: None;
+#X obj 24 223 pt.text;
+#X text 12 6 pixelTANGO HELP - pt.text - Text;
+#X text 12 23 Type: Footer. Needs to be controlled by pt.entry.;
+#X text 177 77 Text Functions: None. This is a footer module.;
+#X text 194 122 Right or Control click to get help on pt.entry;
+#X obj 184 100 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 100 *Notes:;
+#X connect 4 0 6 0;
+#X connect 4 1 6 1;
diff --git a/help/pt.translate-help.pd b/help/pt.translate-help.pd
new file mode 100644
index 0000000..1d8f6f0
--- /dev/null
+++ b/help/pt.translate-help.pd
@@ -0,0 +1,23 @@
+#N canvas 422 71 664 256 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 147 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 8 205 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 207 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X text 12 23 Type: Modifier. Effects only its own layer.;
+#X text 187 147 *Sliders:;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 97 *Bangs:;
+#X text 197 118 Reset: Reset controls to defaults w/ interpolation.
+;
+#X text 12 6 pixelTANGO HELP - pt.translate - Move layer in space;
+#X obj 24 95 pt.translate;
+#X text 197 171 X/Y/Z: Control translation on X \, Y and Z axes.;
+#X text 177 77 Translate Functions:;
diff --git a/help/pt.video-help.pd b/help/pt.video-help.pd
new file mode 100644
index 0000000..0d8d811
--- /dev/null
+++ b/help/pt.video-help.pd
@@ -0,0 +1,19 @@
+#N canvas 425 78 668 205 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 157 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 159 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 23 Type: Footer. Effects only its own layer;
+#X text 12 39 Creation Arguments: None;
+#X obj 184 101 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 101 *Notes:;
+#X obj 24 101 pt.video;
+#X text 12 6 pixelTANGO HELP - pt.video - 2D Video Layer;
+#X text 177 77 Video Functions:;
+#X text 197 122 Dynamically responds to the dimensions of the render
+window to always fill the screen & match aspect ratio.;
diff --git a/help/pt.whatcolour-help.pd b/help/pt.whatcolour-help.pd
new file mode 100644
index 0000000..cc34c9b
--- /dev/null
+++ b/help/pt.whatcolour-help.pd
@@ -0,0 +1,25 @@
+#N canvas 422 71 656 256 10;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 8 214 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 216 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: None;
+#X obj 184 96 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 187 96 *Notes:;
+#X text 12 6 pixelTANGO HELP - pt.whatcolour - What colour is pt.fader?
+;
+#X text 12 23 Type: layer. Only reports the colour of the fader above
+it.;
+#X obj 24 155 pt.whatcolour;
+#X obj 24 76 pt.fader;
+#X text 177 77 whatcolour:;
+#X text 197 117 Shows you what colour the pt.fader module above it
+is set to. Useful for choosing colours before an object becomes visible.
+;
+#X connect 10 0 9 0;
+#X connect 10 2 9 1;
diff --git a/help/pt.window-help.pd b/help/pt.window-help.pd
new file mode 100644
index 0000000..020629a
--- /dev/null
+++ b/help/pt.window-help.pd
@@ -0,0 +1,43 @@
+#N canvas 443 192 654 468 10;
+#X obj 24 105 pt.window 60;
+#X obj 174 77 cnv 15 460 15 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X obj 184 310 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 267 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X obj 184 97 cnv 15 450 15 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 197 178 Window: Create the render window and start rendering
+;
+#X text 197 196 Light: Turn on lighting;
+#X text 177 77 Window Management Functions:;
+#X text 187 267 *Sliders:;
+#X text 187 310 *Popup:;
+#X obj 8 431 cnv 15 640 30 empty empty empty 20 12 0 14 -261148 -66577
+0;
+#X text 306 433 Copyright Ben Bogart \, Franz Hildgen & \; The Societe
+des arts technologiques (SAT) 2004;
+#X obj 8 6 cnv 15 640 50 empty empty empty 20 12 0 14 -233017 -66577
+0;
+#X text 12 39 Creation Arguments: pt.window [frame-rate];
+#X text 187 97 *Toggles: (All of these functions can be turned on and
+off);
+#X text 197 118 Fullscreen: Expand render window to full-screen on
+primary display. Only has effect before creating render window.;
+#X text 197 148 FSAA(6): Turn on Full-Scene Anti-Aliasing. Only has
+effect before creating render window.;
+#X text 12 23 Type: General. Effects all layers in patch.;
+#X text 12 6 pixelTANGO HELP - pt.window - Window Management;
+#X text 197 288 Render window background colour;
+#X text 197 214 Cursor: Show or hide cursor in window. (not OSX compliant)
+;
+#X text 197 232 Border: Show or hide window titlebar. Only has effect
+before creating render window.;
+#X text 197 331 Resolution: Pixel resolution of render window \, pt.video
+layers and pt.feedback dimentions;
+#X text 197 361 Offset: X & Y distance from the upper-left corner of
+the primary display. Only has effect before creating the render window.
+;
+#X text 197 401 Frame-Rate: How many frames to render in one second.
+;
diff --git a/scripts/pt.py b/scripts/pt.py
new file mode 100644
index 0000000..e40cac0
--- /dev/null
+++ b/scripts/pt.py
@@ -0,0 +1,37 @@
+# PixelTANGO Python code for dirlist and stripExtension
+# Copyright Ben Bogart, Franz Hildgen,
+# The Societe des arts technologiques and
+# The Interaccess Electronic Media Arts Centre
+
+import os
+import os.path
+import glob
+
+print "pt: py scripts init"
+
+# Removes extension
+def stripExtension(arg):
+ return os.path.splitext(str(arg))[0]
+
+# Lists files matching pattern in path.
+def dirlist(*args):
+ if len(args) == 2:
+ pattern=str(args[0])
+ path=str(args[1])
+ files=list('') # Seems like a bad way to create a list var
+
+ test=os.path.join(path,pattern)
+ entries=glob.glob(test)
+
+ for entry in entries:
+ if os.path.isfile(entry):
+ files.append(entry)
+ return files
+ else:
+ print "pt: dirlist only accepts two arguments: [pattern] [path]"
+ print "args: ",args
+
+# Removed path component to leave only the filename.
+def stripPath(arg):
+ return os.path.basename(str(arg))
+