Medical Research Skills for Claude Code, Codex, Cursor & Copilot
의사가 만든 58개 오픈소스 스킬로 의료 연구 전 과정을 지원
Luminor는 방사선 전문의가 가장 많이 쓰는 7가지 작업을 기반으로 한 오픈소스 로컬 CT 뷰어
Luminor is an open-source, local CT viewer built around the seven actions radiologists use most: scrolling, windowing, MPR, measurements, MIP slabs, comparison and reporting.
건강JavaScript · PythonGitHub @dhnguyends온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Medical Images Viewer
README 전체를 불러오는 중입니다.
README 전문 보기 ↗An open-source CT viewer built around how radiologists actually read.
Luminor puts the seven things a radiologist does all day at the tip of a key: scroll, window, reformat, measure, project, compare and report. It runs entirely on your computer: a small Python server reads the DICOM files, and a fast browser app does everything else.
Introduction · User guide · Guide utilisateur (français) · Live demo (Hugging Face Spaces, anonymized LIDC-IDRI chest CTs)
The online demo runs server.py --public: a read-only library, with findings kept in each visitor's browser. The huggingface/ folder holds its Dockerfile and data download script.
[!WARNING] Research and education use only. Luminor is not a certified medical device and must not be used for diagnostic or treatment decisions. If you want to use Luminor enhancement for medical use, let's talk linkedin.com/in/dong-hai-nguyen-thanh ↗
A radiologist reads 40 to 80 CT studies a day, and the same handful of actions make up nearly all of that work. Luminor was designed from that routine.
| # | Feature | Why radiologists need it | In Luminor |
|---|---|---|---|
| 1 | Scroll & cine | Most reading time is spent scrolling through the stack, following structures from image to image. | Mouse wheel always scrolls (Shift ×5), arrow and page keys, cine at 2–40 images/s with Space, image number and position always shown. |
| 2 | Window & level | Every CT is read in lung, soft-tissue and bone windows; the window changes dozens of times per study. | Right-drag anywhere; presets on 1–5 (lung, mediastinum, bone, liver, brain; also on AZERTY); exact values; invert with I. |
| 3 | MPR | Findings are confirmed and located in coronal and sagittal planes. | Axial, coronal and sagittal panes with true proportions, a linked colour-coded crosshair and orientation letters from the DICOM tags. |
| 4 | Measurements | Nodule size drives follow-up; density tells cyst, fat, soft tissue or calcium apart. | Live HU probe, distances in mm from the true pixel spacing, ellipse ROI with mean ± SD, min/max and area. |
| 5 | MIP & slabs | MIP makes nodules stand out from vessels; MinIP shows airways and emphysema. | MIP, MinIP and average slabs from 2 to 40 mm in every plane (T, +/−). |
| 6 | Comparison | "New, stable or growing?" is the key question of every follow-up CT. | Two studies side by side, scrolling linked in millimetres, zoom and pan mirrored, one-key alignment (K). |
| 7 | Findings & reports | Every finding needs a name, a value and a location others can find again. | Named findings saved automatically, one-click navigation, Markdown report draft, annotated PNG key images. |
Press ? in the app for every shortcut.
Requires Python 3.10 or newer.
git clone https://github.com/dhnguyends/luminor-dicom.git
cd luminor-dicom
pip install -r requirements.txt
python server.py --data /path/to/series
Then open http://127.0.0.1:8770/ in Chrome, Edge, Safari or Firefox.
| Option | Effect |
|---|---|
--data FOLDER | Folder containing one sub-folder per CT/MRI exam or series. An exam folder may hold several series (selectable in the app); compressed DICOM and multi-frame MRI are supported, ultrasound and reports are skipped. |
--labels FILE.csv | Optional id,cancer CSV, shown as labels and filters in the library. |
--port N | Port to listen on (default 8770). |
On Windows, start.ps1 starts the server and opens the browser
(.\start.ps1 -DataDir "D:\scans" -Port 8770). It uses an Anaconda environment named DICOM
when one exists.
Sample data: Luminor was developed with chest CT scans from the
Kaggle Data Science Bowl 2017. The dataset is
not included: download it from the
competition data page (a Kaggle account
and acceptance of the competition rules
are required), extract stage1, then run:
python server.py --data /path/to/stage1 --labels /path/to/stage1_labels.csv
Luminor can also run as a normal Windows application (Luminor.exe, no Python needed): it
opens in its own window, asks for your images folder on first launch, and keeps settings and
findings in %APPDATA%\Luminor. The windows/ folder holds the launcher, the
build recipe and the installation guide; build it with
windowsuild.ps1 (see Building from source in that guide).
| English | Français | |
|---|---|---|
| Introduction to the seven features | index.html | index-fr.html |
| User guide | guide.html | guide-fr.html |
The guides cover every feature step by step, a suggested chest CT reading routine, an HU
reference table and troubleshooting. They live in docs/, which is published with
GitHub Pages. While Luminor is running, they are also available at
http://127.0.0.1:8770/guide.html and from the shortcuts sheet in the app. Print a guide from
the browser to get a PDF.
The interface is available in English and French. The globe button (EN / FR) in the
toolbar switches instantly. The choice is remembered, and the first launch follows the browser
language. French mode uses French conventions: UH, decimal commas, C/L window labels and
D/G orientation letters. All strings live in static/js/i18n.js; to
add a language, add a dictionary there.
server.py stdlib HTTP server (127.0.0.1 only) + pydicom/NumPy loader
static/index.html app shell
static/style.css design system (dark, translucent, Inter/SF typography)
static/js/volume.js HU volume in the browser: planes, slabs, ROI statistics, orientation
static/js/viewport.js canvas rendering, transforms, crosshair, overlays, HUD
static/js/app.js state, layouts, tools, findings, comparison, cine, keyboard
static/js/i18n.js English and French strings, locale-aware number formatting
docs/ introduction pages and user guides (GitHub Pages)
windows/ Windows desktop app: launcher (app window), PyInstaller recipe, build script
data/findings/ saved findings, one JSON file per series (created at runtime)
The server reads a series once (sorted by slice position, converted to Hounsfield units per
slice) and sends it to the browser as a raw int16 volume. Everything after that, including
window/level, reformats, slabs and statistics, is computed in the browser at interactive
speed. The last three volumes stay cached on the server. No build step and no JavaScript
dependencies.
| Method | Path | Returns |
|---|---|---|
| GET | /api/series | catalog: id, slice count, label |
| GET | /api/series/<id>/meta | shape, spacing, z positions, orientation, value range, unit, and the exam's other parts (series); <id>~N opens series N |
| GET | /api/series/<id>/volume | int16 little-endian volume, C order (z, y, x) |
| GET / PUT | /api/series/<id>/findings | saved findings (JSON list) |
| GET / POST | /api/data-folder | current images folder; POST {"path": …} switches to another one |
| POST | /api/browse-folder | opens the native folder picker on this computer, returns the chosen path |
| GET / POST | /api/drive | POST {"url": <Google Drive folder link>} downloads a shared folder to a local cache; GET reports progress and the local path (/api/drive/cancel stops it) |
POST and PUT requests must be application/json and are refused when sent by a web page from
another site (Origin check), so other websites cannot change Luminor's folder or findings.
Luminor is released under the Apache License 2.0. See NOTICE for attribution. The license covers the source code and documentation, not the Kaggle data shown in the screenshots.
The server listens on 127.0.0.1 only; images and findings never leave your computer. The only
outside request is for the Inter web font from Google Fonts; without internet, Luminor uses the
system font.