Releases: psychopy/psychopy
PsychoPy 2024.1.0
Highlights
-
Counterbalance Routine: Standalone Routine to handle counterbalancing between participants, using the "shelf" to maintain records inbetween
-
Piloting Mode: Run experiments in "piloting" mode - adjusts settings to avoid common pitfalls while you're building (e.g. getting stuck in a full screen experiment), then switch to "running" when you're ready to start gathering data
-
Improved UI: Toolbars across the app have a clearer layout for buttons and a more intuitive interface for Pavlovia. Runner especially has had a visual overhaul, with a lot more space for reading stdout/alerts and a new output specifically for Pavlovia sync messages.
-
Fixes to Eye tracker plugins: Several eye trackers had not been working since being moved out to plugins and these should all now be back in operation
Translation works
- Continued translation into Simplified Chinese (and now Traditional Chinese) and beginnings of translations into Spanish, Hebrew: #5891 #5892 #5893 #5894 #5895 #5897 #5904 #5912 #5915 #5917 #5923 #5903 #5932 #5925
New features and enhancements
- Added plugin support for standalone plugins by @mdcutone in #5866
- Button Box Component: Component for using button boxes, which will always have the same methods and properties but by installing plugins you can add functionality for different devices
- Allow speech-to-text engine configuration from Builder by @mdcutone in #5905
- Replace toolbars with a "Ribbon" by @TEParsons in #5920
- Method for processing device info on Windows by @TEParsons in #5940
- Added tools for creating and managing hardware interfaces by @mdcutone in #5950
- Allow expInfo fields to be ordered, required, hidden and deprioritised using a new name syntax by @TEParsons in #5949
- Added Counterbalance Routine (and Python implementation of Shelf) by @TEParsons in #5967
- Add component for Button Box, with plugin-able backends by @TEParsons in #6006
- Option in Builder to skip/customise frame rate check by @TEParsons in #6049
- Option in Builder to specify globalClock format by @TEParsons in #6048
- Added method to Window to get value of specific pixels by @mdcutone in #6054
- Added piloting mode by @TEParsons in #6066
- Add param to enable "rush" mode by @TEParsons in #6279
- Speed up plugin dialog by @mdcutone in #5796
- Better handling when opening e.g. png files in Coder by @TEParsons in #5788
- Speed up app by using faster string tools for labels and methods by @TEParsons in #5826
- Improved plugin installation method by @mdcutone in #5872
- Allow prefs dialog menu to be resized by @TEParsons in #5869
- Add method to manually create a keypress, photodiode response, etc. by @TEParsons in #6022
- Add option to ignore keypresses outside of PsychoPy window by @TEParsons in #6039
- Allow Sound to specify a Speaker rather than using general system audio by @TEParsons in #6079
- Add method to wait for responses to SerialDevice by @TEParsons in #6092
- Include link to project in "Successful sync" message by @TEParsons in #6171
- Silence "Unrecognised Parameter" warnings if params came from a plugin by @TEParsons in #6179
- Speed up experiment loading by @TEParsons in #6180
- Catch fails in Packages dialog by @TEParsons in #6193
- Hide components/routines from future versions by @TEParsons in #6200
- More intuitive label on Pavlovia project info update button by @TEParsons in #6217
- Added menu item in Builder to reveal current folder by @TEParsons in #6218
- Install packages in editable mode via a pyproject.toml file by @TEParsons in #6228
- Improvements to Code component UI behaviour by @TEParsons in #6265
- Open news from menu by @peircej in #6205
- Make expInfo dialog always on top by @TEParsons in #6301
Bug fixes
- Fix matrix questions Survey Routine by @TEParsons in #5797
- Fix crash which happened if wx wasn't installed by @peircej in #5832
- Make sure icons & labels in preferences dialog are always visible by @TEParsons in #5868
- Handle when Component has no start time in JS by @TEParsons in #5864
- Static component was preventing Movie from starting by @TEParsons in #5928
- Change default logging level to warning by @suelynnmah in #5941
- Let experiments run without git installed by @TEParsons in #5939
- Fix bug whereby Brush wouldn't pick up on mouse clicks by @TEParsons in #6056
- Fix inconsistent data outside trial loop by @monique2208 in #6004
- Fix shape setting on Polygon-derived components (e.g. ROI) by @TEParsons in #5971
- Remove darc toolbox demos (maintainer no longer supporting package) by @RebeccaHirst in #6094
- Fixed error when
audioLib
isNone
by @mdcutone in #6103 - Handle unconventional launch methods (e.g. launching from command line with unrecognised args) by @peircej in #6118
- Fixed error with resizing "sash" in Preferences dialogby @mdcutone in #6146
- If psychtoolbox can't detect devices, log warning rather than crashing by @TEParsons in #6150
- Fixed error when using Save in Coder when there is no file open by @nvanhaute in #6158
- Fixed "missing reference" error with setting Sound device by @mdcutone in #6122
- Fix _set function for NoiseStim to handle input length by @simonfei123 in #6136
- Draw expected duration from Routine Settings in Builder by @TEParsons in #6190
- Fix error when loading window whose size is negative by @mdcutone in #6192
- Stop Builder from assuming the current folder is .../psychopy/app whenever filename is "untitled.psyexp" by @TEParsons in #6198
- Catch error when package info is missing by @mdcutone in #6202
- Experiments weren't working online if experiment name differed from filename by @TEParsons in #6221
- Fixed iohub eyetracker calibration (keyboard was losing input) by @mdcutone in #6226
- Handle when Static component has no start time by @TEParsons in #6248
- Don't scroll to top after opening a Builder component category by @TEParsons in #6251
- Fixed Mouse.visible attribute not applying requested state by @mdcutone in #6254
- Fixed freeze when running eyetracker validation by @mdcutone in #6264
- Fix error when cancelling a commit by @TEParsons in #6271
- Special code for when Slider is "radio" was missed in JS code by @TEParsons in #6272
- Fix "iCCP profiles" error with classic icons by @TEParsons in #6276
- Fix wrong setter name in Textbox/TextStim JS code by @TEParsons in #6277
- New Pavlovia projects were being created empty until first commit by @TEParsons in #6273
- Fix UI inconsistencies on Ubuntu by @TEParsons in #6242
- Fix code for sound component stop values by @zuazo in #6300
- Fixed selecting audio device in builder and coder by @zuazo in #6299
- Fix bug where local PsychoJS server kept running after quitting by @TEParsons in #6323
Documentation and testing improvements by...
- @alexander-pastukhov
- @peircej
- @suelynnmah
- @patrickabolger
- @richardnaar
- @JensBoelte
- @d-scanzi
- @psych575
- @shun2wang
- @Solveig-Castelli
- @carosamu
- @Ahmad-Abudoush
- @RebeccaHirst
- @ice-yu
- @domstoppable
- @kimDundas
- @afuetterer
- @TEParsons
New contributors
- @mscheltienne made their first contribution in #5889
- @JensBoelte made their first contribution in #5956
- @d-scanzi made their first contribution in #5952
- @kshtjkumar made their first contribution in #5955
- @Solveig-Castelli made their first contribution in #5961
- @carosamu made their first contribution in #5972
- @monique2208 made their first contribution in #6004
- @afuetterer made their first contribution in #6110
- @bartuatabek made their first contribution in #5942
- @FS94 made their first contribution in #6121
- @simonfei123 made their first contribution in #6136
- @tomdstone made their first contribution in #6261
- @zuazo made their first contribution in #6299
Full Changelog: 2023.2.3...2024.1.0
2023.2.3
Key fixes (from 2023.2.2)
- Silenced warning about numpy version number in Windows Standalone
- Fixed issue with "cannot import Never from typing_extensions" in Windows standalone
- Fixed error detecting eyetracker config files by @TEParsons in #5883 #5886
- Fixed eyetracker calibration routine freezing by @mdcutone in #5901
- Fixed support for updated Pupil Labs plugin w/ support for Neon by @domstoppable in #5887
- Fixed useVersion for JS - needed to create a _legacy.js file by @TEParsons in #5918
- Fixed SerialOut parity should be N not None by @TEParsons in #5907
- Fixed bug whereby Textbox's scrolling Aperture was applied to all stim by @TEParsons in #5934
Translation works
- Continued translation into Simplified Chinese (and now Traditional Chinese) and beginnings of translations into Spanish, Hebrew: #5891 #5892 #5893 #5894 #5895 #5897 #5904 #5912 #5915 #5917 #5923 #5903 #5932 #5925
New Contributors
- @meltemkaraca made their first contribution in #5891
- @SarvCh made their first contribution in #5893
- @ymhuang1005 made their first contribution in #5894
- @ice-yu made their first contribution in #5895
- @domstoppable made their first contribution in #5887
- @jingrun213 made their first contribution in #5897
- @psych575 made their first contribution in #5912
Full Changelog: 2023.2.2...2023.2.3
PsychoPy 2023.2.2
What's Changed
- Fixed ioHub keyboard timing (was using incorrect timestamp offset) by @TEParsons in #5807
- Fixed locating config files for ioHub extensions which prevented them from loading by @mdcutone in #5821
- Fixed bug whereby iohub couldn't find plugin backends on Mac by @TEParsons in #5824
- Better handing of experiments with Components that are now only in plugins by @TEParsons in #5834 #5831 #5833
- Fixed "logFile does not exist" error when "Save log file" is False by @TEParsons in #5836
- Fixed matrix question breaking apart code in Survey Routine by @TEParsons in #5840
- Allow expInfo to use values from Code components without overriding them by @TEParsons in #5837
- Fixed error in Form when using a radio ctrl by @TEParsons in #5843
- Polygon broken in JavaScript code from Builder by @TEParsons in #5844
- Ignore spaces when getting variables from name by @TEParsons in #5841
- "tThisFlip not defined" error when using Routine stop time online by @TEParsons in #5849
- "eyetracker is not defined" error on experiment quit by @TEParsons in #5850
- Fixed incorrect formatting in
AudioDeviceInfo
__repr__
by @mdcutone in #5851 - Fixed message order in Plugins dialog output by @TEParsons in #5865
- Update path of README dialog on "save as" by @TEParsons in #5863
- Fixed sounds restarting at the end of a Routine where they had perviously stopped by @peircej in #5874
Various documentation updates:
- Progress bar API and documentation by @suelynnmah in #5822
- Bart Builder demo fix by @suelynnmah in #5823
- psychophysicsStaircase demo fix by @suelynnmah in #5829
- Fix colors demo by @TEParsons in #5838
- Sternberg Builder demo - checked save log file to remove logFile error by @suelynnmah in #5845
2023.2.1
On top of the new features in 2023.2 series
Bugs Fixed
- Eyetracker plugins were not being detected by Builder by @peircej in #5808
- Fix device selection for Microphone component by @mdcutone in #5811
- ioHub reporting negative response times by @TEParsons in #5807
- Add attributeSetter / set functions for borderWidth by @TEParsons in #5779
- Option for hiding splash screen available in Preferences by @TEParsons in #5776
endExpNow
was only defined if Escape was enabled by @TEParsons in #5780- Polygon JS from Builder failing to initialise code by @TEParsons in #5783
- Copied Routines were getting two Routine Settings components by @TEParsons in #5792
- Fix unresponsive scrolling in Routine canvas by @TEParsons in #5795
- update Japanese translation by @hsogo in #5789
- If rewinding Sound (seek to before end) then mark as not finished by @TEParsons in #5781
- Fixed _legacy-legacy-browser.js is not a file by @TEParsons in #5799
- Coder was making an error when opening a new file by @TEParsons in #5801
- Conditions file was being cleared when loop type is "interleaved staircase" by @TEParsons in #5803
- Add JS code to set window background image on init by @TEParsons in #5806
- MacOS iohub "TypeError: startswith first arg must be bytes..." by @peircej in #5812
- New projects sometimes wouldn't have a local root by @TEParsons in #5814
- Handle when Static Component tries to set param of deleted/disabled Component by @TEParsons in #5815
- Python 3.10 version bump had broken GIF avatars by @TEParsons in #5791
Full Changelog: 2023.2.0...2023.2.1
PsychoPy 2023.2.0
Highlights
- Routine settings: Routines now have parameters of their own, giving control over their max duration, skipping the Routine altogether, or changing the way the window looks just for that Routine.
- Sort by priority: Columns in the data file can now be given a "priority" value, with the option to sort by priority instead of chronologically.
- Whisper transcription PLUGIN for Microphone: Using the OpenAI backend, Microphone transcriptions can be done quicker and more accurately, and include timing info for each word.
- Progress bar component: A visual component to show progress along an axis.
- Builder search dialog: Search for values across your whole experiment, then jump to the specific Routine/Component where it's present. Makes debugging much easier.
- Most stimuli now support a
draggable
attribute. If set todraggable=True
then that stimulus should check/update position on each frame usingstim.doDragging()
Behaviour changes
- Eyetrackers (Tobii, SRR Eyelink, Gazepoint, PupilLabs) are now plugins rather than built-in, in keeping with the drive to cut down the dependencies of core PsychoPy
New features and enhancements
- PsychoJS: Mobile-friendly viewport settings. by @lightest in #5380
- Allow experiment to run with different clocks (e.g. wall clock time instead of starting at t=0) by @TEParsons in #5621
- PsychoJS ShapeStim from Builder now supports custom vertices by @TEParsons in #5522
- Numerous improvements to plugins system and dialog
- Added
abortCurrentTrial
(Python only for now) method toTrialHandler2
andMultiStairHandler
by @mdcutone in #5423 - Better performance and fixes to FFPyPlayer movie engine
- Added
letterSpacing
attribute to Textbox by @TEParsons in #5487 - New
Session
class to run multiple experiments - create your stimulus window once and run multiple experiments in it, with the ability to pause/resume/stop the experiment. (Python only for now) Session can be controlled overwebsockets
using the Liaison server - Full support for Python 3.10, wxPython 4.2, and PyQt6
- Preserve tab order for Routines when saving/loading an experiment by @TEParsons in #5517
- Added audio settings to Camera component by @mdcutone in #5681
- Improved streaming of camera to disk by @mdcutone in #5551
- Window now explains it is performing timing test by @mdcutone in #5511
- Keyboard Components from Builder will store duration if available (if release has already occurred) by @TEParsons in #5569
- Show status text for objects in Flow panel by @TEParsons in #5443
- Make psychopy.Window title (and icon in pyglet) settable by @TEParsons in #5540
- UI enhancements to Coder and Runner by @TEParsons in #5539
- Multihead support for X11/Linux by @mdcutone in #5520
- Plugins Dialog now checks for version compatibility with PsychoPy by @TEParsons in #5649
- Install plugins to subdirectories by @mdcutone in #5398
- Make Save & Edit/View buttons on README window more explicit by @TEParsons in #5523
- New option to abbreviate long component names in Preferences, fixes #5574 by @TEParsons in #5586
- Highlight selected Routine in Flow panel by @TEParsons in #5588
- Better Builder visualisation very large experiments by @TEParsons in #5618
- Lock Flow panel buttons to the left when scrolling by @TEParsons in #5620
- ExperimentHandler.addData() now has optional
row
argument to specify previous entry by @TEParsons in #5652 - Fixed useVersion warning untracked working tree files would be overwritten by @peircej in #5670
- Add param to control whether movies/sounds end when the Routine does, by @TEParsons in #5415
- Add "transparent" as named color by @TEParsons in #5689
- Radio button styling was not work in Slider component in 2023.1, fixes #5661 (dev) by @TEParsons in #5691
- Allow expInfo fields to be marked as required (*) by @ainazay in #5543
- Fix VlcMovieStim by @marcpabst in #5702
- Added data file separator to expInfo by @EitanHemed in #5607
- Minor Textbox bugfixes by @ollie-d in #5723
- Extended autotranslate functions supported by py2js by @roelofsaj in #5713
- Submitting GitHub issues now supports templates by @shun2wang in #5732
- Numerous Documentation improvements by @fboers @kimDundas @patrickabolger @EitanHemed @larsoner @pmolfese
Bug fixes
- Fixed missing comma in Brush component code by @TEParsons in #5564
- Mouse position incorrect when desktop scaling not 100% on Windows by @mdcutone in #5758
- Fixed
AttributeError: 'SoundPTB' object has no attribute 'isFinished'
by @mdcutone in #5541 - Better handling of missing audio libraries - allow the app to load always and fallback to PsychToolBox if possible
- Better handling of Mouse.getPos() when no windows open by @peircej in #5763
- Param updates code for Sound in JS was using Python syntax by @TEParsons in #5762
- More informative error when useVersion fails to write script by @TEParsons in #5761
- saveAsWideText was using deprecated DataFrame.append function by @TEParsons in #5507
- Polygon/ROI vertices caused error if trying to set each frame by @TEParsons in #5686
- Don't crash if user attempts to initialise ioHub more than once by @TEParsons in #5533
- Added log file entry for Keyboard.clearEvents() by @peircej in #5558
- Fixed missing movie file in MoviePause.py demo by @EitanHemed in #5583
- Coder source tree thought any variable name beginning with
def
was a function def by @TEParsons in #5581 - README filename wasn't being updated for new frames by @TEParsons in #5593
- Fix Markdown parsing on README files by @TEParsons in #5572
- Ignore Escape in Keyboard component if needed to end experiment by @TEParsons in #5598
- Joystick component - SyntaxError in generated code by @EitanHemed in #5601
- Error
got an unexpected keyword argument "reset"
when trying to pause using PTB sounds by @peircej in #5619 - PsychoPJS: Fix issue with first frame of image being shown as default.png in JS by @TEParsons in #5716
- Add
self
to list of disallowed Component names by @TEParsons in #5742 - Split compound Survey answers into individual columns by @TEParsons in #5734
- Fixed audio file not resetting during (Python) experiment by @mdcutone in #5712
- If trying to load previously open file that is corrupted, do at least open the app (with an empty window) by @TEParsons in #5696
- Better catching of name errors in conditions file by @TEParsons in #5654
New Contributors
- @ranibaron made their first contribution in #5394
- @patrickabolger made their first contribution in #5414
- @fboers made their first contribution in #5482
- @gtosh4 made their first contribution in #5609
- @ainazay made their first contribution in #5543
- @marcpabst made their first contribution in #5702
Full Changelog: 2023.1.2...2023.2.0rc7
2023.1.3
Bug fixes
- Added log file entry for Keyboard.clearEvents() by @peircej in #5558
- Syntax error (missing comma) in Brush Component code by @TEParsons in #5564
- Store duration for Keyboard Components when available (if
waitForRelease=True
) by @TEParsons in #5569 - AudioClip recordings with PTB backend fail to honor sample rate @mdcutone in #5530
- Removed redundant "MainLoop" call to remove error during shutdown of app by @mdcutone in #5538
- Spaces in executable path were breaking PIP terminal in Windows by @TEParsons in #5579
- Save prefs just once after closing all frames by @TEParsons in #5510
- JS code wasn't distinguishing between regular polygon & custom vertices in ShapeStim by @TEParsons in #5522
- NameError: name 'environmenttools' is not defined #5563
Full Changelog: 2023.1.2...2023.1.3
PsychoPy 2023.1.2
On top of the new features added in 2023.1 series
Fixes
- Fix crash following gamma semi-auto correction (when laying out dialog box) dialog box by @TEParsons in #5452
- Crashing due to outdated
core.getFromNames
in Mouse by @TEParsons in #5474 - Setting Image as a numpy array caused a TypeError by @TEParsons in #5453
- Handle invalid paths when stringifying params by @TEParsons in #5465
- Swap all references to Panorama.altitude with Panorama.elevation by @TEParsons in #5471
- Fix typo in Survey routine -
stauts
rather thanstatus
by @TEParsons in #5468 - If user requests showing README and there isn't one then show a blank file @TEParsons in #5470
- Fix typos in high contrast theme by @TEParsons in #5504
- Sound files online were playing forever if duration set to <0.5s by @TEParsons in #5466
- Let Builder treat Sound.isPlaying and Sound.status==STARTED as synonymous by @TEParsons in #5428
- Correctly ignore blank columns by @wader in #5406
- Viewport was left as None when checkTiming was unticked by @TEParsons in #5451
- Better handling when a Pavlovia project / plugin avatars in the app @TEParsons in #5458 #5460 #5469
Documentation fixes by
- @roelofsaj in #5477 #5483 #5484
- @ChenBri in #5478 #5480
- @ChristopheBossens in #5481
- @suelynnmah in #5444
New Contributors
- @roelofsaj made their first contribution in #5477
- @ChenBri made their first contribution in #5478
- @ChristopheBossens made their first contribution in #5481
- @wader made their first contribution in #5406
Full Changelog: 2023.1.1...2023.1.2
PsychoPy 2023.1.1
On top of the new features added in 2023.1 series
Fixes
- If attempting to open readme dlg and there's no readme, make one by @TEParsons in #5365
- Fixed error with images being set-every-repeat (default.png not defined) by @TEParsons in #5374
- Make sure
default.*
stimuli are included in online resources by @TEParsons in #5384 - Better error handling for unknown PsychoPy version in
useVersion
by @TEParsons in #5372 - Nested Routines raised an error during generation of script by @TEParsons in #5377
- README dialog was created twice by @TEParsons in #5383
- Movie Opacity in local studies was not being honored by @TEParsons in #5385
- fix wx version comparison bug, allowing wider range of wxPython versions by @waltervanheuven in #5400
- fixed encoding error preventing loading of csv files from MacOS on Win32 by @richardnaar in #5396
- Various plugin dlg improvements from @mdcutone in #5410
- Update Japanese translation by @hsogo in #5387
- Fixed
PanoramicImageStim
to work when Window FBO=True by @mdcutone in #5416 - If setting size with
ImageStim.setSize()
, rather than during init, it only lasted for current image by @TEParsons in #5422 - Movie in JS was getting undefined error if updates were "set every repeat" by @TEParsons in #5421
- Don't reset survey clock each routine by @TEParsons in #5433
- Textbox
lineSpacing
param is now being applied to JS boilerplate by @TEParsons in #5420 - Sort plugin package versions in descending order by @TEParsons in #5441
- Better handling of plugin startup errors by @mdcutone in #5436
- Catch AttributeErrors on Pavlovia login rather than trying to pre-empt them, fixes #5382 by @TEParsons in #5450
- If experiment is ended by esc, close eyetracker by @TEParsons in #5448
Improvements
- Added excel templates for MultiStair, QUEST and QUESTPLUS by @TEParsons (templates by @kimDundas) in #5361
- Save README file on save not on dlg init by @TEParsons in #5379
- Silence FutureWarning from numpy about comparing array to string by @TEParsons in #5376
- Panorama vertical pos should be "elevation" not "altitude" in #5419
- Coder SourceTree wasn't showing async functions by @TEParsons in #5435
New Contributors
- @richardnaar made their first contribution in #5396
Full Changelog: 2023.1.0...2023.1.1
PsychoPy 2023.1.0
Release series 2023.1. Highlights
- Pavlovia Surveys: can now be integrated into PsychoPy online studies. You still create your survey in the Pavlovia Survey Creator (on you Pavlovia Dashboard) but you can then incorporate them as either a link or an embedded json file into your PsychoJS study. This only works for online studies at present
- Panorama Stimuli: now supported in PsychoPy (lab-based) studies. You can add a photo-sphere as a stimulus (e.g. create them in Street View app on Android phones) and then insert them into Builder and explore
- Plugins and Packages: You can now add packages to your PsychoPy installation with a GUI that installs new packages to your user folder (without needing admin rights). Some of PsychoPy's existing functionality has also moved out to "Plugins"
- For users, plugins mean more control over what functionality you want PsychoPy to support
- For developers, plugins mean keeping more independence over your code and ownership
- Speech Point: on TextBox allows a tail to be added giving the impression of a cartoon speech bubble (lab-based only, currently)
- MovieStim: several performance improvements and fixes
PsychoPy 2022.2.5
On top of the new features of the 2022.2.x series this release fixes:
- Several fixes to syncing of Pavlovia projects
(e.g. when project has been deleted/recreated online or when files have been
copied over from another machine) #5117 #5221 - Shape Component in Builder can now update vertices on each frame/repeat commit:e493ee2ca
- Participant name missing from filename if given in URL query #5171
- Eyetracker ROI stop code should only be written if a value is given to stop on #5156
- Don't crash if Microphone.stop() called repeatedly #5121
- TypeError in Window.resetViewport() #5135
- PupilLabs lib was not being found due to missing
__init__
#5180 - QUESTplus had ben removed from list of loop types commit:2da0cfa0a
- Sound.pause() was reseting to start of track commit:a161e135a