Development Status
- 3 - Alpha
Intended Audience
- Science/Research
License
- OSI Approved :: MIT License
Programming Language
- Python :: 3
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
Topic
- Scientific/Engineering :: Image Processing
- Scientific/Engineering :: Visualization
anybioimage
Interactive bioimage viewer widget for Jupyter and marimo notebooks. Built on anywidget, it supports multi-dimensional images, multi-channel composites, mask overlays, annotation tools, and HCS plate navigation.
Documentation: https://maartenpaul.github.io/anybioimage/
Installation
uv pip install anybioimage
# With all recommended dependencies (excludes SAM/PyTorch)
uv pip install "anybioimage[all]"
# With SAM support (Python 3.10โ3.12, requires PyTorch)
uv pip install "anybioimage[complete]"
Quick Start
Minimal example (NumPy only)
import numpy as np
from anybioimage import BioImageViewer
viewer = BioImageViewer()
viewer.set_image(np.random.randint(0, 255, (512, 512), dtype=np.uint8))
viewer # displays in notebook

Example with a tiff image
from anybioimage import BioImageViewer
from bioio import BioImage
import bioio_tifffile
viewer = BioImageViewer()
viewer.set_image(BioImage("image.tif", reader=bioio_tifffile.Reader))
viewer # renders inline

marimo
import marimo as mo
from anybioimage import BioImageViewer
from bioio import BioImage
import bioio_tifffile
viewer = BioImageViewer()
viewer.set_image(BioImage("image.tif", reader=bioio_tifffile.Reader))
mo.ui.anywidget(viewer)
Features
Multi-dimensional images
Supports 5D arrays (TCZYX: Time, Channel, Z-stack, Y, X) with sliders for T, Z, and per-channel controls. Pass a BioImage object for lazy loading โ efficient for large TIFF and OME-Zarr files.
from bioio import BioImage
import bioio_tifffile
import bioio_ome_zarr
img = BioImage("image.tif", reader=bioio_tifffile.Reader)
viewer.set_image(img) # activates T/Z sliders, per-channel LUT controls

Multi-channel composites
Each channel has independent color, brightness/contrast (LUT), and visibility controls via the Layers panel in the toolbar. Channel settings can also be set programmatically:
# Access and modify channel settings
settings = list(viewer._channel_settings)
settings[0] = {**settings[0], "name": "DAPI", "color": "#0000ff"}
viewer._channel_settings = settings
Mask overlays
Add segmentation masks as overlay layers with configurable color, opacity, and contour rendering:
viewer.add_mask(labels, name="Nuclei", color="#ff0000", opacity=0.5)
# Manage masks
viewer.update_mask_settings(mask_id, opacity=0.3)
viewer.remove_mask(mask_id)
viewer.clear_masks()

HCS plate support
Load OME-Zarr HCS plates with well and FOV navigation dropdowns built into the widget:
viewer = BioImageViewer()
viewer.set_plate("plate.zarr")
viewer # shows Well / FOV dropdowns
Annotation tools
| Tool | Shortcut | Description |
|---|---|---|
| Pan | P |
Navigate and zoom |
| Select | V |
Select annotations; Delete to remove |
| Rectangle | R |
Draw bounding boxes |
| Polygon | G |
Click vertices, double-click to close |
| Point | O |
Place point markers |
Export annotations as DataFrames:
viewer.rois_df # rectangles: id, x, y, width, height
viewer.polygons_df # polygons: id, points, num_vertices
viewer.points_df # points: id, x, y
SAM integration
Automatic segmentation with Segment Anything Model when drawing rectangles or placing points:
viewer.enable_sam(model_type="mobile_sam") # ~40 MB, fastest
viewer.enable_sam(model_type="sam_b") # SAM base, ~375 MB
Requires uv pip install "anybioimage[sam]" (Python 3.10โ3.12).

Optional dependencies
| Extra | Installs | Use case |
|---|---|---|
bioio |
bioio, bioio-tifffile |
TIFF / OME-Zarr loading |
contours |
scipy |
Contour-only mask rendering |
sam |
ultralytics (PyTorch) |
SAM segmentation |
all |
bioio + contours | Recommended (no PyTorch) |
complete |
all + sam | Everything |
License
MIT