Skip to content
Source Separation Lab

Tour · the lab in three walkthroughs

See it work, then try it

Three short recordings of the main journeys through the site, with the steps written out below each one, and a screenshot of every key feature. Everything you see runs in your browser, so each walkthrough ends with a link to do it yourself.

The recordings are made by a scripted browser session (a Playwright test in web/e2e/showcase.spec.ts) that clicks and drags through the live pages at a human pace. The same script checks the numbers on screen, so it doubles as an end-to-end test. The videos have no sound. The caption on screen, the captions track and the step list are the same text. The dataset uses the 2021 seed, 30034, so every run shows the same numbers.

Walkthrough 1 · Generate

Generate the data

Change the timing of one source and the noise levels, and watch the time courses, the spatial noise and the mixed dataset X update.

Muted, 1280 × 800. The captions are part of the picture; the same text is in the CC track and in the step list.

Steps and transcript

  1. 01The defaults are the 2021 parameters, and seed 30034 reproduces the notebook's matrices exactly.
  2. 02Pick time course 2 and drag its onset: the boxcar train in Figure 1.1 shifts right.
  3. 03Stretch its duration: the pulses widen and the dataset is marked as modified.
  4. 04The six ground-truth spatial maps: one square patch per source on a 21 × 21 grid.
  5. 05Raise the spatial noise variance σ²s from 0.015 to 0.06.
  6. 06The spatial noise is redrawn as Γs ~ N(0, 0.06), so its histogram spreads over a wider range.
  7. 07The mixed dataset X = (TC + Γt)(SM + Γs) is rebuilt in the browser as you drag.
  8. 08Reset to 2021: every figure returns to the numbers in the report.
Try it yourself on Generate

Walkthrough 2 · Retrieve

Retrieve the sources

Switch between least squares, ridge and the lasso, move the penalties, and compare the retrieved maps with the ground truth and the correlation bars.

Muted, 1280 × 800. The captions are part of the picture; the same text is in the CC track and in the step list.

Steps and transcript

  1. 01Least squares: one closed-form step, no penalty. The retrieved maps are speckled with noise.
  2. 02Switch to ridge regression: the ℓ2 penalty λ shrinks every coefficient.
  3. 03Drag λ up the log scale and try λ = 1000: the scores change but no pixel is set to zero.
  4. 04Switch to the lasso: the ℓ1 penalty ρ sets most background pixels exactly to zero.
  5. 05Move ρ: at 0.2 much of the noise survives; near 0.95 every coefficient is zero and the patches vanish.
  6. 06Back to the 2021 choice, ρ = 0.625, which reproduces the report's scores.
  7. 07Figure 2.2 compares all four estimators per source: correlation bars and a table of sums.
Try it yourself on Retrieve

Walkthrough 3 · Tune → Bias–variance → Methods → DR-001

Tune with uncertainty

Re-run the Monte-Carlo behind the lasso penalty with intervals, see where each dataset's best ρ lands, split the error into bias² and variance, and finish on a decision record.

Muted, 1280 × 800. The captions are part of the picture; the same text is in the CC track and in the step list.

Steps and transcript

  1. 01Figure 3.1 re-runs the 2021 Monte-Carlo in a Web Worker and lands on the curve from the report.
  2. 02Fifty seeded realisations give the mean MSE a 95% percentile-bootstrap band.
  3. 03Switch to the paired design: every ρ is compared on the same 50 datasets.
  4. 04Where each dataset's own best ρ lands (Wilson interval), and ρ = 0.625 against the pre-specified ρ = 0.60, paired.
  5. 05Bias–variance: as the penalty grows, variance falls and bias² rises.
  6. 06The methods page sets out the provenance, evaluation design, limitations and decision records.
  7. 07Decision record DR-001: why I chose ρ = 0.625 in 2021, what the extra analysis found, and what I'd change.
Try it yourself on Tune

Screenshots

Every key feature

Captured by the same script at 1440 × 900, plus three on a phone-sized screen. Select one to see it full size. The “Explain this figure” screenshot shows a mocked AI response for illustration: the script answers the request itself, so no API key is used and nothing is sent to a provider. With your own key, the real feature works the same way and is described in the AI use statement.