Environment variables
Every environment variable Plexora reads, what it changes and its default.
Environment variables change Plexora for one process or shell session. Most have a command-line flag or a setting with the same effect; where they differ, the order is flag, then environment variable, then the settings file (plexora config), then the built-in default. The data directory has its own order, described in Where your data lives.
Data
PLEXORA_DATA_PATHThe data directory, overriding everything else. Projects, datasets and settings for this session live under it.
export PLEXORA_DATA_PATH=/scratch/me/plexoraPLEXORA_DATA_PATH_DEFAULTA data directory to use only if this account has not chosen one. A directory recorded with plexora config set data-dir wins over it. plexora connect sets it on the remote host from a saved connection.
PLEXORA_SHARED_PATHExtra data directories whose projects are listed alongside your own, separated by : (macOS, Linux) or ; (Windows). The same as plexora config set shared-dirs.
export PLEXORA_SHARED_PATH=/lab/shared/plexoraPLEXORA_LIBRARY_PATHdefault <Documents>/Plexora/projects, when it holds projectsFolders of projects that are your own besides your data directory, read and written in place, separated by : (macOS, Linux) or ; (Windows); empty for none. By default, the folder the Plexora website keeps its projects in on this computer (Documents/Plexora/projects), when it exists -- so a project made on the website opens in the desktop app with nothing to import. Unset, with the data directory at its default, new projects made on this computer go in that folder too, so they open on the website; set (even empty), new projects stay in the data directory.
export PLEXORA_LIBRARY_PATH=D:/Plexora/projectsPLEXORA_VOCABULARY_PATHdefault <config directory>/biocognia/markers/overlay.jsonWhere the markers Plexora learned are kept -- what a model or you said about markers the BioCognia marker graph does not let it gate, so they are not asked about again -- as the graph's overlay (overlay.json in this folder), which SCIMAP Pro reads too. Point several installs at one shared folder and they learn together. BIOCOGNIA_MARKER_GRAPH, the variable both products read, wins over it. A learned_markers.yaml from before the graph, here or under the data directory, moves into the overlay the first time Plexora reads it and is kept as learned_markers.yaml.migrated. plexora ai vocabulary lists and forgets them.
export PLEXORA_VOCABULARY_PATH=/lab/shared/plexora/vocabularyPLEXORA_EXPERIENCE_PATHdefault <data directory>/.agent/gating/experienceA folder for automatic gating's experience record -- one line per marker each finished gating session decided, and what was done to it afterwards (a gate moved, a classifier layer adopted or discarded). Names, counts, gates and versions only. Read by plexora ai bench experience; nothing reads it into a gate. Point several installs at one shared folder to read their runs together.
export PLEXORA_EXPERIENCE_PATH=/lab/shared/plexora/experiencePLEXORA_MASK_OUTPUTdefault besideWhere a converted segmentation mask is written. beside (the default) writes it next to the original mask so other projects and data nodes reuse it; project writes it under the project's own directory.
PLEXORA_REMOTE_CACHE_BYTESdefault 10737418240 (10 GB)How much disk, in bytes, the cache of images read from web addresses may use. At least 1 GB. The same as plexora config set remote-cache-gb.
Server
PLEXORA_HOSTdefault 127.0.0.1The address plexora binds to. Use 0.0.0.0 to accept connections from other machines (for example inside Docker).
PLEXORA_BASE_URLA URL prefix to serve under, when Plexora sits behind a proxy that forwards a sub-path (JupyterHub, Open OnDemand). Usually detected; set it only when detection fails.
export PLEXORA_BASE_URL=/user/me/proxy/8000PLEXORA_PLUGINSComma-separated plugin names to activate. Unset activates every installed plugin; an empty string starts the core viewer only. The same as plexora --plugins.
export PLEXORA_PLUGINS=roi,cell_explorerPLEXORA_AUTH_TOKENWhen set, the viewer only opens from a URL carrying ?token=<value> (or the cookie that URL sets, or an X-Plexora-Token header). plexora, plexora --ood, the desktop app and a Jupyter proxy mount set it for you; one already in the environment wins.
PLEXORA_TRUSTED_HOSTSComma-separated host names a loopback-bound viewer answers to besides localhost and IP addresses -- the same as plexora --allowed-host. Any other Host is refused, which is what stops a rebound DNS name reaching the viewer.
export PLEXORA_TRUSTED_HOSTS=lab-boxPLEXORA_ALLOWED_ORIGINSComma-separated origins whose changes the viewer accepts although the browser calls them another site, for a reverse proxy that rewrites the Host on the way in.
export PLEXORA_ALLOWED_ORIGINS=https://portal.example.orgPLEXORA_ALLOW_FRAMINGSet to 1 to let another site show the viewer in a frame. On already in notebook mode, Colab and behind a hub's proxy.
export PLEXORA_ALLOW_FRAMING=1PLEXORA_ALLOW_LINK_LOCAL_URLSSet to 1 to let a web address reach this machine's link-local network (169.254.x.x, fe80::), which is refused by default because a cloud VM's metadata server answers there.
export PLEXORA_ALLOW_LINK_LOCAL_URLS=1PLEXORA_LOG_LEVELdefault WARNINGWhat the server logs to stderr (DEBUG, INFO, WARNING, ERROR). INFO says what it loads and builds, once each; plexora -v is DEBUG. Every mode; the desktop server applies it to every library's messages too.
PLEXORA_DOCKERSet to 1 by the Docker image. Tells the import page to show paths as the container sees them.
Data nodes
PLEXORA_NODE_HOSTdefault 127.0.0.1Default for plexora node serve --host.
PLEXORA_NODE_TOKENDefault for plexora node serve --token, the shared secret a viewer authenticates with.
PLEXORA_GOOGLE_APISends every Google Cloud JSON API call the website's backend makes (plexora/gcloud_rest.py) to one stand-in instead of Google -- <base>/compute/v1, <base>/storage/v1, <base>/v1/projects, <base>/v1/userinfo. For tests against tests/browser/mock_google.py; never set it for real use.
export PLEXORA_GOOGLE_API=http://127.0.0.1:8765PLEXORA_NODE_ORIGINSBrowser origins a data node allows, separated by commas or spaces, in addition to every plexora node serve --allow-origin. For a launcher that starts nodes for a page served from elsewhere (the hosted viewer, say) without rebuilding each command line. Written as the browser sends them -- http://127.0.0.1:8000 and http://localhost:8000 are different origins.
export PLEXORA_NODE_ORIGINS=https://viewer.plexoraapp.comPerformance
PLEXORA_FEATURE_CACHE_MBdefault 512Memory, in megabytes, for caching feature columns read on demand from wide tables.
PLEXORA_WIDE_FEATURE_LIMITdefault 1024Tables with more feature columns than this are read column by column on demand instead of loaded whole (whole-transcriptome matrices).
PLEXORA_MASK_FULL_READ_MAX_BYTESdefault 8589934592 (8 GB)Largest mask, in bytes, read into memory in one go when converting it. Larger masks are streamed tile by tile, which uses less memory but is slower on network drives.
PLEXORA_TILE_CACHE_MBdefault a sixteenth of the allocated memory, 128 to 2048Memory, in MB, the viewer's server keeps for image tiles it has already encoded, so a pan back over visited ground or a plane stepped back to is answered without a read -- and, for a z-stack stored plane by plane, the tiles of the next planes made ahead of the one on screen. Budgeted in bytes because a 16-bit tile is about 2 MB and an 8-bit one about 100 KB. A data node has its own (PLEXORA_NODE_TILE_CACHE_MB).
PLEXORA_NO_NUMBASet to 1 to skip numba. The kernels then come from plexora-kernels when it is installed, else run as plain Python (slower); useful when numba fails to load.
PLEXORA_KERNELSdefault 1 (used when installed)Set to 0 to skip plexora-kernels, the package of kernels compiled ahead of time, even when it is installed; the kernels then run through numba, or as plain Python with PLEXORA_NO_NUMBA=1. For comparing the two, or ruling the package out.
Magic select
PLEXORA_SEGMENT_MODEL_DIRdefault <data directory>/.models/segmentDirectory magic select's model files are read from and downloaded to. For an offline machine, copy the two files here (or run plexora ai segment install once where there is a network) and nothing is fetched. The same as plexora config set segment-model-dir.
PLEXORA_SEGMENTSet to 0 to switch magic select off everywhere -- the ROI and QC panels, and the QC agent's snug outlines. Nothing is downloaded and every outline is traced the classical way.
PLEXORA_SEGMENT_DEVICEdefault autoauto uses a GPU when this machine's ONNX Runtime offers one (CUDA, ROCm, DirectML or Apple's CoreML) and falls back to the CPU; cpu never uses one; gpu refuses to run without one.
PLEXORA_SEGMENT_MODEL_URLFetch magic select's model files from this address instead of Plexora's release (a mirror inside a firewalled site). The files are checked against the same checksums either way.
Z-stacks
PLEXORA_VOLUME_BRICKSSet to 0 to never copy a stack into 3-D bricks. A large stack stored plane by plane is otherwise copied in the background, its zoomed-out levels only, so projections, sections and the 3-D view read across planes quickly.
PLEXORA_VOLUME_LEVEL_BUDGETdefault 268435456 (256 MB)Bytes of one channel's whole stack at the finest level the background copy takes; it copies that level and every coarser one.
PLEXORA_ROI_BRICK_BUDGETdefault 4294967296 (4 GB)Disk, in bytes, kept for areas prepared at finer levels ("Prepare this area", and the section panes once the view settles); the areas used least recently go first.
PLEXORA_IMS_CHUNK_CACHE_MBdefault 96Memory, in MB, for decoded chunks of each Imaris channel read through HDF5's own chunk cache (up to six at once) -- used only for an Imaris file whose chunks Plexora does not decompress itself (anything but deflate, with or without shuffle).
PLEXORA_CHUNK_CACHE_MBdefault an eighth of the allocated memory, 256 to 8192Memory, in MB, for decoded chunks of z-stacks, shared by every stack and channel being read -- an Imaris file's chunks, an OME-Zarr store's, and the bricks of a stack's 3-D copy. A plane next to one already read, a section beside the last, the block of planes read ahead of the one on screen, and the 3-D view's level reuse chunks instead of decompressing them again. Sized from the memory this process was given (a cluster job's allocation, not the node's).
PLEXORA_DECODE_THREADSdefault twice the allocated cores, 4 to 32Threads that read and decompress z-stack chunks, outside the file locks the readers hold. A quarter as many again read in the background (window scans, the planes read ahead), so they never queue in front of a tile.
PLEXORA_IMS_INDEXdefault 1 (on)Set to 0 to stop Plexora working out, once per file and in the background, where every chunk of a large Imaris file (1 GB or more) on a disk is. With that index kept under the data directory, a cold tile reads 2.5-4x faster from a cluster filesystem; without it the file still reads, as it would on first open.
PLEXORA_NODE_TILE_CACHE_MBdefault a sixteenth of the allocated memory, 128 to 2048Memory, in MB, a data node keeps for tiles it has already encoded, so a plane or view stepped back to is answered without a read. Budgeted in bytes because a 16-bit tile is about 2 MB and an 8-bit one about 100 KB.
PLEXORA_SECTION_READ_BUDGET_MBdefault 256What one tile of an XZ or YZ section may decompress, in MB. A section through a stack stored plane by plane reads every plane it crosses; past the budget the tile is computed at a coarser level and drawn up (and not cached), until the area is prepared in 3-D.
PLEXORA_LEVEL_CACHE_MBdefault 512Memory, in MB, for the 3-D view's levels already built (quantized voxels of one channel each), so a second viewer or a reload is not read again.
PLEXORA_LEVEL_GATEdefault 3How many 3-D view levels are built at once; further requests wait their turn.
PLEXORA_SURFACE_BUDGET_TRIANGLESdefault 5000000The most triangles one surface may have (Surface Studio). A request past it is refused with the estimate and what to change -- a lower quality, a smaller region or fewer cells -- rather than built and then not drawable in a browser.
PLEXORA_SURFACE_THREADSdefault 8How many threads build one set of cell surfaces (a 3-D mask's, in one pass over it); at most the cores this process may use. A data node reads its own.
PLEXORA_SURFACE_PREVIEW_VOXELSdefault 2000000Voxels the Surface Studio threshold preview reads (a coarse level of the area asked for, kept in memory while the slider moves).
PLEXORA_PROJECTION_GATEdefault half the cores, at least 2How many projection tiles (MIP, mean and the like) are computed at once.
PLEXORA_PLANE_CACHEdefault 512How many planes of a z-stack are kept ready to read (their pyramids), for scrubbing back and forth through a deep stack.
PLEXORA_WINDOW_SCANSet to inline to compute a z-stack's brightness window before its first tile, as before; by default the first tiles use a provisional window and the exact one is computed in the background.
AI agents
PLEXORA_AI_MODELSPath of the task-to-model file an agent driving Plexora over MCP follows (which model answers each gating and QC task). Defaults to ai-models.yaml beside the settings file; plexora ai models init writes a starting one. Absent, the agent chooses every model.
PLEXORA_MODEL_JUDGEMENTThe model your agent client runs judgement work on (reading pictures, placing a gate). Overrides plexora ai tiers judgement=<model>; unset, the client picks its most capable model.
PLEXORA_MODEL_ROUTINEThe model your agent client runs routine work on (tool relay, listing, write-ups). Overrides plexora ai tiers routine=<model>; unset, the client picks its cheapest model that calls tools reliably.