Skip to content

Timing Parameters

Experiments

Testable provides fine-grained control over every temporal aspect of a trial. All timing values are in **milliseconds** unless noted otherwise.

The blank interval between the end of one trial and the start of the next. The screen is empty (or shows the background colour) during this time.

ITI = 500

The blank interval between stimuli within a single trial during sequential presentation. Relevant when you have multiple stim columns and want a gap between them.

For trials with three stimuli:

ISI = 300; 300

This places a 300 ms gap after the first stimulus and another 300 ms gap after the second stimulus.

Grouping stimuli into screens: stimScreens

Section titled “Grouping stimuli into screens: stimScreens”

When some stimuli should share a screen, state the grouping in the stimScreens column and keep the timing columns as plain value lists. Write one count per screen, joined with +:

stimScreens = 2+1
presTime = 500
ISI = 0

With three stimuli: the first two appear together for 500 ms, then the third alone until the response (presTime takes one value per screen, or one fewer to leave the last screen up until the participant responds; ISI takes one value per gap). Two shorthands cover even splits: stimScreens = 2 makes screens of two until the stimuli run out, and 2*4 is four screens of two. With stimScreens set and no timing written at all, screens run for 1000 ms with 500 ms gaps and the last screen waits for the response.

To randomise the stimulus order while keeping the screen structure, see the stimOrder column: random(screens) shuffles whole screens and random(within screens) shuffles inside each screen.

Before stimScreens, the grouping was written into ISI itself by omitting a value:

ISI = 500;;1000

With four stimuli: 500 ms after stim1, then stim2 and stim3 appear on the same screen (no ISI), then 1000 ms before stim4. This notation still works, but stimScreens says the same thing more clearly and keeps grouping and timing in separate columns; prefer it for new files.

Using ISI = 0 shows the next stimulus instantly after the previous one ends:

ISI = 500;0;1000

With four stimuli: 500 ms after stim1, stim2 appears, stim3 appears instantly, then 1000 ms before stim4.

How long each stimulus is shown before it disappears. Set it per stimulus using semicolons:

presTime = 500; 1000

The first stimulus shows for 500 ms, the second for 1000 ms.

responseWindow: when participants can respond

Section titled “responseWindow: when participants can respond”

The responseWindow column controls when responses open within a trial and, optionally, for how long.

With no responseWindow column, or the cell left empty, responses open when the last stimulus appears and stay open indefinitely, even after the stimulus disappears, until a response is given.

A plain number gives the participant a deadline:

responseWindow = 2000

Responses open at the last stimulus as usual and close 2000 ms later. If nothing was pressed, the response is recorded as timeout and the trial auto-advances.

Write a start position instead of, or in front of, the deadline:

ExampleBehaviour
responseWindow = 2000Opens at last stimulus, closes 2000 ms later
responseWindow = afterStimOpens only after the last stimulus is hidden (or audio/video playback ends), stays open until response
responseWindow = afterStim_2000Same, plus a 2000 ms deadline starting when the window opens
responseWindow = lastStimOpens at last stimulus onset and closes when it is hidden; a default response is recorded if none was given
responseWindow = withStimOpen only while stimulus screens are displayed
responseWindow = allStimOpens at trial start, closes when the last stimulus is hidden
responseWindow = allTrialOpens at trial start, no automatic close unless a deadline is added
responseWindow = 500_2000Both parts numeric: opens 500 ms after trial start, closes 2000 ms later
responseWindow = 0Opens at trial start, no deadline

Use min: to block responses for an initial period, max: as a deadline, or both:

  • responseWindow = min:2000: responses do not count for the first 2000 ms. Key presses and clicks made during the minimum are buffered and applied the moment it ends; text boxes and the advance button are disabled and then re-enabled.
  • responseWindow = min:2000;max:10000: the same, plus a timeout at 10 s.

These work with any response modality, not just text boxes. When a text-box trial times out with a partial answer, the recorded response has ;timeout appended.

How long feedback stays up (feedbackTime) and where it appears (feedbackOptions) are covered on the Feedback page, together with everything else about feedback.

To hold the response window open even after a response is given, until the full responseWindow duration has elapsed, add the waitResponseWindow flag to the trial’s responseOptions cell. Useful when you want a consistent total trial duration regardless of when the participant responds.

For audio and video trials where the full clip should play before the trial can advance, open the response window only after the stimuli finish, using the afterStim start position described above.

Testable reports the actually achieved timings back into the results file (presTime_ms, ITI_ms, ISI_ms, frame counts, and more), so you can verify and filter trials where the display rounded your requested times to the screen’s refresh rate. These columns are documented in Results Reference: Timing Diagnostics.