labvanced logoLabVanced
  • Research
    • Publications
    • Researcher Interviews
    • Use Cases
      • Developmental Psychology
      • Linguistics
      • Clinical & Digital Health
      • Educational Psychology
      • Cognitive & Neuro
      • Social & Personality
      • Arts Research
      • Sports & Movement
      • Marketing & Consumer Behavior
      • Economics
      • HCI / UX
      • Commercial / Industry Use
    • Labvanced Blog
    • Services
  • Technology
    • Feature Overview
    • Code-Free Study Building
    • Eye Tracking
    • Mouse Tracking
    • Generative AI Integration
    • Multi User Studies
    • More ...
      • Reaction Time/Precise Timing
      • Text Transcription
      • Heart Rate Detection (rPPG)
      • Emotion Detection
      • Questionnaires/Surveys
      • Experimental Control
      • Data Privacy & Security
      • Desktop App
      • Mobile App
  • Learn
    • Guide
    • Videos
    • Walkthroughs
    • FAQ
    • Release Notes
    • Documents
    • Classroom
  • Experiments
    • Cognitive Tests
    • Sample Studies
    • Public Experiment Library
  • Pricing
    • Licenses
    • Top-Up Recordings
    • Subject Recruitment
    • Study Building
    • Dedicated Support
    • Checkout
  • About
    • About Us
    • Contact
    • Downloads
    • Careers
    • Impressum
    • Disclaimer
    • Privacy & Security
    • Terms & Conditions
    • Third-Party Licenses
  • Appgo to app icon
  • Logingo to app icon
Learn
Guide
Videos
Walkthroughs
FAQ
Newsletter Archive
Documents
Classroom
  • 中國人
  • Deutsch
  • Français
  • Español
  • English
  • 日本語
Guide
Videos
Walkthroughs
FAQ
Newsletter Archive
Documents
Classroom
  • 中國人
  • Deutsch
  • Français
  • Español
  • English
  • 日本語
  • Guide
    • GETTING STARTED

      • Task Editor
      • Frames
        • Canvas Frame
        • Page Frame
        • Website Frame
      • Trial Timeline
      • Stimulus Presentation
      • Correctness of Response
      • Objects
      • Events
      • Variables
      • Task Wizard
      • Trial System
      • Experiment Design
        • Creating a Study
        • Data Frame Patterns
        • Multi-user Experiment Design
    • FEATURED TOPICS

      • Randomization & Balance
      • Eye Tracking
        • Presenting Stimuli in an Eye Tracking Task
        • How to Choose Eye Tracking Calibration Settings
        • Setting Up Eye Tracking in a Task
        • Recording and Exporting Gaze Data
        • Using Shapes as Areas of Interest (AOI) for Eye Tracking
        • The Participant Calibration Experience
      • Web Bridge
        • Selecting Website AOIs | Anchor, Adjust, and Verify AOI Tracking
        • Tracking Mouse Behavior on a Website AOI | Web Bridge Guide
      • Questionnaires
      • Desktop App
      • Sample Studies
      • Participant Recruitment
      • API Access
        • REST API
        • Webhook API
        • WebSocket API
      • Other Topics

        • Precise Stimulus Timings
        • Multi User Studies
        • Head Tracking in Labvanced | Guide
    • MAIN APP TABS

      • Overview: Main Tabs
      • Dashboard
      • My Studies
      • Shared Studies
      • My Files
      • Experiment Library
      • My Account
      • License & Services
    • STUDY TABS

      • Overview: Study-Specific Tabs
      • Study Design
        • Tasks
        • Blocks
        • Sessions
        • Groups
      • Task Editor
        • Task Controls
        • The Trial System
        • Frame Types
        • Objects
        • Object Property Tables
        • Variables
        • System Variables Tables
        • The Event System
        • Text Editor Functions
        • Eye Tracking Options in the Task Editor
        • Head Tracking in a Task
        • Multi-User Studies
      • Settings
      • Variables
      • Media
      • Texts & Translate
      • Launch & Participate
      • Subject Management
      • Dataview and Export
        • Dataview and Variable & Task Selection (OLD Version)
        • Accessing Recordings (OLD Version)
  • Videos
    • Video Overview
    • Getting Started in Labvanced
    • Creating Tasks
    • Element Videos
    • Events & Variables
    • Advanced Topics
  • Walkthroughs
    • Introduction
    • Stroop Task
    • Lexical Decision Task
    • Posner Gaze Cueing Task
    • Change Blindness Flicker Paradigm
    • Eye-tracking Sample Study
    • Infant Eye-tracking Study
    • Attentional Capture Study with Mouse Tracking
    • Rapid Serial Visual Presentation
    • ChatGPT Study
    • Eye Tracking Demo: SVGs as AOIs
    • Multi-User Demo: Show Subjects' Cursors
    • Gamepad / Joystick Controller- Basic Set Up
    • Desktop App Study with EEG Integration
    • Between-subjects Group Balancing and Variable Setup
    • Building a Multi-user Study
    • Website Frame Eye Tracking Walkthrough
    • Conditional Webcam Eye Tracking
  • FAQ
    • Features
    • Support Policy & Guidelines
    • Security & Data Privacy
    • Licensing
    • Precision of Labvanced
    • Programmatic Use & API
    • Using Labvanced Offline
    • Troubleshooting
    • Study Creation Questions
  • Newsletter Archive
  • Documents
  • Classroom

Building a Multi-user Study

How do you actually connect two participants so one's actions reach the other's screen?

This walkthrough covers the click-by-click mechanics: enabling multi-user mode, assigning roles, connecting participants, and keeping them synchronized. For when to use a multi-user design, best practices, and existing example studies, see Multi-user Experiment Design.

The four steps below are the same for every multi-user study, regardless of what it's actually testing. Once you have them working, the "Additional Examples" section shows the same four steps reused across three different designs.

Table of Contents

  • Prerequisite Knowledge
  • Setting Up the Skeleton
    • Enabling multi-participant mode
    • Assigning roles with Role_Id
    • Connecting participants with Distribute Variable
    • Keeping participants in sync
  • Additional Examples
    • Shared Counter
    • Director-Matcher Description Task
    • Turn-Based Offer and Response
  • Further Reading

Prerequisite Knowledge

Fundamental knowledge of Labvanced is advised, such as how events work and how variables are used, in order to follow the terminology used below.

Frames

The building block that holds what participants see at each moment in a trial.

Events

What a trigger and an action are, and how they combine to build a study's logic.

Variables

What a variable is and how it stores and updates values during a study.

Setting Up the Skeleton

Enabling multi-participant mode

A Labvanced study is built for one participant by default. None of the multi-user tools, Role_Id, Distribute Variable, synchronization, exist until the study is told it will run with more than one person at once.

Open Settings in the right column, then under Special Features click through to Multi User Study and click Transform. This reveals two fields: Number of Participants (minimum 2) and Maximum Parallel Sessions. See Multi User Study for the full list of settings this unlocks.

This click cannot be undone (the confirmation dialog itself is labeled Transform Permanently). Decide your participant count first, and duplicate the study beforehand if you want a single-participant version too.

The Special Features tab in Settings with Multi-User Study transformed, showing Number of Participants, Maximum Parallel Sessions, and other multi-user options

Assigning roles with Role_Id

With multi-participant mode on, every participant is still running an identical, undifferentiated copy of the experiment; nothing yet tells them apart. Role_Id gives each participant an identity you can act on, without collecting anything personal, so their experiments can start doing different things.

Add an event with a Trial and Frame Trigger → On Frame Start, then a Control Actions → Requirement Actions (If... Then... Else If) action:

  • Add Requirement: left side → Variable → select Role_Id; comparison → equal; right side → Constant Value → Number → 1
  • Then: add whatever actions apply to role 1, for example Set Object Property to show a target image
  • Add Else Case: add the actions that apply to every other role

A Requirement Action checking Role_Id equal to 2, whose Then block runs two Set Object Property actions hiding the imageShown and Not allowed words objects

A real Requirement Action: Role_Id equal to 2 sets two objects' Visibility to 0, hiding them for that role only.

Connecting participants with Distribute Variable

A different Role_Id can put different content in front of each participant, but it still can't move information between them; each participant's experiment is still running in isolation. Distribute Variable is the only action that pushes a value out of one participant's experiment and into another's, which is what actually makes the study feel shared rather than side by side.

On whatever trigger fits your design, for example a Button Click Trigger or Enter on Input Trigger, add a Variable Actions → Distribute Variable Action:

  • Distribute value to: all participants, or a selection
  • Choose target variable and value: the variable on the receiving participant's screen, and what it should be set to
  • Block: turn this on if more than one participant could write to the same target variable around the same time

Distribute Variable action set to Selected Participants with participant 2 checked, target variable priceArray, Block enabled, and Rate Limit Strategy set to debounce

A real Distribute Variable action: sent to a Selected Participant rather than everyone, targeting priceArray, with Block enabled and a debounce rate limit.

Keeping participants in sync

Participants don't move through the study at the same pace on their own. Without a synchronization point, one participant can reach a later frame before the value they're waiting on has even been distributed, seeing a blank or unfinished state instead of the other participant's response.

On the frame where participants need to stay in step, for example neither should advance before the other has responded, enable Sync Frame Start under Frame Settings. Everyone waits at that frame until all participants have arrived.

Frame Settings panel with the Sync Frame Start checkbox enabled, shown alongside the Trial Timeline for a split-the-money style multi-user task

The Sync Frame Start checkbox in Frame Settings, enabled on a frame in the trial timeline.

Additional Examples

The four steps above don't change. What changes is what gets distributed and where the sync point goes. Three worked variations, starting with the simplest:

  • Shared Counter: the minimal version, one value kept in sync between two participants
  • Director-Matcher Description Task: one participant describes, the other identifies
  • Turn-Based Offer and Response: one participant proposes, the other accepts or rejects

Shared Counter

The simplest possible version of the skeleton: both participants see the same running total, and either one can add to it.

  • Role_Id: not needed here since both participants act the same way.
  • Distribute: on a Button Click Trigger, distribute value to all participants, target variable SharedCount, value = SharedCount + 1.
  • Sync: none needed, since there's no trial boundary to hold participants at.

This confirms multi-participant mode and Distribute Variable are working before adding role-based logic on top.

Director-Matcher Description Task

A referential communication task: one participant (the Director) describes a target item, the other (the Matcher) identifies it from a set of candidates.

  • Role_Id: Role_Id 1 is shown the target image and a text input. Role_Id 2 is shown the candidate images and no target.
  • Distribute: on the Director's Enter-key trigger, distribute the text value to a Description variable on the Matcher's screen, with Block enabled since only one description should be in flight at a time.
  • Sync: enable Sync Frame Start on the next-trial frame, so the Director can't move on before the Matcher has selected a candidate.

This is the same structure behind the Image Description Demo.

Turn-Based Offer and Response

An economic exchange: one participant proposes a split of a shared amount, the other accepts or rejects it.

  • Role_Id: Role_Id 1 is shown an input for the proposed split. Role_Id 2 is shown nothing until a proposal arrives.
  • Distribute: on the proposer's submit trigger, distribute the proposed value to an Offer variable on the responder's screen.
  • Sync: enable Sync Frame Start on the outcome frame, so neither participant sees the result before the responder has answered.

This is the same structure behind the Ultimatum Game.

A real example of this pattern, using a randomly drawn amount instead of a manually entered one: Role_Id equal to 1 triggers a Draw Random Number action (a discrete uniform draw between 50 and 150, saved to amountToSplit), followed immediately by Distribute Variable sending amountToSplit to all participants, with Block enabled.

A Requirement Action checking Role_Id equal to 1, whose Then block runs Draw Random Number saving to amountToSplit, followed by a Distribute Variable action sending amountToSplit to all participants with Block enabled

A real Requirement Action where Role_Id equal to 1 runs Draw Random Number into amountToSplit, then Distribute Variable sends it to all participants with Block enabled.

Further Reading

Multi-user Experiment Design

When to use a multi-user design, best practices, and a gallery of existing examples built in Labvanced.

Multi-Participant Studies

The full reference for enabling multi-user mode, predefined participant groups, and frame/task synchronization.

Event System: Distribute Variable

Full parameter reference for Distribute Variable, including the Rate Limit Strategy option not covered here.

Prev
Between-subjects Group Balancing and Variable Setup
Next
Website Frame Eye Tracking Walkthrough