Skip to content

Releases: psychopy/psychopy

PsychoPy 2024.1.0

25 Mar 20:07
5ac0e82
Compare
Choose a tag to compare

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

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 is None 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...

New contributors

Full Changelog: 2023.2.3...2024.1.0

2023.2.3

09 Oct 16:00
34b4e66
Compare
Choose a tag to compare

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

New Contributors

Full Changelog: 2023.2.2...2023.2.3

PsychoPy 2023.2.2

05 Sep 09:01
b2d54f8
Compare
Choose a tag to compare

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:

2023.2.1

18 Aug 09:08
7bf9937
Compare
Choose a tag to compare

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

28 Jul 12:56
a23ba5f
Compare
Choose a tag to compare

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 to draggable=True then that stimulus should check/update position on each frame using stim.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 to TrialHandler2 and MultiStairHandler 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 over websockets 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

Full Changelog: 2023.1.2...2023.2.0rc7

2023.1.3

06 Jun 15:44
Compare
Choose a tag to compare

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

12 Apr 15:16
Compare
Choose a tag to compare

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 than status 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

New Contributors

Full Changelog: 2023.1.1...2023.1.2

PsychoPy 2023.1.1

16 Mar 08:34
Compare
Choose a tag to compare

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

Full Changelog: 2023.1.0...2023.1.1

PsychoPy 2023.1.0

06 Feb 11:38
Compare
Choose a tag to compare

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

23 Dec 13:35
Compare
Choose a tag to compare

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