- Docker:
docker pull nipreps/mriqc:26.0.0(linux/amd64 and linux/arm64) - PyPI:
pip install mriqc==26.0.0(Python 3.13 or newer)
The first release of the 26.x series, and the first since 24.0.2 (25.0.0rc0 was never finalized). MRIQC now requires Python 3.13 or newer, following SPEC 0, and its container image runs on linux/amd64 and linux/arm64.
With thanks to @asaraog and @vferat for their first contributions, and to @yohanchatelain for proposing --random-seed (#1413).
Highlights
- Python 3.13 and 3.14, with the SPEC 0 minimum versions of NumPy (2.2), SciPy (1.15), Pandas (2.3), Matplotlib (3.10) and scikit-learn (1.6).
- A new container image for
linux/amd64andlinux/arm64, built with pixi from a lockfile on Python 3.13. AFNI (26.2.05), ANTs (2.6.5) and svht_denoise are compiled from source for both architectures. - Reproducible runs:
--random-seedmakes two runs give identical results. - Parquet IQM outputs: each participant-level run writes
<entities>_<suffix>+iqms.parquet, with a JSON sidecar holding the schema, the BIDS metadata and the provenance.
Backward-incompatible changes
- The participant-level
<entities>_<suffix>.jsonfile is no longer written: the parquet file and its+iqms.jsonsidecar replace it. - DWI denoising uses svht_denoise instead of MRtrix3's
dwidenoise, which is licensed for non-commercial use only and has noarm64build. DWI IQMs change. - Python 3.10, 3.11 and 3.12 are no longer supported.
- IQMs computed on
arm64differ slightly from those computed onamd64(most T1w IQMs agree within 1%; BOLD IQMs within 0.02%). Do not mix the two architectures within a study.
Changes
- FIX: Correlate neighboring DWI volumes, not two voxels by @asaraog (#1446)
- FIX: Declare
mem_gbon the SynthStrip node by @asaraog (#1447) - FIX: Keep
3drefitand3dDespikein the image by @asaraog (#1449) - FIX: Ship
antsAffineInitializerin the base image by @oesteban (#1462) - FIX: Ensure conda's
libstdc++is preferred at runtime by @oesteban (#1429) - FIX: More reliable anatomical harmonization by @oesteban (#1394)
- FIX: Decode bytes to produce a string by @oesteban (#1371)
- FIX: Containers report wrong version by @oesteban (#1357, #1372)
- FIX: Elapsed run time format by @jhlegarreta (#1366)
- FIX: Passing
bytesintostr.join()by @oesteban (#1356) - FIX: Optimize interface to minimize memory fingerprint by @oesteban (#1351)
- ENH: Add parquet IQM outputs and a schema sidecar by @oesteban (#1428)
- ENH: Add
--random-seed, so that two runs give identical results by @oesteban, after a proposal by @yohanchatelain (#1453, #1413) - ENH: Remove redundant DIPY function by @jhlegarreta (#1369)
- DOC: Point the measures page to the parquet IQM outputs by @oesteban (#1466)
- DOC: Fix the broken link to an example IQM JSON by @celprov (#1398)
- DOC: Move Read the Docs to a supported build image by @oesteban (#1456)
- DOC: Make
AGENTS.mdagent-neutral and terser by @oesteban (#1459) - DOC: Add
AGENTS.mdguidance for Codex usage by @oesteban (#1427) - DOC: Add Python package CI workflow status badge to
READMEby @jhlegarreta (#1408) - DOC: Update the example report for fMRI to a newer version of MRIQC by @celprov (#1397)
- DOC: Fix link about PyBIDS BIDS file filtering option by @jhlegarreta (#1395)
- DOC: Make the SBATCH script more detailed for newer users by @mckenziephagen (#1379)
- DOC: Update the SBATCH script for the MRIQC protocol manuscript by @mckenziephagen (#1355)
- DOC: Continue moving documentation to the NiPreps site by @oesteban (#1374)
- DOC: Fix missing code block start by @effigies (#1368)
- DOC: Reorganize documentation and redirect to NiPreps docs by @oesteban (#1367)
- DOC: Provide a range of years ending with current for the copyright statement by @yarikoptic (#1359)
- DOC: Add a HPC troubleshooting section to the documentation by @vferat (#1349)
- MAINT: Move
latestonly on final release tags by @oesteban (#1468) - MAINT: Let the arm64 CI jobs skip docs commits without failing by @oesteban (#1467)
- MAINT: Require Python 3.13 and SPEC 0 minimum versions by @oesteban (#1464)
- MAINT: Build the image on Python 3.13 with pixi, for
amd64andarm64by @oesteban (#1463) - MAINT: Add a multi-arch base image with AFNI, ANTs and svht_denoise by @oesteban (#1461)
- MAINT: Print NumPy scalars the pre-2.0 way in doctests by @oesteban (#1460)
- MAINT: Drop Python 3.9 and stop claiming Python 3.13 by @oesteban (#1458)
- MAINT: Refresh the BOLD IQM reference by @oesteban (#1457)
- MAINT: Build and validate the package on Python 3.12 by @oesteban (#1455)
- MAINT: Pin ruff and freeze its rule selection by @oesteban (#1454)
- MAINT: Pin WebAPI image tags in CI by @oesteban (#1430, #1431)
- MAINT: A couple of
pyproject.tomlfixes by @DimitriPapadopoulos (#1426) - MAINT:
ruff checkby @DimitriPapadopoulos (#1420) - MAINT: Bump Python versions by @DimitriPapadopoulos (#1418)
- MAINT: PEP 639 compliance by @DimitriPapadopoulos (#1417)
- MAINT: Bump
actions/checkoutandactions/setup-pythonto v7 by @dependabot (#1415, #1424, #1440, #1444) - MAINT: Execute
deploy_dockerwith commits to master by @oesteban (#1400) - MAINT: Remove an additional
setup-pythonaction in the GHA workflow file by @jhlegarreta (#1377) - MAINT: Specify Python version for ruff by @jhlegarreta (#1376)
- MAINT: Upgrade to ruff 0.9.1 by @DimitriPapadopoulos (#1375)
- MAINT: Add @vferat to
CONTRIBUTORS.mdby @oesteban (#1373)