--- tags: NGFF --- # NGFF-VIV Presentation by Trevor Attending: Trevor Manzt, Frances, Josh, Will, Simon, Petr, J-m, David, Chris, Emil, Dom, Seb - Deck.gl is a WebGL framework from Uber for customizing rendering - viv broken into: - data loader components ("data not in browser") - getTile() function (also decodes) not called by user/client. - deck.gl layers calling functions to load data - Easiest to use viv from a react project (good support for deck.gl) - deck.gl canvas takes layers - a number of declarative (rendering) properties have existing shader code - no way to update the properties (handled by applications) - avivator - for anything available via HTTP - some advanced rendering - first 4 channels by default - heuristic for the settings - works the same for OME-TIFF and bioformats2raw zarr - more feature rich: - linked pan & zoom - Will: can the channels be different for each? Don't think so. But building blocks are there in the viv library, but the applications needs to manage the state - picture-in-picture - local lens transformations (black-to-white color ramp) - looking to use it as a way to engage with the community about what they would like to see. - vizarr - guessing is less sophisticated - "source" needs to point to a zarr multiscale - wanted to integrate viv into a notebook / remote computation location --> ImJoy - allows you to use a Python backend - ImJoy manages secure data transfer - loaded if in an IFRAME - biolerplate for setting up an ImJoy client - can wrap any zarr-python store for access in viv - jupyter kernel is functioning as a proxy to the image data - No additive blending between images, but up to 6 layers in one image - Discussion - _looked through examples_ - for hacking, suggest cloing imjoy_plugin.py to a forked version of the vizarr (localhost:3000) - recently added a versioned imjoy api (NPM packages) - **Seb**: support for future specs? overlayed masks or multiple images (HCS) **Trevor**: can create separate layers for multiple images, but there are other modalities. Don't yet have anything built into viv for loading masks or other types of layers. But should be a matter of using other deck.gl layers for those modalities. see https://vitessce.io Need to map JSON objects to a deck.gl component. - **Will**: avivator vs. vizarr seems like a lot of duplication. Implement every UI feature twice? **Trevor**: vizarr spawned as a way to quickly provide access in a Jupyter environment. Hopefully could bring all of that into the library, but don't want to proscribe the UI that someone is using. In the long-run, likely want to add ImJoy API to Avivator (demonstrates more of the features of Viv) even though it's much more tied to OME-XML (5D). **Josh:** the future OME model should be a superset of OME-XML and that would be a good target for viv and _all_ of the applications. - **J-m**: how difficult to deal with a plate (grid)? **Trevor:** similar to picture-in-picture but you want a special layer in the Viv library. A grid layer, an array of different loaders that get drawn. A question of what API for that layer. Several questions: same color transformations to all? Same channels? But there's definitely the posibility of having a composite layer. **Will:** you could also load the plate on the fly (new data source in Python) - Addendum (Trevor) - Something I just realized that I didn't this morning but forgot who asked. The "grid" view for a plate could be achieved with viv currently (if each image is not multiscale). Viv's ImageLayer is a deck.gl layer for where the data must be non-pyramidal (e.g. just a zarr array, not list of zarr arrays), but it allows you to pass scale and translate as props as well. - You could create n x m separate ImageLayers and just ensure that each image is translatedon to some arbitrary grid. Deck.gl would take care of rendering - Here is an example of a MultiscaleImageLayer(MxIF image) with an ImageLayer(IMS data, non-pyramidal). We translated and scaled the ImageLayer to register with the layer below. http://vitessce.io/?dataset=vanderbilt&theme=dark - I opened this issue a while ago, but we haven't run into the use case yet to spend the time to add this feature: https://github.com/hms-dbmi/viv/issues/217