3,365 apps tracked 0 new today 17 updated today Synced 30m ago

Syntalos

Synchronized data acquisition from diverse sources and flexible experiment control

Matthias Klumpp ✓ Verified

org.syntalos.syntalos
View on Flathub ↗

Syntalos is a software for timestamp-synchronized parallel data acquisition from diverse data sources and for closed-loop interventions. Among many other things, Syntalos supports:

  • Intan RHD/RHS systems, Open Ephys acquisition boards, and Neuropixels probes via remote SpikeGLX
  • UCLA Miniscopes for calcium imaging in freely moving animals
  • Many industrial and generic cameras
  • Microcontrollers and I/O boards via Firmata or MicroPython
  • Online signal and video processing

The modularity of Syntalos allows it to be used for a wide variety of experiments, and it often can be used without any programming skills. Data sources, sinks, and processing blocks can be connected graphically with virtual "wires" to form a data flow graph using drag & drop, to represent how data should be acquired, displayed, or stored. If more flexibility is needed, Syntalos can be extended with Python scripts, live-programmed microcontrollers, or custom modules written in Python or C++. For all data sources, Syntalos ensures timestamps of incoming data are aligned, so the individual pieces of data can be correlated without additional processing or external synchronization. Multiple Syntalos instances on different computers can also be started and stopped in sync over the network.

All data and metadata generated from an experiment run is stored in a well-defined, comprehensive structure, making it easy to compare, pool, or share data between experimentalists with different research questions.

Screenshots

The Syntalos main window with a few module display and settings windows opened
The Syntalos main window with a few module display and settings windows opened
Running a very simple experiment, recording from a UCLA Miniscope and a camera simultaneously
Running a very simple experiment, recording from a UCLA Miniscope and a camera simultaneously
A more complex configuration for an advanced behavior experiment
A more complex configuration for an advanced behavior experiment

Observed history

App ChangeVersionWhen ↓
updated3.2.129 Sept 2026

Upstream releases

Release notes supplied by the developer. These dates are not Flathub package publication times.

3.2.128 Sept 2026

This release adds the following features:

  • datactl: Add PULL_DOWN and ANALOG LineMode flags for LineReading
  • miniscope: Port to new libminiscope API
  • audiosource: Allow selecting an arbitrary file for playback instead of sound generation
  • plot-timeseries: Add oscilloscope-style sweep mode for the time axis
  • plot-timeseries: Carry held line levels across the sweep wrap
  • videorecorder, zarrwriter: Report item counts as run statistics
  • devel.datasource: Add frame size, channel count and camera-like frames
  • devel.datasource: Add noise to the generated signals, allow more channels
  • devel.datasource: Add option to generate rows at very high speeds
  • example-mlink: Implement frame passthrough
  • mlink: Add a way for modules to access their cache dir
  • Gather & expose all instrumentation data we have as JSON and HTML reports
  • Let modules contribute to run statistics, measure data age in flow meter
  • Port to iceoryx2 0.10.0
  • Give a dedicated exit code if we try to launch Syntalos twice
  • engine: Keep the buffer monitor's peaks for the run statistics
  • Add a benchmark tool to test which loads a system can sustain
  • sybench: Add a GUI with live progress, cancellation and report saving
  • Add option to emit sound cues about the experiment run state
  • Use thread distribution limits on events-dedicated modules
  • Add a D-Bus control interface
  • ui: Improve global config dialog UI

This release fixes the following bugs:

  • Fix build with Eigen 3.4.1
  • videorecorder: Do not warn about inexact colors for lossless grayscale in YUV
  • spikeglx: Ensure suggested stream dataset names won't collide by accident
  • datasource: Fix crash when a scene is deleted in STOP while main thread is still composing
  • plot-timeseries: Avoid port ID collisions
  • mlink: Allow remove and re-registration of same-ID ports
  • engine: Join event threads in module stop order as well
  • Ensure we retain permissions when saving/creating project files
  • Don't remember projects in temp locations in history
  • Remember the last project dir only for interactively opened projects
  • Raise default fd limits

This release includes the following changes:

  • Avoid more string conversions on the caller side in the module API
  • ci: Install newer Rust toolchain when on Debian Stable
  • Die in style on SIGINT and SIGTERM
  • engine: Release unused memory after a run

With contributions from:

Matthias Klumpp

3.2.06 Sept 2026

This release adds the following features:

  • spikeglx: Add new module to interface with a SpikeGLX instance on the network
  • spikeglx: Publish digital channel groups as line events
  • camera-arv: Build this module with -O3
  • videorecorder: When deferred-encoding, store the intermediate as FFVHuff
  • videorecorder: Preserver FFV1 16 bits pixel format in recordings
  • datactl: Add SignalBlockI16 signed 16-bit signal block type
  • projectfile: Ensure deterministic module load order & robust section IDs
  • Make project files fully deterministic
  • Pass the full RunInfo struct to module prepare() and expose it over MLink
  • Write a persistent logfile and add a viewing diagnostic tool for logs
  • videorecorder: Write a logfile for the encodehelper as well
  • Add quick-open option for recent projects
  • Measure project disk space consumption and warn early if we might run out of space
  • Refine memory pressure readings by looking at PSI, refactor resource monitoring
  • engine: Monitor resources slowly, unless there is an issue, then look more often
  • ui: Add new widget to show more complex run notes in a better layout
  • python: Add set_status_message function

This release fixes the following bugs:

  • open-ephys-acq: Capture start offset slightly closer to the board run command
  • open-ephys-acq: Never unload the liboni library once it was loaded
  • open-ephys-acq: Apply our driver-pinning earlier
  • plot-timeseries: Ensure graphs of edge-triggered sources remain always visible
  • canvas: Survive recreation of the OpenGL context
  • camera-arv: Recycle the decoder's output buffer between frames
  • camera-arv: Copy Mono8/Mono16 frames instead of unpacking them
  • camera-arv: Never index a partially described enumeration
  • camera-arv: Actually mark the module as running while its worker thread is up
  • camera-arv: Increase frame queue size for slow FPS
  • camera-arv: Prevent crashing due to empty QArvEnumeration
  • camera-tis: Fix corrupted and mislabeled 16-bit grayscale frames
  • videorecorder: Make lossless encoding fully lossless for color images
  • videorecorder: Add an option to record colors exactly
  • videorecorder: Keep the lossless checkbox in sync with the codec
  • videorecorder: Refuse odd frame dimensions, and stop producing them
  • videorecorder: Drop stale Matroska hint, document raw VFW log warning
  • videorecorder: Fix frame buffer leak on file slice rollover
  • videorecorder: Do not let a quality of zero be silently discarded
  • videorecorder: Harden settings dialog against inconsistent loaded state
  • videorecorder: Fix VP9 lossless encoding
  • videorecorder: Prevent GUI from overriding the loaded lossless setting
  • videorecorder: Fix AV1 VAAPI
  • videorecorder: Preserve exact-color encode metadata
  • videorecorder: Preserve exact colors for deferred encoding
  • videorecorder: Preserve raw gray16 in Matroska
  • videorecorder: Warn about signed gray16 input
  • videorecorder: Convert gray16 to native byte order
  • videorecorder: Test raw gray16 Matroska round-trip
  • videotransform: Keep even crop regions in bounds
  • videotransform: Keep scaled frame dimensions even
  • Guard against full disks when writing tsync files deferred video encoding
  • imgui: Survive recreation of the OpenGL context
  • imgui: Give the renderer and its window wrapper a single owner
  • mlink: Fail nicer when publishing a sample fails
  • mlink: Ensure the master will never abort if an iox send fails
  • Guard against IOX node creation failures
  • rtkit: Don't use the XDG portal if we don't have to
  • Work around a KTextEditor crash with frameworks == 6.28
  • Fix build with GCC 16
  • engine: Fix lost-wakeup race on the run start barrier
  • fabric: Keep subscription suspension consumer-owned when a stream (re)starts
  • fabric: Stop DataStream from writing the suspension flag of its subscriptions
  • engine: Warn if an inactive module's input queue still holds data at run end
  • mlink: Skip output forwarder when every destination module is dormant

This release includes the following changes:

  • camera-arv: Move decoder tests into faster unit test
  • videorecorder: Cover all raw Matroska pixel formats in the round-trip test
  • datactl: Add a helper for recycling image buffers safely
  • datactl: Make signal-block consumers type-agnostic
  • logging: Enable IOX debug logging if we are in verbose mode
  • logging: Improve GLib log handler & cache root logger
  • fabric: Namespace misc util functions
  • tests: Make inactive-subscriptions scenario cover Python -> disabled module

With contributions from:

Matthias Klumpp, Victor Negîrneac

3.1.112 Jun 2026

This release fixes the following bugs:

  • datactl: Make new-style tsync files distinguishable from older ones and pass edlio validation
  • udev: Properly detect installed udev rules again
  • videorecorder: When recording sections, ensure we can't end up with no-frame files
  • camera-arv: Display status message on FPS mismatch
  • camera-arv: Make FPS sentinel adaptive instead of a fixed number
  • camera-lc: Refactor to fail fast if requests don't complete after 10 sec
  • camera-lc/generic: Check framerate adaptively every 2sec

This release includes the following change:

  • tests: Validate generated datasets from GUI tests using edlio
3.1.08 Jun 2026

This release adds the following features:

  • Use dynamic port selector in Zarr/JSON writers
  • datactl: Allow for more SignalBlock typecasts
  • Streamline EDL data-file basename slug creation algorithm and logic
  • ui: Animate overloaded connections
  • meson: Add negative-list to disable specific modules
  • flowmeter: Add stream flow meter debugging helper module
  • open-ephys-acq: Suggest proper output data names for streams
  • open-ephys-acq: Read digital input lines and export them as stream
  • open-ephys-acq: Auto-enable ADC/AUX if any one of their channels is selected
  • jsonwriter/zarrwriter: Add the ability to save raw TTL line readings
  • latencycheck: Add histogram display and make module a non-developer module
  • plot-timeseries: Add support for plotting raw TTL line readings
  • signalfilter: New module to apply IIR filter chains to signals
  • videotransform: Add Mirror and clockwise Rotate transforms

This release fixes the following bugs:

  • udev: Ensure our rules run before 73-seat-late.rules
  • engine: Streamline niceness/realtime handling against the RtKit budget
  • engine: Estimate connection heat based on items size+count, not just count
  • fabric: Avoid unnecessary syscalls when notifying event handlers
  • mlink: Always process control-events on sample-independent event source
  • mlink: Fix backpressure and never drop samples on overloaded connections
  • imgui: Don't write a unneeded imgui.ini into the working directory
  • imgui: Ensure text fields are editable
  • imgui: Make sure the current locale decimal point is properly respected
  • camera-arv: Gate teardown and don't capture thread stack objects
  • camera-generic: Don't resize received frames, set framerate early
  • camera-generic: Prevent log spam for normalized-scale property read-backs
  • camera-generic: Pull supported resolutions from V4L
  • camera-lc: Add new libcamera-based module for capture from UVC devices
  • canvas: Simplify the display speed adaptation logic
  • canvas: Set a larger default canvas size
  • open-ephys-acq: Address all compiler warnings
  • open-ephys-acq: Align value scaling to what the Open Ephys GUI does as well
  • open-ephys-acq: Shift start timestamp to recorded start time
  • open-ephys-acq: Add buffer-aware timesync support
  • plot-timeseries: Drop removed channels from list if source metadata changes
  • plot-timeseries: Remember manually-set y-axis limits in project settings
  • plot-timeseries: Use XXH3 in channel-color algorithm for deterministic colors
  • videorecorder: Don't fail when deferred-encoding very short video chunks
  • videorecorder: Drop misleading log warning when recording raw video
  • json/zarrwriter: Properly write sampling rate into metadata as well
  • zarrwriter: Use a softer color that looks even less like the error color

This release includes the following changes:

  • vendor: Update liboni
  • ci: Implement basic resource usage instrumentation
  • ci: Perform optimized test builds
  • ci: Release with combined source tarballs
  • debian: Drop PPA upload helpers
  • tests: Add more complex signal viewer helper script
  • plot-timeseries: Port internals to use std::string instead of QString

With contributions from:

Matthias Klumpp, Victor Negîrneac