Running ImJoy in Jupyter notebooks.
Project description
ImJoy Jupyter Extension
Using ImJoy with Jupyter notebooks
This extension utilizes the imjoy-rpc library to enable bidirectional RPC calls between the ImJoy core and plugins.
The library has an abstract transport interface that can support different types of transport. For now, we support Jupyter comms message which is a custom message protocol used in Jupyter notebooks (for example powers jupyter widgets).
To use it, you need to install the imjoy-jupyter-extension
in javascript which will also include the imjoy-rpc as a dependency.
Install the Jupyter notebook extension
pip install -U imjoy-jupyter-extension
Use ImJoy plugins inside Jupyter notebooks
Now you can start a jupyter notebook via for example jupyter notebook
command, you should be able to see an ImJoy icon in the toolbar if everything goes well.
Now run ImJoy plugins in a cell, see an example that uses itk-vtk-viewer to visualize images:
import imageio
import numpy as np
from imjoy_rpc import api
class ImJoyPlugin():
def setup(self):
api.log('plugin initialized')
async def run(self, ctx):
viewer = await api.showDialog(type="itk-vtk-viewer",
src="https://oeway.github.io/itk-vtk-viewer/")
# show a 3D volume
image_array = np.random.randint(0, 255, [10,10,10], dtype='uint8')
# show a 2D image
# image_array = imageio.imread('imageio:chelsea.png')
await viewer.imshow(image_array)
api.export(ImJoyPlugin())
With the above code, you created an ImJoy plugin. To run it, click the Run button with the ImJoy icon. It will then call the run function of your plugin.
- GIF Demo: Visualizing 2D image
- GIF Demo: Visualizing 3D volume
- GIF Demo: Load ImageAnnotator
You can also do the reverse by running a notebook inside ImJoy, to do that, please first create an empty jupyter notebook. Then copy and paste the url into the "+ PLUGINS" dialog, press enter and install the plugin. Click the newly installed plugin and you will get a notebook page open in ImJoy.
Try to copy and paste the itk-vtk-viewer example to a cell and execute it. Similarily, if you now click the run ImJoy button in the toolbar, you will get the viewer open insided ImJoy.
Load plugin dynamically in a notebook
There are different ways to load a plugin in a notebook, you can load from URL for the source code of the plugin (e.g. gist or github file url) or a hosted web app (e.g. the itk-vtk-viewer app used above). Besides that, you can also write a window plugin directly in a notebook. This is practical especially for debugging window plugin for your GUI.
You can directly pass a string with the plugin source code to api.getPlugin
, api.createWindow(src=...)
or api.showDialog(src=...)
, however, that doesn't give you syntax highliting in a Jupyter notebook cell. A workaround solution (which also works for Google Colab) is to write plugin code in a seperate cell startting with ## ImJoy Plugin
and wrap the source code with IPython.display.HTML()
. For example:
## ImJoy Plugin
from IPython.display import HTML
my_plugin_source = HTML('''
<docs lang="markdown">
[TODO: write documentation for this plugin.]
</docs>
<config lang="json">
{
"name": "Untitled Plugin",
"type": "window",
"tags": [],
"ui": "",
"version": "0.1.0",
"cover": "",
"description": "[TODO: describe this plugin with one sentence.]",
"icon": "extension",
"inputs": null,
"outputs": null,
"api_version": "0.1.8",
"env": "",
"permissions": [],
"requirements": [],
"dependencies": [],
"defaults": {"w": 20, "h": 10}
}
</config>
<script lang="javascript">
class ImJoyPlugin {
async setup() {
api.log('initialized')
}
async run(ctx) {
}
}
api.export(new ImJoyPlugin())
</script>
<window lang="html">
<div>
<p>
Hello World
</p>
</div>
</window>
<style lang="css">
</style>
''')
Then in another cell, you can passing the plugin source code to api.getPlugin
, api.createWindow(src=...)
or api.showDialog(src=...)
to make an actually plugin:
from imjoy import api
class ImJoyPlugin():
async def setup(self):
pass
async def run(self, ctx):
# for regular plugin
# p = await api.getPlugin(my_plugin_source)
# or for window plugin
# await api.createWindow(src=my_plugin_source)
await api.showDialog(src=my_plugin_source)
api.export(ImJoyPlugin())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file imjoy-jupyter-extension-0.2.11.tar.gz
.
File metadata
- Download URL: imjoy-jupyter-extension-0.2.11.tar.gz
- Upload date:
- Size: 23.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1647cc98d66af718ee8cee71b564522dd4bba120757bcbe76a9808b49b94d1ab |
|
MD5 | f27794a0a5bc4b59956a2d1c787796e2 |
|
BLAKE2b-256 | a9cb2900d2d8cf7a8e4bbb270cc439805aa526ab93d0ac5d8aff499a5ad37cdb |
File details
Details for the file imjoy_jupyter_extension-0.2.11-py3-none-any.whl
.
File metadata
- Download URL: imjoy_jupyter_extension-0.2.11-py3-none-any.whl
- Upload date:
- Size: 39.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74f0a8317d2e03110db5987b79d0b8df56eaf4ff6bdb0a98dbfd78409c0fa7d9 |
|
MD5 | 281915b6f32ecc67b0619af79e3453d0 |
|
BLAKE2b-256 | 51d28e99d8ed1a3b32f47ab692ec39630a7bcf86f6a4d4782b5b7363c8dd288d |