Skip to content

Supported Input Formats

github-actions[bot] edited this page Jul 21, 2026 · 2 revisions

Supported Input Formats

FLIMKit auto-detects the file type and routes everything through one loader (FLIMFile in flimkit.formats), so every workflow behaves the same regardless of instrument.

Loads as says what the file can drive: Fitting + phasor means it carries a time-resolved decay per pixel; Phasor only means the file already stores computed phasor coordinates, so there is no decay to fit; Intensity only means no lifetime data at all.

Format Extension Loads as Reader Validated against real files
PicoQuant PTU .ptu Fitting + phasor ptufile Yes (32 files)
Becker & Hickl SDT .sdt Fitting + phasor sdtfile Yes (bit-identical)
Photonscore LINCam .photons Fitting + phasor photonsfile Yes (bit-exact vs SDK)
PicoQuant BIN .bin Fitting + phasor ptufile Upstream
PicoQuant PHU .phu Fitting (no image) ptufile Upstream
SimFCS B&H .b&h Fitting + phasor lfdfiles Upstream (no time axis in file)
SimFCS BHZ .bhz Fitting + phasor lfdfiles Upstream (no time axis in file)
ImSpector FLIM TIFF .tif, .tiff (sniffed) Fitting + phasor tifffile Upstream
ISS Vista TDFLIM .iss-tdflim, .tdflim Fitting + phasor lfdfiles Upstream
FLIM LABS imaging .json (sniffed) Fitting + phasor phasorpy Upstream
ISS time-tag .tagtime, .tagchannel, .tagdecay Fitting + phasor FLIMKit (from ISS spec) No
ISS FD-FLIM .ifli Phasor only lfdfiles Upstream
SimFCS referenced .ref, .r64 Phasor only lfdfiles Upstream (no frequency in file)
PhasorPy OME-TIFF .ome.tif (sniffed) Phasor only tifffile Upstream
FLIM LABS phasor .json (sniffed) Phasor only phasorpy Upstream
ISS intensity image .ifi Intensity only FLIMKit (from ISS spec) No

"Upstream" means decoding is delegated to a maintained third-party reader that is tested against real files by its own author; FLIMKit has not independently re-validated it. "Sniffed" means the extension is ambiguous (an ordinary TIFF or JSON is not claimed), so the file is identified by its content rather than its name.

Formats whose files carry no time axis (.b&h, .bhz) or no modulation frequency (.ref, .r64) will prompt for the missing value, since fits and the universal circle cannot be computed without it.

Provenance

  • PicoQuant .ptu (T3) - PicoHarp, HydraHarp v1/v2, TimeHarp 260 N/P, MultiHarp / generic. The original FLIMKit decoder is kept as a cross-checked reference in flim-native-decoders (flimkit/formats/PTU/NOTICE.md).
  • Becker & Hickl .sdt - SPCM histogram / image files (per-pixel decays already binned). FLIMKit's own decoder, written from B&H's SPCM docs and checked bit-for-bit against sdtfile, is kept as a reference in flim-native-decoders (flimkit/formats/BH/NOTICE.md).
  • Photonscore .photons - LINCam D7 container (position-sensitive). photonsfile is a pure-Python reader spun out of FLIMKit, with no native dependency; dt calibration comes from the TacChannel attribute (flimkit/formats/PS/NOTICE.md).
  • ISS - the .TAGTIME/.TAGCHANNEL/.TAGDECAY triplet is read together from any one of the three paths or their shared basename. Format specifications were provided by ISS (flimkit/formats/ISS/NOTICE.md).

The ISS time-tag and .ifi readers are experimental and need testing. They were written from ISS's format specifications and have not been validated against real ISS acquisitions - byte order and the marker conventions are assumptions. Treat their results as unverified and cross-check them. If you have ISS data, trying it and reporting back is very welcome. The .ifli and .tdflim paths are delegated to lfdfiles and inherit that library's own testing.

Not decoded yet: T2-mode PTUs (ptufile reads the records, but FLIMKit does not build a decay cube from them), older PicoQuant .pt3 / .ht3, Becker & Hickl raw .spc photon streams, and Leica .lif.

Clone this wiki locally