PsyCloud

Importers

PsyCloud importers convert existing experiments into the shared Project Bundle / IR format so they can be inspected, edited, previewed, exported as SDK code, or published after review.

Import is a migration step

A successful import is not a claim of behavioral equivalence. Always inspect the report, preview the converted study, and verify timing, randomization, scoring, and unsupported plugins before collecting participant data.

Compatibility matrix

SourceTypical entry pointStudioCLIStatus
jsPsych 6-8.html, .js, or project directoryYesYesBroad coverage; best for standard v7+ plugins.
Project BundleBundle directory or .zip with bundle.jsonYesYesNative round trip.
PsychoJSGenerated .js file or project archiveYes, via the import wizard format selectorYesBeta; best-effort scheduler/routine extraction.
PsychoPy Builder.psyexp, directory, or .zip containing .psyexpNot yetYesBest-effort Builder XML import with warnings for unsupported syntax.
Custom web experimentsHTML/JS without known framework markersNot yetPartialUsually needs manual porting or jsPsych/PsychoJS structure.

Studio currently exposes dedicated import cards for jsPsych and Project Bundle. For PsychoJS, open the experiment import wizard and choose PsychoJS from the Format dropdown before uploading.

The CLI auto-detects common inputs:

psycloud import ./experiment.html --dry-run
psycloud import ./experiment.html --out ./imported
psycloud import ./builder-study.psyexp --out ./imported-psychopy
psycloud import ./project.psycloud.zip --out ./roundtrip

jsPsych adapter coverage

The jsPsych adapter registry covers both v6-style string names and v7+ class names where applicable.

FamilySupported plugins
Keyboard responsehtml-keyboard-response, image-keyboard-response, audio-keyboard-response, video-keyboard-response
Button responsehtml-button-response, image-button-response, audio-button-response, video-button-response
Slider responsehtml-slider-response, image-slider-response, audio-slider-response, video-slider-response
Surveyssurvey-text, survey-likert, survey-multi-choice, survey-multi-select, survey-html-form
Browser/session utilitiesinstructions, browser-check, screen-check, fullscreen, preload, call-function
Canvascanvas-keyboard-response, canvas-button-response, canvas-slider-response
Categorizationcategorize-html, categorize-image, same-different-html, same-different-image
Complex paradigmsanimation, serial-reaction-time, free-sort, reconstruction
Specializedcloze, external-html, iat-html, iat-image, maxdiff

Common warning cases include dynamic JavaScript functions, closure variables, canvas drawing that cannot be translated to Draw2D, custom button HTML, media timing differences, and survey layouts that need visual review.

Report semantics

Every serious import workflow should start with the report. The importer report has four status levels and three verification levels.

FieldValuesMeaning
statussuccess, partial, compat_only, failedWhether the source became verified IR, mixed IR/compat, compatibility-only runtime, or could not run.
verificationLevelverified, unverified, mixedWhether the result can be treated as verified PsyCloud IR or still contains unverified segments.
canRuntrue / falseWhether the converted output can be previewed or run at all.
canPublishVerifiedtrue / falseWhether it is eligible for a verified publish without manual fixes.
conversionRate0 to 1Fraction of detected trials converted to PsyCloud IR.
blockersStructured blocker listCustom plugins, call-function, dynamic timelines, parse errors, multi-file issues, or unknown blockers.
warnings / errorsMessage arraysReview items from extraction, conversion, validation, assets, and framework-specific adapters.

The CLI writes a project directory plus import artifacts when --out is used:

imported/
  project.json
  study.json
  assets/
  import/
    report.json
    report.md
    original/

Read import/report.md for human triage, and keep report.json when you want CI or migration tools to gate on unsupported plugins or canPublishVerified.

Verification workflow

  1. Run a dry import

    Use psycloud import <source> --dry-run first to confirm detection, parseability, plugin coverage, warnings, and blockers without writing a migrated project.

  2. Create an output project

    Import with --out, then inspect the generated project with psycloud inspect and psycloud validate.

  3. Preview behavior

    Open the converted study in Studio or use workbench previews to compare key screens, trial order, timing, and response collection against the original experiment.

  4. Fix review items

    Replace compat wrappers, unsupported plugins, unverified code steps, or dynamic snippets before treating the result as publishable verified IR.

Known non-goals

  • The importer does not guarantee pixel-perfect layout parity.
  • Arbitrary JavaScript, custom plugins, and dynamic generated timelines may require manual porting.
  • PsychoJS and PsychoPy imports are best-effort and should be treated as migration accelerators, not production-ready conversions.
  • Media playback and browser-specific timing should be checked in the same browser class you plan to use for data collection.

Next