Press "Enter" to skip to content

Tutorial: Advanced stimulus timing features

In the first tutorial about stimulus timing, we covered the primary way you can control the timing of your stimuli: by modifying the barrier property of each stimulus. But some timing scenarios are best controlled using other methods besides the barrier property, especially when you’re dealing with certain types of static stimuli (like text stimuli). This tutorial will cover a few additional ways to adjust the timing of your stimuli and responses within a trial:

Requiring participants to engage with a non-barrier-type stimulus for a set amount of time

Let’s say we want to have participants engage with a static stimulus for a certain amount of time before other trial components progress. For example, in a grammaticality judgment experiment, we may want a text stimulus to appear on the screen for ten seconds prior to collecting a response, with the expectation that participants will use that time to read the text fully before making a response. In this case, we can delay the onset of the response by ten seconds:

The sentence_rating response will now appear on the screen ten seconds after the onset of the last stimulus in the trial. In other words, participants will be prevented from seeing the response options or moving onto the next trial for 10 seconds after the last stimulus appears on the screen (or, in the case of video or audio stimuli with barrier turned off, 10 seconds after the stimulus starts playing).

Keep in mind that in the previous examples, we were adjusting the timing of the text stimulus and response onset for a single trial. There are other situations where it makes more sense to modify the duration of the whole trial itself rather than the stimuli and responses that are realized inside the trial. Let’s say you have an instruction screen of text that you want displayed for 10 seconds before you move onto your experimental trials where you’re collecting participant responses. This situation is best handled by adjusting the timing of the instruction trial rather than the timing of the instruction text stimulus. We’ll discuss these types of trial-based timing situations in our next timing tutorial…stay tuned!

Make a stimulus disappear before the end of a trial

By default, stimuli remain on the screen until the end of a trial. To make a stimulus disappear before the end of a trial, adjust the duration property of your stimulus. This is particularly useful if you don’t want your stimulus to remain on the screen during the presentation of responses, or if you have a stimulus that participants should only be exposed to for a short period of time before making a decision. In our previous example, if we want our text stimulus to disappear after ten seconds (right before our ratings response appears on the screen), we would set its duration to 10:

Presenting multiple stimuli at the same time

Trial templates determine which stimuli are presented in any particular trial. Unless otherwise specified, only one stimulus will be presented in a trial. To present multiple stimuli on a single realized trial, we can use a simple nested list:

    "type": "basic",
    "stimuli": ["stim1", ["stim2", "stim3"], "stim4", "stim5"]

Here, stim2 and stim3 will appear together on the same trial, using sensible defaults for presentation location (typically side-by-side). stim1, stim4, and stim5 will appear by themselves in their own trials.

If you would prefer to pre-set the location of your stimuli rather than rely on FindingFive’s default location options, you can use elaborated syntax to specify your trial template’s stimuli. To do this, we’ll create dictionaries that specify three properties for each trial: 

  • which is where we will list the stimuli we want presented on a single trial realized from this trial template
  • location is where we will specify a list of locations for each stimulus in the list defined in which. These locations are indices between 1 and 9, referring to locations arranged from left to right and top to bottom in a 3×3 grid
  • optionallywe can also set the property randomize_location to true or false based on whether we want the stimuli defined in which to be randomized across the locations defined in location

So if we want stim1, stim4, and stim5 to appear by themselves on individual trails, along with a trial that simultaneously presents stim2 in the upper left part of the screen and stim3 in the lower right part of the screen, we can use the following syntax:

  "type": "basic",
      "which": ["stim2","stim3"], 
      "location": [1,9]
    "stim4", "stim5"

Present multiple stimuli at different times in a trial

To present multiple non-barrier stimuli in sequence on a single trial, utilize the delay and duration properties. Note that if you’re trying to present multiple dynamic stimuli, like audio, video, or tokenized text stimuli, you should instead use the barrier property of those stimuli to control timing. Check out this tutorial for more information!

Let’s say you want a trial to consist of the presentation of a fixation cross for 3 seconds, followed immediately by a text stimulus for 2 seconds. You would want a fixation cross stimulus with duration 3, and a text stimulus for duration 2 and delay 3:

To present both of these stimuli in the same location on this trial, you would create a trial_template looking something like this:

"sequential_stimuli_trial": {
  "type": "basic",
      "which": ["fixation_cross","word_stim"], 
      "location": [5,5]
  "responses": ["r1"]

Remember that the multiple stimuli you want displayed on a single trial should be placed in a nested list in your trial_template. Also note that in this example, since we want the text stimulus to appear at the same location as the fixation cross had occupied, we use the elaborated syntax when specifying stimuli.

For more technical details about stimulus timing features, check out the Stimuli section of the FindingFive API.

If you have any questions about this post or how to adjusting the timing of stimuli in FindingFive, please don’t hesitate to contact us at!