How each tool in SlicerAutomatedDentalTools actually works, tool by tool, read from the code rather than from the documentation.
One page per tool, organised around the pipeline: what is computed, what a network predicts, at which point the model is called, what the preprocessing does, what comes out.
This is neither the extension's official documentation nor a user manual. It is a dated survey, September 2026, of what the code does as of that date.
A static site: no dependencies, no build step needed to view it.
python3 serve.pyThis serves the site on every interface, filtered by an allowlist of addresses
read from serve.conf. The repository ships a template only,
serve.conf.example: copy it to serve.conf and put your own
addresses in. Without that copy the server falls back to the template: the machine
itself and the Tailscale tailnet, nothing more.
The file is reloaded on the fly: add an address, save, and the rule applies to the
next request, no restart. An invalid line is reported in the log without bringing the
list down. The site's content is read from disk on every request, so a page
regenerated by build.py is visible immediately.
This filter is application-level, not a firewall: it answers 403 to addresses that are not listed, but the port stays open on the interfaces. For real isolation, pair it with a
ufw/iptablesrule.
For purely local use, python3 -m http.server 8080 still does the job, and
index.html opens over file:// too, search included.
The site has two halves and five languages: English, French, Portuguese (Brazilian), Korean and Thai.
- The Guide addresses whoever uses the tools: what it is for, what to supply, what to check. No implementation detail.
- The Atlas addresses whoever reads or modifies the code: the full pipeline, what is predicted, what is computed, and what reading the code brought to light.
index.html language picker
assets/ style, script, search index (shared)
<Tool>/ sources: the original .md, the papers collected
en/ fr/ pt/ ko/ th/
├── index.html Atlas home
├── findings.html every finding, collected
├── glossary.html the glossary
├── guide/
│ ├── index.html Guide home
│ └── <Tool>.html one guide per tool
└── <Tool>/
├── <Tool>.html the pipeline page
└── SOURCES.html the bibliography, with DOIs
The markdown sources and the papers stay at the root: they belong to no language. Only the rendered pages are duplicated.
assets/themes/ |
interchangeable style overlays: see below |
nav.py |
the single definition of the navigation, and the THEME variable. The sidebar is identical across a hundred-odd pages: never edit it inside an .html, it will be overwritten |
build.py |
rewrites the sidebars, generates the search index, the findings and the guide indexes, per language |
i18n.py |
translation tracking: which pages lag behind English, plus a structure check |
i18n.json |
the fingerprint of the English version each translated page is aligned with |
After editing a page:
python3 build.pyThe generated files are committed on purpose: a clone must work without running anything.
The base stylesheet assets/style.css is fully tokenised: colours, fonts, radii and
widths are CSS variables. A theme is an overlay that redefines those variables and
a few shape rules: it duplicates nothing.
To try one, a single line in nav.py:
THEME = None # base stylesheet alone
THEME = "ardoise" # technical, dark, monospace, sharp corners
THEME = "papier" # editorial, serif, rules rather than frames
THEME = "clinique" # application-like, bluish, shadowed cards, rounded corners
THEME = "labo" # lightbox: cold black background, luminous accents, halos
THEME = "carnet" # graph paper, ink, serif, vermilion
THEME = "signal" # contemporary: large type, solid shapes, plenty of airthen python3 build.py, which adds or removes the link across all 141 pages.
To compare without editing the file, the option wins for the duration of one run:
python3 build.py --theme papier # try it
python3 build.py --theme none # back to the defaultEach theme handles its own light and dark variants.
The sidebar is only ever modified in nav.py. build.py then rewrites it into
every page. That is what keeps a hundred-odd copies from drifting apart.
English is the source language. Changes are made in en/ only; fr/, pt/, ko/
and th/ are translations, brought up to date in batches rather than on every change.
Between two batches they lag behind, and that is deliberate.
python3 i18n.py stale # per language: English pages modified since the last translation
python3 i18n.py check pt # same structure as English: tags, ids, links, code
python3 i18n.py stamp pt # after translating: record that pt/ is up to dateThe fingerprint ignores whatever build.py rewrites (sidebar, references, videos):
only a change to written content makes a page "stale".
What is not in the pages gets translated in the code: navigation labels and tool
summaries in nav.py, bibliographic notes in papers.py, the text of generated pages
in build.py, interface labels in assets/site.js.
To add a language: add it to LANGS and LANG_NAMES in nav.py, then fill in every
per-language dictionary (grep -n '"pt"' *.py assets/site.js lists them all),
translate the pages, and run python3 i18n.py stamp <language>.
- Predicted vs computed is the central axis. Badges mark it throughout, and the diagrams outline in purple every step where a network is involved.
- The callouts distinguish the defect confirmed in the code (red), the pitfall
(orange), the verified fact (green) and the note. They feed
findings.html. - Code/paper discrepancies are flagged at the top of the pages concerned: several modules do not do what their publication describes.
- The diagrams are hand-written SVG, no library, themed by class so they stay legible in both light and dark.
The 29 PDFs collected weigh 90 MB and are publisher content: they are excluded by
.gitignore and stay on disk. Each SOURCES.html gives the DOI or the canonical link,
which is enough to find them again. The .xml (JATS) and .txt files are still
committed: same kind of content, a decision still to be made.
Nothing was obtained by circumventing a paywall: arXiv, PLOS, PMC/NCBI, HAL, institutional repositories and author-deposited versions.
The two announced pieces of work are under way. The trade-off has been settled:
- languages: one tree per language, rather than a client-side switch. The 55 SVG diagrams carry text: a tree per language makes it genuinely translatable, and each page keeps a clean URL.
- user layer: separate pages, grouped under
guide/, rather than a callout at the top of each page. The two audiences share neither the need nor the tone, and a cross-reference between them is enough to connect the two.
Still open:
- The diagram arrows are labelled on only 6 of the 55. The rest requires understanding each pipeline, so it happens page by page.
- The name
AREGused on its own is linked nowhere: it designates the family of modules, and there is noAREGpage, onlyAREG_CBCT,AREG_IOSandAREG_IOSCBCT. - The papers'
.xmland.txtare still committed while the PDFs no longer are. Same kind of content, 6.5 MB: a decision to take.