Skip to content

ENH: Master tracking — Remote-module ingestion, archival, and consolidation #6160

Closed

Description

@hjmjohnson

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)

Action checklist (live)

Phase 0 — infrastructure (DONE)

Phase 1 — completed ingests

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.

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.

KitwareMedical org repos — manual archive flag now flipped (confirmed Archived 2026-05-30):

Archived 2026-06-02:

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.

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.

Wave 2 (richer or external-data-heavy) — all merged.

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)

Bucket 2 — Phase 4 gated ingest (behind existing option; no new external dep)

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

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
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

  1. hjmjohnson commented on Apr 28, 2026

    @hjmjohnson
    MemberAuthor

    Wave-1 progress: MeshNoise ingest in flight as #6161. Closes #5174 in the same PR.

  2. hjmjohnson commented on Apr 28, 2026

    @hjmjohnson
    MemberAuthor

    Phase-0 infrastructure follow-up: #6162 deprecates normalize-ingest-commits.py (which linearized history on PRs #6135, #6137, #6159, #6161) and adds rewrite-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.

  3. self-assigned this
    on Apr 29, 2026
  4. hjmjohnson commented on Apr 30, 2026

    @hjmjohnson
    MemberAuthor

    LabelErodeDilate ingest merged as #6171 (upstream 690015cae2); standalone repo InsightSoftwareConsortium/ITKLabelErodeDilate README replaced with migration notice (commit 71ef035) and repo archived ✓.

  5. hjmjohnson commented on May 4, 2026

    @hjmjohnson
    MemberAuthor

    Decision: archive AnalyzeObjectLabelMap without ingesting

    Tracked in #6160. Local commit on branch hjmjohnson/archive-AnalyzeObjectLabelMap removes Modules/Remote/AnalyzeObjectLabelMap.remote.cmake.

    Rationale

    The Analyze Object Map .obj format is a legacy format from the late 1990s / early 2000s era of Mayo Clinic's Analyze software. The ITKAnalyzeObjectMap module 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.cmake is removed; the module is no longer reachable via -DModule_AnalyzeObjectLabelMap:BOOL=ON in ITK builds.
    • Upstream repository InsightSoftwareConsortium/ITKAnalyzeObjectMap remains read-accessible for anyone needing the historical reader; it should be flipped to archived=true after the ITK PR merges (no Phase B ingestion-archival run is needed since nothing was ingested into ITK proper).
  6. hjmjohnson commented on May 5, 2026

    @hjmjohnson
    MemberAuthor

    In-flight PR snapshot (2026-05-05).

    PR State Module / scope Notes
    #6205 ✅ merged Cuberille → Modules/Filtering/ First v4-strategy ingest; surfaced the deny-pass + commit-prefix-cap fixes that #6204 then encoded
    #6206 open, ready-for-review IOMeshSTL → Modules/IO/ Greptile P1+P2 addressed (fffd214a → rebased, now f100c257); @dzenanz feedback addressed (if(NOT ITK_SOURCE_DIR) wrapper dropped, .ExternalData_MD5_<hash> cache files removed); rebased onto current upstream/main with --rebase-merges (25 merges + 1 root unchanged); only ghostflow root-commit error remains (acknowledged-unavoidable)
    #6208 open, ready-for-review RLEImage → Modules/Filtering/ Greptile P1+P2 addressed (3 fixed, 1 push-back with local-test evidence); 6/6 RLEImage tests pass locally; prerequisite for #6209 because MCI's tests use itk::RLEImage
    #6209 🔒 closed (queue-management) MorphologicalContourInterpolation → Modules/Filtering/ Closed pending #6208 merge. ExternalData side-work landed independently: 11 missing CIDs published via ITKTestingData#47 (merged 2026-05-05), Populate shared ExternalData cache rerun went green (ok=2457 fail=0). Branch preserved on hjmjohnson:ingest-mci; resubmit once #6208 lands
    #6204 open, draft v4 ingestion strategy (INGESTION_STRATEGY_v4.md, ingest-module-v4.sh, sanitize-history.py, archive-remote-module.sh) Added today: ghostflow root-commit + Greptile pattern documentation; auto-strip of **/.ExternalData_*; auto-unwrap of if(NOT ITK_SOURCE_DIR) standalone-build CMake guard. v4 supersedes the deprecated normalize-ingest-commits.py referenced in #6162
    Merge order and dependencies
    #6204 (v4 strategy)        independent — merge anytime
    #6206 (IOMeshSTL)          independent — ready to merge
    #6208 (RLEImage)           independent — ready to merge   ──┐
                                                                ▼
    #6209 (MCI, closed)        will reopen after #6208 merges (MCI tests use itk::RLEImage)
    

    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:

    • ⭐ MorphologicalContourInterpolation — re-submit ENH: Ingest ITKMorphologicalContourInterpolation (stacked on #6208) #6209 (already prepared)
    • SplitComponents, SubdivisionQuadEdgeMeshFilter, ParabolicMorphology, SmoothingRecursiveYvvGaussianFilter, IOMeshMZ3, IOFDF, HigherOrderAccurateGradient, PolarTransform, MultipleImageIterator — all Wave-1 candidates with v4 strategy now hardened against the patterns surfaced by Cuberille / IOMeshSTL / RLEImage
  7. thewtex commented on May 6, 2026

    @thewtex
    Member

    @hjmjohnson absolutely incredible work!!! 🥇 💖 🎇 ✨


    Per #6060 (comment)

    If a module depends on itk-filtering, I'm pretty sure #6093 will increase the loading time.

    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.

    It might be not "significant" for one module but it will become significant as the number of integrated remote modules increases. And my point is it's already too long and we should consider splitting in more packages to benefit more from the lazy loading.

    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

    1. Create an improved module organization based on a.) semantics, b.) functionality, c.) class depedencies
    2. Module size
    3. Isolated branches

    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

  8. dzenanz commented on May 6, 2026

    @dzenanz
    Member

    One idea: put all the modules that are not built by default into an -optional wheel, e.g. itk-filtering-optional.

    How much FEM (if anything) contributes to the size of itk-numerics wheel? I have never heard of ITK's FEM framework being used. Maybe now is a good time to deprecate it?

  9. SimonRit commented on May 6, 2026

    @SimonRit

    I tried to look at the dependency graph in my regular ITK build with this patch

    diff --git a/CMake/ITKModuleEnablement.cmake b/CMake/ITKModuleEnablement.cmake
    index 218187f33f..7abdcc2be8 100644
    --- a/CMake/ITKModuleEnablement.cmake
    +++ b/CMake/ITKModuleEnablement.cmake
    @@ -98,6 +98,10 @@ macro(itk_module_check itk-module _needed_by stack)
         endforeach()
         set(check_finished_${itk-module} 1)
       endif()
    +  file(APPEND ${CMAKE_BINARY_DIR}/graph "${itk-module} [label=\"${itk-module}\"]\n")
    +  foreach(dep IN LISTS ITK_MODULE_${itk-module}_DEPENDS)
    +      file(APPEND ${CMAKE_BINARY_DIR}/graph "${itk-module} -> ${dep}\n")
    +  endforeach()
     endmacro()
     
     set(ModuleEnablementNeedsToRerun ON) # this needs to run at least once
    

    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

  10. hjmjohnson commented on May 7, 2026

    @hjmjohnson
    MemberAuthor

    Status update — 2026-05-07

    Seven additional Wave 1 ingests have landed since the last update:

    PR Module Group
    — Cuberille Modules/Filtering/ (c14d39d4d6)
    — IOMeshSTL Modules/IO/ (420a9e22fe)
    — SplitComponents Modules/Filtering/ (61019f9e0f)
    — IOMeshMZ3 Modules/IO/ (17467b4ead)
    — IOFDF Modules/IO/ (2b9d7b93d0)
    #6208 RLEImage Modules/Filtering/ (d6870551ba)
    #6209 MorphologicalContourInterpolation 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)
    • SubdivisionQuadEdgeMeshFilter (4★) — recommended next
    • ParabolicMorphology (3★)
    • SmoothingRecursiveYvvGaussianFilter (2★)
    • HigherOrderAccurateGradient (1★)
    • PolarTransform (1★)
    • MultipleImageIterator (1★)
    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.

  11. hjmjohnson commented on May 9, 2026

    @hjmjohnson
    MemberAuthor

    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

    Module In-tree path Ingest PR
    RLEImage Modules/Filtering/RLEImage/ #6208
    MorphologicalContourInterpolation Modules/Filtering/MorphologicalContourInterpolation/ #6209
    Cuberille Modules/Filtering/Cuberille/ #6205
    IOMeshSTL Modules/IO/IOMeshSTL/ #6206
    PolarTransform Modules/Filtering/PolarTransform/ #6211
    SplitComponents Modules/Filtering/SplitComponents/ #6212
    IOMeshMZ3 Modules/IO/IOMeshMZ3/ #6214
    IOFDF Modules/IO/IOFDF/ #6215
    SubdivisionQuadEdgeMeshFilter Modules/Filtering/SubdivisionQuadEdgeMeshFilter/ #6229

    Phase 1 — open ingests

    Module Status
    AdaptiveDenoising #6235 (open; Phase 1+CI clean, follow-up PR queued for race-condition refactor)
    TextureFeatures #6238 (open; Greptile + reviewer concerns addressed)
    PrincipalComponentsAnalysis #6240 (open; APPROVED, awaiting admin merge over expected ghostflow root-commit)

    Phase 2 — newly archived upstream repos

    All nine landing pages now render the migration notice and the repos
    are marked archived=true:

    Upstream repo Archive commit
    InsightSoftwareConsortium/ITKSubdivisionQuadEdgeMeshFilter 8540649
    InsightSoftwareConsortium/ITKPolarTransform 745cd10
    InsightSoftwareConsortium/ITKIOFDF ba44725
    InsightSoftwareConsortium/ITKIOMeshMZ3 65c2849
    InsightSoftwareConsortium/ITKSplitComponents 0b310c5
    InsightSoftwareConsortium/ITKCuberille a521701
    InsightSoftwareConsortium/ITKIOMeshSTL 0fce299
    KitwareMedical/ITKContourInterpolation bea4b45
    KitwareMedical/ITKRLEImage f8ef349

    Other infra

  12. hjmjohnson commented on May 12, 2026

    @hjmjohnson
    MemberAuthor

    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

    Module In-tree path Ingest PR Merged
    AdaptiveDenoising Modules/Filtering/AdaptiveDenoising/ #6235 2026-05-08
    TextureFeatures Modules/Filtering/TextureFeatures/ #6238 2026-05-09
    PrincipalComponentsAnalysis Modules/Numerics/PrincipalComponentsAnalysis/ #6240 2026-05-09
    HigherOrderAccurateGradient Modules/Filtering/HigherOrderAccurateGradient/ #6242 2026-05-12

    Phase 3 — in flight

    Phase 3 — Wave 1 remaining (clean ingest, no external deps)

    • ParabolicMorphology (3★)
    • MultipleImageIterator (1★)

    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

    Module Was Now
    AdaptiveDenoising ? ✓ (#6235)
    TextureFeatures 2 ✓ (#6238)
    PrincipalComponentsAnalysis ? ✓ (#6240)
    HigherOrderAccurateGradient L ✓ (#6242)
  13. 2 remaining items

  14. hjmjohnson commented on May 15, 2026

    @hjmjohnson
    MemberAuthor

    Previously, modules inside ITK had the ITK prefix in their module name (e.g., ITKCommon), while remote modules did not (e.g., GrowCuts). This means that ITK configurations that enabled a particular remote module do not need to be changed. However, there is a minor inconsistency here that may need to be addressed at some point.

    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.

  15. dzenanz commented on May 15, 2026

    @dzenanz
    Member

    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.

  16. hjmjohnson commented on May 15, 2026

    @hjmjohnson
    MemberAuthor

    Should we also migrate the issues from the remote repositories here? After closing fixed or no longer relevant issues, of course.

    @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.

  17. hjmjohnson commented on May 15, 2026

    @hjmjohnson
    MemberAuthor

    Some remotes had notebooks, and just running them successfully was another layer of testing.
    @dzenanz I would propose converting those notebooks into Python unit tests (easier to manage and maintain). It should not be too hard to do with agentic coding to get easier-to-maintain tests of equivalent quality or better quality to "notebook does not fail" tests.

  18. added
    type:InfrastructureInfrastructure/ecosystem related changes, such as CMake or buildbots
    type:EnhancementImprovement of existing methods or implementation
    area:CoreIssues affecting the Core module
    on May 27, 2026
  19. blowekamp commented on Jun 2, 2026

    @blowekamp
    Member

    @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.

  20. hjmjohnson commented on Jun 2, 2026

    @hjmjohnson
    MemberAuthor

    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.

  21. hjmjohnson commented on Jun 6, 2026

    @hjmjohnson
    MemberAuthor

    🎉 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.cmake fetches 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

    Metric Count
    Modules ingested into the main tree (history- & git blame-preserving merges) 42
    Upstream repos archived read-only (incl. 2 archived without ingestion) 44
    Modules intentionally kept remote (specialty / large-dep / external-tool) 18
    Starting *.remote.cmake fetch entries ~57
    New Modules/ThirdParty/ brought in (proxTV w/ TotalVariation) 1
    Master-issue supersessions consolidated here 7 ( see list below)

    Every merged ingest preserved the upstream merge topology (no linearized cherry-pick history), so git blame on 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:

    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.

  22. dzenanz commented on Jun 6, 2026

    @dzenanz
    Member

    Do we already track example migration in some issue? If not, we should create a tracking issue.

  23. blowekamp commented on Jun 8, 2026

    @blowekamp
    Member

    @hjmjohnson Great work! thank you.

  24. thewtex commented on Jun 9, 2026

    @thewtex
    Member

    @hjmjohnson AMAZING WORK!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:CoreIssues affecting the Core moduletype:EnhancementImprovement of existing methods or implementationtype:InfrastructureInfrastructure/ecosystem related changes, such as CMake or buildbots

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions