LungScope

A local prototype that sorts public lung-sound recordings into training, validation and test groups by subject. I wrote the requirements, the data contracts and the release checklist, then reviewed and tested the AI-generated code.

Data
5,881 eligible recordings from 854 known subjects
Check
0 subjects shared between splits, from the project report
Build
AI-assisted, under my requirements and review
Explore details

LungScope

I split public lung-sound recordings by subject, then check that no person lands in two splits.

AI wrote much of the code. I wrote the requirements, data contracts and release checklist, then reviewed and tested it.

Data engineering · 2026; versions through v0.11.3

Start the timeline

Source recordings

Public SPRSound lung-sound clips arrive as one pile. Some have no known subject, and one shows up twice.

Clip inspector, synthetic signal

6,567source recordings

Scroll, or press Play, to move the playhead.

  1. Source recordings

    Public SPRSound lung-sound clips arrive as one pile. Some have no known subject, and one shows up twice.

    6,567source recordings

  2. Canonical set

    One conflicting duplicate resolves into a single record. Source aliases and annotations stay attached.

    Duplicate merged
    Merged

    6,566canonical recordings

  3. Eligible clips

    Clips with no known subject, poor quality or auxiliary-only audio sit outside the split. The rest stay lit.

    Outside the split
    Outside the split

    5,881eligible recordings

  4. Subject lanes

    Each remaining clip snaps onto the lane of the person it belongs to. Six lanes stand in for the known subjects.

    Subject ASubject BSubject CSubject DSubject ESubject F
    ABCDEF

    854known subjects

  5. Three bins

    Whole lanes go into training, validation or test. A lane never splits across bins.

    Subject ASubject BSubject CSubject DSubject ESubject FTrainTrainTrainTrainValidationTestTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefusedOverlap check
    ABCDEFTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefused

    598 · 128 · 128subjects: train, validation, test

  6. Leak test

    Drag a lane onto another bin, or pick a lane and press a button. The project refuses a second bin.

    Subject ASubject BSubject CSubject DSubject ESubject FTrainTrainTrainTrainValidationTestTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefusedOverlap check
    ABCDEFTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefused
  7. Overlap check

    The audit lane compares the bins: no shared subject IDs, no identical PCM audio. The v0.11.3 report records zero.

    Subject ASubject BSubject CSubject DSubject ESubject FTrainTrainTrainTrainValidationTestTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefusedOverlap checkSubject IDs shared 0Identical PCM audio shared 0
    ABCDEFTrain598 subjectsRefusedValidation128 subjectsRefusedTest128 subjectsRefusedIDs 0Audio 0

    0subjects or audio shared between splits

  8. What the counts show

    The v0.11.3 report records these split-integrity counts.

    Source recordings6,567Canonical recordings6,566Eligible recordings5,881Known subjects by split854Shared between splits0Train 598128128
    Source recordings6,567Canonical recordings6,566Eligible recordings5,881Known subjects by split854Shared between splits0598128128

    5,881 · 854 · 0eligible recordings, known subjects, shared

The lanes and clips are drawn examples. The counts come from the v0.11.3 snapshot report, and the tone is synthetic.

Sources