Terminal-based medical image viewer for DICOM, NRRD, and Nifti formats with high-quality graphics rendering
Project description
PyDCMView
Terminal-based medical image viewer for DICOM, NRRD, and Nifti formats with high-quality graphics rendering.
Installation
pip install pydcmview
Usage
pydcmview <path_to_image_file_or_dicom_directory>
When using over remote SSH, I've only gotten advanced graphics rendering to work with kitty with the following remote SSH command
kitty +kitten ssh <typical_ssh_arguments_here>
e.g., kitty +kitten ssh -p 6000 my_server_address
With other remote SSH connections, it falls back to Unicode block rendering. Adjust the terminal font zoom to increase/decrease rendering resolution. Each character block represents 2 pixels.
Features
- Format Support: DICOM, NRRD, and Nifti formats
- High-Quality Rendering: Uses textual-image with Sixel and Kitty graphics protocols for superior image quality
- 2D Slice Viewing: Navigate through N-dimensional images slice by slice
- Interactive Dimension Selection: Overlay-based dimension selection with axis assignment and flipping
- WASD Scrolling: Pan across images with 5% step size, zoom-aware navigation
- Zoom Controls: Zoom in/out functionality with scroll position preservation (0.01x to 20.0x)
- Crosshair Mode: Interactive crosshair with adjustable opacity and pixel intensity display
- Window/Level Adjustment: Percentage-based contrast and brightness control (1% and 5% increments)
- Colormap Selection: Multiple colormap options for enhanced visualization
- Smart Navigation: Arrow keys and vim motion keys supported throughout
- Comprehensive Status Bar: Real-time display of image info, coordinates, and available commands
Key Bindings
Normal Mode
q: Quit application↑/↓orj/k: Navigate through slicesw/a/s/d: Scroll image (up/left/down/right) - 5% of image size per stept: Toggle dimension selection overlayc: Enter colormap selectionh: Enter crosshair modeShift+W: Enter window/level mode[/]: Zoom out/in (preserves scroll position)
Dimension Selection Overlay
↑/↓orj/k: Navigate dimensionsx: Assign dimension to X-axis (swaps if already assigned to Y)y: Assign dimension to Y-axis (swaps if already assigned to X)f: Toggle flip for selected dimension (marked with *)Enter: Confirm and apply changesEsc: Cancel and return to normal mode
Crosshair Mode
↑/↓/←/→orh/j/k/l: Move crosshair positionShift+↑/↓orJ/K: Adjust crosshair opacityEsc: Exit crosshair mode
Window/Level Mode
↑/↓orj/k: Adjust window width (1% of intensity range)←/→orh/l: Adjust window center/level (1% of intensity range)Shift+↑/↓orJ/K: Adjust window width (5% of intensity range)Shift+←/→orH/L: Adjust window center/level (5% of intensity range)Esc: Exit window/level mode
Technical Details
Rendering Engine
- Primary: textual-image library with Terminal Graphics Protocol support
- Fallback: Unicode block characters for broader terminal compatibility
- Graphics Protocols: Sixel (xterm, mintty) and Kitty graphics for high-resolution display
Navigation and Zoom
- WASD Scrolling: 5% of image dimensions per step, scaled with zoom level
- Zoom Preservation: Scroll position maintained during zoom operations with bounds checking
- Zoom Range: 0.01x to 20.0x with nearest-neighbor interpolation for medical accuracy
- Smart Constraints: Automatic scroll boundary enforcement to prevent out-of-bounds navigation
Dimension Management
- Dynamic axis assignment for N-dimensional data
- Independent dimension flipping with visual indicators
- Automatic slice axis calculation for 3D+ datasets
Requirements
- Python 3.8+
- textual>=0.70.0
- textual-image>=0.3.0 (replaces rich-pixels for better graphics)
- SimpleITK>=2.3.0
- numpy>=1.21.0
- pydicom>=2.3.0
- Pillow>=8.0.0
Recent Updates
Graphics Engine Upgrade
- Migrated from rich-pixels to textual-image for superior rendering quality
- Added support for Sixel and Kitty terminal graphics protocols
- Maintained backward compatibility with Unicode block rendering
Enhanced Navigation
- WASD Scrolling: Added image panning with percentage-based movement (5% of image size)
- Zoom Position Preservation: Zoom operations now maintain current view position with bounds checking
- Improved Window/Level: Percentage-based adjustments (1% and 5%) relative to image intensity range
- Colormap Integration: Multiple colormap options for enhanced medical image visualization
- Extended Zoom Range: Increased zoom capability from 5.0x to 20.0x maximum
UI/UX Improvements
- Real-time status bar updates with zoom level and opacity display
- Context-sensitive key binding hints
- Smooth overlay transitions with semi-transparent backgrounds
- Improved dimension swapping logic for intuitive axis assignment
Terminal Compatibility
Best Experience:
- Kitty terminal (full graphics protocol support)
- iTerm2 (with graphics support)
- xterm with Sixel support
Good Experience:
- Most modern terminals (Unicode block fallback)
- Windows Terminal
- GNOME Terminal
- Terminal.app (macOS)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydcmview-0.1.4.tar.gz.
File metadata
- Download URL: pydcmview-0.1.4.tar.gz
- Upload date:
- Size: 18.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fde9c1d30c33921e5afe1deae35b7ba7ae42280db8c9599d0ec88991c962cb02
|
|
| MD5 |
981b8866a5d052e28715916191a1d3df
|
|
| BLAKE2b-256 |
ba1d8af09449e252e85d3b1b3e17d3914b51fb634f47bc93f0f1c543990deaae
|
File details
Details for the file pydcmview-0.1.4-py3-none-any.whl.
File metadata
- Download URL: pydcmview-0.1.4-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd30f911527f0375d7f0118318771735f546e7e93fa7175165c3dde71fde2b6d
|
|
| MD5 |
bf40ffbf9ca3da8a23bc00439998fc8c
|
|
| BLAKE2b-256 |
1926e10e73a811ac072e6600908247e621343306c3d847ae92ca3075175523a2
|