Repository navigation
ENH: Master tracking — Remote-module ingestion, archival, and consolidation #6160
Description
Primary tracking issue for all remote-module work in ITK 6. Supersedes #3371, #6060, #5174, #4263, #4786, #5557, and is related to #990. The v3 ingestion strategy is documented at Utilities/Maintenance/RemoteModuleIngest/INGESTION_STRATEGY.md.
Goal
Reduce the ~57 entries in Modules/Remote/*.remote.cmake to a small, well-curated set, by either (a) ingesting active modules into the main ITK tree under their natural group (Modules/<Group>/<Name>/) preserving upstream git blame, or (b) archiving unmaintained / superseded upstream repos read-only. Every disposition must be intentional; no module remains as a configure-time fetch unless that is the documented best fit.
Status at a glance (2026-06-06)
- Wave 1 + Wave 2 ingest queues are fully merged. Every Tier-A module is now in-tree.
- Phase 4 Bucket 1 ingest queue is complete. All previously-queued Bucket-1 ingests are now merged: FPFH (ENH: Ingest ITKFPFH into Modules/Registration #6360), MeshToPolyData (ENH: Ingest ITKMeshToPolyData into Modules/Filtering #6335), BSplineGradient (ENH: Ingest ITKBSplineGradient into Modules/Filtering #6385), TwoProjectionRegistration (ENH: Ingest TwoProjectionRegistration remote module #6361), FixedPointInverseDisplacementField (ENH: Ingest ITKFixedPointInverseDisplacementField into Modules/Filtering #6368, merged 2026-06-04), IOMeshSWC (ENH: Ingest ITKIOMeshSWC into Modules/IO (with SWC reader hardening) #6392, merged 2026-06-04), TotalVariation (ENH: Ingest ITKTotalVariation into Modules/Filtering (with ITKproxTV third-party module) #6381, merged 2026-06-06; + new
Modules/ThirdParty/proxTV). Shape has been reclassified as a keep-remote specialty module (not ingested at this time; see Bucket 3). - Phase 4 Bucket 2 done: IOTransformDCMTK ingested via ENH: Ingest ITKIOTransformDCMTK into Modules/IO #6310 (merged 2026-05-25).
- Phase 2 archival fully caught up. The three upstreams from this batch — ITKFixedPointInverseDisplacementField (ENH: Ingest ITKFixedPointInverseDisplacementField into Modules/Filtering #6368), ITKIOMeshSWC (ENH: Ingest ITKIOMeshSWC into Modules/IO (with SWC reader hardening) #6392), ITKTotalVariation (ENH: Ingest ITKTotalVariation into Modules/Filtering (with ITKproxTV third-party module) #6381) — were archived 2026-06-06 (whitelisted sources deleted,
README.rst→info.rst, migrationREADME.mdpromoted and verified to render on the landing page, archive flag flipped). No merged ingest has a live upstream repo remaining. - New infra merged: COMP: Fail configure on orphaned remote-module source clones #6378 (COMP: fail configure on orphaned remote-module source clones, merged 2026-06-02); COMP: Remove deprecated v3 ingest-remote-module.sh driver #6384 (COMP: remove deprecated v3
ingest-remote-module.shdriver, merged 2026-06-03).
Action checklist (live)
Phase 0 — infrastructure (DONE)
- Document the v3 whitelist + filter-repo merge strategy (
INGESTION_STRATEGY.md) -
ingest-remote-module.shwith--audit-onlyand--dry-run -
— deprecated 2026-04-28 as linearizing the upstream merge graph; replaced by the merge-preserving rewriter in COMP: Deprecate linearizing ingest helper; add merge-preserving rewriter #6162 (merged 2026-04-29)normalize-ingest-commits.py(per-commit pre-commit replay; subject-prefix normalization) -
cid-normalize.sh(md5 → IPFS CID baseline migration) -
verify-cid-access.sh,verify-whitelist-history.sh -
PruneSupersededCiCaches.py(CI cache hygiene; COMP: Prune superseded GitHub Actions ccache entries from CI #6151, merged 2026-05-01) - v4 ingest pipeline refinement — nested-if fix and global whitelist (COMP: Refine v4 ingestion pipeline — nested-if fix and global whitelist #6204, merged 2026-05-12)
Phase 1 — completed ingests
- AnisotropicDiffusionLBR →
Modules/Filtering/(ENH: Ingest AnisotropicDiffusionLBR into Modules/Filtering #6093, merged 2026-04-23) - Montage →
Modules/Registration/Montage/(ENH: Ingest ITKMontage remote module into Modules/Registration/Montage #6103, merged 2026-04-25) - GenericLabelInterpolator →
Modules/Filtering/(ENH: Ingest ITKGenericLabelInterpolator into Modules/Filtering #6135, merged 2026-04-27) - MGHIO →
Modules/IO/MGHIO/(ENH: Ingest ITKMGHIO into Modules/IO #6137, merged 2026-04-28) - FastBilateral →
Modules/Filtering/(ENH: Ingest ITKFastBilateral into Modules/Filtering (supersedes #5134) #6159, merged 2026-04-29; supersedes ENH: Integrate FastBilateralImageFilter from remote module #5134) - MeshNoise →
Modules/Filtering/MeshNoise/(ENH: Ingest ITKMeshNoise into Modules/Filtering (closes #5174) #6161, merged 2026-04-29; closes Compile error inMeshNoise/test/itkAdditiveGaussianNoiseMeshFilterTest.cxx:56#5174) - LabelErodeDilate →
Modules/Filtering/(ENH: Ingest ITKLabelErodeDilate into Modules/Filtering #6171, merged 2026-04-30)
Phase 2 — upstream archival (post-ingest follow-up)
For each merged ingest, the original upstream repo's whitelisted files are deleted, the README is promoted to the migration notice (so the GitHub landing page shows archived status), and the repo is marked Archived in GitHub settings.
Archived 2026-06-06 (this batch): no open PRs; issues already cleared (ITKFixedPointInverseDisplacementField has issues disabled). Whitelisted sources deleted, README.rst→info.rst + migration README.md promoted (verified rendering on landing page), archive flag flipped.
- ITKFixedPointInverseDisplacementField (ingested ENH: Ingest ITKFixedPointInverseDisplacementField into Modules/Filtering #6368)
- ITKIOMeshSWC (ingested ENH: Ingest ITKIOMeshSWC into Modules/IO (with SWC reader hardening) #6392)
- ITKTotalVariation (ingested ENH: Ingest ITKTotalVariation into Modules/Filtering (with ITKproxTV third-party module) #6381)
Archived (complete):
- ITKAnisotropicDiffusionLBR
- ITKMontage
- ITKGenericLabelInterpolator (#43)
- ITKMGHImageIO (#50)
- ITKFastBilateral (#16)
- ITKMeshNoise (#37)
- ITKLabelErodeDilate
- ITKCuberille
- ITKIOMeshSTL
- ITKIOMeshMZ3
- ITKIOFDF
- ITKPolarTransform
- ITKSplitComponents
- ITKSubdivisionQuadEdgeMeshFilter
- ntustison/ITKAdaptiveDenoising
- ITKTextureFeatures
- ITKPrincipalComponentsAnalysis
- ITKHigherOrderAccurateGradient
- ITKSmoothingRecursiveYvvGaussianFilter
- ITKParabolicMorphology
- KitwareMedical/ITKMorphologicalContourInterpolation
- KitwareMedical/MultipleImageIterator
- ITKNeuralNetworks — already archived upstream (subsumes NeuralNetworks (Numerics) module missing in recent versions #5557; close that issue with this resolution)
- ITKTBBImageToImageFilter — archive without ingestion (superseded by ITK's built-in TBB threading via PoolMultiThreader)
Archived 2026-05-27 (this batch): open issues transferred to ITK (#6338–#6358) or closed, open PRs closed, whitelisted sources deleted, README promoted to the migration notice, repo marked Archived.
- ITKThickness3D (ingested ENH: Ingest ITKThickness3D into Modules/Filtering/Thickness3D #6268)
- ITKIOScanco (ingested ENH: Ingest ITKIOScanco into Modules/IO #6266)
- ITKIsotropicWavelets (ingested ENH: Ingest ITKIsotropicWavelets into Modules/Filtering #6267)
- ITKMinimalPathExtraction (ingested ENH: Ingest ITKMinimalPathExtraction into Modules/Filtering/MinimalPathExtraction #6271)
- ITKBoneEnhancement (ingested ENH: Ingest ITKBoneEnhancement into Modules/Filtering/BoneEnhancement #6272)
- ITKBoneMorphometry (ingested ENH: Ingest ITKBoneMorphometry into Modules/Filtering/BoneMorphometry #6273)
- ITKGrowCut (ingested ENH: Ingest ITKGrowCut into Modules/Segmentation/GrowCut #6274)
- ITKRANSAC (ingested ENH: Ingest ITKRANSAC into Modules/Registration/RANSAC #6275)
- ITKVariationalRegistration (ingested ENH: Ingest ITKVariationalRegistration into Modules/Registration/VariationalRegistration #6276)
- ITKIOTransformDCMTK (ingested ENH: Ingest ITKIOTransformDCMTK into Modules/IO #6310)
KitwareMedical org repos — manual archive flag now flipped (confirmed Archived 2026-05-30):
- KitwareMedical/ITKRLEImage (ingested ENH: Ingest ITKRLEImage into Modules/Filtering #6208) — migration merged (WIP: Set up Windows Python CI with Azure Pipelines #75); README promoted; Archived
- KitwareMedical/ITKStrain (ingested ENH: Ingest ITKStrain into Modules/Filtering/Strain #6269) — migration pushed; README promoted; Archived
- KitwareMedical/ITKPhaseSymmetry (ingested ENH: Ingest ITKPhaseSymmetry into Modules/Filtering/PhaseSymmetry #6270) — migration pushed; README promoted; Archived
Archived 2026-06-02:
- ITKFPFH (ingested ENH: Ingest ITKFPFH into Modules/Registration #6360) — whitelisted sources deleted, migration README promoted (renders on landing page), repo Archived
Archived 2026-06-03 (this batch): open PRs closed as outdated, the one open issue transferred to ITK (#6389), whitelisted sources deleted, README.rst→info.rst + migration README.md promoted (renders on landing page), archive flag flipped.
- ITKMeshToPolyData (ingested ENH: Ingest ITKMeshToPolyData into Modules/Filtering #6335) — also removed WebAssembly/packaging tooling; PR Name job pieces consistently when calling numberOfWorkUnits() #86 closed; issue WIP: Trying building Doxygen on CircleCI for ITK #41 → ITK Add itk::PolyLineParametricPathToMeshFilter and itk::MeshToPolyLineParametricPathFilter #6389
- ITKBSplineGradient (ingested ENH: Ingest ITKBSplineGradient into Modules/Filtering #6385)
- ITKTwoProjectionRegistration (ingested ENH: Ingest TwoProjectionRegistration remote module #6361)
Phase 3 — Tier A ingest queue (pure ITK, no external deps) — COMPLETE
The order below was the proposed ingest sequence; all entries are now merged.
Wave 1 (Filtering / IO, smallest footprint, fastest review). ⭐ = open user-filed issue or high upstream-stars community-demand signal raised priority.
- LabelErodeDilate →
Modules/Filtering/(ENH: Ingest ITKLabelErodeDilate into Modules/Filtering #6171, merged 2026-04-30; 5★ upstream) - ⭐ MorphologicalContourInterpolation →
Modules/Filtering/(ENH: Ingest ITKMorphologicalContourInterpolation (stacked on #6208) #6209, merged 2026-05-07; 34★) - IOMeshSTL →
Modules/IO/IOMeshSTL/(ENH: Ingest ITKIOMeshSTL into Modules/IO #6206, merged 2026-05-05) - Cuberille →
Modules/Filtering/(ENH: Ingest ITKCuberille into Modules/Filtering #6205, merged 2026-05-05; 6★, isosurface mesh extraction) - SplitComponents →
Modules/Filtering/SplitComponents/(ENH: Ingest ITKSplitComponents into Modules/Filtering #6212, merged 2026-05-05) - SubdivisionQuadEdgeMeshFilter →
Modules/Filtering/SubdivisionQuadEdgeMeshFilter/(ENH: Ingest ITKSubdivisionQuadEdgeMeshFilter into Modules/Filtering (v4, stacks on #6204) #6229, merged 2026-05-07) - ParabolicMorphology →
Modules/Filtering/(ENH: Ingest ITKParabolicMorphology into Modules/Filtering #6260, merged 2026-05-13; 3★) - SmoothingRecursiveYvvGaussianFilter →
Modules/Filtering/(ENH: Ingest ITKSmoothingRecursiveYvvGaussianFilter into Modules/Filtering #6243, merged 2026-05-13; 2★) - IOMeshMZ3 →
Modules/IO/IOMeshMZ3/(ENH: Ingest ITKIOMeshMZ3 into Modules/IO #6214, merged 2026-05-05) - IOFDF →
Modules/IO/IOFDF/(ENH: Ingest ITKIOFDF into Modules/IO #6215, merged 2026-05-05) - HigherOrderAccurateGradient →
Modules/Filtering/(ENH: Ingest ITKHigherOrderAccurateGradient into Modules/Filtering #6242, merged 2026-05-12; 1★) - PolarTransform →
Modules/Filtering/PolarTransform/(ENH: Ingest ITKPolarTransform into Modules/Filtering #6211, merged 2026-05-05) - MultipleImageIterator →
Modules/Core/(ENH: Ingest MultipleImageIterator into Modules/Core #6263, merged 2026-05-13; 1★) - RLEImage →
Modules/Filtering/RLEImage/(ENH: Ingest ITKRLEImage into Modules/Filtering #6208, merged 2026-05-05) - AdaptiveDenoising →
Modules/Filtering/AdaptiveDenoising/(Ingest ITKAdaptiveDenoising into Modules/Filtering #6235, merged 2026-05-08) - PrincipalComponentsAnalysis →
Modules/Numerics/PrincipalComponentsAnalysis/(ENH: Ingest ITKPrincipalComponentsAnalysis into Modules/Numerics #6240, merged 2026-05-09) - AnalyzeObjectLabelMap — disposition A (dropped, deprecated; not ingested per COMP: Drop AnalyzeObjectLabelMap remote module (deprecated, not ingested) #6207, 2026-05-06)
Wave 2 (richer or external-data-heavy) — all merged.
- ⭐ IOScanco →
Modules/IO/(ENH: Ingest ITKIOScanco into Modules/IO #6266, merged 2026-05-18) — wrapping bug IOScanco wrapping fails do to fatal error: 'itkCommand.h' file not found #5920 (closed 2026-03-11) signalled active user dependency - BoneEnhancement →
Modules/Filtering/BoneEnhancement/(ENH: Ingest ITKBoneEnhancement into Modules/Filtering/BoneEnhancement #6272, merged 2026-05-20) - BoneMorphometry →
Modules/Filtering/BoneMorphometry/(ENH: Ingest ITKBoneMorphometry into Modules/Filtering/BoneMorphometry #6273, merged 2026-05-19) - TextureFeatures →
Modules/Filtering/TextureFeatures/(ENH: Ingest ITKTextureFeatures into Modules/Filtering #6238, merged 2026-05-09) - IsotropicWavelets →
Modules/Filtering/(ENH: Ingest ITKIsotropicWavelets into Modules/Filtering #6267, merged 2026-05-19) - GrowCut →
Modules/Segmentation/GrowCut/(ENH: Ingest ITKGrowCut into Modules/Segmentation/GrowCut #6274, merged 2026-05-19) - RANSAC →
Modules/Registration/RANSAC/(ENH: Ingest ITKRANSAC into Modules/Registration/RANSAC #6275, merged 2026-05-27) - VariationalRegistration →
Modules/Registration/VariationalRegistration/(ENH: Ingest ITKVariationalRegistration into Modules/Registration/VariationalRegistration #6276, merged 2026-05-20) - Thickness3D →
Modules/Filtering/Thickness3D/(ENH: Ingest ITKThickness3D into Modules/Filtering/Thickness3D #6268, merged 2026-05-15) - Strain →
Modules/Filtering/Strain/(ENH: Ingest ITKStrain into Modules/Filtering/Strain #6269, merged 2026-05-16) - PhaseSymmetry →
Modules/Filtering/PhaseSymmetry/(ENH: Ingest ITKPhaseSymmetry into Modules/Filtering/PhaseSymmetry #6270, merged 2026-05-19) - MinimalPathExtraction →
Modules/Filtering/MinimalPathExtraction/(ENH: Ingest ITKMinimalPathExtraction into Modules/Filtering/MinimalPathExtraction #6271, merged 2026-05-17) - SimpleITKFilters — disposition: NOT ingested (abandoned per Tier-B; ENH: Ingest ITKSimpleITKFilters into Modules/Filtering/SimpleITKFilters #6277 closed)
Phase 4 — Tier B disposition (refined per .devlocal/remote-module-ingest-report.md)
Bucket 1 — Phase 4 ingest queue (ITK-core-only deps; ingest in dependency order)
- MeshToPolyData — disposition
4; INGEST FIRST (COMPILE_DEPENDS of BSplineGradient/others; ITKCommon/Mesh only) →Modules/Filtering/MeshToPolyData(ENH: Ingest ITKMeshToPolyData into Modules/Filtering #6335, merged 2026-06-02); upstream archived 2026-06-03 - FixedPointInverseDisplacementField — disposition
4(ITKCommon/ImageGrid) →Modules/Filtering/FixedPointInverseDisplacementField(ENH: Ingest ITKFixedPointInverseDisplacementField into Modules/Filtering #6368, merged 2026-06-04); upstream archived 2026-06-06 - BSplineGradient — disposition
4(after MeshToPolyData) →Modules/Filtering/BSplineGradient(ENH: Ingest ITKBSplineGradient into Modules/Filtering #6385, merged 2026-06-03; +BUG shared-interpolator data-race fix); upstream archived 2026-06-03 - TwoProjectionRegistration — disposition
4(ITK registration stack) →Modules/Registration/TwoProjectionRegistration(ENH: Ingest TwoProjectionRegistration remote module #6361, merged 2026-06-03); upstream archived 2026-06-03 - TotalVariation — disposition
4(ITKEigen3 in-tree; + newModules/ThirdParty/proxTVExternalProject) →Modules/Filtering/TotalVariation(ENH: Ingest ITKTotalVariation into Modules/Filtering (with ITKproxTV third-party module) #6381, merged 2026-06-06); upstream archived 2026-06-06 - FPFH — disposition
4(ITKRegistrationCommon) →Modules/Registration/FPFH(ENH: Ingest ITKFPFH into Modules/Registration #6360, merged 2026-06-01); upstream archived 2026-06-02 - IOMeshSWC — disposition
4(ITKIOMeshBase) →Modules/IO/IOMeshSWC(ENH: Ingest ITKIOMeshSWC into Modules/IO (with SWC reader hardening) #6392, merged 2026-06-04; + SWC reader hardening); upstream archived 2026-06-06 - Shape — reclassified 2026-06-06 as keep-remote specialty module (non-ISC upstream; not ingested at this time). Moved to Bucket 3.
Bucket 2 — Phase 4 gated ingest (behind existing option; no new external dep)
- IOTransformDCMTK — ingested
EXCLUDE_FROM_DEFAULTgated byModule_ITKDCMTK(ENH: Ingest ITKIOTransformDCMTK into Modules/IO #6310, merged 2026-05-25; DCMTK already bundled in-tree)
Bucket 3 — Keep remote / do NOT ingest
- DO NOT INCLUDE SimpleITKFilters →
Modules/Filtering/ - SphinxExamples — keep remote: doc/data repo, content stale since v5.3.0 (only 2026 CI-lint plumbing), 13.6 MB,
BUILD_EXAMPLES-gated - WebAssemblyInterface — keep remote: 300 MB active polyglot monorepo (ITK-Wasm); subtree ingest impractical
- CudaCommon, RTK, VkFFTBackend — GPU/CUDA stacks, separate licensing/build matrix
- SCIFIO, IOOpenSlide — large external libraries (Bio-Formats, OpenSlide)
- TubeTK, Ultrasound, LesionSizingToolkit, HASI, SkullStrip, Cleaver, Shape — domain-specific / specialty toolkits with their own release cadences (Shape reclassified here 2026-06-06: non-ISC upstream, not ingested at this time)
- BioCell — keep remote: legacy near-dead cell-sim demo (ITKCommon/Mesh-only but not worth ingesting)
Bucket 4 — Still needs investigation
- PerformanceBenchmarking — clean deps (ITKCommon) but policy call: benchmark harness in core vs. separate build against installed ITK
- TractographyTRX — vendors non-ISC
trx-cpp; licensing review needed before any ingest decision
Phase 5 — discoverability & docs
- Auto-generated remote-module catalog page with status (Updated, self-maintained resource to list exhaustively existing remote modules #4786 — addressed by this issue's status table once it is mirrored to the docs site)
- Re-enable Doxygen processing for in-tree modules now that the historic
Modules/Remote/Doxygen disablement reason no longer applies module-by-module (Re-enable doxygen processing of the "Remote" directories. #990) - Update
Documentation/docs/migration_guides/itk_6_migration_guide.mdwith the consolidated remote-module disposition table
Status table — every entry under Modules/Remote/ today
(L = Wave 1 ingest queue · 2 = Wave 2 ingest queue · 4 = Phase 4 queued ingest (core-only or gated) · A = archive without ingest · K = keep remote, Tier B · ✓ = ingested · ⏳ = ingest in flight · ? = needs investigation)
| Module | Disposition | Notes |
|---|---|---|
| AdaptiveDenoising | ✓ | merged via #6235 (2026-05-08) |
| AnalyzeObjectLabelMap | A | dropped (deprecated, not ingested) via #6207 (2026-05-06) |
| BioCell | K | legacy near-dead cell-sim demo; not worth ingesting |
| BoneEnhancement | ✓ | merged via #6272 (2026-05-20) |
| BoneMorphometry | ✓ | merged via #6273 (2026-05-19) |
| BSplineGradient | ✓ | merged via #6385 (2026-06-03) → Modules/Filtering/BSplineGradient; +BUG shared-interpolator data-race fix; upstream archived 2026-06-03 |
| Cleaver | K | external Cleaver dep |
| Cuberille | ✓ | merged via #6205 (2026-05-05) |
| CudaCommon | K | CUDA stack |
| FastBilateral | ✓ | merged via #6159 (2026-04-29) |
| FixedPointInverseDisplacementField | ✓ | merged via #6368 (2026-06-04) → Modules/Filtering/FixedPointInverseDisplacementField; upstream archived 2026-06-06 |
| FPFH | ✓ | merged via #6360 (2026-06-01) → Modules/Registration/FPFH; upstream archived 2026-06-02 |
| GrowCut | ✓ | merged via #6274 (2026-05-19) |
| HASI | K | hierarchical anatomy stack |
| HigherOrderAccurateGradient | ✓ | merged via #6242 (2026-05-12) |
| IOFDF | ✓ | merged via #6215 (2026-05-05) |
| IOMeshMZ3 | ✓ | merged via #6214 (2026-05-05) |
| IOMeshSTL | ✓ | merged via #6206 (2026-05-05) |
| IOMeshSWC | ✓ | merged via #6392 (2026-06-04) → Modules/IO/IOMeshSWC; + SWC reader hardening; upstream archived 2026-06-06 |
| IOOpenSlide | K | OpenSlide dep |
| IOScanco | ✓ | merged via #6266 (2026-05-18) |
| IOTransformDCMTK | ✓ | merged via #6310 (2026-05-25); gated EXCLUDE_FROM_DEFAULT behind Module_ITKDCMTK |
| IsotropicWavelets | ✓ | merged via #6267 (2026-05-19) |
| LabelErodeDilate | ✓ | merged via #6171 (2026-04-30) |
| LesionSizingToolkit | K | toolkit scope |
| MeshNoise | ✓ | merged via #6161 (2026-04-29); closed #5174 |
| MeshToPolyData | ✓ | merged via #6335 (2026-06-02) → Modules/Filtering/MeshToPolyData; upstream archived 2026-06-03 |
| MinimalPathExtraction | ✓ | merged via #6271 (2026-05-17) |
| MorphologicalContourInterpolation | ✓ | merged via #6209 (2026-05-07); 34★ upstream |
| MultipleImageIterator | ✓ | merged via #6263 (2026-05-13) |
| ParabolicMorphology | ✓ | merged via #6260 (2026-05-13) |
| PerformanceBenchmarking | ? | clean deps; policy: core vs. separate build against installed ITK |
| PhaseSymmetry | ✓ | merged via #6270 (2026-05-19) |
| PolarTransform | ✓ | merged via #6211 (2026-05-05) |
| PrincipalComponentsAnalysis | ✓ | merged via #6240 (2026-05-09) |
| RANSAC | ✓ | merged via #6275 (2026-05-27) |
| RLEImage | ✓ | merged via #6208 (2026-05-05) |
| RTK | K | reconstruction toolkit |
| SCIFIO | K | Bio-Formats dep |
| Shape | K | reclassified 2026-06-06: keep-remote specialty module; non-ISC upstream, not ingested at this time |
| SimpleITKFilters | A | not ingested (abandoned per Tier-B; #6277 closed) |
| SkullStrip | K | toolkit scope |
| SmoothingRecursiveYvvGaussianFilter | ✓ | merged via #6243 (2026-05-13) |
| SphinxExamples | K | doc/data repo, stale since v5.3.0, 13.6 MB, BUILD_EXAMPLES-gated |
| SplitComponents | ✓ | merged via #6212 (2026-05-05) |
| Strain | ✓ | merged via #6269 (2026-05-16) |
| SubdivisionQuadEdgeMeshFilter | ✓ | merged via #6229 (2026-05-07) |
| TextureFeatures | ✓ | merged via #6238 (2026-05-09) |
| Thickness3D | ✓ | merged via #6268 (2026-05-15) |
| TotalVariation | ✓ | merged via #6381 (2026-06-06) → Modules/Filtering/TotalVariation; adds ThirdParty/proxTV ExternalProject; upstream archived 2026-06-06 |
| TractographyTRX | ? | vendors non-ISC trx-cpp; licensing review needed |
| TubeTK | K | toolkit scope |
| TwoProjectionRegistration | ✓ | merged via #6361 (2026-06-03) → Modules/Registration/TwoProjectionRegistration; upstream archived 2026-06-03 |
| Ultrasound | K | toolkit scope |
| VariationalRegistration | ✓ | merged via #6276 (2026-05-20) |
| VkFFTBackend | K | VkFFT dep |
| WebAssemblyInterface | K | 300MB polyglot monorepo (ITK-Wasm); subtree ingest impractical |
Also tracked outside Modules/Remote/:
| Repo | Disposition | Notes |
|---|---|---|
| ITKNeuralNetworks | ✓ archived | already archived; resolves #5557 |
| ITKTBBImageToImageFilter | A | archive without ingest; superseded by built-in TBB threading |
Subsumed and related issues
- Integrate some remote modules into ITK proper #3371 (dzenanz, 2022-04-12) — original "integrate some remote modules" tracker; superseded.
- ENH: Consolidate remote modules into hierarchical category repos #6060 (hjmjohnson, 2026-04-14) — "Consolidate remote modules into hierarchical category repos"; superseded — the per-module disposition table here is the canonical work plan.
- NeuralNetworks (Numerics) module missing in recent versions #5557 (Laurent-777, 2025-10-16) — "NeuralNetworks module missing in recent versions"; resolution: ITKNeuralNetworks already archived upstream, NeuralNetworks is intentionally not migrating into ITK 6. Close.
- Compile error in
MeshNoise/test/itkAdditiveGaussianNoiseMeshFilterTest.cxx:56#5174 (seanm, 2025-01-24) — MeshNoise compile error; resolved by ENH: Ingest ITKMeshNoise into Modules/Filtering (closes #5174) #6161 (merged 2026-04-29). - Re-evaluate modules in the ITK repository and remote modules for ITK 6 #4263 (thewtex, 2023-10-18) — "Re-evaluate modules for ITK 6"; this issue is the ITK-6 disposition outcome.
- Updated, self-maintained resource to list exhaustively existing remote modules #4786 (jhlegarreta, 2024-07-20) — "self-maintained list of remote modules"; addressed by the status table above plus the Phase 5 docs auto-generation item.
- Re-enable doxygen processing of the "Remote" directories. #990 (hjmjohnson, 2019-06-03) — Doxygen processing of
Modules/Remote/; folded into Phase 5.
Recent PR activity
| PR | State | Title |
|---|---|---|
| #6093 | merged 2026-04-23 | ENH: Ingest ITKAnisotropicDiffusionLBR into Modules/Filtering |
| #6103 | merged 2026-04-25 | ENH: Ingest ITKMontage remote module into Modules/Registration/Montage |
| #6135 | merged 2026-04-27 | ENH: Ingest ITKGenericLabelInterpolator into Modules/Filtering |
| #6137 | merged 2026-04-28 | ENH: Ingest ITKMGHIO into Modules/IO |
| #6159 | merged 2026-04-29 | ENH: Ingest ITKFastBilateral into Modules/Filtering (supersedes #5134) |
| #6161 | merged 2026-04-29 | ENH: Ingest ITKMeshNoise into Modules/Filtering (closes #5174) |
| #6162 | merged 2026-04-29 | COMP: Deprecate linearizing ingest helper; add merge-preserving rewriter |
| #6171 | merged 2026-04-30 | ENH: Ingest ITKLabelErodeDilate into Modules/Filtering |
| #6151 | merged 2026-05-01 | COMP: Prune superseded GitHub Actions ccache entries from CI |
| #6205 | merged 2026-05-05 | ENH: Ingest ITKCuberille into Modules/Filtering |
| #6206 | merged 2026-05-05 | ENH: Ingest ITKIOMeshSTL into Modules/IO |
| #6207 | merged 2026-05-06 | COMP: Drop AnalyzeObjectLabelMap remote module (deprecated, not ingested) |
| #6208 | merged 2026-05-05 | ENH: Ingest ITKRLEImage into Modules/Filtering |
| #6209 | merged 2026-05-07 | ENH: Ingest ITKMorphologicalContourInterpolation (stacked on #6208) |
| #6211 | merged 2026-05-05 | ENH: Ingest ITKPolarTransform into Modules/Filtering |
| #6212 | merged 2026-05-05 | ENH: Ingest ITKSplitComponents into Modules/Filtering |
| #6214 | merged 2026-05-05 | ENH: Ingest ITKIOMeshMZ3 into Modules/IO |
| #6215 | merged 2026-05-05 | ENH: Ingest ITKIOFDF into Modules/IO |
| #6229 | merged 2026-05-07 | ENH: Ingest ITKSubdivisionQuadEdgeMeshFilter into Modules/Filtering |
| #6235 | merged 2026-05-08 | ENH: Ingest ITKAdaptiveDenoising into Modules/Filtering |
| #6238 | merged 2026-05-09 | ENH: Ingest ITKTextureFeatures into Modules/Filtering |
| #6240 | merged 2026-05-09 | ENH: Ingest ITKPrincipalComponentsAnalysis into Modules/Numerics |
| #6242 | merged 2026-05-12 | ENH: Ingest ITKHigherOrderAccurateGradient into Modules/Filtering |
| #6243 | merged 2026-05-13 | ENH: Ingest ITKSmoothingRecursiveYvvGaussianFilter into Modules/Filtering |
| #6260 | merged 2026-05-13 | ENH: Ingest ITKParabolicMorphology into Modules/Filtering |
| #6263 | merged 2026-05-13 | ENH: Ingest MultipleImageIterator into Modules/Core |
| #6204 | merged 2026-05-12 | COMP: Refine v4 ingestion pipeline — nested-if fix and global whitelist |
| #6266 | merged 2026-05-18 | ENH: Ingest ITKIOScanco into Modules/IO |
| #6268 | merged 2026-05-15 | ENH: Ingest ITKThickness3D into Modules/Filtering/Thickness3D |
| #6269 | merged 2026-05-16 | ENH: Ingest ITKStrain into Modules/Filtering/Strain |
| #6271 | merged 2026-05-17 | ENH: Ingest ITKMinimalPathExtraction into Modules/Filtering/MinimalPathExtraction |
| #6267 | merged 2026-05-19 | ENH: Ingest ITKIsotropicWavelets into Modules/Filtering |
| #6270 | merged 2026-05-19 | ENH: Ingest ITKPhaseSymmetry into Modules/Filtering/PhaseSymmetry |
| #6273 | merged 2026-05-19 | ENH: Ingest ITKBoneMorphometry into Modules/Filtering/BoneMorphometry |
| #6274 | merged 2026-05-19 | ENH: Ingest ITKGrowCut into Modules/Segmentation/GrowCut |
| #6276 | merged 2026-05-20 | ENH: Ingest ITKVariationalRegistration into Modules/Registration/VariationalRegistration |
| #6272 | merged 2026-05-20 | ENH: Ingest ITKBoneEnhancement into Modules/Filtering/BoneEnhancement |
| #6310 | merged 2026-05-25 | ENH: Ingest ITKIOTransformDCMTK into Modules/IO |
| #6275 | merged 2026-05-27 | ENH: Ingest ITKRANSAC into Modules/Registration/RANSAC |
| #6360 | merged 2026-06-01 | ENH: Ingest ITKFPFH into Modules/Registration |
| #6335 | merged 2026-06-02 | ENH: Ingest ITKMeshToPolyData into Modules/Filtering |
| #6378 | merged 2026-06-02 | COMP: Fail configure on orphaned remote-module source clones |
| #6384 | merged 2026-06-03 | COMP: Remove deprecated v3 ingest-remote-module.sh driver |
| #6385 | merged 2026-06-03 | ENH: Ingest ITKBSplineGradient into Modules/Filtering |
| #6361 | merged 2026-06-03 | ENH: Ingest TwoProjectionRegistration remote module |
| #6368 | merged 2026-06-04 | ENH: Ingest ITKFixedPointInverseDisplacementField into Modules/Filtering |
| #6392 | merged 2026-06-04 | ENH: Ingest ITKIOMeshSWC into Modules/IO (with SWC reader hardening) |
| #6381 | merged 2026-06-06 | ENH: Ingest ITKTotalVariation into Modules/Filtering (with ITKproxTV third-party module) |
| #6277 | closed | ENH: Ingest ITKSimpleITKFilters (abandoned per Tier-B disposition) |
| #6085 | closed | ENH: Add Modules/Beta/ container (alternative approach abandoned in favor of natural-group ingest) |
| #6086 | closed | WIP: Ingest 10 beta modules under Modules/Beta/ (stacked on #6085, abandoned) |
| #6072 | closed | WIP: REMOTE_MODULE_TEST DCMTK external module compatibility (parked) |
| #6061 | closed | WIP: Combine many remote to few remote module groups (alternative approach abandoned) |
| #5134 | closed | dzenanz's original FastBilateral integration (superseded by #6159) |
Activity
hjmjohnson commentedon Apr 28, 2026
Wave-1 progress: MeshNoise ingest in flight as #6161. Closes #5174 in the same PR.
hjmjohnson commentedon Apr 28, 2026
Phase-0 infrastructure follow-up: #6162 deprecates
normalize-ingest-commits.py(which linearized history on PRs #6135, #6137, #6159, #6161) and addsrewrite-history-merge-preserving.py, the merge-preserving replacement implementing the Phase 1 / Phase 2 / Phase 3 / Phase 4 architecture from~/.claude/rules/ingest-merge-topology.md.DOC: Promote migration notice to README.md so GitHub landing page sho…
hjmjohnson commentedon Apr 30, 2026
LabelErodeDilate ingest merged as #6171 (upstream
690015cae2); standalone repoInsightSoftwareConsortium/ITKLabelErodeDilateREADME replaced with migration notice (commit71ef035) and repo archived ✓.hjmjohnson commentedon May 4, 2026
Decision: archive
AnalyzeObjectLabelMapwithout ingestingTracked in #6160. Local commit on branch
hjmjohnson/archive-AnalyzeObjectLabelMapremovesModules/Remote/AnalyzeObjectLabelMap.remote.cmake.Rationale
The Analyze Object Map
.objformat is a legacy format from the late 1990s / early 2000s era of Mayo Clinic's Analyze software. TheITKAnalyzeObjectMapmodule is essentially the only open-source reader/writer for it. There is a small residual user base of Analyze software (AnalyzeDirect reports about 3 employees and the software is still commercially sold), but those users work within the commercial Analyze environment and are unlikely to need the ITK reader. No other major open-source imaging package — Slicer, SPM, FreeSurfer, FSL, AFNI — supports the format.The remote module has been maintained at minimum level — CI builds pass, it was updated for ITK 5.x API changes — but it has zero stars, no releases, and the underlying format has been superseded. Unless someone at a specific institution has legacy Analyze Object Map data they need to convert, this module is effectively dormant.
Recommended path for any remaining users
Users with legacy Analyze Object Map data should perform a one-time conversion to NIfTI label maps (well-supported across the open-source imaging ecosystem) and move forward without needing the ITK reader.
Effect of this archival
Modules/Remote/AnalyzeObjectLabelMap.remote.cmakeis removed; the module is no longer reachable via-DModule_AnalyzeObjectLabelMap:BOOL=ONin ITK builds.InsightSoftwareConsortium/ITKAnalyzeObjectMapremains read-accessible for anyone needing the historical reader; it should be flipped toarchived=trueafter the ITK PR merges (no Phase B ingestion-archival run is needed since nothing was ingested into ITK proper).hjmjohnson commentedon May 5, 2026
In-flight PR snapshot (2026-05-05).
Modules/Filtering/Modules/IO/fffd214a→ rebased, nowf100c257); @dzenanz feedback addressed (if(NOT ITK_SOURCE_DIR)wrapper dropped,.ExternalData_MD5_<hash>cache files removed); rebased onto currentupstream/mainwith--rebase-merges(25 merges + 1 root unchanged); only ghostflow root-commit error remains (acknowledged-unavoidable)Modules/Filtering/itk::RLEImageModules/Filtering/Populate shared ExternalData cachererun went green (ok=2457 fail=0). Branch preserved onhjmjohnson:ingest-mci; resubmit once #6208 landsINGESTION_STRATEGY_v4.md,ingest-module-v4.sh,sanitize-history.py,archive-remote-module.sh)**/.ExternalData_*; auto-unwrap ofif(NOT ITK_SOURCE_DIR)standalone-build CMake guard. v4 supersedes the deprecatednormalize-ingest-commits.pyreferenced in #6162Merge order and dependencies
Cuberille (#6205, merged) and the v4 strategy refinements landed on #6204 today close the loop on v4's first iteration: deny-pass globs and CMake standalone-build-guard unwrap are now part of Phase A, so future ingests should not need post-PR fixups for those two patterns.
Tier-A queue items unblocked once #6208 / #6206 merge
After #6206 (IOMeshSTL) and #6208 (RLEImage) land:
COMP: Drop AnalyzeObjectLabelMap remote module (deprecated, not inges…
thewtex commentedon May 6, 2026
@hjmjohnson absolutely incredible work!!! 🥇 💖 🎇 ✨
Per #6060 (comment)
There is a real issue with module size, module dependencies, that is a major concern for loading / performance.
itk-filtering, itk-io, etc. are groups of module packaged into wheels. itk-filtering, itk-io modules depend on itk-core modules, but not other module group wheels. We do want to keep this separation.
Note that all modules in one wheel group, e.g. itk-filtering, do not necessarily all load at once. However a module is installed, a module will only load itself, its module dependencies, and its module transitive dependencies.
A practical issue with the integration of more classes into the module wheels is that we are almost at the wheel size limit (100MB) for multiple wheel groups, e.g. itk-filtering, itk-numerics:
We will need more mostly independent wheel groups for distribution.
Yes. The issue here is more that modules are not isolated enough in the dependency graph. And some are tool large.
In the plan above, I think we need a Phase 4B and Phase 4C.
Phase 4B: Improve module dependency graph
Likely an NP-hard problem, but an LLM may be able to propose a variety of module names, then write some scripts to experimently / greedly try placing modules in graphs.
Phase 4C: Sort the modules into wheel groups
Similar criteria. We should target the packaged wheels to be < 50 MB.
CC @hjmjohnson @SimonRit @dzenanz @blowekamp
dzenanz commentedon May 6, 2026
One idea: put all the modules that are not built by default into an
-optionalwheel, e.g.itk-filtering-optional.How much FEM (if anything) contributes to the size of
itk-numericswheel? I have never heard of ITK's FEM framework being used. Maybe now is a good time to deprecate it?SimonRit commentedon May 6, 2026
I tried to look at the dependency graph in my regular ITK build with this patch
and, I'm not sure it's helpful but you can have a look (for an ITK configured with default modules and RTK I believe):
https://www.creatis.insa-lyon.fr/~srit/itk_dependency_graph.dot
https://www.creatis.insa-lyon.fr/~srit/itk_dependency_graph.svg
hjmjohnson commentedon May 7, 2026
Status update — 2026-05-07
Seven additional Wave 1 ingests have landed since the last update:
Modules/Filtering/(c14d39d4d6)Modules/IO/(420a9e22fe)Modules/Filtering/(61019f9e0f)Modules/IO/(17467b4ead)Modules/IO/(2b9d7b93d0)Modules/Filtering/(d6870551ba)Modules/Filtering/(50186c0b0c)Modules/Remote/is now down to 47 entries (was 57).Recommended next ingest: SubdivisionQuadEdgeMeshFilter
Highest-priority Wave 1 module remaining (4★ upstream, pure-ITK QuadEdgeMesh extension, no external deps, small footprint). Natural destination:
Modules/Filtering/SubdivisionQuadEdgeMeshFilter/.Remaining Wave 1 queue (by stars)
Wave 2 alternative
If a user-demand-driven ordering is preferred over star-count, IOScanco is the strongest Wave 2 candidate (⭐ recent user-filed wrapping bug #5920 signals active downstream dependency). Defer to Tier B's external-data weighting if/when CI capacity becomes the bottleneck.
hjmjohnson commentedon May 9, 2026
Status update — 2026-05-08
Substantial progress on Phases 1–2 since the last update. The v4 ingest
pipeline (#6204) is now driving these.
Phase 1 — additional completed ingests
Modules/Filtering/RLEImage/Modules/Filtering/MorphologicalContourInterpolation/Modules/Filtering/Cuberille/Modules/IO/IOMeshSTL/Modules/Filtering/PolarTransform/Modules/Filtering/SplitComponents/Modules/IO/IOMeshMZ3/Modules/IO/IOFDF/Modules/Filtering/SubdivisionQuadEdgeMeshFilter/Phase 1 — open ingests
Phase 2 — newly archived upstream repos
All nine landing pages now render the migration notice and the repos
are marked
archived=true:InsightSoftwareConsortium/ITKSubdivisionQuadEdgeMeshFilter8540649InsightSoftwareConsortium/ITKPolarTransform745cd10InsightSoftwareConsortium/ITKIOFDFba44725InsightSoftwareConsortium/ITKIOMeshMZ365c2849InsightSoftwareConsortium/ITKSplitComponents0b310c5InsightSoftwareConsortium/ITKCuberillea521701InsightSoftwareConsortium/ITKIOMeshSTL0fce299KitwareMedical/ITKContourInterpolationbea4b45KitwareMedical/ITKRLEImagef8ef349Other infra
normalize-ingest-commits.pydeprecation has been superseded by thev4 ingest pipeline (COMP: Refine v4 ingestion pipeline — nested-if fix and global whitelist #6204); the linearizing-rewriter problem from the
v3 path no longer applies.
prose-budget.md+kw-prose-budget.pyadvisory hook landed (PR DOC: Add prose-budget for committed text and warning-level commit-msg hook #6241)to keep follow-up commit/PR/comment text within the documented caps.
hjmjohnson commentedon May 12, 2026
Status update — 2026-05-12
Four additional Wave 1 ingests have landed since the 2026-05-08 update; one remains in review.
Phase 1 — additional completed ingests
Modules/Filtering/AdaptiveDenoising/Modules/Filtering/TextureFeatures/Modules/Numerics/PrincipalComponentsAnalysis/Modules/Filtering/HigherOrderAccurateGradient/Phase 3 — in flight
Phase 3 — Wave 1 remaining (clean ingest, no external deps)
After these two land, Wave 1 Tier-A pure-ITK ingest queue is empty and the remaining work shifts to Wave 2 (richer / external-data) and the Phase 5 docs/Doxygen items.
Disposition table — flips since 2026-05-08
COMP: Drop AnalyzeObjectLabelMap remote module (deprecated, not inges…
2 remaining items
hjmjohnson commentedon May 15, 2026
Agreed. I think we should not confound to many improvements in this effort. It is already a tremendous amount of work as it is. I am keeping some private notes (will make public once done) regarding future steps and tasks to address. Thanks for bringing this up.
dzenanz commentedon May 15, 2026
After the modules themselves are ingested, we have examples on the radar. Some remotes had notebooks, and just running them successfully was another layer of testing. Should we also migrate the issues from the remote repositories here? After closing fixed or no longer relevant issues, of course.
hjmjohnson commentedon May 15, 2026
@dzenanz I think we should carefully triage migrating issues. In many cases the issues should not be migrated. I would be supportive only of moving issues that can be verified as needing attention. Many of the "it does not work with ITK 5.3.0" or "does not compile on my machine" flavored issues from more than 1 year ago are likely more noise than benefit.
hjmjohnson commentedon May 15, 2026
blowekamp commentedon Jun 2, 2026
@hjmjohnson if you have the bandwidth or tokens available could you please integrate ITKTotalVariations? I just merged this PR: InsightSoftwareConsortium/ITKTotalVariation#57 and it includes using an ISC forked version of TVProx now.
hjmjohnson commentedon Jun 2, 2026
TLDR; YES! I'll do that today.
@blowekamp I had previously started that, but shelved the effort for ITKTotalVariation because I saw you were working on it. I was going to reach out to you after the other ingestions were done to ensure I would not conflict with you. This work is almost done! I hope reviews of the open ingestions can be done soon to keep the merge conflicts to a minimum.
hjmjohnson commentedon Jun 6, 2026
🎉 ITKv6 remote-module ingestion is done!
@blowekamp @dzenanz @N-Dekker @thewtex — I am very happy to announce that I believe the remote-module ingestion, archival, and consolidation effort for ITK v6 is complete. What started as ~57 configure-time
*.remote.cmakefetches is now a small, intentional, well-curated set, with every disposition made deliberately. Thank you all — this was a genuinely collaborative push and the review attention made the result far better than a solo effort could have been.By the numbers
git blame-preserving merges)*.remote.cmakefetch entriesModules/ThirdParty/brought in (proxTV w/ TotalVariation)MeshNoise/test/itkAdditiveGaussianNoiseMeshFilterTest.cxx:56#5174Every merged ingest preserved the upstream merge topology (no linearized cherry-pick history), so
git blameon ingested sources still walks back to the original community authors — their credit is intact in-tree.Follow-up / Greptile-identified fixes landed along the way
The per-PR review passes (human + Greptile draft reviews) caught real defects that were fixed before merge rather than rotting as remote-module bugs — a major argument for ingestion in the first place:
ingest-remote-module.shdriver), plus the merge-preserving rewriter (COMP: Deprecate linearizing ingest helper; add merge-preserving rewriter #6162) that replaced the linearizing normalizer.PRs / issues migrated to ITK
Open issues and PRs that were living on the soon-to-be-archived upstream repos were migrated into ITK rather than lost — e.g. the batch transferred as #6338–#6358 and MeshToPolyData's issue #41 → #6389. Each archived upstream now renders a migration notice on its GitHub landing page pointing back at ITK.
Full ingested-module roster (42)
AdaptiveDenoising · AnisotropicDiffusionLBR · BoneEnhancement · BoneMorphometry · BSplineGradient · Cuberille · FastBilateral · FixedPointInverseDisplacementField · FPFH · GenericLabelInterpolator · GrowCut · HigherOrderAccurateGradient · IOFDF · IOMeshMZ3 · IOMeshSTL · IOMeshSWC · IOScanco · IOTransformDCMTK · IsotropicWavelets · LabelErodeDilate · MeshNoise · MeshToPolyData · MGHIO · MinimalPathExtraction · Montage · MorphologicalContourInterpolation · MultipleImageIterator · ParabolicMorphology · PhaseSymmetry · PolarTransform · PrincipalComponentsAnalysis · RANSAC · RLEImage · SmoothingRecursiveYvvGaussianFilter · SplitComponents · Strain · SubdivisionQuadEdgeMeshFilter · TextureFeatures · Thickness3D · TotalVariation · TwoProjectionRegistration · VariationalRegistration
The 18 intentionally kept-remote modules
BioCell · Cleaver · CudaCommon · HASI · IOOpenSlide · LesionSizingToolkit · PerformanceBenchmarking · RTK · SCIFIO · Shape · SimpleITKFilters · SkullStrip · SphinxExamples · TractographyTRX · TubeTK · Ultrasound · VkFFTBackend · WebAssemblyInterface
These stay remote on purpose — heavy external dependencies (CUDA, OpenSlide, RTK), external-tool bridges, or specialty scope where a configure-time fetch remains the documented best fit.
Hats off to everyone who reviewed, tested, and authored the original modules. 🥂 The only remaining work tracked here is Phase 5 documentation (auto-catalog #4786, Doxygen #990, the migration-guide table) — the ingestion itself is done.
dzenanz commentedon Jun 6, 2026
Do we already track example migration in some issue? If not, we should create a tracking issue.
blowekamp commentedon Jun 8, 2026
@hjmjohnson Great work! thank you.
thewtex commentedon Jun 9, 2026
@hjmjohnson AMAZING WORK!