Video signal flow diagrams

curious if anyone else has any thoughts on maybe trying to collaborate on coming up with a general purpose video signal diagram semiotics that could be easily adapted to any kind of digital/analog video signal flow zones? kind of like how circuit diagrams work? i do this a lot but its kind of only useful to myself if i’m just using symbols only i understand hahah.

but like there are some like primitives in video signal processing that transcend any kind of analog/digital implementations maybe we make a list of those first? from a category theory/network theory approach it is sufficient to just divide things into objects and arrows (arrows being how a signal is transformed as it goes from one object to another)

*color space mapping
*delay-maybe buffer instead of delay?
*rescale/ xyz rotate displacement/ stretching and warping? not sure if these are all 1 thing or different things?

*nonlinear/transcendent functions (sin, cos, exp, log)
what other kinds of transformations are there? is this it? i think maybe in terms of translating this kind of thing into like a pd max/msp thing these arrows could actually just be little math blocks and then the arrows just mean the 1 function of a signal travelling somewhere in space/time

1 Like

i thought i’d share some of my own diagrams. not sure if this is a direct answer to your question, because these are also intended only for myself, and don’t contain any information about the settings of my devices or transformation of the signal, they are just an aid to remember how to plug everything in - usually for performance but sometimes just for setups for recording in the studio.

:arrow_down:︎ this one was also for fugitive dream recovery (think it might have been for the nyc telepresence?)


@palomakop i love these diagrams - so cool !

also a little bit tangental but i have been using the teensy audio library lately and it has this great gui for auto-generating code for patched objects:

(incidentally this my mockup of rotation in 2d plane - where dc1=sinA, dc2=cosA and one of the mixer inputs is set to -1 gain)

it is based on an open-source project called nodered.

for a bit more general approach also check out dotlanuage / graphviz - a well supported syntax / open-source tools for describing graphs.

there was some wip (by Mike Panciera) to modify the recur backend to read these descriptions so users could create custom patches of the internal nodes like video_player , feedback , shader, capture etc

so something like this:

digraph G {
video_player -> mirror -> mix;
capture -> mix -> invert;  
{video_player, invert} -> lumakey;

which you can also render in a browser:

(not sure why theres an error there - this was just a quick example to illustrate :sweat_smile: )


@cyberboy666 those seem neat and useful !

while we are on this train, there is a fun tool i found that does a similar flowchart generation but into ascii.

one thing i like about this one is that arrows can have labels - which might get at the “transformation” notation @andrei_jay mentioned earlier. for example in “sample 3” at the bottom.

i’ve always wanted to use it for making some technical diagrams - i actually need to make some for my current book project so maybe that time has finally come…

Screen Shot 2020-04-23 at 9.40.45 AM


!!! that is really cool - it actually crossed my mind to see if something like this exists already when i was thinking about how to display node-graphs in recur (without breaking the ascii aesthetic )

yes. maybe i will try slip some ascii diagrams into the technical documentation at my work too, see if anyone notices…


Ooo I really like that ascii flow generator. One thing I would love to add to hydra is a way to switch between a code view and a signal-flow view, where you could edit either one.

1 Like

@ojack i thought i saw a screenshot of hydra with like a node style interface, is that a part of the new update?

Not yet, but various people have been making their own editors or adding hydra to other projects. Someone made this one just a few days ago:
(try dragging anything from the ‘I/0 texture’ category and then ‘.out()’ afterwards)


This is a really nice example of diagram-as-instrument:
(editting to see if video embed will work)

1 Like

wow! just want to reiterate how amazing i think hydra is. i have mentioned to many folks that i never really give myself time to play around with like anyone elses code zones for video stuffs because of how wrapped up i get in developing and debugging my own stuffs when i’m sitting at a computer but like any time i have a tutorial session where someones like “i want to learn code and i want to make video” i always head over to hydra because its like it takes someone about 10 minutes to go from no experience writing code to like something crazy awesome happening


Aww thats nice to hear! I feel the same re: time to dig into all the cool things out there :]

i also really enjoy hydra and the immediacy of it! you just open up the browser and there it is. side note, i just ended up playing with the “blocky hydra” for a bit - it’s weirdly satisfying.

i’ve been able to embed videos but they need to have an empty line above and below - going to add that to the sticky … though think its a bit of an annoying aspect of discourse itself. i haven’t been able to change it though.

here is something I did a long time ago for my old setup using a program called mind node
yellow for composite
green for svideo
purple for component
red for sync

I may do another one for my current setup


so it looks like we could potentially do graphviz within discourse…
1 Like


love it - can try installing it now

1 Like

it wont install. i dont really get it - its in the official discourse project , which has been updated this week… can try installing it manually later … :thinking:

1 Like

installed it but it doesnt work :cry:

[graphviz engine=circo]
graph {
a – b;
b – c;
c – d;
d – e;
e – g;
a – g;
a – c;
a – d;
a – e;
b – d;
b – e;
b – g;
c – e;
c – g;
d – g;

Edit - I’m a dingus ; was trying to upload a component , when actually it’s a plugin - will fix tomorrow :grin:


There are a lot of standard symbols used in service manual block diagrams. For example a buffer (voltage buffer, not image buffer) will always be a triangle, oriented pointing from left to right, with the signal going in to the flat side of the triangle in the middle, and going out the point. Similar to an opamp. If you notated “x25” inside that triangle, one could assume that it has a gain of 25.
Multipliers are either circles or squares with an ‘X’ in the middle. The carrier going in on the left side, the modulator either the top or bottom, and the product out the left.
Adders I’ve seen notated a few ways, either like a multiplier but with a + instead of an x in the middle of the symbol, or I’ve sometimes seen the sigma symbol used. I assume math block notations influenced all these.
Things get a bit more difficult when trying to express a differentiator or integrator, I’ve either just written differentiator or integrator in a square, or drawn a highpass or lowpass slope.
Attenuators can be drawn as a buffer, but with a line strike through diagonally.
The more complex a single block becomes, the more I’ve just written inside the block. I might not want to draw all the component blocks of a rotator, so I’ll just draw a box and write ‘rotator’ in the middle.
So my perspective is very much schematic shorthand, and with shorthand there is a fair amount of user translation.

graph { a – b; b – c; c – d; }
1 Like
graph { size ="4,4"; dragonfly [shape=box]; /* this is a comment */ dragonfly -- fly [weight=2]; dragonfly -- start_business [style=dotted]; dry -- { missing; fresh} missing -- find_new fresh -- pack edge [color=green]; dragonfly -- slaughter -- clean -- dry -- pack -- eat; dragonfly -- love; slaughter -- sick -- gross -- new_coat; edge [color=red]; clean -- energy -- wet -- gross -- new_coat; dragonfly -- missing [style=bold,label="Always"]; start_business [label="start a\nbusiness"]; node [shape=box,style=filled,color=".7 .3 1.0"]; eat -- skin_care }
digraph structs { node [shape=record]; struct1 [shape=record,label= "Visual\nCortex | <h> H | <v> V| <hpv> H+V"]; struct2 [shape=record,label=" Comparators | <1> one| <2> two "]; struct3 [shape=record,label="Memory\nPalace |{ {<a> A |<r> R|<g> G|<b> B}| CV\nInputs } "]; struct1:h -> struct2:1 struct1:v -> struct2:2 struct1:hpv -> Mixer struct2:1 -> Mixer; struct2:2 -> Mixer; Mixer -> MULT MULT -> struct3: a MULT -> struct3: r }
digraph G { subgraph cluster0 { node [style=filled,color=white]; style=filled; color=lightgrey; a0 -> a1 -> a2 -> a3; label = "MULT H"; } subgraph cluster1 { node [style=filled]; b0 -> b1 -> b2 -> b3; label = "MULT V"; color=blue } VC_ramps -> a0; VC_ramps -> b0; a3 -> Mixer; b3 -> Mixer; VC_ramps [shape=Mdiamond]; Mixer [shape=Msquare]; }