Skip to content

Comparativa de herramientas para experimentos conductuales: jsPsych, PsychoPy, Gorilla, Qualtrics, lab.js y Potato

Compara jsPsych, PsychoPy, Gorilla, Qualtrics, lab.js y Potato en alojamiento, coste, temporización documentada, asignación de condiciones y compatibilidad con Prolific y SONA.

jsPsych, PsychoPy, Gorilla y lab.js están hechos para tareas conductuales a nivel de ensayo en las que la temporización de los estímulos y los tiempos de reacción son los datos, y Qualtrics está hecho para cuestionarios, que Gorilla también aloja. Potato está hecho para estudios en los que los participantes juzgan, valoran o etiquetan ítems, y su configuración cubre la asignación de condiciones, los cuestionarios de selección, las páginas contrabalanceadas y el traspaso a Prolific o SONA. Desde Potato 2.12.0, también ejecuta una línea de tiempo de jsPsych, una comprobación de auriculares o una tarea en otro servidor como una página de un estudio así, y ejecuta tareas de lectura autoadministrada y maze sobre sus propios ítems.

Un experimento conductual muestra estímulos a los participantes y registra lo que hacen, como qué tecla pulsan, con qué rapidez la pulsan y qué opción eligen. En un diseño entre sujetos, a cada participante se le asigna una condición, y los estudios suelen mantener la asignación equilibrada a medida que las personas llegan y abandonan. El contrabalanceo varía el orden de los bloques entre participantes para que los efectos de orden se compensen, a menudo siguiendo las filas de un cuadrado latino. El tiempo de reacción es el intervalo desde el inicio del estímulo hasta la respuesta, y en un navegador su precisión depende del software, del navegador y del teclado y la pantalla del participante.

Las herramientas que siguen difieren en quién escribe la lógica de los ensayos, quién aloja el estudio, cómo funciona la asignación y qué afirma cada una sobre la temporización. Herramientas de anotación comparadas trata las herramientas de anotación para todos los tipos de datos.

Las seis herramientas de un vistazo

La primera tabla muestra cómo funciona cada herramienta, quién aloja el estudio, su licencia y cómo se paga. Los costes se describen solo por modelo, porque varias de las herramientas dan los precios bajo petición o por paquetes.

HerramientaFunciona comoAlojamientoLicenciaModelo de coste
jsPsychBiblioteca de JavaScript; la línea de tiempo se escribe en códigoEliges tú el alojamiento: JATOS, Pavlovia, Cognition.run o tu propio servidorMITGratuito; el alojamiento puede cobrar
PsychoPyBuilder y Coder de escritorio; los estudios en línea se compilan a PsychoJSEl ordenador del laboratorio, o Pavlovia en líneaGPL-3.0-or-later (PsychoPy), MIT (PsychoJS)Gratuito en el laboratorio; Pavlovia necesita créditos por participante o una licencia institucional
GorillaPlataforma web alojada con constructores gráficosGorillaPropietariaUn token por participante, o una suscripción o licencia institucional
QualtricsPlataforma de encuestas alojadaQualtricsPropietariaPrecio bajo petición; las cuentas gratuitas no pueden redirigir a una URL, y el JavaScript personalizado no está incluido en todas las licencias
lab.jsConstructor gráfico en el navegador, más una biblioteca de JavaScript (última versión en npm, 20.2.4; último commit en octubre de 2025, sobre una alfa de la 23.0)Eliges tú el alojamiento: JATOS, Pavlovia, tu propio espacio web, o integrado en QualtricsApache-2.0 (biblioteca), AGPL-3.0 (constructor)Gratuito
PotatoServidor web en Python configurado en YAMLTu propio servidor, o un Space de Hugging FaceGPL-3.0-or-laterGratuito

Todas las herramientas excepto Qualtrics tienen un artículo que las describe: jsPsych, PsychoPy, Gorilla, lab.js y Potato 2.0.

Qué herramienta para qué estudio

La tabla relaciona la parte de un estudio que fija sus requisitos con las herramientas hechas para ella.

EstudioBuenas opciones
Paradigmas de tiempo de reacción (Stroop, flanker, IAT, búsqueda visual)jsPsych, PsychoPy, Gorilla, lab.js
Estudios de laboratorio con seguidores oculares por hardware u otros dispositivosPsychoPy
Seguimiento ocular por webcam en el navegadorjsPsych, Gorilla, PsychoPy en línea (con código personalizado)
Cuestionarios y experimentos de encuestaQualtrics, Gorilla, Potato
Valoraciones, etiquetas u ordenaciones de muchos ítems, repartidos entre participantesPotato
Juicios rápidos sobre una lista de ítems (decisión léxica, gramaticalidad)jsPsych, PsychoPy, Gorilla, lab.js, Potato
Tareas de lectura autoadministrada y mazejsPsych (con plugins de jspsych-contrib), Potato
Una tarea cronometrada seguida de valoraciones o encuestas, con un único código de finalizaciónPotato con una página de jsPsych, Gorilla, lab.js integrado en Qualtrics
Construir un estudio sin programar (Potato mediante una configuración YAML)Gorilla, Qualtrics, lab.js, PsychoPy Builder, Potato

Gorilla aparece en muchas filas porque aloja tareas, cuestionarios y reclutamiento en un solo producto. Potato aparece donde los participantes juzgan ítems o responden cuestionarios, y sus tareas cronometradas se ejecutan como trial_timing sobre esos ítems, incluidas la lectura autoadministrada y maze, o como una página de jsPsych.

Asignación, selección, reclutamiento y cuestionarios por herramienta

La segunda tabla compara el trabajo que rodea a los ensayos. Donde una herramienta deja un paso a su alojamiento o a código personalizado, la celda lo indica.

jsPsychPsychoPy y PavloviaGorillaQualtricslab.jsPotato
Asignación equilibrada a condicionesDesde el alojamiento, p. ej. una plantilla de sesión de lote de JATOSRutina Counterbalance (2024.1 y posteriores), con grupos definidos en la Pavlovia Shelf en líneaNodo Randomiser con un modo equilibrado, más los nodos Quota y AllocatorRandomizer con Evenly Present ElementsDesde el alojamientoconditions, contando a los participantes asignados o a los que terminan
Orden de bloques contrabalanceadoAleatorización de ensayos y bloques en códigoArchivos de condiciones y bucles anidadosNodos Counterbalance y OrderRandomizer sobre bloquesBucles barajadosphases.counterbalance, aleatorio o cuadrado latino de Williams
Excluir a un participantejsPsych.abortExperiment() en códigoCódigo personalizadoNodo Branch hacia un nodo RejectRama hacia un elemento End of SurveyCódigo personalizadoexit_when, que muestra un mensaje o devuelve el resultado de exclusión de la plataforma
ProlificReceta documentada de parámetros de URL y redirecciónParámetros de URL y URL de finalización documentadosPolítica de reclutamiento integradaIntegración en el Marketplace publicada por Prolific—login.type: url_direct, o crowdsourcing.provider: prolific
SONADocumentado por SonaDocumentado por Sona, enlazado desde PsychoPyPolítica de reclutamiento integrada, con créditos automáticosDocumentado por Sona—crowdsourcing.provider: sona, con créditos concedidos desde el servidor
Seguimiento ocular por webcamExtensión WebGazer, con plugins de calibración y validaciónWebGazer mediante código personalizado en línea; ioHub para seguidores por hardware en el laboratorioComponente WebGazer———
CuestionariosPlugin survey (SurveyJS) y plugins survey-*Pavlovia Surveys, solo en líneaQuestionnaire BuilderEl producto principalFormularios HTMLPáginas de encuesta, más 55 instrumentos publicados por su nombre

Un guion significa que no encontramos nada al respecto en la documentación de la herramienta, comprobada el 2026-10-22. Si una celda es incorrecta, avísanos.

Lo que afirma la documentación de cada herramienta sobre la temporización

La precisión de los tiempos de reacción en un navegador se ha medido en distintas herramientas, por ejemplo en el megaestudio sobre temporización, que comparó generadores de experimentos de laboratorio y en línea. La documentación de cada herramienta hace sus propias afirmaciones sobre la temporización, resumidas a continuación.

  • jsPsych. La página sobre precisión de la temporización indica que los tiempos de reacción medidos en JavaScript son entre 10 y 40 ms más largos que en el software de laboratorio estándar, con una varianza similar, y cita, entre otros estudios, la comparación con Psychophysics Toolbox.
  • PsychoPy. La página sobre temporización dice que su temporización es tan buena como la de cualquier paquete que el equipo haya probado, y aloja las tablas de datos del megaestudio.
  • Gorilla. La página sobre temporización dice que las duraciones de presentación son múltiplos del intervalo de refresco de la pantalla, que los teclados y ratones USB añaden hasta 8,3 ms de error y que las pantallas táctiles se consultan aproximadamente cada 20 ms. Cita un estudio sobre plataformas en línea, navegadores y dispositivos.
  • lab.js. La página sobre temporización dice que la biblioteca alcanza una alta precisión de presentación y de respuesta si se tiene cierto cuidado.
  • Qualtrics. La pregunta Timing registra el primer clic, el último clic, el envío de la página y el número de clics en una página, como registro de la temporización de la página y no del tiempo de reacción.
  • Potato. Una página type: jspsych ejecuta jsPsych en solitario, así que ahí se aplican las cifras de jsPsych. trial_timing sobre los propios ítems de Potato revela el estímulo dentro de una llamada de fotograma de animación y mide el tiempo de reacción desde el fotograma en el que se dibujó, así que el inicio se conoce con precisión de un fotograma (unos 17 ms a 60 Hz). Cada registro de trial_timing guarda el intervalo entre fotogramas medido por el navegador y la resolución de su temporizador, y el servidor marca los registros que no concuerdan con su propio reloj.

Los teclados y las pantallas añaden una latencia que el navegador no puede medir, y que varía entre los equipos de los participantes. Con cualquiera de estas herramientas, compara los tiempos de reacción dentro de cada participante o modélalos con un término de participante.

Estudios de ítems y páginas de jsPsych en Potato

Potato nació como herramienta de anotación, así que su unidad de trabajo es un ítem de un archivo de datos que un participante juzga. Un estudio que recoge valoraciones de 400 titulares de 60 participantes, en el que cada participante ve 40 distintos, encaja con ese modelo. Potato asigna los ítems, registra cada juicio asociado al ítem y al participante e informa de la concordancia entre anotadores (fiabilidad entre evaluadores) en los ítems que valoró más de un participante.

Los ajustes del flujo del experimento se aplican a los estudios de ítems y a los estudios con una tarea de jsPsych. conditions asigna a cada participante una condición cuando llega, y cualquier regla de la configuración puede comprobar condition.<factor>. show_when salta una página, exit_when excluye a un participante y phases.counterbalance ordena las páginas por participante. Las fases de encuesta que rodean la tarea, la fase de entrenamiento con retroalimentación y el traspaso a Prolific o SONA son entradas de la configuración.

Cuando un estudio necesita control a nivel de ensayo, los ensayos se quedan en jsPsych. Una página type: jspsych ejecuta una línea de tiempo de jsPsych 8.3.0 entre las demás páginas de Potato, le pasa el ID y la condición del participante y guarda los datos de los ensayos en el project.sqlite del directorio de la tarea. Otras dos páginas de ejecución ocupan el mismo lugar: una comprobación de auriculares que puntúa el servidor y una tarea externa en oTree, Empirica o una encuesta alojada que devuelve al participante con resultados firmados. Si vienes de jsPsych asocia los conceptos de jsPsych con claves de Potato y recorre una tarea de Stroop dentro de un estudio de Potato.

Un estudio de valoración entre sujetos en Potato

La configuración siguiente ejecuta un estudio sobre la credibilidad de titulares para un grupo de participantes de SONA. A los participantes se les asigna ver los titulares con su fuente o sin ella, y balance_on: completed cuenta solo a los participantes que terminan, de modo que las dos condiciones se mantienen equilibradas cuando hay personas que abandonan o son excluidas. Un cuestionario de selección termina el estudio para quien no lee noticias en inglés, y los dos cuestionarios posteriores al estudio aparecen en orden de cuadrado latino.

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

Los dos archivos de ítems contienen los mismos titulares, uno con la línea de la fuente y otro sin ella, y los ID de los ítems tienen que ser distintos entre ambos porque Potato carga los dos archivos en un solo proyecto. La exportación CSV escribe participants.csv, con la condición de cada participante, el orden de los cuestionarios y cualquier exclusión, junto a las valoraciones.

En SONA, fija la URL del estudio en https://your-server.com/?sona_code=%SURVEY_CODE%. Cuando un participante termina, Potato concede él mismo los créditos mediante la llamada de concesión de créditos del servidor de SONA, de modo que el participante no tiene que seguir un enlace de vuelta a SONA.

Limitaciones de Potato para experimentos conductuales

Las limitaciones siguientes se aplican a las páginas propias de Potato. La mayoría se pueden sortear con una página de jsPsych, y cada punto indica cuáles.

  • Sin código de ensayo en las páginas propias de Potato. El dibujo en canvas, las máscaras sincronizadas con los fotogramas y el audio programado con Web Audio necesitan una página de jsPsych.
  • Sin seguimiento ocular ni grabación por webcam. La extensión WebGazer de jsPsych no se incluye, porque necesita 'unsafe-eval', que la Content-Security-Policy de la página de jsPsych no permite.
  • Sin trayectorias del ratón en las páginas propias de Potato. El bloque authenticity cuenta los movimientos y la distancia del puntero por ítem y no conserva posiciones. Una página de jsPsych con extensions: [mouse-tracking] registra muestras x/y por ensayo.
  • Sin pantalla completa entre ítems. Cada ítem de Potato es una carga de página, y los navegadores salen de la pantalla completa cuando cambia la página. Una página de jsPsych mantiene la pantalla completa durante toda su línea de tiempo.
  • Sin ensayos cronometrados en teléfonos. Los teléfonos y las tabletas reciben la interfaz táctil de Potato, que no ejecuta trial_timing.
  • Sin registros de trial_timing ni datos de participants.csv con el backend MySQL. Ambos necesitan el almacenamiento predeterminado. Las ejecuciones de jsPsych se guardan en project.sqlite con cualquiera de los dos backends.

Lecturas adicionales

Referencias

  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