What’s new#

Version 1.1.0#

Unreleased

New features#

  • NFPlot now draws a live, toggleable dashed threshold line for the protocol driving each modality — fixed for ThresholdProtocol, adaptive (redrawn every push) for ZScoreProtocol.

  • NFPlot now shades a translucent green reward span over the time windows where the driving protocol is currently rewarding the subject, also independently toggleable. A 🟢 prefix marks reward-active updates in the status bar.

  • EpochPlot supports interactive click-to-reject bad-epoch marking: left-click a shaded epoch span to mark it bad (rendered in red), click again to restore it. Marked epochs are tracked via bad_epoch_ids and is_epoch_bad().

  • CLI: --protocol {threshold,zscore} explicitly selects the reward protocol, with automatic inference from --threshold / --zscore-* flags when omitted; new --zscore-min-std option avoids the default standard-deviation floor swamping small-magnitude features (e.g. sensor_power).

  • New connect_to_array() connects a session to a plain in-memory numpy array instead of an LSL stream, driving the exact same record_baseline() / record_main() pipeline with no LSL networking or recorded file required — useful for offline analysis, unit tests, and demos. Backed by the new ArrayStream.

Bug fixes#

  • Fixed a crash when closing one plot window (e.g. RawPlot or TopomapPlot) while other plot windows remained open.

  • mne.datasets.eegbci.load_data() is now called with update_path=True in the motor-imagery example, avoiding an interactive prompt that hung non-interactive/CI gallery builds.

  • Fixed compute_bandpower() always raising TypeError with method="multitaper" due to an invalid axis argument passed to MNE’s psd_array_multitaper().

  • Fixed create_report() raising FileNotFoundError when called without a prior record_baseline() or record_main() call, since the session’s output directories were never created in that path.