Skip to content

Releases: psychopy/psychopy

2026.1.3

30 Mar 09:51
8ba4464

Choose a tag to compare

Fixes

PsychoPy

PsychoPy Studio

Full Changelogs:

2026.1.2

19 Mar 11:12
a00fa8c

Choose a tag to compare

Fixes

PsychoPy

  • Skip camera devices with no available formats by @aforren1 in #7568
  • Use Version "latest" should be treated the same as blank by @TEParsons in #7570
  • Silence unnecessary "Stopping key buffers" warning by @TEParsons in #7569
  • Handle "True" and "False" in preferences when set from JSON by @TEParsons in #7579
  • Handle when the size of a MovieStim is None by @TEParsons in #7581
  • Fix display of eyetracker params in Experiment Settings by @TEParsons in #7585

PsychoPy Studio

Documentation & Testing

@TEParsons @RebeccaHirst @peircej

Full Changelogs

PsychoPy: 2026.1.1...2026.1.2
PsychoPy Studio: psychopy/psychopy-studio@2026.1.1...2026.1.2

2026.1.1

26 Feb 14:36
29623ce

Choose a tag to compare

Fixes

Full Changelog: 2026.1.0...2026.1.1

2026.1.0

20 Feb 13:03
8cb8098

Choose a tag to compare

Introducing PsychoPy Studio

favicon

PsychoPy Studio is a full rebuild of the PsychoPy desktop app using web-based libraries (Svelte and Electron). The underlying experiment engine (the PsychoPy library) is still Python, but Studio provides a smoother, more user-friendly interface (think drag and drop routines…) and better version independence with useVersion.

As always, the code is fully open source, you can view and contribute here. Eventually, PsychoPy Studio will replace the standalone PsychoPy app, but we plan to maintain both for a few major releases while the dust settles.

Read more about PsychoPy Studio here

PsychoPy 2026.1.0

Same as any release, PsychoPy 2026.1.0 also comes with fixes and improvements to PsychoPy itself.

Highlights

Improvements

Fixes

  • Find dialog now includes params with "set during..." matching the search term by @TEParsons in #7385
  • Added code to maintain external spectral calibration by @wadelab in #7372
  • Allow multiple joysticks when using the Pyglet backend by @mdcutone in #7414
  • Correctly get the number of joystick devices by @rlaboiss in #7434
  • Use expanding lists to avoid index errors with buttonboxes and sensors by @TEParsons in #7458
  • Stop all playback Components (Sound, Movie, etc.) when experiment ends by @TEParsons in #7461
  • Fix SyntaxError due to docstring by @mscheltienne in #7479
  • clamp StairHandler intensity when step size is negative by @stephenmjerge in #7475
  • Fix AttributeError: KeyboardDevice missing _buffers attribute wo PTB by @wadelab in #7494
  • ExperimentHandler not saving extraInfo to wide text by @davidmwatson in #7374
  • Fix Auto->JS isinstance(list) to Array by @stephenmjerge in #7533
  • Fix bug in preferences dialog handling speakers named "default" by @TEParsons in #7499
  • Allow iohub errors in clients to be logged by @mdcutone in #7532
  • Fixed issue with plugins window not opening by @peircej in #7546
  • Fixes errors when opening Monitor Center (wx app) by @mdcutone in #7541
  • Changes to support 3D mesh rendering again by @mdcutone in #7530
  • Revert to old-style file list ctrl by @TEParsons in #7558
  • Use a dedicated param ctrl for choosing validators by @TEParsons in #7421

Other Changes

New contributors

Testing and documentation improvements

Full Changelog: 2025.2.4...2026.1.0

2025.2.4

08 Jan 14:08
2eaa338

Choose a tag to compare

What's changed

Fixes

  • Fix error & missing refresh token when logging in from saved details by @TEParsons in #7513
  • Fix error when loading some experiments by @TEParsons in #7504

Documentation

@RebeccaHirst @TEParsons

Full Changelog: 2025.2.3...2025.2.4

2025.2.3

01 Dec 21:46
e23008c

Choose a tag to compare

GitLab compatibility

Pavlovia will soon be upgrading to a newer version of GitLab in which authentication tokens have a maximum shelf life of 2 hours. This release of PsychoPy is the first to include automatic token renewal, allowing you to be seamlessly re-authenticated without having to manually log back in. In prior versions, once Pavlovia has updated, you will have to manually log back in every 2 hours. We apologise for the inconvenience, unfortunately this is essential for your data security.

Bug Fixes

  • Fix bug where renamed user details weren't available from Pavlovia by @TEParsons in #7460
  • Fixed param control text color selection when using system dark theme by @mdcutone in #7457
  • When FontManager finds multiple matching fonts, sort them so the same one is always chosen by @TEParsons in #7464
  • Make sure validation columns (stim.validator.started, etc.) exist even if validation fails by @TEParsons in #7466
  • Don't use SetFont on Linux by @TEParsons in #7477
  • When Pavlovia auth token expires, send a refresh request by @TEParsons in #7478
  • Fixed Mouse.getPos() returning float64 typed objects instead of float by @mdcutone in #7462
  • Better handle when stimulus stop validation fails by @TEParsons in #7485

Documentation improvements

Full Changelog: 2025.2.2...2025.2.3

2025.2.2

26 Nov 13:54

Choose a tag to compare

What's Changed

  • Fix unformatted warning when a device fails to scan by @TEParsons in #7445
  • Visual validator was ignoring "Find threshold/sensor" params by @TEParsons in #7444
  • Save unfinished mic recordings if the experiment is ended by e.g. pressing escape by @TEParsons in #7452
  • Dollar label wasn't showing for some params by @TEParsons in #7436
  • Silence confusing message in MouseComponent about params updating by @TEParsons in #7440
  • Fix bug with saving data each trial by @TEParsons in #7437

Full Changelog: 2025.2.1...2025.2.2

2025.2.1

17 Oct 16:03
e32197b

Choose a tag to compare

What's Changed

  • Loop type wasn't updating loop ctrls by @TEParsons in #7366 7360
  • Circle was triggering unecessary warnings about deprecation by @TEParsons in #7364
  • Make Component dialog pages scrollable by @TEParsons in #7365
  • Fix setting Polygon num. vertices each repeat by @TEParsons in #7379
  • Fixed muting on movie player warmup and volume setter methods by @mdcutone in #7375
  • Fixes for mouse input via events when multiple window backends are installed by @mdcutone in #7367
  • Fix iohub recording state in Builder ouput by @mdcutone in #7370
  • Fixed incorrect func ref in getAllJoysticks() by @mdcutone in #7392
  • Add mic query plist by @peircej in #7402
  • Fix how the timeout param is written in SerialDevice by @TEParsons in #7400
  • Importing psychopy.app when writing scripts was slowing things down and breaking Use Version by @TEParsons in #7409
  • Reset volume when movie is reloaded by @mdcutone in #7417
  • Fix view and projection matrices not being applied before first flip by @mdcutone in #7381
  • Handle when there's a file called "untitled.psyexp" in the app's root directory by @TEParsons in #7395
  • Allow Session to use a relative path for its root folder by @TEParsons in #7399
  • Add an "Add multiple" button to file list params by @TEParsons in #7383
  • Fix confusing message on Sound when given a variable by @TEParsons in #7428
  • Fixed loading ioHub settings from XML by device class name by @mdcutone in #7433

Full Changelog: 2025.2.0...2025.2.1

PsychoPy 2025.2.0

06 Aug 09:07
0fe2019

Choose a tag to compare

Highlights

🐍 = Works locally
🌐 = Works online

🐍 Reworked SerialComponent to give more control over what data is sent
🐍 Device Manager to consolidate working with a single device at multiple points in a study or across studies
🐍 Much better performance for movie playing and camera recordings (better buffering of frames)
🐍 Revamped photometer classes for easier gamma calibration

Other Changes

  • Add example demo script for extracting hdf5 data by @RebeccaHirst in #7223
  • fixed iohub compatibility with PyObjC>=8.0
  • Plugin/package manager performance improvements by @mdcutone in #7194
  • Fixes for numpy>=2.0 by @aforren1 in #7229
  • New endCurrentRoutine method for ExperimentHandler by @TEParsons in #7213
  • Better updating of local language translation files by @hsogo in #7230
  • Don't cancel upcoming iteration in TrialHandler2 if on last trial by @TEParsons in #7240
  • Enable discarding previous responses in Button Box akin to keyboard by @TEParsons in #7250
  • Fix erronious alert about missing transcriber (for Mic) when running locally by @TEParsons in #7258
  • Don't search for experiment fonts if the experiment folder is the home directory by @TEParsons in #7257
  • Allow overriding user preferences directory with PSYCHOPY_CONFIG_FOLDER environment variable by @wieluk in #7207
  • Sound sensor volume was adjusted for 255 (when threshold is 0-1) by @TEParsons in #7261
  • Enforce a minimum size on multiline text params by @TEParsons in #7263
  • Fixed error when adding data to a row that's out of bounds by @TEParsons in #7266
  • Handle when allowedKeys is just 1 multi-character string (e.g. "return") online by @TEParsons in #7268
  • Improved movie playback performance for MovieStim using ffpyplayer by @mdcutone in #7264
  • Handle when a file added to runner has been deleted by @TEParsons in #7276
  • For Sesssion, set experiment start time and name in Experiment run function by @TEParsons in #7281
  • Improved camera performance in local studies by @mdcutone in #7267
  • Fix package indexing subprocess crash by @mdcutone in #7293
  • Catch "Bad perspective string" errors on app launch by @TEParsons in #7298
  • Fix gamma calibration button in Monitor Center by @TEParsons in #7304
  • Better handling of legacy params for device Components by @TEParsons in #7308
  • Various UI fixes by @TEParsons in #7311 #7312 and by @mdcutone in #7323
  • Allow ButtonBox responses to be compared to dicts with the correct fields by @TEParsons in #7306
  • Give more information when an image fails to load by @TEParsons in #7310
  • Fix legacy photometer finding methods by @TEParsons in #7321
  • Give more informative error when conditions file has duplicate names by @TEParsons in #7324
  • Maintain aspect ratio when MovieStim size is None by @TEParsons in #7325
  • Deprecated psychopy.voicekey (move to psychopy-legacy) by @TEParsons in #7326

New Contributors

Full Changelog: 2025.1.1...2025.2.0

PsychoPy 2025.1.1

12 May 13:42
3bc9aca

Choose a tag to compare

What's Changed

Bugs Fixed

  • Respect existing opacity when setting a color by @TEParsons in #7200
  • Fixed missing references to GazePoint sample event class by @mdcutone in #7228
  • Fixed moviepy import for window frame capture by @sh4r11f in #7218

Other Changes

New Contributors

Full Changelog: 2025.1.0...2025.1.1