PsychoPy uses major.minor.patch version numbers:
All changes to major.minor numbers indicate that changes are expected to change the behavior of PsychoPy experiments
Changes to the patch version number are relativel minor bug fixes and we hope they do not change behavior
We strongly recommend that, once your experiment is finished and is being run “for real”, that you apply the useVersion setting so that your study will always try to run on the same PsychoPy version even where a different version is installed on the computer. That setting often even allows PsychoPy to run experiments from versions that have not yet been installed! If the dependencies haven’t changed it will run.
Although there are many changes and therefore potential for some slight changes in behaviour we have focussed more this release on just making existing functionality smoother rather than adding new big fetaures.
New and Improved 🎉:
Added “force nonslip” parameter to Routine Settings so that you can now use non-slip timing for a Routine using a variable by @TEParsons in #6603
Fix opacity not applying properly to border colors by @TEParsons in #6704
User can set the online end message from Builder rather than relying on JS default by @TEParsons in #6258
Performance improvements for MovieStim (parituclarly noticeable for larger videos) by @aforren1 in #6449
Added functions to MicrophoneDevice to continuously monitor volume by @TEParsons in #6444
Added function to check whether a speaker is working by @TEParsons in #6446
Builder can now set logging level for app console, independently of log file by @TEParsons in #6510
Added Keyboard.getState() to get current state of a key by @TEParsons in #6537
Added text-to-speech synthesis by @mdcutone in #6588
Eyetracking: Various fixes to plugin- and eyetracker-detection by @TEParsons @mdcutone @EyeLogicSolutions @mh105 @KirstenWilliams
Eyetracking: New support for EyeLogic Solutions eyetrackers with plugin (alongside existing Tobii, SRR, Pupil Labs, and Gazepoint support)
Eyetracking: Fixes and more flexible settings for calibration routines @KirstenWilliams @mdcutone @EyeLogicSolutions @TEParsons @RebeccaHirst
Eyetracking: can now save dwell times from ROI component by @RebeccaHirst in #6500
If storing all valid mouse clicks, still show invalid clicks explicitly in the list as None (or Null online) e.g. [None, “foil”, “target”] for 3 clicks ending in target by @TEParsons in #6516 #6548
Some loops/form/counterbalance were not fetching the correct xlsx templates by @TEParsons in #6514
Implement orientation parameter for TextBox2 by @TEParsons in #6513
New changelog dialog on app start by @TEParsons in #6445
Improved error message for iohub connection error (issue #1226) by @MarkellaEgglezou in #6354
Visual stimuli now draggable attribute accessible from Builder by @TEParsons in #6337
Improved TrialHandler2 for more flexible adding/cancelling and retrieving info about trials @TEParsons in #6425 #6408 #6590
Using PhotoDiodes Components in experiments (e.g. in BBTK T-pad) #6432 #6442
Provide PsychoPy experiment filename to the ioHub server by @mh105 in #6555
Allow experiment to pause on the current frame by @TEParsons in #6584
Allow plugins to be uninstalled via the manager by @mdcutone in #6587
Store/update Routine parameters live in an object, rather than hardcoding them to the experiment file by @TEParsons in #6597
Make save speech onset/offset only available to supporting transcribers by @kimDundas in #6672
🐛 Bug Fixes:
Fixed error sampling microphone volume even when buffer is full by @TEParsons in #6488
Fixed plugins page sometimes failed to load cached plugins file due to encoding error by @peircej in #6428
Fixed the launch of PsychoPy App on conda envs without pythonw by @mh105 in #6436
Allowed Static Component to update params by @TEParsons in #6462
Fixed TextStim letter height wasn’t settable each frame/Routine in JS by @TEParsons in #6511
Fixed check for pythonw executable on macOS in psychopyApp.py by @mh105 in #6521
Fixed .js file not being found when using “Use version” (removed _legacy from suffix) by @RebeccaHirst in #6515
Hide dollar sign on start/stop controls when one is hidden by @TEParsons in #6528
Removed unused %s string format in MenuFrame to avoid unrecognized accel key by @mh105 in #6523
Remove incorrect code on removing eyetracker generated by builder by @mh105 in #6526
Fixed import backend_pysound after module name change by @mh105 in #6524
Caught AttributeError for sound.getDevices() when opening PreferenceDlg by @mh105 in #6522
Unregister event monitors during iohub calibration by @mh105 in #6466
Fixed plugin discovery algorithm not finding user package entry points correctly by @mdcutone in #6539
Allow enough time for all ioHub device._close() to finish by @mh105 in #6540
Use default speaker device if index is default by @mh105 in #6538
Fixed eyetracker record stop/start by @TEParsons in #6545
Fixed duplicate dependency install on MacOS and package installation in virtual environments by @mdcutone in #6529
Fixed size and pos of Line by @TEParsons in #6543 and @mh105 in #6525
Fied bug setting Sound in static period online by @TEParsons in #6546
Fixed ioHub finding eyetracker configuration files by @TEParsons in #6547
Fixed the issue that speaker index could jump over integers by @mh105 in #6559
Fixed crash when mono is specified if the microphone device expects stereo as default by @mdcutone in #6564
Fixed csv conditions file loading by @TEParsons in #6552
Get correct speech onset/offset times and write them to data file by @mdcutone in #6566
Fixed dict keys for setting sample filter levels by @mh105 in #6554
Add default duration to eyetracker record component by @RebeccaHirst in #6599
Remove second whisper option from mic transcriber backend drop down by @RebeccaHirst in #6604
Fixed remove the use of currentlyRecording in EyetrackerControl by @mh105 in #6567
Fixed syntax for mic max recording parameter by @RebeccaHirst in #6598
Decouple setting status from triggering playback/clock resets/etc. by @TEParsons in #6562
Fixed starting and stopping times for EyetrackerRecordComponent by @mh105 in #6607
Don’t change self.param in getStartAndDuration of et component by @mh105 in #6615
Typo in JS boilerplate (True rather than true) by @wakecarter in #6625
Builder: Ensure frame rate is stored. by @aforren1 in #6619
Allow Sound to stop on a condition rather than just time by @TEParsons in #6631
Fix obj.contains is not a function error in JS by @TEParsons in #6635
Enable correct behavior of entry-points to load eyetrackers by @mh105 in #6610
Movie component Volume inputType should be single instead of float by @mh105 in #6643
Use inspect.getfile to check path of plugin entry points by @mh105 in #6660
UI wasn’t fully refreshing after changing theme by @TEParsons in #6673
Coder GUI fixes by @aforren1 in #6678
Allow keyboard allowedKeys to be set as an int by @TEParsons in #6676
Enable mouse clickable from variable when running online by @RebeccaHirst in #6668
Fixed crash when clearEvents(device_label=None) by @mdcutone in #6669
Fix JS translation of .pop() when there’s no index by @TEParsons in #6651
Allow polygon outline opacity to be persistent across frames by @mdcutone in #6657
Sound Component code was using the wrong set function name in JS by @TEParsons in #6649
Fixed files being marked as modified as soon as opened by @TEParsons in #6679
Re-add distro as a runtime dependency for linux & remove deprecated function. by @aforren1 in #6686
Save mouse.corr for online studies by @RebeccaHirst in #6701
Creating project from ribbon raised error by @TEParsons in #6706
Plugin Components weren’t recognised if experiment loaded with app by @TEParsons in #6707
Original types for “UnknownPluginComponent”s were being lost after loading and saving again by @TEParsons in #6708
Start/Stop controls had lost their tooltip by @TEParsons in #6711
Update flow button style when switching theme by @TEParsons in #6712
Conditions file wasn’t updated when chosen from file browser for multistair loops by @TEParsons in #6714
Save to the color cache when rendering. by @aforren1 in #6720
BF/RF: Code to load Builder-relevant entry points was broken and obsolete by @TEParsons in #6717
maxDurationReached in Routine Settings False should be false online by @wakecarter in #6724
fix trial data writing when there are multiple key presses including None by @mh105 in #6718
Fixed units for mouse gaze calibration targets (pix -> height) by @KirstenWilliams in #6443
Standardise tDown attribute between ioHub and ptb Keyboard backends (follow ioHub behaviour) by @TEParsons in #6417
Improved audio resampling method by @mdcutone in #6605
Change iohub port to avoid conflicts with Whisper transcription by @mdcutone in #6661
Fixed ‘best match’ mic settings not being used to init recording buffer by @mdcutone in #6670
Prompt user to reconsider if they try to close plugin window mid-install by @TEParsons in #6705
## 📓 Docs & Demos * Create hdf5_2_csv by @KirstenWilliams in #6508 * make a note that writeRoutineEndCode does not save onset/offset times by @mh105 in #6571 * Add demo for Button Box Component by @TEParsons in #6716
## Translations * Arabic: new by @Ahmad-Abudoush @Ahmad-Ramy in #6634 #6638 #6636 #6674 and with DeepL by @peircej in #6641 * Portugese: new by @joana-quarenta in #6662 #6665 #6690 * Japanese: updates by @hsogo in #6654 * Spanish: es-co, es_es and es_us now completed by @carosamu in #6541 #6577
## New Contributors * @MarkellaEgglezou made their first contribution in #6354 * @xjlc made their first contribution in #6570 * @EyeLogicSolutions made their first contribution in #6586 * @Ahmad-Ramy made their first contribution in #6636 * @mabuhayeh made their first contribution in #6638 * @joana-quarenta made their first contribution in #6662
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.1.5…2024.2.0
🐛 Bug Fixes:
TrialHandler2 was starting thisRepsN at 1 rather than 0 by @TEParsons in https://github.com/psychopy/psychopy/pull/6747
The py3.10 standalone app failed to launch on macos-arm chips (due to broken tables release 0.9.2)
Updated translations for Spanish variants by @carosamu in #6763 #6737
Fixed a typo in Trials routine template .psyexp file by @mh105 in https://github.com/psychopy/psychopy/pull/6738
Set MovieComponent.status to FINISHED when playback finishes by @mh105 in https://github.com/psychopy/psychopy/pull/6740
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.2.0…2024.2.1
🐛 Bug Fixes:
Fix ribbon buttons showing label on Mac by @TEParsons in #6767
Builder files were marked as modified as soon as opened by @TEParsons in #6778
Builder getting start/stop times when using non-slip timing by @mh105 in #6739
Restore backwards-compatability to psychopy.gui.dlg by @TEParsons in #6792
Routines were still writing their end experiment code in JS even when removed from the flow by @TEParsons in #6780
Fix whisper transcriber sometimes being initialised twice (and breaking as a result) by @TEParsons in #6796
DlgFromDict was erroneously adding keys when given “order” or “fixed” by @TEParsons in #6818
Make output of Dlg.show backwards compatible with older versions by @TEParsons in #6809 #6792
pyglet controls of macOS NSWindow with multiple screens by @mh105 in #6799
Fixed detection of installed packages in standalone app for py3.10 by @mh105 in #6771
Smoother output from background jobs to stdout by @mh105 in #6833
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.2.1…2024.2.2
🐛 Bug Fixes:
Fixed machine-specific crashing of the app on launch for MacOS by building app bundle with setuptools==70.3.0 by @peircej in https://github.com/psychopy/psychopy/pull/6901
Fix routine clock resetting in JS by @TEParsons in https://github.com/psychopy/psychopy/pull/6861
Fix default audio device not being found by @TEParsons in https://github.com/psychopy/psychopy/pull/6863
Fix error writing Polygon initial colors in JS by @TEParsons in https://github.com/psychopy/psychopy/pull/6865
ensure window focus for the first win.flip() with pyglet backend on Windows OS by @mh105 in https://github.com/psychopy/psychopy/pull/6874 and https://github.com/psychopy/psychopy/pull/6876
fix startView across OS platforms that opens psychopyApp.py by @mh105 in https://github.com/psychopy/psychopy/pull/6869
if PsychoPy version includes “postN” then strip from PsychoJS version number by @peircej in https://github.com/psychopy/psychopy/pull/6873
Handle when record of last open app windows is an invalid value (e.g. from old version) by @TEParsons in https://github.com/psychopy/psychopy/pull/6885
suppress pip version check in package manager by @mh105 in https://github.com/psychopy/psychopy/pull/6868
Added beta sticker to Counterbalance Component icon by @TEParsons in https://github.com/psychopy/psychopy/pull/6890
Counterbalance Routine conditions file chooser wasn’t updating the value properly by @TEParsons in https://github.com/psychopy/psychopy/pull/6892
Silence unnecessary warning about unrecognised params by @TEParsons in https://github.com/psychopy/psychopy/pull/6896
moviepy and egi_pynetstation now included in standalone not as a plugin by @peircej in https://github.com/psychopy/psychopy/pull/6905
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.2.2…2024.2.3
🐛 Bug Fixes:
Recreate .js file on run when piloting in JS by @TEParsons in #6920
App failing to start on MacOS if all windows closed on last app close by @peircej in #6926
Fix nonslip timing issue in Builder-generated PsychoJS code by @TEParsons in #6921
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.2.3…2024.2.4
🐛 Bug Fixes:
ioHub process was not cleanly exiting and then causing a crash on subsequent attempts to run @mh105 and @mdcutone in #6949 and #6938
Sending experiment to Runner was sometimes (incorrectly) toggling pilot/run mode by @TEParsons in #6945
Arabic Translation_update by @Ahmad-Abudoush in #6959
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.2.4…2024.2.5
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
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 @alexander-pastukhov @peircej @suelynnmah @patrickabolger @richardnaar @JensBoelte @d-scanzi @psych575 @shun2wang @Solveig-Castelli @carosamu @Ahmad-Abudoush @RebeccaHirst @ice-yu @domstoppable @kimDundas @afuetterer @TEParsons
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
@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: https://github.com/psychopy/psychopy/compare/2023.2.3…2024.1.0
Bug fixes
Handle errors when loading list of plugins by @TEParsons in #6334
Counterbalance in online studies was still trying to confirm entries after finishing by @TEParsons in #6345
Make sure the drawn max time in Builder is never None by @TEParsons in #6347
Fixed translation issues by @hsogo in #6348
Fixed inability to load plugins list from local with non-utf-8 default encoding by @peircej in #6349
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.1.0…2024.1.1
Enhancements * Default TextStim font set to Arial (TextBox default was already Arial) by @wakecarter in #6378
Bug fixes
Keyboard clock wasn’t being reset properly, so .rt values were from exp start by @TEParsons in #6360
Safer (and faster) behaviour when copying a param, avoids “infinite recursion” (app hangs) by @TEParsons in #6362
Make line spacing specific to just one TextBox2 object by @Catherine9811 in #6356
Fixes to the Gazepoint eyetracker plugin by @mdcutone in #6365
Fixed error when camera tries to close when it’s already closed by @mdcutone in #6364
Fixed editable TextBox2 cursor location with line breaks by @Catherine9811 in #6358
Remove “constant” updates option from SoundComponent (as it wasn’t used) by @TEParsons in #6351
Python 3.8 was falsely marked as incompatible with 2024.1.x onwards in “use version” interface by @TEParsons in #6366
Form Component wasn’t finding the correct table template by @TEParsons in #6381
Remove blank rows from form template by @wakecarter in #6382
Error saving icons from plugin details by @TEParsons in #6368
Transparent colours online by @wakecarter in #6386
Button numclicks defined by timesOn.length by @wakecarter in #6385
Documentation and testing improvements by… @peircej @TEParsons @kimDundas @suelynnmah
**New contributors: **
@Catherine9811 made their first contribution in #6356
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.1.1…2024.1.2
Bug fixes
Bug fixes
ioHub keyboard was registering key releases before presses, so duration was always None. We now have a test in place that confirms keyboard RT timing using hardware which will be used on each new release going forwards. By @TEParsons in #6416
Fixed some translation issues by @hsogo in #6409
Fixed JSON encoding error when opening plugin dialog by @mdcutone in #6411
Documentation updates
updated screenshots by @charlottej3673 in #6392
Failing to find Eyetracker Components (Eyelink by @KirstenWilliams in #6406 and Gazepoint by @mdcutone in #6424 )
Installed plugins were not being found on Linux/MacOS by @mdcutone in #6441
Faster MovieStim rendering (don’t call play() when already playing) by @aforren1 in #6448
Fixed eyetracker calibration target units (height -> pix) by @peircej in #6451
KeyboardComponent allowed keys from spreadsheet caused namespace errors by @TEParsons in #6458
hide that visible mouse, please by @mh105 in #6465
Fix an issue with etRecord component for Stop Only (not stopping the eytracker) by @mh105 in #6463
Only change Mouse visibility if explicitly asked to by @TEParsons in #6467
Fix “Stop only” issue regardless of Component order by @TEParsons in #6468
Clear keys to initialize keyboard when starting a routine by @mh105 in #6471
Allow getKeys() to return the same key pressed multiple times by @mh105 in #6479
## Documentation fixes and updates
Arabic app translations by @Ahmad-Abudoush in #6476
Full Changelog: https://github.com/psychopy/psychopy/compare/2024.1.4…2024.1.5
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
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
Key fixes (from 2023.1.x series):
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:
Key fixes:
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 <expname>_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: https://github.com/psychopy/psychopy/compare/2023.2.0…2023.2.1
Key fixes:
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:
## 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: https://github.com/psychopy/psychopy/compare/2023.2.2…2023.2.3
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: further improvements to performance and fixes
On top of the [new features added in 2023.1 series](https://github.com/psychopy/psychopy/releases/tag/2023.1.0)
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
@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: https://github.com/psychopy/psychopy/compare/2023.1.1…2023.1.2
Fixed:
Better plugin handling:
Better handling of plugin dependencies (moved to sub-folders) #5398
More responsive plugins dialog (not waiting for all plugin info to populate) #5410
Live info updates as the plugin installs #5399
Sort package versions newest first commit:a4987c95f
Panorama stimulus no longer needs FBO=False on Window
MovieStim locally opacity was not being honored commit:094731084
MovieStim online crashed if using setEveryRepeat commit:ed484ba17
Close eyetracker connection if experiment ends early commit:f9b6f98e4
README dialog was created twice #5383
Online Experiments with image sitmuli crashing with unknown resource “default.png”
Nested loops were crashing
Fixed various failures to translate commit:804bfcde2 commit:b1b611ec1
Console gave encoding errors when opening MacOS csv files on Windows machines #5396
Highlights: - Online: Interface in Pavlovia for building and running online questionnaires! As this is built on top of the
open-source [SurveyJS](https://surveyjs.io/) package it offers a rich feature list right off the bat. The new Pavlovia Survey component you can insert a survey into your experiment just like you would a Form component.
Python: New Panorama component lets you view a Photo Sphere image as a 3d scene within Python experiments.
choice: Hides the Slider line and replaces the marker with a focus box which sits behind the labels.
dropdown: A drop-down menu, essentially a Button stimulus showing the current value which, on click, reveals a Slider with style set to choice.
checkbox / bool: A tick box for simple yes/no questions
Python: Textboxes now have the option to hide overflowing text and/or to show a vertical scrollbar.
Python: PsychoPy windows can now have a background image, settable in the Experiment Settings.
Online: PsychoJS end message now customisable via Experiment Settings.
App: Accessibility enhancements, making it easier to navigate menus and dialog boxes using just the keyboard.
Highlights:
BETA: Cameras can now be accessed during your experiments (in web-based and in local experiments) and allow
saving recordings to disk
showing the current input from the webcam (make the Camera the input to a regular ImageStim)
replaying a recording later in the experiment (use the Camera as input to a subsequent MovieStim)
all the above features are currently BETA
Python: New movie playing engine for higher performance playback in locally experiments (using FFPyPlayer)
Online: Introducing the “Shelf” for persistent storage on Pavlovia of variables accessible to a range of scopes (only the current participant, only the current project, any project in the lab etc.). This may sound like not a big deal but it opens options for the following:
multi-session studies: retrieve the participant threshold/progress form last session
interactive multi-player studies: store ‘messages’ for another user to receive
counterbalancing online: by tracking the number of participants that have been in each group
Online: Gratings and Gabors now supported online, straight from your Builder experiments
Online: gamma correction supported in the browser(!!) by setting Window.gamma property (currently requires a code snippet)
Local: Builder now has a Serial Port Component to make it easier to connect to hardware without needing Code Components
Compatibility changes:
App: Studies with Code Components that access routineTimer will need adapting because the non-slip Builder logic has changed this is now a regular (count-up) Clock instead of a CountdownTimer
Key Fixes:
Online: Button Component is now fully working, so you don’t need to create your own text boxes for this
Online: Routines used outside a loop now always advance the next row in the data file so that they can’t overwrite each others’ data
Python: The .stopped times should now be showing up correctly for all Components in the csv file (they were always correct in the log file)
Python: Better timing in non-slip Routines. Previously the non-slip timer corrected for overshoots but not undershoots. This is now fixed.
Python: 3D rendering should be working again.
Also:
Is trials property of loops (to control whether the data file advances) is now supported in online studies
Fixed:
App: bug on MacOS opening Builder that led to ‘PosixPath’ object has no attribute ‘is_relative_to’ when loading experiments
App: improved performance when the Shell has a large amount of text commit:f1e8d6bf7
App: fixed the use of tab traversal within Component dialogs on MacOS commit:a618c4cd7
Python: fixed setting the first position of markers on Sliders
Python: experiments using ioHub Keyboard backend were registering keypresses twice (once for down and again for up) #4990
Fixed:
Fixed:
Fixed:
Python: fix to occasional crashing of new FFPyPlayer moviestim caused by excessive logging in the underlying lib commit:47289f6ca
App: better handling of case where Experiment Settings may have syntax error commit:60cf0cea6
App: rare case where the $ could get ignored during dialog box validation commit:eb1897087
App: better handling of an (apparent) syntax error in user-supplied JS commit:992aaa423
App: transcription setting on Mic Component now False by default (because most people don’t have a Google API key set up) commit:2c8a27ed
Pkg: added missing Labjack lib to Windows Standalone distribution
Fixed:
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 resetting to start of track commit:a161e135a
Highlights:
Improved interface for searching, syncing and viewing Pavlovia projects from within the PsychoPy app
In online experiments you can now dynamically choose the resources your participant needs as the experiment progresses rather than downloading them all in the first dialog box
Can now insert new Routines from pre-packaged templates (such as Fixation, 2-alternative forced choice, feedback, etc)
QUEST handlers now available in PsychoJS including interleaved staircases
Most visual stimuli now have an “anchor” parameter to control how it’s laid out relative to its position, and you can now set the alignment of text within a Textbox (with a handy demo to illustrate the difference between anchor and alignment!)
Added support for Pupil labs eye trackers (thanks to Pupil Labs themselves) directly from the Builder
Compatibility Changes:
Python 2.x is no longer supported
Filename timestamps now have a different default format (based on ISO 8601):
2022-01-14_14h39.36.092 for 2:39pm and 36s, 92ms
See psychopy.utils.getDateStr()
for details on the new functionality
New and Improved:
Ability to customise the filename in online studies, using the same Experiment Settings option as local studies
Standalone distribution now using Python 3.8
Builder: Keyboard class now providing the option to select the underlying engine (iohub, psychtoolbox or pyglet) with iohub now being the recommended default
Filter components view by what works online vs locally
Eye Tracker Record Component can now be use to record across multiple routines.
Added Text Color setting to Eye Tracker Calibration and Validation procedures / Routines
Allow selection of which U3 register to write to when using a LabJack U3 with the Parallel Out Component.
Added non fullscreen window and multiple window support to iohub Mouse device.
Python shell within Coder view has been rewritten and is much more functional
Mouse now has the option to store only valid clicks
Added the option to refer to pre-canned image files, such as default.png and use as an image stimulus
Fixes:
experiments using iohub were not running on MacOS standalone due to broken version of the gevent library
fixes to connection from Builder to Pavlovia in certain circumstances (e.g. certain usernames or when project has moved) commit:22963a9
fixes searches of Pavlovia for private projects by the logged in user
fix to use of correct answers for Joystick Buttons Component commit:2e66dc1 commit:f9ef1be
Builder crashing when a Routine had been copied over commit:4592876
some parameters in Builder dialogs were missing their label names commit:c8cd380
ShapeStim was not obeying requests for zero opacity commit:8030b2f
fixed “currentLoop is not defined” error for online studies commit:a261d04
in certain circumstances, mic recordings were not saving for each trial, only for the last trial, when online commit:5e23a0a
Fixes:
TextStim (and Button, which is derived from TextStim) was not easily clickable online due to incorrect bounding box psychopy/psychojs#492
Slider styleTweaks were not being applied #4773
Check that file is saved before trying to Run #4759
Mouse coordinate mapping was incorrect for MacOS Retina displays which meant that Slider and Brush wasn’t working, for instance #4755
Allow the Sound Component to be used if transcription libs were not available #4747
Form Component excel template was corrupted (by google sheets export) #4742
Copying a Routine from one experiment to another was causing a compile error #4740
Better logging of errors during application load for debugging purposes #4750
Setting the Slider to reset() was looking like a response when it shouldn’t #4738
Fixed core.getTime() for M1 native installations (does not affect Standalone or Intel-based installations on M1) b839a32da52b
Allow 3-dimensional arrays for ShapeStim vertices 31ca663bf2
Fix dependency definition for Poetry installations 77cb7c92eac4
Fix use of event module for keyboard as fallback for iohub/ptb 5c3672804f1
If HomeBrew has a broken fonts folder ignore it #4719
If user specifies a line width of “2”`make it `2 389bfd4692
Fixes:
URL redirection was failing at the end of the study for online experiments where the JS code was generated using 2022.1.0-2022.1.1 due to an erroneous replacement of // with / in https:// commit:e8218b31f
Hyphens can now be included in Pavlovia project names (the validator in the PsychoPy GUI was being too strict) commit:bbe6bf5ed
Static Components that are used for fetching online resources (e.g. using a Movie Component that sets its stimulus during a Static) will now freeze and wait until the resource is fully received if it takes longer than the set duration. Using ResourceManager components the experiment will not freeze but status can be checked status==FINISHED when download is complete
Fixed a bug where, after logging out of the Pavlovia Session in the PsychoPy interface, PsychoPy would still provide the option to use the names/groups of that user, but would not then allow access to their contents. commit:bbe6bf5ed
PsychoPy would crash if using the Classic Theme on a mac with a retina display (missing icons) commit:495fddd81
DotStim in local (Python) experiments was failing to update dots position #4694
Error raised when creating a new Pavlovia project from the menu item rather than the toolbar button #4683
Crashing on MacOS when running experiment due to Keyboard a) ‘iohub’ not loading due to gevent incompatibility and b) not then correctly falling back to ‘event’ backend
Fixes:
MacOS app failed to run experiments with dialog boxes (broken dependency being packaged)
the application would hang while trying to push any changes to Pavlovia
added Japanese translations of the new menu items etc
Many bug fixes from 2021.x release, more than we have room for here, including:
Code / Builder: iohub keyboard mappings now match those used by event.getKeys().
Code: labjacks.U3.setData was not working
Builder: Region of Interest (ROI) Component does not depend on ETRecord component.
Builder: ROI Component ‘look away’ now ends routine after eyes have been outside ROI for ‘Min look time’ seconds.
Code: 0.5 second blocking eyelink start/stop/record caused iohub to drop keyboard events.
Code: eyelink now uses calibration ‘randomize’ param.
Code: Layout of Form, Slider and Textbox now much more stable and consistent
Highlights:
Unified Eyetracker support via ioHub is now integrated into Builder for easy-to-use eyetracking studies, with many fixes, improvements and a “MouseGaze” option to simulate eye movements while testing
Mic recordings for voice responses (Python and JS)
Transcription (speech-to-text) via Google Speech or using CMU Pocket Sphinx (free but currently on the Python lib only)
Improved JavaScript outputs from the Builder, providing more seamless migration to web-based studies
Compatibility Changes:
CHANGED: In Python the random number generators for TrialHandlers etc use an improved algorithm (PCG64) and are now indendent of each other but seeded random sequences will differ from previous versions
New and improved:
JS+Py: Record and transcribe (speech-to-text) audio responses in both Python and JavaScript engines using various local (CMU Pocket Sphinx) and web (Google and Bing) services.
Eyetracker Record: Starts an ioHub server to receive input from an eye tracker
Eyetracker Calibration: Runs calibration procedure on connected eyetracker
Eyetracker Validation: Runs validation procedure on connected eyetracker
Region Of Interest: A PsychoPy polygon with methods to check whether it’s being looked at, how long for, how many times, etc.
also improved calibration and validation procedures
Py: Improved Movie playback performance for both the OpenCV (MovieStim3) and VLC backends. The VLC backend has added playback controls (fast-forward, rewind, etc)
Py: hardware.Keyboard class now supports ioHub as a backend and will use that in preference to Psychtoolbox keyboard (PsychHID) if ioHub has been started before the Keyboard is created. ioHub keyboard is similarly in performance but with fewer constraints (can handle a wider range of keyboards)
App: demos within the app got so busy they’ve been moved into categories
App: includes some basic fonts, so as not to rely on what is installed (except on macOS where these aren’t permitted)
App: output is available again in the bottom of the Coder view
App: many improvements to the autotranslate of Py->JS in Code Components (fixing issues from the “Crib sheet”)
JS: audio playback can fade in/out to avoid clicks
JS: Builder loops (TrialHandlers) support and update properties such as thisN as in Python Experiments
JS: Form supports formComplete() call to check if all required items have a response
JS: Form supports items types: SLIDER, RADIO (synonyms for RATING and CHOICE)
JS: Button Component now supported for text-based buttons (as in the Python Component already present)
JS: supports more options for color styles
Fixes:
Py: TextBox better handling word boundaries for newlines
Py: Button was incorrectly treating a held-down button as a click (now supports new-clicks only option)
Py: ioHub better integration with PsychoPy units and color spaces
JS: bug in Form scrolling
JS: various fixes to TextBox and Form styling
JS: Data files output now include information about their character encoding (BOM) supporting more locales of Excel
Fixes:
macOS was crashing on launch (caused by missing files from psychtoolbox stripped by macOS GateKeeper)
added cryptography lib explicitly to requirements for pip install commit:267483d00
Runner local debug of PsychoJS experiments was failing with MIME-type errors (Runner didn’t know about new psychojs packaging) #4153
extended timeout when querying Pavlovia from the app (e.g. searching for projects) #4148
corrected reset of clock for new Button Component
DlgFromDict was crashing if labels were used (in code) #4137
short (<0.5s) sounds were not labelled as finished in PsychoJS boilerplate #4117
contrast parameter was not being applied to ShapeStim #4111
Fixes:
Builder outputs weren’t fully honouring the userVersion() request, resulting in broken PsychoJS code commit:5f10b0a12 commit:017c18f2f
Better documentation of (high-performance) VLC movie backend
iohub.Mouse.setPosition was not handling units correctly when given a float
Builder boilerplate for Microphone was looking for a transcription even if none was requested #4163
Fixes:
on macOS the long-standing issue of the app freezing in the dock has now been fixed #4214
smoother handling of trying to run an experiment on a computer with different mic hardware than where the experiment was created #4210
Minolta LS100/110 was not working due to broken bytes/unicode conversion #4186
ElementArray was not honouring the contrasts (contrs) parameter #4196
Code Components were giving unnecessary warning about namespace issues. Should only warn if a variable name is being _shadowed_ not if it’s being _used_ #4193
The first major release of 2021 brings a lot of fixes (the dev team is focussing heavily on making the user experience more smooth at the moment).
On top of those fixes are a number of useful additions though, like the new Button Component.
NEW:
Builder has a Button Component to make it easier to have clickable image/text objects
Builder: Improved layout of Component dialogs:
Consistent tabs for common parameters (like pos, size, color…)
Component parameters that use filenames (sounds, images, etc.) now have a Browse… button
Component parameters that use Excel files now have an “open in Excel” button, if you click this when the field is blank it will open a pre-made template for you
Component parameters that are colors now have a button to open the color picker
Builder now features separate compile buttons for JS and Py and will open the JS file in the Coder view when compiled
Builder readme files now support markdown formatting (and .md extensions) psychopy/psychopy#3377
PsychoPy lib: refactored color handling via the Color
class
CHANGES (compatibility issues):
CHANGED: the new more-flexible parameters of PsychoPy Experiment Components makes experiments from 2021.1 **will not run** on older versions of PsychoPy. If you share your study with people using older versions make sure you set the :ref:’useVersion’ setting to be 2021.1.0 or upwards so that it will run elsewhere
CHANGED: PsychoJS: orientation for PsychoJS now follows clock convention rather than engineering convention (polar coordinates, positive rotation is anti-clockwise) whereas PsychoPy used the clock convention. From this release onwards both use the clock convention or orientation/rotation.
CHANGED: Slider has additional params for colors and fonts of lines/labels/marker that will not exist on older installations
CHANGED: BufferImageStim was using an incorrect rect specification for selecting the region of the screen - it was using a bottom-left instead of PsychoPy standard center ‘#3597 <https://github.com/psychopy/psychopy/issues/3597>’_
FIXES:
All: Curly quotation marks (“”), which are sometimes automatically put into text boxes by MacOS and certain keyboard settings, will now be automatically replaced with regular quotation marks (“) when in code. To use curly quotation marks still, you can “escape” them by putting a before them.
Lib: Fixed syntax warnings on Python 3.8 #3344
Lib: The Pygame audio backend can be used again. #3382
Lib: Several fixes to iohub ( #3348, #3399, #3412, commit psychopy/psychopy/3912167)
Builder/Coder: Fixed the error raised when the “Plot gamma” button in the monitor center is clicked but no calibration data is loaded. #3384
Coder/Builder: Correct detection of retina/high-dpi displays within wxPython on MacOS, Linux, and Windows.
Python Lib: TextBox stim text layout not working on linux and macOS.
Python Lib: various minor fixes to TextBox2
Coder: Miscellaneous bug fixes to demos/coder/stimuli example scripts.
Coder: Fixed a possible error when parsing code to build the source tree.
Coder: Handle error caused when closing editor tabs.
Builder: The “Routine” pane can no longer be- moved which broke the builder interface.
Coder: Make Coder’s default size reasonable on fresh install. #3472
Coder: Bug where opening an unsupported file type raises an error. #3519
Coder: Fixed bug where the source tree raises and error if it comes across things it cannot correctly parse.
Online: Prevent Safari from beeping in full screen. psychopy/psychojs#266
Online: Slider sizing, tick placement, and event handling improvements. #249 #263 #264
Online: Fixed ShapeStim instances ignoring the closeShape property. psychopy/psychojs#245
Online: Support TrialHandler.Method.FULLRANDOM. psychopy/psychojs#247
Online: Improved mouse event accuracy overall. psychopy/psychojs#248
Online: Fixed ShapeStim variants ignoring the contrast property. psychopy/psychojs#250
Online: Fixed an issue translating ‘n’ encoded line breaks when importing conditions files. psychopy/psychojs#251
Online: Fixed TextBox click handling. psychopy/psychojs#258
Online: Improved MovieStim autoplay. psychopy/psychojs#260
Online: Allow for parsing of array-like strings when setting VisualStim position or size. psychopy/psychojs#262
Online: Prevent Safari from beeping in full screen. psychopy/psychojs#266
FIXES:
Error when trying to sync a new project with Pavlovia commit:33b3d80ea
TextBox in Builder was resetting to “default text” on each repeat rather than blank commit:8510d9f1a
Editable elements of Form were being erroneously drawn when they fell beyond the Form boundary commit:7d02c8251
Several improvements to styling of Form (on Python)
Added a preference for Builder to show only the online-compatible Components (or other similar options). This is a BETA testing feature
FIXES:
FIXES:
Builder: Fix ‘list’ object has no attribute ‘contains’ with clickable mouse objects #3651
Builder: context (right-click) menu was not aligned with mouse in Flow for large Flows #3657
Builder: Slider styles were not being used correctly from previous versions (<2021.0) #3665
Builder: crash if the filter preference was used to filter out pure Python or pure JS Components from Builder #3649
Builder: Color Picker defaults to RGB to reduce chance of users pasting in RGBA to visual Components #3667
Runner: local debug of online studies working again (was trying to fetch the wrong PsychoJS version) commit:af6622c71
PsychoPy lib: better handling of unknown fonts (fall back to Open Sans and Alert) commit:fba09ef8d
PsychoPy lib: better timing on iohub for macOS key/mouse polling commit:fba09ef8d
FIXES:
Py Lib: Sounds from files were being truncated #3689
Py Lib: TrialHandlerExt now compatible with current numpy (had an index error before) #3705
Py Lib: MoviStim raising an error if opacity was None commit:50334df2f
Py Lib: RIFT backend not working commit:428f62f80
Builder: When letter height was set to a variable it raised an error at run time TypeError: len() of unsized object commit:b1a77ca3a
Builder: Raising an error when floats looking like file names #3719
Builder: better handling of failure to updateVersion commit:afec41226
JS: TextBox when editable was not being reset on each trial #3706
JS: Keyboard should stop consuming keypresses at end of trial, even if not storing data #3706
JS: Add Sound.setSound() method to allow for dynamically deciding audio source psychopy/psychojs#154
JS: Allow for PIXI updates when dynamically adjusting opacity, including on polygons psychopy/psychojs#203
JS: Give Form radio type support psychopy/psychojs#281
JS: Improve ImageStim.setImage() attribute checking psychopy/psychojs#292
JS: Give TrackPlayer fades on play / stop psychopy/psychojs#296
JS: Fix TextBox eating up key presses psychopy/psychojs#302
NEW FEATURES:
New look, including dark mode, customizable themes and new flat buttons (you can choose a Classic theme to get the old buttons back for comfort)
Now have an class for /editable/ text called TextBox2:
very fast rendering (faster than the original TextStim)once the font characters are uploaded
supports an editable flag which allows it to pick up text input to the window including full unicode support for your keyboard
you can apply (fake) bold and italics within the text using <i></i> and <b></b>
if multiple editable TextBoxes are onscreen together you can tab between them
Form components now work online and support (in both lab-based and online versions):
free text
ratings and sliders
choice boxes (radio buttons)
descriptions (no response)
headings
Improved Coder:
call-tips for code and better auto-completion
view the folders and the structure of the current file
Improved Runner:
Builder/Coder provide options to run directly (Ctrl-R) and Runner only then used to show stdout
more visible how to save/open Runner filelists
Runner filelists saved as .psyrun files and can be loaded into PsychoPy with a double-click
Online studies don’t need to use html folder. Keep everything where it is! If resources aren’t found automatically (and you would have put them in to the Resources folder) you can now add them to the ExperimentSettings>Online>AdditionalResources
Added support for Emotive and BrainProducts EEG hardware
CSV data outputs now have an option to set the delimitter (e.g. ; or t rather than ,)
Brush component now has an option to allow drawing without having to hold down the mouse button #2980
CHANGES:
_PsychoJS_ code now uses the same syntax for loop termination as _PsychoPy_ allowing either nameOfLoop.finished=true or currentLoop.finished=true
Python 2.7 is no longer supported. We recommend Python versions 3.6 or 3.7 (3.8 is not tested likely to work)
FIXES:
Various compatibility fixes for JS code from PsychoPy
loop termination now working the same as Python and correctly auto-translated
movies should now restart correctly, at least on browsers that support the seek behavior
randint is now included and imported in all scripts
sin, cos, pi etc are also imported in all scripts
support for wxPython 4.1
so many more small fixes!
Further fixes on top of the new features in 2020.2:
Fixed rendering of TextBox2 following Big Sur update of 2020.2.7 commit:0fcb89c54 commit:39777a3e0 commit:1aec9abb9
Fixed handling of continueRoutine=False in BeginExperiment of online studies commit:ae20cb12f
Erroneous warnings about code being used as parameters commit:40bbfe1a3
Further fixes on top of the new features in 2020.2:
TextBox2 broke in 2020.2.8 due to switch from PyOpenGL to pyglet.gl in text rendering commit:39777a3e0 commit:1aec9abb9
Fixed error Unknown colorSpace: ‘Named’ commit:da234cc46
Superfluous debug messages from ioHub when no key pressed commit:9589e4865
Further fixes on top of the new features in 2020.2:
support for macOS 11.1 Big Sur (updated mac pyglet to 1.5.11 and mac Python to 3.6.8)
fixed default blank text in textBox for online studies actually showing a pair of quotes commit:786e1d3f7
flag to alphabetically sort Exp Info fields was being set always true #3279
Position and Size params for Form Component were being requested twice commit:d45ca99c9
fixed annoying (but harmless) error ‘ModuleNotFoundError: import of pyglet halted; None in sys.modules’
further fixes to Runner not showing print() statements commit:e0ec67e6f
Routine panels now support mouse scroll wheel to navigate commit:6da3707d3
(Binaries never released)
FIXES:
missing resource error in some online experiments, caused by incorrect relative relative paths in Settings>Online>Resources #3285
JavaScript Code Components for Before Experiment is now moved earlier in the script - it needed to be positioned before first function opens #3289
TextBox was missing setBorderColor and setFillColor so these needed code to change dynamically commit:eb915732d
TextBox was carrying the text from one trial into the next commit:330f5fa1d
Coder FoldAll menu item was having no effect commit:6d4f66b0d
TextStim opacity can now be set dynamically #1045
Loop OK button was sometimes left disabled if invalid inputs commit:3a1104f71
fixed non-uniform probabilities of conditions file row selection suggested in docs #3256
workaround for scipy.optimize import error on windows machines that are using BitLocker #3287
if a TextBox is the only editable thing on the screen then give it focus #3269
FIXES:
Now code-signing the installer on Windows as well as macOS
Failing to send print statements to output, depending on how PsychoPy was launched commit:4773ec32d Only occurred if you launch by double-clicking file or if you close Runner
Coder crashing on macOS when using editor with autocomplete=True commit:687e81dfb
ioHub fix for unicode strings commit:5451ea49a
Marker color on RatingScale was not resetting (but use Slider anyway!) #3140
Runner sometimes ran wrong script (and never knew which to stop). Now better tracking of running process #3142
Slider not honoring the order from the Routine (should render in order from top down) commit:9e0299544
JavaScript Code Components for Before Experiment were having no effect #3151
error with trying to poll() on a script process that was NoneType commit:cc56713cc
Editable textboxes were still able to be drawn if you clicked on them (even when they were not told to draw()) commit:8253f0696
warn against using global JS names in experiment #3177
Brush not being reset in JavaScript commit:88812c3bd
Movie reset issue #3183
countinueRoutine=False had no effect for online studies if in Begin Routine block
errors that should have appeared in the console were sometimes appearing in the (app) error dialog commit:d44f24d63
more tolerant of whitespace in Emotiv Client ID file
Runner AddTask dialog had wrong format for file filter #3213
Sound volume attribute was having no effect on the PTB backend #3215
Fixed fill/line colors of TextBox #3222
Error in JavaScript code when Movie Component had blank stop time commit:0b4ddcffc
Better handling of stdout encodings when console not set to utf-8 encoding commit:d77535906
Improved Resources box for the online (using relative references commit:c9558bfd8 and resize with dialog commit:d607271db)
JavaScript code-conversion now uses our own built-in round() function mimicking the same function in Python commit:da426d9e3
FIXES:
improved search for resources files when compiling JS (was crashing if using root folder and using code to specify the conditions file) commit:09816985d
the Before Experiment section of Code Components wasn’t being written for JavaScript components commit:bbfd310
error with wx complaining about Alignment (in wx 4.1) commit:a32e2ca commit:ae508d6
TextBox Component default size is None (=autoexpand)
TextBox editable=True had no effect on the Builder outputs to JavaScript
themes menu correctly updates what the current them is in all open windows commit:c5cdc49
custom fonts that didn’t provide a “family name” were causing the font search to crash commit:ef078ab
bug trying to us an invalid “useRunner” preference 3532e4c
JavaScript studies failed if there were 2 Mouse Components in a single Routine commit:0e0b26d4d commit:32a6be2
improved Big Five Inventory demo
blank TextBox Component should use blank string rather than None commit:39bf1bb
further fix to macOS stapling (might not have worked for users with no internet connection?)
Form Component now honors being set to show only at certain times (in keeping with other visual Components) commit:35ad5bc
Coder now correctly providing syntax styling for JS and C
FIXES:
Mac version now fully signed and notarized for GateKeeper! For some time it’s been an annoyance that Apple would block PsychoPy because of it not being from a “known developer” but in recent updates GateKeeper has become so aggressive the app has been crashing on startup for some macOS versions. Hopefully Apple will now let us launch in peace!
better handling of non-loading fonts in the application On mac some fonts weren’t being found (although this might be due to the now-solved gatekeeper issue)
auto-translate py->js for parameters with $ We were translating code components but not parameter boxes where the user was switching to code using $ #3064
better handling when a piece of code fails to convert (warning not error) #3063
show progress (in Runner) while syncing project with Pavlovia #3061
various fixes and additions to Japanese translations
For the new decade we have a new version system. The application is still called PsychoPy3 for now, but we’re using year.version.bugfix from now on to mark versions.
NEW FEATURES:
Many exciting tools for 3D rendering. See Coder demos menu for some examples
Online studies have better cross-browser compatibility including fixed support for edge
Auto-translate Code Components Py-?JS (syntax only)
Online studies have substantially improve timing. In fact, PsychoPy now has the best timing of any online system, consistently under 4ms precision for RTs!
provides some ‘Alerts’ about things that might go wrong in their study #2646
allows you to run/save/open a set of studies without opening a window for each one
allows online studies to run locally in “debug” mode to test the study before uploading
Online studies now support shapes Cross, Star and regular polygons (nVertices) #2673
Support for pyglet 1.4, including support for text alignment in multi-line text #2693
CHANGED: rendering of text stimuli may not look quite the same. We now have new parameters anchorHoriz and TextAlign rather than alignHoriz but this may not act the same in all cases #2693
Online studies no longer require a separate html folder. #2687 In some cases (e.g. when adding extra resource files) it may be preferable to keep the html folder and that’s currently still the default for new studies but ExperimentSettings>online>folder can now be set to blank and the html/js files will be saved alongside the psyexp/py files. This reduces file duplication.
Support for QUESTplus staircases
Pyglet backend now supports 10-bit framebuffer #2672
Updated support for Oculus Rift #2655
Added a Pie
(pacman) stimulus #2652
Substantially faster rendering of DotStim #2647
Keypad key responses were not showing up as numbered responses under the new Keyboard class #2812
Cedrus button box had an error int he Builder-output code added in 2020.1.1 commit:186ec5876
Code Component was accidentally forcing people to use code auto-conversion commit:5c57d0c9d
FIXED:
Double-click takes you back to the file in the appropriate Builder/Coder view
Ctrl-R within the Runner run the file (so you can do Ctrl-R twice from builder and you’re running)
Alerts separated from stdout so they’re more visible
Alerts for Builder are checked on experiemnt selection rather than on script compile time
Alert was testing stim size/pos incorrectly if using units “from experiment settings”
Mac keyboard access should now bring up a dialog taking you to the correct System Preferences panel
Fixes to Eyelink 1000 communications from iohub commit:1a8c6923b
Better support for high-res displays on Windows #2795
Further tweak to readline issues on linux commit:6975040fa commit:4a80060b9
FIXED:
Rect stimulus now aliases size with width and height so that users can refer to either #2650
Faster updating of DotStim dot locations (so fewer dropped frames) #2647
continueRoutine can be set in the BeginRoutine block rather than the EachFrame block #2680
Tab key was incorrectly reporting itself as ‘escape’ in new Keyboard object #2620
many more!
Cedrus response box can be inserted into multiple routines without having to use a Code Component (no “Could not find a Cedrus device” error)
FIXED:
now avoids using these calls unless gamma-setting is really needed
gives more info about the cause. See more info in [troubleshooting gamma ramp](https://www.psychopy.org/troubleshooting.html#errors-with-getting-setting-the-gamma-ramp)
provides an option to skip gamma-setting entirely
Slider wasn’t allowing the units to be “from experiment settings” commit:23d80b49f
Setting the conditions rows from another conditions file was causing “Error path is on mount… start on mount…” commit:2e8cd2183
Mac ‘tab’ key was reporting itself as ‘escape’ with new Keyboard commit:95326cadd
PSTBox Python3 incompatibility (although there may be more) commit:da83429d6
better scaling of rating scale (Slider) in Form commit:d115e63cb
Stencil for Form was being activated immediately rather than when needed commit:9daeba94d
FIXED:
on the pip install version (incorrectly packaged) there was an error “NameError: name ‘pythonExec’ is not defined”
JS version system now drops the final (bugfix) release number (3.2.3 -> 3.2 in JS lib)
Cedrus response box now supports keys as a variable value in Builder #2608
QuestPlusHandler now supports “unknown” kwargs #2610
FIXED:
timing of first frame was being given an extra (unnecessary) delay if images were loaded commit:8ddab41
potential app crashes if no internet available commit:63aa7e0 commit:b3e15f9
Builder under OS X was not launching experiments if filename contained a space commit:1b205df
Python2 installations crashed when trying to launch studies from Builder due to the use of a modern argument to subprocess not supported by Python2 #2596
If Builder script had an error, then printing of that error was sometimes being split across the output frame (of Builder) and the output panel of Coder #2594
It’s all about the new timing improvements!
TIMING improvements:
when combined with pre-scheduling (e.g. start playback on upcoming win.flip()) this can generate sub-ms precision and sub-ms lag!
works with standard audio hardware
new feature to request info from the Window about next expected flip
t in a Builder scripts is now time from first frame (so synched to visual stims)
better timing on the keyboard responses of the JavaScript experiments due to timestamping asynchronously with your script
Also ADDED:
Standalone installations now provide an updated Cedrus library, pyxid2
Support for new LabHackers TTL2USB8 device (parallel port alternative)
Envelope grating now has exponent (power) option
FIXED:
Long-standing issue with lots of print-statements (e.g. on every frame) crashing Builder scripts
Support for Pyglet 1.4 (although text scaling appears to have changed a little)
Some serial devices (photometers) were not compatible with Python3 string/bytes conversion
Too many more to mention…!
We’ve improved keyboard timing a great deal.
As of PsychoPy 3.1 we are now using the underlying code of the kbQueue calls in
Psychophysics Toolbox. The C code from those calls was ported to a new Python
package in late 2018 and this is now the basis of the new Keyboard
class.
This only works on 64-bit Python3 installations, but the Keyboard class will
fall back to the old event.GetKeys calls where the psychtoolbox package is
not available.
FIXED:
new rendering glitch in ImageStim when mask=None and interpolate=True, caused by previous fix to the wrapping issue #2526
FIXED:
further fix to Mic for experiments created under the previous version (our last fix only solved the problem for new Mic Components being inserted) #2512
fixed demo timeByFrames which was set to use Qt4 for plotting instead of Qt5 (which has been the default version provided since the switch to Python3)
fixed crash in the new Keyboard class caused by psychtoolbox lib incorrectly converting unicode characters in the device name (this was actually a fix in #kleinerm/Psychtoolbox-3@a5c37855a4a097) that needed repackaging
error with Variable Component trying to save start/stop times (that might not exist for that variable) commit:e1bca1bdc
some data could get orphaned (and not saved) by being collected in the outer section of a nested loop commit:8b7fda826
when using Mouse.getPos() with retina display and win.units==’pix’ the mouse pos was double the expected value commit:a78d74420
FIXED:
StairHandler code from Builder was failing in 3.1 due to new tStartRefresh data being sent to wrong method (addData not addOtherData) #2497
Routines in online studies that weren’t included in (or before) a loop were not having their data saved #2496
Fix to audio capture error “bad argument at position 0” from Builder experiments commit:dadb9be25
PsychoPy app didn’t recognise projects that were pointing to gitlab ssh targets (e.g. created in terminal) commit:08d7937
FIXED:
teething problems with new Keyboard
:
in Builder there was stuttering of sounds and lags in frame timing caused by accidentally creating lots of Kyeboards while checking for ‘escape’
durations were being reported with correct magnitude but as negative values commit:e43e47460
problem on Windows if keyboard device name contained unicode (that problem was actually in psychtoolbox package, now updated in Standalone)
on Windows, the ‘return’ key was being called ‘num_enter’
videos were not running online commit:9779579b6 commit:51b0824f7
fixed rounding error in filtering of NoiseStim commit:5d0e360d8
iohub waitKeys should act like getKeys if maxWait<=0 commit:e33f733f3
error if unicode items in the new Form class commit:8287674f4
ADDED:
videos in Builder now have a Loop playback parameter
Standalone distributions now include tobii-research package
ADDED:
Added the loop playback parameter to Movie Components
FIXED:
Microphone on windows failed if user didn’t manually set pyo to be preferred lib. That isn’t now needed commit:700b72cd6
pyo lib is now provided in the 64 bit Python3 Standalone (win)
The new Keyboard class wasn’t clearing all events when requested (e.g. at the beginning of stimulus onset) #2442
Parallel port lib in the Windows 32-bit version wasn’t working (installed a new dll)
OpenCV in Mac Standalone wasn’t working (updated to be a package not a single file)
Sounds with variable duration didn’t stop properly #2446
Fix to JS output when useVersion was set to something
Cedrus XID lib is now working on Python3 (although their official one is yet to come)
NEW:
hardware.keyboard.Keyboard class, based on C code from the Psychtoolbox project (ported to Python by Mario Kleiner)
faster than event.getKeys() (polling is asynchronous with drawing loop and the calls go direct to the USB rather than going via the operating system key calls)
supports keyDuration fields as well as rt for key down time
Form class for combining text items and responses (currently ratings and radio items) in a scrollable list
each Builder Component is now outputting its start/stop times in the data file by default (can be turned off for )
PsychoPy3 is the new phase of development including support for online studies at the Pavlovia.org experiment server. Many of the features here are relatively new and, although we have spent hundreds of hours developing and testing them you should be more cautious than ever checking your experiment and data outputs.
FIXED:
local project repeatedly asking to Create New Pavlovia project when one already exists commit:c3f0d203f
Fixed “No module named ‘PyQt4’” on MacOS<10.10 caused by PyQt dropping support for Mac10.9 in PyQt5.9 #2375
don’t allow movie->online to use units ‘from experiment settings’ commit:8cbaf8a71
Py3 string/byte fixes for CRS ColorCal commit:3bf1b7e5d commit:d49f154a0
various fixes to Japanese translations
FIXED:
TrialHandler.next() was accidentally removed by Python3 conversion and now added back in commit:c44621ab0
various fixes to iohub Python3 compatibility (especially for datastore)
permit reading “xlsm” files as conditions files (Excel files with macros although these will be ignored by Python) commit:9e11bfd61
added space key to the GlobalEventKeys #2310
fix to pating into Code Component with windows EOLs
fixes to Japanese translation (and bug around saving Static Components in Japanese locale)
packaging: PyQt package inside one of the Standalone distros was broken
FIXED:
sounddevice backend not importing on systems that don’t have readline commit:a9bbe98b3
better automated Pavlovia logging-in for users, based on project commit:460889e5d
faster auto-logging for changes involving numpy arrays (e.g. elexment arrays XYs) commit:e5dfc9e7d
fix paste when using legacy macOS end-of-lines (convert them to ‘n’ always) commit:94c5ee6a2
updated Japanese translations #2292
FIXED:
fixes to prevent stalled “Synchronizing…” message by preventing behaviours that would cause it commit:8cadce02d
workaround to stop sounddevice backend from silencing input() commit:1422fd7c9
prevent JS experiments being compiled with units of “use prefs” commit:a686dbf52
cleaner ioHub shutdown commit:7a7751ca5 and datastore commit:209c4047f
Slider in JS allows forceEndRoutine commit:0694027b2
better error reporting when compiling scripts commit:a01cb2982
don’t crash the app if no internet commit:84b7602c3
don’t crash if scipy.optimize doesn’t load commit:0f8038629
set Slider label height to match tick height by default commit:f8bdf2341
online sounds were never ending if duration was blank (now ends at end of file) commit:6d91b3186
problem converting EOLs between different formats when pasting code
ADDED:
New Builder Pavlovia button to examine properties of current project
Added star to ShapeStim (currently only in Python) commit:8e6c40993
Added tooltips for Pavlovia buttons
CHANGED: Slight change to creation of *new* experiments, which will now default to the units of ‘height’ rather than ‘use preferences’ (which led to potential confusion when the experiment moved to a different computer)
FIXED:
Force End Routine wasn’t working with Slider when online commit:a0ca2e312
Fix to the online error about units: if an experiment is given units of “use preferences” this will switch to height during HTML export commit:a686dbf52
First push of a new project to Pavlovia didn’t note that remote now exists, so tried to “first push” again commit:f4134a670
fixed detection of correct non-response in JavaScript outputs (so no-go works online) commit:0c3cea2b2
added workaround for strange clash of sounddevice with input() commit:f99bef4a9
various small fixes to iohub for Py3 commit:e6a2169d6 commit:4ca503399 commit:cf432bc3c
ADDED:
star available as a Shape in Builder (but not online yet)
experiment info dialog now supports drop-downs to constrain options (e.g. [‘male’,’female’,’other’] )
BBTK now supports mode Digital Stimulus Response Echo commit:5da328fcf
FIXED:
Builder’s PsychoJS outputs were not updating their versions (pointing to the version the script was first created in, not the version currently used) commit:789d24ee4
sounddevice under Python2 had a bug with being unable to copy() commit:c1317b6b6
now prevent the user from accessing useVersion if that version can’t be supported by the current install (e.g. incompatible Python version or wx version)
Windows Standalone version now includes dependency for [pyqmix](https://github.com/psyfood/pyqmix) pumps
FIXED:
JS outputs were connecting to outdated PsychoJS version (3.0.0b11 instead of 3.0.0)
updated numpy (to 1.15.4) and scipy (to 1.2.0) for windows installs using https://www.lfd.uci.edu/~gohlke/pythonlibs/ in the hope of fixing numpy problems for some windows boxes
JS string values in Py27 were being convert to b’theString’ in JS outputs which obviously broke JS
ADDED:
Slider support from JS outputs
Although there were several beta versions preceding this, the changes described below are the broader changes since 1.90.3 (the previous “stable” version).
NEW:
new PsychoJS supports text, images, keyboards, mouse, sounds, movies, sliders
you can also now include Builder Code Components that include both Python and JavaScript optional code so your components will work online too
search for existing studies
create your own
run (and collect data into csv files or mongoDB)
sync, including (push changes to the server and fetch back data)
Additional new features: - Slider class, recommended replacement for RatingScale (more efficient, more flexible and simpler to use) - support for Oculus Rift (only on Windows 64bit Python 3) all due to Matthew Cutone
Many bugs have also been fixed, notably in terms of audio library problems and memory problems with MovieStim3.
FIXED:
FIXED:
sync when an empty project already exists is now fine
after creating the project, changing a file and repeating sync, it didn’t detect the changed file
sync to a project that has been deleted remotely now asks if you want to recreate the project
better reporting of error if sync fails
further fix to memory leak in MovieStim3 commit:9d0c127d8
fix to PsychoJS output code: loops were not being compiled correctly commit:6a8e700a3
when compiling to JS we now detect tuples and convert to lists for params (JS only has one sequence, with [ ] )
FIXED:
some packaging issues on both Windows and Mac (e.g. updates to Pillow=5.2.0, soundfile=0.10.2) also fixes libsndfile error on Mac_Py2 standalone
when the localRoot has been set for a project (before sync) we should get back the sync window
clicking “runOnline” before creating/syncing your project with Pavlovia now does the right thing
fix to MovieStim3 unloading of movies #1917
FIXED:
a further issue with the app not starting on some machines (due to the first-run wizard)
searching pavlovia projects now support stars and forks in sorting
Slider forceEndRoutine was having no effect
sounddevice problem when playing a mono sound to stereo stream or vice-versa
ADDED:
support for Oculus Rift (only on Windows 64bit Python 3) all due to Matthew Cutone
Japanese translations to many of the new features/controls
FIXED: an issue with the app not starting (if git not installed)
PsychoPy3 is the new phase of development including support for online studies at the Pavlovia.org experiment server. Right now this is BETA SOFTWARE. It WILL contain bugs but we’re fixing them as fast as we/you can find them!
NEW:
new PsychoJS supports text, images, keboards, mouse and sounds
you can also now include Builder Code Components that include both Python and JavaScript optional code so your components will work online too
search for existing studies
create your own
run (and collect data into csv files)
sync, including (push changes to the server and fetch back data)
This is a very major refactor of many parts of the PsychoPy code. Treat very carefully for the first few bug-fix releases as there are likely to be errors some of which could be catastrophic to your data!!
This is the first attempt at support for Python 3, with maintained support for Python 2.7. Note that both are available as Standalone packages for Win and Mac. The Python3.6 version is labelled as Py3 in the download file.
Stick to Python 2.7 if you want your script to break less. If you upgrade to Python 3 then you’ll need to change any print statements to include brackets and you may also get some new errors springing up about unicode/bytes objects.
Released July 2018
FIXED:
Fixes event code creation for Black Box ToolKit #1830
Removed redundant ‘apply’ button in preferences #1832
Fixes problem with setting gamma with pyglet v1.3+ #1834
Removes ‘unknown color space’ warning if user is using named colors #1836
Fixes refcount error, raised when monitor centre was closed #1838
For Py3, JSON calibration files are now loaded into monitor list #1839
Fixes layout problem with RTL locale causing broken dialogs in the app #1840
Anti-buzzing fix applied to sounddevice backend #1847
Implements checks for variable name clashes between builder and conditions file #1852
Reduced code redundancy for _getRegionOfFrame, and can get single pixels from front buffer #1854
Hex color space can now be specified as a window setting in Experiment Settings #1857
Sound duration can now be specified in conditions files #1858
Released May 2018
FIXED:
TextStim now working GLFW backend commit:a909c95f
better checks for existing ffmpeg before trying to download commit:a909c95f
CRS Bits boxes bugs with Python3 commit:ff5a4ab7
Fixes to window position for Retina displays commit:e7b111cc commit:0d4538de
Fixes to sound component with duration=None commit:9b46ff0c
Fix to Hex-specified colors commit:6ffa413a
print(RunTimeInfo()) not working due to unicode/str error commit:29de9501
sounddevice stereo auto-detection wasn’t working for wav files commit:b07f8fb1
Released April 2018
ADDED:
Option to move Y position of RatingScale in code #1776
Added option of providing extra arguments to scipy.optimize functions when fitting from psychopy.data #1772
FIXED:
Problem with icon path in GLFW backend on linux commit:bbf515216
PUINT didn’t exist in older win32 package but was expected by pyglet
Better handling of conditions file with empty columns (from Excel adding them or from missing headers)
Mouse reporting incorrect position when using Mac Retina display commit:54ced9c26
sounddevice was failing to find portaudio.dylib on Mac
Released March 2018
ADDED:
Standalone distributions for Python 3.6 as well as Python 2.7
Using pip install psychopy now installs all the necessary dependencies, making it much easier to install to your own Python installation
Noise stimuli for presenting filtered noise in vision studies (thanks Andrew Schofield)
Second order stimuli for contrast modulated gratings (thanks Andrew Schofield)
Builder: Mouse now allows stimuli to be “clickable” turning them in to buttons
Builder: ShapeStim now handles additional shapes, like Cross (also takes names for shapes rather than just n vertices)
Monitors calibration files can now be saved/loaded in JSON format
CHANGED:
Image stimuli given an image of None (or blank in Builder) will now not display anything, whereas they previously showed a blank white (or colored) patch. To get that behaviour you can set the image to be color (in Builder) or “color” (in code).
A bug-fix release to solve a few machine-specific issues.
on some computers the data weren’t being saved if user pressed ‘Esc’ during experiment. commit:193ce541
fix for the “Unable to share contexts” error on machines that don’t support OpenGL shadow_window commit:a1c29d3a
pyo not always closing properly #1614
problem with non-ascii characters in conditions file name commit:32204a200
loading of preferences was failing if the audio backend wasn’t a valid option commit:c2d11477b
Builder demo images_blocks had wrong units for images #1601
no longer tell people to upgrade if their version is newer than the “latest” #1567
added support for newer PST box in ioHub (with 7 buttons not 5) commit:b9534a288
Monitor.linearizeLums() was raising an error due to a change in import name
stimuli not switching correctly to desired window in multi-window setups #1514
opencv movie backend had an error that ‘float’ object cannot be interpreted as an index #1510
cedrus box had error AttributeError: ‘ResponseDevice’ object has no attribute ‘status’ #1493
retina displays had some bad scaling. Now strongly recommend using retina=True commit:08163f78a
Released: Sept 2017
There was an error building the 1.85.3 release. Rather than building a bug-fix-inly release, version 1.85.3 has accidentally included some substantial code refactoring intended for the 1.86.0 release.
This version, which we will call 1.85.4 is to replace that 1.85.3 release and provides the same fixes (but not the code refactoring) that was intended in 1.85.3
Released: Aug 2017
This release fixes several bugs but it does also add 2 new dependencies:
json_tricks and future are bother required for this version
these are paving the way for updating Python3 (which will be enabled in 1.86.x series of releases)
FIXED:
Problem with text stimuli on Windows not rendering if large (was a bug in pyglet, fixed in 1.3.0b1)
Whitespace/indentation guides were not toggling on/off correctly in Coder commit:4ebbdb9c5
Added status property to labjack U3 in Builder scripts commit:b4d16d3d6
Fix to iohub.launchHubServer() under Linux commit:a9392f62e
Fix to config file for iViewX on ioHub commit:590fb20de
Released: June 2017
FIXED:
several errors with PsychoJS outputs from Builder (mostly thanks to Jon Roberts at Colorado):
nReps and randomisation now being handled correctly by PsychoJS commit:ad9a931
“correct” responses were being overwritten by non-responses commit:f903210
Text components that were static caused a crash (were erroneously given two single-quotes) commit:b399a50
Staircase would finish prematurely if nReversals was None commit:7148cad
PsychoPy would crash if sound device contained a unicode character commit:c1ff68f
FrameBufferObject not working correctly for dual-window setups commit:5e1c045
removed some annoying junk messages about sounddevice commit:e5ae2fc
Released: April 2017
FIXED:
early termination of experiments commit:f1bd15047
incorrect blank email field in info.php commit:d68c36bf9
incorrect component name sin endRoutine commit:e47d90a36
incorrect default units for image stims commit:8c32d1c9a
pyo not loading #1365
searching for ‘auto’ instead of ‘default’ device commit:d54d14fe
fixed duration calculation (bug in soundfile) for sounddevice commit:e0e01ad
textbox v textstim demo wasn’t working commit:b2913c124
error with colors when using TextStim with blendmode=’add’
windows installer could overwrite system path setting rather than append (NSIS short-string problem came back!)
freetype 32 bit dll is being provided again (was in matplotlib before but disappeared?)
Released: Feb 2017
Online experiments now supported using new PsychoJS library. See what is supported so far at PsychoPy online status
New sound engine using sounddevice
Checking of image paths for stimuli (did you forget to add “.jpg”?)
Copy/paste of a Component is now possible in Builder (right-click the component to copy, use the Experiment menu to paste). This essentially duplicates the component.
crash when increasing size of Flow in Builder #1272
bug in pysoundcard backend preventing file-based sounds playing #1299
excel outputs were failing to save on new versions of openpyxl #1276
useVersion() was not fetching new (uninstalled) versions correctly #1301
DotStim now has the option to reset the dots at the beginning of a trial commit:db6f53d50
better handling of blank cells in Excel conditions files (and xls files now supported)
Excel conditions files now import the “value” of a cell rather than the formula commit:7f753f5
pyserial and pyxid were incompatible versions
now packaging 1.2-maintenance branch of pyglet including Text memory fixes
Released: Sept 2016
Problem with renaming of Routines preventing experiment from re-loading #1248
Static Components gave error compiling script
some Keyboard Components (with variable “allowed keys” settings) gave error compiling script #1245
Mouse Component with “Save state at end of trial” gave indentation error #1253
Loops gave error compiling script if conditions file was a formatted string #1253
Standalone distributions were not including the correct pylink 1.1.0.4 and pyxid packages
Released: Sept 2016
Builder Keyboard component was treating non-response as correct answer. #1230 Thanks Jarrod
MovieStim2 (opencv) now compatible with newer versions of opencv (v3.x) #1223
SSL certificates for OS X causing failure to connect to osf.io for projects
dependencies added/updated in Standalone packages:
pyHook, pygame, pylink 0.3.2, (win32)
pysoundcard (OS X)
hello_world demo crashing the app on load
Movie outputs in gif, mp4, mov formats automatically, using moviepy #1228
Released: Aug 2016
Projects (new menu) which can sync files with Open Science Framework
Movies in Builder can now avoid loading audio (i.e. mute). As well as meaning your movie is genuinely silent this saves processing for the computer, so do it unless you need the sound!
menu item to create a .csv (data) file from a .psydat file; see Coder > Tools menu (also: Coder > Demo menu)
Builder experiments force a save before the end of the study so pressing the red stop button is less likely to lose data for you
You can now rename a Routine #1136
a Builder experiment setting to specify the version of PsychoPy to be used when running the experiment #1137
CHANGED:
MAJOR REFACTOR: A lot of code has been refactored to be more in line with a thing called PEP8. If that doesn’t mean anything to you don’t worry, it shouldn’t affect you. If you like that sort of thing, sorry we didn’t got further and get rid of camelCase. ;-)
setting ShapeStim vertices dynamically now requires an explicit assignment of the new vertex list to shape.vertices; this can be slow for filled shapes with many vertices. See shapes.py, selfx example.
Some file names and locations have changed. To update, replace OLD form in your scripts with NEW form:
OLD form –> NEW form
Deprecated since 2012, must now update: * from psychopy import calib –> from psychopy import monitors as calib (or just use monitors) * from psychopy import bits –> from psychopy.hardware.crs import bits * from psychopy import log –> from psychopy import logging
Newly deprecated (the old way still works but logs a warning): * from psychopy import _shadersPyglet –> from psychopy.visual import shaders * from psychopy import gamma –> from psychopy.visual import gamma * from psychopy import filters –> from psychopy.visual import filters
API change (only affects people who write their own Builder components): * from psychopy.app.builder.components._visual import VisualComponent –> from psychopy.app.builder.components._base import BaseVisualComponent
PyQt is now default over wx for dialog boxes (if either PyQt4 or PyQt5 are installed). Also fixed bug to support PyQt5
No Static Components are created by default (e.g. ISI). Have to add them manually
ShapeStim can properly fill arbitrary shapes (using tessellation); see new shapes.py Coder demo for examples.
Coder view now has better support for Retina display on OSX. visual.Window also has a new option to use retina for rendering in the experiment (off by default)
better warnings about VLC being wrong architecture for this python install
Code Components now indicate which ones actually contain code. #1204
bug with Monitor center not creating/saving monitor due to lack of SizePix #1208
window viewScale and viewPos combine correctly; viewScale handles negative values, mirror-image flips the window correctly (except for Text)
Builder experiments will always add their extension (to stop people overwriting them with the python script of the same experiment)
faster writing of multiple lines (bits) to the LabJack
sampling rate when using binocular mode in eyelink 1000 #1146
Aperture now supports infinite durations in Builder #1122
ColorCal II now supports newer pyserial version #1138
Erroneous extra data column added if experiment was aborted #1115
Ubuntu buglet with importing iohub devices caused by outdated psutils #1172
Released: Feb 2016
FIXED: * Mac Standalone was (still) not launching on some versions of OSX * MovieStim3 not working on all graphics cards (glPopAttrib). Thanks Bryan Cort and Frank Papenmeier for their help * MovieStim3 bug with movies that had no audio stream * Data saving is forced at the end of Builder Experiments even if script fails to exit properly (red stop button less likely to lose data) * Setting gamma on OSX 10.11 wasn’t working (Apple moved the lib to a new location). #1089 * Option to turn off audio in Movies from Builder when not needed (better performance and fewer shutdown-probs)
Released: Dec 2015 (NB 1.83.02 was never publicly released)
FIXED: * problems with the Mac Standalone failing to launch on some OSX versions * reduced impact of pyglet text memory leaks (make fewer updates). (NB There is still a leak in Pyglet’s code that we can’t fix) * several fixes to RatingScale * window viewScale and viewPos combine correctly; viewScale handles negative values, mirror-image flips the window correctly (except for Text) #1011 * fixed memory leak in sounds on 64bit Mac installation (error in pyo) * MovieStim3 was interacting badly with ShapeStim #981 * MovieStim3 was failing if no audio stream was present in the file #984 * PsychoPy app now gives a warning message if it can’t start due to permissions error #1055 * Faster rendering of MovieStim2 and Moviestim3 due to removal of mipmapping code
Released: Oct 2015
FIXED: * new bug with pygame sounds giving fileName not defined * several RatingScale bugs; reduce the memory leak (due to pyglet as used in TextStim) *
ADDED: voice-key capability, e.g., for word-naming studies; includes a demo, auxiliary functions (smoothing, zero-crossing, etc), and file-format options (all those supported by pyo)
CHANGED: remove support for google’s speech to text (the new google API is for chrome / chromium developers only)
CHANGED: deprecate psychopy.web.upload(); use the requests package instead: requests.post()
Released: Oct 2015
ADDED: MovieStim3 using an alternative backend that doesn’t require avbin, vlc or streamer. It just uses a couple of python libs and FFMPEG, which are relatively easy to package. Seems to have good performance too but this needs more testing
IMPROVED: speed to load psychopy.visual (“lazy loading” only the stimuli you use are loaded)
ADDED: RatingScale precision=60 allows display of time-based values (min:sec or hours:min). Values from .getRating() are decimal proportions (1 min: 59 seconds -> 1.9833 minutes).
ADDED: Coder view can now be set to read-only mode to prevent subjects accidentally altering study #945
ADDED: TextStim now has property boundingBox telling you the maximum area of the letters (defined by the font, not by the actual rendered letters) commit:35c168f1
ADDED: Aperture can now be created using images (anything that worked with ImageStim) #923 and can also be inverted so that opaque becomes transparent and vice versa #922 Thanks Thomas Emerling for both
ADDED: New visual stimulus EnvelopeGrating for contrast-modulated gratings. Thanks Andrew Schofield
ADDED: option to set mouse_exclusive mode (mouse locked to the window boundary and invisible) Thanks Suddha Sourav #898
FIXED: DotStim can now change field size on the fly
FIXED: several (but probably not all) annoying error messages that were unimportant
FIXED: Condition file in Builder no longer abbreviated. Thanks Mike #913
Released: Aug 2015
FIXED: TrialHandler wasn’t saving extraInfo (was overwritten during trials) #815
FIXED: don’t have pickle file re-saving itself when it comes back from pickling #833
FIXED: Mouse Component could crash data saving if no response was made #839
FIXED: memory leaks in MovieStim2 (opencv backend) #838 and #919
FIXED: checked that window positions are integers #854
FIXED: OSX “10.10” incorrectly looked older than “10.9” #866
FIXED: RatingScale would show “False” for scale description in some cases #870
FIXED: problem with microphone saving files that end with w, a or v #875
FIXED: MonitorCenter failing to create new monitor #887
FIXED: universal line endings in csv outputs files #889
FIXED: unicode in conditions files #892
FIXED: iohub not detecting Linux mouse events #894
FIXED: if output file is set to be stdout this should then be closed #902
FIXED: don’t abbreviate the path name of conditions files #913
FIXED: minor error in logging for rush() under win32 #914
FIXED: MonitorCenter won’t lock you out if given an invalid screen number #937
FIXED: mono++ mode in CRS Bits++/#/Display++ is now using full dynamic range (previously 8bit blue gun overlay was overriding the 16bit screen buffer)
Released: Feb 2015
Released: Feb 2015
FIXED: problem with MovieStim2 showing black box instead of movie on certain systems
FIXED: problem with Tobii eye tracker not closing calibration window (Sol)
FIXED: better timing for non-slip routines that follow dynamic routines (Jeremy) #822
FIXED: problem with stimuli (e.g. shapes) not appearing if a texture had just been created and not yet drawn
FIXED: pygame sound engine complained about “global variable loops not defined”
ENHANCED: Filename collision handling for ExperimentHandler (Richard Höchenberger)
CHANGED: for text data outputs that give delim=’t’ the file extension ‘.tsv’ is added instead of ‘.dlm’ (Richard Höchenberger)
Released: Jan 2015
ENHANCED: slightly faster rendering of movies for high-rate HD stimuli
CHANGED: ‘pandas’ is now a strict requirement for the ‘psychopy.data’ module
FIXED: Builder sounds from file no longer loop indefinitely
FIXED: Builder: microphone recordings are explicitly stopped at the end of every trial
FIXED: Static Components could become hidden by having unknown durations and then couldn’t be changed. Now they are always shown even when times are unknown (Jeremy)
ADDED: improved support for Cambridge Research Systems Display++ and Bits# devices:
Color++ and Mono++ modes now supported using shaders
fixed some bugs with search for identityLUT in Display++
ADDED: Psi adaptive staircase method (thanks Joseph Glavan for writing this)
ADDED: bidi and xlwt packages to the Standalone distribution
ADDED: support for Mouse.setPos() under pyglet back end (Jeremy)
ADDED: support for PST response box (Richard Höchenberger)
FIXED: extraInfo was not being saved in wide-text format
FIXED: Builder was not respecting order for drawing polygon - it was always drawn first
ADDED: Builder now supports ‘degFlat and ‘degFlatPos’ units and documentation has been added for these
Released: Dec 2014
ADDED: Sounds in Builder can now have a duration set by a variable (changing each repeat). The work on this may cause some systems to have a periodic ‘tick’ in the sound if they last longer than 10s (probably dependent on sound card and driver)
IMPROVED: RatingScale will always display a custom description (‘scale’) if provided by the user
ADDED: Monitor Center can now calibrate non-primary monitors
FIXED: components in Builder can now be ‘stopped’ at the same time as they are started and never show up (previously at least one frame was always required)
FIXED: several issues with Bits++ causing a rendering glitch and not being able to calibrate from Monitor Centre
FIXED: choice selection boxes stopped working in monitor centre (caused by hardware.crs.bits importing pyglet.gl)
FIXED: Bits# can be set to do gamma correction in the PsychoPy LUT (‘software’) rather than using the on-board gamma table file (‘hardware’)
FIXED: bug with monitor calib files not returning their linearization method correctly
ADDED: psychopy.qtgui as alternative to gui which doesn’t duffer from problem with choice boxes and pyglet clashing (thanks Sol)
FIXED: data files now correctly include the originPath (the path to the script that created them). Thanks Alex Holcombe for the fix
Released: Oct 2014
FIXED: bug with gamma not being set from the Monitor file
FIXED: MovieStim2 warnings about dropped frames were crippling the output window
FIXED: new issue (in 1.81.01) with several drop-down menus in Builder not allowing to select that option
Released: Oct 2014
FIXED: bug with rendering of Movies from Builder (autoDraw() not working)
ADDED: option to use new movie backend from Builder (there is now an option to select opencv or avbin for movie rendering)
FIXED: if MovieStim2 couldn’t load frames fast enough it ran slow (should drop frames but stay synchronised). (Sol)
FIXED: fix spurious warnings about GratingStim.__del__
FIXED: pyo audio crashed on windows if no mic/input was found (Sogo Hiroyuki)
ADDED: serial port device in iohub (Sol)
Released: Sept 2014
IMPROVED: cross-version compatibility:
In Builder experiments from ‘future’ versions can be opened and unknown objects will be ignored (but kept)
In Code you can now do import psychopy; psychopy.useVersion(‘X.XX.XX’) to switch to any version greater than 1.76.00 (including versions not installed and future versions). This only affects the lib, not the application. (Thanks Erik Kastman for most of the work on this)
IMPROVED: better unit tests for visual stimuli to prevent future bugs
CHANGED: MovieStim was right-left flipping movies and this has been corrected. If you had been working around that by setting flipVertical=True then you’ll need to undo that correction
IMPROVED: Can now select a subset of conditions in Builder loops and in data.importConditions() function (thanks Mike MacAskill for help)
IMPROVED: In Builder, loops that don’t reflect trials (e.g. stimuli within a trial or blocks of trials) can be flagged as such, resulting in neater data files
ADDED: support for additional hardware:
basic support for interacting with BlackBoxToolkit v2 psychopy.hardware.bbtk
CHANGED: added basic support for CRS Bits# in psychopy.hardware.crs. New way to interface with Bits++ as well, using a class rather than a Window argument. See demo in demos>hardware
labjack digital outputs can be used as a Parallel Port Component in Builder
the screen rendering can now include a warping step to simulate spherical, cylindrical or custom warping (Jay Borseth)
the screen now supports ‘frame packing’ whereby sequential frames can be packed into one, as the red, green and blue channels for monochrome high-rate projectors (Jay Borseth)
ioHub eye tracker interface for GazePoint GP3 (Martin Guest)
ioHub Serial device:
Support for simple fixed width or marker delimited serial rx stream -> device event parsing.
Demo created showing usage with PST Response box added (Richard Höchenberger)
ioHub ioSync device:
Use Teensy 3.0 / 3.1 MCU. Connect via USB 2.0.
8 / 8 digital inputs / outputs
8 analog inputs (~12 - 13 bit effective resolution)
1000 Hz sampling rate for analog and digital inputs.
Keyboard Host support (useful for testing keyboard delay variability from software alone)
IMPROVED packaging:
can now install on OSX using miniconda/anaconda distribution (Erik Kastman)
pyopencv (cv2) added to Standalone as an alternative to avbin
PySoundCard and PySoundFile added to Standalone
psutil added to Standalone
application is now compatible with wxPython 2.8, 2.9 and 3.0
ADDED: MovieStim2 stimulus type. Compared to MovieStim, improved performance and wider range of media encoding support has been reported from testing feedback on all OS’s.
IMPROVED: stimulus attributes:
Nearly all stimulus attributes now support new syntax, e.g. stim.pos = [0,0] as well as the previous stim.setPos([0,0]). All docs are update to reflect this change.
All numeric stimulus attributes now support operations. Use e.g. stim.pos += [0,0.5]. Read more in Operations.
Many more stimulus attributes can now be set after initialization. They have the same name as the init parameters. E.g. stim.win = mySecondWindow changes which Window the stimulus is drawn to
IMPROVED: logging
CHANGED: ‘log=None’ and ‘autoLog=None’ inherits from parents, with ‘visual.Window’ at the top of the hierarchy. None is now default for all stimuli and setter methods.
FIXED: removed unnecessary (e.g. duplicate) logging.
IMPROVED: unnamed stimuli are now given a default name in the logs for easier identification, e.g. “unnamed ShapeStim”.
IMPROVED: you can now specify the standard deviation (default=3) for gaussian mask in various stimuli by setting e.g. maskParams={‘sd’:5} during init or after init.
ADDED: language localization (Builder and Coder)
Can now display the app menus, tooltips, and so on in a language other than US English (selectable via prefs -> app -> locale)
Almost all displayed text can be translated (Jeremy Gray, Hiroyuki Sogo)
A Japanese translation is available (Hiroyuki Sogo)
Other translations will be easy to add; see online developer notes on using Poedit
IMPROVED: psychopy.ioHub
CHANGED: Keyboard device and events are more user-friendly. Note: This release is not backwards compatible with earlier versions of the ioHub Keyboard device or event data file. Please see documentation for details.
Backend integration between iohub and psychopy continues to improve.
ioHub can now be used in OS X 10.9 with PsychoPy Coder. NOTE: Must add Coder app to accessibility list.
Several bug fixes.
FIXED: several other minor bugs (that would have given exceptions if encountered). Thanks particularly to Philip Wiesemann for finding several of these
FIXED: machines that didn’t support shaders or framebuffer objects were raising an error on win.flip() if the useFBO argument was not manually set to False. Machines that don’t support the new rendering methods are now handled more gracefully
Released: Aug 2014
FIXED: bug with using numpy arrays as masks; they were being interpreted as floats but should have been bytes
Released: Aug 2014
FIXED: bug with timing of keys when using the timestamped argument
Released: June 2014
FIXED: problem with using the framebuffer object (nothing was rendered at all)
ENH: added support for using a stencil when the framebuffer object is turned on
Released: June 2014
IMPROVED: better unit tests for visual stimuli to prevent further regressions of the issues below
FIXED: machines that didn’t support shaders or framebuffer objects were raising an error on win.flip() if the useFBO argument was not manually set to False. Machines that don’t support the new rendering methods are now handled more gracefully.
FIXED: further fixes to greyscale coloring (some images were not correctly detected as greyscale by PIL so tests weren’t working)
FIXED: machines that didn’t support shaders or framebuffer objects were raising an error on win.flip() if the useFBO argument was not manually set to False. Machines that don’t support the new rendering methods are now handled more gracefully
FIXED: named colors were not interpreted correctly by the visual.Window (but worked fine for stimuli)
FIXED: the error message about TextBox/FontManager not working doesn’t show up any more
FIXED: reinstated the requirement that wx is version 2.8.x only until we get time to check 3.0 compatibility more deeply
Released: April 2014
FIXED: buglets in logging. Logging wasn’t encoding unicode correctly for console targets (but file targets were OK) and some duplicate messages were occurring for stimulus autologs
FIXED: buglet with GratingStim/PatchStim when texture was not a square power of two (was crashing due to incorrect global variable)
FIXED: ElementArrayStim was not updating its position using .setFieldPos()
Released: April 2014
FIXED: Shader code was ignoring opacity setting for ImageStim
FIXED: Mouse clock was not the same as PsychoPy’s general events clock (so out of sync) (Sol & Jeremy)
Released: April 2014
FIXED: ImageStim did not use its mask on some machines (nVidia and ATI?) or did not render at all on others (intel graphics?)
CHANGED: Sound object now checks if the sound is a note name before checking for file names (only affects cases where the file name was something like A.wav)
ADDED: Aperture now supports contains() and overlaps() methods
ADDED: Image/Grating masks can now also be ‘cross’ (Suddha Sourav)
FIXED: Unicode problem for microphone on non-English installs of win32
FIXED: StairHandler first reversal now changes step size correctly and added option not to use the initial 1-up,1-down regime (Jon maintains that you should though!) (thanks Nathanael Larigaldie)
FIXED: emulator LaunchScan uses new RatingScale syntax
Released: Mar 2014
FIXED: buglet with movie glPopAttrib() on Intel gfx cards (thanks Bryan Cort)
FIXED: problem trying to use FrameBufferObject (FBO) on Intel GMA graphics cards
FIXED: problem with ImageStim not respecting setColor() and setContrast()
FIXED: some stimuli were failing to switch to a second window when requested
FIXED: some rendering glitches with ShapeStim caused by interpolation settings (thanks to Soyogu Matsushita for finding this fix)
FIXED: automated import of gamma for known monitors, which was failing on some monitor calibration files
FIXED: a single-line conditions file is now imported correctly by Builder (Jeremy Gray)
IMPROVED: a Routine not included in a loop now saves its data to a default ‘loop’ (Jeremy Gray)
IMPROVED: Coder checks for consistency of end-of-line options (thanks Wilbert van Ham)
Released: Mar 2014
Improvements to user interface:
the glitch that prevented scrolling the Routine view is gone (win32)
dialog boxes in the Builder now have tabs for categories of controls
Code Components have much more space for each piece of code (again due to tabs)
ADDED: In Builder you can now customise the data filename/path in the Experiment Settings. Any variables in the expInfo dialog box can be used to create this path. See dataFileName for further info
ADDED: support for advanced rendering modes. Can now ‘add’ rather than average when using transparency. This is better for visual compound stimuli like plaids, and essential for colored anaglyph stimuli where the resulting image needs to be the sum of the left and right eye images.
ADDED: new visual unit options: ‘degFlatPos’ and ‘degFlat’ provide more accurate conversions from degrees to pixels for drawing stimuli (although they’re more accurate, accounting for the flat screen, they may look strange because 1 degree gets larger with greater eccentricity on a flat screen). The previous unit ‘deg’ still exists and remains default as, for many studies, these are expected
ADDED: wider support for the functions contains and overlaps. Most stimuli now have these methods. Also they can now be used irrespective of whether the stimulus and other object have the same units (they used only to work for units of pix)
ADDED: support for other shapes in the Aperture stimulus (and its Builder Component). You can either specify the number of vertices nVert and a size to get a regular polygon aperture, or you can provide a set of arbitrary vertices as your shape argument
CHANGED: Size of ‘square’ or ‘triangle’ apertures used to represent the radius of the circle on which their vertices lay. It is now a height/width as you would more likely expect. This means aperture code in scripts may need rewriting to be smaller.
IMPROVED: stimulus duration is now more precise when using duration (s) or time (s) although using nFrames option is still advised for brief stimuli
IMPROVED: there are now fewer irrelevant lines in the log file as stimuli are initially created
IMPROVED: Staircase loops in Builder now initialise just before the staircase is run, rather than at the start of the experiment. This means they can be controlled by an outer loop and, effectively, restarted
FIXED: ElementArrayStim can take Nx3 or 1x3 values for colors again
FIXED: variable names in Builder are now case-sensitive again (they were being forced to lower case when importing csv files)
FIXED: incorrect equation for the Cumulative Normal fitting function
FIXED: If your variable had a new line character in it this was causing a new line to be started in the csv data file. These are now handled correctly
ADDED: RatingScale markerStart position can be arbitrary, e.g., can start between items or beyond the end of scale
ADDED: RatingScale tickHeight can be used to control the height of tickMarks, including no tick marks (tickHeight=0)
ADDED: RatingScale marker=’hover’ is similar to HTML-style hovering over clickable elements
psychopy.visual.RatingScale Changes :
CHANGED: Builder: remove option: choiceLabelsAboveLine; change lowAnchorText, highAnchorText -> labels
CHANGED: skipping a rating now adds None as the final element in the history
CHANGED: the default minTime is shorter, now 0.4s
CHANGED: more info in the log when creating a rating scale object
CHANGED: removed showAnchors: now use labels=None (instead of showAnchors=False)
CHANGED: removed lowAnchorText & highAnchorText: now use labels=[‘leftAnchor’, ‘rightAnchor’] or with optional 3rd midpoint label
CHANGED: renamed several parameters: stretchHoriz -> stretch, textSizeFactor -> textSize, ticksAboveLine -> tickHeight, displaySizeFactor -> size, markerStyle -> marker, customMarker -> marker
CHANGED: removed showScale: now use scale=None (instead of showScale=False)
CHANGED: removed allowSkip: now use skipKeys=None (instead of allowSkip=False)
CHANGED: removed escapeKeys; no longer supported but it’s easy to implement (as now done in the coder demo)
Released: Dec 2013
FIXED: startup crash in 1.79.00
FIXED: long-standing memory leak in MovieStim
FIXED: fixed problem with MovieStim not displaying the image but playing the audio
ADDED: volume attribute to MovieStim (Frank Papenmeier)
FIXED: experiments were crashing if first line of a conditions file contained a float but the rest were integers
FIXED: QuestHandler.addResponse() should not try to replace existing intensity on first trial (Richard Höchenberger)
FIXED: Window’s viewPos and viewScale attributes could not be changed
FIXED: Builder code generation for Cedrus Box when user provided a limited set of available buttons
FIXED: multiple issues causing fatal errors when setting stimulus parameters (Pieter Moors and Damien Mannion)
FIXED: Builder experiments would crash under certain conditions when there was no ‘participant’ in the info dialog box (Philipp Wiesemann)
FIXED: bug toggling readme file window in Builder (Philipp Wiesemann)
FIXED: further fix to the Coder raising excessive ‘this file has changed’ warnings
FIXED: Component names now update on the Routine panel after being changed in a dialog (Philipp Wiesemann)
FIXED: bug importing conditions if the first row of numbers was the only float. (importFromConditions now uses numpy instead of matplotlib)
FIXED: further fix to the extra “file close” queries during shut-down
Released: Dec 2013
ADDED: attributes for some stimuli can now be updated using e.g. stim.pos = newPos rather than using stim.setPos(newPos) to make things more like standard Python (thanks Jonas Lindeløv). This version also involved some major restructuring behind the scenes that should not be visible to users (thanks Todd Jennings)
ioLab Systems button-box; refactor PsychoPy’s ioLabs code (Jeremy)
Cedrus button-box (tested on RB730)
parallel port output component
ADDED: option for sounds to loop
ADDED: volume argument for MovieStim so that sound can be muted (Frank Papenmeier)
ADDED: window now prevents system from sleep/screensaver on windows and OS X
ADDED: builder demo for mental rotation task
Two demos in psychopy.coder.visual.textbox
Requires: freetype lib (included in Standalone)
Advantages: Very fast update following text change; very precise character placement.
Disadvantages: Supports monospace fonts only.
IMPORTANT: TextBox is still being finalized and completed; expect to find (and please report) issues. API changes guaranteed.
FIXED: misaligned responses in csv output for QuestHandler (Zhili Zheng)
FIXED: bug when using ElementArrayStim with numpy 1.7.1. Most elements were receiving SF=0
FIXED: ‘semi-automatic’ calibration (thanks Flip Phillips)
FIXED: shut-down issues. Builder now remembers its last experiment and you don’t get multiple messages about the scripts that have changed
FIXED: bugs with MultiStairHandler that were making it unusable (in code and Builder)
FIXED: lists of key presses can now be considered correct (Ian Hussey)
FIXED: certain further cases of bitmap images appearing desaturated
FIXED: mono sounds now duplicate to both channels correctly
pyFileSec for uploading files to server using encryption (this is Jeremy’s module)
pandas on win32 is now v1.3 (was already this version on OS X)
pyxid now includes Jared’s upstream bug-fix
FIXED: many user interface tweaks, documentation and help string corrections (Philip Wiesemann)
FIXED: PsychoPy Coder view now closes the iohub process when the experiment script is terminated using ‘Stop’. (Sol Simpson)
FIXED: Builder use of single staircase loops now respects the min/max values
CHANGED: data curve fitting functions are now using scipy.optimise.curve_fit and should hopefully be more robust to local minima(?)
psychopy.iohub Changes :
currently supporting Elo brand Touch Screens.
any Elo model supporting the SmartSet protocol should work (Elo 2700 model used for testing to date)
Touch Events (TouchPress, TouchRelease, TouchMovement) are provided in a separate event stream
Touch and Mouse device events are independent of each other, so both devices can be used in parallel without interference
Touch screen calibration routine provided; calibration state can be saved to device hardware for persistence
See the demos.coder.iohub_extended Touch script for example of calibration graphics front end.
ADDED: Keyboard and Mouse events can be restricted to those events targeted at a PsychoPy Window. Currently supported on Windows and Linux only.
NEW: PsychoPy TrialHandler can now be used to feed experiment condition variables to the ioDataStore.
NEW: Device configuration file can now be specified to the launchHubServer() function when starting the ioHub Process.
NEW: Simple examples of how to use iohub within a Builder project using a Custom Code Component.
FIXED: Analog Input Event delay calculation error that was causing incorrect time correction to be applied to this event type.
NEW: LabJack AnalogInput interface now handles dropped samples and sampling rates that cause multichannel samples to be split between USB packets.
FIXED: Gaze position calculation fix for the SMI eye tracker interface during binocular tracking.
Head position within the 3D eye tracking head box can be visualized before and after calibration
Animated fixation target support added during calibration routine
Creates a set of Pandas Data Frames for device events, experiment messages, and experiment condition variables.
Filter, Group, Join data using the Pandas API.
Access event information with associated condition variable states.
filter event temporally based on start and end time criteria.
define an IP’s start and end time criteria using experiment message events, or experiment condition variable columns.
re-occurring IP’s supported.
overlapping IP’s supported.
filter Mouse, Eye Tracker, and Touch device events based on screen location.
circle, ellipse, rectangle, and general polygon ROI shapes supported. (ROI functionality is dependent on the shapely python package)
IMPORTANT: The ioDataStore->DataFrame API is still being designed and developed. Expect to find issues. API changes guaranteed.
Released: Aug 2013
FIXED: Image Components were showing up a pastel versions when no actual image was provided
FIXED: MultiStairHandler wasn’t working on Builder, and had insufficient data outputs when using wide-text csv files
FIXED: loops couldn’t be deleted from the Flow if their conditions file couldn’t be found (e.g. had been moved)
FIXED: setting of color values was not honouring the autolog setting (was always logging)
FIXED: gui choice boxes now handle unicode in their options as well as ASCII strings (thanks Anne Peschel)
FIXED: Scaling bug for SMI eye-tracker in binocular mode (thanks Sol)
FIXED: Builder Code Components that were showing up in unreadable, single-line boxes
IMPROVED: All Builder Dialogs now appear close to the top of the screen (so they don’t shoot off the bottom in most screens)
Released: Aug 2013
ADDED: option to preload during Builder scripts using Static Component, which uses StaticPeriod
class
ADDED: Polygon Component to Builder for drawing regular polygons (including simple lines)
ADDED: TrialHander can now fetch previous trials as well as future ones (thanks Mike MacAskill)
ADDED: BufferImageStim accepts mask and pos params (thanks Jeremy)
ADDED: generated Sounds (not sound files) now use a Hamming window to get rid of sharp onset/offset noises (thanks Jeremy)
ADDED: microphone component able to play & identify a marker tone (for vocal RT), compute loudness, compression (Jeremy)
ADDED: sound files: lossless compress / uncompress (requires flac executable installed separately) (Jeremy)
ADDED: microphone compress() audio recordings; requires flac download (not packaged with PsychoPy)
ADDED: new preference flac = system path for flac, e.g. c:/Program Files (x86)/FLAC/flac.exe (not always needed)
FIXED: greyscale images were being distorted during display since 1.77.00
FIXED: reduced number of queries when closing down and provides filenames of changed files in msg (thanks Piot Iwaniuk)
FIXED: movieStim.contains() and .overlaps() can work, requires that the visual.Window has units of pix
Released: July 2013
FIXED: problem with Builder Images appearing grey unless they were ‘constant’. This is a bug that was introduced in 1.77.00 with the faster loading of images.
FIXED: having a monitors folder with a unicode character in the path doesn’t break the app (thanks Sebastiaan Mathot)
Released: June 2013
pytables downgraded to 2.3.5 on Win32 (to be compatible with WinXP)
pyo upgraded to 0.6.6 on OSX and Win32
FIXED: The recent files list in Builder now contains recent files! (Thanks Piotr Iwaniuk)
FIXED: Timing issue with LC Tech eye-tracker in iohub
Released: June 2013
asynchronous process allows constant polling (not tied to refresh rates) in a way that won’t impact the rendering of your stimuli. It even runs on a separate CPU core if possible.
provides up/down/duration for key presses
provides unicode character (rather than simply key name for keyboard)
provides a unified API for eyetracker classes
provides async access to the parallel port
provides an alternative data output format (using hdf5) particularly useful for high-output streaming data (e.g. eye-trackers)
DEPRECATED: opensslwrap will soon be replaced by pyFileSec, a much-improved version of the same package (= file-oriented encryption)
IMPROVED: substantially (~40%) faster loading of RGB images from disk (by using byte format rather than float). May also allow storing of more images on graphics card than previously
ADDED: AdvancedMicrophone class to add and retrieve a high-frequency tone to indicate the start of recording (e.g., to allow accurate vocal RT estimation), with demo (Jeremy Gray)
REFACTORED: parallel port support. Support for Windows via inpout32/inpout64 and Linux via pyparallel added. Existing API maintained for single port usage, but new PParallel classes added to provide more flexibility when dealing with multiple ports. see parallel (Thanks Mark Hymers)
ADDED: MovieStim now updates its status attribute to FINISHED, in line with other stimuli
CHANGED: microphone default file names include milliseconds (to avoid two files with the same name)
ADDED: color-word speech-recognition demo (coder > input > speech_recognition.py)
ADDED: in Builder components dialog boxes, text that will be interpreted as code is displayed in monospace font
ADDED: remove and warn about trailing whitespace in Builder component values (but not Text fields)
ADDED: support for pyglet version 1.2 alpha (but 1.1.4 is still recommended - it appears to render faster)
ADDED: more sound.SoundPyo methods (get & set duration, volume, looping)
FIXED: event.Mouse() can obtain a default visual.Window(), if one has already been created
ADDED: Builder components generate a compile-time warning if a field’s value looks dynamic but its updating is constant (Jeremy Gray)
ADDED: better simulated scanner-noise in launchScan (just for fun)
ADDED: RatingScale.getHistory() returns intermediate time-stamped ratings; allows “continuous” ratings
CHANGED: RatingScale.getRating() no longer returns False prior to an accepted rating (now returns the currently selected value)
The compatibility changes in this release below are likely to affect very few users.
ADDED: Window.callOnFlip() function to allow arbitrary functions to be called, timed precisely to the point where the frame flip has occurred (see Coder Demos>Timing>callOnFlip)
FIXED: a scaling bug in RatingScale descriptions (Giuseppe Pagnoni)
ADDED: support for mirror-image text, and mirror-image BufferImageStim (Jeremy Gray)
ADDED: support for lower latency sound with the pyo library. For now pygame remains the default but this can be changed by setting the order in preferences>general>audio
CHANGED: PsychoPy Standalone is now being built using python 2.7.3 (rather than 2.6). Under OSX psignifit has been removed from this distribution, as have the libraries to create .mov files using Window.saveMovieFrames(). If you need those features then install the 1.75 Standalone and then update to 1.76 using the auto-update system.
ADDED: sound objects (either pygame or pyo) now support autologging
FIXED: a bug in the generation of the LMS color space conversion matrix. It seems nobody was actually using this for real, but if you were contact Jon for details!
CHANGED: choices are now displayed at the tick marks by default (instead of above the line). To restore the old behavior set labels=False. This does not affect experiments created in older versions of the builder.
ADDED: check box “choiceLabelsAboveLines” to the RatingScale component of the builder (advanced tab) to still have the choice labels above the line.
ADDED: arguments tickMarks and labels to RatingScale class to control where tick marks (for quantitative rating scales) should be placed at the line and how these should be labeled.
ADDED: argument ticksAboveLine to RatingScale class. Controls where the tick marks should be plotted (above or below the line).
FIXED: problem with unset exp.name (was causing wx.Dialog error “TypeError: String or Unicode type required” on new experiments)
CHANGED: exp.name is no longer available from Builder scripts (can use exp.getExpName() instead)
FIXED: problem with tiling of depth values for ElementArrayStim (thanks Yuri Spitsyn)
FIXED: Fix to setContrast for certain visual stimuli (Jonas Lindeløv)
FIXED: inability to launch scripts/experiments if the Mac Standalone was in a folder with a space in it
FIXED: Aperture Component now honours the ‘units’ (Hiroyuki Sogo)
FIXED: stimulus contains/overlaps functions now use stimulus ‘units’ and take stimulus orientation into account (Hiroyuki Sogo) NB if you had code in place to perform these corrections yourself you should now remove it!
FIXED: some data outputs were not honouring the ‘matrixOnly’ option (Mike MacAskill)
FIXED: when loading a psydat file of an ExperimentHandler the file automatically saved new copies of its csv/excel outputs. This no longer occurs (if loaded using misc.fromFile)
ADDED: timestamp option to event.waitKeys() (Jonas Lindeløv)
ADDED: a first-run wizard to check the system, report as html (somewhat experimental) (Jeremy Gray)
ADDED: a benchmark wizard (Tools menu) to test hardware & software, option to share on psychopy.org (Jeremy Gray)
ADDED: info.getRAM() (Jeremy Gray)
FIXED: Bug with not being able to play sounds of blank (infinite) duration from Builder
CHANGED: New Builder experiments will, by default, save a single csv file, a single psydat file and a single log file. Was previously also saving an Excel file (with one sheet per loop) and many psydat files (one per loop). Psydat files can still be used to re-output any format of data file.
IMPROVED: Experiment info dialog box easier to control now from experiment settings (user doesn’t need to write a dictionary by hand any more)
IMPROVED: Components in the Builder are now arranged in categories, including a special ‘Favorites’ category
IMPROVED: Code Components now support full syntax highlighting and code folding (but still aren’t quite big enough!)
ADDED: Builder undo/redo now gives info about what is going to be un/redone
ADDED: Window now supports a stereo flag to provide support for quad-buffers (advanced graphics cards only)
FIXED: bug with copying/pasting Routines that was breaking Flow in certain situations and corrupting the experiment file
FIXED: fatal typo in QuestHandler code (Gary Lupyan)
FIXED: data outputs for multiple key/mouse presses
ADDED: Microphone now supports stop to abort recording early (Jeremy Gray)
ADDED: beginning of error reporting when generating Builder experiments (thanks Piotr Iwaniuk)
FIXED: csv files now generated from Builder as expected not dlm files (tab-delimited)
IMPROVED: larger Code Component boxes (and fixed bug with being only one line on linux)
FIXED: Builder code syntax error when using Mouse set state ‘every frame’
FIXED: Builder was erroneously using ‘estimated duration’ for constraining non-slip timing
FIXED: Builder couldn’t open Experiment Settings if the expected screen number didn’t exist on this system
(Released: Aug 2012)
FIXED: the multiline text entry box in the Builder Text Component was broken (thanks Piotr Iwaniuk)
IMPROVED: serial (RS232) interface to fORP button box to avoid recording repeated presses (thanks Nate Vack). Does not affect use of fORP box from USB interface.
(Released: Aug 2012)
FIXED: bug leading to message: IndexError: string index out of range. This was caused by problem saving excel files
FIXED: bug leading to message: AttributeError: ImageStim instance has no attribute ‘rgbPedestal’. Was only occurring on non-shaders machines using the new ImageStim.
FIXED: problem loading old ExperimentHandlers that contained MultiStairHandlers
FIXED: Builder Text Components gave an error if letter height was a variable
ADDED: Window.flip() now returns the timestamp for the flip if possible (thanks Sol Simpson)
ADDED: misc.sph2cart (Becky Sharman)
ADDED: warning when user presents SimpleImageStim that seems to extend beyond screen (James McMurray)
(Released: July 2012)
FIXED: the pyo package is now included in the windows Standalone distribution (making audio input available as intended)
FIXED: error saving excel data from numpy.int formats (Erik Kastman)
FIXED: error at end of automated gamma calibration (which was causing a crash of the calibration script)
FIXED: misc.getDateStr() returns numeric date if there’s an error with unicode encoding (Jeremy)
FIXED: added partial support for non-ASCII keyboards (Sebastiaan Mathot)
(https://github.com/psychopy/psychopy)
Major changes (and compatibility changes):
ADDED: Long-wide data file outputs, which are now the default for all new Builder experiments.
ADDED: basic audio capture (and speech recognition via google!). Builder now has a Microphone Component to record inputs, but does not yet use the speech recognition facility. See psychopy.microphone library, coder demo “input/say_rgb.py” and Builder demo “voiceCapture”. (Jeremy)
ADDED: HSV color space for all stimuli
CHANGED: in Builder the default dotstim has signal dots=’same’ (once a signal dot, always a signal dot). Only affects new experiments.
Tweaks and fixes:
FIXED: missing parameter name in conditions file is detected, triggers more informative error message
ADDED: fORP: option asKeys to handle button presses as pyglet keyboard events (when using a serial port); faster getUniqueEvents()
ADDED: basic file encryption (beta) using RSA + AES-256; see API encryption for usage and caveats
ADDED: upload a file to a remote server over http (libs: web.upload) with coder demo, php scripts for server contrib/http/*
ADDED: Builder demo (dualRatingScales): show a stim, get two different ratings side by side [unpack the demos again]
ADDED: rating scale options: ‘maxTime’ to time-out, ‘disappear’ to hide after a rating; see new Builder demo
FIXED: rating scale bug: skipKeys was not handling ‘tab’ properly (no skip for tab-key, do skip for ‘t’, ‘a’, or ‘b’)
ADDED: new locale pref for explicitly setting locale, used in date format and passed to builder scripts (Jeremy, Hiroku Sogo)
ADDED: ‘enable escape’ option in experiment settings, default is ‘enabled’
ADDED: support for ElementArrayStim to use the same set of color spaces as other stimuli
CHANGED: removed python 2.4 version of sha1 digest from :class:’~psychopy.info.RunTimeInfo’
CHANGED: removed any need for PyOpenGL (pyglet.gl now used throughout even for pygame windows)
FIXED: Builder was ignoring changes to DotStim FieldPos (thanks Mike MacAskill)
FIXED: Builder Flow is smarter about Loops and now stops you creating ‘broken’ ones (e.g. Loops around nothing)
FIXED: MovieStim used from Builder was not working very well. Sounds continued when it was told to stop and the seek(0.0001) line was causing some file formats not to work from Builder only (those that don’t support seeking)
FIXED: Mouse component was not saving clicks in Builder experiments if forceEndOnClick was set to be False
FIXED: DotStim.setFieldCoherence was having no effect if noise dots were updating by ‘position’
(Released: April 2012)
FIXED: xlsx outputs were collapsing raw data from trials with non-response
FIXED: monitor gamma grids are now returned as arrays rather than lists (Ariel Rokem)
FIXED: bug with Window.setColor being incorrectly scaled for some spaces
FIXED: buglet preventing unicode from being used in TrialHandler parameter names (William Hogman) and saving to data files (Becky Sharman)
FIXED: StairHandler in Builder now saves the expInfo dictionary (Jeremy)
FIXED: can unpickle from either old-style or new-style data files (using psychopy.compatibility.fromFile()) (Erik Kastman)
(Released: March 2012)
FIXED: Joystick error when calling .getHat() or .getHats() (fixed by Gary Lupyan)
FIXED: BufferImageStim crashing on some linux boxes (due to bug with checking version of OpenGL) (fixed by Jonas Lindelov)
FIXED: fMRI emulator class was providing old-format key events (fixed by Erik Kastman and Jeremy)
FIXED: Win.setRecordFrameIntervals(True) was including the time since it was turned off as a frame interval (fixed by Alex Holcombe)
FIXED: using forceEndtrial from a mouse component in Builder wasn’t working (thanks Esteban for the heads-up)
FIXED: visual.Circle now respects the edges parameter (fixed by Jonas Lindelov)
FIXED: having IPython v0.12 should no longer crash psychopy on startup (Jeremy)
FIXED: non-ascii month-name (eg Japanese) from %B is now filtered out to avoid crash when compile a psyexp script (Jeremy)
ADDED: support for usb->serial devices under linux (William Hogman)
ADDED: option to vertically flip a BufferImageStim upon capture (esp for fMRI-related presentation of text) (Jeremy)
ADDED: option to play a sound (simple tone) during fMRI launchScan simulation (Jeremy)
(Released: Feb 2012)
CHANGED: Builder scripts now silently convert division from integers to float where necessary. That means 1/3=0.333 whereas previously 1/3=0. This is done simply by adding the line ‘from __future__ import division’ at the top of the script, which people using Coder might want to think about too.
FIXED: problem with loading .psydat files using misc.fromFile (thanks Becky)
FIXED: issue on OSX with updating from 1.70 binaries to 1.73 patch release
(Released: Jan 2012)
FIXED: problem with loops crashing during save of xlsx/csv files if conditions were empty
FIXED: bugs in Builder setting Dots coherence and direction parameters
FIXED: problem with strange text and image rendering on some combinations of ATI graphics on Windows machines
(Released: Jan 2012)
ADDED: loop property to MovieStim for coder only so far (thanks Ariel Rokem)
FIXED: buglet requesting import of pyaudio (thanks Britt for noticing and Dan Shub for fixing)
FIXED: problem with avbin (win32)
FIXED: problem with unicode characters in filenames preventing startup
FIXED: bug with ‘fullRandom’ method of TrialHandler missing some trials during data save
FIXED: Mouse.clickReset() now resets the click timers
FIXED(?): problem with avbin.dll not being found under 64-bit windows
(Released: Jan 2012)
CHANGED: psychopy.log has moved to psychopy.logging (Alex Holcombe’s suggestion). You’ll now get a deprecation warning for using psychopy.log but it will still work (for the foreseeable future)
ADDED: new hardware.joystick module supporting pyglet and pyjame backbends for windows and OSX. Demo in Not working on Linux yet. See demos>input
ADDED: support for CRS ColorCAL mkII for gamma calibrations in Monitor Center.
ADDED: data.ExpHandler to combine data for multiple separate loops in one study, including output of a single wide csv file. See demos>experimental control>experimentHandler. Support from Builder should now be easy to add
ADDED: ability to fix (seed) the pseudorandom order of trials in Builder random/full-random loops
ADDED: auto-update (and usage stats) can now detect proxies in proxy.pac files. Also this now runs in a low-priority background thread to prevent any slowing at startup time.
FIXED: bug when passing variables to Staircase loops in Builder
FIXED: mouse in Builder now ignores button presses that began before the ‘start’ of the mouse
FIXED: can now use pygame or pyaudio instead of pygame for sounds, although it still isn’t recommended (thanks Ariel Rokem for patch)
(rc1 Released: Nov 2011)
for gui.Dlg the .addField() method now has choices attribute
for gui.dlgFromDict if one of the values in the dict is a list it will be interpreted as a set of choices (NB this potentially breaks old code)
for info see API docs for psychopy.gui
ShapeStim now has a size parameter that scales the locations of vertices
new classes; Rect, Line, Circle, Polygon
FIXED: error with DotStim when fieldSize was a tuple and fieldShape was ‘sqr’
FIXED: calibration plots in Monitor Center now resize and quit as expected
FIXED: conditions files can now have lists of numbers [0,0]
FIXED: buglet with flushing mouse events (thanks Sebastiaan Mathot)
FIXED: Builder components now draw in order, from top to bottom, so lower items obscure higher ones
FIXED: problem with Patch Component when size was set to be dynamic
FIXED: problem with Builder loops not being able to change type (e.g. change ‘random’ into ‘staircase’)
FIXED: data from TrialHandler can be output with unicode contents (thanks Henrik Singmann)
(Released: Oct 2011)
CHANGED: the number of stimulus-resized and frames-dropped warnings is now limited to 5 (could become a preference setting?)
FIXED: Builder now allows images to have size of None (or ‘none’ or just blank) and reverts to using the native size of the image in the file
FIXED: occasional glitch with rendering caused by recent removal of depth testing (it was getting turned back on by TextStim.draw())
FIXED: opening a builder file from coder window (and vice versa) switches view and opens there
FIXED: problem showing the About… item on OS X Builder view
FIXED problem with loops not showing up if the conditions file wasn’t found
FIXED: runTimeInfo: better handling of cwd and git-related info
FIXED: rating scale: single click with multiple rating scales, auto-scale with precision = 1
IMPROVED: rendering speed on slightly older nVidia cards (e.g. GeForce 6000/7000 series) under win32/linux. ElementArrays now render at full speed. Other cards/systems should be unchanged.
IMPROVED: rating scale: better handling of default description, scale=None more intuitive
ADDED: new function getFutureTrial(n=1) to TrialHandler, allowing users to find out what a trial will be without actually going to that trial
ADDED: misc.createXYs() to help creating a regular grid of xy values for ElementArrayStim
(Released: Sept 2011)
CHANGED: Depth testing is now disabled. It was already being recommended that depth was controlled purely by drawing order (not depth settings) but this is now the *only* way to do that
CHANGED: The Builder representation of the Components onset/offset is now based on ‘estimatedStart/Stop’ where a value has been given. NB this does not affect the actual onset/offset of Components merely its representation on the timeline.
create, edit, and save conditions from within PsychoPy; save & load using pickle format
preview .csv or .xlsx conditions files (read-only)
ADDED: RatingScale method to allow user to setMarkerPosition()
ADDED: Builder dialogs display a ‘$’ to indicate fields that expect code/numeric input
ADDED: Text Component now has a wrapWidth parameter to control the bounding box of the text
ADDED: Opacity parameter to visual stimulus components in the Builder, so you can now draw plaids etc from the builder
FIXED: can edit or delete filename from loop dialog
FIXED: bug in RunTimeInfo (no longer assumes that the user has git installed)
FIXED: bug in BufferImageStim
FIXED: bug in Builder Ratingscale (was always ending routine on response)
FIXED: problem with nested loops in Builder. Inner loop was not being repeated. Loops are now only created as they are needed in the code, not at the beginning of the script
FIXED: rendering of many stimuli was not working beyond 1000 elements (fixed by removal of depth testing)
FIXED: mouse component now using start/duration correctly (broken since 1.70.00)
FIXED: when changing the texture (image) of a PatchStim, the stimulus now ‘remembers’ if it had been created with no size/sf set and updates these for the new image (previously the size/sf got set according to the first texture provided)
FIXED: putting a number into Builder Sound Component does now produce a sound of that frequency
FIXED: added ‘sound’,’misc’,’log’ to the component names that PsychoPy will refuse. Also a slightly more informative warning when the name is already taken
FIXED: Opacity parameter was having no effect on TextStim when using shaders
FIXED bug with MovieStim not starting at beginning of movie unless a new movie was added each routine
(Released: Aug 2011)
FIXED: buglet with Builder (1.70.00) importing older files not quite right and corrupting the ‘allowedKeys’ of keyboard component
FIXED: buglet with SimpleImageStim. On machines with no shaders some images were being presented strangely
FIXED: buglet with PatchStim. After a call to setSize, SF was scaling with the stimulus (for unit types where that shouldn’t happen)
(Released: Aug 2011)
NB This version introduces a number of changes to Builder experiment files that will prevent files from this version being opened by earlier versions of PsychoPy
CHANGED use of allowedKeys in Keyboard Component. You used to be able to type ‘ynq’ to get those keys, but this was confusing when you then needed ‘’space’’ or ‘’left’’ etc. Now you must type ‘y’,’n’,’q’, which makes it more obvious how to include ‘space’,’left’,’right’…
CHANGED dot algorithm in DotStim. Previously the signalDots=same/different was using the opposite to Scase et al’s terminology, now they match. Also the default method for noiseDots was ‘position’ and this has been changed to ‘direction’. The documentation explaining the algorithms has been clarified. (see :ref:’dots’)
CHANGED ‘MovieStim.playing’ property to be called ‘MovieStim.status’ (in keeping with other stimuli)
CHANGED names:
data.importTrialTypes is now data.importConditions
forceEndTrial in Keyboard Component is now forceEndRoutine
forceEndTrialOnPress in Mouse Component is now forceEndRoutineOnPress
trialList and trialListFile in Builder are now conditions and conditionsFile, respectively
‘window units’ to set Component units is now ‘from exp settings’ for less confusion
CHANGED numpy imports in Builder scripts:
only a subset of numpy features are now imported by default: numpy: sin, cos, tan, log, log10, pi, average, sqrt, std, deg2rad, rad2deg, linspace, asarray, random, randint, normal, shuffle
all items in the numpy namespace are available as np.*
if a pre-v1.70 script breaks due to this change, try prepending ‘np.’ or ‘np.random.’
CHANGED Builder use of $. $ can now appear anywhere in the field (previously only the start). To display a ‘$’ character now requires ‘$’ in a text field (to prevent interpretation of normal text as being code).
ADDED flexibility for start/stop in Builder Components. Can now specify stimuli according to;
variable values (using $ symbol). You can also specify an ‘expected’ time/duration so that something is still drawn on the timeline
number of frames, rather than time (s), for greater precision
an arbitrary condition (e.g. otherStim.status==STOPPED )
ADDED the option to use a raised cosine as a PatchStim mask (thanks Ariel Rokem)
ADDED a preference setting for adding custom path locations to Standalone PsychoPy
ADDED Dots Component to Builder interface for random dot kinematograms
ADDED wide-format data files (saveAsWideText()) (thanks Michael MacAskill)
ADDED option for full randomization of repeated lists (loop type ‘fullRandom’) (Jeremy)
ADDED builder icons can now be small or large (in prefs)
ADDED checking of conditions files for parameter name conflicts (thanks Jeremy)
ADDED emulate sync pulses and user key presses for fMRI or other scanners (for testing); see hardware/launchScan in the API reference, and Coder demos > experimental control > fMRI_launchScan.py (Jeremy)
ADDED right-clicking the expInfo in Experiment Settings tests & previews the dialog box (Jeremy)
ADDED syntax checking in code component dialog, right-click (Jeremy)
IMPROVED documentation (thanks Becky Sharman)
IMPROVED syntax for using $ in code snippets (e.g., “[$xPos, $yPos]” works) (Jeremy)
IMPROVED Flow and Routine displays in the Builder, with zooming; see the View menu for key-board shortcuts (Jeremy)
IMPROVED Neater (and slightly faster) changing of Builder Routines on file open/close
FIXED demos now unpack to an empty folder (Jeremy)
FIXED deleting an empty loop from the flow now works (Jeremy)
FIXED further issue in QUEST (the addition in 1.65.01 was being used too widely)
FIXED bug with updating of gamma grid values in Monitor Center
(Released: July 2011)
FIXED Builder keyboard component was storing ‘all keys’ on request but not all RTs
FIXED Aperture Component in Builder, which was on for an entire Routine. Now supports start/stop times like other components
IMPROVED Sound stimuli in Builder:
FIXED: sounds could be distorted and would repeat if duration was longer than file
ADDED volume parameter to sound stimuli
FIXED: duration parameter now stops a file half-way through if needed
FIXED buglet preventing some warning messages being printed to screen in Builder experiments
FIXED bug in the copying/pasting of Builder Routines, which was previously introducing errors of the script with invalid _continueName values
(Released: July 2011)
FIXED buglets in QUEST handler (thanks Gerrit Maus)
FIXED absence of pygame in 1.65.00 Standalone release
ADDED shelve module to Standalone (needed by scipy.io)
ADDED warnings about going outside the monitor gamut for certain colors (thanks Alex Holcombe)
(Released: July 2011)
ADDED improved gamma correction using L=a+(b+kI)**G formula (in addition to industry-standard form). Existing gamma calibrations will continue to use old equation but new calibrations will take the new extended formula by default.
ADDED MultiStairHandler to run multiple interleaved staircases (also from the Builder)
ADDED createFactorialTrialList, a convenience function for full factorial conditions (thanks Marco Bertamini)
CHANGED Builder keyboard components now have the option to discard previous keys (on by default)
CHANGED RatingScale:
ADDED: argument to set lineColor independently (thanks Jeff Bye)
CHANGED default marker is triangle (affects windows only)
ADDED single-click option, custom-marker support
FIXED: bug with precision=1 plus auto-rescaling going in steps of 10 (not 1)
FIXED errors with importing from ‘ext’ and ‘contrib’
FIXED error in joystick demos
FIXED bug in ElementArrayStim depth
FIXED bug in misc.maskMatrix. Was not using correct scale (0:1) for the mask stage
FIXED buglet in StairHandler, which was only terminating during a reversal
FIXED bug when loading movies - they should implicitly pause until first draw() (thanks Giovanni Ottoboni)
IMPROVED handling of non-responses in Builder experiments, and this can now be the correct answer too (corrAns=None). ie. can now do go/no-go experiments. (Non-responses are now empty cells in excel file, not “–” as before.)
Released: April 2011
ADDED option to return field names when importing a trial list (thanks Gary Lupyan)
ADDED Color-picker on toolbar for Coder and context menu for Builder (Jeremy Gray)
ADDED CustomMouse to visual (Jeremy Gray)
ADDED Aperture object to visual (thanks Yuri Spitsyn) and as a component to Builder (Jeremy Gray)
FIXED bug in RatingScale that prevented scale starting at zero
ADDED RatingScale “choices” (non-numeric); text size, color, font, & anchor labels; pos=(x,y) (Jeremy Gray)
CHANGED RatingScale internals; renamed escapeKeys as skipKeys; subject now uses ‘tab’ to skip (Jeremy Gray)
ADDED user-configurable code/output font (see coder prefs to change)
ADDED gui.Dlg now automatically uses checkboxes for bools in inputs (Yuri Spitsyn)
ADDED RatingScale component for Builder (Jeremy Gray)
pyxid (Cedrus button boxes)
labjack (good, fast, cheap USB I/O device)
egi (pynetstation)
pylink (SR Research eye trackers)
psignifit (bootstrapping, but only added on mac for now)
ADDED option for Builder components to take code (e.g. variables) as start/duration times
ADDED support for RGBA files in SimpleImageStim
IMPROVED namespace management for variables in Builder experiments (Jeremy Gray)
IMPROVED prefs dialog
IMPROVED test sequence for PsychoPy release (so hopefully fewer bugs in future!)
FIXED bug with ElementArrayStim affecting the subsequent color of ShapeStim
FIXED problem with the error dialog from Builder experiments not being a sensible size (since v1.63.03 it was just showing a tiny box instead of an error message)
FIXED Coder now reloads files changed outside the app when needed (thanks William Hogman)
FIXED Builder Text Component now respects the font property
FIXED problem with updating to a downloaded zip file (win32 only)
FIXED bug with ShapeStim.setOpacity when no shaders are available
FIXED long-standing pygame scaling bug
FIXED you can now scroll Builder Flow and still insert a Routine way to the right
Released: Feb 2011
FIXED bug in windows prefs that prevents v1.63.03 from starting up
FIXED bug that prevents minolte LS100 from being found
Released: Feb 2011
pyShell (the default, with great tooltips and help)
IPython (for people that like it, but beware it crashes if you create a psychopy.visual.Window() due to some threading issue(?))
ADDED scrollbar to output panel
FIXED small bug in QUEST which gave an incorrectly-scaled value for the next() trial
FIXED ElementArrayStim was not drawing correctly to second window in multi-display setups
FIXED negative sound durations coming from Builder, where sound was starting later than t=0
FIXED a problem where Builder experiments failed to run if ‘participant’ wasn’t in the experiment info dialog
Released: Feb 2011
ADDED clearFrames option to Window.saveMovieFrames
ADDED support for Spectrascan PR655/PR670
NB. this is likely to become the default unit for new users (set in prefs) but for existing users the unit set in their prefs will remain. That means that your system may behave differently to your (new user) colleague’s
IMPROVED handling of damaged experiments in Builder (they don’t crash the app any more!)
IMPROVED performance of autoLogging (including demos showing how to turn of autoLog for dynamic stimuli)
Released: Jan 2011
FIXED bug with ElementArrayStim.setFieldPos() not updating
FIXED mouse release problem with pyglet (since in 1.63.00)
This is possible even though you may not retrieve the mouse event until later (e.g. waiting for a frame flip). Thanks Dave Britton
FIXED bug with filters.makeGrating: gratType=’sqr’ was not using ori and phase
if users selected ‘skip this version’)
CHANGED optimisation routine from fmin_powell to fmin_bfgs. It seems more robust to starting params.
Released: Dec 2010
many more messages sent, but only written when log.flush() is called
rewritten backend to logging functions to remove file-writing performance hit
added autoLog and name attributes to visual stimuli
added setAutoDraw() method to visual stimuli (draws on every win.flip() until set to False)
added logNextFlip() method to visual.Window to send a log message time-stamped to flip
FIXED bug in color calibration for LMS color space (anyone using this space should recalibrate immediately) Thanks Christian Garber for picking up on this one.
FIXED bug with excel output from StairHandler
FIXED bug in ElemetArray.setSizes()
FIXED bug in running QuestHandler (Zarrar Shehzad)
FIXED bug trying to remove a Routine from Flow when enclosed in a Loop
FIXED bug with inseting Routines into Flow under Linux
FIXED bug with playing a MovieStim when another is already playing
CHANGED default values for Builder experiment settings (minor)
CHANGED ShapeStim default fillColor to None (from (0,0,0))
FIXED DotStim now supports a 2-element fieldSize (x,y) again
CHANGED phase of RadialStim to be ‘sin’ instead of ‘cosine’ at phase=0
FIXED rounding issue in RadialStim phase
FIXED ElementArrayStim can now take a 2x1 input for setSizes(), setSFs(), setPhases()
ADDED packages to standalone distributions: pyserial, pyparallel (win32 only), parallel python (pp), IPython
CHANGED Builder demos are now back in the distributed package. Use >Demos>Unpack… to put them in a folder you have access to and you can then run them from the demos menu
FIXED bug with ShapeStim initialisation (since 1.62.02)
parallel python (pp)
pyserial
ioLabs
ipython (for future ipython shell view in coder)
numpy=1.5.1, scipy=0.8.0, matplotlib=1.0
UPDATED: Builder demos
Released: Oct 2010
FIXED: problem with RadialStim causing subsequent TextStims not to be visible
FIXED: bug with saving StairHandler data as .xlsx
ADDED: option for gui.fileOpenDlg and fileSaveDlg to receive a custom file filter
FIXED: builder implementation of staircases (initialisation was buggy)
FIXED: added Sound.setSound() so that sounds in builder can take new values each trial
FIXED: when a Routine was copied and pasted it didn’t update its name properly (e.g. when inserted into the Flow it kept the origin name)
FIXED: color rendering for stimuli on non-shader machines using dkl,lms, and named color spaces
ADDED: data.QuestHandler (Thanks to Zarrar Shehzad). This is much like StairHandler but uses the QUEST routine of Watson and Pelli
CHANGED: TextStim orientation now goes the other way, for consistency with other stimuli (thanks Manuel Spitschan for noticing)**
FIXED: Problem with DotStim using ‘sqr’ fieldShape
ADDED: MovieStim now has a setMovie() method (a copy of loadMovie())
FIXED: problem with MovieStim.loadMovie() when a movie had already been loaded
Released: Sept 2010
ADDED: clicking on a Routine in the Flow window brings that Routine to current focus above
ADDED: by setting a loop in the Flow to have 0 repeats, that part of your experiment can be skipped
CHANGED: builder hides mouse now during fullscreen experiments (should make this a pref or setting though?)
FIXED: rendering problem with the Flow and Routine panels not updating on some platforms
ADDED: added .pause() .play() and .seek() to MovieStim (calling .draw() while paused will draw current static frame)
FIXED: bug in MovieStim.setOpacity() (Ariel Rokem)
FIXED: bug in win32 - shortcuts were created in user-specific start menu not all-users start menu
CHANGED: data output now uses std with N-1 normalisation rather than (scipy default) N
FIXED: bug when .psyexp files were dropped on Builder frame
FIXED: bug with Builder only storing last letter or multi-key button (e.g. ‘left’->’t’) under certain conditions
FIXED: when nReps=0 in Builder the loop should be skipped (was raising error)
CHANGED: mouse icon is now hidden for full-screen Builder experiments
FIXED: Builder was forgetting the TrialList file if you edited something else in the loop dialog
ADDED: visual.RatingScale and a demo to show how to use it (Jeremy Gray)
pynetstation (import psychopy.hardware.egi)
ioLab library (import psychopy.hardware.ioLab)
ADDED: trial loops in builder can now be aborted by setting someLoopName.finished=True
ADDED: improved timing. Support for blocking on VBL for all platforms (may still not work on intel integrated chips)
FIXED: minor bug with closing Coder windows generating spurious error messages
ADDED: ‘allowed’ parameter to gui.fileOpeNDlg and fileCloseDlg to provide custom file filters
Released: August 2010
psychopy.data now has importTrialList(fileName) to generate a trial list (suitable for TrialHandler) from .xlsx or .csv files
Builder loops now accept either an xlsx or csv file for the TrialList
TrialHandler and StairHandler now have saveToExcel(filename, sheetName=’rawData’, appendFile=True). This can be used to generate almost identical files to the previous delimited files, but also allows multiple (named) worksheets in a single file. So you could have one file for a participant and then one sheet for each session or run.
CHANGED: for builder experiments the trial list for a loop is now imported from the file on every run, rather than just when the file is initially chosen
CHANGED: data for TrialHandler are now stored as masked arrays where possible. This means that trials with no response can be more easily ignored by analysis
FIXED: bug opening loop properties (bug introduced by new advanced params option)
FIXED: bug in Builder code generation for keyboard (only when using forceEnd=True but store=’nothing’)
CHANGED: RunTimeInfo is now in psychopy.info not psychopy.data
CHANGED: PatchStim for image files now defaults to showing the image at native size in pixels (making SimpleImageStim is less useful?)
CHANGED: access to the parameters of TrialList in the Builder now (by default) uses a more cluttered namespace for variables. e.g. if your TrialList file has heading rgb, then your components can access that with ‘$rgb’ rather than ‘$thisTrial.rgb’. This behaviour can be turned off with the new Builder preference ‘allowClutteredNamespace’.
FIXED: if Builder needs to output info but user had closed the output window, it is now reopened
FIXED: Builder remembers its window location
CHANGED: Builder demos now need to be fetched by the user - menu item opens a browser (this is slightly more effort, but means the demos aren’t stored within the app which is good)
CHANGED: loops/routines now get inserted to Flow by clicking the mouse where you want them :-)
ADDED: you can now have multiple Builder windows open with different experiments
ADDED: you can now copy and paste Routines form one Builder window to another (or itself) - useful for reusing ‘template’ routines
FIXED: color of window was incorrectly scaled for ‘named’ and ‘rgb256’ color spaces
ADDED: quicktime movie output for OSX 10.6 (10.5 support was already working)
ADDED: Mac app can now receive dropped files on the coder and builder panels (but won’t check if these are sensible!!)
ADDED: debugMode preference for the app (for development purposes)
ADDED: working version of RatingStim
Patch Released: July 2010
FIXED: harmless error messages caused by trying to get the file date/time when no file is open
CHANGED: movie file used in movie demo (the chimp had unknown copyright)
FIXED: problem with nVidia cards under win32 being slow to render RadialStim
FIXED bug in filters.makeGrating where gratType=’sqr’
FIXED bug in new color spaces for computers that don’t support shaders
ADDED option to Builder components to have ‘advanced’ parameters not shown by default (and put this to use for Patch Component)
Patch Released: June 2010
ADDED: Code Component to Builder (to insert arbitrary python code into experiments)
ADDED: visual.RatingScale ‘stimulus’ (thanks to JG). See ratingScale demo in Coder view
FIXED: TrialHandler can now have dataTypes that contain underscores (thanks fuchs for the fix)
FIXED: loading of scripts by coder on windows assumed ASCII so broke with unicode characters. Now assumes unicode (as was case with other platforms)
FIXED: minor bugs connecting to PR650
Patch Released: May 2010
FIXED: Bug in coder spitting out lots of errors about no method BeginTextColor
FIXED: Buglet in rendering of pygame text with our shaders
FIXED: broken link for >Help>Api (reference) menuitem
Released: May 2010
CHANGED: color handling substantially. Now supply color and colorSpace arguments and use setColor rather than setRGB etc. Previous methods still work but give deprecation warning.
ADDED: Colors can now also be specified by name (one of the X11 or web colors, e.g. ‘DarkSalmon’) or hex color spec (e.g. ‘#E9967A’)
REMOVED: TextStimGLUT (assuming nobody uses GLUT backend anymore)
ADDED: ‘saw’ and ‘tri’ options to specify grating textures, to give sawtooth and triangle waves
FIXED: visual.DotStim does now update coherence based on setFieldCoherence calls
FIXED: bug in autoupdater for installs with setuptools-style directory structure
FIXED: bug in SimpleImageStim - when graphics card doesn’t support shaders colors were incorrectly scaled
CHANGED: console (stdout) default logging level to WARNING. More messages will appear here than before
ADDED: additional log level called DATA for saving data info from experiments to logfiles
ADDED: mouse component to Builder
ADDED: checking of coder script for changes made by an external application (thanks to Jeremy Gray)
ADDED: data.RuntimeInfo() for providing various info about the system at launch of script (thanks to Jeremy Gray)
FIXED: problem with rush() causing trouble between XP/vista (thanks to Jeremy Gray)
AMERICANIZATION: now consistently using ‘color’ not ‘colour’ throughout the project! ;-)
FIXED: problem with non-numeric characters being inserted into data structures
CHANGED: stimuli using textures now automatically clean these up, so no need for users to call .clearTextures()
Released: March 2010
FIXED build error (OS X 10.6 only)
Released: Feb 2010
FIXED buglet in gui.py converting ‘false’ to True in dialogs (thanks Michael MacAskill)
FIXED bug in winXP version introduced by fixes to the winVista version! Now both should be fine!!
Released: Feb 2010
CHANGED ext.rush() is no longer run by default on creation of a window. It seems to be causing more probs and providing little enhancement.
FIXED error messages from vista/7 trying to import pywintypes.dll
Released: Feb 2010
FIXED minor bug with the new psychophysicsStaircase demo (Builder)
FIXED problem with importing wx.lib.agw.hyperlink (for users with wx<2.8.10)
FIXED bug in the new win.clearBuffer() method
CHANGED builder component variables so that the user inputs are interpreted as literal text unless preceded by $, in which case they are treated as variables/python code
CHANGED builder handling of keyboard ‘allowedKeys’ parameter. Instead of ‘[‘1’,’2’,’q’]’ you can now simply use ‘12q’ to indicate those three keys. If you want a key like ‘’right’’ and ‘’left’’ you now have to use ‘$[‘right’,’left’]’
TWITTER follow on https://twitter.com/psychopy
FIXED? win32 version now compatible with Vista/7? Still compatible with XP?
Released: Feb 2010
no more site prefs (user prefs only)
changed key bindings for compileScript(F5), runScript(Ctrl+R), stopScript(Ctrl+.)
ADDED: full implementation of staircase to Builder loops and included a demo for it to Builder
CHANGED: builder components now have a ‘startTime’ and ‘duration’ rather than ‘times’
ADDED: QuickTime output option for movies (OSX only)
ADDED: script is saved by coder before running (can be turned off in prefs)
ADDED: coder checks (and prompts) for filesave before running script
ADDED: setHeight to TextStim objects, so that character height can be set after initialisation
ADDED: setLineRGB, setFillRGB to ShapeStim
ADDED: ability to auto-update form PsychoPy source installer (zip files)
ADDED: Monitor Center can be closed with Ctrl-W
ADDED: visual.Window now has a setRGB() method
ADDED: visual.Window now has a clearBuffer() method
ADDED: context-specific help buttons to Builder dialogs
ADDED: implemented of code to flip SimpleImageStim (added new methods flipHoriz() and flipVert())
ADDED: Butterworth filters to psychopy.filters (thanks Yaroslav Halchenko)
ADDED: options to view whitespace, EOLs and indent guides in Coder
ADDED: auto-scaling of time axis in Routines panel
IMPROVED: Splash screen comes up faster to show the app is loading
FIXED: bug in RadialStim .set functions (default operation should be “” not None)
FIXED: on mac trying to save an unchanged document no longer inserts an ‘s’
FIXED: bug with SimpleImageStim not drawing to windows except #1
FIXED: one bug preventing PsychoPy from running on vista/win7 (are there more?)
CHANGED: psychopy.filters.makeMask() now returns a mask with values -1:1, not 0:1 (as expected by stimulus masks)
RESTRUCTURED: the serial package is no longer a part of core psychopy and is no longer required (except when hardware is actually being connected). This should now be installed as a dependency by users, but is still included with the Standalone packages.
RESTRUCTURED: preparing for further devices to be added, hardware is now a folder with files for each manufacturer. Now use e.g.:
from psychopy.hardware.PR import PR650
from psychopy.hardware.cedrus import RB730
(Released: Nov 2009)
CHANGED: gamma handling to handle buggy graphics drivers on certain cards - see note below
CHANGED: coord systems for mouse events - both winTypes now provide mouse coords in the same units as the Window
FIXED: mouse in pyglet window does now get hidden with Window allowGUI=False
FIXED: (Builder) failed to open from Coder view menu (or cmd/ctrl L)
FIXED: failure to load user prefs file
ADDED: keybindings can be handled from prefs dialog (thanks to Jeremy Gray)
ADDED: NxNx3 (ie RGB) numpy arrays can now be used as textures
FIXED: MovieStim bug on win32 (was giving spurious avbin error if visual was imported before event)
NB. The changes to gamma handling should need no changes to your code, but could alter the gamma correction on some machines. For setups/studies that require good gamma correction it is recommended that you recalibrate when you install this version of PsychoPy.
(Released: Sep 09)
FIXED (Builder) bug with loading files (monitor fullScr incorrectly reloaded)
FIXED (Coder) bug with Paste in coder
FIXED (Builder) bug with drop-down boxes
FIXED (Builder) bug with removed routines remaining in Flow and InsertRoutineDlg
MOVED demos to demos/scripts and added demos/exps (for forthcoming Builder demos)
CHANGED (Builder) creating a new file in Builder (by any means) automatically adds a ‘trial’ Routine
FIXED (Builder) various bugs with the Patch component initialisation (params being ignored)
FIXED (Builder) better default parameters for text component
(Released: Sep 09)
FIXED bug loading .psydat (files component variables were being saved but not reloaded)
removed debugging messages that were appearing in Coder output panel
FIXED long-standing problem (OS X only) with “save unchanged” dialogs that won’t go away
FIXED bug with ‘cancel’ not always cancelling on “save unchanged” dialogs
ADDED warning dialog if user adds component without having any routines
ADDED builder now remembers its location, size and panel sizes (which can be moved around)
(Released: Sep 09)
FIXED problem creating prefs file on first use
FIXED problem with removing (identical) routines in Flow panel
FIXED problem with avbin import (OS X standalone version)
(Released: Sep 09)
ADDED A preview of the new application structure and GUI
ADDED performance enhancements (OS X now blocks on vblank, all platforms rush() if user has permissions)
ADDED config files. These are already used by the app, but not the library.
ADDED data.getDateStr() for convenience
FIXED bug on certain intel gfx cards (shaders now require float extension as well as opengl2.0)
FIXED bug scaling pygame text (which caused pygame TextStims not to appear)
BACKWARDS NONCOMPAT: monitors is moved to be a subpackage of psychopy
BACKWARDS NONCOMPAT: added ‘all_mean’ (and similar) data types to TrialHandler.saveAsText and these are now default
ADDED TrialType object to data (extends traditional dicts so that trial.SF can be used as well as trial[‘SF’])
converted docs/website to sphinx rather than wiki (contained in svn)
FIXED bug with MovieStim not displaying correctly after SimpleImageStim
FIXED incorrect wx sizing of app(IDE) under OS X on opening
CHANGED license to GPL (more restrictive, preventing proprietary use)
CHANGED gui dialogs are centered on screen rather than wx default position
new dependency on lxml (for saving/loading builder files)
(Released: Jul 09)
DotStim can have fieldShape of ‘sqr’, ‘square’ or ‘circle’ (the first two are equiv)
CHANGED interpreters in all .py scripts to be the same (#!/usr/bin/env python). Use PATH env variable to choose non-default python version for your Python scripts
CHANGED pyglet textures to use numpy->ctypes rather than numpy->string
FIXED systemInfo assigned on Linux systems
(Released: Jul 09)
FIXED initialisation bug with SimpleImageStimulus
FIXED “useShaders” buglet for TextStim
CHANGED IDE on win32 to run scripts as processes rather than imports (gives better error messages)
ADDED mipmap support for textures (better antialiasing for down-scaling)
CHANGED win32 standalone to include the whole raw python rather than using py2exe
(Released: Jun 09)
ADDED SimpleImageStimulus for simple blitting of raw, unscaled images
ADDED collection of anonymous usage stats (e.g.: OSX_10.5.6_i386 1.00.02 2009-04-27_17:26 )
RENAMED DotStim.setDirection to setDir for consistency (the attribute is dir not direction)
FIXED bug with DotStim updating for ‘walk’ and ‘position’ noise dots (thanks Alex Holcombe)
FIXED bug with DotStim when fieldSize was initialised with a list rather than an array
FIXED buglet using event.getKeys in pygame (nothing fetched if pyglet installed)
CHANGED image loading code to check whether the image is a file, rather than using try..except
FIXED buglet raising trivial error messages on closing final window in IDE
FIXED problem pasting into find dlg in IDE
(Released: Feb 09)
FIXED buglet in windows standalone installer
ADDED ShapeStim, for drawing geometric stimuli (see demos/shapes.py and new clockface.py)
ADDED support for the tristate ctrl bit on parallel ports (thanks Gary Strangman for the patch)
ADDED standalone installer support for windows (XP, vista?)
FIXED minor bug in Window.flip() with frame recording on (average -> numpy.average)
FIXED minor bug in sound, now forcing pygame.mixer to use numpy (thanks Konstantin for the patch)
FIXED visual stimulus positions forced to be floats on init (thanks C Luhmann)
FIXED bug with IDE not closing properly (when current file was not right-most)
ADDED parallel.readPin(pinN) so that parallel port can be used for input as well as output
FIXED bug in parallel.setPortAddress(addr)
ADDED check for floats as arguments to ElementArrayStim set___ methods
CHANGED: frame time recording to be *off* by default (for plotting, for Window.fps() and for warnings). To turn it on use Window.setRecordFrameIntervals(True), preferably after first few frames have elapsed
IMPROVED detection of the (truly) dropped frames using log.console.setLevel(log.WARNING)
FIXED bug that was preventing bits++ from detecting LUT on the Mac (ensure screen gamma is 1.0 first)
FIXED buglet with .setRGB on stimuli - that method should require an operation argument (def=None)
ADDED fieldDepth and depths (for elements, relative to fieldDepth) as separate arguments to the ElementArrayStim
ADDED options to DotStim motions. Two args have been added: * signalDots can be ‘different’ from or ‘same’ as the noise dots (from frame to frame) * noiseDots determines the update rule for the distractor dots (random ‘position’, ‘walk’, ‘direction’) * dotLife now works (was previously just a placeholder). Default is -1 (so should be same as before) see Scase, Braddick & Raymond (1996) for further info on the importance of these
ADDED options to event.getKeys * keyList to limit which keys are checked for (thanks Gary Strangman) * timeStamped=False/True/Clock (thanks Dave Britton)
CHANGED pyglet key checking now returns ‘1’ as the key irrespective of numpad or otherwise (used to return ‘1’ or ‘NUM_1’)
FIXED bug in event.py for machines where pyglet is failing to import
REMOVED AlphaStim (after a long period of ‘deprecated’)
FIXED bug introduced with clipping of text in 0.96.01 using textstimuli with shaders under pygame
FIXED bug with rendering png alpha layer using pyglet shaders
FIXED problem with write errors running demos from Mac IDE
ADDED frameWidth to textStim for multiline
ADDED setRecordFrameIntervals, saveFrameTimes() to Window and misc.plotFrameIntervals()
FIXED had accidentally made pygame a full dependency in visual.py
FIXED MovieStim was being affected by texture color of other stimuli
FIXED window now explicitly checks for GL_ARB_texture_float before using shaders
FIXED pygame back-end so that can be used as a valid alternative to pyglet (requires pygame1.8+ and PyOpenGL3.0+, both included in mac app)
CHANGED default sound handler to be pygame again. Although pyglet looked promising for this it has turned out to be buggy. Timing of sounds can be very irregular and sometimes they don’t even play Although pygame has longer overall latencies (20-30ms) it’s behaviour is at least robust. This will be revisited one day when i have time to write driver-specific code for sounds
FIXED image importing - scaling from square image wasn’t working and CMYK images weren’t imported properly. Both are now fine.
ADDED sound.Sound.getDuration() method
FIXED spurious (unimportant but ugly) error messages raised by certain threads on core.quit()
FIXED further bug in sound.Sound on win32 (caused by thread being polled too frequently)
FIXED new bug in notebook view (introduced in 0.95.8)
FIXED bug in sound.Sound not repeating when play() is called repeatedly
IDE uses improved notebook view for code pages
IDE line number column is larger
IDE SaveAs no longer raises (inconsequential) error
IDE Cmd-S or Ctrl-S now clears autocomplete
ADDED misc.cart2pol()
ADDED highly optimised ElementArrayStim, suitable for drawing large numbers of elements. Requires fast OpenGL 2.0 gfx card - at least an nVidia 8000 series or ATI HD 2600 are recommended.
FIXED bug in calibTools with MonitorFolder (should have been monitorFolder)
FIXED bug in Sound.stop() for pyglet contexts
FIXED bug in running scripts with spaces in the filename/path (Mac OS X)
DISABLED the setting of gamma if this is [1,1,1] (allows the user to set it from a control panel and not have this adjusted)
FIXED gamma setting on linux (thanks to Luca Citi for testing)
FIXED bug in TextStim.setRGB (wasn’t setting properly after text had been created)
FIXED bug searching for shaders on ATI graphics cards
FIXED - now no need to download avbin for the mac IDE installation
FIXED bug in event.clearEvents() implementation in pyglet (wasn’t clearing)
FIXED - psychopy no longer disables ipython shortcut keys
FIXED bug in sound.Sound initialisation without pygame installeds
ADDED core.rush() for increasing thread priority on win32
ADDED Window._haveShaders, XXXStim._useShaders and XXXStim.setUseShaders
FIXED crashes on win32, running a pyglet context after a DlgFromDict
ADDED gamma correction for pyglet contexts (not tested yet on linux)
~/.PsychoPy/IDE (OS X, linux)
<Docs and Settings>/<user>/Application Data/PsychoPy
FIXED bug in text rendering (ATI/win32/pyglet combo only)
FIXED minor bug in handling of images with alpha channel
ADDED a .clearTextures() method to PatchStim and RadialStim, which should be called before de-referencing a stimulus
CHANGED input range for numpy array textures to -1:1
ADDED sysInfo.py to demos
FIXED quitting PsychoPyIDE now correctly cancels when saving files
FIXED problem with saving files from the IDE on Mac
FIXED Cmd-C now copies from the output window of IDE
even nicer IDE icons (thanks to the Crystal project at everaldo.com)
FIXED bug in the shaders code under pyglet (was working fine in pygame already)
(refactored code to use a template visual stimulus)
FIXED linux bug preventing repeated dialogs (thanks Luca Citi)
REWRITTEN stimuli to use _BaseClass, defining ._set() method
MAJOR IMPROVEMENTS to IDE: * Intel mac version available as app bundle, including python * FIXED double help menu * cleaned code for fetching icons * fixed code for updating SourceAssistant (now runs from .OnIdle())
pyglet: * can use multiple windows and multiple screens (see screensAndWindows demo) * sounds are buffered faster and more precisely (16ms with <0.1ms variability on my system) * creating sounds in pyglet starts a separate thread. If you use sounds in your script you must call core.quit() when you’re done to exit the system (or this background thread will continue). * pyglet window.setGamma and setGammaRamp working on win and mac (NOT LINUX) * pyglet event.Mouse complete (and supports wheel as well as buttons) * pyglet is now the default context. pygame will be used if explicitly called or if pyglet (v1.1+) isn’t found * pyglet can now get/save movie frames (like pygame) * TextStims are much cleaner (and a bit bigger?) Can use multiple lines too. New method for specifying font
added simpler parallel.py (wraps _parallel which will remain for now)
removed the C code extensions in favour of ctypes (so compiler no longer necessary)
converted “is” for “==” where appropriate (thanks Luca)
Window.getMovieFrame now takes a buffer argument (‘front’ or ‘back’)
monitor calibration files now stored in HOME/.psychopy/monitors rather than site-packages
Window.flip() added and supports the option not to clear previous buffer (for incremental drawing). Window.update() is still available for now but can be replaced with flip() commands
updated demos
bug fixes for OS X 10.5 and ctypes OpenGL
new improved OS X installer for dependencies
moved to egg for OS X distribution
added rich text ctrl to IDE output, including links to lines of errors
IDE now only opens one copy of a given text file
improved (chances of) sync-to-vertical blank on windows without adjusting driver settings (on windows it’s still better to set driver to force sync to be safe!)
added center and radius arguments to filters.makeMask and filters.makeRadialMatrix
better screen handling (can specify which screen a window should appear in)
fewer dependencies (takes care of pygame and opengl)
faster sound production
TextStims can be multi-line
NO GAMMA-SETTING as yet. Don’t use this backend if you need a gamma-corrected window and aren’t using Bits++.
If you leave winType as None PsychoPy tries to use Pygame, Pyglet, GLUT in that order (when Pyglet can handle gamma funcs it will become default). Can be overridden by specifying winType.
turned off depth testing for drawing of text (will simply be overlaid in the order called)
changes to TextStim: pyglet fonts are loaded by name only, not filename. PsychoPy TextStim now has an additional argument called ‘fontFiles=[]’ to allow the adding of custom ttf fonts, but the font name should be used as the font=” “ argument.
updated some of the Reference docs
fixed problem with ‘dynamic loading of multitextureARB’ (only found on certain graphics cards)
improved detection of non-OpenGL2.0 drivers
now automatically uses shaders only if available (older machines can use this version but will not benefit from the speed up)
slight speed improvement for TextStim rendering (on all machines)
new requirement of PyOpenGL3.0+ (and a graphics card with OpenGL2.0 drivers?)
much faster implementation of setRGB, setContrast and setOpacity (using fragment shaders)
images (and other textures) need not be square. They will be automatically resampled if they are not. Square power-of-two image textures are still recommended
Fixed problem in calibTools.DACrange caused by change in numpy rounding behaviour. (symptom was strange choice of lum values for calibrations)
numpy arrays as textures currently need to be NxM intensity arrays
multitexturing now handled by OpenGL2.0 rather than ARB
added support for Cedrus response pad
if any component of rgb*contrast>1 then the stimulus will be drawn as low contrast and b/y (rgb=[0.2,0.2,-0.2]) in an attempt to alert the user that this is out of range
Fixed issue with stairhandler (it was terminating based only on the nTrials). It does now terminate when both the nTrials and the nReversals [or length(stepSizes) if this is greater] are exceeded.
Minor enhancements to IDE (added explicit handlers to menus for Ctrl-Z, Ctrl-Y, Ctrl-D)
fixed some source packaging problems for linux (removed trademark symbols from serialposix.py and fixed directory capitalisation of IDE/Resources in setup.py). Thanks to Jason Locklin and Samuele Carcagno for picking them up.
numerous minor improvements to the IDE
reduced the buffer size of sound stream to reduce latency of sound play
fixed error installing start menu links (win32)
new source .zip package (switched away from the use of setuptools - it didn’t include files properly in a source dist)
Fixed problem on very fast computers that meant error messages weren’t always displayed in the IDE
have been trying (and failing) to make scripts run faster from the IDE under Mac OS X. Have tried using threads and debug modules (which would mean you didn’t need to import all the libs every time). All these work fine under win32 but not under OS X every time :-( If anyone has a new idea for how to run a pygame window in the same process as the IDE thread I’d love hear it
removed the messages from the new TextStim stimuli
fixed bug in IDE that caused it to crash before starting if pythonw.exe was run rather than python.exe on first run(!)
improvements to the source assistant window (better help and now fetches function arguments)
Known Problems: * The IDE isn’t collecting all errors that are returned - a problem with the process redirection mechanism? FIXED in 0.92.3
fixed minor bug in IDE - wouldn’t open if it had been closed with no open docs.
fixed problem with pushing/popping matrix that caused the stimuli to disappear (only if a TextStim was rendered repeatedly)
‘sequential’ ordering now implemented for data.TrialHandler (thx Ben Webb)
moved to pygame fonts (with unicode support and any TT font on the system). The switch will break any code that was using TextStim with lineWidth or letterWidth as args. Users wanting to continue using the previous TextStim can call textStimGLUT instead (although I think the new pygame fonts are superior in every way).
improved IDE handling of previous size (to cope with being closed in the maximised or minimised state, which previously caused the window not to return)
fixed minor bug in using numpy.array as a mask (was only working if array was 128x128)
faster startup for IDE (added threading class for importing modules)
fixed very minor bug in IDE when searching for attributes that don’t exist
fixed minor bug where scripts with syntax errors didn’t run but didn’t complain either
IDE FileOpen now tries the folder that the current file is in first
IDE removed threading class for running scripts
fixed the problem of stimulus order/depth. Now the default depth is set (more intuitively) by the order of drawing not creating.
IDE added recent files to file menu
IDE minor bug fixes
IDE rewrite of code inspection using wx.py.instrospect
added find dialog to IDE
added ability of data.FunctionFromStaircase to create unique bins rather than averaging several x values. Give bins=’unique’ (rather than bins=someInteger). Also fixed very minor issue where this func would only take a list of lists, rather than a single list.
fixed IDE problem running filenames containing spaces (only necessary on win32)
added reasonable SourceAssistant to IDE
added a stop button to abort scripts in IDE
IDE scripts now run as sub process rather than within the main process: slower but safer
added an autoflushing stdout to psychopy.__init__. Where lots of text is written to stdout this may be a problem, but turing it off means that stdout doesn’t get properly picked up by the IDE :-(
PsychoPy now has its own IDE!! With syntax-highlighting, code-folding and auto-complete!! :-)
gui.py had to be refactored a little but (I think) should not be noticed by the end user (gui.Dlg is now a subclass of wx.Dialog rather than a modified instance)
gui.Dlg and DlgFromDict now end up with an attribute .OK that is either True or False
fixed bug in data.StairHandler that could result in too many trials being run (since v0.89)
resolved deprecation warning with wxPython (now using “import wx”)
used the new numpy.mgrid commands throughout filters and visual modules
sorted out the rounding probs on RadialStim
fixed import bug in calibtools.py
fixed new bug in the minVal/maxVal handling of StairHandler (where these have not been specified)
changed the default console log level to be ERROR, due to too much log output!
fixed new bug in Sound object
changed the default log file to go to the script directory rather than site-packages/psychopy
sounds now in stereo and a new function to allow you to choose the settings for the sound system.
LMS colors (cone-isolating stimuli) are now tested and accurate (when calibrated)
@Verbose@ flags have become log.info messages
@Warn@ commands have become log.warning messages
added minVal and maxVal arguments to data.StairHandler so that range can be bounded
@import psychopy@ no longer imports anything other than core
fixed bug in new numpy’s handling of bits++ header
optimised DotStim to use vertex arrays (can now draw several thousand dots)
optimised RadialStim to use vertex arrays (can increase radial resolution without much loss)
fixed problem with MonitorCenter on OSX (buttons not working on recent version of wxPython)
added sqrXsqr to RadialStim and made it default texture
fixed a minor bug in RadialStim rendering (stimuli failed to appear under certain stimulus orderings)
changed RadialStim size parameter to be diameter rather than radius (to be like AlphaStim)
namechange: introduced PatchStim (currently identical to AlphaStim which may one day become deprecated)
distributed as an .egg
upgraded for numpy1.0b and scipy0.50. Hopefully those packages are now stable enough that they won’t need further PsychoPy compatibility changes
NEW (alpha) support for radial patterns rather than linear ones
changed Clock behaviour to use time.clock() on win32 rather than time.time()
fixed a bug in the shuffle seeding behaviour
added a noise pattern to background in monitor calibration
NEW post-install script for Win32 installs shortcuts to your >>Start>Programs menu
NEW parallel port code (temporary form) using DLportIO.dll can be found under _parallel
NEW hardware module with support for fORP response box (for MRI) using serial port
for thisTrial in allTrials:
but a consequence was that .nextTrial() will be deprecated in favour of .next(). Also, when the end of the trials is reached a StopIteration is raised. * added the ability to seed the shuffle mechanism (and trial handler) so you can repeat experiments with the same trial sequence
rewritten code for bits++ LUT drawing, raised by changes in pyOpenGL(2.0.1.09) call to drawpixels
minor change to exit behaviour. pyGame.quit() is now called and then sys.exit(0) rather than sys.exit(1)
bug fixes in type handling (from Numeric to numpy)
changes to gui caused by new threading behaviour of wxPython and PyGame (DlgFromDict must now be a class not a function).
switching numeric code to new python24 and new scipy/numpy. MUCH nicer
new (reduced requirements): * numpy 0.9 or newer (the replacement for Numeric/numarray) * numpy 0.4.4 or newer * pyOpenGL * pygame * PIL * matplotlib (for data plotting)
tested (and fixed) compatibility with wxPython 2.6. Will now be using this as my primary handler for GUIs
ADDED ability to quit during run of getLumSeries
FIXED filename bug in makeMovies.makeAnimatedGIF
slight change to monitors that it uses testMonitor.calib as a default rather than default.calib (testMonitor.calib is packaged with the installation)
FIXED bug in setSize. Wasn’t updating correctly
ADDED ability to append to a data file rather than create new
bits.lib (from CRS) is now distributed directly with psychopy rather than needing separate install)
ADDED db/log/linear step methods to StairHandler
ADDED logistic equation to data.FitFunction
ADDED a testMonitor to the monitors package so that demos can use it for pseudo*calibrated stimuli.
REDUCED the attempt to use _bits.pyd. Was only necessary for machines that had bits++ monitor center
ADDED basic staircase method
CHANGED dlgFromDict to return None on cancel rather than 0
CHANGED the description of sin textures so that the centre of the patch had the color of dkl or rgb rather than the edge. (Effectively all sin textures are now shifted in phase by pi radians). -Demos removed from the main package - now ONLY distributed as a separate library
FIXED toFile and fromFile so they work!?
Demos being distributed as a separate .zip file (may be removed from the main package someday)
ADDED toFile, fromFile, pol2cart functions to psychopy.misc
CHANGED waitKeys to return a list of keys (usually of length one) so that it’s compatible with getKeys
serial is now a subpackage of psychopy and so doesn’t need additional installation
REMOVED the code to try and query the graphics card about the scr dimensions. From now on, if yo uwish to use real world units, you MUST specify scrWidthPIX and scrWidthCM when you make your visual.Window
ADDED flag to data output to output matrixOnly (useful for matlab imports)
REVERTED the default numeric handler to be Numeric rather than numarray (because it looks like numarray hasn’t taken off as much as thought)
FIXED minor bug in text formatting for TrialHandler.saveAsText()
CHANGED visual.Window so that the monitor argument prefers to receive a Monitor object (rather than just a dictionary) or just the name of one. MonitorCenter makes it so easy to create these now that they should be the default.
CHANGED Photometer initialisation behaviour - used to raise an error on a fail but now sets an internal attribute .OK to False rather than True
MonitorCenter now complete. Plots and checks gamma correction.
can write movies out to animated gifs(any platform) or mpg/avi (both windows only)
CHANGED monitor key dkl_rgb_matrix to dkl_rgb (also for lms)
ADDED code for PR650 to get the monitor color calibration and calculate the color conversion matrices automatically. Will be implemented via the MonitorCenter application.
ADDED pyserial2.0 as a subpackage of psychopy so that it needn’t be separately installed
Much improved MonitorCenter with DKL and LMS calibration buttons and matrix output
Double-click installer for Mac now available
ADDED ability to capture frames from the window as images (tif, jpg…) or as animated GIF files :) see demo
ADDED ability for elements in DotStim to be any arbitrary stimulus with a methods for .setPos(), .draw()
FIXED the circular mask for DotStim
FIXED bug in the new text alignment method (was being aligned but not positioned?!)
FIXED minor bug in MonitorCenter (OS X only)
ADDED a GUI application for looking after monitors and calibrations. SEE MonitorCenter.py in the new package monitors
MOVED “psychopy.calib” subpackage to a whole separate package “monitors”. Calibration files will now be stored alongside the calibration code. This makes it easier to develop the new calibration GUI application that I’m working on. Also means that if you delete the psychopy folder for a new installation you won’t lose your calibration files.
ADDED optional maxWait argument to event.waitKeys()
CHANGED TextStim to take the font as a name rather than font number
ADDED alignment to text stimuli (alignVert, alignHoriz)
CHANGED waitKeys to implicitly clear keys from the event queue so that it only finds the first keypress after its called. As result it now returns a single character rather than list of them
CHANGED visual.Window so that it no longer overrides monitor settings if arguments are specified. Easy now to create a monitor in the monitors GUI and use that instead
ADDED the circular mask for DotStimulus