aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/examples/example03.pd12
-rw-r--r--doc/examples/example04.pd85
-rw-r--r--doc/examples/example05.pd142
-rw-r--r--doc/examples/example06.pd76
-rw-r--r--doc/introduction/control.pd (renamed from doc/control.pd)0
-rw-r--r--doc/introduction/input_output.pd75
-rw-r--r--doc/introduction/quicktime.pd (renamed from doc/quicktime.pd)0
-rw-r--r--doc/introduction/traffic.pd (renamed from doc/traffic.pd)0
-rw-r--r--doc/objects/README4
-rw-r--r--doc/objects/help_pdp_add.pd24
-rw-r--r--doc/objects/help_pdp_affine.pd18
-rw-r--r--doc/objects/help_pdp_bq.pd149
-rw-r--r--doc/objects/help_pdp_bqt.pd95
-rw-r--r--doc/objects/help_pdp_cheby.pd47
-rw-r--r--doc/objects/help_pdp_chrot.pd13
-rw-r--r--doc/objects/help_pdp_control.pd37
-rw-r--r--doc/objects/help_pdp_conv.pd44
-rw-r--r--doc/objects/help_pdp_del.pd24
-rw-r--r--doc/objects/help_pdp_gain.pd32
-rw-r--r--doc/objects/help_pdp_gradient.pd29
-rw-r--r--doc/objects/help_pdp_grey.pd17
-rw-r--r--doc/objects/help_pdp_mix.pd21
-rw-r--r--doc/objects/help_pdp_mix2.pd25
-rw-r--r--doc/objects/help_pdp_mul.pd24
-rw-r--r--doc/objects/help_pdp_noise.pd21
-rw-r--r--doc/objects/help_pdp_qt.pd71
-rw-r--r--doc/objects/help_pdp_qt~.pd25
-rw-r--r--doc/objects/help_pdp_randmix.pd21
-rw-r--r--doc/objects/help_pdp_reg.pd20
-rw-r--r--doc/objects/help_pdp_rotate.pd30
-rw-r--r--doc/objects/help_pdp_route.pd22
-rw-r--r--doc/objects/help_pdp_scale.pd32
-rw-r--r--doc/objects/help_pdp_scan~.pd41
-rw-r--r--doc/objects/help_pdp_scope~.pd23
-rw-r--r--doc/objects/help_pdp_snap.pd21
-rw-r--r--doc/objects/help_pdp_trigger.pd14
-rw-r--r--doc/objects/help_pdp_v4l.pd (renamed from doc/input_output.pd)47
-rw-r--r--doc/objects/help_pdp_xv.pd29
-rw-r--r--doc/objects/help_pdp_zoom.pd41
-rw-r--r--doc/objects/help_pdp_zrot.pd47
-rw-r--r--doc/objects/pdp_help_input.pd63
-rw-r--r--doc/objects/pdp_help_output.pd8
-rw-r--r--doc/reference.txt10
43 files changed, 1547 insertions, 32 deletions
diff --git a/doc/examples/example03.pd b/doc/examples/example03.pd
index 85f1c01..90b74c0 100644
--- a/doc/examples/example03.pd
+++ b/doc/examples/example03.pd
@@ -8,16 +8,16 @@
#X floatatom 240 518 5 0 0;
#X obj 68 514 pdp_blur;
#X obj 243 499 hsl 128 15 0 1 0 1 empty empty empty -2 -6 0 8 -262144
--1 -1 2400 1;
+-1 -1 5600 1;
#X floatatom 240 367 5 0 0;
#X obj 243 342 hsl 128 15 0 5 0 1 empty empty empty -2 -6 0 8 -262144
--1 -1 4400 1;
+-1 -1 500 1;
#X floatatom 240 587 5 0 0;
#X obj 243 567 hsl 128 15 0 1 0 1 empty empty empty -2 -6 0 8 -262144
--1 -1 5400 1;
+-1 -1 12700 1;
#X floatatom 239 428 5 0 0;
#X obj 242 409 hsl 128 15 -5 5 0 1 empty empty empty -2 -6 0 8 -262144
--1 -1 4200 1;
+-1 -1 8700 1;
#X msg 15 460 reset;
#X obj 68 459 pdp_add;
#X obj 68 357 pdp_gain;
@@ -49,8 +49,8 @@ signals is easily drawn. this network can be seen as a nonlinear feedback
delay network. (nonlinear because of the saturating gain). the image
delay line can be seen as a parallel delay line \, one for each pixel.
coupling between the delays is done using a spatial blur effect. the
-additional temporal filtering in't necessary \, but it produces a nice
-additional effect.;
+additional temporal filtering isn't necessary \, but it produces a
+nice additional effect.;
#X connect 0 0 16 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
diff --git a/doc/examples/example04.pd b/doc/examples/example04.pd
new file mode 100644
index 0000000..501d283
--- /dev/null
+++ b/doc/examples/example04.pd
@@ -0,0 +1,85 @@
+#N canvas 89 39 931 736 10;
+#X obj 68 204 pdp_noise;
+#X obj 68 85 metro 40;
+#X obj 68 58 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 112 303 pdp_gain;
+#X floatatom 240 518 5 0 0;
+#X obj 68 514 pdp_blur;
+#X obj 243 499 hsl 128 15 0 1 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 6500 1;
+#X floatatom 240 233 5 0 0;
+#X obj 243 208 hsl 128 15 0 5 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X floatatom 240 587 5 0 0;
+#X obj 243 567 hsl 128 15 0 1 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 5000 1;
+#X floatatom 239 307 5 0 0;
+#X obj 242 288 hsl 128 15 -5 5 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 8920 1;
+#X msg 15 339 reset;
+#X obj 68 338 pdp_add;
+#X obj 68 243 pdp_gain;
+#X text 393 286 a |gain| > 1 ensures regeneration;
+#X floatatom 119 56 5 0 0;
+#X obj 68 582 pdp_motion_phase;
+#X floatatom 133 338 5 0 0;
+#X text 392 495 blur ensures spatial coupling (determines the speed
+at which "blobs" move around the screen);
+#X text 392 565 a motion phase effect to spice it up (this causes local
+negative feedback around suddon changes);
+#X msg 109 13 40;
+#X msg 144 13 1000;
+#X msg 146 119 type grey;
+#X msg 147 90 type yv12;
+#X obj 68 619 pdp_xv;
+#X text 393 206 mix in some noise to get it going (set blur to minimal
+when starting so the added noise won't be blurred to black);
+#X obj 68 363 pdp_del 50;
+#X text 242 14 this example is like example03 with a zoom / rotation
+object thrown in;
+#X obj 68 480 pdp_zrot;
+#X floatatom 239 377 5 0 0;
+#X obj 242 358 hsl 128 15 0.1 10 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 8567 1;
+#X floatatom 239 446 5 0 0;
+#X obj 242 426 hsl 128 15 0 360 0 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 300 1;
+#X text 393 357 zoom;
+#X msg 239 334 1;
+#X msg 239 403 0;
+#X msg 239 261 1;
+#X text 392 420 rotation;
+#X connect 0 0 15 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 14 1;
+#X connect 5 0 18 0;
+#X connect 6 0 4 0;
+#X connect 6 0 5 1;
+#X connect 8 0 7 0;
+#X connect 8 0 15 1;
+#X connect 10 0 9 0;
+#X connect 10 0 18 1;
+#X connect 12 0 11 0;
+#X connect 12 0 3 1;
+#X connect 13 0 28 0;
+#X connect 14 0 28 0;
+#X connect 15 0 14 0;
+#X connect 17 0 1 1;
+#X connect 18 0 3 0;
+#X connect 18 0 26 0;
+#X connect 19 0 28 1;
+#X connect 22 0 17 0;
+#X connect 23 0 17 0;
+#X connect 24 0 0 0;
+#X connect 25 0 0 0;
+#X connect 28 0 30 0;
+#X connect 30 0 5 0;
+#X connect 31 0 30 1;
+#X connect 32 0 31 0;
+#X connect 33 0 30 2;
+#X connect 34 0 33 0;
+#X connect 36 0 32 0;
+#X connect 37 0 34 0;
+#X connect 38 0 12 0;
diff --git a/doc/examples/example05.pd b/doc/examples/example05.pd
new file mode 100644
index 0000000..02bc688
--- /dev/null
+++ b/doc/examples/example05.pd
@@ -0,0 +1,142 @@
+#N canvas 584 220 538 637 10;
+#X obj 10 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 120 117 pdp_grey;
+#X obj 435 194 pdp_control;
+#X msg 435 167 thread 0;
+#X obj 121 224 pdp_reg;
+#X floatatom 81 7 5 0 0;
+#X msg 35 10 stop;
+#X floatatom 187 341 5 0 0;
+#X obj 120 410 pdp_zrot;
+#X floatatom 188 389 5 0 0;
+#X obj 120 453 pdp_blur;
+#X floatatom 188 435 5 0 0;
+#X obj 120 92 pdp_noise;
+#X obj 120 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#N canvas 623 175 567 478 nlmap 0;
+#X obj 89 138 pdp_affine;
+#X msg 123 108 -1;
+#X msg 156 108 1;
+#X obj 92 161 pdp_mul;
+#X obj 95 189 pdp_gain;
+#X floatatom 234 159 5 0 0;
+#X msg 259 119 3.73;
+#X obj 100 272 pdp_affine;
+#X msg 134 242 -1;
+#X msg 167 242 1;
+#X obj 103 295 pdp_mul;
+#X obj 106 323 pdp_gain;
+#X floatatom 168 299 5 0 0;
+#X msg 185 271 3.73;
+#X obj 254 54 inlet;
+#X obj 79 55 inlet;
+#X obj 98 405 outlet;
+#X obj 164 60 loadbang;
+#X obj 190 84 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 260 220 this computes f(f(image));
+#X text 261 236 with f(x) = k*x*(1-x);
+#X text 286 160 k;
+#X text 260 253 the logistic map;
+#X text 173 353 2 iterations are used to eliminate most of the high
+frequency flickering;
+#X connect 0 0 3 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 2;
+#X connect 3 0 4 0;
+#X connect 4 0 10 1;
+#X connect 4 0 7 0;
+#X connect 5 0 4 1;
+#X connect 5 0 12 0;
+#X connect 6 0 5 0;
+#X connect 7 0 10 0;
+#X connect 8 0 7 1;
+#X connect 9 0 7 2;
+#X connect 10 0 11 0;
+#X connect 11 0 16 0;
+#X connect 12 0 11 1;
+#X connect 13 0 12 0;
+#X connect 14 0 5 0;
+#X connect 15 0 3 1;
+#X connect 15 0 0 0;
+#X connect 17 0 18 0;
+#X connect 18 0 2 0;
+#X connect 18 0 1 0;
+#X connect 18 0 6 0;
+#X connect 18 0 8 0;
+#X connect 18 0 9 0;
+#X restore 121 274 pd nlmap;
+#X obj 73 576 pdp_xv;
+#X floatatom 180 232 5 0 0;
+#X text 196 275 2 iterations of the logistic map function;
+#X obj 121 143 pdp_mul;
+#X obj 297 94 pdp_noise;
+#X obj 297 72 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 297 121 pdp_mul;
+#X obj 73 521 pdp_saturation;
+#X floatatom 166 490 5 0 0;
+#X obj 30 36 metro 70;
+#X msg 181 206 3.8;
+#X msg 186 318 1.17;
+#X msg 188 368 -2.33;
+#X text 242 341 zoom;
+#X text 241 391 rotate;
+#X msg 188 414 0.33;
+#X text 139 12 feedback with nonlinear mapping + zoom + rotate + blur
+;
+#X msg 82 -15 40;
+#X msg 116 -15 500;
+#X text 111 47 grey1;
+#X obj 212 119 pdp_grey;
+#X obj 212 94 pdp_noise;
+#X obj 212 72 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 203 49 grey2;
+#X text 287 50 colour1;
+#X obj 388 95 pdp_noise;
+#X obj 388 73 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 378 51 colour2;
+#X msg 238 463 -0.5;
+#X msg 282 463 0.5;
+#X connect 0 0 24 0;
+#X connect 1 0 18 1;
+#X connect 1 0 18 0;
+#X connect 3 0 2 0;
+#X connect 4 0 14 0;
+#X connect 5 0 24 1;
+#X connect 6 0 24 0;
+#X connect 7 0 8 1;
+#X connect 8 0 10 0;
+#X connect 9 0 8 2;
+#X connect 10 0 4 1;
+#X connect 11 0 10 1;
+#X connect 12 0 1 0;
+#X connect 13 0 12 0;
+#X connect 14 0 8 0;
+#X connect 14 0 22 0;
+#X connect 16 0 14 1;
+#X connect 18 0 4 0;
+#X connect 19 0 21 1;
+#X connect 19 0 21 0;
+#X connect 20 0 19 0;
+#X connect 21 0 4 0;
+#X connect 22 0 15 0;
+#X connect 23 0 22 1;
+#X connect 24 0 4 0;
+#X connect 25 0 16 0;
+#X connect 26 0 7 0;
+#X connect 27 0 9 0;
+#X connect 30 0 11 0;
+#X connect 32 0 5 0;
+#X connect 33 0 5 0;
+#X connect 35 0 4 0;
+#X connect 36 0 35 0;
+#X connect 37 0 36 0;
+#X connect 40 0 4 0;
+#X connect 41 0 40 0;
+#X connect 43 0 23 0;
+#X connect 44 0 23 0;
diff --git a/doc/examples/example06.pd b/doc/examples/example06.pd
new file mode 100644
index 0000000..82de63b
--- /dev/null
+++ b/doc/examples/example06.pd
@@ -0,0 +1,76 @@
+#N canvas 92 197 605 585 10;
+#X obj 24 85 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 42 25 stop;
+#X msg 80 24 bang;
+#X floatatom 122 25 5 0 0;
+#X obj 60 485 pdp_xv;
+#X obj 60 439 pdp_bq;
+#X obj 111 334 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 169 332 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X obj 97 278 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 154 277 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X msg 95 303 lr \$1;
+#X msg 150 304 rl \$1;
+#X msg 99 350 tb \$1;
+#X msg 154 351 bt \$1;
+#X obj 392 240 hsl 128 15 0.05 0.5 1 1 empty empty empty -2 -6 0 8
+-262144 -1 -1 3000 1;
+#X obj 450 280 hsl 128 15 0.1 10 1 1 empty empty empty -2 -6 0 8 -262144
+-1 -1 1900 1;
+#X obj 391 307 t b f;
+#X obj 394 345 pack s 0 0;
+#X msg 391 378 \$1 \$2 \$3;
+#X obj 447 310 t b f;
+#X msg 301 199 lpf;
+#X msg 333 200 apf;
+#X obj 130 198 random 2;
+#X obj 195 198 random 2;
+#X obj 60 147 pdp_trigger;
+#X obj 128 235 random 2;
+#X obj 193 235 random 2;
+#X obj 60 111 pdp_v4l;
+#X obj 301 121 loadbang;
+#X obj 60 53 metro 40;
+#X text 388 219 frequency;
+#X text 447 261 Q;
+#X text 312 175 filter type;
+#X connect 0 0 27 0;
+#X connect 1 0 29 0;
+#X connect 2 0 29 0;
+#X connect 3 0 29 1;
+#X connect 5 0 4 0;
+#X connect 6 0 12 0;
+#X connect 7 0 13 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 5 0;
+#X connect 11 0 5 0;
+#X connect 12 0 5 0;
+#X connect 13 0 5 0;
+#X connect 14 0 16 0;
+#X connect 15 0 19 0;
+#X connect 16 0 17 0;
+#X connect 16 1 17 1;
+#X connect 17 0 18 0;
+#X connect 18 0 5 0;
+#X connect 19 0 17 0;
+#X connect 19 1 17 2;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 8 0;
+#X connect 23 0 9 0;
+#X connect 24 0 5 0;
+#X connect 24 1 23 0;
+#X connect 24 1 22 0;
+#X connect 24 1 26 0;
+#X connect 24 1 25 0;
+#X connect 25 0 6 0;
+#X connect 26 0 7 0;
+#X connect 27 0 24 0;
+#X connect 28 0 20 0;
+#X connect 29 0 27 0;
diff --git a/doc/control.pd b/doc/introduction/control.pd
index 3898e1e..3898e1e 100644
--- a/doc/control.pd
+++ b/doc/introduction/control.pd
diff --git a/doc/introduction/input_output.pd b/doc/introduction/input_output.pd
new file mode 100644
index 0000000..afb1fa6
--- /dev/null
+++ b/doc/introduction/input_output.pd
@@ -0,0 +1,75 @@
+#N canvas 215 217 894 722 10;
+#X obj 107 427 pdp_v4l;
+#X obj 107 53 metro 40;
+#X msg 159 14 stop;
+#X msg 107 14 bang;
+#X msg 51 14 bang;
+#X obj 107 661 pdp_xv;
+#X msg 209 93 open /dev/video0;
+#X msg 209 117 open /dev/video1;
+#X text 347 95 you can choose the input device using the 'open' message.
+the default is /dev/video0;
+#X msg 209 142 close;
+#X text 348 143 closes the video port;
+#X msg 209 168 type yv12;
+#X msg 209 192 type grey;
+#X text 348 171 type sets the ouput image package type. currently only
+yv12 (luma/chroma color) and greyscale are supported.;
+#X msg 210 221 dim 320 240;
+#X msg 210 244 dim 640 480;
+#X text 348 215 dim sets the dimensions of the captured frame. please
+note that in all objects dimensions and packet type (color/greyscale)
+have to be the same to be combined (i.e. mixed);
+#X msg 210 556 dim 320 240;
+#X msg 210 579 dim 640 480;
+#X text 349 559 dim sets the window dimensions;
+#X msg 210 510 create;
+#X msg 210 531 destroy;
+#X text 208 447 pdp_xv ouputs video in a window using the xVideo extension.
+if your graphics card/driver supports it you can have multiple output
+windows. if a pdp message is received and a window is not open \, one
+is created automaticly.;
+#X text 349 513 use these messages to explicitly create/destroy the
+window;
+#X text 207 18 pdp_v4l grabs video from the video4linux device. it
+grabs a frame whenever a bang message is received. the output rate
+is limited by the maximum framerate of the video device. if there is
+no device opened \, it will attempt to open /dev/video0;
+#X msg 212 627 cursor \$1;
+#X obj 212 607 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X text 348 627 enables/disables cursor in xv window;
+#X msg 210 319 channel \$1;
+#X floatatom 210 295 5 0 0;
+#X text 347 320 sets the v4l channel (like tuner \, composite \, svideo
+\, ...);
+#X floatatom 210 359 5 0 0;
+#X msg 210 383 freq \$1;
+#X floatatom 271 359 5 0 0;
+#X msg 271 383 freqMHz \$1;
+#X text 346 359 sets the v4l tuner frequency (in v4l units and MHz)
+;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 9 0 0 0;
+#X connect 11 0 0 0;
+#X connect 12 0 0 0;
+#X connect 14 0 0 0;
+#X connect 15 0 0 0;
+#X connect 17 0 5 0;
+#X connect 18 0 5 0;
+#X connect 20 0 5 0;
+#X connect 21 0 5 0;
+#X connect 25 0 5 0;
+#X connect 26 0 25 0;
+#X connect 28 0 0 0;
+#X connect 29 0 28 0;
+#X connect 31 0 32 0;
+#X connect 32 0 0 0;
+#X connect 33 0 34 0;
+#X connect 34 0 0 0;
diff --git a/doc/quicktime.pd b/doc/introduction/quicktime.pd
index 2f32cfd..2f32cfd 100644
--- a/doc/quicktime.pd
+++ b/doc/introduction/quicktime.pd
diff --git a/doc/traffic.pd b/doc/introduction/traffic.pd
index 40f102d..40f102d 100644
--- a/doc/traffic.pd
+++ b/doc/introduction/traffic.pd
diff --git a/doc/objects/README b/doc/objects/README
new file mode 100644
index 0000000..94f8bb5
--- /dev/null
+++ b/doc/objects/README
@@ -0,0 +1,4 @@
+This directory contains help patches for the individual pdp modules and abstractions.
+Use the pdp_help_input.pd and pdp_help_output.pd patches to setup your desired in/out for
+the help patches.
+
diff --git a/doc/objects/help_pdp_add.pd b/doc/objects/help_pdp_add.pd
new file mode 100644
index 0000000..4105dcf
--- /dev/null
+++ b/doc/objects/help_pdp_add.pd
@@ -0,0 +1,24 @@
+#N canvas 180 63 511 383 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 322 pdp_help_output;
+#X obj 77 279 pdp_add;
+#X obj 121 246 pdp_reg;
+#X obj 196 183 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 229 181 click here;
+#X obj 77 163 pdp_gain;
+#X floatatom 128 135 5 0 0;
+#X msg 128 109 0.5;
+#X text 229 283 adds (and saturates) 2 packets;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 8 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 1;
+#X connect 6 0 5 0;
+#X connect 8 0 4 0;
+#X connect 8 0 5 1;
+#X connect 9 0 8 1;
+#X connect 10 0 9 0;
diff --git a/doc/objects/help_pdp_affine.pd b/doc/objects/help_pdp_affine.pd
new file mode 100644
index 0000000..3386fb8
--- /dev/null
+++ b/doc/objects/help_pdp_affine.pd
@@ -0,0 +1,18 @@
+#N canvas 278 50 576 226 10;
+#X obj 31 121 pdp_affine 1;
+#X obj 31 44 pdp_help_input;
+#X obj 31 175 pdp_help_output;
+#X floatatom 70 95 5 0 0;
+#X floatatom 118 95 5 0 0;
+#X msg 31 15 start;
+#X msg 77 15 stop;
+#X text 76 79 a;
+#X text 128 80 b;
+#X text 200 103 pdp_affine computes ax+b on an image x;
+#X text 200 121 its use is depreciated. use pdp_cheby instead.;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 3 0 0 1;
+#X connect 4 0 0 2;
+#X connect 5 0 1 0;
+#X connect 6 0 1 0;
diff --git a/doc/objects/help_pdp_bq.pd b/doc/objects/help_pdp_bq.pd
new file mode 100644
index 0000000..06c05da
--- /dev/null
+++ b/doc/objects/help_pdp_bq.pd
@@ -0,0 +1,149 @@
+#N canvas 364 134 765 779 10;
+#X floatatom 100 598 5 0 0;
+#X msg 28 361 ver \$1;
+#X msg 28 393 hor \$1;
+#X obj 96 362 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 95 389 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 28 629 pdp_bq;
+#X floatatom 89 495 5 0 0;
+#X msg 28 495 onep \$1;
+#X floatatom 89 526 5 0 0;
+#X msg 28 530 twop \$1;
+#X obj 85 272 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 87 304 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 79 209 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X obj 82 244 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
+;
+#X msg 28 209 lr \$1;
+#X msg 28 244 rl \$1;
+#X msg 28 277 tb \$1;
+#X msg 28 305 bt \$1;
+#X obj 454 406 t b f;
+#X floatatom 489 369 5 0 0;
+#X floatatom 488 317 5 0 0;
+#X obj 454 436 pack s 0 0;
+#X msg 454 469 \$1 \$2 \$3;
+#X obj 489 405 t b f;
+#X msg 410 370 lpf;
+#X msg 409 344 hpf;
+#X msg 409 398 apf;
+#X msg 409 425 bsf;
+#X obj 461 38 pdp_help_input;
+#X msg 461 13 start;
+#X msg 507 13 stop;
+#X obj 28 746 pdp_help_output;
+#X text 159 598 right inlet sets number of passes;
+#X text 37 16 pdp_bq: a spatial biquad filter;
+#X obj 495 196 pdp_blur;
+#X obj 598 194 pdp_phase;
+#X obj 461 93 pdp_route 3;
+#X obj 533 65 hdl 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X obj 41 670 r \$0-out;
+#X obj 495 246 s \$0-out;
+#X floatatom 544 119 5 0 0;
+#X floatatom 617 117 5 0 0;
+#X text 312 358 high pass;
+#X text 313 382 low pass;
+#X text 314 410 all pass;
+#X text 313 439 band stop;
+#X text 541 367 pole Q;
+#X text 94 31 it is a bit awkward to use directly;
+#X text 94 45 try one of the abstractions (pdp_blur and;
+#X text 95 61 pdp_phase);
+#X text 122 208 left->right;
+#X text 124 242 right->left;
+#X text 126 272 top->bottom;
+#X text 126 300 bottom->top;
+#X text 133 359 bt and tb;
+#X text 132 383 lr and rl;
+#X text 147 494 one pole filter;
+#X text 146 524 double one pole filter;
+#X msg 89 464 0.1;
+#X msg 556 95 0.5;
+#X msg 616 94 0.5;
+#X text 588 62 choose example here;
+#X msg 672 118 1;
+#X msg 673 140 0;
+#X msg 673 163 -1;
+#X msg 712 116 1;
+#X msg 713 138 0;
+#X msg 713 161 -1;
+#X text 93 91 "unstable" behaviour is possible;
+#X msg 490 347 0.1;
+#X msg 488 293 0.3;
+#X obj 28 720 pdp_gain;
+#X floatatom 112 693 5 0 0;
+#X msg 112 671 1;
+#X text 95 107 when frequency and Q are outside their;
+#X text 96 122 sensible ranges;
+#X text 122 180 set filter direction:;
+#X text 264 342 set the filter type:;
+#X text 137 476 set the filter type:;
+#X text 538 319 (between 0 and 1 \, 0.5 = nyquist);
+#X text 540 333;
+#X text 540 305 pole frequency;
+#X msg 100 572 1;
+#X connect 0 0 5 1;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 71 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 9 0;
+#X connect 8 0 9 0;
+#X connect 9 0 5 0;
+#X connect 10 0 16 0;
+#X connect 11 0 17 0;
+#X connect 12 0 14 0;
+#X connect 13 0 15 0;
+#X connect 14 0 5 0;
+#X connect 15 0 5 0;
+#X connect 16 0 5 0;
+#X connect 17 0 5 0;
+#X connect 18 0 21 0;
+#X connect 18 1 21 1;
+#X connect 19 0 23 0;
+#X connect 20 0 18 0;
+#X connect 21 0 22 0;
+#X connect 22 0 5 0;
+#X connect 23 0 21 0;
+#X connect 23 1 21 2;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 21 0;
+#X connect 27 0 21 0;
+#X connect 28 0 36 0;
+#X connect 29 0 28 0;
+#X connect 30 0 28 0;
+#X connect 34 0 39 0;
+#X connect 35 0 39 0;
+#X connect 36 0 5 0;
+#X connect 36 1 34 0;
+#X connect 36 2 35 0;
+#X connect 37 0 36 1;
+#X connect 38 0 71 0;
+#X connect 40 0 34 1;
+#X connect 41 0 35 1;
+#X connect 58 0 6 0;
+#X connect 59 0 40 0;
+#X connect 60 0 41 0;
+#X connect 62 0 35 2;
+#X connect 63 0 35 2;
+#X connect 64 0 35 2;
+#X connect 65 0 35 3;
+#X connect 66 0 35 3;
+#X connect 67 0 35 3;
+#X connect 69 0 19 0;
+#X connect 70 0 20 0;
+#X connect 71 0 31 0;
+#X connect 72 0 71 1;
+#X connect 73 0 72 0;
+#X connect 82 0 0 0;
diff --git a/doc/objects/help_pdp_bqt.pd b/doc/objects/help_pdp_bqt.pd
new file mode 100644
index 0000000..a2f483e
--- /dev/null
+++ b/doc/objects/help_pdp_bqt.pd
@@ -0,0 +1,95 @@
+#N canvas 384 88 785 659 10;
+#X floatatom 88 211 5 0 0;
+#X msg 27 211 onep \$1;
+#X floatatom 88 242 5 0 0;
+#X msg 27 246 twop \$1;
+#X obj 454 406 t b f;
+#X floatatom 489 369 5 0 0;
+#X floatatom 488 317 5 0 0;
+#X obj 454 436 pack s 0 0;
+#X msg 454 469 \$1 \$2 \$3;
+#X obj 489 405 t b f;
+#X msg 410 370 lpf;
+#X msg 409 344 hpf;
+#X msg 409 398 apf;
+#X msg 409 425 bsf;
+#X obj 461 38 pdp_help_input;
+#X msg 461 13 start;
+#X msg 507 13 stop;
+#X obj 27 616 pdp_help_output;
+#X obj 461 93 pdp_route 3;
+#X obj 533 65 hdl 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X obj 40 540 r \$0-out;
+#X obj 558 231 s \$0-out;
+#X floatatom 490 157 5 0 0;
+#X floatatom 601 156 5 0 0;
+#X text 312 358 high pass;
+#X text 313 382 low pass;
+#X text 314 410 all pass;
+#X text 313 439 band stop;
+#X text 541 367 pole Q;
+#X text 99 31 it is a bit awkward to use directly;
+#X text 146 210 one pole filter;
+#X text 145 240 double one pole filter;
+#X msg 88 180 0.1;
+#X msg 502 133 0.5;
+#X msg 600 133 0.5;
+#X text 588 62 choose example here;
+#X text 93 91 "unstable" behaviour is possible;
+#X msg 490 347 0.1;
+#X msg 488 293 0.3;
+#X obj 27 590 pdp_gain;
+#X floatatom 118 564 5 0 0;
+#X msg 118 542 1;
+#X text 95 107 when frequency and Q are outside their;
+#X text 96 122 sensible ranges;
+#X text 264 342 set the filter type:;
+#X text 136 192 set the filter type:;
+#X text 538 319 (between 0 and 1 \, 0.5 = nyquist);
+#X text 540 333;
+#X text 540 305 pole frequency;
+#X text 37 16 pdp_bqt: a temporal biquad filter;
+#X text 99 45 try one of the abstractions (pdp_motion_blur and;
+#X text 100 61 pdp_motion_phase);
+#X obj 434 190 pdp_motion_blur;
+#X obj 558 190 pdp_motion_phase;
+#X obj 27 499 pdp_bqt;
+#X connect 0 0 1 0;
+#X connect 1 0 54 0;
+#X connect 2 0 3 0;
+#X connect 2 0 3 0;
+#X connect 3 0 54 0;
+#X connect 4 0 7 0;
+#X connect 4 1 7 1;
+#X connect 5 0 9 0;
+#X connect 6 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 54 0;
+#X connect 9 0 7 0;
+#X connect 9 1 7 2;
+#X connect 10 0 7 0;
+#X connect 11 0 7 0;
+#X connect 12 0 7 0;
+#X connect 13 0 7 0;
+#X connect 14 0 18 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 18 0 54 0;
+#X connect 18 1 52 0;
+#X connect 18 2 53 0;
+#X connect 19 0 18 1;
+#X connect 20 0 39 0;
+#X connect 22 0 52 1;
+#X connect 23 0 53 1;
+#X connect 32 0 0 0;
+#X connect 33 0 22 0;
+#X connect 34 0 23 0;
+#X connect 37 0 5 0;
+#X connect 38 0 6 0;
+#X connect 39 0 17 0;
+#X connect 40 0 39 1;
+#X connect 41 0 40 0;
+#X connect 52 0 21 0;
+#X connect 53 0 21 0;
+#X connect 54 0 39 0;
diff --git a/doc/objects/help_pdp_cheby.pd b/doc/objects/help_pdp_cheby.pd
new file mode 100644
index 0000000..ada420b
--- /dev/null
+++ b/doc/objects/help_pdp_cheby.pd
@@ -0,0 +1,47 @@
+#N canvas 57 353 672 516 10;
+#X msg 81 108 coef 0 \$1;
+#X floatatom 113 78 5 0 0;
+#X floatatom 180 81 5 0 0;
+#X msg 160 109 coef 1 \$1;
+#X floatatom 276 78 5 0 0;
+#X msg 244 108 coef 2 \$1;
+#X floatatom 356 77 5 0 0;
+#X msg 324 107 coef 3 \$1;
+#X obj 51 372 pdp_cheby 3;
+#X floatatom 338 324 5 0 0;
+#X msg 340 194 chan 1;
+#X text 216 52 coefficients;
+#X msg 339 233 chan 0;
+#X msg 394 194 chan 2;
+#X msg 448 194 chan 3;
+#X text 152 363 creation arg: order (nb coefs = order + 1);
+#X text 153 379 (default = minimal order = 2);
+#X msg 338 274 reset;
+#X obj 51 41 pdp_help_input;
+#X msg 51 11 start;
+#X msg 100 11 stop;
+#X obj 51 414 pdp_help_output;
+#X text 392 234 all channels;
+#X text 391 324 right inlet: number of iterations;
+#X text 390 273 set all coefs to 0;
+#X msg 338 303 1;
+#X text 340 173 select colour channel to be processed;
+#X connect 0 0 8 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 8 0;
+#X connect 4 0 5 0;
+#X connect 5 0 8 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 21 0;
+#X connect 9 0 8 1;
+#X connect 10 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 8 0;
+#X connect 14 0 8 0;
+#X connect 17 0 8 0;
+#X connect 18 0 8 0;
+#X connect 19 0 18 0;
+#X connect 20 0 18 0;
+#X connect 25 0 9 0;
diff --git a/doc/objects/help_pdp_chrot.pd b/doc/objects/help_pdp_chrot.pd
new file mode 100644
index 0000000..fb59ed5
--- /dev/null
+++ b/doc/objects/help_pdp_chrot.pd
@@ -0,0 +1,13 @@
+#N canvas 355 66 554 208 10;
+#X obj 74 64 pdp_help_input;
+#X msg 74 31 start;
+#X msg 124 31 stop;
+#X obj 74 121 pdp_chrot;
+#X obj 74 157 pdp_help_output;
+#X floatatom 151 99 5 0 0;
+#X text 204 100 rotate the chroma components by this angle;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 1;
diff --git a/doc/objects/help_pdp_control.pd b/doc/objects/help_pdp_control.pd
new file mode 100644
index 0000000..fccb5e9
--- /dev/null
+++ b/doc/objects/help_pdp_control.pd
@@ -0,0 +1,37 @@
+#N canvas 259 276 579 567 10;
+#X obj 237 316 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
+1;
+#X obj 237 406 pdp_control;
+#X msg 237 357 thread \$1;
+#X obj 48 54 pdp_help_input;
+#X msg 48 24 start;
+#X msg 105 24 stop;
+#X obj 48 205 pdp_help_output;
+#X obj 48 154 pdp_conv;
+#X floatatom 117 86 5 0 0;
+#X obj 79 350 osc~;
+#X floatatom 79 315 5 0 0;
+#X obj 79 419 osc~;
+#X floatatom 112 391 5 0 0;
+#X obj 79 449 dac~;
+#X obj 237 445 print;
+#X text 276 314 switch thread processing on or of;
+#X text 291 446 a pdp_drop message will be sent out;
+#X text 291 462 when a package is dropped;
+#X text 175 82 increase this with thread processing enabled \, no audio
+should be dropped. if you do it with thread processing enabled \, increasing
+it too much can lock up the machine when real time scheduling is enabled.
+;
+#X text 119 155 a convolution object to burn cycles;
+#X connect 0 0 2 0;
+#X connect 1 0 14 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 1;
+#X connect 9 0 11 0;
+#X connect 10 0 9 0;
+#X connect 11 0 13 0;
+#X connect 12 0 11 1;
diff --git a/doc/objects/help_pdp_conv.pd b/doc/objects/help_pdp_conv.pd
new file mode 100644
index 0000000..aed62e2
--- /dev/null
+++ b/doc/objects/help_pdp_conv.pd
@@ -0,0 +1,44 @@
+#N canvas 450 114 702 535 10;
+#X obj 39 353 pdp_conv;
+#X floatatom 90 326 5 0 0;
+#X msg 87 195 hor \$1;
+#X msg 86 137 ver \$1;
+#X obj 87 170 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 1 1
+;
+#X obj 86 112 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 1 1
+;
+#X msg 89 264 vmask 0.25 0.5 0.25;
+#X msg 89 291 hmask 0.25 0.5 0.25;
+#X msg 88 239 vmask 0.25 -0.5 0.25;
+#X obj 39 63 pdp_help_input;
+#X msg 39 24 start;
+#X msg 86 24 stop;
+#X obj 39 480 pdp_help_output;
+#X obj 39 436 pdp_gain;
+#X floatatom 90 409 5 0 0;
+#X msg 90 386 1;
+#X text 162 327 right inlet sets number of iterations;
+#X text 263 239 these messages set the horizontal and vertical convolution
+masks. note that there is no support for 2 dimensional masks. if you
+want that you'll need to factor things out. (see the pdp_conv_* abstractions
+for examples);
+#X text 264 157 enable/disable horizontal and vertical masks;
+#X text 162 428 note: mask coefficents are between -1 and 1;
+#X text 162 441 use a gain object to compensate for this;
+#X msg 128 385 9;
+#X connect 0 0 13 0;
+#X connect 1 0 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 13 0 12 0;
+#X connect 14 0 13 1;
+#X connect 15 0 14 0;
+#X connect 21 0 14 0;
diff --git a/doc/objects/help_pdp_del.pd b/doc/objects/help_pdp_del.pd
new file mode 100644
index 0000000..cc68094
--- /dev/null
+++ b/doc/objects/help_pdp_del.pd
@@ -0,0 +1,24 @@
+#N canvas 414 20 609 368 10;
+#X floatatom 107 116 5 0 0;
+#X floatatom 64 207 5 0 0;
+#X obj 20 60 pdp_help_input;
+#X msg 20 31 start;
+#X msg 72 30 stop;
+#X obj 42 147 pdp_del 50;
+#X obj 20 236 pdp_mix;
+#X obj 20 268 pdp_help_output;
+#X msg 64 183 0.5;
+#X text 164 116 right inlet sets current delay length;
+#X text 164 149 a packet delay line.;
+#X text 164 165 creation arg = max delay length;
+#X text 164 180 (dont make this too large \, packets are not compressed!)
+;
+#X connect 0 0 5 1;
+#X connect 1 0 6 2;
+#X connect 2 0 5 0;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 1;
+#X connect 6 0 7 0;
+#X connect 8 0 1 0;
diff --git a/doc/objects/help_pdp_gain.pd b/doc/objects/help_pdp_gain.pd
new file mode 100644
index 0000000..eec7e76
--- /dev/null
+++ b/doc/objects/help_pdp_gain.pd
@@ -0,0 +1,32 @@
+#N canvas 317 409 546 403 10;
+#X msg 91 25 start;
+#X msg 139 25 stop;
+#X obj 91 56 pdp_help_input;
+#X obj 91 350 pdp_help_output;
+#X obj 91 274 pdp_gain;
+#X floatatom 142 245 5 0 0;
+#X text 201 243 right inlet sets overal gain;
+#X msg 127 159 y \$1;
+#X msg 176 159 v \$1;
+#X msg 224 158 u \$1;
+#X floatatom 127 122 5 0 0;
+#X floatatom 176 122 5 0 0;
+#X floatatom 224 122 5 0 0;
+#X text 281 121 set individual channel gains;
+#X text 301 144 y: luma;
+#X text 301 160 v: chroma red;
+#X text 301 175 u: chroma blue;
+#X text 201 290 creation argument sets initial gain;
+#X text 200 308 (default = 1);
+#X text 202 274 pdp_gain clips when overdriven;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 1;
+#X connect 7 0 4 0;
+#X connect 8 0 4 0;
+#X connect 9 0 4 0;
+#X connect 10 0 7 0;
+#X connect 11 0 8 0;
+#X connect 12 0 9 0;
diff --git a/doc/objects/help_pdp_gradient.pd b/doc/objects/help_pdp_gradient.pd
new file mode 100644
index 0000000..ece3876
--- /dev/null
+++ b/doc/objects/help_pdp_gradient.pd
@@ -0,0 +1,29 @@
+#N canvas 489 317 590 374 10;
+#X obj 46 291 pdp_gradient;
+#X floatatom 188 114 5 0 0;
+#X obj 145 143 t b f;
+#X floatatom 140 114 5 0 0;
+#X obj 104 144 t b f;
+#X floatatom 93 114 5 0 0;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 337 pdp_help_output;
+#X text 150 283 apply a color gradient to a greyscale image or the
+luma channel of a colour image;
+#X obj 93 181 pack 0 0 0;
+#X msg 93 216 rgb \$1 \$2 \$3;
+#X text 107 91 red green blue;
+#X connect 0 0 9 0;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 2 1 11 2;
+#X connect 3 0 4 0;
+#X connect 4 0 11 0;
+#X connect 4 1 11 1;
+#X connect 5 0 11 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 6 0;
+#X connect 11 0 12 0;
+#X connect 12 0 0 0;
diff --git a/doc/objects/help_pdp_grey.pd b/doc/objects/help_pdp_grey.pd
new file mode 100644
index 0000000..cd8d4e2
--- /dev/null
+++ b/doc/objects/help_pdp_grey.pd
@@ -0,0 +1,17 @@
+#N canvas 556 468 575 277 10;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 225 pdp_help_output;
+#X obj 118 69 hdl 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X obj 46 90 pdp_route 2;
+#X obj 118 154 pdp_grey;
+#X text 194 155 convert a packet to greyscale;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 5 1;
+#X connect 5 0 3 0;
+#X connect 5 1 6 0;
+#X connect 6 0 3 0;
diff --git a/doc/objects/help_pdp_mix.pd b/doc/objects/help_pdp_mix.pd
new file mode 100644
index 0000000..92ed2bc
--- /dev/null
+++ b/doc/objects/help_pdp_mix.pd
@@ -0,0 +1,21 @@
+#N canvas 314 353 576 288 10;
+#X obj 103 132 pdp_reg;
+#X obj 201 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 200 155 5 0 0;
+#X obj 81 48 pdp_help_input;
+#X msg 81 18 start;
+#X msg 130 18 stop;
+#X obj 81 238 pdp_help_output;
+#X text 268 80 click here;
+#X text 268 175 0 = left \, 1 = right;
+#X obj 81 184 pdp_mix;
+#X text 268 159 crossfade between 2 packets;
+#X connect 0 0 9 1;
+#X connect 1 0 0 0;
+#X connect 2 0 9 2;
+#X connect 3 0 0 1;
+#X connect 3 0 9 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 9 0 6 0;
diff --git a/doc/objects/help_pdp_mix2.pd b/doc/objects/help_pdp_mix2.pd
new file mode 100644
index 0000000..aa492b1
--- /dev/null
+++ b/doc/objects/help_pdp_mix2.pd
@@ -0,0 +1,25 @@
+#N canvas 314 353 576 288 10;
+#X obj 98 132 pdp_reg;
+#X obj 201 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 205 138 5 0 0;
+#X obj 81 48 pdp_help_input;
+#X msg 81 18 start;
+#X msg 130 18 stop;
+#X obj 81 238 pdp_help_output;
+#X text 268 80 click here;
+#X obj 81 201 pdp_mix2;
+#X floatatom 205 161 5 0 0;
+#X text 158 199 pdp_mix2 adds two packets after applying attenuation
+;
+#X text 268 136 left packet attenuation;
+#X text 268 159 right packet attenuation;
+#X connect 0 0 8 1;
+#X connect 1 0 0 0;
+#X connect 2 0 8 2;
+#X connect 3 0 0 1;
+#X connect 3 0 8 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 8 0 6 0;
+#X connect 9 0 8 3;
diff --git a/doc/objects/help_pdp_mul.pd b/doc/objects/help_pdp_mul.pd
new file mode 100644
index 0000000..596c1cb
--- /dev/null
+++ b/doc/objects/help_pdp_mul.pd
@@ -0,0 +1,24 @@
+#N canvas 224 229 462 390 10;
+#X msg 77 38 start;
+#X msg 124 38 stop;
+#X obj 77 70 pdp_help_input;
+#X obj 77 330 pdp_help_output;
+#X obj 121 164 pdp_reg;
+#X obj 195 127 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 228 125 click here;
+#X obj 77 295 pdp_gain;
+#X floatatom 128 267 5 0 0;
+#X text 229 201 multiplies 2 packets;
+#X obj 77 197 pdp_mul;
+#X msg 128 241 2;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 0 4 1;
+#X connect 4 0 10 1;
+#X connect 5 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 7 1;
+#X connect 10 0 7 0;
+#X connect 11 0 8 0;
diff --git a/doc/objects/help_pdp_noise.pd b/doc/objects/help_pdp_noise.pd
new file mode 100644
index 0000000..732d4a1
--- /dev/null
+++ b/doc/objects/help_pdp_noise.pd
@@ -0,0 +1,21 @@
+#N canvas 614 448 575 277 10;
+#X obj 46 231 pdp_help_output;
+#X obj 46 198 pdp_noise;
+#X obj 46 149 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 174 71 dim 320 240;
+#X text 270 71 set packet dimensions;
+#X msg 174 98 type grey;
+#X msg 174 121 type yv12;
+#X text 270 100 generate greyscale;
+#X text 270 119 generate colour (default);
+#X msg 174 152 seed 123;
+#X text 270 152 set seed value;
+#X text 167 21 pdp_noise creates a random image (with uniform distribution
+between -1 and 1) when a bang is received;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 1 0;
+#X connect 9 0 1 0;
diff --git a/doc/objects/help_pdp_qt.pd b/doc/objects/help_pdp_qt.pd
new file mode 100644
index 0000000..9ff6154
--- /dev/null
+++ b/doc/objects/help_pdp_qt.pd
@@ -0,0 +1,71 @@
+#N canvas 400 126 740 623 10;
+#X obj 59 391 pdp_qt;
+#X floatatom 77 429 5 0 0;
+#X floatatom 127 430 5 0 0;
+#X obj 56 41 metro 40;
+#X msg 56 13 bang;
+#X msg 97 13 stop;
+#X msg 15 13 bang;
+#X obj 140 41 openpanel;
+#X msg 140 66 open \$1;
+#X msg 140 13 bang;
+#X msg 140 92 close;
+#X text 249 66 open/close for file access;
+#X floatatom 140 120 5 0 0;
+#X floatatom 140 146 5 0 0;
+#X text 248 117 float on left inlet selects a frame for output;
+#X msg 140 197 loop \$1;
+#X obj 203 182 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 250 198 automatic looping can be enabled/disabled;
+#X text 251 9 pdp_qt plays a quicktime movie.;
+#X text 250 221 this enables automatic playback at the frame rate specified
+in the movie file. in pdp_qt~ playback is synchronized to the audio
+stream.;
+#X msg 142 341 dump array 0;
+#X text 252 330 if the movie contains audio \, this command dumps the
+audio data into an array specified by the first argument. the second
+argument is the audio channel (default = 0 = left);
+#X msg 142 291 stop;
+#X text 251 289 stops automatic playback (same as autoplay 0);
+#X msg 141 222 autoplay 1;
+#X msg 142 267 play;
+#X text 252 432 the second outlet outputs the current frame number.
+the third outlet outputs the total number of frames in a movie when
+it is opened.;
+#X msg 142 315 cont;
+#X text 251 269 starts automatic playback (same as 0 \, autplay 1 \,
+bang);
+#X text 251 310 resumes automatic playback (same as autplay 1 \, bang)
+;
+#X text 249 137 float on right inlet selects the frame to be read on
+the next sync event (bang message / internal sync).;
+#X obj 59 462 pdp_help_output;
+#X obj 335 535 table array;
+#X obj 448 535 tabplay~ array;
+#X obj 448 576 dac~;
+#X obj 448 506 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 31 0;
+#X connect 0 1 1 0;
+#X connect 0 2 2 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 8 0;
+#X connect 8 0 0 0;
+#X connect 9 0 7 0;
+#X connect 10 0 0 0;
+#X connect 12 0 0 0;
+#X connect 13 0 0 1;
+#X connect 15 0 0 0;
+#X connect 16 0 15 0;
+#X connect 20 0 0 0;
+#X connect 22 0 0 0;
+#X connect 24 0 0 0;
+#X connect 25 0 0 0;
+#X connect 27 0 0 0;
+#X connect 33 0 34 0;
+#X connect 33 0 34 1;
+#X connect 35 0 33 0;
diff --git a/doc/objects/help_pdp_qt~.pd b/doc/objects/help_pdp_qt~.pd
new file mode 100644
index 0000000..b03e4e1
--- /dev/null
+++ b/doc/objects/help_pdp_qt~.pd
@@ -0,0 +1,25 @@
+#N canvas 400 126 692 254 10;
+#X obj 62 122 pdp_qt~;
+#X obj 90 164 dac~;
+#X msg 39 51 play;
+#X obj 133 42 openpanel;
+#X msg 133 67 open \$1;
+#X msg 133 14 bang;
+#X text 257 67 pdp_qt~ is the same as pdp_qt exept that it also outputs
+the audio data corresponding to the current frame on its 2 rightmost
+outlets. if there is a lag between audio and video a pdp_del object
+can be inserted to delay the image. note that in order to get acceptable
+audio quality with relatively few dropouts you might need to increase
+the pd audio latency.;
+#X msg 15 24 loop 1;
+#X floatatom 84 52 5 0 0;
+#X obj 62 214 pdp_help_output;
+#X connect 0 0 9 0;
+#X connect 0 3 1 0;
+#X connect 0 4 1 1;
+#X connect 2 0 0 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 5 0 3 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 1;
diff --git a/doc/objects/help_pdp_randmix.pd b/doc/objects/help_pdp_randmix.pd
new file mode 100644
index 0000000..75f12fc
--- /dev/null
+++ b/doc/objects/help_pdp_randmix.pd
@@ -0,0 +1,21 @@
+#N canvas 314 353 584 288 10;
+#X obj 81 184 pdp_randmix;
+#X obj 117 132 pdp_reg;
+#X obj 200 87 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 200 155 5 0 0;
+#X obj 81 48 pdp_help_input;
+#X msg 81 18 start;
+#X msg 130 18 stop;
+#X obj 81 238 pdp_help_output;
+#X text 268 80 click here;
+#X text 268 159 random crossfade between 2 packets;
+#X text 268 175 0 = left \, 1 = right;
+#X connect 0 0 7 0;
+#X connect 1 0 0 1;
+#X connect 2 0 1 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 0;
+#X connect 4 0 1 1;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
diff --git a/doc/objects/help_pdp_reg.pd b/doc/objects/help_pdp_reg.pd
new file mode 100644
index 0000000..9a78e66
--- /dev/null
+++ b/doc/objects/help_pdp_reg.pd
@@ -0,0 +1,20 @@
+#N canvas 623 480 596 300 10;
+#X obj 41 171 pdp_reg;
+#X obj 41 140 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 85 15 start;
+#X msg 135 15 stop;
+#X obj 85 53 pdp_help_input;
+#X obj 41 240 pdp_help_output;
+#X text 113 144 pdp_reg works in the same way as the pd float or int
+objects;
+#X text 263 178 bang: sends stored packet to output;
+#X text 263 163 pdp: stores packet and sends to output;
+#X text 263 199 pdp: stores a new packet;
+#X text 112 164 left intlet (hot):;
+#X text 112 199 right intlet (cold):;
+#X connect 0 0 5 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 1;
diff --git a/doc/objects/help_pdp_rotate.pd b/doc/objects/help_pdp_rotate.pd
new file mode 100644
index 0000000..6c60c60
--- /dev/null
+++ b/doc/objects/help_pdp_rotate.pd
@@ -0,0 +1,30 @@
+#N canvas 467 414 562 448 10;
+#X msg 195 174 centerx \$1;
+#X floatatom 195 145 5 0 0;
+#X floatatom 279 145 5 0 0;
+#X msg 279 174 centery \$1;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 401 pdp_help_output;
+#X text 194 70 (0 \, 0) = top left;
+#X text 194 84 (1 \, 1) = bottom right;
+#X msg 247 113 0.5;
+#X floatatom 187 318 5 0 0;
+#X msg 187 288 0;
+#X text 192 6 pdp_zrot: zoom and rotation;
+#X obj 46 363 pdp_rotate;
+#X text 239 319 right inlet sets rotation angle;
+#X text 194 54 set rotation center;
+#X connect 0 0 14 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 14 0;
+#X connect 4 0 14 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 10 0 1 0;
+#X connect 10 0 2 0;
+#X connect 11 0 14 1;
+#X connect 12 0 11 0;
+#X connect 14 0 7 0;
diff --git a/doc/objects/help_pdp_route.pd b/doc/objects/help_pdp_route.pd
new file mode 100644
index 0000000..c9d341d
--- /dev/null
+++ b/doc/objects/help_pdp_route.pd
@@ -0,0 +1,22 @@
+#N canvas 614 448 575 277 10;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 225 pdp_help_output;
+#X obj 46 172 pdp_gain 1;
+#X obj 130 172 pdp_gain 2;
+#X obj 118 69 hdl 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1 -1
+0;
+#X text 155 88 routes a packet to a specified outlet \, determined
+by the right inlet;
+#X text 155 124 creation argument = number of outlets (default = 2)
+;
+#X obj 46 90 pdp_route 2;
+#X connect 0 0 9 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 9 1;
+#X connect 9 0 4 0;
+#X connect 9 1 5 0;
diff --git a/doc/objects/help_pdp_scale.pd b/doc/objects/help_pdp_scale.pd
new file mode 100644
index 0000000..9ed7996
--- /dev/null
+++ b/doc/objects/help_pdp_scale.pd
@@ -0,0 +1,32 @@
+#N canvas 475 141 635 386 10;
+#X msg 76 207 dim 256 256;
+#X msg 76 235 dim 320 240;
+#X obj 28 275 pdp_scale 320 240;
+#X msg 75 181 dim 32 32;
+#X msg 259 234 quality \$1;
+#X obj 28 65 pdp_help_input;
+#X msg 28 36 start;
+#X msg 80 35 stop;
+#X obj 28 317 pdp_help_output;
+#X text 347 225 0 = nearest neighbour;
+#X text 347 240 1 = bilinear;
+#X text 74 154 set new packet dimensions;
+#X text 161 28 pdp_scale rescales the packet format.;
+#X text 161 56 use this if you want to combine different packet sizes.
+or have movies that don't have a legal size (not a multiple of 8x8)
+;
+#X msg 259 204 0;
+#X msg 294 204 1;
+#X text 159 103 (try to avoid rescaling by using movies with equal
+(legal) dimensions \, it is not a cheap operation and can easily be
+done in advance);
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 8 0;
+#X connect 3 0 2 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X connect 14 0 4 0;
+#X connect 15 0 4 0;
diff --git a/doc/objects/help_pdp_scan~.pd b/doc/objects/help_pdp_scan~.pd
new file mode 100644
index 0000000..fb3b749
--- /dev/null
+++ b/doc/objects/help_pdp_scan~.pd
@@ -0,0 +1,41 @@
+#N canvas 387 370 666 499 10;
+#X obj 73 140 pdp_scan~;
+#X obj 73 113 phasor~;
+#X floatatom 73 86 5 0 0;
+#X obj 73 353 dac~;
+#X obj 13 48 pdp_help_input;
+#X msg 13 19 start;
+#X obj 13 397 pdp_help_output;
+#X obj 73 311 *~;
+#X floatatom 89 282 5 0 0;
+#X obj 73 251 hip~ 20;
+#X floatatom 117 224 5 0 0;
+#X floatatom 131 171 5 0 0;
+#X obj 73 198 lop~ 1000;
+#X text 214 43 pdp_scan~: scanned synthesis;
+#X msg 217 102 interpolate \$1;
+#X obj 217 76 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X text 216 124 set interpolation between consecutive packets on/off
+;
+#X text 216 142 (the audio crossfade size is determined by the pd blocksize.
+so you can use a block~ object to set this);
+#X text 218 236 it works like osc~ \, only the waveform is scanned
+from the luma plane of an image. the path is an oval centered at the
+middle of the image with axes equal to 60% of the image width/height
+;
+#X connect 0 0 12 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 0 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 7 0 3 0;
+#X connect 7 0 3 1;
+#X connect 8 0 7 1;
+#X connect 9 0 7 0;
+#X connect 10 0 9 1;
+#X connect 11 0 12 1;
+#X connect 12 0 9 0;
+#X connect 14 0 0 0;
+#X connect 15 0 14 0;
diff --git a/doc/objects/help_pdp_scope~.pd b/doc/objects/help_pdp_scope~.pd
new file mode 100644
index 0000000..eeeaabe
--- /dev/null
+++ b/doc/objects/help_pdp_scope~.pd
@@ -0,0 +1,23 @@
+#N canvas 526 43 567 300 10;
+#X obj 37 200 pdp_scope~;
+#X obj 37 44 metro 40;
+#X obj 37 19 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X floatatom 94 18 5 0 0;
+#X msg 131 131 type grey;
+#X msg 131 109 type yv12;
+#X obj 37 256 pdp_help_output;
+#X msg 131 157 dim 320 240;
+#X obj 59 121 osc~;
+#X floatatom 59 88 5 0 0;
+#X text 131 66 a very simple oscilloscope;
+#X text 227 132 set output image type and dimensions;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 1;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 8 0;
diff --git a/doc/objects/help_pdp_snap.pd b/doc/objects/help_pdp_snap.pd
new file mode 100644
index 0000000..b5c2752
--- /dev/null
+++ b/doc/objects/help_pdp_snap.pd
@@ -0,0 +1,21 @@
+#N canvas 623 480 596 300 10;
+#X msg 92 15 start;
+#X msg 142 15 stop;
+#X obj 92 53 pdp_help_input;
+#X obj 41 240 pdp_help_output;
+#X text 140 172 bang: sends stored packet to output;
+#X text 113 143 left intlet (hot):;
+#X text 112 202 right intlet (cold):;
+#X obj 41 171 pdp_snap;
+#X text 115 103 pdp_reg takes a snapshot from a pdp stream.;
+#X text 263 201 pdp inlet;
+#X text 139 157 snap: stores the next packet that arrives on second
+inlet;
+#X msg 8 130 bang;
+#X msg 49 130 snap;
+#X connect 0 0 2 0;
+#X connect 1 0 2 0;
+#X connect 2 0 7 1;
+#X connect 7 0 3 0;
+#X connect 11 0 7 0;
+#X connect 12 0 7 0;
diff --git a/doc/objects/help_pdp_trigger.pd b/doc/objects/help_pdp_trigger.pd
new file mode 100644
index 0000000..f8b5461
--- /dev/null
+++ b/doc/objects/help_pdp_trigger.pd
@@ -0,0 +1,14 @@
+#N canvas 526 379 575 277 10;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 225 pdp_help_output;
+#X obj 46 91 pdp_trigger;
+#X obj 118 145 print;
+#X text 154 90 outputs a bang on the right output before sending packet
+to the left output;
+#X connect 0 0 4 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 3 0;
+#X connect 4 1 5 0;
diff --git a/doc/input_output.pd b/doc/objects/help_pdp_v4l.pd
index fe6ccc1..5f5ebb4 100644
--- a/doc/input_output.pd
+++ b/doc/objects/help_pdp_v4l.pd
@@ -1,10 +1,9 @@
-#N canvas 182 220 831 596 10;
-#X obj 107 307 pdp_v4l;
+#N canvas 238 181 882 542 10;
+#X obj 107 427 pdp_v4l;
#X obj 107 53 metro 40;
#X msg 159 14 stop;
#X msg 107 14 bang;
#X msg 51 14 bang;
-#X obj 107 538 pdp_xv;
#X msg 209 93 open /dev/video0;
#X msg 209 117 open /dev/video1;
#X text 347 95 you can choose the input device using the 'open' message.
@@ -20,34 +19,36 @@ yv12 (luma/chroma color) and greyscale are supported.;
#X text 348 215 dim sets the dimensions of the captured frame. please
note that in all objects dimensions and packet type (color/greyscale)
have to be the same to be combined (i.e. mixed);
-#X msg 210 433 dim 320 240;
-#X msg 210 456 dim 640 480;
-#X text 349 436 dim sets the window dimensions;
-#X msg 210 387 create;
-#X msg 210 408 destroy;
-#X text 208 324 pdp_xv ouputs video in a window using the xVideo extension.
-if your graphics card/driver supports it you can have multiple output
-windows. if a pdp message is received and a window is not open \, one
-is created automaticly.;
-#X text 349 390 use these messages to explicitly create/destroy the
-window;
#X text 207 18 pdp_v4l grabs video from the video4linux device. it
grabs a frame whenever a bang message is received. the output rate
is limited by the maximum framerate of the video device. if there is
no device opened \, it will attempt to open /dev/video0;
-#X connect 0 0 5 0;
+#X msg 210 319 channel \$1;
+#X floatatom 210 295 5 0 0;
+#X text 347 320 sets the v4l channel (like tuner \, composite \, svideo
+\, ...);
+#X floatatom 210 359 5 0 0;
+#X msg 210 383 freq \$1;
+#X floatatom 271 359 5 0 0;
+#X msg 271 383 freqMHz \$1;
+#X text 346 359 sets the v4l tuner frequency (in v4l units and MHz)
+;
+#X obj 107 480 pdp_help_output;
+#X connect 0 0 25 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
+#X connect 5 0 0 0;
#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
#X connect 11 0 0 0;
-#X connect 12 0 0 0;
+#X connect 13 0 0 0;
#X connect 14 0 0 0;
-#X connect 15 0 0 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 20 0 5 0;
-#X connect 21 0 5 0;
+#X connect 17 0 0 0;
+#X connect 18 0 17 0;
+#X connect 20 0 21 0;
+#X connect 21 0 0 0;
+#X connect 22 0 23 0;
+#X connect 23 0 0 0;
diff --git a/doc/objects/help_pdp_xv.pd b/doc/objects/help_pdp_xv.pd
new file mode 100644
index 0000000..5c0b371
--- /dev/null
+++ b/doc/objects/help_pdp_xv.pd
@@ -0,0 +1,29 @@
+#N canvas 303 183 708 385 10;
+#X obj 29 328 pdp_xv;
+#X msg 132 223 dim 320 240;
+#X msg 132 246 dim 640 480;
+#X text 271 226 dim sets the window dimensions;
+#X msg 132 177 create;
+#X msg 132 198 destroy;
+#X text 130 114 pdp_xv ouputs video in a window using the xVideo extension.
+if your graphics card/driver supports it you can have multiple output
+windows. if a pdp message is received and a window is not open \, one
+is created automaticly.;
+#X text 271 180 use these messages to explicitly create/destroy the
+window;
+#X msg 134 294 cursor \$1;
+#X obj 134 274 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
+1;
+#X text 270 294 enables/disables cursor in xv window;
+#X obj 29 61 pdp_help_input;
+#X msg 29 25 start;
+#X msg 78 24 stop;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 8 0 0 0;
+#X connect 9 0 8 0;
+#X connect 11 0 0 0;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
diff --git a/doc/objects/help_pdp_zoom.pd b/doc/objects/help_pdp_zoom.pd
new file mode 100644
index 0000000..19ec1a7
--- /dev/null
+++ b/doc/objects/help_pdp_zoom.pd
@@ -0,0 +1,41 @@
+#N canvas 467 414 562 448 10;
+#X obj 46 288 pdp_zoom;
+#X floatatom 121 264 5 0 0;
+#X floatatom 174 130 5 0 0;
+#X msg 87 160 zoomx \$1;
+#X msg 174 160 zoomy \$1;
+#X floatatom 87 129 5 0 0;
+#X msg 282 162 centerx \$1;
+#X floatatom 282 133 5 0 0;
+#X floatatom 366 133 5 0 0;
+#X msg 366 162 centery \$1;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 341 pdp_help_output;
+#X text 173 265 right inlet sets zoom amount;
+#X text 281 42 set zoom center;
+#X text 281 58 (0 \, 0) = top left;
+#X text 281 72 (1 \, 1) = bottom right;
+#X text 71 79 set individual axis zoom;
+#X msg 142 102 1;
+#X msg 334 101 0.5;
+#X msg 121 234 1;
+#X connect 0 0 13 0;
+#X connect 1 0 0 1;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 3 0;
+#X connect 6 0 0 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 9 0 0 0;
+#X connect 10 0 0 0;
+#X connect 11 0 10 0;
+#X connect 12 0 10 0;
+#X connect 19 0 2 0;
+#X connect 19 0 5 0;
+#X connect 20 0 7 0;
+#X connect 20 0 8 0;
+#X connect 21 0 1 0;
diff --git a/doc/objects/help_pdp_zrot.pd b/doc/objects/help_pdp_zrot.pd
new file mode 100644
index 0000000..f3937a0
--- /dev/null
+++ b/doc/objects/help_pdp_zrot.pd
@@ -0,0 +1,47 @@
+#N canvas 467 414 562 448 10;
+#X floatatom 257 275 5 0 0;
+#X floatatom 174 130 5 0 0;
+#X msg 87 160 zoomx \$1;
+#X msg 174 160 zoomy \$1;
+#X floatatom 87 129 5 0 0;
+#X msg 282 162 centerx \$1;
+#X floatatom 282 133 5 0 0;
+#X floatatom 366 133 5 0 0;
+#X msg 366 162 centery \$1;
+#X obj 46 40 pdp_help_input;
+#X msg 46 10 start;
+#X msg 95 10 stop;
+#X obj 46 401 pdp_help_output;
+#X text 281 58 (0 \, 0) = top left;
+#X text 281 72 (1 \, 1) = bottom right;
+#X text 71 79 set individual axis zoom;
+#X msg 142 102 1;
+#X msg 334 101 0.5;
+#X msg 257 245 1;
+#X obj 46 363 pdp_zrot;
+#X text 309 276 second inlet sets zoom amount;
+#X floatatom 257 333 5 0 0;
+#X msg 257 303 0;
+#X text 309 334 third inlet sets rotation angle;
+#X text 281 42 set zoom/rotation center;
+#X text 192 6 pdp_zrot: zoom and rotation;
+#X connect 0 0 19 1;
+#X connect 1 0 3 0;
+#X connect 2 0 19 0;
+#X connect 3 0 19 0;
+#X connect 4 0 2 0;
+#X connect 5 0 19 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 19 0;
+#X connect 9 0 19 0;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 16 0 1 0;
+#X connect 16 0 4 0;
+#X connect 17 0 6 0;
+#X connect 17 0 7 0;
+#X connect 18 0 0 0;
+#X connect 19 0 12 0;
+#X connect 21 0 19 2;
+#X connect 22 0 21 0;
diff --git a/doc/objects/pdp_help_input.pd b/doc/objects/pdp_help_input.pd
new file mode 100644
index 0000000..a4bc76e
--- /dev/null
+++ b/doc/objects/pdp_help_input.pd
@@ -0,0 +1,63 @@
+#N canvas 394 33 741 756 10;
+#X obj 23 524 pdp_v4l;
+#X text 17 11 this abstraction is used as an input module in most of
+the documentation patches. change it to reflect your preferred input
+object.;
+#X obj 262 248 inlet;
+#X obj 262 276 route start stop;
+#X msg 315 309 stop;
+#X obj 258 672 outlet;
+#X obj 262 385 metro;
+#X obj 292 360 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10
+-262144 -1 -1 40 256;
+#X msg 23 287 open /dev/video0;
+#X obj 260 88 loadbang;
+#X obj 199 169 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 315 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 171 189 connect here;
+#X text 291 187 connect here;
+#X obj 187 470 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 334 468 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X text 45 329 v4l device;
+#X text 18 312 change this to your;
+#X obj 492 515 pdp_qt;
+#X obj 260 137 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 262 426 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X msg 492 288 open /somedirectory/mydemo.mov;
+#X text 520 308 change this to the movie;
+#X text 519 323 you want to use;
+#X msg 520 379 loop 1;
+#X msg 262 310 bang;
+#X text 163 203 for video4linux;
+#X text 294 201 for quicktime;
+#X text 156 497 connect here;
+#X text 148 511 for video4linux;
+#X text 302 497 connect here;
+#X text 305 511 for quicktime;
+#X text 308 377 set framerate here;
+#X connect 0 0 5 0;
+#X connect 2 0 3 0;
+#X connect 3 0 25 0;
+#X connect 3 1 4 0;
+#X connect 4 0 6 0;
+#X connect 6 0 20 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 9 0 19 0;
+#X connect 10 0 8 0;
+#X connect 11 0 21 0;
+#X connect 14 0 0 0;
+#X connect 15 0 18 0;
+#X connect 18 0 5 0;
+#X connect 19 0 10 0;
+#X connect 20 0 14 0;
+#X connect 21 0 18 0;
+#X connect 21 0 24 0;
+#X connect 24 0 18 0;
+#X connect 25 0 6 0;
diff --git a/doc/objects/pdp_help_output.pd b/doc/objects/pdp_help_output.pd
new file mode 100644
index 0000000..b3cf6cf
--- /dev/null
+++ b/doc/objects/pdp_help_output.pd
@@ -0,0 +1,8 @@
+#N canvas 664 342 450 300 10;
+#X obj 158 71 inlet;
+#X obj 59 178 pdp_xv;
+#X obj 162 180 pdp_sdl;
+#X text 17 11 this abstraction is used as an output module in most
+of the documentation patches. change it to reflect your preferred output
+object.;
+#X connect 0 0 1 0;
diff --git a/doc/reference.txt b/doc/reference.txt
index 1def808..b6b8ff3 100644
--- a/doc/reference.txt
+++ b/doc/reference.txt
@@ -1,6 +1,6 @@
This is a list of all pdp objects and abstractions with a minimal description.
Take a look at the patches in the doc/ directory for more info.
-(Messy doc/test patches can be found in the test/ directory.)
+(Messy doc & test patches can be found in the test/ directory.)
general purpose pdp modules:
@@ -22,6 +22,8 @@ pdp_add adds two images
pdp_bq spatial biquad filter
pdp_bqt temporal biquad filter
pdp_conv horizontal/vertical seperable convolution filter
+pdp_cheby chebyshev color shaper
+pdp_chrot rotates the chroma components
pdp_gradient converts a greyscale image using a colour palette
pdp_grey converts an image to greyscale
pdp_mul multiplies two images
@@ -30,10 +32,12 @@ pdp_mix crossfade between 2 images
pdp_mix2 mixes 2 images after applying a gain to each of them
pdp_randmix crossfades 2 images by taking random pixels
pdp_noise a noise generator
+pdp_rotate tiled rotate
pdp_scope~ a very simple oscilloscope
-pdp_chrot rotates the chroma components
pdp_scale rescale an image
+pdp_scan~ scanned synthesis oscillator
pdp_zoom tiled zoom
+pdp_zrot tiled zoom + rotate
utility abstractions
@@ -56,7 +60,7 @@ pdp_conv_sobel_ver vertical sobel edge detector
pdp_conv_sobel_edge sum of squares of hor and ver
pdp_saturation change colour saturation
-cellular automata:
+cellular automata (separate lib):
pdp_ca computes a cellular automaton (as a generator or a filter)
pdp_ca2image converts a CA packet to a greyscale image