Interactive image stack viewing in jupyter notebooks based on ipycanvas and ipywidgets.
In this notebook we demonstate its usage on google colab.
Run this notebook in google colab
After starting a new session on google colab, you need to install stackview first.
Also note: The make stackview work in google colab, you need to install ipycanvas==0.11 (read why).
!pip install stackview==0.16.0 ipycanvas==0.11
Requirement already satisfied: stackview==0.16.0 in /usr/local/lib/python3.11/dist-packages (0.16.0) Requirement already satisfied: ipycanvas==0.11 in /usr/local/lib/python3.11/dist-packages (0.11.0) Requirement already satisfied: numpy!=1.19.4 in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (2.0.2) Requirement already satisfied: ipywidgets in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (7.7.1) Requirement already satisfied: scikit-image in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (0.25.2) Requirement already satisfied: ipyevents in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (2.0.2) Requirement already satisfied: toolz in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (0.12.1) Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (3.10.0) Requirement already satisfied: ipykernel in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (6.17.1) Requirement already satisfied: imageio in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (2.37.0) Requirement already satisfied: ipympl in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (0.9.7) Requirement already satisfied: wordcloud in /usr/local/lib/python3.11/dist-packages (from stackview==0.16.0) (1.9.4) Requirement already satisfied: pillow>=6.0 in /usr/local/lib/python3.11/dist-packages (from ipycanvas==0.11) (11.2.1) Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->stackview==0.16.0) (0.2.0) Requirement already satisfied: traitlets>=4.3.1 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->stackview==0.16.0) (5.7.1) Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->stackview==0.16.0) (3.6.10) Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->stackview==0.16.0) (7.34.0) Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from ipywidgets->stackview==0.16.0) (3.0.14) Requirement already satisfied: debugpy>=1.0 in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (1.8.0) Requirement already satisfied: jupyter-client>=6.1.12 in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (6.1.12) Requirement already satisfied: matplotlib-inline>=0.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (0.1.7) Requirement already satisfied: nest-asyncio in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (1.6.0) Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (24.2) Requirement already satisfied: psutil in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (5.9.5) Requirement already satisfied: pyzmq>=17 in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (24.0.1) Requirement already satisfied: tornado>=6.1 in /usr/local/lib/python3.11/dist-packages (from ipykernel->stackview==0.16.0) (6.4.2) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (1.3.2) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (4.57.0) Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (1.4.8) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (3.2.3) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib->stackview==0.16.0) (2.9.0.post0) Requirement already satisfied: scipy>=1.11.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image->stackview==0.16.0) (1.15.2) Requirement already satisfied: networkx>=3.0 in /usr/local/lib/python3.11/dist-packages (from scikit-image->stackview==0.16.0) (3.4.2) Requirement already satisfied: tifffile>=2022.8.12 in /usr/local/lib/python3.11/dist-packages (from scikit-image->stackview==0.16.0) (2025.3.30) Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.11/dist-packages (from scikit-image->stackview==0.16.0) (0.4) Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (75.2.0) Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.19.2) Requirement already satisfied: decorator in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (4.4.2) Requirement already satisfied: pickleshare in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.7.5) Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (3.0.51) Requirement already satisfied: pygments in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (2.19.1) Requirement already satisfied: backcall in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.2.0) Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.11/dist-packages (from ipython>=4.0.0->ipywidgets->stackview==0.16.0) (4.9.0) Requirement already satisfied: jupyter-core>=4.6.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-client>=6.1.12->ipykernel->stackview==0.16.0) (5.7.2) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib->stackview==0.16.0) (1.17.0) Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.11/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (6.5.7) Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.11/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.8.4) Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.11/dist-packages (from jupyter-core>=4.6.0->jupyter-client>=6.1.12->ipykernel->stackview==0.16.0) (4.3.7) Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (3.1.6) Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (23.1.0) Requirement already satisfied: nbformat in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (5.10.4) Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (7.16.6) Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.8.3) Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.18.1) Requirement already satisfied: prometheus-client in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.21.1) Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.11/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.3.0) Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.11/dist-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.7.0) Requirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets->stackview==0.16.0) (0.2.13) Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.11/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.2.4) Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (4.13.4) Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (6.2.0) Requirement already satisfied: defusedxml in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.7.1) Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.3.0) Requirement already satisfied: markupsafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (3.0.2) Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (3.1.3) Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.10.2) Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.11/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.5.1) Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (2.21.1) Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.11/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (4.23.0) Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.11/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (21.2.0) Requirement already satisfied: webencodings in /usr/local/lib/python3.11/dist-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.5.1) Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from bleach[css]!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.4.0) Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (25.3.0) Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (2025.4.1) Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.36.2) Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (0.24.0) Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.11/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.16.0) Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.17.1) Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (2.7) Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (4.13.2) Requirement already satisfied: pycparser in /usr/local/lib/python3.11/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (2.22) Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (4.9.0) Requirement already satisfied: websocket-client in /usr/local/lib/python3.11/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.8.0) Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (3.10) Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets->stackview==0.16.0) (1.3.1)
If you ran this for the first time, you need to restart your session.
First we test the installation by importing the libraries we're going to use
import stackview
from imageio.v3 import imread
from skimage.filters import gaussian
# Activate widgets in google colab
from google.colab import output
output.enable_custom_widget_manager()
Starting point is a 3D image dataset provided as numpy array.
image_stack = imread('https://github.com/clEsperanto/clesperanto_example_data/raw/main/Haase_MRT_tfl3d1.tif?raw=true')
image_stack.shape
(120, 160, 160)
stackview.insight(image_stack)
|
|
We can explore the dataset interactively using stackview.slice
.
stackview.slice(image_stack, zoom_factor=2)
HBox(children=(VBox(children=(VBox(children=(HBox(children=(VBox(children=(ImageWidget(height=320, width=320),…
foggy_brain = gaussian(image_stack, sigma=1)
stackview.curtain(image_stack, foggy_brain, zoom_factor=2)
HBox(children=(VBox(children=(VBox(children=(HBox(children=(VBox(children=(ImageWidget(height=320, width=320),…