Try the online demo — no installation required (limited features)
PSD topomap
Resting EEG through a spectrum into band power, drawn on the scalp.
Power bands to OSC
The classical bands, split apart and published as OSC messages.
Musical features
Spectral peaks read as harmonicity and a tuning, sent out over OSC.
Connectivity spectrogram
Channel pairs reduced to a spectrogram that runs with the stream.
Install and run
goofi is under active development. It already works, but expect breaking changes, and feedback is welcome. Installing it will get much easier: a future release will not need to be built from source.
Three tools have to be on PATH: rustup, Node.js, and uv. The compiler version is pinned in rust-toolchain.toml at 1.97.1, so rustup fetches the
right one on the first build.
# rustup, Node.js and uv must be on PATH.
# The Rust toolchain itself is pinned in rust-toolchain.toml (1.97.1),
# so rustup fetches the right one on the first build.
git clone https://github.com/KairosHive/goofi
cd goofi
cargo run -p goofi-init # once per clone
cargo run # prints the URLcargo run -p goofi-init prepares the build environment and creates the Python virtual
environments goofi needs. Re-run it after any version change.
cargo run then compiles goofi's backend and builds the browser-based frontend.
It is also the command to start goofi once it is built; in a future release, that will simply
be the goofi CLI. When it is done, it prints the URL to open in a browser.
Indexing custom node directories
Every node goofi ships lives in node-bundles/, one directory per bundle, and every bundle is built into goofi, so cargo run carries all
165 types without a flag.
--extra-nodes adds a root of your own, scanned after the shipped bundles:
cargo run -- --extra-nodes ~/my-nodesgoofi-init installs every shipped bundle's requirements. At startup goofi checks
every scanned root's requirements against both interpreters. A terminal is asked before anything is installed, and without one the nodes
that need them are listed as unavailable. See Bundles.
Disabling the graphical interface
GOOFI_HEADLESS=1 is --headless spelled as an environment variable, and
it applies to the build as well. Set for cargo build, it leaves the app out of the
binary entirely: Node.js is not needed, and the binary is headless without the flag at run
time.
GOOFI_HEADLESS=1 cargo build --release # the app is left out of the binary entirelyA headless instance serves the API alone: /control, /data, /term and /mcp. The app is not served, and the layout ops
go with it.