Skip to content

Comparatif des outils d'expérimentation comportementale : jsPsych, PsychoPy, Gorilla, Qualtrics, lab.js et Potato

Compare jsPsych, PsychoPy, Gorilla, Qualtrics, lab.js et Potato sur l'hébergement, le coût, la précision temporelle documentée, l'affectation aux conditions et la prise en charge de Prolific et SONA.

jsPsych, PsychoPy, Gorilla et lab.js sont conçus pour des tâches comportementales au niveau des essais, où le chronométrage des stimuli et les temps de réaction sont les données, et Qualtrics est conçu pour les questionnaires, que Gorilla héberge aussi. Potato est conçu pour les études dans lesquelles les participants jugent, notent ou étiquettent des items, et sa configuration couvre l'affectation aux conditions, les questionnaires de sélection, les pages contrebalancées et le retour vers Prolific ou SONA. Depuis Potato 2.12.0, il exécute aussi une timeline jsPsych, un test de casque ou une tâche sur un autre serveur comme une page d'une telle étude, et il exécute des tâches de lecture auto-rythmée et de labyrinthe sur ses propres items.

Une expérience comportementale présente des stimuli aux participants et enregistre ce qu'ils font, par exemple quelle touche ils pressent, à quelle vitesse et quelle option ils choisissent. Dans un plan inter-sujets, chaque participant est affecté à une seule condition, et les études maintiennent généralement l'affectation équilibrée à mesure que les gens arrivent et abandonnent. Le contrebalancement fait varier l'ordre des blocs d'un participant à l'autre pour que les effets d'ordre se compensent, souvent selon les lignes d'un carré latin. Le temps de réaction est l'intervalle entre l'apparition du stimulus et la réponse, et dans un navigateur sa précision dépend du logiciel, du navigateur, ainsi que du clavier et de l'écran du participant.

Les outils ci-dessous diffèrent par la personne qui écrit la logique des essais, celle qui héberge l'étude, le fonctionnement de l'affectation et ce que chacun affirme sur le chronométrage. Le Comparatif des outils d'annotation couvre les outils d'annotation pour tous les types de données.

Les six outils en un coup d'œil

Le premier tableau montre comment chaque outil s'exécute, qui héberge l'étude, sa licence et son mode de financement. Les coûts ne sont décrits que par modèle, car plusieurs de ces outils donnent leurs prix sur demande ou par formule.

OutilSe présente commeHébergementLicenceModèle de coût
jsPsychBibliothèque JavaScript ; vous écrivez la timeline en codeVous choisissez un hébergeur : JATOS, Pavlovia, Cognition.run ou votre propre serveurMITGratuit ; l'hébergeur peut être payant
PsychoPyBuilder et Coder pour ordinateur ; les études en ligne sont compilées en PsychoJSL'ordinateur du laboratoire, ou Pavlovia en ligneGPL-3.0-or-later (PsychoPy), MIT (PsychoJS)Gratuit au laboratoire ; Pavlovia exige des crédits par participant ou une licence institutionnelle
GorillaPlateforme web hébergée avec des éditeurs graphiquesGorillaPropriétaireUn jeton par participant, ou un abonnement ou une licence institutionnelle
QualtricsPlateforme de questionnaires hébergéeQualtricsPropriétaireSur devis ; les comptes gratuits ne peuvent pas rediriger vers une URL, et le JavaScript personnalisé n'est pas inclus dans toutes les licences
lab.jsÉditeur graphique dans le navigateur, plus une bibliothèque JavaScript (dernière version npm 20.2.4 ; dernier commit en octobre 2025, sur une alpha 23.0)Vous choisissez un hébergeur : JATOS, Pavlovia, votre propre espace web, ou intégré dans QualtricsApache-2.0 (bibliothèque), AGPL-3.0 (éditeur)Gratuit
PotatoServeur web Python configuré en YAMLVotre propre serveur, ou un Space Hugging FaceGPL-3.0-or-laterGratuit

Chaque outil sauf Qualtrics est décrit dans un article : jsPsych, PsychoPy, Gorilla, lab.js et Potato 2.0.

Quel outil pour quelle étude

Le tableau associe la partie d'une étude qui fixe ses exigences aux outils conçus pour elle.

ÉtudeOutils adaptés
Paradigmes de temps de réaction (Stroop, flanker, IAT, recherche visuelle)jsPsych, PsychoPy, Gorilla, lab.js
Études en laboratoire avec oculomètres matériels ou autres appareilsPsychoPy
Oculométrie par webcam dans le navigateurjsPsych, Gorilla, PsychoPy en ligne (avec du code personnalisé)
Questionnaires et expériences par questionnaireQualtrics, Gorilla, Potato
Notations, étiquettes ou classements de nombreux items, répartis entre participantsPotato
Jugements rapides sur une liste d'items (décision lexicale, grammaticalité)jsPsych, PsychoPy, Gorilla, lab.js, Potato
Tâches de lecture auto-rythmée et de labyrinthejsPsych (avec les plugins jspsych-contrib), Potato
Une tâche chronométrée suivie de notations ou de questionnaires, avec un seul code de complétionPotato avec une page jsPsych, Gorilla, lab.js intégré dans Qualtrics
Construire une étude sans programmer (Potato par une configuration YAML)Gorilla, Qualtrics, lab.js, PsychoPy Builder, Potato

Gorilla apparaît dans de nombreuses lignes parce qu'il héberge les tâches, les questionnaires et le recrutement dans un seul produit. Potato apparaît là où les participants jugent des items ou répondent à des questionnaires, et ses tâches chronométrées s'exécutent soit avec trial_timing sur ces items, y compris la lecture auto-rythmée et le labyrinthe, soit comme une page jsPsych.

Affectation, sélection, recrutement et questionnaires selon l'outil

Le deuxième tableau compare le travail qui entoure les essais. Quand un outil laisse une étape à son hébergeur ou à du code personnalisé, la cellule l'indique.

jsPsychPsychoPy et PavloviaGorillaQualtricslab.jsPotato
Affectation équilibrée aux conditionsPar l'hébergeur, par exemple un modèle de session de lot JATOSRoutine Counterbalance (2024.1 et ultérieures), avec des groupes définis sur le Pavlovia Shelf en ligneNœud Randomiser avec un mode équilibré, plus les nœuds Quota et AllocatorRandomizer avec Evenly Present ElementsPar l'hébergeurconditions, compté sur les participants affectés ou sur ceux qui ont terminé
Ordre des blocs contrebalancéRandomisation des essais et des blocs en codeFichiers de conditions et boucles imbriquéesNœuds Counterbalance et OrderRandomizer sur les blocsBoucles mélangéesphases.counterbalance, aléatoire ou en carré latin de Williams
Exclure un participantjsPsych.abortExperiment() en codeCode personnaliséNœud Branch vers un nœud RejectBranchement vers un élément End of SurveyCode personnaliséexit_when, qui affiche un message ou renvoie le résultat d'exclusion de la plateforme
ProlificProcédure documentée avec paramètres d'URL et redirectionParamètres d'URL et URL de complétion documentésPolitique de recrutement intégréeIntégration Marketplace publiée par Prolific—login.type: url_direct, ou crowdsourcing.provider: prolific
SONADocumenté par SonaDocumenté par Sona, avec un lien depuis PsychoPyPolitique de recrutement intégrée, avec crédits automatiquesDocumenté par Sona—crowdsourcing.provider: sona, avec des crédits accordés depuis le serveur
Oculométrie par webcamExtension WebGazer, avec des plugins de calibration et de validationWebGazer par du code personnalisé en ligne ; ioHub pour les oculomètres matériels au laboratoireComposant WebGazer———
QuestionnairesPlugin survey (SurveyJS) et plugins survey-*Pavlovia Surveys, en ligne uniquementQuestionnaire BuilderLe produit principalFormulaires HTMLPages de questionnaire, plus 55 instruments publiés appelés par leur nom

Un tiret signifie que nous n'avons rien trouvé à ce sujet dans la documentation de l'outil, vérifiée le 2026-10-22. Si une cellule est erronée, signalez-le-nous.

Ce que la documentation de chaque outil affirme sur le chronométrage

La précision des temps de réaction dans un navigateur a été mesurée sur plusieurs outils, par exemple dans la méga-étude sur le chronométrage, qui a comparé des générateurs d'expériences de laboratoire et en ligne. La documentation de chaque outil formule ses propres affirmations sur le chronométrage, résumées ci-dessous.

  • jsPsych. La page sur la précision temporelle indique que les temps de réaction mesurés en JavaScript sont de 10 à 40 ms plus longs que dans les logiciels de laboratoire standard, avec une variance comparable, et cite la comparaison avec Psychophysics Toolbox parmi d'autres études.
  • PsychoPy. La page sur le chronométrage indique que son chronométrage est aussi bon que celui de tout logiciel testé par l'équipe, et héberge les tables de données de la méga-étude.
  • Gorilla. La page sur le chronométrage indique que les durées d'affichage sont des multiples de l'intervalle de rafraîchissement de l'écran, que les claviers et souris USB ajoutent jusqu'à 8,3 ms d'erreur, et que les écrans tactiles sont interrogés environ toutes les 20 ms. Elle cite une étude des plateformes en ligne, navigateurs et appareils.
  • lab.js. La page sur le chronométrage indique que la bibliothèque atteint une grande précision de présentation et de réponse moyennant quelques précautions.
  • Qualtrics. La question Timing enregistre le premier clic, le dernier clic, l'envoi de la page et le nombre de clics sur une page, comme une trace du temps passé sur la page plutôt qu'un temps de réaction.
  • Potato. Une page type: jspsych exécute jsPsych seul ; les chiffres de jsPsych s'y appliquent donc. trial_timing sur les items propres de Potato révèle le stimulus dans un callback d'image d'animation et mesure le temps de réaction à partir de l'image sur laquelle il a été dessiné ; l'apparition est donc connue à l'image près (environ 17 ms à 60 Hz). Chaque enregistrement trial_timing stocke l'intervalle entre images et la résolution du minuteur mesurés par le navigateur, et le serveur signale les enregistrements qui ne concordent pas avec sa propre horloge.

Les claviers et les écrans ajoutent une latence que le navigateur ne peut pas mesurer, et elle varie d'une machine de participant à l'autre. Pour chacun de ces outils, comparez les temps de réaction au sein des participants ou modélisez-les avec un terme participant.

Études sur items et pages jsPsych dans Potato

Potato a commencé comme outil d'annotation ; son unité de travail est donc un item d'un fichier de données qu'un participant juge. Une étude qui recueille les notes de 400 titres de presse auprès de 60 participants, chacun voyant un ensemble différent de 40, correspond à ce modèle. Potato attribue les items, enregistre chaque jugement en le rattachant à l'item et au participant, et rapporte l'accord inter-annotateurs (fidélité inter-juges) sur les items notés par plus d'un participant.

Les réglages de déroulement de l'expérience s'appliquent aux études sur items et aux études comportant une tâche jsPsych. conditions affecte chaque participant à une condition à son arrivée, et chaque règle de la configuration peut tester condition.<factor>. show_when saute une page, exit_when exclut un participant, et phases.counterbalance ordonne les pages par participant. Les phases de questionnaire qui entourent la tâche, la phase de formation avec retour, et le retour vers Prolific ou SONA sont des entrées de configuration.

Quand une étude a besoin d'un contrôle au niveau des essais, les essais restent dans jsPsych. Une page type: jspsych exécute une timeline jsPsych 8.3.0 entre les autres pages de Potato, lui transmet l'identifiant et la condition du participant, et stocke les données d'essais dans le project.sqlite du répertoire de la tâche. Deux autres pages d'exécution occupent la même place : un test de casque noté par le serveur, et une tâche externe sur oTree, Empirica ou un questionnaire hébergé qui renvoie le participant avec des résultats signés. Venir de jsPsych fait correspondre les concepts de jsPsych aux clés de Potato et décrit pas à pas une tâche de Stroop au sein d'une étude Potato.

Une étude de notation inter-sujets dans Potato

La configuration ci-dessous exécute une étude sur la crédibilité de titres de presse pour un vivier de participants SONA. Les participants sont affectés à voir les titres avec ou sans leur source, et balance_on: completed ne compte que les participants qui terminent ; les deux conditions restent ainsi équilibrées quand des personnes abandonnent ou sont exclues. Un questionnaire de sélection met fin à l'étude pour quiconque ne lit pas d'actualités en anglais, et les deux questionnaires post-étude apparaissent dans l'ordre d'un carré latin.

yaml
annotation_task_name: Headline credibility study
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/with_source.jsonl
item_properties:
  id_key: id
  text_key: text
user_config:
  allow_all_users: true
  users: []
 
conditions:
  factors:
    list: [with_source, without_source]
  assignment: balanced
  balance_on: completed
 
# Each condition gets its own item file, named after the factor's levels
assignment_strategy: batch
batch_assignment:
  auto_assign_annotators: true
  group_by_condition: list
  groups:
    - {name: with_source, data_file: data/with_source.jsonl}
    - {name: without_source, data_file: data/without_source.jsonl}
 
phases:
  order: [consent, screener, annotation, attitudes, media_use]
  consent:
    type: consent
    file: surveys/consent.json
  screener:
    type: prestudy
    file: surveys/screener.json
    exit_when:
      show_when:
        - {schema: reads_news, operator: equals, value: "No"}
      message: This study is for people who read English-language news. Thank you for your time.
  attitudes:
    type: poststudy
    file: surveys/attitudes.json
  media_use:
    type: poststudy
    file: surveys/media_use.json
    randomize_questions:
      pin_last: [comments]
  counterbalance:
    - pages: [attitudes, media_use]
      method: latin_square
 
crowdsourcing:
  provider: sona
  sona:
    hostname: yourdept.sona-systems.com
    experiment_id: 123
    credit_token: your-credit-token
 
annotation_schemes:
  - annotation_type: likert
    name: credibility
    description: How credible is this headline?
    size: 7                   # an odd number of points gives a neutral midpoint
    min_label: Not at all credible
    max_label: Very credible
    label_requirement:
      required: true

Les deux fichiers d'items contiennent les mêmes titres, l'un avec la ligne de source et l'autre sans, et les identifiants d'items doivent différer entre eux, car Potato charge les deux fichiers dans un seul projet. L'export CSV écrit participants.csv, avec la condition de chaque participant, l'ordre des questionnaires et une éventuelle exclusion, à côté des notes.

Dans SONA, définissez l'URL de l'étude sur https://your-server.com/?sona_code=%SURVEY_CODE%. Quand un participant termine, Potato accorde lui-même les crédits par l'appel d'attribution de crédits côté serveur de SONA ; le participant n'a donc pas à suivre un lien de retour vers SONA.

Les limites de Potato pour les expériences comportementales

Les limites ci-dessous s'appliquent aux pages propres de Potato. La plupart peuvent être contournées par une page jsPsych, et chaque point indique laquelle.

  • Pas de code d'essai sur les pages propres de Potato. Le dessin sur canvas, les masques calés sur les images et l'audio programmé avec Web Audio exigent une page jsPsych.
  • Pas d'oculométrie ni d'enregistrement par webcam. L'extension WebGazer de jsPsych n'est pas fournie, car elle a besoin de 'unsafe-eval', que la Content-Security-Policy de la page jsPsych n'autorise pas.
  • Pas de trajectoires de souris sur les pages propres de Potato. Le bloc authenticity compte les déplacements et la distance du pointeur par item et ne conserve aucune position. Une page jsPsych avec extensions: [mouse-tracking] enregistre des échantillons x/y par essai.
  • Pas de plein écran d'un item à l'autre. Chaque item Potato est un chargement de page, et les navigateurs quittent le plein écran quand la page change. Une page jsPsych maintient le plein écran pendant toute sa timeline.
  • Pas d'essais chronométrés sur téléphone. Les téléphones et tablettes reçoivent l'interface tactile de Potato, qui n'exécute pas trial_timing.
  • Pas d'enregistrements trial_timing ni de données participants.csv avec le backend MySQL. Les deux exigent le stockage par défaut. Les exécutions jsPsych sont stockées dans project.sqlite avec l'un ou l'autre backend.

Pour aller plus loin

Références

  1. de Leeuw, J. R. (2015). jsPsych: A JavaScript library for creating behavioral experiments in a Web browser. Behavior Research Methods, 47(1), 1-12. https://doi.org/10.3758/s13428-014-0458-y
  2. Peirce, J., Gray, J. R., Simpson, S., et al. (2019). PsychoPy2: Experiments in behavior made easy. Behavior Research Methods, 51(1), 195-203. https://doi.org/10.3758/s13428-018-01193-y
  3. Anwyl-Irvine, A. L., Massonnié, J., Flitton, A., et al. (2020). Gorilla in our midst: An online behavioral experiment builder. Behavior Research Methods, 52(1), 388-407. https://doi.org/10.3758/s13428-019-01237-x
  4. Henninger, F., Shevchenko, Y., Mertens, U. K., et al. (2022). lab.js: A free, open, online study builder. Behavior Research Methods, 54(2), 556-573. https://doi.org/10.3758/s13428-019-01283-5
  5. Jurgens, D., Chen, M., & Iyer, L. (2026). Potato 2.0: A Comprehensive Annotation Platform with AI-in-the-Loop Support. Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations), 374-386. https://aclanthology.org/2026.acl-demo.37/
  6. Bridges, D., Pitiot, A., MacAskill, M. R., et al. (2020). The timing mega-study: comparing a range of experiment generators, both lab-based and online. PeerJ, 8, e9414. https://doi.org/10.7717/peerj.9414
  7. de Leeuw, J. R., & Motz, B. A. (2016). Psychophysics in a Web browser? Comparing response times collected with JavaScript and Psychophysics Toolbox in a visual search task. Behavior Research Methods, 48(1), 1-12. https://doi.org/10.3758/s13428-015-0567-2
  8. Anwyl-Irvine, A., Dalmaijer, E. S., Hodges, N., et al. (2021). Realistic precision and accuracy of online experiment platforms, web browsers, and devices. Behavior Research Methods, 53(4), 1407-1425. https://doi.org/10.3758/s13428-020-01501-5