Skip to content

ArioMoniri/semikap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

220 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

TAMIAS β€” Transparent locAl Medical Image AnalysiS

Browser-only PWA Β· ONNX inference Β· DICOM / NIfTI / NRRD Β· WebGPU Β· No upload

πŸ“¦ Deploy Β Β·Β  πŸ”„ Auto-update setup Β Β·Β  πŸ—ΊοΈ Roadmap Β Β·Β  πŸ“œ Changelog


Download macOS Apple Silicon (.dmg) Β  Download Windows installer (.exe) Β  Download Linux AppImage

🍎 macOS Intel (.dmg) Β· Windows .msi Β· Debian/Ubuntu .deb Β· Fedora/RHEL .rpm Β· all assets β†—

License: Apache-2.0 Latest release Stars Forks Contributors Open issues Total downloads


⚑ One-line install on a server

curl -fsSL https://raw.githubusercontent.com/ArioMoniri/semikap/main/install.sh | sh

Clones the repo into ./tamias, runs npm ci && npm run build, starts the static server. Look for TAMIAS_PORT=<port> in the output and point your reverse proxy at that port.

βœ… No manual edits required. Every override has a runtime knob (PORT, HOST, Helm values, .env). The literal string placeholder appears nowhere in source β€” only inside package-lock.json as part of an upstream Babel package's name, which is a transitive dependency of the React build toolchain and is not editable.


🎯 What it does

A clinician opens a link, picks a local image, picks a local ONNX model, and gets an AI segmentation overlay rendered on a 3-plane MPR + 3D viewer. Bytes never leave the device. Inference runs in the browser via WebGPU (Metal / D3D12 / Vulkan), with WebNN and a multi-threaded WASM-SIMD fallback.

flowchart LR
  A[πŸ“‚ Local file<br/>DICOM Β· NIfTI Β· NRRD] --> B[🧠 ONNX model<br/>+ manifest.json]
  B --> C[πŸ› οΈ Worker<br/>resample Β· normalize Β· tile]
  C --> D{πŸš€ Backend?}
  D -- WebGPU --> E[🟦 GPU<br/>Metal / D3D12 / Vulkan]
  D -- WebNN --> EN[πŸŸͺ NPU / ANE / DirectML]
  D -- fallback --> F[🟫 WASM-SIMD<br/>multi-threaded]
  E --> G[🩻 Segmentation overlay<br/>MPR + 3D · brush correction]
  EN --> G
  F --> G
  G --> H[πŸ’Ύ Local save<br/>NIfTI Β· DICOM-SEG Β· repro JSON]
Loading

✨ Features

πŸ›‘οΈ Strict CSP β€” no upload 🌐 PWA install πŸ–₯️ Tauri desktop builds πŸ”„ Sparkle-style auto-updater
πŸš€ WebGPU + WebNN + WASM 🌫️ Gaussian-blended tiling 🧱 3D sliding-window inference 🎚️ WW/WL CT presets
πŸ› οΈ Radiology toolbar (W-L Β· Pan Β· Distance) 🩻 Outline mode for masks πŸ” Zoom in / out Β· πŸ“Έ PNG screenshot πŸ–ΌοΈ Layout: MPR / single-plane / 3D / grid
🎨 6-colour brush + per-colour mask export πŸ–ŒοΈ Brush strokes visible in 3D 🩻 Multi-series overlay πŸ”¬ Cursor probe (vox Β· mm Β· value)
🩻 Sidebar volume preview (mid-axial thumb) πŸ”Ž Cached-models search πŸŒ— Light / Dark / System theme πŸͺͺ Modality toggle (Radiology Β· Pathology)
πŸ”¬ Pathology mode (OpenSeadragon + OME-TIFF) 🧠 Tile-based ONNX inference πŸ“ Distance ruler in microns πŸ“€ Result PNG + sidecar JSON
πŸͺ„ SAM (Radiology + Pathology) 🧠 Smart-brush single-click mask 🧭 Cross-slice propagation (Β±5 / Β±15) πŸ’Ύ Auto-save folder (IDB-persisted)
πŸ’Ύ NIfTI mask export 🩻 DICOM-SEG export (PACS) 🧾 Reproducibility bundle πŸ“’ Local audit log (NDJSON)
πŸ’½ OPFS warm cache πŸ”’ SHA-256 model verification ❀️ /healthz for K8s probes πŸͺͺ RUO stamp on every export

πŸ”¬ Pathology mode lands in v0.6.0. Whole-slide image viewer (OpenSeadragon-based pyramidal viewer Β· OME-TIFF Β· Aperio SVS Β· Hamamatsu NDPI Β· TIFF Β· PNG Β· JPEG), tile-based ONNX inference (segmentation / classification / heatmap / detection), MPP-aware distance ruler, six-colour brush + eraser with per-colour PNG export. Bundled CC0 synthetic H&E sample for end-to-end testing. Full reference: docs/PATHOLOGY.md. Roadmap: docs/ROADMAP.md#v060--pathology-mode.

πŸͺ„ SAM (Segment Anything) ships in v0.7.0 β€” click + box + text prompts β†’ mask, in both Radiology and Pathology modes. One-click HuggingFace download (SAM 2 Tiny ~30 MB, SAM 2 Base+ ~80 MB, MedSAM ~360 MB) or bring your own ONNX export. Encoder runs once per slice / ROI on WebGPU; decoder is sub-100 ms per prompt revision so refinement is interactive. Smart-brush in the radiology Annotation panel (single click β†’ mask straight into the brush layer, no Encode/Generate/Commit roundtrip). Cross-slice propagation (Β±5 / Β±15 slices) walks neighbours using each previous mask's bbox as a prompt. Auto-save folder for screenshots persisted across sessions via IndexedDB. No upload, weights cached in OPFS, SAM 3 BYO URL slot ready for when a stable export ships. Full plan + status table: docs/SAM.md.

🫁 TotalSegmentator (whole-body anatomical segmentation) lands in v0.7.4 β†’ v0.7.7 under the On-Prem AI sidebar section. Three runtime paths: (a) native Python sidecar β€” Tauri desktop spawns your local totalsegmentator install (Mac MPS / CPU / Linux CUDA β€” whatever your PyTorch resolves to), streams stdout/stderr live, captures the per-class NIfTI masks; (b) BYO ONNX URL β€” community-converted exports run via the same browser ORT stack as SAM; (c) Pyodide (experimental) β€” wired end-to-end, today blocked at SimpleITK in the Python WASM ecosystem. Full setup + task list + troubleshooting: docs/TOTALSEGMENTATOR.md.

πŸ“ Persistent measurements + per-pane slice chips ship in v0.7.8. Multi-distance + multi-color angle (yellow vertex / red arm 1 / blue arm 2), each with a click-to-delete handle. Per-pane slice number chips (e.g. A 47/154) overlay the top-left of each MPR viewport, plus a 3D label on the render tile. SVG overlay re-projects on every animation frame so pan / zoom / slice scroll all keep the markers anchored to source-mm coordinates.


πŸš€ Deploy

Path Command When to pick
Node only npm run setup Single-machine, simplest
Docker docker compose up -d --build Single host, containerised
Helm helm install tamias deploy/helm/tamias Departmental K8s
systemd systemctl enable --now tamias Long-running on a box
Tauri desktop npm run desktop:build Native app per workstation

β†’ Full setup, reverse-proxy snippets, and configuration table: docs/DEPLOY.md


πŸ”„ Auto-updates (Tauri Sparkle-style)

Desktop installs self-update from a signed latest.json manifest published with each release. Sparkle-style on macOS / Windows / Linux via Tauri's official updater plugin.

Brand new machine? Step-by-step from cloning to first release: docs/UPDATER.md β†’ "From zero on a brand-new machine"

TL;DR for an existing checkout:

node scripts/init-updater.mjs    # one-time keypair generation (maintainer)
node scripts/release.mjs minor   # cut + push v0.3.0; CI signs + publishes installers

β†’ Full setup + signing-key flow: docs/UPDATER.md


πŸ“¦ Bring your own model

TAMIAS ships no model weights. The user supplies an .onnx (or .ort) plus a sidecar .json manifest:

{
  "name": "MyLiverSeg",
  "version": "1.0.0",
  "license": "Apache-2.0",
  "modality": "CT",
  "spacing": [1.5, 1.5, 1.5],
  "orientation": "RAS",
  "normalization": { "type": "window", "level": 50, "width": 400 },
  "inference": { "type": "sliding_window", "patch": [128, 128, 128], "overlap": 0.25 },
  "output": {
    "type": "segmentation",
    "labels": { "0": "background", "1": "liver" },
    "colors": { "1": "#22c55e" }
  },
  "preferredEP": "webgpu",
  "tta": { "flips": { "x": true } },
  "sha256": "<optional hex hash of the .onnx file>"
}

If sha256 is present it's verified against the loaded ONNX bytes before the session is created.


πŸ—ΊοΈ Repo map

The diagram below regenerates on every push to main (repo-visualizer by GitHub Next). A schematic placeholder is committed to the repo so this image always renders, even before the workflow has run.

TAMIAS repo visualization


πŸ“ˆ Star history

TAMIAS star history

πŸ“š Docs

  • examples/ β€” drop-in 3-file test kit (CT NIfTI + tiny ONNX + manifest, ~470 KB) for an end-to-end smoke test
  • ROADMAP β€” phased delivery & what's next
  • DEPLOY β€” every supported deploy mode + reverse-proxy + configuration
  • UPDATER β€” auto-update setup, signing keys, release flow, from-zero new-machine guide
  • SIGNING β€” Apple Developer code-signing + notarisation (fix the "DMG is damaged" warning), Windows Authenticode
  • CHANGELOG β€” release notes
  • CONTRIBUTING β€” what we accept and the dev loop
  • SECURITY β€” threat model and reporting

βš–οΈ License

Apache-2.0 Β© 2026 Ariorad Moniri and TAMIAS contributors.