Metadata-Version: 2.4
Name: plexora
Version: 0.0.29
Summary: OpenSeadragon-based cellular image viewing and analysis tool.
Author-email: BioCognia <support@biocognia.com>
License-Expression: LicenseRef-Plexora-EULA-1.0
Requires-Python: <3.14,>=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp>=3.9
Requires-Dist: anndata>=0.10
Requires-Dist: biocognia<0.2,>=0.1.1
Requires-Dist: Flask>=3.1
Requires-Dist: fsspec>=2024.12
Requires-Dist: h5py>=3.16.0
Requires-Dist: hdf5plugin>=5
Requires-Dist: imagecodecs
Requires-Dist: itsdangerous>=2.2
Requires-Dist: Jinja2>=3.1
Requires-Dist: numba>=0.61
Requires-Dist: numpy>=2.0
Requires-Dist: ome-types>=0.6.3
Requires-Dist: opencv-python-headless>=5.0.0.93
Requires-Dist: openpyxl>=3.1
Requires-Dist: onnxruntime<2,>=1.17
Requires-Dist: orjson>=3.11
Requires-Dist: pandas>=3.0.5
Requires-Dist: Pillow>=10.4
Requires-Dist: platformdirs>=4
Requires-Dist: polars>=1.43
Requires-Dist: pydantic<2.14,>=2.13
Requires-Dist: reportlab>=5.0.1
Requires-Dist: s3fs>=2024.12
Requires-Dist: scikit-image
Requires-Dist: scikit-learn>=1.9
Requires-Dist: scipy
Requires-Dist: shapely>=2.1.2
Requires-Dist: spatialdata>=0.8.0
Requires-Dist: spatialagents<0.2,>=0.1
Requires-Dist: threadpoolctl>=3.6.0
Requires-Dist: tifffile>=2026.7.31
Requires-Dist: urllib3>=2.0
Requires-Dist: waitress
Requires-Dist: Werkzeug>=3.1
Requires-Dist: zarr>=3
Provides-Extra: jupyter
Requires-Dist: ipython; extra == "jupyter"
Requires-Dist: jupyter-server-proxy; extra == "jupyter"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-randomly>=4.1.0; extra == "dev"
Provides-Extra: spatial
Requires-Dist: pyarrow>=14; extra == "spatial"
Provides-Extra: remote
Requires-Dist: gcsfs>=2024.12; extra == "remote"
Requires-Dist: adlfs>=2024.12; extra == "remote"
Requires-Dist: wsidicom>=0.35; extra == "remote"
Requires-Dist: pydicom>=3; extra == "remote"
Requires-Dist: universal-pathlib>=0.2; extra == "remote"
Provides-Extra: wsi
Requires-Dist: openslide-python>=1.3; extra == "wsi"
Requires-Dist: openslide-bin>=4.0; extra == "wsi"
Requires-Dist: wsidicom>=0.35; extra == "wsi"
Requires-Dist: pydicom>=3; extra == "wsi"
Provides-Extra: ai
Requires-Dist: mcp<3,>=2.2; extra == "ai"
Requires-Dist: pyyaml>=6; extra == "ai"
Provides-Extra: bridge
Requires-Dist: spatialbridge<0.2,>=0.1; extra == "bridge"
Provides-Extra: volume3d
Requires-Dist: torch>=2.5.1; extra == "volume3d"
Requires-Dist: sam2>=1.1; extra == "volume3d"
Provides-Extra: segment3d
Requires-Dist: cellpose>=4; extra == "segment3d"
Requires-Dist: torch>=2.5.1; extra == "segment3d"
Provides-Extra: video
Requires-Dist: imageio-ffmpeg>=0.5; extra == "video"
Dynamic: license-file

# Plexora

![](./plexora/client/src/img/logo_with_text.svg)

Plexora is a viewer for multiplexed imaging and spatial transcriptomics. It
opens large images where they are, without converting or copying them, draws
segmentation masks and cell tables over them, and runs on a laptop, in a
notebook, on a remote workstation or on an HPC cluster.

**Documentation: https://nirmallab.github.io/plexora/**

![The Plexora viewer showing a multiplexed tissue image](./website/public/screenshots/home/viewer.webp)

## Install

```bash
pip install plexora
plexora
```

`plexora` starts the viewer and opens it in your browser. Python 3.12 or 3.13
is required. A desktop app for macOS, Windows and Linux is on the
[releases page](https://github.com/nirmallab/plexora/releases). See
[Installation](https://nirmallab.github.io/plexora/docs/getting-started/installation/).

## Quick start

In the app, choose **File → Import Sample…** and pick an image, a folder of
files, or a Xenium or Visium run. From Python:

```python
import plexora

name = plexora.import_sample("slide.ome.tif", "slide_mask.tif", "cells.csv", wait=True)
plexora.view(name)   # in a notebook, shows the viewer inline
```

More in the [quick start](https://nirmallab.github.io/plexora/docs/getting-started/quick-start/).

## What it reads

- Multiplexed images: OME-TIFF, TIFF, QPTIFF, OME-Zarr (local, `https://` or `s3://`)
- Brightfield whole-slide images: SVS, NDPI, SCN, BIF, MRXS, DICOM
- 10x Genomics Xenium, Visium and Visium HD output folders
- SpatialData stores and AnnData tables; CSV, TSV and Parquet cell tables
- Segmentation masks (label images) and cell boundary polygons

The full list is in [Supported formats](https://nirmallab.github.io/plexora/docs/reference/supported-formats/).

## Where to go next

| I want to | Read |
| --- | --- |
| Use the viewer and its tools | [Viewer](https://nirmallab.github.io/plexora/docs/viewer/navigation/), [Tools](https://nirmallab.github.io/plexora/docs/plugins/) |
| Script it from Python or a notebook | [Python](https://nirmallab.github.io/plexora/docs/python/), [Notebooks](https://nirmallab.github.io/plexora/docs/notebooks/) |
| Look at data on a remote machine or cluster | [Remote and HPC](https://nirmallab.github.io/plexora/docs/remote/) |
| Write a plugin | [Plugin development](https://nirmallab.github.io/plexora/docs/plugin-development/) |
| Look up a function or command | [Python API](https://nirmallab.github.io/plexora/docs/python-api/), [Command line](https://nirmallab.github.io/plexora/docs/cli/) |

## Developing Plexora

```bash
git clone https://github.com/nirmallab/plexora.git
cd plexora
pip install -e ".[dev]"
python -m pytest -q -p no:randomly
```

See [Development setup](https://nirmallab.github.io/plexora/docs/contributing/development-setup/)
and, for the documentation site in `website/`, [CONTRIBUTING_DOCS.md](./CONTRIBUTING_DOCS.md).
Engineering notes live in [docs/internal/](./docs/internal/).

## Usage data

Plexora can send **anonymous usage counts** -- which features and plugins are
used, how long tiles take to draw, which kinds of errors occur -- so we know
what to improve. It never sends file, project, marker or gene names, cell
data, coordinates, usernames, machine names, paths, prompts or anything typed
into a tool; every field it may send is on an allowlist
(`plexora/telemetry/schema.py`). Everything is queued on this machine first,
nothing in Plexora waits for it, and it works air-gapped exactly as before.

It is on by default and a notice says so the first time. Any one of these turns
it off:

```bash
plexora telemetry off        # or: Settings > Usage data
export DO_NOT_TRACK=1        # honoured everywhere
export PLEXORA_TELEMETRY=off
```

`plexora telemetry preview` prints exactly what the next upload would contain,
and `plexora telemetry status` says which of the above is in force.
[docs/TELEMETRY.md](./docs/TELEMETRY.md) has the details.

## Free and Pro

**Free** is everything described above: every image, table and modality, every
tool's manual features, remote, HPC and notebook viewing, and export. It needs no
account, no activation and no network, it never asks, and anyone may use it for
any purpose, commercial work included.

**Pro** adds Plexora AI (guided gating and QC sessions an agent runs with you,
the evidence and analysis tools it uses, and the chat), Plexora 3D (analysing
z-stacks and time series beyond viewing them), spatial transcriptomics
(Xenium, Visium and Visium HD) and Video Studio (videos made from the viewer).
A 30-day trial is everything in Pro. External MCP access, for an outside coding
agent, is off by default and not part of Pro; an administrator can turn it on
for a licence. Pro is a yearly subscription per seat, at an academic or a
commercial price, and both are bought online from the
[pricing page](https://nirmallab.github.io/plexora/pricing/): one seat is an
individual account, two or more make a team. Licences, devices and AI credits
are managed on the BioCognia platform, which Plexora shares with SCIMAP Pro: you
sign in at [account.biocognia.com](https://account.biocognia.com), never in
Plexora. In Settings > License, **Connect this device** shows a short code and
opens the page to approve it; or, from a terminal:

```bash
plexora license status
plexora license activate                            # this computer: prints a code to approve in the browser
plexora license activate BIOC-XXXX-XXXX-XXXX-XXXX   # with your licence key from the portal, no browser needed
plexora license activate --cluster --name O2        # a whole HPC cluster, once, from a login node
plexora license install lab.bioc                    # an offline licence file
plexora license trial                               # 30 days of Pro
```

A licence check sends the licence certificate and a hash that identifies the
device. It never sends your data, file names, machine names or anything
about what you are looking at. When a licence ends, everything Free keeps
working, and every gate, ROI, figure and export you made, with or without AI,
stays yours and editable. AI model providers your agent uses bill you
separately. [docs/LICENSING.md](./docs/LICENSING.md) has the details.

## License

Plexora is licensed by BioCognia under the **Plexora End User Licence Agreement
1.0** (`LicenseRef-Plexora-EULA-1.0`, see [LICENSE](./LICENSE)). It is **not** an
open source license. In short:

| | |
|---|---|
| Plexora Free, for any purpose: research, teaching, personal or commercial | ✅ Free, no account or licence key |
| Plexora Pro for academic research and teaching | Per seat, per year, at the academic price |
| Plexora Pro for commercial use | Per seat, per year, at the commercial price |
| Redistributing Plexora unmodified, with the licence attached | ✅ Allowed |
| Patching your own copy to fix a bug or a compatibility problem | ✅ Allowed |
| Publishing a fork, a patched build, or a renamed version | ❌ Not allowed |

Prices, and Buy for either use class, are on the
[pricing page](https://nirmallab.github.io/plexora/pricing/); a subscription
renews at the price it was bought at.

**Plugins are a deliberate exception.** Anything you build against the documented
extension interfaces — the `plexora.plugins` entry point group and the `plexora.api`
package — is yours. You may distribute and sell your plugin under whatever license
you like, and you do not need our permission. Extending Plexora through the plugin
API is the supported way to change what it does; editing its source is not.

For licensing questions, contact support@biocognia.com.

Some bundled components carry their own licenses, which are unaffected by the above —
see section 13 of [LICENSE](./LICENSE).
