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.
Action checklist (live)
Phase 0 — infrastructure (DONE)
Phase 1 — completed ingests
Phase 2 — upstream archival (post-ingest follow-up PRs)
For each merged ingest, an archival PR on the original upstream repo deletes the whitelisted files, adds MIGRATION_README.md, and the repo is marked Archived in GitHub settings.
Phase 3 — Tier A ingest queue (pure ITK, no external deps)
The order below is the proposed ingest sequence. Modify each commit's checklist as PRs land.
Wave 1 (Filtering / IO, smallest footprint, fastest review). ⭐ = open user-filed issue or high upstream-stars community-demand signal raises priority.
Next up: ⭐ MorphologicalContourInterpolation — by far the highest community-demand signal in the Wave 1 queue (34 upstream stars vs. 1–9 for the rest), actively maintained (push 2026-04-23), 3.5 MB repo, owned by @dzenanz. Used heavily for slice-gap filling in 3D medical-image segmentation. Recommend ingesting next.
Wave 2 (richer or external-data-heavy). ⭐ = recent user-filed issue raises priority.
Phase 4 — Tier B (external-dependency or ABI-sensitive; remain remote pending design)
These are explicitly NOT in the ingest queue without further discussion. They depend on optional external libraries, large data caches, or carry niche scope:
- CudaCommon, RTK, VkFFTBackend — GPU/CUDA stacks, separate licensing/build matrix
- SCIFIO, IOOpenSlide, IOTransformDCMTK — large external libraries (Bio-Formats, OpenSlide, DCMTK)
- TubeTK, Ultrasound, LesionSizingToolkit, HASI, SkullStrip, Cleaver — domain-specific toolkits with their own release cadences
- TractographyTRX, MeshToPolyData, PerformanceBenchmarking, SphinxExamples, WebAssemblyInterface, PrincipalComponentsAnalysis, FixedPointInverseDisplacementField, BSplineGradient, AdaptiveDenoising, AnalyzeObjectLabelMap, BioCell, RLEImage, Shape, FPFH, IOMeshSWC, MinimalPathExtraction, TwoProjectionRegistration, TotalVariation — review case-by-case in Phase 5
Phase 5 — discoverability & docs
Status table — every entry under Modules/Remote/ today
(L = Wave 1 ingest queue · 2 = Wave 2 ingest queue · A = archive without ingest · K = keep remote, Tier B · ✓ = ingested · ? = decide in Phase 5)
| Module |
Disposition |
Notes |
| AdaptiveDenoising |
? |
|
| AnalyzeObjectLabelMap |
? |
|
| BioCell |
? |
|
| BoneEnhancement |
2 |
|
| BoneMorphometry |
2 |
|
| BSplineGradient |
? |
|
| Cleaver |
K |
external Cleaver dep |
| Cuberille |
L |
|
| CudaCommon |
K |
CUDA stack |
| FastBilateral |
✓ |
merged via #6159 (2026-04-29) |
| FixedPointInverseDisplacementField |
? |
|
| FPFH |
? |
|
| GrowCut |
2 |
|
| HASI |
K |
hierarchical anatomy stack |
| HigherOrderAccurateGradient |
L |
|
| IOFDF |
L |
|
| IOMeshMZ3 |
L |
|
| IOMeshSTL |
L |
|
| IOMeshSWC |
? |
|
| IOOpenSlide |
K |
OpenSlide dep |
| IOScanco |
2 |
|
| IOTransformDCMTK |
K |
DCMTK dep |
| IsotropicWavelets |
2 |
|
| LabelErodeDilate |
✓ |
merged via #6171 (2026-04-30) |
| LesionSizingToolkit |
K |
toolkit scope |
| MeshNoise |
✓ |
merged via #6161 (2026-04-29); closed #5174 |
| MeshToPolyData |
? |
|
| MinimalPathExtraction |
? |
|
| MorphologicalContourInterpolation |
L⭐ |
next ingest target — 34★ upstream, actively maintained |
| MultipleImageIterator |
L |
|
| ParabolicMorphology |
L |
|
| PerformanceBenchmarking |
K |
benchmark harness, separate cadence |
| PhaseSymmetry |
2 |
|
| PolarTransform |
L |
|
| PrincipalComponentsAnalysis |
? |
|
| RANSAC |
2 |
|
| RLEImage |
? |
|
| RTK |
K |
reconstruction toolkit |
| SCIFIO |
K |
Bio-Formats dep |
| Shape |
? |
|
| SimpleITKFilters |
2 |
|
| SkullStrip |
K |
toolkit scope |
| SmoothingRecursiveYvvGaussianFilter |
L |
|
| SphinxExamples |
K |
docs harness |
| SplitComponents |
L |
|
| Strain |
2 |
|
| SubdivisionQuadEdgeMeshFilter |
L |
|
| TextureFeatures |
2 |
|
| Thickness3D |
2 |
|
| TotalVariation |
? |
|
| TractographyTRX |
? |
|
| TubeTK |
K |
toolkit scope |
| TwoProjectionRegistration |
? |
|
| Ultrasound |
K |
toolkit scope |
| VariationalRegistration |
2 |
|
| VkFFTBackend |
K |
VkFFT dep |
| WebAssemblyInterface |
K |
wasm build harness |
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
Recent PR activity (past three weeks)
| 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 |
open |
COMP: Deprecate linearizing ingest helper; add merge-preserving rewriter |
| #6151 |
open |
COMP: Prune superseded GitHub Actions ccache entries from CI |
| #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) |
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.cmaketo a small, well-curated set, by either (a) ingesting active modules into the main ITK tree under their natural group (Modules/<Group>/<Name>/) preserving upstreamgit 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.Action checklist (live)
Phase 0 — infrastructure (DONE)
INGESTION_STRATEGY.md)ingest-remote-module.shwith--audit-onlyand--dry-run— deprecated 2026-04-28 as linearizing the upstream merge graph; replacement merge-preserving rewriter in COMP: Deprecate linearizing ingest helper; add merge-preserving rewriter #6162 (OPEN)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.shPruneSupersededCiCaches.py(CI cache hygiene; PR COMP: Prune superseded GitHub Actions ccache entries from CI #6151)Phase 1 — completed ingests
Modules/Filtering/(ENH: Ingest AnisotropicDiffusionLBR into Modules/Filtering #6093, merged 2026-04-23)Modules/Registration/Montage/(ENH: Ingest ITKMontage remote module into Modules/Registration/Montage #6103, merged 2026-04-25)Modules/Filtering/(ENH: Ingest ITKGenericLabelInterpolator into Modules/Filtering #6135, merged 2026-04-27)Modules/IO/MGHIO/(ENH: Ingest ITKMGHIO into Modules/IO #6137, merged 2026-04-28)Modules/Filtering/(ENH: Ingest ITKFastBilateral into Modules/Filtering (supersedes #5134) #6159, merged 2026-04-29; supersedes ENH: Integrate FastBilateralImageFilter from remote module #5134)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)Modules/Filtering/(ENH: Ingest ITKLabelErodeDilate into Modules/Filtering #6171, merged 2026-04-30)Phase 2 — upstream archival (post-ingest follow-up PRs)
For each merged ingest, an archival PR on the original upstream repo deletes the whitelisted files, adds
MIGRATION_README.md, and the repo is marked Archived in GitHub settings.Phase 3 — Tier A ingest queue (pure ITK, no external deps)
The order below is the proposed ingest sequence. Modify each commit's checklist as PRs land.
Wave 1 (Filtering / IO, smallest footprint, fastest review). ⭐ = open user-filed issue or high upstream-stars community-demand signal raises priority.
Next up: ⭐ MorphologicalContourInterpolation — by far the highest community-demand signal in the Wave 1 queue (34 upstream stars vs. 1–9 for the rest), actively maintained (push 2026-04-23), 3.5 MB repo, owned by @dzenanz. Used heavily for slice-gap filling in 3D medical-image segmentation. Recommend ingesting next.
Modules/Filtering/(ENH: Ingest ITKLabelErodeDilate into Modules/Filtering #6171, merged 2026-04-30; 5★ upstream)Modules/Filtering/(34★, recently maintained — next)Modules/IO/(9★, dominant 3D-mesh interchange format)Modules/Filtering/(6★, isosurface mesh extraction)Modules/Filtering/(5★)Modules/Filtering/(4★)Modules/Filtering/(3★)Modules/Filtering/(2★)Modules/IO/(2★)Modules/IO/(2★)Modules/Filtering/(1★)Modules/Filtering/(1★)Modules/Filtering/(1★)Wave 2 (richer or external-data-heavy). ⭐ = recent user-filed issue raises priority.
Modules/IO/— wrapping bug IOScanco wrapping fails do to fatal error: 'itkCommand.h' file not found #5920 (closed 2026-03-11) signals active user dependencyModules/Filtering/Modules/Filtering/Modules/Filtering/Modules/Filtering/Modules/Segmentation/Modules/Registration/Modules/Registration/Modules/Filtering/Modules/Filtering/Modules/Filtering/Modules/Filtering/Modules/IO/Phase 4 — Tier B (external-dependency or ABI-sensitive; remain remote pending design)
These are explicitly NOT in the ingest queue without further discussion. They depend on optional external libraries, large data caches, or carry niche scope:
Phase 5 — discoverability & docs
Modules/Remote/Doxygen disablement reason no longer applies module-by-module (Re-enable doxygen processing of the "Remote" directories. #990)Documentation/docs/migration_guides/itk_6_migration_guide.mdwith the consolidated remote-module disposition tableStatus table — every entry under Modules/Remote/ today
(L = Wave 1 ingest queue · 2 = Wave 2 ingest queue · A = archive without ingest · K = keep remote, Tier B · ✓ = ingested · ? = decide in Phase 5)
Also tracked outside
Modules/Remote/:Subsumed and related issues
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).Modules/Remote/; folded into Phase 5.Recent PR activity (past three weeks)