Intelligent Classification
Automated Anonymization
BIDS Export
Inconsistent naming
Vendor variations
No standard structure
BIDS compliant
Consistent classification
Automated pipeline
SeriesDescription varies by site, operator, and vendor
Siemens, GE, Philips encode the same sequence differently
SyMRI produces 20+ outputs from one 5-minute scan
ADC maps, synthetic contrasts, and reformats need special handling
Orthogonal dimensions for complete MRI characterization
T1w, T2w, DWI, SWI
TSE, MPRAGE, EPI
FLAIR, FatSat, 3D
ADC, FA, T1map
SyMRI, SWI, Raw
GRAPPA, SMS, CS
{
"base": "T1w",
"technique": "MPRAGE",
"modifier_csv": "3D",
"construct_csv": null,
"provenance": "RawRecon",
"acceleration_csv": "GRAPPA",
"directory_type": "anat"
}
Maps directly to BIDS structure
Multi-layer vendor-agnostic detection
| Parser | DICOM Tag | Detects |
|---|---|---|
| ImageType | (0008,0008) | ORIGINAL, DERIVED, ADC, PHASE, SWI... |
| ScanningSequence | (0018,0020) | SE, GR, IR, EP physics |
| SequenceVariant | (0018,0021) | SK, SP, MP modifiers |
| ScanOptions | (0018,0022) | FS, FC, parallel imaging |
| SequenceName | (0018,0024) | *tfl3d, *ep_b patterns |
Vendor-agnostic boolean detection flags
Single unified flag definitively identifies the value
Any matching condition triggers detection (OR logic)
Multiple conditions must match (AND logic)
Route to specialized logic based on data origin
Modern sequences produce multiple series from one acquisition
| Technology | Time | Outputs | Challenge |
|---|---|---|---|
| SyMRI/MAGiC | ~5 min | 1-20+ series | Maps vs synthetic contrasts |
| SWI | ~4 min | 2-6 series | Mag vs phase vs processed |
| EPIMix | ~1 min | 5-9 series | 6 contrasts, same source |
Quantitative vs synthetic: a physics distinction
base = NULL (no tissue contrast)
T1map, T2map, PDmap, MyelinMap
Pixel value = measurement in ms or %
base = T1w/T2w/PDw
SyntheticT1w, SyntheticFLAIR, SyntheticDIR
Simulated contrast-weighted images
Susceptibility contrast from magnitude + phase
Complete brain exam in ~1 minute
| T1-FLAIR | SE-EPI |
| T2-FLAIR | SE-EPI |
| T2w | b=0 from DWI |
| isoDWI / ADC | SE-EPI |
| T2*w | GRE-EPI |
| T2-FLAIR | SSFSE no distortion |
| T2w | SSFSE |
| T1w 3D | 3D-EPI |
| SWI 3D | 3D-EPI |
Four-stage processing workflow
Verify cohort scope, validate data integrity, repair dates
Build classification features with Polars (450K stacks in ~60s)
10-stage pipeline with provenance branching
Fill gaps, flag for manual review
React + Vite + TypeScript
Python FastAPI + Polars
PostgreSQL
Docker Compose
# Quick Start
git clone https://github.com/\
NeuroGranberg/NILS.git
cd NILS
docker compose up
Web UI at localhost:5173
Extensible without code changes
# technique-detection.yaml
MPRAGE:
name: "MPRAGE"
category: "GRE"
detection:
exclusive: is_mprage
keywords:
- "mprage"
- "bravo"
- "ir-spgr"
combination:
- has_gre
- has_ir
- is_3d
implied_base: "T1w"
Repository
github.com/NeuroGranberg/NILS
Documentation
neurogranberg.github.io/NILS
Quick Start