You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

pydcmview

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pydcmview

Terminal-based medical image viewer for DICOM, NRRD, and Nifti formats with high-quality graphics rendering

0.1.5
pipPyPI
Maintainers
1

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
  • ↑/↓ or j/k: Navigate through slices
  • w/a/s/d: Scroll image (up/left/down/right) - 5% of image size per step
  • t: Toggle dimension selection overlay
  • c: Enter colormap selection
  • h: Enter crosshair mode
  • Shift+W: Enter window/level mode
  • [/]: Zoom out/in (preserves scroll position)

Dimension Selection Overlay

  • ↑/↓ or j/k: Navigate dimensions
  • x: 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 changes
  • Esc: Cancel and return to normal mode

Crosshair Mode

  • ↑/↓/←/→ or h/j/k/l: Move crosshair position
  • Shift+↑/↓ or J/K: Adjust crosshair opacity
  • Esc: Exit crosshair mode

Window/Level Mode

  • ↑/↓ or j/k: Adjust window width (1% of intensity range)
  • ←/→ or h/l: Adjust window center/level (1% of intensity range)
  • Shift+↑/↓ or J/K: Adjust window width (5% of intensity range)
  • Shift+←/→ or H/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)

Keywords

medical

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts