Release notes

Releases on GitHub

Version 2.0


  • New and improved data file format.

  • Framework events can now be triggered from the GUI 'Controls' dialog.

  • Notes can be written to data log using GUI 'Controls' dialog.

  • New API allows pyControl tasks to interact with Python code running on computer.

  • New functionality to set variable values for individual hardware setups, which can be used across different tasks and experiments.

  • Setups Tab now does operations on multiple boards in parallel rather than serially.

  • Experiments can now be organised into subfolders within the experiments folder, to create a nested experiment select menu in the GUI.

  • UI improvements.


  • Added Frame_logger device to provide low overhead method of recording times of events that do not otherwise need to be processed.


  • Rsync_aligner can now extrapolate times before first and after last sync pulse when converting times between reference frames.

Version 1.8.1 (2023-02-21)


  • Fixed bug where audio output and rotary encoder could not be used together.

Version 1.8 (2022-11-08)


  • GUI is now compatible with PyQt6 and Python 3.10.

  • New GUI settings dialog.

  • Required device driver files are now automatically transferred to the pyboard when a task or hardware definition is uploaded.

  • Pyboards can now be hidden so they do not show up in board select GUI menus by naming them _hidden_ in the setups tab.

  • Hardware definition files are now stored in a hardware_definitions folder not the generic config folder.

  • Various small improvements and bug fixes.


  • Major refactoring of framework code to make it simpler and more readable.

  • Analog inputs now stream data to the computer continously while the framework is running rather than having record and stop methods to start and stop data streaming.

  • Events triggered by timers are now output to the data log by default.

  • Removed decimate argument from digital input as it was not used in practice.

  • Added Frame_trigger device class for triggering camera frames as a specified frequency and recording the frame times to an analog data file.

  • Added uRFID device class for controlling Priority 1 Designs RFID module.

  • Added print_variables function for printing variable values to the data log as a json formatted string.

Data import:

  • Added session_dataframe function for generating a pandas dataframe from a pyControl data file and experiment_dataframe for generating a pandas dataframe from an experiment data folder.

Version 1.7.2 (2022-06-30)


  • Python terminal window no longer opens when GUI is run. Any error messages generated by the GUI are written to an 'ErrorLog.txt' file rather than being printed in the python terminal.

  • GUI window now has pyControl taskbar icon rather than generic python icon.

  • Fixed bug where experiments tab variables table did not recognise variables if named imports were used in the task file.

Version 1.7.1 (2022-04-20)


  • Bug fix and improvements in custom variables dialog editor.

Version 1.7 (2022-04-06)


  • Added functionality for users to create custom dialogs for setting task variables.


  • Modified Rsync_aligner code to remove the need for users to manually specify the units pulse times are measured in.

Version 1.6.2 (2021-12-23)


You will need to reload the framework onto your pyboards (using the board config menu) after updating the GUI to this release, due to changes in the communication protocol between the board and the GUI.


  • All pyControl specific functions are now imported by the user into the task file from the pyControl.utility module, rather than some functions being patched onto the task file after it has been imported by the framework.

  • The button example task has been modified to match the example task in the pyControl manuscript. An additional version of the button task using named rather than * imports has been added for comparison of the two import methods

Version 1.6.1 (2021-11-22)


You will need to reload the framework onto your pyboards (using the board config menu) after updating the GUI to this release, due to changes in the communication protocol between the board and the GUI.


  • Run task tab now displays current state, most recent event and print line.

  • GUI style unified across platforms.

  • GUI font sizes now configurable in

  • Fixed bug which prevented events from plotting in PyQtGraph version > 0.11.0.

  • Made communication from pyboard to computer during framework run more robust to unexpected output from pyboard.

  • Various minor bug fixes.

Version 1.6 (2020-11-25)


  • Experiments that use multiple setups now load the task in parallel on all the setups at once, rather than serially on one setup after annother, giving a large speedup when many setups are used.

  • The experiments tab now allows a subset of the subjects in an experiment to be selected to run, and allows different subjects to be started and stopped at different times.

  • Task files can now be organised into subfolders within the tasks folder, to create a nested task select menu in the GUI.

  • Buttons now have icons indicating their functionality.

  • Various minor bug fixes.

Version 1.5 (2020-02-11)


  • Task files used in an experiment are now automatically saved in the experiments data folder with a file hash appended to the task file name to uniquely identify the file version. Whenever a task file used in the experiment is modified the new version will be saved to the data folder when the experiment is run. The task file hash used for each session is recorded in the session's data file so the exact task file used to run each session can be identified.

  • A menu bar now provides quick access to online help, data/task folders, and some GUI settings.

  • Behaviour plots can now be paused.

  • Keyboard shortcuts now implemented for some commonly actions, detailed in the help menu.

  • Task variables can now be specified as private by ending the variable name with three underscores, making them invisible to the GUI.

  • A meaningful error message is now shown on failure to import dependencies.

  • Persistent variables implementation now allows running different subjects on different sessions in same experiment data folder without overwriting the persistent variables.

  • Improved reliability of file transfer to pyboard.

  • Ordering of subjects in summary variables table is now consistent with that in configure experiment tab.

  • GUI is now launched by running file in the pyControl root directory.

  • Event and state dictionaries now written to task file as JSON objects to make them easier to parse cross platform. This does not affect reading task files in Python as JSON objects are also Python dicts (as used previously).

  • Various bugfixes and reliability improvements.


  • Removed command line interface.

Version 1.4 (2019-02-03)


  • Support for running experiments on multiple setups in parallel.


  • Added session_plot module for visualing sessions offline.

Version 1.3.3 (2018-12-12)


  • Small plotting/ UI improvements.


  • Fixed math domain error bug with MCP class.

  • Fixed 'Invalid state name passed to goto_state: None' bug.


  • Added documentation for synchronisation tools.

Version 1.3.2 (2018-07-27)


  • Bug fixes and reliability improvements.


  • Added Lickometer and Analog LED driver devices.


  • Added Rsync alignment code

Version 1.3.1 (2018-05-16)


  • UI improvements and bug fixes.


  • Added Audio_player device driver.

Version 1.3 (2018-04-16)


  • New graphical interface for running tasks, supports online visualisation of task behaviour and setting of variables during run.


  • Summary variables now written to data file at end of
  • Event and state names rather than IDs now displayed during run_task and run_experiment.


  • Added Port_expander hardware device driver.
  • All data now transmitted from pyboard to computer as binary rather than printed strings.
  • Data logging moved to separate Data_logger class.
  • Setting / getting variables modified to work while framework running.

Version 1.2.1 (2018-03-29)


  • scanning for connected pyboards fixed on Windows 10.


  • Added support for MCP23008 IO expander.
  • Fixed incorrect pin ID for Breakout_1_2 BNC_2.

Version 1.2 (2018-01-31)


  • can automatically detect the serial port of connected pyboards.
  • can save data generated in framework run.


  • Digital_output.pulse() now allows duty cycle and number of pulses to be specified.
  • Added Analog_input class.
  • Added Rotatory_encoder device driver.
  • Added Stepper_motor device driver.
  • Added MCP23017 device driver.

Version 1.1.4 (2017-12-21)


  • Added 'timer_remaining' function.

Bug fixes:

  • Fixed various bugs that caused problems using CLI on Linux.
  • Fixed bug that could cause CLI to crash during transfer of large files to pyboard.
  • Fixed bug which caused negative timestamps if pyb.millis rolled over during session.

Version 1.1.3 (2017-07-28)

  • Added, a module for importing pyControl sessions and experiments into Python for analysis.


  • Run task now allows board to be selected by number rather than port.


  • Added 'pause_timer' and 'unpause_timer' functions.
  • Added 'choice', 'gauss_rand' and 'exp_rand' random functions.
  • More informative error messages for some common task file errors.

Bug fixes:

  • Fixed import problem which could prevent run_experiment from running.

Version 1.1.2 (2017-05-08)


  • Added six_poke hardware device.
  • removed .wav playback for audio outputs.
  • Moved rarely used device drivers to separate 'more devices' folder for faster framework upload.


  • Faster and more reliable file upload to boards.
  • Data file names now include start time.
  • Improved information output to data file before run start.
  • Post run file transfer now uses separate directories in transfer folder for each experiment.
  • Error tracebacks during run_experiment are now written to file. Warning is displayed at end of run if error has occurred.
  • Added disable_mass_storage and enable_mass_storage to board config menus.
  • Simplified run_task menus for getting and setting variables.

Bug fixes:

  • Fixed bug which meant that run_experiment stopped when the last numbered box stopped rather than when all boxes had stopped.
  • Print output from run_end() now saved by run experiment.

Version 1.1 (2017-02-06)


  • Added get_current_time function which returns current time in ms.
  • Added support for playing .wav files to Audio_output class.


  • Added, a script for configuring and running tasks on individual pyboards.

Version 1.0 (2016-12-30)

  • Initial release of pyControl CLI