[ANN] πŸš€ Announcing Browzarr.jl

Hey there, it’s been a while!

Today, I want to draw your attention to Browzarr.jl, the Julia bridge for launching Browzarr, a browser-based visualization framework for exploring and analyzing Zarr and NetCDF datasets.

Try it live at browzarr.io. The documentation is still a work in progress.

You can inspect variables, metadata, dimensions, and chunked data through an interactive browser interface. Open local NetCDF files (using netcdf4-wasm), local Zarr stores, or remote Zarr datasets with a single command.

Install the Julia package:

using Pkg
Pkg.add("Browzarr")

Launch:

using Browzarr
browzarr()

Examples:

# local NetCDF file
browzarr(; store="/path/to/file.nc")

# local Zarr store
browzarr(; store="/path/to/data.zarr")

# remote Zarr store
browzarr(; store="https://example.com/data.zarr")

Browzarr is also available as a standalone npm package for users outside the Julia ecosystem:

npm install -g browzarr
browzarr

Feedback, bug reports, and contributions are welcome!

What I would really like is for more of the state to be stored in the URL and for that to be dynamically updated as I select and refine a dataset. The idea here is that once I load what I want to see, I want to be able to copy that URL and send it to someone else. They should then be able to see exactly what I see. I really want to play with the visualizations your show in the video, but I have no idea how to get to them.

Agree, I only half-implemented this, see allow sharing url + plotting parameters Β· Issue #373 Β· EarthyScience/Browzarr Β· GitHub.
And since All states of a given plot are known, we should be able to store them. It needs work, but is possible.

I little bit unfriendly, but something functional was cooked in PR666 by @TheJeran

https://browzarr.io/latest/?data={"globalState"%3A{"initStore"%3A"https%3A%2F%2Fs3.bgc-jena.mpg.de%3A9000%2Fesdl-esdc-v3.0.2%2Fesdc-16d-2.5deg-46x72x1440-3.0.2.zarr"%2C"storeFromURL"%3Afalse%2C"variable"%3A"air_temperature_2m"}%2C"plotState"%3A{"pointSize"%3A5%2C"scalePoints"%3Afalse%2C"scaleIntensity"%3A1%2C"timeScale"%3A1%2C"valueRange"%3A[0%2C1]%2C"xRange"%3A[-1%2C1]%2C"yRange"%3A[-1%2C1]%2C"zRange"%3A[-1%2C1]%2C"showPoints"%3Atrue%2C"linePointSize"%3A2%2C"lineWidth"%3A1.25%2C"lineColor"%3A"%23111111"%2C"pointColor"%3A"%23EA8686"%2C"useLineColor"%3Afalse%2C"lineResolution"%3A3%2C"cOffset"%3A0%2C"cScale"%3A1%2C"useFragOpt"%3Afalse%2C"useCustomColor"%3Afalse%2C"useCustomPointColor"%3Afalse%2C"transparency"%3A0%2C"nanTransparency"%3A1%2C"nanColor"%3A"%23000000"%2C"showBorders"%3Afalse%2C"borderColor"%3A"%23000000"%2C"lonExtent"%3A[-180%2C180]%2C"latExtent"%3A[-90%2C90]%2C"originalExtent"%3A{"x"%3A-180%2C"y"%3A180%2C"z"%3A-90%2C"w"%3A90}%2C"lonResolution"%3A1%2C"latResolution"%3A1%2C"colorIdx"%3A0%2C"vTransferRange"%3Afalse%2C"vTransferScale"%3A1%2C"sphereResolution"%3A10%2C"displacement"%3A0%2C"displaceSurface"%3Atrue%2C"offsetNegatives"%3Atrue%2C"zSlice"%3A[0%2Cnull]%2C"ySlice"%3A[0%2Cnull]%2C"xSlice"%3A[0%2Cnull]%2C"interpPixels"%3Afalse%2C"useOrtho"%3Afalse%2C"rotateFlat"%3Afalse%2C"coarsen"%3Afalse%2C"kernel"%3A{"kernelDepth"%3A1%2C"kernelSize"%3A1}%2C"useBorderTexture"%3Afalse%2C"maskValue"%3A0%2C"borderWidth"%3A0.05%2C"cameraPosition"%3A{"x"%3A-3.780967105888259%2C"y"%3A-1.5251678420343258%2C"z"%3A-2.8945035494563265}%2C"disablePointScale"%3Afalse}%2C"zarrState"%3A{"zSlice"%3A[0%2C322]%2C"ySlice"%3A[0%2Cnull]%2C"xSlice"%3A[0%2Cnull]%2C"compress"%3Afalse%2C"useNC"%3Afalse%2C"fetchNC"%3Afalse%2C"coarsen"%3Afalse%2C"kernelSize"%3A2%2C"kernelDepth"%3A2%2C"icechunkOptions"%3Anull%2C"fetchOptions"%3Anull%2C"fetchKey"%3A0}}