Viewer Management Guide
Overview
OpenHCS supports streaming images to external viewers for interactive visualization:
Napari: Python-based viewer with layer management and advanced visualization
Fiji/ImageJ: Java-based viewer with hyperstack support and extensive plugin ecosystem
Both viewers can be used simultaneously, and viewers are automatically reused across different parts of OpenHCS (pipelines, image browser, manual streaming).
This guide covers how to use viewers effectively from a user perspective.
Using the Image Browser
The image browser is the main interface for viewing images interactively.
Opening the Image Browser
Load a plate in the PyQt GUI
Click the “Image Browser” tab
The browser shows a folder tree and image table
Enabling Viewers
Napari (enabled by default):
Check “Enable Napari Streaming” to activate
Configure display settings (LUT, contrast, etc.)
Images will stream to Napari viewer
Fiji (disabled by default):
Check “Enable Fiji Streaming” to activate
Configure dimension mapping and display settings
Images will stream to Fiji/ImageJ viewer
Both viewers:
Enable both checkboxes to stream to both viewers simultaneously
Useful for comparing visualization approaches
Viewing Images
Single image:
Click an image in the table
Click “View in Napari” or “View in Fiji” button
Viewer opens (if not already open) and displays image
Multiple images (recommended for hyperstacks):
Select multiple images (Ctrl+Click or Shift+Click)
Click “View in Napari” or “View in Fiji”
All images stream as a batch and build a hyperstack
Double-click:
Double-click any image to stream to enabled viewer(s)
If both enabled, streams to both
If neither enabled, shows a message
Progressive Hyperstack Building
You can build hyperstacks incrementally by sending images one at a time:
Select and view first z-slice → Creates hyperstack with 1 Z
Select and view second z-slice → Adds to hyperstack → Now has 2 Z
Select and view different channel → Adds to hyperstack → Now has 2 Z × 2 channels
This works for both Napari and Fiji viewers.
Managing Viewer Instances
The “Napari Instances” panel shows all detected viewers:
Status indicators:
✅ Ready - Viewer is running and ready to receive images
🚀 Starting… - Viewer is launching (wait a few seconds)
Viewer types:
“Napari Port 5555” - Napari viewer on port 5555
“Fiji Port 5556” - Fiji viewer on port 5556
“Port 5557” - External viewer (type unknown)
Killing viewers:
Select viewer in the list
Click “Kill Selected Instances”
Viewer process is terminated and port is freed
Warning
Only kill viewers when you’re done with them. Killing a viewer that’s being used by a running pipeline may cause errors.
Viewer Comparison
Napari vs Fiji
Napari:
✅ Modern Python-based interface
✅ Layer-based visualization (easy to toggle layers)
✅ Advanced rendering (GPU-accelerated)
✅ Plugin ecosystem for analysis
❌ Slower startup time
❌ Higher memory usage
Fiji/ImageJ:
✅ Fast startup
✅ Extensive plugin ecosystem (decades of development)
✅ Hyperstack-based (traditional microscopy workflow)
✅ Lower memory usage
❌ Java-based (separate process)
❌ Less modern interface
When to use which:
Napari: Interactive exploration, modern workflows, GPU rendering
Fiji: Quick checks, traditional ImageJ workflows, plugin compatibility
Both: Compare visualizations, leverage strengths of each
Common Issues
Viewer Won’t Start
Symptoms: Clicking “View” does nothing, or shows “Starting…” forever
Solutions:
Check if port is already in use:
lsof -i :5555Kill any stuck processes on the port
Try a different port in the config
Check logs in
~/.local/share/openhcs/logs/
Images Not Appearing
Symptoms: Viewer opens but images don’t show
Solutions:
Wait for “✅ Ready” status in instance list
Check if viewer window is hidden behind other windows
For Fiji: Ensure PyImageJ is installed correctly
Check that images are actually loading (check file paths)
Hyperstack Has Wrong Dimensions
Symptoms: Fiji hyperstack shows wrong number of channels/slices/frames
Solutions:
Select all images before clicking “View” (batch streaming)
Check that filenames have correct metadata (channel, z-index, etc.)
Verify dimension mapping in Fiji config
Close and reopen hyperstack to rebuild
Memory Issues
Symptoms: System runs out of memory when viewing many images
Solutions:
View fewer images at once
Use Napari instead of Fiji (more efficient memory management)
Close unused viewer windows
Reduce image resolution if possible
Tips and Best Practices
Efficient Workflow
Enable only what you need: Disable unused viewers to save resources
Batch selection: Select all images you want to view before clicking “View”
Reuse viewers: OpenHCS automatically reuses viewers - no need to close and reopen
Progressive building: Build hyperstacks incrementally by sending images one at a time
Check status first: Wait for “✅ Ready” before expecting images to appear
Performance
Use Fiji for quick checks: Faster startup and lower memory usage
Use Napari for exploration: Better for interactive analysis and modern workflows
Close unused windows: Free up memory by closing viewer windows you’re done with
Limit batch size: Don’t try to view hundreds of images at once
Troubleshooting
Check logs:
~/.local/share/openhcs/logs/contains detailed error messagesKill and restart: If viewer is unresponsive, kill it and let OpenHCS create a new one
Try different port: If port conflicts occur, change the port in config
Verify installation: Ensure Napari and PyImageJ are installed correctly
Performance Characteristics
Startup Times
Single viewer: ~2-5 seconds (depends on Napari import time)
Multiple viewers (sequential): N × 2-5 seconds
Multiple viewers (parallel): ~2-5 seconds (same as single!)
Memory Usage
Per viewer process: ~200-500 MB (Napari + Qt + NumPy)
ZMQ overhead: Negligible (~1 MB per connection)
Throughput
Image streaming: Limited by ZMQ (typically >100 MB/s on localhost)
Bottleneck: Usually Napari rendering, not network
See Also
For more detailed information:
API Reference - API reference (autogenerated from source code)