Psychtoolbox interfaces between Matlab or Octave and the computer hardware. The
PTB core routines provide high performance 2D and 3D graphics with the highest
color and luminance precision, timing precision and control. This both on standard
displays, as well as with special visual stimulators, and with High Dynamic Range
displays, and with a wide variety of Virtual/Augmented Reality devices. They expose
raw OpenGL commands, support video playback and capture, as well as low-latency
precisely timed audio playback and capture. They facilitate the collection of observer
responses with high timing precision via various input modalities like keyboard, mouse,
game controllers, multi-touch touch screens, response boxes, gaze trackers, and digital /
analog i/o equipment. Ancillary helper routines support common needs like color space
transformations, calibration, and psychometric procedures like, e.g., the QUEST threshold
seeking algorithm and others.
Various 3rd party frameworks and higher level toolboxes are built on top of Psychtoolbox
to make implementation of research data collection especially easy in specific sub-domains
of neuroscience. For beginners or certain domains there also exist user friendly 3rd party
graphical user interfaces, e.g., PsyBuilder.
You can also run some of your Psychtoolbox studies online, via VPixx Labmaestro service under
https://vpixx.com/products/labmaestro-packngo.
Psychtoolbox has many active users, an active forum, and is widely
cited. The current version supports at least Matlab R2025a on Linux, Windows
and macOS, and Octave 6 and later on Linux, and Octave 7.3 on Windows, and Octave 9 on macOS.
Psychtoolbox 3.0.22.1 “Little Miss Sunshine!” was released at 11th July 2025.
You can download it as a zip file from the following link:
https://github.com/Psychtoolbox-3/Psychtoolbox-3/releases/download/3.0.22.1/3.0.22.1.zip
This release is strongly recommended to upgrade to if you are a user of
Psychtoolbox 3.0.20 on macOS or Windows, as it allows most reliable and
smooth use under the new paid software license subscription model.
Also if you are a user of Matlab R2025a, as it fixes various compatibility issues.
The complete development history can be found in our GitHub repository.
The release tag is “3.0.22.1”, with the full tree and commit logs under the URL:
https://github.com/Psychtoolbox-3/Psychtoolbox-3/tree/3.0.22.1
This Psychtoolbox release was partially sponsored by Mathworks under the year 2024/2025
contract for improving compatibility with Matlab R2025a.
Highlights:
-
Compatibility fixes for Matlab R2025a with its new JavaScript based GUI and WebGL based
graphics and plotting system, and the split process design between compute and GUI.
Substantial work was needed to repair ListenChar, CharAvail, GetChar and FlushEvents,
and to avoid annoying beep tones on key presses under macOS + R2025a. GetChar should
work mostly as in the past, although limitations persist in some areas, some possibly
hard or impossible to fix. A part of this compatibility work was sponsored by Mathworks.
-
Brightness control of at least internal displays now also works on Apple Silicon Macs.
All:
-
GetChar()/CharAvail()/ListenChar()/FlushEvents()
: Do no longer use the Java path on
Matlab R2025a and later. Matlab R2025a and later ditched the Java based GUI in favor of
a completely new GUI and graphics backend, based apparently on JavaScript + the Chromium
embedded “web browser” framework + WebGL rendering. It also split off all GUI and plotting
code into a separate Matlab application process from the main process that executes the
Matlab interpreter with all user script code and all of Psychtoolbox, completely isolating
these two processes from each other, with only a restricted and proprietary communication
link between them (most likely based on local IP loopback connections).
This makes our GetCharJava implementation completely non-functional, with no known way to
salvage it. As of now, I wouldn’t know how to do an alternative implementation hooking
into the new JavaScript GUI, but first investigation suggests it is likely impossible, at
least without significant help from Mathworks - they’d need to implement special purpose
functionality for us.
Therefore we now fall back to our KeyboardQueue based GetChar et al. implementation, just
as on Octave, on MS-Windows, and for Matlab in “matlab -nodesktop” mode.
New limitations caused by this:
-
The same keyboard queue related restrictions as on MS-Windows, ie. no concurrent use of
KbQueues for the default keyboard and GetChar/CharAvail/FlushEvents/ListenChar on macOS
and Linux.
-
Less reliable handling of composed characters, or no such handling at all. Less extra
information as aux info, only timestamp, no other modifier keys state reporting etc.
-
Suppression of typed characters spilling into the Matlab command window does no longer work
in GUI mode on Matlab R2025a and later. Such is life…
-
IsGUI(): Fix for Matlab R2025a and its non-Java GUI.
-
No longer add the Psychtoolbox/PsychJava/ folder to Matlab’s Java class path on Matlab
R2025a and later, as we can no longer use Java for our purposes, so no point in adding
our Java class to the Matlab path.
-
PlayMoviesWithoutGapDemo1.m: Refine for more robustness with short movies.
This should help issues like described in:
https://psychtoolbox.discourse.group/t/invalid-movie-handle-provided-error-message/5719
-
Add MacBoynToLMS()
to invert LMSToMacBoyn()
. Contributed by David Brainard.
-
Various other smaller refinements, bug fixes and documentation updates.
Linux:
-
Psychtoolbox was built and tested against Matlab R2025a and Octave 6.4 under
Ubuntu 22.04.5-LTS. Now only works on Ubuntu 22.04-LTS and later.
-
PsychLinuxConfiguration(): Adapt for Matlab R2025a and later. No need for JOGL
“Java OpenGL” related workarounds anymore for R2025a+, now that WebGL is used.
Matlab still needs the “broken override Vulkan loader” workaround though.
Windows:
-
Psychtoolbox was built against Matlab R2024b and tested against Matlab R2025a.
-
help GStreamer: Update link to MS-Windows MSVC GStreamer 1.22.
The old download was removed, so adapt link from 1.22.5 to 1.22.12 as closest
to the last tested version.
-
Add robustness of GStreamer setup if GStreamer version 1.26 or later is used.
GStreamer 1.26 changed the default installation location on MS-Windows. Normally
the proper location of GStreamer runtimes is communicated to Psychtoolbox via an
environment variable. If this isn’t the case in some cases then a probe sequence
for common default installation locations was used. The probe sequence is now
updated to search and hopefully find GStreamer 1.26+ at its default install locations,
avoiding startup failure.
macOS:
-
Psychtoolbox was built and tested against native Matlab R2025a and against native
Octave 9.4 from HomeBrew, on macOS 13.7.5 Ventura for Intel Macs, and on macOS 15.5
Sequoia for Apple Silicon Macs.
-
Fix keyboard input focus restoration after closing opaque fullscreen onscreen windows
on Intel Macs. Substantial work was needed to achieve this with the new Matlab R2025a
dual-process design (Psychtoolbox process separate from Matlab GUI process).
-
Fix a new bug, where in fullscreen window mode on R2025a, every keypress causes an
annoying beep tone from macOS. This is also due to the new split dual-process design,
but workarounds have been implemented to hopefully fix it.
-
Screen: Implement new method for Screen('ConfigureDisplay', 'Brightness')
which
also works on (at least) the internal displays of Apple Silicon Macs. Also removed
support for ‘AutoBrightnessMode’ which did not ever work with any macOS release, so
give up on it.
-
TwoStateQuery(): Cleanup, and reenable good questdlg() for Matlab R2025a+ on macOS
for Apple Silicon Macs.
Enjoy!
Psychtoolbox 3.0.22.0 “Oh wie schoen ist Panama!” was released at 28th May 2025.
You can download it as a zip file from the following link:
https://github.com/Psychtoolbox-3/Psychtoolbox-3/releases/download/3.0.22.0/3.0.22.0.zip
This release is strongly recommended to upgrade to if you are a user of
Psychtoolbox 3.0.20 on macOS or Windows, as it allows most reliable and
smooth use under the new paid software license subscription model.
The complete development history can be found in our GitHub repository.
The release tag is “3.0.22.0”, with the full tree and commit logs under the URL:
https://github.com/Psychtoolbox-3/Psychtoolbox-3/tree/3.0.22.0
This Psychtoolbox release was sponsored by Mathworks under the year 2024/2025
contract for significant enhancements, sponsoring the OpenXR hand tracking
support as major new feature.
-
This release no longer supports the Ubuntu 20.04-LTS “Focal Fossa” family of
Linux operating system distributions, and siblings like Debian GNU/Linux 11
“Bullseye”. In fact, it requires Ubuntu 22.04.5-LTS “Jammy Jellyfish” with all
updates installed, or Debian GNU/Linux 12 “Bookworm” and equivalent distributions,
ie. Linux distributions where all software components are at least as modern
and recent as those in Ubuntu 22.04.5-LTS. Psychtoolbox Mex files will no
longer work on older distributions, or if some would appear to work, they might
show various subtle and not so subtle malfunctions - iow. they woud be unfit
for research grade data collection.
-
Psychtoolbox for Matlab on Linux now also requires a paid software subscription
license, while the Octave variant for Linux remains free of cost to use.
Highlights:
-
New fast, mostly seamless fixed refresh rate switching on Linux with AMD graphics.
-
Hand tracking performance optimizations.
All:
-
Software subscription licenses can now also be activated during setup with
user email+password of the account of the license manager self service portal.
Psychtoolbox will fetch the correponding license key automatically.
-
License management now contains functionality needed for implementation of
campus licenses, unattended auto setup of licenses, and educational licenses.
-
Performance optimizations for the articulated hand and finger tracking for
OpenXR, which was introduced in Psychtoolbox 3.0.20.4. Now operates 20-30 times
faster, doing its job in less than 0.5 msecs on average hardware.
-
PR655parsespdstr(): Fix to handle zero values in measurements correctly.
Contributed by Danny Garside @da5nsy thanks!
-
Various other smaller refinements, bug fixes and documentation updates.
Linux:
-
Psychtoolbox was built and tested against Matlab R2024b and Octave 6.4 under
Ubuntu 22.04.5-LTS. Now only works on Ubuntu 22.04-LTS and later.
-
Added workarounds for bugs in AMD’s Vulkan driver AMDVLK that have been introduced
due to mistakes by AMD’s developers since version v-2023.Q2.2 and later, starting
in May 2023. These bugs prevent 16 bpc ultra-high precision framebuffers to be
reported as supported in both SDR and HDR mode of operation, with some driver
versions even 10 bpc support is lacking in SDR Standard Dynamic Range mode! The
bug prevents all AMD RDNA 3+ graphics cards with Navi 30 or later gpu family
from using these 16 bpc framebuffers, and thereby from achieving up to 12 bpc
effective output precision. Our new workaround tricks the faulty drivers into
supporting these modes anyway and thereby restores the 10 bpc modes in SDR/HDR
and tries to restore 16 bpc modes for up to 12 bpc effective output color
precision in SDR and HDR again. While this has been confirmed to work on gpu’s
of the AMD Vega gpu family and earier models, the situation on AMD Navi / RDNA
gpu’s ist still unclear at time of this release. There might be additional bugs
in the AMDVLK drivers still preventing this. Unfortunately the tester for this
feature on AMD RDNA gpu’s has not reported back in reasonable time and we have
to release now, with this question still to be answered.
-
Support for rapid, seamless video refresh rate switching on modern FreeSync
capable AMD graphics cards, when used with a Variable Refresh Rate capable
display device, connected via DisplayPort, e.g. suitable FreeSync, GSync and
“Vesa DisplayPort Adaptive Sync” capable monitors. This can be triggered for
a whole X-Screen with one or multiple active outputs via the command
Screen('Framerate', screenId, 2, reqHz);
or on a individual per-output basis via
Screen('ConfigureDisplay', 'FineGrainedSwitchRefreshRate', screenId, outputId, reqHz);
This allows to request an instant switch of the displays to a new video refresh rate
reqHz
within the variable refresh rate range supported by the display monitor,
e.g., to run dynamic animations or movie playback at a specific exact rate, and
switch that rate on a trial-by-trial basis if needed, with switching times in the
range of only one to a few video refresh cycle duration. All AMD graphics cards
since the Sea Island gpu family from around the year 2014 should be supported.
The new test and demo VRRFixedRateSwitchingTest.m
demonstrates and tests this.
-
Fix touchscreen enumeration for touchscreens operated by the “Intel Precision Touch
and Stylus Daemon” iptsd version 3 and later. GetTouchDeviceIndices()
now
filters out the wrong touchscreen device and enumerates the correct devices.
Windows:
- Psychtoolbox was built and tested against Matlab R2024b and Octave 7.3.
macOS:
-
Psychtoolbox was built and tested against native Matlab R2024b and against native
Octave 9.4 from HomeBrew, on macOS 13.7.5 Ventura for Intel Macs, and on macOS 14.5
Sonoma for Apple Silicon Macs.
-
Add a Datapixx mex file for Matlab on Apple Silicon Macs, based on VPixx latest
release. This is supposed, but not tested by us, to make basic support for VPixx
devices work on macOS for Apple Silicon. Note that the Datapixx mex file for Octave
is not ready and most likely broken on Apple Silicon, as of now.
Enjoy!
This is a reminder that the first large batch of free time limited trials for free use
of Psychtoolbox 3.0.20 and later for Apple macOS and Microsoft Windows will end very
soon for all those machines on which version 3.0.20 was first used before start of
April 2025.
Free trials for those machines will end on coming Monday the 14th of April 2025,
and further use of the software will require a paid software subscription license key,
which you can buy from our store, accessible from www.psychtoolbox.net.
Free trials started for initial installations since April will always end 14 days
after initial use of Psychtoolbox version 3.0.20 or later on a given machine.
We strongly recommend upgrading any 3.0.20 Psychtoolbox to at least version 3.0.21.0,
but in general to the very latest published version.
Buy now and receive a license at a low early-bird rate!
For questions and discussions, follow this link to the discussion thread on our user forum.
For answers to frequently asked questions, follow this link to the slowly building FAQ on our Wiki.