Worked patches
Four patches built only from nodes goofi ships. Each diagram is drawn at the editor's own geometry, and every slot name is the one the node declares.
A spectrum, and the bands in it
The signal plane end to end: a live LSL stream, band-limited, transformed, and reduced to one
scalar per band. Psd has its viewer open on its out slot, which is
what the line viewer draws; EegPowerBands has one on power.
Built from a shell as one batch, so the seven ops are one undo step:
goofi - <<'OPS'
node add signal:LslIn
node add signal:Filter
node add signal:Psd
node add signal:EegPowerBands
link add lslin.out filter.input
link add filter.out psd.input
link add psd.out eegpowerbands.psd
OPSOne buffer, three measures
An output slot feeds as many inputs as you cable to it. The frame travels over shared memory and every consumer reads the same one, so a kHz stream fanned out to three analyses is still one stream with three readers.
Buffer is there because each measure works on a window of samples, and one
buffer in front of all three means they see the same window.
An audio voice
The audio plane, behind the same node interface. The pins are a different colour because AUDIO is a different data type, and which types may be cabled together is the
manager's one link rule; see what feeds what.
AudioOut declares no output slot at all. It is a sink: it owns an OS handle and
is compiled into the engine, which is why its page shows no source.
Crossing the planes
SignalIn takes an ARRAY and hands back AUDIO, so an
analysis result can drive an audio chain. The rule also runs the other way without a node:
an AUDIO output feeds an ARRAY input directly, which is what lets
an audio chain end in a spectrum or a scope.
Params, and why there is no CV port
A param has one source at a time: a constant, an expression, or a reference to another value. Because only one is in force, there is no precedence rule between them.
# A param's source is one of three things, and never a precedence between them.
goofi node param edit psd max_frequency --value 10 # a constant
goofi node param edit svf cutoff --expression "200 + 400 * globals.arousal"
goofi node param edit gain level --reference "env.out" # audio-rate, no CV portThat is why no audio node needs a control-voltage port: control-rate and audio-rate modulation arrive the same way, through the param a node already has.
This reference describes goofi 3.1.0(537cd394), generated from a running instance on 2026-09-06.