flowRS Open the IDE

Node reference

Every node in the library, with its ports and parameters. Generated from WidgetRegistry::with_builtins() at build time — if it is listed here, it is in the product. The editor's palette holds 322 widgets: 273 built into flowrs-core and 49 from the neuroscience libraries (flowrs-neuro, flowrs-neuroviz) it installs beside them. 0 of these widgets generate a seam: the emitted Rust compiles, then panics at unimplemented!. 16 are stand-ins: the program compiles and runs, but a deterministic substitute answers in place of the model or device the node is named after. 306 ship: no seam and no stand-in. Of the palette's 419 nodes (97 language primitives and 322 widgets), 412 run in the browser as you draw: 396 compute there what the exported Rust computes, and 16 of them are stand-ins. 7 run only in the exported program, and the palette marks each of those, with the reason, before it is dropped. Rows marked seam, stand-in or export only are those nodes. The graph diagnostic names a seam before a run, and the editor badges a stand-in.

322
widgets
0
seams
16
stand-ins
306
shipping
412
run in the browser
7
export only
35
pillars

ai 3 nodes

NodeWhat it isCategoryInOutParameters
ai.complete stand-inAsk a model and take its reply as text. In the editor page the loaded WebLLM answers; anywhere no published answer is waiting — every generated program among them — a local stand-in answers instead, rotating the prompt's words, and names itself flowrs-local.AIprompttext, modelprompt:String, model:String, temperature:f64
ai.hybridThink, then answer, on the local decision loop.AIprompt, context, media, keytrace, text, sourceprompt:String, question:String, options:String, levels:String, kind:enum, confirm:String, criteria:String, band:String, bundle:String, key:String, model:String, temperature:f64, threshold:f64
ai.object_detectFind bright regions in an image and report each 4-connected region above luma 127 as a detection box, scored by its share of the frame.AI/Visionimagedetections—

audio 14 nodes

NodeWhat it isCategoryInOutParameters
audio.gainApply a gain in decibels.Audio/Processaudioaudiodb:f64
audio.loadDecode a 16-bit PCM WAV file to a sample buffer; any other file is refused, naming what it is.Audio/Sources—audiopath:String
audio.melMel-scaled spectrogram → a time×mel tensor.Audio/Analysisaudiomeln_mels:i64, n_fft:i64, hop:i64, sample_rate:f64
audio.mfccMel-frequency cepstral coefficients → a time×coeff feature tensor.Audio/Analysisaudiomfccn_mfcc:i64, n_mels:i64, n_fft:i64, hop:i64, sample_rate:f64
audio.mixMix two audio buffers into one, weighted by the balance parameter (0 is all a, 1 is all b).Audio/Processa, baudiobalance:f64
audio.onsetOnset detection → the times (detections) where energy rises.Audio/Analysisaudioonsetssensitivity:f64, n_fft:i64, hop:i64
audio.pitchFundamental-frequency (pitch) track → a per-frame signal.Audio/Analysisaudiof0frame:i64, hop:i64, fmin:f64, fmax:f64, sample_rate:f64
audio.play stand-inA buffer to the default output device — a stand-in at both tiers, not playback: the samples are checked (a non-finite one is refused) and counted, and nothing is heard.Audio/Sinksaudio——
audio.record stand-inAudio from the default input device — a stand-in at both tiers, not a recording: a 1 kHz tone at -20 dBFS, seconds long. No microphone is opened.Audio/Sources—audioseconds:f64
audio.resampleResample to a new sample rate.Audio/Processaudioaudiorate:i64, sample_rate:f64
audio.saveWrite a sample buffer to a WAV file.Audio/Sinksaudio—path:String
audio.spectrogramShort-time Fourier transform magnitude → a time×frequency tensor.Audio/Analysisaudiospectrogramn_fft:i64, hop:i64
audio.to_signalExtract raw samples as a signal (the DSP bridge).Audio/Bridgeaudiosignal—
audio.toneSynthesise a test tone — the audio pillar's T0 source.Audio/Sources—audiowaveform:enum, frequency:f64, amplitude:f64, duration_ms:f64, sample_rate:f64

capture 1 nodes

NodeWhat it isCategoryInOutParameters
capture.openOpens a logic or waveform capture from the browser's file store: VCD, FST, GHW, a sigrok session, or Saleae binary and CSV exports, detected by content.Capture—capture, channels, sample_rate, duration, issues, summaryname:String, format:enum, sample_rate:f64

clock 1 nodes

NodeWhat it isCategoryInOutParameters
clock.convertMove a time from one clock domain to another — a board's monotonic timer to UTC, UTC to TAI — by adding an offset given as an input, so the offset is something measured and visible rather than assumed.Unitstime, offsetconvertedfrom:enum, to:enum

cloud 7 nodes

NodeWhat it isCategoryInOutParameters
cloud.particle.devicesList the devices a Particle token can see — the node builds the request and parses the reply wired back in. Nothing is sent at either tier; a driver performs the round trip.Cloud/Particleresponsemethod, url, body, auth, devices, count, online, errortoken:String, base_url:String
cloud.particle.eventDecode one Server-Sent-Events message from the Particle event stream.Cloud/Particlessemethod, url, auth, name, data, number, published_at, device_id, errortoken:String, base_url:String, prefix:String
cloud.particle.functionCall a firmware function on a Particle device — the node builds the request and parses the reply wired back in. Nothing is sent at either tier; a driver performs the round trip.Cloud/Particlearg, responsemethod, url, body, auth, return_value, connected, errortoken:String, base_url:String, device_id:String, function:String, arg:String
cloud.particle.publishPublish an event to the Particle cloud — the node builds the request and parses the reply wired back in. Nothing is sent at either tier; a driver performs the round trip.Cloud/Particledata, responsemethod, url, body, auth, accepted, errortoken:String, base_url:String, event_name:String, data:String, private:bool, ttl:i64
cloud.particle.variableRead a firmware variable from a Particle device — the node builds the request and parses the reply wired back in. Nothing is sent at either tier; a driver performs the round trip.Cloud/Particleresponsemethod, url, body, auth, value, number, errortoken:String, base_url:String, device_id:String, variable:String
cloud.roboflow.detectRun a hosted Roboflow model over a base64 image — the node builds the request and parses the reply wired back in. Nothing is sent at either tier; a driver performs the round trip.Cloud/Visionimage_base64, responseurl, body, content_type, detections, count, top_class, top_confidence, errorapi_key:String, model:String, version:i64, confidence:f64, overlap:f64, format:enum
cloud.roboflow.parseTurn a Roboflow response into detections.Cloud/Visionresponsedetections, count, top_class, top_confidence, errormin_confidence:f64

data 20 nodes

NodeWhat it isCategoryInOutParameters
data.aggregateAggregate a column to a scalar.Datadatavaluecolumn:String, func:enum
data.castCast a column to a dtype.Datadatacastedcolumn:String, dtype:enum
data.csv.loadLoad a CSV file into a DataFrame.Data—datapath:String, header:bool, delimiter:String
data.csv.save export onlySave a DataFrame to a CSV file.Datadata—path:String
data.dropnaDrop every row of a table that has a missing value.Datadataclean—
data.fillnaFill missing table cells with a literal value, the previous or next value in the column, or the column mean.Datadatafilledvalue:String, strategy:enum
data.filterFilter rows by a boolean expression.Datadatafilteredcondition:String
data.groupbyGroup by a column and sum.Datadatagroupedby:String
data.joinJoin two tables on a key column, as an inner, left, right or outer join.Dataleft, rightjoinedon:String, how:enum
data.json.loadLoad a JSON file into a DataFrame.Data—datapath:String
data.json.save export onlySave a DataFrame to a JSON file.Datadata—path:String
data.mapApply an expression to a column.Datadatamappedcolumn:String, expr:String
data.meltMelt (unpivot) to long form.Datadatameltedid_vars:String
data.pivotPivot a table: one row per index value, one column per distinct value of the columns field, filled from the values column.Datadatapivotedindex:String, columns:String, values:String
data.renameRename one column of a table.Datadatarenamedfrom:String, to:String
data.selectKeep only the named columns of a table (comma-separated).Datadataselectedcolumns:String
data.sortSort a table's rows by one column, ascending or descending.Datadatasortedby:String, descending:bool
data.tableRegister all data widgets into registry. An inline table — the DataFrame counterpart to image.test_pattern.Data—datacsv:String
data.tdmsOne TDMS channel as a signal.Data—signal, count, sample_rate, unit, start_time_millis, sourcename:String, group:String, channel:String
data.unionVertically concatenate two DataFrames.Datatop, bottomcombined—

decode 10 nodes

NodeWhat it isCategoryInOutParameters
decode.canDecodes CAN 2.0 and CAN FD frames per ISO 11898-1, checking stuffing, CRC-15/17/21, the stuff count and the ACK, and following a bit-rate switch.Protocolcapturecapture, values, text, count, errors, summarychannel:String, bitrate:f64, data_bitrate:f64, sample_point:f64, data_sample_point:f64, inverted:bool
decode.harpReads the bytes of the UART lane below it as Harp device messages — reads, writes and events with their register, type, timestamp and payload — skipping to the next frame over bytes that begin none, and reporting a bad checksum or a cut-off frame.Protocolcapturecapture, values, text, count, errors, summary—
decode.i2cDecodes an I²C bus from its SCL and SDA lines: start, repeated start and stop, 7- and 10-bit addresses, ACK/NACK, with clock stretching and cut-short bytes reported.Protocolcapturecapture, values, text, count, errors, summaryscl:String, sda:String, stretch_factor:f64
decode.i2sDecodes I²S stereo PCM (Philips or left-justified) into left and right samples, taking the slot width from word select.Protocolcapturecapture, values, text, count, errors, summarysck:String, ws:String, sd:String, format:enum, word_bits:i64, signed:bool
decode.linesSplits the characters of the UART lane below it into text lines, keeping damaged bytes in their line and flagging them, and marking an unterminated last line.Protocolcapturecapture, values, text, count, errors, summaryterminator:enum
decode.onewireDecodes a 1-Wire bus: resets and presence pulses, bytes, and the ROM commands with their ROM codes checked by CRC-8, following overdrive speed.Protocolcapturecapture, values, text, count, errors, summarychannel:String, overdrive:bool
decode.pwmMeasures a PWM line period by period: duty cycle and frequency, with the partial periods at either end of the capture marked rather than measured.Protocolcapturecapture, values, text, count, errors, summarychannel:String, polarity:enum
decode.registersReads the transfers of the I²C lane below it as register reads and writes, keeping an auto-incrementing register pointer per device.Protocolcapturecapture, values, text, count, errors, summarydevice:String, address_bytes:i64, byte_order:enum
decode.spiDecodes SPI in any of its four clock modes, with or without chip select, MSB- or LSB-first, in words of 1 to 64 bits, reporting words cut short by chip select.Protocolcapturecapture, values, text, count, errors, summaryclk:String, mosi:String, miso:String, cs:String, mode:enum, cs_polarity:enum, bit_order:enum, word_bits:i64
decode.uartDecodes asynchronous serial (UART) on one line of a capture: data bits, parity, stop bits, inverted lines and auto-baud, with parity, framing, break and noise reported.Protocolcapturecapture, values, text, count, errors, summarychannel:String, baud:f64, data_bits:i64, parity:enum, stop_bits:enum, bit_order:enum, inverted:bool, bits:bool

dsp 24 nodes

NodeWhat it isCategoryInOutParameters
dsp.biquadBiquad cascade over one frame, from rest: second-order sections in Direct Form II Transposed (scipy's sosfilt), designed by flowrs-dsp's IIR family (family, response, order, cutoff at sample_rate, ripple_db, stop_db) or written out (sections); every section is checked stable. The same f32 arithmetic in the browser, the Host program and on a microcontroller.DSPinputoutputfamily:enum, response:enum, order:i64, cutoff:f64, sample_rate:f64, ripple_db:f64, stop_db:f64, sections:String
dsp.convolveConvolve a signal with a kernel signal.DSPsignal, kerneloutput—
dsp.decimateDecimate a frame: every factor-th sample from the first (x[::factor]). No filter of its own, so a dsp.fir or dsp.biquad low-pass goes before it.DSPinputoutputfactor:i64
dsp.delayDelay line with feedback.DSPinputoutputdelay_ms:f64, feedback:f64
dsp.detect_onsetsAttack times in a buffer, from [flowrs_dsp::detect_onsets].DSPsamplestimes, countsample_rate:f64
dsp.envelopeADSR envelope generator driven by a boolean gate, with attack, decay, sustain and release parameters.DSPgateenvelopeattack:f64, decay:f64, sustain:f64, release:f64
dsp.fftFourier transform of a signal frame, giving magnitude and phase spectra at the chosen size.DSPsignalmagnitude, phasesize:enum
dsp.filter.bandpassBand-pass filter a time signal around a center frequency with the given bandwidth.DSPinputoutputcenter:f64, bandwidth:f64
dsp.filter.highpassHigh-pass filter (one-pole).DSPinputoutputcutoff:f64
dsp.filter.iirIIR filter — the whole classic family (Butterworth, Chebyshev I/II, elliptic, Bessel) as one node, with optional zero-phase (filtfilt) filtering. This is the reachable-from-the-canvas face of flowrs-dsp's designers: the filter dropped on the graph is the same, scipy-verified one the exported program compiles.DSPinputoutputfamily:enum, response:enum, order:i64, cutoff:f64, ripple_db:f64, stop_db:f64, zero_phase:enum
dsp.filter.lowpassLow-pass filter (one-pole).DSPinputoutputcutoff:f64, resonance:f64
dsp.firFIR filter over one frame, from rest: the taps written out (taps), or a windowed-sinc low-pass designed as scipy's firwin designs it (num_taps, cutoff at sample_rate, window). The same f32 arithmetic in the browser, the Host program and on a microcontroller, where it lowers with its taps as constants.DSPinputoutputtaps:String, num_taps:i64, cutoff:f64, sample_rate:f64, window:enum
dsp.gainScale a time signal by a gain in decibels.DSPinputoutputgain_db:f64
dsp.ifftInverse FFT — frequency to time.DSPmagnitude, phasesignal—
dsp.mixerMixer — blends two signals.DSPinput_a, input_boutputmix:f64
dsp.movingMoving statistic over one frame: at every sample, the stat (mean, RMS, min, max or population variance) of the last window samples, the window filling from the frame's start; last is the final window's. The same f32 arithmetic, ring buffer and square root in the browser, the Host program and on a microcontroller.DSPinputoutput, laststat:enum, window:i64
dsp.noiseNoise — white/pink noise generator.DSP—signaltype:enum, amplitude:f64
dsp.oscillatorOscillator — generates sine/square/triangle/sawtooth waveforms.DSPfrequency, phasesignalwaveform:enum, frequency:f64, amplitude:f64
dsp.pitch_to_noteName the note of a buffer (note_of) or of a frequency in hertz (pitch_to_note).DSPhz, samplesname, pitch_class, octave, frequencysample_rate:f64
dsp.resampleResample — change sample rate.DSPsignalresampledtarget_rate:i64
dsp.reverbComb and all-pass reverb with room size, damping and wet mix parameters.DSPinputoutputroom_size:f64, damping:f64, wet:f64
dsp.samplesSamples from bytes: samples integers of format (i16le, i16be, u16le, u8) out of a byte buffer (a sensor FIFO read over I2C or SPI, a UART), each times scale, in unit. A sample whose bytes did not arrive is 0, so the frame always has its length.DSPbytesframeformat:enum, samples:i64, scale:f64, unit:String
dsp.scaleScale — multiply a signal by a constant.DSPinputoutputfactor:f64
dsp.windowApply a window (rectangular, Hann, Hamming or Blackman) to a signal frame.DSPsignalwindowedtype:enum

embedded 12 nodes

NodeWhat it isCategoryInOutParameters
embedded.adcADC channel read → raw counts + voltage. On the Host target (both tiers) it reads a simulated in-memory board: the channel's input as a stimulus or the node's counts sets it, midscale (2048) otherwise; on the Embassy and RTIC targets in the Code view it converts the real channel through flowrs-hal, and the voltage is raw / 4095 × vref at every tier. On the Linux target it reads the channel from Industrial I/O through flowrs-device's LinuxBoard.Embedded—raw, voltagechannel:i64, vref:f64
embedded.adc.captureADC capture → a frame of samples voltages from one channel, interval_us apart. On the Host target (both tiers) it reads a simulated in-memory board, whose channel holds one level for the whole capture (a stimulus or midscale); on the Embassy and RTIC targets in the Code view it converts the real channel through flowrs-hal samples times, waiting interval_us between conversions; on the Linux target it reads the channel from Industrial I/O through flowrs-device's LinuxBoard. Every sample is raw / 4095 × vref in f32, exactly as embedded.adc computes its voltage: the frame the dsp.* frame nodes (graph::widgets::dsp_frame) filter on a microcontroller.Embedded—framechannel:i64, samples:i64, interval_us:i64, vref:f64
embedded.delayBlocking delay, gated by a trigger. On the Host target (both tiers) the duration is recorded on a simulated in-memory board and nothing waits; on the Embassy and RTIC targets in the Code view it is a real delay_ms through flowrs-hal. On the Linux target it is a real sleep.Embeddedtriggerdoneduration_ms:i64
embedded.gpio.digital_inDigital input pin — read a GPIO level. On the Host target (both tiers) it reads a simulated in-memory board, low unless something latched the pin high; on the Embassy and RTIC targets in the Code view it reads the real pin through flowrs-hal. On the Linux target it reads the GPIO line through flowrs-device's LinuxBoard (the GPIO character device).Embedded—statepin:i64
embedded.gpio.digital_outDigital output pin — drive a GPIO high/low from a boolean. On the Host target (both tiers) the level is latched on a simulated in-memory board and no pin moves; on the Embassy and RTIC targets in the Code view it drives the real pin through flowrs-hal. On the Linux target it drives the GPIO line through flowrs-device's LinuxBoard (the GPIO character device).Embeddedstate—pin:i64
embedded.i2c.readRead bytes from a register of an I2C device. On the Host target (both tiers) the device is simulated on an in-memory board: 256 registers behind a register pointer, which embedded.i2c.write and a stimulus fill; on the Embassy and RTIC targets in the Code view it is a real write-then-read through flowrs-hal. The register is the register input when wired, the register parameter when not. On the Linux target it is a write-then-read on /dev/i2c through flowrs-device's LinuxBoard.Embeddedregisterdatabus:i64, address:i64, register:i64, length:i64
embedded.i2c.writeWrite bytes to an I2C device: the first byte is the register, the rest its new contents. On the Host target (both tiers) the device is simulated on an in-memory board, where embedded.i2c.read reads it back; on the Embassy and RTIC targets in the Code view it is a real write through flowrs-hal. Empty data sends nothing. On the Linux target it is a write on /dev/i2c through flowrs-device's LinuxBoard.Embeddeddata—bus:i64, address:i64
embedded.pwmPWM output — set the duty cycle on a pin. On the Host target (both tiers) the frequency and duty are latched on a simulated in-memory board and no waveform is produced; on the Embassy and RTIC targets in the Code view it drives the real PWM output through flowrs-hal. On the Linux target it drives a sysfs PWM channel through flowrs-device's LinuxBoard.Embeddedduty—pin:i64, frequency:i64
embedded.spi.transferSPI full-duplex transfer. On the Host target (both tiers) it runs on a simulated in-memory board whose bus is looped back (the bytes sent come back) unless a stimulus puts a device on it; on the Embassy and RTIC targets in the Code view it is a real transfer through flowrs-hal, framed by the chip select. On the Linux target it is a transfer on spidev through flowrs-device's LinuxBoard.Embeddedtx_datarx_databus:i64, cs_pin:i64, clock_hz:i64
embedded.timer.intervalPeriodic timer tick. On the Host target (both tiers) the period is latched on a simulated in-memory board and the node ticks once per run without waiting; on the Embassy and RTIC targets in the Code view it starts a hardware timer through flowrs-hal and ticks when the period has elapsed. On the Linux target it waits on the period's cadence.Embedded—tickperiod_ms:i64
embedded.uart.readRead the bytes a UART has received, up to max_len, with the count actually read; nothing waits for a byte that has not arrived. On the Host target (both tiers) the UART is on a simulated in-memory board, looped back or on a line a stimulus fills; on the Embassy and RTIC targets in the Code view it reads the real receiver through flowrs-hal. On the Linux target it reads a tty through flowrs-device's LinuxBoard.Embedded—data, countuart:i64, max_len:i64, baud:i64
embedded.uart.writeWrite bytes to a UART. On the Host target (both tiers) they go onto a simulated in-memory board, whose UART is looped back unless a stimulus puts it on a line; on the Embassy and RTIC targets in the Code view they are transmitted through flowrs-hal. On the Linux target it writes a tty through flowrs-device's LinuxBoard.Embeddeddata—uart:i64, baud:i64

flow 5 nodes

NodeWhat it isCategoryInOutParameters
flow.delayWait for duration_s seconds.Flow—outduration_s:f64
flow.logPrint a constant message and hand that same text downstream.Flow—textvalue:String
flow.repeatEvaluate the body input count times and collect the results into a list.Flowcount, bodyresultcount:f64
flow.statechartA finite-state machine the graph executes and emits as Rust. The same chart runs in the interpreter and in the generated program, and that program is not parsed back. A parallel state raises done on itself when every region is final. Assigned keys live on the data wire, guards can read them, and a transition can write one key before entry.Flowevent, events, state, history, count, elapsed, check, datastate, changed, history, trace, tags, can, datamachine:String
flow.variableA named variable used as a source.Flow—valuename:String

gen 10 nodes

NodeWhat it isCategoryInOutParameters
gen.caption stand-inImage → caption text. A stand-in at both tiers, not BLIP: one sentence naming the dominant colour channel.Generative/Multimodalimagetext—
gen.clip_image stand-inImage → embedding. A stand-in at both tiers, not CLIP: a 16-bin histogram of the pixel bytes, L2-normalised.Generative/Embedimageembedding—
gen.clip_text stand-inText → embedding. A stand-in at both tiers, not CLIP: a 16-bin byte histogram, L2-normalised.Generative/Embedtextembedding—
gen.img2img stand-inImage + prompt → image. A stand-in at both tiers, not a diffusion edit: the image is blended toward a colour taken from the prompt.Generative/Diffusionimage, promptimagestrength:f64, steps:i64
gen.inpaint stand-inImage + mask + prompt → image. A stand-in at both tiers, not diffusion inpainting: pixels whose mask is bright become the prompt's colour.Generative/Diffusionimage, mask, promptimagesteps:i64
gen.txt2img stand-inText → image. A stand-in at both tiers, not Stable Diffusion: seeded noise pulled toward a colour taken from the prompt.Generative/Diffusionpromptimagesteps:i64, guidance:f64, seed:i64
gen.upscale stand-inImage → larger image. A stand-in at both tiers, not diffusion super-resolution: nearest-neighbour scaling, 2× to 8×.Generative/Diffusionimageimagescale:i64
gen.vae_decode stand-inLatent tensor → image. A stand-in at both tiers, not a VAE: the inverse of the stand-in encoder.Generative/Latentlatentimage—
gen.vae_encode stand-inImage → latent tensor. A stand-in at both tiers, not a VAE: four channels per pixel, each scaled to 0..1.Generative/Latentimagelatent—
gen.whisper stand-inAudio → text. A stand-in at both tiers, not Whisper: the pitch class of the dominant period, prefixed with the language hint.Generative/Multimodalaudiotextlanguage:String

image 22 nodes

NodeWhat it isCategoryInOutParameters
image.blendBlend two images with an alpha and a normal, multiply, screen or overlay mode.Imageimage_a, image_bblendedalpha:f64, mode:enum
image.blurGaussian blur of an image with sigma between 0.1 and 10.Imageimageblurredsigma:f64
image.brightnessAdd a brightness offset (-255 to 255) to every color channel, clamped.Imageimageadjustedbrightness:i64
image.camera export onlyLive camera capture source producing image frames.Image/Sources—frame—
image.colorspaceConvert an image's pixels to the RGB, HSV, Lab or YUV color space.Imageimageconvertedto:enum
image.contrastScale an image's contrast by a factor (1 leaves it unchanged).Imageimageadjustedcontrast:f64
image.cropCrop a rectangle at x, y of the given width and height out of an image.Imageimagecroppedx:i64, y:i64, width:i64, height:i64
image.edge_detectEdge detection (sobel / canny).Imageimageedgesmethod:enum
image.flipFlip horizontally or vertically.Imageimageflippeddirection:enum
image.grayscaleConvert an image to grayscale using Rec. 601 weights.Imageimagegray—
image.histogramCompute an image histogram.Imageimagehistogram—
image.load export onlyLoad an image from a file path.Image—imagepath:String
image.maskApply a same-size mask image to an image; a mask of a different size yields no output.Imageimage, maskmasked—
image.morphologyErode, dilate, open or close an image with a square kernel of the given size.Imageimageresultoperation:enum, kernel_size:i64
image.resizeResize an image to a width and height. T0 previews with nearest-neighbour; generated code uses the chosen filter.Imageimageresizedwidth:i64, height:i64, filter:enum
image.rotateRotate by 90/180/270 degrees.Imageimagerotatedangle:enum
image.saturateScale an image's color saturation (0 is gray, 1 unchanged, up to 3).Imageimagesaturatedsaturation:f64
image.save export onlySave an image to a file path.Imageimage—path:String, format:enum
image.sharpenSharpen an image with a 3x3 kernel scaled by the amount parameter.Imageimagesharpenedamount:f64
image.template_matchTemplate matching → best-match location + score.Imageimage, templatex, y, score—
image.test_patternA synthetic image source for T0 execution — the in-browser starting point when there is no file to load or camera to open. Generates a small test pattern (gradient / checkerboard / solid) so an image pipeline can actually run and preview live. Honest about what it is: a generator, not a disguised file load.Image/Sources—imagepattern:enum, size:i64
image.thresholdThreshold to a binary image.Imageimagebinarythreshold:i64

imu 2 nodes

NodeWhat it isCategoryInOutParameters
imu.complementaryComplementary filter: fuse an IMU's accelerometer tilt with its integrated gyro rate into one pitch angle, in degrees. It reads a raw 14-byte burst in MPU-6050 register order (accel X, Y, Z, temperature, gyro X, Y, Z; big-endian), as embedded.i2c.read takes it from ACCEL_XOUT_H; wire angle back to prev with a held wire to carry the estimate from step to step.Sensorimu, prevanglealpha:f64, dt_ms:f64, accel_lsb_per_g:f64, gyro_lsb_per_dps:f64
imu.decodeIMU DecodeSensorimuaccel, gyro, temperatureaccel_lsb_per_g:f64, gyro_lsb_per_dps:f64, temp_lsb_per_degc:f64, temp_offset_degc:f64

instrument 6 nodes

NodeWhat it isCategoryInOutParameters
instrument.redpitaya.acquireRed Pitaya oscilloscope — the arming sequence, plus the two queries that follow it, plus real parsing of whatever they answer.Instrument/Red Pitayastatus_reply, data_replycommands, wire, count, status_query, data_query, triggered, samples, sample_countchannel:i64, decimation:i64, trigger:enum, trigger_level:f64, gain:enum, reset:enum
instrument.redpitaya.generateRed Pitaya signal generator — the ordered command list that configures one output.Instrument/Red Pitaya—commands, wire, countchannel:i64, waveform:enum, frequency:f64, amplitude:f64, output:enum, reset:enum
instrument.scpiSCPI command — the exact line an instrument receives, and the reply it sends back.Instrument/Protocolreplywire, escaped, is_query, response, response_kind, response_bytescommand:String, query:enum, model:String
instrument.sila.featureSiLA 2 Feature — parse a Feature Definition and derive the gRPC service it generates.Instrument/SiLAfdlfqi, package, service, identifiers, commands, properties, rpcs, error—
instrument.stationTest Station — a sequence with limits over must-close instrument handles, for a lot.Instrument/Benchoperator, serialruns, units, passed, failed, yield_pct, pass, cpk, cpk_step, steps, last_serial, last_verdict, stdf, stdf_bytes, openhtf, audit, audit_head, transcript, modestation:String, units:i64, start_time_millis:i64
instrument.supplySupply Output — one channel of a catalogue power supply, as a must-close handle.Instrument/Bench—commands, safe_state, count, measuremodel:String, channel:i64, voltage:f64, current:f64, output:enum, address:String

io 3 nodes

NodeWhat it isCategoryInOutParameters
io.commentComment node — documentation only, emits a Rust comment.Utility——text:String
io.formatFormat a value as a string.IOvaluestringformat:String
io.printPrint a value to the console.IOvalue—label:String

list 6 nodes

NodeWhat it isCategoryInOutParameters
list.getTake the element at an index of a list.Listlistvalueindex:String
list.lengthCount the elements of a list.Listlistlength—
list.reverseReverse the order of a list.Listlistreversed—
list.sliceTake count elements of a list starting at the start index.Listlistslicestart:String, count:String
list.sortSort a list ascending or descending.Listlistsortedorder:enum
list.uniqueDrop duplicates, keeping first occurrences in order.Listlistunique—

live 4 nodes

NodeWhat it isCategoryInOutParameters
live.biosignalA biosignal device on its open wire protocol (OpenBCI Cyton or Ganglion, Muse, g.tec Unicorn, BITalino, Polar H10), the synthetic EEG source, or a recording replayed — every channel as named series, and the electrodes as a Timeseries signal (the neuro nodes' value) with their rate and units.Instrument/Live—signal, times, channels, lines, flagged, format, source, timeseries, rate, unitsstream:String, channel:String
live.rttAn RTT up channel from a board through a debug probe or from a twin: text lines, defmt decoded against the firmware ELF, or a binary channel read as samples.Instrument/Live—signal, times, channels, lines, flagged, format, sourcestream:String, channel:String
live.serialMaker serial telemetry — Teleplot, Arduino Serial Plotter or CSV lines, from Web Serial, a native port, Teleplot's UDP port or a twin's UART — as named series with timestamps.Instrument/Live—signal, times, channels, lines, flagged, format, sourcestream:String, channel:String
live.symbolFirmware globals read by name at a rate through a probe or from a twin, typed from the ELF's DWARF — plots that need no firmware instrumentation.Instrument/Live—signal, times, channels, lines, flagged, format, sourcestream:String, channel:String

logic 7 nodes

NodeWhat it isCategoryInOutParameters
logic.andLogical AND of two booleans.Logica, bresult—
logic.compareCompare two numeric values (== by default).Logica, bresultop:enum
logic.ifConditional selection: true_val if condition else false_val.Logiccondition, true_val, false_valresult—
logic.notLogical NOT (invert a boolean).Logicvalueresult—
logic.orLogical OR of two booleans.Logica, bresult—
logic.routeRoute a value to one of two outputs by comparing it against a literal.Logicvaluematch, otherwisekey:String, op:enum, compare:String, compare_type:enum
logic.toggleToggle (flip-flop) — flips a stored boolean on each trigger.Logictriggerstateinitial:bool

math 8 nodes

NodeWhat it isCategoryInOutParameters
math.absAbsolute value of a number.Mathvalueabs—
math.addAdd two numbers, a plus b.Matha, bsum—
math.clampClamp a value between min and max.Mathvalue, min, maxclamped—
math.divDivide two numbers, a divided by b.Matha, bquotient—
math.modRemainder of a divided by b.Matha, bremainder—
math.mulMultiply two numbers, a times b.Matha, bproduct—
math.negNegation (multiply by -1).Mathvalueneg—
math.subSubtract two numbers, a minus b.Matha, bdiff—
NodeWhat it isCategoryInOutParameters
mavlink.commandMAVLink CommandMAVLinktriggerstatus, hashlink:String, dialect:enum, system:u32, key_file:String, timeout_ms:u32, command:String, param1:f64, param2:f64, param3:f64, param4:f64, param5:f64, param6:f64, param7:f64, approval:String
mavlink.heartbeatMAVLink HeartbeatMAVLink—armed, mode, status, autopilotlink:String, dialect:enum, system:u32, key_file:String, timeout_ms:u32
mavlink.setpointMAVLink SetpointMAVLinkposition, yawstatuslink:String, dialect:enum, system:u32, key_file:String, timeout_ms:u32, frame:enum, horizontal_m:f64, altitude_m:f64, rate_hz:f64, seconds:f64, approval:String
mavlink.telemetryMAVLink TelemetryMAVLink—value, value2, value3, timelink:String, dialect:enum, system:u32, key_file:String, timeout_ms:u32, message:String, field:String, field2:String, field3:String, rate_hz:f64, initial:String

microphone 1 nodes

NodeWhat it isCategoryInOutParameters
microphone stand-inA frame of 1024 samples from the microphone — a stand-in at both tiers: a synthetic 1 kHz tone at -20 dBFS at the chosen sample rate, not a recording. No device is opened.Signal/Sources—outputsample_rate:u32

ml 15 nodes

NodeWhat it isCategoryInOutParameters
ml.classifyClassify a feature vector with a trained model → class index + confidence.MLmodel, inputclass, confidence, scores—
ml.denseRegister all ML widgets into registry. A dense (fully-connected) layer: output = input × weights + bias.MLinput, weights, biasoutput—
ml.exportExport a trained model as standalone no_std Rust — the deploy step.MLmodelsourceformat:String
ml.infer_onnxONNX inference: model bytes and one numeric row in, the flattened output out.MLmodel, inputoutput—
ml.inferenceRun a tensor through an ONNX model loaded from model_path.MLinputoutputmodel_path:String
ml.matmulMatrix product of two tensors.MLa, bresult—
ml.modelA trained model held as JSON — the second source for the Model wire type.ML—modeljson:String
ml.onnxAn ONNX model from the model store — the *second* backend's source.ML—modelfile:String
ml.quantizeQuantize a model to int8 — the step that makes it fit on a microcontroller.MLmodelmodel, bytes, saved—
ml.reluReLU activation applied element-wise to a tensor: max(x, 0).MLinputoutput—
ml.sigmoidSigmoid activation applied element-wise to a tensor: 1 / (1 + e^-x).MLinputoutput—
ml.softmaxSoftmax activation (with axis parameter).MLinputoutputaxis:i64
ml.tanhHyperbolic tangent activation applied element-wise to a tensor.MLinputoutput—
ml.tensorCreate a tensor from a shape.ML—tensorshape:String, values:String, axes:String
ml.trainTrain a classifier from a table — the "collect → train → deploy" loop, running entirely in the browser.MLdatamodel, loss, accuracylabel:String, hidden:i64, epochs:i64, learning_rate:f64, seed:i64

msg 6 nodes

NodeWhat it isCategoryInOutParameters
msg.getRead one field. Emits nothing when the field is absent.Messagemsgvaluekey:String
msg.keysThe field names present on a message.Messagemsgkeys—
msg.mergeMerge two messages; fields from over win.Messagebase, overout—
msg.newBuild a message, optionally seeding one field from a wired value.Messagevaluemsgkey:String
msg.removeRemove one field from a message record.Messagemsgoutkey:String
msg.setSet one field, returning the updated message.Messagemsg, valueoutkey:String, value:String, value_type:enum

neural 10 nodes

NodeWhat it isCategoryInOutParameters
neural.argmaxIndex of the largest element of a tensor.Neural/Opsinputindex—
neural.classifyImage classification → class-probability tensor.Neural/Visionmodel, imageprobs—
neural.detectObject detection → bounding boxes, decoded from the wired model's output by the head you declare: yolov8 (output [1, 4+C, N]) or yolov5 (output [1, N, 5+C]), then class-aware non-maximum suppression. With no head declared it does not run, and says why.Neural/Visionmodel, imagedetectionshead:enum, confidence:f64, iou:f64
neural.embedEncode a tensor into an embedding vector.Neural/Runmodel, inputembedding—
neural.inferRun a model on a tensor → a tensor.Neural/Runmodel, inputoutput—
neural.load_modelLoad an ONNX model into a runnable session.Neural/Sources—modelpath:String
neural.nmsNon-maximum suppression over detections.Neural/Visiondetectionsdetectionsiou:f64
neural.segmentSemantic segmentation → a label mask, decoded from the wired model's output by the layout you declare: nchw-logits (output [1, C, H, W], one score plane per class) gives each pixel the id of its highest-scoring class. With no layout declared it does not run, and says why.Neural/Visionmodel, imagemasklayout:enum
neural.softmaxSoftmax over the last axis of a tensor.Neural/Opslogitsprobs—
neural.tokenize export onlyTokenize text into an input-id tensor.Neural/Texttexttokenstokenizer:String

neuro 49 nodes

NodeWhat it isCategoryInOutParameters
neuro.asrArtifact subspace reconstruction as EEGPrep runs it at clean_rawdata's defaults: calibrates on the cleanest windows of the recording, then rebuilds, half a window at a time, the principal components whose power exceeds the calibration's by more than the cutoff in standard deviations.Neurosignalsignal, calibration_s, repaired, updatescutoff:f64
neuro.bandpowerPower in a frequency band for every channel: the Welch spectrum (MNE's defaults) summed over the bins inside the band times the bin width, and the mean of that over channels.Neurosignalpower, meanband_low:f64, band_high:f64, n_fft:usize, n_overlap:usize, n_per_seg:usize
neuro.baselineHolds a candidate classifier's predictions against a classical baseline's on the same test epochs: both accuracies, the margin, and an exact McNemar test on the epochs where they disagree. Every learned model belongs beside one.Neurocandidate, baseline, testcandidate_accuracy, baseline_accuracy, margin, p_value, verdict—
neuro.ccaSSVEP detection by canonical correlation (Lin et al., 2007): each epoch gets the stimulus frequency whose sine and cosine references, with their harmonics, correlate best with it.Neuroepochspredictions, accuracy, scores, classesfreqs:String, harmonics:usize, labels:String
neuro.cdsaA compressed spectral array: one channel's Welch spectrum (MNE's defaults) over sliding windows, in decibels, the trend clinical EEG viewers draw beside the traces. The array window by window, the frequencies, and the window count.Neurosignalpsd_db, freqs, windowschannel:String, window:f64, step:f64, fmin:f64, fmax:f64, n_fft:usize
neuro.channelTakes one channel of a signal as a plain sample buffer, with its sample rate, for the DSP nodes and the front panel's charts.Neurosignalsamples, sample_ratechannel:String
neuro.cmrSubtracts, at every sample, the median across channels from each channel: SpikeInterface's global common median reference, which removes noise every electrode shares before spikes are detected.Neurosignalsignal—
neuro.connectivityCoherence, phase-locking value or weighted phase-lag index between every pair of channels across epochs, as mne-connectivity's spectral_connectivity_epochs computes them, averaged over a band; the matrix (channels by channels, symmetric, zero diagonal) goes with the channel names, ready for a connectivity circle.Neuroepochsmatrix, channels, meanmethod:enum, mode:enum, fmin:f64, fmax:f64, mt_bandwidth:f64
neuro.covarianceOne covariance matrix per epoch, by pyRiemann's estimators (sample, Ledoit-Wolf, OAS, Schaefer-Strimmer), with optional shrinkage: the symmetric positive-definite matrices the Riemannian nodes work on.Neuroepochscovariances, labels, countestimator:enum, shrinkage:f64
neuro.csdThe current source density (surface Laplacian) by spherical splines, as MNE's compute_current_source_density computes it at its defaults (lambda2 1e-5, stiffness 4, 50 Legendre terms, sphere fitted to the electrodes); the units become the input's per square metre.Neurosignalsignalelectrodes:String, electrode_units:enum, electrode_frame:enum, lambda2:f64, stiffness:f64, n_legendre_terms:usize, sphere:String
neuro.cspCommon spatial patterns (MNE's CSP) fitted on two classes of training epochs, applied to epochs: the components whose variance differs most between the classes, their log-power features, the filters and the patterns.Neurotrain, epochscomponents, features, filters, patternscomponents:usize
neuro.csp_ldaCommon spatial patterns fitted on two classes of training epochs (MNE's CSP), their log-power features, and linear discriminant analysis on them: the classic motor-imagery classifier.Neurotrain, testpredictions, accuracy, scores, classescomponents:usize
neuro.ecgCleans one ECG channel and finds its R-peaks with NeuroKit2's default method (a 0.5 Hz high-pass and a mains moving average, then a gradient threshold); returns the cleaned channel with the R-peaks as events, the peak samples and the mean rate in beats per minute.Neurosignalclean, peaks, ratechannel:String, powerline:f64
neuro.edaCleans one electrodermal channel (a 3 Hz low-pass) and splits it into its slow tonic level and fast phasic responses with NeuroKit2's default method (0.05 Hz high- and low-pass), as a signal with clean, tonic and phasic channels.Neurosignalsignalchannel:String
neuro.emgCleans one EMG channel (a 100 Hz high-pass) and computes its linear envelope with NeuroKit2's method (Teager-Kaiser energy, a 10-400 Hz band-pass, rectification and an 8 Hz low-pass) at the signal's own rate, as a signal with clean and envelope channels; needs sampling above 800 Hz.Neurosignalsignalchannel:String
neuro.epochsCuts a signal into epochs around its events, as MNE's Epochs does at its defaults: -0.2 s to 0.5 s around each event, each epoch's mean from its start to 0 s removed; epochs that run off the data are dropped.Neurosignalepochs, countevents:String, tmin:f64, tmax:f64, baseline:String
neuro.erpAverages epochs into an event-related potential, as MNE's Epochs.average does, and says how many epochs went into it.Neuroepochsevoked, countevent:String, baseline:String
neuro.erpimageOne channel's epochs as an image, one row per epoch (MNE's plot_epochs_image): optionally sorted by the mean over a window, and smoothed across neighbouring epochs. The image row by row, its row count, and the order of the epochs in it.Neuroepochsimage, rows, orderchannel:String, sort:String, sigma:f64
neuro.fbccaFilter-bank CCA for SSVEP, as the TRCA-SSVEP reference computes it: CCA in each sub-band of a Chebyshev filter bank, the correlations weighted and summed. Needs a sample rate above 200 Hz.Neuroepochspredictions, accuracy, scores, classesfreqs:String, harmonics:usize, labels:String, bands:usize
neuro.gfpGlobal field power of an evoked response: the standard deviation across channels at each moment (MNE's GFP for EEG; RMS for MEG), with when and how high it peaks. The butterfly view draws it under every channel.Neurosignalgfp, peak_time, peakmode:enum
neuro.hrvHeart-rate variability from a signal's beat events (the R-peaks of ECG R-Peaks, or PPG peaks): NeuroKit2's time-domain indices (MeanNN, SDNN, RMSSD, pNN50 and the rest) and its frequency-domain band powers (ULF to VHF, LF/HF), as names and values, with RMSSD, SDNN and LF/HF on their own ports.Neurosignalnames, values, rmssd, sdnn, lf_hfevent:String, normalize:enum
neuro.icaIndependent component analysis by Picard, which gives Infomax, extended Infomax or FastICA solutions: whitens the channels by PCA (to the data's rank unless told otherwise) and returns the component sources with the unmixing and mixing matrices.Neurosignalsources, unmixing, mixing, n_iter, convergedmethod:enum, n_components:usize, max_iter:usize, tol:f64, seed:i64
neuro.ica_applySubtracts the chosen independent components (their sources times their columns of the mixing matrix) from the signal ICA was fitted on; everything else, its mean included, is left as it was.Neurosignal, unmixing, mixing, excludesignalexclude:String
neuro.iclabelClassifies each independent component as brain, muscle, eye, heart, line noise, channel noise or other with SCCN's ICLabel network (run on tract), from its scalp map, spectrum and autocorrelation computed as EEGPrep computes them; flags components for removal by EEGLAB's rule (Muscle or Eye above 0.9 by default).Neurosignal, unmixing, mixingprobabilities, labels, excludemodel:String, electrodes:String, electrode_units:enum, electrode_frame:enum, flag:String
neuro.mdmMinimum distance to mean: a mean covariance per class from the training epochs, and each test epoch given the class whose mean is nearest, as pyRiemann's MDM. A strong, simple baseline for motor imagery and ERPs.Neurotrain, testpredictions, accuracy, scores, classesestimator:enum, shrinkage:f64, xdawn:usize, metric:enum
neuro.morletA time-frequency map by Morlet wavelets, as MNE's tfr_array_morlet computes it, with zero_mean stated explicitly (MNE changed its default between versions), as a signal with one channel per channel and frequency (Cz@10Hz): per epoch for power and phase, averaged over epochs for avg_power and inter-trial coherence.Neurosignaltfr, freqsfreqs:String, n_cycles:String, zero_mean:enum, output:enum
neuro.multitaperA time-frequency map by DPSS-tapered complex exponentials, as MNE's tfr_array_multitaper computes it, as a signal with one channel per channel and frequency (Cz@10Hz): per epoch for power, averaged over epochs for avg_power and inter-trial coherence.Neurosignaltfr, freqsfreqs:String, n_cycles:String, zero_mean:enum, output:enum, time_bandwidth:f64
neuro.notchRemoves mains interference at a frequency and its harmonics. By default with MNE's default notch (method fir): one zero-phase FIR band-stop with a stop band per frequency, a Hamming-windowed firwin design 3.3 / (trans_bandwidth / 2) seconds long, applied by overlap-add with MNE's padding. Method iir gives MNE's IIR notch instead: one biquad per frequency (a first-order Butterworth band-stop), applied forward and backward so nothing is delayed.Neurosignalsignalmethod:enum, freq:f64, harmonics:usize, notch_width:f64, trans_bandwidth:f64
neuro.openOpens an EDF, EDF+, BDF, GDF, WFDB, XDF or BrainVision recording from the file store as one signal: its channels with their sample rate, names and units, and its annotations as events.Neuro—signal, channels, sample_rate, duration, events, summary, warningsname:String, format:enum, channels:String
neuro.open_h5Opens an NWB, SNIRF or EEGLAB (MATLAB v7.3) recording from the file store as one signal, reading only the window asked for: its channels with their sample rate, names and units, and its event tables as events.Neuro—signal, channels, sample_rate, duration, events, summary, warningsname:String, format:enum, series:String, start:f64, duration:f64, channels:String
neuro.open_zarrOpens an NWB recording from a LINDI index in the file store (a DANDI asset's objects as Zarr, its fetched chunks inlined), as one signal with its events.Neuro—signal, channels, sample_rate, duration, events, summary, warningsname:String, format:enum, series:String, start:f64, duration:f64, channels:String
neuro.pickKeeps the named channels of a signal, in the order named.Neurosignalsignalchannels:String
neuro.potatoArtifact detection: the potato is calibrated on clean epochs (their mean covariance and the spread of distances to it), and each scored epoch gets a z-score; those at or above the threshold are flagged, as pyRiemann's Potato.Neurocalibration, epochsz, clean, rejectedestimator:enum, shrinkage:f64, metric:enum, threshold:f64, iterations:usize
neuro.ppgCleans one photoplethysmogram channel and finds its systolic peaks with NeuroKit2's default method (Elgendi: a 0.5-8 Hz band-pass, then two moving averages of the squared signal); returns the cleaned channel with the peaks as events, the peak samples and the mean rate in beats per minute.Neurosignalclean, peaks, ratechannel:String
neuro.psd_multitaperThe power spectral density of every channel by DPSS tapers, as MNE's psd_array_multitaper computes it at its defaults (half-bandwidth 4, low-bias tapers, no adaptive weights), and the frequency where the channel-averaged spectrum peaks.Neurosignalpsd, peak_hzfmin:f64, fmax:f64, bandwidth:f64, normalization:enum
neuro.rerefRe-references every channel: to the common average of all channels (CAR), or to the mean of named reference channels, as MNE's set_eeg_reference does.Neurosignalsignalreference:String
neuro.resampleChanges a signal's sample rate with an anti-aliasing polyphase filter (scipy's resample_poly: Kaiser-windowed, beta 5), so content above the new Nyquist frequency is removed rather than folded back.Neurosignalsignalrate:f64
neuro.spd_distanceThe distance from each SPD matrix on `a` to its match on `b` (or to b's only matrix, such as a mean): Riemannian, log-Euclidean or Euclidean, as pyRiemann measures them.Neuroa, bdistances, meanmetric:enum
neuro.spd_meanThe mean of SPD matrices: Riemannian (pyRiemann's mean_riemann, by gradient descent), log-Euclidean, or arithmetic.Neurocovariancesmeanmetric:enum
neuro.spike_metricsFiring rate, presence ratio, ISI-violation ratio and SNR for every unit, a unit being one event label of the signal (what Detect Spikes writes, or a sorting's units), computed as SpikeInterface's quality metrics are.Neurosignalunits, firing_rate, presence_ratio, isi_violations, snr, summarybin_s:f64, isi_ms:f64, ms_before:f64, ms_after:f64
neuro.spikesFinds spikes channel by channel as SpikeInterface's by_channel detector does: samples beyond a threshold in MAD noise levels that are the extreme of the samples around them. The signal comes out unchanged, its events replaced by one `spike <channel>` event per spike.Neurosignalsignalsign:enum, threshold:f64, exclude_ms:f64
neuro.spocSource power comodulation (pyRiemann's SPoC): spatial filters whose power follows a continuous target, read from each training epoch's label as a number; applied to epochs, with the filters and patterns.Neurotrain, epochscomponents, features, filters, patternscomponents:usize, estimator:enum
neuro.tangent_spaceMaps SPD matrices to vectors in the tangent space at a reference matrix (wire one to `reference`, or their own Riemannian mean is used), so ordinary linear methods can work on them: pyRiemann's TangentSpace.Neurocovariances, referencevectors, dimension—
neuro.tfrMorlet wavelet power of one channel, averaged over epochs, as MNE's tfr_array_morlet computes it (with zero_mean stated, since MNE's default changed), optionally relative to a baseline (MNE's logratio, percent, zscore and the rest). The map frequency by frequency, the frequencies, and the frequency of greatest mean power.Neuroepochspower, freqs, peak_hzchannel:String, fmin:f64, fmax:f64, fstep:f64, cycles:String, zero_mean:bool, baseline:String, mode:enum
neuro.topomapThe scalp map of every channel at one moment, interpolated as MNE's plot_topomap does (Clough-Tocher on the electrodes' triangulation, the head's edge reached by extra points), from standard 10-05 positions; its grid, row by row from the back of the head, and the colour limit MNE would use.Neurosignalgrid, limittime:f64, interp:enum, extrapolate:enum, res:usize
neuro.trcaTask-related component analysis for SSVEP (Nakanishi et al., 2018), as the MIT TRCA-SSVEP reference trains and tests it: a filter bank, a spatial filter and template per class from the training epochs, and each test epoch given the class it correlates with best. Needs a sample rate above 200 Hz.Neurotrain, testpredictions, accuracy, scores, classesbands:usize, mode:enum
neuro.ts_lrCovariances mapped to the tangent space at the training mean, then L2-regularized logistic regression (MOABB's TS+LR pipeline, the strongest classical baseline in its benchmark).Neurotrain, testpredictions, accuracy, scores, classesestimator:enum, shrinkage:f64, xdawn:usize, C:f64
neuro.welchThe power spectral density of every channel by Welch's method, at MNE's defaults (256-point FFT, Hamming window, no overlap), and the frequency where the channel-averaged spectrum peaks.Neurosignalpsd, peak_hzfmin:f64, fmax:f64, n_fft:usize, n_overlap:usize, n_per_seg:usize
neuro.xdawnxDAWN spatial filters (pyRiemann's Xdawn) fitted on training epochs: per class, the components that best raise the averaged response over the rest of the signal; applied to epochs, with the filters and patterns.Neurotrain, epochscomponents, features, filters, patternscomponents:usize, estimator:enum

record 8 nodes

NodeWhat it isCategoryInOutParameters
record.capabilityCapability — is the process inside its limits with room, or passing by luck?Recordruns, r1, r2, r3, r4capability, count, worst, worst_cpk—
record.collectCollect — append a measurement to a running list.Recordlist, measurementlist—
record.exportExport — serialise a run into whichever report the shop already reads.Recordrunreport, bytes, byte_countformat:enum
record.fileA file from the browser's file store, as a report and as bytes.Record—report, bytes, sizename:String
record.importImport — read a report back into runs.Recordreport, bytesrun, runs, countformat:enum
record.measureMeasure — judge a reading against a limit and emit a [Measurement].Recordvaluemeasurement, verdict, pass, marginalname:String, unit:String, unit_code:String, limit:enum, lower:f64, upper:f64, lower_inclusive:bool, upper_inclusive:bool, guard_band:f64
record.runRun — assemble measurements and the unit's identity into a [TestRun].Recordmeasurements, m1, m2, m3run, verdict, passtest_name:String, dut_id:String, station_id:String, operator:String, sw_version:String, phase:String, part_number:String, revision:String, start_time_millis:i64, duration_millis:i64
record.yieldYield — pass/fail statistics over a batch of runs, plus the top failing characteristic.Recordruns, r1, r2, r3, r4total, passed, failed, yield_pct, top_failureskip_policy:enum

ros 2 nodes

NodeWhat it isCategoryInOutParameters
ros.publishROS 2 PublishROSvalue, value2, value3messagetopic:String, type:String, field:String, field2:String, field3:String, frame_id:String, fields:String, qos:enum
ros.subscribeROS 2 SubscribeROS—valuetopic:String, type:String, field:String, initial:String, qos:enum

signal 1 nodes

NodeWhat it isCategoryInOutParameters
signal.sineSine oscillator source at a frequency and sample rate.Signal/Sources—outputfreq:f32, sample_rate:u32

stats 21 nodes

NodeWhat it isCategoryInOutParameters
stats.anovaOne-way ANOVA of a value column grouped by a group column, giving the F statistic and p-value.Statsdataf_statistic, p_valuevalue_column:String, group_column:String
stats.chi_squareChi-square test of independence.Statscontingency_tablechi2, p_value, dof—
stats.correlationPearson correlation between two columns of a table.Statsdatacorrelationcolumn_x:String, column_y:String
stats.countCount the rows of a table, or the readings in one column.Statsdatacountcolumn:String
stats.covarianceCovariance between two columns of a table.Statsdatacovariancecolumn_x:String, column_y:String
stats.describeDescriptive statistics summary.Statsdatasummarycolumn:String
stats.histogramHistogram of one column: bin edges and counts for the chosen number of bins.Statsdatabins, countscolumn:String, num_bins:i64
stats.kurtosisKurtosis (excess) of a distribution.Statsdatakurtosiscolumn:String
stats.maxLargest reading in a column or signal.Statsdatamaxcolumn:String
stats.meanArithmetic mean of a column or signal.Statsdatameancolumn:String
stats.medianMedian of a column or signal.Statsdatamediancolumn:String
stats.minSmallest reading in a column or signal.Statsdatamincolumn:String
stats.modeMode (most frequent value).Statsdatamodecolumn:String
stats.quantileThe q quantile (0 to 1) of one column of a table.Statsdataquantilecolumn:String, q:f64
stats.regressionSimple linear regression.Statsdataslope, intercept, r_squaredx_column:String, y_column:String
stats.skewnessSkewness of a distribution.Statsdataskewnesscolumn:String
stats.std_devStandard deviation (with configurable ddof).Statsdatastd_devcolumn:String, ddof:i64
stats.sumSum of the readings in a column or signal.Statsdatasumcolumn:String
stats.summaryMean of an input signal, as a single summary number.Stats/Analysisinputmean—
stats.t_testIndependent-samples t-test.Statsgroup_a, group_bt_statistic, p_value—
stats.varianceVariance (with configurable ddof).Statsdatavariancecolumn:String, ddof:i64

text 7 nodes

NodeWhat it isCategoryInOutParameters
text.caseConvert text to upper or lower case.Texttextoutmode:enum
text.containsWhether the text contains a substring.Texttextfoundneedle:String
text.joinJoin a list into one string.Textpartstextseparator:String
text.lengthCount the characters of a text.Texttextlength—
text.replaceReplace every occurrence of one substring with another.Texttextoutfind:String, replace:String
text.splitSplit text on a separator.Texttextpartsseparator:String
text.trimTrim surrounding whitespace.Texttextout—

twin 1 nodes

NodeWhat it isCategoryInOutParameters
twin.captureRead a waveform captured from a digital twin.Instrument/Twin—signal, sample_rate, aliased, source, serialcapture:String

unit 1 nodes

NodeWhat it isCategoryInOutParameters
unit.convertConvert a number from one unit to another — m/s to km/h, Cel to K, uV to V — with the factor and offset derived from the two UCUM codes, so a unit mismatch on a wire is fixed in plain sight.Unitsvalueconvertedfrom:String, to:String

vec3 10 nodes

NodeWhat it isCategoryInOutParameters
vec3.addAdd two 3-vectors component-wise.Vectorin1, in2outin1:vec3, in2:vec3
vec3.combineBuild a vec3 from three scalars — the only entry point from the math.* family.Vectorin1, in2, in3out—
vec3.constantA constant 3-vector set by the value parameter.Vector—outvalue:vec3
vec3.divideDivide two 3-vectors component-wise.Vectorin1, in2outin1:vec3, in2:vec3
vec3.invertamount - in. Not 1 - in — see the module docs.Vectorin, amountoutin:vec3, amount:vec3
vec3.mixbg*(1-w) + fg*w. mix = 0 yields bg — see the module docs.Vectorbg, fg, mixoutbg:vec3, fg:vec3, mix:vec3
vec3.multiplyMultiply two 3-vectors component-wise.Vectorin1, in2outin1:vec3, in2:vec3
vec3.normalizeUnit-length form of a width-3 vector. MaterialX normalize, lane width 3.Vectorinoutin:vec3
vec3.separateSplit a vec3 into its three lanes.Vectorinoutx, outy, outzin:vec3
vec3.subtractSubtract two 3-vectors component-wise.Vectorin1, in2outin1:vec3, in2:vec3

video 10 nodes

NodeWhat it isCategoryInOutParameters
video.extract_framePull a single frame (an image) by index.Video/Bridgevideoframeindex:i64
video.fpsChange a clip's frame rate by dropping or repeating frames, and report the resulting rate.Video/Editvideovideo, fpsfps:f64, source_fps:f64
video.open stand-inOpen a clip from a file — a stand-in for a video decoder at both tiers: it reads flowRS's own uncompressed frame container (what video.write writes), not MP4, AV1 or H.264. A real video file yields no clip.Video/Sources—videopath:String
video.overlayComposite an image over the stream (watermark / overlay).Video/Editvideo, overlayvideox:i64, y:i64
video.resizeResize every frame of a clip to a width and height (nearest-neighbour at T0).Video/Editvideovideowidth:i64, height:i64
video.scene_detectDetect scene cuts → detections (one per cut, with its timestamp).Video/Analysisvideocutsthreshold:f64
video.test_clipSynthesise a clip from parameters alone — the Video pillar's T0 source./// Synthesise a clip from parameters alone — the Video pillar's T0 source.Video/Sources—videoframes:i64, width:i64, height:i64, pattern:enum, dx:i64, dy:i64
video.trackTrack objects across frames → per-frame detections with stable ids.Video/Analysisvideo, seedtrackssearch:i64
video.trimTrim to a time range (seconds).Video/Editvideovideostart:f64, duration:f64, fps:f64
video.write stand-inWrite a clip to a file — a stand-in for a video encoder at both tiers: the frames go into flowRS's own uncompressed frame container with the codec's name recorded, and no AV1 or H.264 bitstream is produced, whatever the path's extension says.Video/Sinksvideo—path:String, codec:String

vision 11 nodes

NodeWhat it isCategoryInOutParameters
vision.blobsBlob detection → bounding boxes. The detection pillar's classical source.Vision/Analysisbinarydetections, countmin_area:i64
vision.connected_componentsLabel 8-connected regions → labeled image + region count.Vision/Analysisbinarylabels, count—
vision.contoursTrace contours of a binary image → detections (one polygon per blob).Vision/Featuresbinarycontours—
vision.cornersFAST corner / keypoint detection → detections.Vision/Featuresimagekeypointsthreshold:i64
vision.draw_detectionsDraw detection boxes onto an image → annotated image.Vision/Analysisimage, detectionsannotated—
vision.hough_linesProbabilistic Hough line detection → detections (one polar line each).Vision/Featuresedgeslinesvote_threshold:i64
vision.optical_flowDense optical flow between two consecutive frames → flow field tensor.Vision/Motionprev, nextflowwindow:i64
vision.orbORB features → keypoint detections + binary descriptor tensor.Vision/Featuresimagekeypoints, descriptorsn_features:i64
vision.otsu_thresholdOtsu automatic thresholding → binary mask.Vision/Analysisimagemask—
vision.to_tensorConvert an image into a normalized CHW tensor (the neural-pillar bridge).Vision/Bridgeimagetensorlayout:enum
vision.warp_perspectiveWarp an image by a 3×3 homography (perspective transform).Vision/Geometryimagewarpedhomography:String