SpikeInterface 0.104.0 release notes
Mar 23rd 2026
Main changes:
Added support for
Bombcell[Fabre], for unit curation, including new and updated template metrics (#4306)Added
LUPIN[Garcia2024] as an internal sorter (#4192)Added support for
SLAy[Koukuntla], for automated unit merges (#4190)Added
valid_unit_periodspostprocessing extension, based on NeuroPyxles [npyx] (#4299, #4302)Added
AutoCorrelogramspostprocessing extension (#4307)Added support for double-sided probes (#4272)
Added
SequentialCuration, allowing for chains of curations to be applied to analyzers (#4298)Added support for FigPack, to eventually superseed SortingView (#4364)
Major refactor and debugging of the
Metricspostprocessing module (#4183, #4362, #4355, #4353, #4342, #4292) (see: Metrics module)Significant speedups in
Metrics(#4308, #4363) andSortingComponents(#4402, #4341) modules, and in correlograms (#4305) and template similarity (#4343) computations.API and breaking changes:
Specific metrics functions now imported from different sub module (see: Metrics module)
snrquality metric calculation now uses median rather than mean (see: Quality Metrics module)Metric name “peak_to_valley” has been renamed to “peak_to_trough_duration” for clarity. This name change will be applied automatically on load of older analzyers. (see: Template Metrics)
The function to do UnitRefine curation has been renamed from
auto_label_unitstounitrefine_label_units(seeunitrefine_label_units())Remove support for Python 3.9
core:
Fix closest_channels sparsity estimation when n_units > n_channels (#4443)
Copy the recording from original sorting during NumpySorting.from_sorting() (#4417)
Don’t raise when extension is unknown (#4406)
Make NumpySorting.from_unit_dict docs and code consistent (#4382)
Improve extension dependency management in SortingAnalyzer (#4321)
Implement select_sorting_periods in core (#4316)
Implement the cached_lexsorted_spike_vector. (#4315)
Move structured dtypes to base (#4314)
Implement select_sorting_periods in metrics (#4302)
Fix get_probe set_probe annotations propagation (#4300)
using spike_vector on core/check_sortings_equal test (#4282)
Random spike selection new methods (#4276)
Implement the by_side grouping with probes (#4272)
Fix gaussian filter with time vector (#4268)
Delete some unused references to channel_slice (deprecated in v0.103.0) (#4246)
Fix probable sharedmem (#4239)
Implement Add/SubtractRecording classes and +- operators (#4238)
Warn about non-mergeable units instead of raising an error (#4219)
Implementing sparsity for ComputeTemplates (#4212)
extractors:
Add XClustSortingExtractor (#4433)
Add gain and offset for read_kilosort_as_analyzer (#4428)
Fix openephys tests (#4426)
Fix Open Ephys probe channel order (#4396)
Improve NWB Extractor __del__ method to avoid import errors (#4369)
Fix IBL test with probe representation (#4335)
Remove check of len(inter_sample_shifts) matching num_readout_channels (#4317)
Update to SiNAPS extractor (#4263)
Support for using event names as IDs in PL2 files (#4049)
Get unit locations from HerdingspikesSortingExtractor (#3525)
preprocessing:
Slice epsilons with dead channels to match gains during agc. (#4430)
Support time_vector in resample() (#4429)
Implementing KNN referencing and a backup referencing mechanism for common_reference (#4412)
Use a truncated median filter near edges when detecting bad channels (#4391)
Make anyone happy about warnings and margin in filtering. (#4384)
Fix bug spatial filter #4175 (#4286)
Fix gaussian filter with time vector (#4268)
Fixes Issue4180 (#4247)
Fix artifact removal padding logic (#4245)
Auto-estimate margins based on freq_min/f0+Q for filters (#4227)
Fix silence period and job_kwargs (#4071)
Remove artefacts based of an envelope (#3715)
sorters:
Add the option for clustering methods to return temporal shifts for peaks while clustering (#4401)
Add plotting functions for drift and diagnostics to KS4 (#4387)
lupin and tdc2 : improvements (#4349)
Improve multithreading and multi processing : lock + nogil + mp_context (#4333)
Fix typo in lupin/tdc2 (#4284)
Make “simple” sorters params simpler. (#4281)
Improvements for internal sorters (#4279)
kilosort4 may fail due to the undesirable instantiation of logger (#4277)
Flatten params for tridesclous2 sorter (#4254)
Add isosplit in simple sorter (#4249)
Final cleaning of mixtures for lupin/tdc/sc (#4244)
Cosmetic logging messages for SC2 (#4242)
A new sorter : Lupin sorter (#4192)
postprocessing:
Set amplitude scalings equal zero for zero template units (#4455)
Add gain and offset for read_kilosort_as_analyzer (#4428)
Don’t raise when extension is unknown (#4406)
Fix valid period amplitudes (#4361)
Patch lag similarities (#4345)
Speed up template similarity computing using numba (#4343)
Change ComputeSpikeLocations to use only peak_sign (#4330)
Ensure compute unit locations respects order of unit ids (#4329)
Auto correlograms (#4307)
Option to turn on parallel computation for CCG in numba (#4305)
Valid unit periods extension (#4299)
Add BaseSpikeVectorExtension (#4189)
metrics:
Set num_histogram_bins in amplitude_cutoff (back) to 100 (#4415)
Fix metrics test for numba correlograms fast_mode (#4377)
Remove multiprocessing from NearestNeigbhor metric (#4363)
Add peak_sign to sd_ratio (#4362)
Improve error message for deprecated metric names (#4358)
Correct formula for mad (and std) in drift quality metrics (#4355)
Compute missing spikes on the right tail of amplitude distributions (#4353)
Improve stability of velocity fits in template metrics (#4342)
Timing the computations of quality metrics and some optimizations (#4308)
Bombcell integration and template metrics refactoring (#4306)
Fix rp violations bug (#4292)
Refactor metrics into its own module (#4183)
curation:
Improve robustness of model classifier tests (#4447)
Rename CurationModel to Curation (#4421)
Change ‘min’/’max’ to ‘greater’/’less’ when defining thresholds for threshold_metrics_label_units (#4416)
Send peak_sign to get_template_extremum_channel_peak_shift in remove_redundant_units (#4408)
Use sorting._recording (if available) in remove_excess_spikes (#4407)
Add threshold_metrics curation (#4365)
Ensure default supported_versions is a tuple, as in type (#4348)
Refactor API for auto_label_units (#4338)
Bombcell integration and template metrics refactoring (#4306)
Sequential curation (#4298)
Fix failing tests due to scikit-learn versions (#4253)
Warn about non-mergeable units instead of raising an error (#4219)
Add SLAy auto-merge preset (#4190)
widgets:
Enlarge channel textbox in plot_traces (#4400)
Send a float (rather than 1-element array) to BoundedFloatText (#4399)
Figpack integration (replacement of sortingview) (#4364)
Remove layer selector from plot_traces ipywidgets backend if single layer (#4325)
Fix edges of 2d-histogram in UnitWaveformDensityMapWidget (#4283)
Protect unit summary and unit locations plots against NaNs (#4128)
generators:
More possibilities for gt generation (#4289)
Update generate.py (#4163)
sortingcomponents:
Optimizations: faster waveforms/templates and seeding iterative_isosplit properly (#4402)
Add the option for clustering methods to return temporal shifts for peaks while clustering (#4401)
Make peak detection (locally_exclussive, matched_filtering) faster and more accurate. (#4341)
Needed by Olivier to create an analyzer with precomputed data (#4303)
Final cleaning of mixtures for lupin/tdc/sc (#4244)
Cosmetic logging messages for SC2 (#4242)
Update nearest peeler (#4223)
documentation:
Add missing API doc entries for save*, dump*, remove_channels, and scale_to_uV (#4451)
Extend unsigned to signed docs (#4448)
Fix link to LFP docs in error message (#4424)
Fix some typos in documentation (#4419)
Add a why integrate your software with spikeinterface section (#4393)
Add compute_valid_unit_periods to api and add credit in postprocessing module (#4390)
Add metric_descriptions and BaseMetricExtension.get_metric_colum_descriptions (#4278)
Doc sorters (#4275)
Clean auto-release script: use metrics + only print changed modules (#4265)
continuous integration:
Update setuptools version for legacy kilosort (#4386)
Get rid of pytest-dependency and use fixtures (#4381)
Free up space in codecov CI (#4252)
packaging:
Update lower bound python support to 3.10 (#4383)
testing:
Further Improve robustness of model classifier tests (#4450)
Remove n_jobs=-1 from curation tests (#4449)
Improve robustness of model classifier tests (#4447)
Fix openephys tests (#4426)
Rename neurodsp to ibldsp to ensure IBL tests run (#4392)
Update setuptools version for legacy kilosort (#4386)
Get rid of pytest-dependency and use fixtures (#4381)
Test IBL extractors tests failing for PI update (#4285)
using spike_vector on core/check_sortings_equal test (#4282)
fix tdc2 failing tests (#4271)
Fix failing tests due to scikit-learn versions (#4253)
deprecations:
Remove deprecations for 0.104.0 (#4425)
Make anyone happy about warnings and margin in filtering. (#4384)
Improve error message for deprecated metric names (#4358)
Binary recording bacward-compatibility (#4357)
Contributors:
@CodyCBakerPhD
@JoeZiminski
@Julie-Fabre
@MGAMZ
@OleBialas
@ShijiMi-Soup
@ablot
@alejoe91
@b-grimaud
@chrishalcrow
@ecobost
@esutlie
@grahamfindlay
@h-mayorquin
@m-beau
@mhhennig
@oliche
@pas-calc
@raffaele222
@samuelgarcia
@tayheau
@ueeseer
@yger
@zzhmark