Skip to content

Repository files navigation

Visual Stimulation Daemon — vstimd

Build and Test Docs

Status: early alpha — under active development, not validated for experiments or data collection.

vstimd is a visual stimulus server for neuroscience and psychophysics. It runs on a dedicated Linux device, renders with Vulkan straight onto KMS/DRM (no X11, no Wayland, no compositor), and takes commands over the network from any language that speaks ZMQ + protobuf.

It is trigger-driven: you set up a scene ahead of time — stimuli plus small on-device animations — and the device then produces frame-accurate stimulation the moment a Virtual Trigger Line fires, fed by a hardware DAQ. The timing-critical path never leaves the box.

vstimd combines ideas from Michael Stephan's StimServer and Andreas Kreiter's VStim.

Getting started

Run a rig. Every release ships .debs (amd64/arm64), .rpms (x86_64/aarch64), and a ready-to-flash Raspberry Pi 5 image. Packages are also served from the braemons apt archive, so rigs upgrade in place.

Build and run it locally.

cargo run --release                     # fullscreen (auto-detects DRM or desktop)
cargo run --release -- --windowed 1280x720
cargo run --release -- --null           # ZMQ only, no display

Press D for demo stimuli, F1F7 for overlay panels, Esc to exit. Build dependencies and the packaging targets are in Installation and Building & packaging.

Drive it from Python.

cd client/python && uv sync
uv run examples/flash_rects.py
from vstimd import Connection
from vstimd.stimuli import Color, RectParams, ShapeAppearance, Vec2

with Connection("tcp://vstimd-a1b2c3.local:5555") as conn:
    h = conn.stimuli.shapes.create_rect(
        position_px=Vec2(0, 0),
        params=RectParams(width_px=300, height_px=200,
                          appearance=ShapeAppearance(fill_color=Color(1.0, 0.0, 0.0))),
    )
    conn.stimuli.set_enabled(h, True)

Or open http://<rig>:8080 for the built-in web control UI, and use vstimd-client discover to find rigs on the network.

Contributing

Design notes and roadmaps live in dev/ — start with dev/PLAN.md. Build, test and packaging workflows are in CLAUDE.md and the developer guide.

License

GNU AGPLv3, except the Python client in client/python, which is GNU LGPLv3 so that importing it does not place your experiment's own code under copyleft. Copyright © 2026 Joscha Schmiedt, University of Bremen.

About

Visual Stimulation Daemon for Brain Research

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages