FLIMKit

Plugins / FLIMKit / Requirements and Installation · edit on GitHub

Requirements & Installation

System Requirements

Dependencies

Package Purpose
numpy Array computation
scipy Optimisers (Levenberg-Marquardt, Differential Evolution), signal processing
matplotlib Plotting (decay curves, lifetime maps, phasor plots)
xarray Labelled N-D arrays for FLIM signals
phasorpy (0.12) Phasor computation, calibration, cursor masking, spatial filtering, lifetime conversion
PyWavelets Wavelet-based phasor denoising
ptufile PicoQuant .ptu, .bin, .phu decoding
sdtfile Becker & Hickl .sdt decoding
lfdfiles SimFCS .b&h, .bhz, .ref, .r64 and ISS .ifli, .iss-tdflim decoding
photonsfile Photonscore LINCam .photons (D7) decoding
inquirer Interactive terminal prompts
numba Compiles the free-τ per-pixel fit, and speeds up the .photons decode inside photonsfile, with a numpy fallback
numba-cuda Runs the free-τ per-pixel fit on an NVIDIA GPU. Installed by install.py on NVIDIA hardware, and by pip install "flimkit[cuda]"
shapely Repairs self-intersecting ROI rings on GeoJSON export
lz4 LZ4-compressed Becker & Hickl .sdt blocks
ipywidgets Jupyter notebook interactive support, optional
cellpose (≥ 3.0) Deep-learning cell segmentation (Cellpose-SAM) for cell masking, optional
opencv-python-headless Image I/O, resizing, and general image processing
openpyxl Excel XLSX parsing for FLIM microscope software IRF extraction
pandas Excel/XLSX IRF file parsing
tifffile TIFF image I/O
zarr OME-Zarr export of the result maps
tqdm Progress bars

Installation

No Python, no terminal

Download the build for your machine from the Releases tab, unzip it, and run it. Python is inside it, so there is nothing else to install. FLIMKit-windows.zip, FLIMKit-macos.zip and FLIMKit-linux.zip are attached to every release, built by GitHub Actions on each tag. Each release also carries this documentation as a PDF, FLIMKit-docs-<version>.pdf, so the docs for the version you are running stay available after the wiki moves on.

Code merged into dev after a release is built too, as FLIMKitDEV (Development builds).

On macOS the app is self-signed, so the first launch needs right-click then Open. A double-click will be refused.

This route gets the desktop application only. It carries no GPU backend unless the build machine had one, which is covered under GPU acceleration in the compiled app.

Setting up a Python environment

Install FLIMKit into its own environment, not the system Python, so its packages don't collide with anything else. conda and uv both work. Pick one and use it for everything FLIMKit, plugins included: a package installed into a different environment is never seen.

With conda (Miniforge, Miniconda or Anaconda):

conda create -n flimkit -c conda-forge python=3.14
conda activate flimkit
pip install "flimkit[gui]"

With uv:

uv venv --seed --python 3.14 flimkit-env
source flimkit-env/bin/activate      # Windows: flimkit-env\Scripts\activate
uv pip install "flimkit[gui]"

--seed puts pip into the environment. uv leaves it out by default, and install.py calls pip, so without it python install.py fails. Once the environment is active, every pip install below also works as uv pip install.

FLIMKit and all of its dependencies come from PyPI as wheels, so neither tool gets you a different or better install. The differences are around it:

From PyPI

For analysis in scripts, notebooks and the terminal:

pip install flimkit                 # readers, fitting, phasors, stitching, the CLI
pip install "flimkit[gui]"          # adds the desktop window

This is the right route for a server, a container, or anywhere you only want the library. It installs no Tkinter packages, so it works on a machine with no display and no python3-tk.

Extras combine, so ask for whichever apply:

Command Packages What you get
pip install flimkit 52 Readers, fitting, phasors, stitching and the terminal CLI. No desktop, no GPU.
pip install "flimkit[gui]" 54 The desktop window as well.
pip install "flimkit[torch]" 62 Headless with GPU fitting.
pip install "flimkit[gui,torch]" 64 Desktop and GPU.
pip install "flimkit[segmentation]" 70 Cellpose cell masking. Cellpose depends on PyTorch, so this brings GPU fitting with it. flimkit[cellpose] is the same thing under the package's own name.
pip install "flimkit[notebook]" 71 The Jupyter phasor cursor tool.
pip install "flimkit[all]" 91 gui, notebook and segmentation together, and GPU by way of Cellpose.
pip install "flimkit[test]" 56 pytest, for running the suite against an installed copy.

Counts are from a resolve on macOS and will differ a little by platform, mostly in how much PyTorch brings with it.

A pip install fits on the CPU. GPU acceleration needs a backend, and what pip can give you depends on the platform:

Platform Command What you get
Apple Silicon pip install "flimkit[mlx]" MLX on Metal, the fastest path on a Mac
Apple Silicon or Intel Mac pip install "flimkit[torch]" PyTorch MPS
Linux, NVIDIA pip install "flimkit[torch]" CUDA. PyPI's Linux wheel pulls the CUDA runtime itself
Any, NVIDIA pip install "flimkit[cuda]" numba-cuda, which runs the free-τ per-pixel fit on the GPU. Add it to [torch], it does not replace it
Windows, NVIDIA see below pip alone gives CPU only
AMD, ROCm see below not on PyPI at all

Windows and ROCm need a wheel from PyTorch's own index rather than PyPI, which package metadata cannot ask for. That is what install.py is for:

git clone https://github.com/FLIMKit/FLIMKit.git
cd FLIMKit
python install.py

install.py installs the requirements, then detects the hardware and installs the matching GPU backend (MLX on Apple Silicon, CUDA on NVIDIA, ROCm on AMD, CPU-only otherwise). No flags needed for a standard install. Clone it too if you want the terminal CLIs at the repository root, fit_cli.py, phasor_cli.py and synth_cli.py, which are not part of the package.

python install.py --dev      # also installs PyInstaller and test requirements
python install.py --dry-run  # preview commands without executing

Updating a clone

python update.py             # pull the latest code, then rerun install.py
python update.py --dry-run   # show what would happen without changing anything
python update.py --dev       # pass --dev on to install.py
python update.py --force     # rerun install.py even with nothing to pull

If dist/ holds an app you built with build_and_sign.py, update.py rebuilds it after pulling. --app-path then copies the new build over the copy you open, and --no-rebuild skips it. Rebuilding needs PyInstaller, from python install.py --dev, and stops if that app is running.

python update.py --app-path /Applications/FLIMKit.app
python update.py --rebuild   # rebuild even when there was nothing to pull

--release and --dev-release leave the clone alone and replace the app at --app-path with the latest build from GitHub, the same download as the button in the app (Updating the app).

Run it with the Python from your FLIMKit environment, so the requirements go into the right place. It only fast-forwards: with uncommitted changes to tracked files, or with local commits that the remote doesn't have, it stops and changes nothing. If a separate installed copy of flimkit sits in that environment, which would be imported in place of the clone, it is reinstalled from the clone. It needs git on the PATH, and works the same on macOS, Linux and Windows.

Validate Installation

python validate_installation.py

Runs 10 checks: dependencies, module imports, XLIF parsing, stitching, fitting, phasor pipeline, per-tile fit pipeline, and GPU backend dispatch. All should pass.

Hardware Limits

python hardware_limits.py

Stress-tests the machine by ramping canvas sizes (64×64 → 4096×4096) and measuring fixed-tau GPU and free-tau CPU throughput. Reports peak pixels/second, RAM headroom, and estimated wall-clock times for common acquisition sizes. Useful for understanding what canvas sizes are feasible before starting a long batch run.