# elastix Affine Registration Web App: Image Registration That Runs in Your Browser

**URL:** https://discourse.itk.org/t/elastix-affine-registration-web-app-image-registration-that-runs-in-your-browser/7802
**Category:** Announcements
**Tags:** registration, python, itk-wasm, elastix
**Created:** [October 8, 2026, 9:28pm UTC](https://discourse.itk.org/t/elastix-affine-registration-web-app-image-registration-that-runs-in-your-browser/7802 "2026-10-08T21:28:50Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![matt.mccormick](https://discourse.itk.org/user_avatar/discourse.itk.org/matt.mccormick/32/7_2.png) [@matt.mccormick](https://discourse.itk.org/u/matt.mccormick)
#### Post date: [October 8, 2026, 9:28pm UTC](https://discourse.itk.org/t/elastix-affine-registration-web-app-image-registration-that-runs-in-your-browser/7802/1 "2026-10-08T21:28:50Z")

</div>

Hi everyone,

We’re happy to announce a new web app for **affine image registration with elastix**. It runs entirely in your web browser:

**[insightsoftwareconsortium.github.io/ITKElastix](https://insightsoftwareconsortium.github.io/ITKElastix/)**

You don’t need to install anything, create an account, or upload your data. Open the page, drop in two images, and get back an aligned image and a transform you can reuse. The app is built on [ITKElastix](https://github.com/InsightSoftwareConsortium/ITKElastix), which provides [elastix](https://elastix.dev) for ITK, Python, and WebAssembly. Our goal is to make robust, reproducible image registration available to anyone with a web browser.

![2d zebrafish demo](https://discourse.itk.org/uploads/default/original/2X/2/24fb9ea2e886b6390d19550a3c8936e7d0e193ea.gif)

## Features

### elastix registration that just works

Under the hood, the app runs [elastix](https://elastix.dev), a widely used, well-tested registration toolbox. Its multi-resolution, stochastic optimization works across a wide range of biomedical and scientific images. The app runs a **translation → rigid → affine** sequence, so each stage starts from a good estimate from the previous one. A new image pair registers on its own as soon as it loads, and the default settings work for most datasets without any tuning.

If you do want to adjust things, you can set the **number of pyramid levels** (elastix’s `NumberOfResolutions`), run the registration again after changing options, or stop a running registration at any time.

### 2D and 3D

The app registers both **2D and 3D** images. Both images in a pair must have the same dimension. You can compare the fixed image, the moving image, and the registered result side by side, using slice and 3D render views and several colormaps.

### Everything stays on your computer

**All processing happens locally on your system.** Registration runs in WebAssembly inside a web worker in your browser. Nothing is uploaded to a server. This makes the app suitable for sensitive or unpublished data, and it works the same way on any operating system with a modern browser.

### Local files or remote, very large multiscale images

For each image, you can:

- **Drop a file** on the input box,
- **Choose a file** from your computer, or
- **Enter a URL**.

Remote **OME-Zarr** and **TIFF / OME-TIFF multiscale** images are read on demand, so they can be **extremely large**. The app reads only the pyramid level it needs, not the whole dataset. You can set an **image buffer budget** (25, 50, or 100 MB), and the app loads both inputs at the finest resolution level that fits within it.

Two Fideus Labs libraries make this possible:

- [**ngff-zarr**](https://github.com/fideus-labs/ngff-zarr) is a Python and TypeScript implementation of OME-Zarr (NGFF) that reads OME-Zarr v0.1–v0.6 and supports OME-Zarr Zip (`.ozx`, RFC-9) files and coordinate transformations.
- [**fiff**](https://github.com/fideus-labs/fiff) presents TIFF and OME-TIFF files as a Zarr store following the OME-Zarr data model. It reads tiles and pyramid levels on demand with HTTP range requests.

### Input formats

- **OME-Zarr** : a `.ome.zarr` URL or a zipped `.ozx` file
- **TIFF and OME-TIFF** , including multiscale pyramids
- **Any format ITK can read** , such as NIfTI, NRRD, MetaImage, DICOM, and PNG

### Output formats

You can download the **registered image** as **OME-Zarr** (`.ome.zarr.ozx`). This is an OME-Zarr 0.6 multiscale image zipped into a single file (RFC-9). The fixed-to-moving transform is embedded as an **RFC-5 affine coordinate transformation** , so the alignment travels with the data.

You can also download the **fixed → moving affine transform** in several formats, so you can use it in the rest of your workflow:

| Format | Extension |
| --- | --- |
| OME-Zarr transform (RFC-5 affine, RFC-9 zip) | `.ome.zarr.ozx` |
| ITK HDF5 | `.h5`, `.hdf5` |
| ITK text | `.tfm`, `.txt` |
| MATLAB | `.mat` |
| MINC XFM | `.xfm` |
| ITK-Wasm transform | `.iwt.cbor` |
| elastix TransformParameters TOML | `.zip` |

### Try it with example data

The app includes three example pairs:

- **2D zebrafish tailbud** : one light-sheet plane of a zebrafish tailbud (H2B nuclei, IDR [idr0051](https://idr.openmicroscopy.org/search/?query=Name:idr0051)), imaged 40 minutes apart as the tail extends. It registers in about a second.
- **3D zebrafish tailbud** : the same tailbud as whole light-sheet z-stacks, imaged 40 minutes apart.
- **3D MNI T2w → T1w** : the MNI152 T2w template registered to the MNI305 T1w template, a multimodal brain MRI example.

![2d zebrafish demo](https://discourse.itk.org/uploads/default/original/2X/d/daf10a57a36ca7aeae36ad99fad94f08a4081bf0.gif)  
 ![image registration](https://discourse.itk.org/uploads/default/original/2X/5/5edd63db3f7270feacf07c3b8a7af6665b2849f4.gif)

## Learn more: Python and Jupyter notebooks

The web app is a convenient entry point. For scripted, batch, and more advanced workflows, including B-spline (deformable) registration, masks, point sets, groupwise registration, and custom parameter maps, see the **ITKElastix Python interface** :

```bash
pip install itk-elastix

```

```python
import itk

fixed_image = itk.imread("path/to/fixed_image.mha", itk.F)
moving_image = itk.imread("path/to/moving_image.mha", itk.F)

registered_image, params = itk.elastix_registration_method(fixed_image, moving_image)

```

The [**ITKElastix Jupyter notebooks**](https://github.com/InsightSoftwareConsortium/ITKElastix/tree/main/examples) are the best way to learn. You can run them in your browser on [MyBinder](https://mybinder.org/v2/gh/InsightSoftwareConsortium/ITKElastix/main?urlpath=lab/tree/examples), or locally in Jupyter. Good places to start:

- [Simple registration](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example01_SimpleRegistration.ipynb)
- [Custom or multiple parameter maps](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example02_CustomOrMultipleParameterMaps.ipynb)
- [Masked 3D registration](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example03_Masked_3D_Registration.ipynb)
- [Initial transforms and multithreading](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example04_InitialTransformAndMultiThreading.ipynb)
- [Applying transforms with transformix](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example08_SimpleTransformix.ipynb)
- [World coordinates explained (with napari)](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example14_WorldCoordinatesExplanation_Napari.ipynb)
- [Converting to ITK transforms](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example22_ConvertToITKTransform.ipynb)
- [TOML parameter files](https://github.com/InsightSoftwareConsortium/ITKElastix/blob/main/examples/ITK_Example_TomlFileFormatForParameterFiles.ipynb)

ITKElastix is also available as a package for JavaScript / TypeScript (`npm install @itk-wasm/elastix`). The [elastix Model Zoo](https://github.com/SuperElastix/ElastixModelZoo) collects parameter files that work well for specific kinds of data, and the [napari plugin](https://github.com/SuperElastix/elastix_napari) provides a desktop GUI.

## Acknowledgments

This work was supported in part by the **Chan Zuckerberg Initiative (CZI) Essential Open Source Software for Science (EOSS)** program and the **Wellcome Trust** , through EOSS Cycle 6, under the award “Open Source Image Registration: The elastix Toolbox”. We thank them for supporting open, reproducible image analysis infrastructure. We also thank the elastix and ITK communities for many years of work on the tools underneath this app.

---

<div class="post-metadata">

### Author: ![stefanklein](https://discourse.itk.org/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@stefanklein](https://discourse.itk.org/u/stefanklein)
#### Post date: [October 9, 2026, 6:51am UTC](https://discourse.itk.org/t/elastix-affine-registration-web-app-image-registration-that-runs-in-your-browser/7802/2 "2026-10-09T06:51:04Z")

</div>

Fantastic work Matt!

---

<div class="post-metadata">

### Author: ![alanthealth](https://discourse.itk.org/letter_avatar_proxy/v4/letter/a/ebca7d/32.png) [@alanthealth](https://discourse.itk.org/u/alanthealth)
#### Post date: [October 9, 2026, 8:02am UTC](https://discourse.itk.org/t/elastix-affine-registration-web-app-image-registration-that-runs-in-your-browser/7802/3 "2026-10-09T08:02:45Z")

</div>

Excellent work. Thank you
