Study Designer
grid_on20×16
100%
two-finger scroll = pan · pinch = zoom · drag dividers to resize
Dial the ranges + pick directions — the set regenerates as you go. Play plays it (the sequencer's loop and order apply). Capture makes it a new version: it shows what changed and asks first. Save lands it in the study.
Counts are per icon: each enabled direction adds that icon's own slice (a 4-dir icon = 4× a 1-dir icon). Congruency too — C or I = 1, both = 2. Clearing a row's directions mutes it (off the canvas + the count). After Capture, drag the anchors to your design positions (stop playback first).
A second generator: extra icons on their own layer, moving on the same timeline but never part of the n-back. active % = the share of games that carry them (quantised to 1 / per-n). Tempo, length and game count are untouched.
Rows are per distractor: NESW = the directions it may move (drawn per game, seeded — not a count axis). Clearing all directions mutes it. Dotted outline on the canvas, a continuous bar on the timeline.
A unified set of stimulus glyphs your games use. Pick a category (geometric shapes or Material icons), then tune style + size.
Count follows the generator's n-max (you need ≥ n-max distinct stimuli). Adjust it on the Generator panel.
The non-game screens of a session, stored on the game group (SC_SEQUENCE). Pick one, set its text + behaviour; the preview shows it. Background art reuses the tile palette.
Experience plays on the stage. Its speed, session length and dispatch are the study design — shown in the overlay on the stage, never changed here.
Drive a synthetic participant through a served controller and watch it adapt — no recruiting required. Each trial is a real /ml/decide call, so this is also load against the gateway.
Accuracy falls off as the administered n passes ability; reaction time rises with load. A harness, not a model of a human.
Arms run concurrently against the same controller, abilities spread across the n range this game group expands to. The spread is the finding.
Every channel below is measured during the run. The mapping is saved with the instance, so a replay comes back on the same axes.
Saved runs draw as faint tracks behind the live one, so two controllers can be compared on the same axes.
Which mail goes on which event or play day, at what time, under what condition, with which of NX5’s templates — saved on the study as email_rules. This records the rules; it does not send: lab-api decides when a mail is due, and Mautic sends it with the template named here. The board is on the right.
What this tool answers: given a participant of ability A, where does each model settle, how fast, how stably, and how far from A? Every number is measured on the served controllers themselves: each simulated trial is one real /ml/decide call (read-only, stateless), the same model configs live dispatch uses. Nothing is written.
The participant is the Simulator's: accuracy falls as n passes A, reaction time rises with n, congruent and incongruent trials mixed. At each (A, repeat) every model faces the same seeded draws, so a difference is the model's, not luck.
Each cell: a history of trials all played at level n, a proportion p correct, sent as rows [correct, n, rt_ms] → the n the model serves next.
Click keyframe on timeline to select · Drag to move · Dbl-click to delete