https://github.com/octoframes/jupyter_compare_view
Blend Between Multiple Images in JupyterLab.
https://github.com/octoframes/jupyter_compare_view
jupyter
Last synced: about 1 year ago
JSON representation
Blend Between Multiple Images in JupyterLab.
- Host: GitHub
- URL: https://github.com/octoframes/jupyter_compare_view
- Owner: Octoframes
- License: mit
- Created: 2020-03-06T13:16:34.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-12-05T08:07:10.000Z (over 1 year ago)
- Last Synced: 2025-03-28T06:07:32.595Z (about 1 year ago)
- Topics: jupyter
- Language: Jupyter Notebook
- Homepage: https://octoframes.github.io/jupyter_compare_view/
- Size: 10.3 MB
- Stars: 113
- Watchers: 1
- Forks: 11
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Jupyter compare_view

[](https://octoframes.github.io/jupyter_compare_view)
[](https://mybinder.org/v2/gh/Octoframes/jupyter_compare_view/HEAD?labpath=example_notebook.ipynb)
[](https://colab.research.google.com/github/Octoframes/jupyter_compare_view/blob/main/example_notebook.ipynb)
[](https://badge.fury.io/py/jupyter_compare_view)
[](https://github.com/Octoframes/jupyter_compare_view/blob/main/LICENSE)
Blend between multiple images using a cell magic in JupyterLab using [compare_view](https://octoframes.github.io/compare_view).
*This project was called jupyter-splitview before.*
## Installation
```py
pip install jupyter_compare_view
```
## Example
```py
import jupyter_compare_view
```
```py
%%compare
from skimage import data
from skimage.color import rgb2gray
import matplotlib.pyplot as plt
img = data.chelsea()
grayscale_img = rgb2gray(img)
plt.imshow(img)
plt.axis("off")
plt.show()
plt.imshow(grayscale_img, cmap="gray")
plt.axis("off")
plt.show()
```

Another example:
```py
from jupyter_compare_view import compare
compare(img, grayscale_img, cmap="gray", start_mode="horizontal", start_slider_pos=0.73)
```

The split view widget is still responsive after closing and reopening the notebook without running the cell again.
## Notebook arguments
(Might still change in future)
* `--config '{"start_mode": "horizontal"}'` will init the compare-view in horizontal slider mode.
* `--config '{"circle_size": 30}'` the circle size is now 30 pixel in circle mode.
* `--config '{"show_slider": false}'` will hide the slider bar.
* `--config '{"start_slider_pos": 0.73}'` will set the slider start position to 73%.
* *Removed in 0.1.1: `--position 73%` will no longer the slider start position to 73%.*
* `--config '{"start_mode": "horizontal","start_slider_pos": 0.73}'` will both set the start mode to horizontal and set the slider position
* `--height 220` will set the height to 220 pixel.
* When `--height`is not provided, the default height of the widget is 300 pixel.
* `--height auto` will set the height by the value of the first image's resolution in vertical direction.
* The widget's width will always be adjusted automatically.
## Notebook formatting
Formatting with black can be done this way:
1. `pip install 'black[jupyter]'`
2. `black --python-cell-magics compare compare_view_magic.ipynb`
## Interactive Export
jupyter_compare_view fully supports offline interactive HTML exports.
The web library [compare_view](https://octoframes.github.io/compare_view) is inlined into the exported HTML document.
Therefore, the export is viewable without an internet connection.

## Developer Installation
1. `git clone --recurse https://github.com/Octoframes/jupyter_compare_view`
(Note: In case that the repo was already cloned e.g. with the GitHub Desktop client, the GitHub submodule has to be loaded via `git submodule update --init --recursive`)
2. `poetry install`
*Note*: The IPython extension `autoreload` reloads modules before every cell execution. Very useful when debugging the `%%capture` cell magic!
Just add these lines into the first jupyter cell.
```py
%load_ext autoreload
%autoreload 2
import jupyter_compare_view
```
## Changelog
# 0.2.4
CHange to importlib [#48](https://github.com/Octoframes/jupyter_compare_view/pull/48)
## 0.2.3
Remove setuptools dependency
## 0.2.2
* Remove python3.7 support [#46](https://github.com/Octoframes/jupyter_compare_view/pull/46)
* fix jupyterlite example
## 0.2.1
* Support python 3.11
## 0.2.0
* Implemented `capture` to display the compare view frame without calling the cell magic. This is not an ipywidget as mentioned [here](https://github.com/Octoframes/jupyter_compare_view/pull/41#pullrequestreview-1205327074).
* Update version requirements [#42](https://github.com/Octoframes/jupyter_compare_view/pull/42/files)
## 0.1.5
* BugFix: Remove black import that was added by accident.
## 0.1.4
* `%%compare` is now `%%splity`. `%%splity` is deprecated.
* Update examples
## 0.1.3
* octoframes github actions setup
## 0.1.2
* Move the repo from kolibril13/jupyter-spitview to octoframes/jupyter_compare_view
* Rename all references
## 0.1.1
* Drop the [github.com/NUKnightLab/juxtapose](https://github.com/NUKnightLab/juxtapose) backend and replace it with [github.com/Octoframes/compare_view](https://github.com/Octoframes/compare_view).
* Implement horizontal slider
* Implement Round Mask
## 0.1.0
* Update dependencies
* Update JupyterLite version
* Fix: in JupyterLite, a figure has to be explicitly called by plt.show()
* Better installation workflow
## 0.0.8
* Fixing problem with cell id and notebook reloading
* Experimentally lowering the dependencies to
`ipython = ">=6.0.0"` and `ipykernel = ">=5.0.0"` so that jupyterlite will work hopefully.
## 0.0.7
* Rewrite of the import of JavaScript and CSS to make it more robust when closing and opening the notebook
* First attempt to add a JupyterLite example.
## 0.0.6
Fix poetry workflow
## 0.0.5
* Ship the javascript directly with the package, so no internet connection is required
* use jinja2 to save HTML in separate file
* load stylesheet and javascript only once in the beginning, and not in every cell that contains the splitview widget.
## 0.0.4
* New `--height` parameter
## 0.0.3
* default slider position
* updated minimal example
* internal code restructuring and formatting
* Handle import in non jupyter context
## 0.0.2
* save images in base64 strings and don't load images to disk (increases package security).
## 0.0.1
* First release