I am attempting to run the itk-vtk-viewer on an iPad, however, I am encountering a rendering issue where all I see is a solid box:

It works on Mac and Linux just fine. I also tried setting setImageInterpolationEnabled(false), but that did not solve the issue.
I found some related bugs:
Kitware/vtk-js#3206
Kitware/vtk-js#3194
Kitware/vtk-js#3027
Later in the afternoon, I updated the following things with some success. The dataset loads, but is unresponsive to inputs. The HTML/CSS UI is still usable (although the visualization does not update). Works fine on Mac on multiple browsers.
- iPad to the latest version
- vtk.js : 32.14.0
- imjoy-core : 0.14.5

Mobile Devices Tested:
iPhone 16 PRO Max -- non-interactive
iPad M1 -- initial load, but then non-interactive. black screen on refresh
iPad resource stats:
1.17 GB of Memory
238.4% CPU

Looking at the iPad Safari console via my Macbook, I see this error:
[Error] WebGL: context lost.
getContext
(anonymous function) (itkVtkViewer.js:2:1889829)
...
a (itkVtkViewer.js:2:881355)
[Error] Unhandled Promise Rejection: TypeError: Argument 1 ('shader') to WebGL2RenderingContext.shaderSource must be an instance of WebGLShader
additional notes:
I am building from this repo
https://github.com/davramov/itk-vtk-viewer/tree/iframe
Using this Dockerfile:
FROM continuumio/miniconda3:25.1.1-2
# Install system dependencies and Node.js 20.x
RUN apt-get update && \
apt-get install -y git curl build-essential socat && \
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Verify versions
RUN node --version && npm --version
# Puppeteer config to avoid Chromium downloads
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_SKIP_DOWNLOAD=true
# Clone itk-vtk-viewer
WORKDIR /tmp
RUN git clone -b iframe https://github.com/als-computing/itk-vtk-viewer.git
# Update package.json to use newer vtk.js version with better mobile support
WORKDIR /tmp/itk-vtk-viewer
RUN sed -i 's/"@kitware\/vtk.js": "\^29.4.6"/"@kitware\/vtk.js": "32.14.0"/g' package.json && \
sed -i 's/"vtk.js": "\^29.4.6"/"vtk.js": "32.14.0"/g' package.json & \
sed -i 's/"imjoy-core": "\^0.13.74"/"imjoy-core": "0.14.5"/g' package.json
# Remove puppeteer dependency and build
RUN sed -i 's/"puppeteer":.*,//' package.json && \
npm install && \
npm run build && \
npm link
EXPOSE 8082
CMD ["npx", "itk-vtk-viewer", "--port", "8082"]
iPad M4 iPad (April 21 test)
- Works on Safari, but very choppy (3-5 seconds to rotate/interact). Can not handle zooming into the volume.
- Does not work on Chrome at all
Any help is appreciated!
I am attempting to run the itk-vtk-viewer on an iPad, however, I am encountering a rendering issue where all I see is a solid box:
It works on Mac and Linux just fine. I also tried setting
setImageInterpolationEnabled(false), but that did not solve the issue.I found some related bugs:
Kitware/vtk-js#3206
Kitware/vtk-js#3194
Kitware/vtk-js#3027
Later in the afternoon, I updated the following things with some success. The dataset loads, but is unresponsive to inputs. The HTML/CSS UI is still usable (although the visualization does not update). Works fine on Mac on multiple browsers.
Mobile Devices Tested:
iPhone 16 PRO Max -- non-interactive
iPad M1 -- initial load, but then non-interactive. black screen on refresh
iPad resource stats:

1.17 GB of Memory
238.4% CPU
Looking at the iPad Safari console via my Macbook, I see this error:
additional notes:
I am building from this repo
https://github.com/davramov/itk-vtk-viewer/tree/iframe
Using this Dockerfile:
iPad M4 iPad (April 21 test)
Any help is appreciated!