Signal Studio is in public beta. Usable, but still moving. Join the beta
Docs / Cards

Anatomy of a card

What is inside a card, and how the manifest becomes the thing you see on the canvas.

The folder

band_pass/
card.json      identity, ports, parameters
run.py         the implementation
panel.html     optional custom editor
icon.svg       optional

The manifest draws the card

There is no separate interface to build. A parameter declared as float with a unit renders as a numeric field with that unit; an enum renders as a dropdown. Declaring it is what makes it appear.

The full schema is in the SDK reference.

The implementation

One function, run(ctx). The context carries the resolved inputs and parameters, plus helpers for building outputs and reporting progress.

run.py
def run(ctx):
    x = ctx.inputs["in"]
    low  = ctx.params["l_freq"]
    high = ctx.params["h_freq"]
    return { "out": x.filter(low, high) }

Why the gears view matters

The card face shows what you set. The gears view shows what the software resolved from it: the filter order, the number of taps, the actual transition width. Those are the numbers you need when a reviewer asks what you did, and they are usually the ones nobody can find.

Execution phases

Each card declares a phase, which determines ordering and caching. Loading, spatial preprocessing, temporal preprocessing, epoching, analysis, visualisation. The engine sorts the graph by phase before running it, so a filter cannot accidentally run after epoching because of where it sits on screen.

Edit this page on GitHub