Chloros 1.2.0 Released 30 August 2026

Chloros runs
the cameras now.

Until 1.2.0, Chloros only met your imagery once the capture was over. Now it connects and hardware-syncs the LATTICE array, reads the DAQ light sensors, and solves calibrated reflectance frame by frame — on screen, before anything reaches the disk.

Drive all of it from the desktop app, the command line, Python — or hand the whole surface to your AI assistant.

The desktop application is free and complete. Chloros+ adds the command line, the Python SDK, GPU acceleration and Linux.

LIVE
SPECTRAL REFLECTANCE
3405507251010 nm
NDVI
0.8270.217
NDRE
0.2450.116
GNDVI
0.5890.437
<100 µs camera-to-camera, hardware trigger
340–1010 nm light measured every frame
Every frame calibrated reflectance, solved live
What Chloros drives

Everything Chloros does between the sensor and the answer

Chloros connects the cameras, reads the light, solves reflectance and evaluates the index — then hands the result to your own tooling in formats you already use.

LATTICE cameras

Radiometric multi-spectral array modules, available in your choice of 2 sensors, 2 lenses and 27 filters. Hardware-triggered as one array over a shared sync line.

DAQ light sensors

DAQ‑U, DAQ‑M or DAQ‑E measuring the illumination that made the frame — 135 points, 340–1010 nm, in absolute W/m²·nm.

Chloros

Connects and configures the hardware, applies each unit’s factory calibration, aligns and stacks the bands, solves reflectance against the measured light, and evaluates the index.

Desktop GUI Command line Python SDK Your AI assistant

Live, on screen

Streaming reflectance and index overlay, a live index table, and index video or GIF recording.

Into your stack

16-bit and 32-bit float TIFF for GIS, .daq sidecars for reprocessing, and a GigE Vision stream your own tools can read.

Where Chloros runs

The same pipeline, whatever the camera is mounted on

Chloros started out processing survey flights. LATTICE put the same cameras on benches, gantries, belts and robots — so the software stopped assuming there was a flight at all.

Greenhouses & growth chambers

A DAQ measures your LEDs, so reflectance stays anchored indoors. Interval capture runs for weeks.

Sorting & conveyor lines

The global shutter freezes motion. Fastest Capture and the burst recorder keep up with the belt.

Aerial survey

Hardware-synced arrays, with alignment and ground-sample-distance binning stamped into every export.

Ground robotics

Continuous capture and the live overlay while the platform works between rows, driven from a Jetson on board.

Research & R&D

float32 radiance, a savable index sandbox, custom formulas, and per-unit calibration in every file.

01 — Capture

Chloros connects the array and runs it as one camera

Connect two or more LATTICE modules and Chloros elects a master, fires a hardware trigger pulse down the shared sync line, and returns a frame group in which every camera carries the same timestamp and frame ID. PTP keeps the clocks comparable to about a millisecond. The exposure itself is simultaneous in hardware, not stitched together afterwards.

Sized before it is plugged in

Pick Full 2048×1536, Half or Quarter ROI, and 1×, 2× or 4× hardware binning. Chloros prefers binning over cropping so you keep the full field of view while cutting what goes down the wire.

It refuses rather than drops

Before connecting, Chloros projects the sync tier, the frame-rate range, NIC throughput and burst headroom. If the array would over-subscribe the wire, it says so and blocks — instead of quietly shedding packets.

Alignment that survives export

Cross-camera vignette correction and co-registration warps are stamped onto every aligned image and carried into radiance and reflectance exports. Alignment is refused outright on arrays that are not hardware-cable-synced.

Four ways to pull the trigger

chosen per project, in the Capture Settings panel
SINGLE

One synchronized capture across every selected camera.

CONTINUOUS

Back-to-back until a count or an elapsed duration stops it.

INTERVAL

Timelapse bursts on a timer, from seconds to days.

FASTEST

Raw only, processing bypassed — and it still writes the .daq so you can calibrate it later.

Index video and GIF recording. Records the live combined-index composite at 10 fps, LUT baked in — the fastest way to show someone what the field is doing.

Raw Bayer burst. Full sensor rate to disk with per-frame manifests and matched .daq readings, then rebuilt offline into calibrated video and TIFFs.

02 — Light

Chloros reads the light and calibrates every frame

A camera measures radiance leaving a surface. Reflectance needs the illumination that arrived. A DAQ supplies it — 135 spectral points from 340 to 1010 nm at 5 nm steps, plus CIE XYZ tristimulus, in every frame, in absolute W/m²·nm.

DAQ‑U

USB

USB serial, found by port scan. Plug it into the machine that is already running the capture.

DAQ‑M

BLUETOOTH

Bluetooth Low Energy, battery powered, with onboard storage. Mount it away from the computer and stream.

DAQ‑E

ETHERNET / PoE

IP67, PoE, discovered over mDNS as daq-e-<id>.local. Streams at up to 10 Hz and carries its calibration onboard, so it works with no internet at all.

Calibration handles itself

Each unit’s factory bundle is fetched from MAPIR Cloud by sensor ID and cached locally. DAQ‑E also stores it onboard.

Recorded without a calibration on hand? The data is kept raw and calibrated later at processing time — not refused, not lost.

Which diffuser cap was fitted is recorded with the measurement, and the matching correction profile is applied from that provenance.

Downwelling is matched to images using the sensor’s own clock and recorded timezone. There is no offset field to get wrong.

Where the numbers stop

The sensor reports 340–1010 nm, but the NIST-traceable calibration spans roughly 374–974 nm. Chloros draws that line explicitly.


374 974 NIST-TRACEABLE

A camera band without enough spectral weight inside that range — an F988, say — will not be given an absolute reflectance number off the DAQ. Chloros asks for an in-scene panel instead, and holds your most recent panel capture between sightings. Readings outside the calibrated range are refused, never extrapolated.

03 — Live

Chloros solves reflectance live, on your screen

Bind a DAQ to each camera and Chloros solves reflectance frame by frame, then evaluates your index on top of it — live, on screen, before anything is written to disk.

ρ = π · L / E
L — radiance from the LATTICE camera E — irradiance from the DAQ, timestamp-matched

Refused, not faked

No DAQ bound to a camera means no reflectance — Chloros disables the option rather than inventing a number. Rows that runtime state has made unavailable are visibly unavailable.

Every frame keeps its receipt

Each reflectance frame stores the DAQ reading it was matched against in a .daq sidecar, so the whole session can be reprocessed later without guessing at the light.

Noise does not get coloured in

Where both bands sit near the sensor’s noise floor a normalised index is just amplified speckle, so Chloros leaves those pixels uncoloured on the live view instead of painting false colour. Display only — captures and exports are untouched. Smoothing steadies the rest, and you are warned if an index collapses to a constant.

Two sensors, no camera at all

Point one DAQ at the sky and one at the object and Chloros streams live spectral reflectance straight from the pair — R(λ) = object(λ) / ambient(λ) — with a live vegetation-index table computed from the curve. Ratio indices such as NDVI, GNDVI and ENDVI are always there; absolute-scale indices like EVI, SAVI and LAI appear once both sensors are power-calibrated.

It is a field spectrometer and an index meter, using hardware you already own for the cameras.

DUAL-SENSOR INDEX TABLE
NDVI 0.827
GNDVI 0.589
ENDVI 0.707
SAVI 0.651
EVI 0.826

Computed from the reflectance curve shown above. Absolute-scale rows require both sensors power-calibrated.

04 — Automation

Describe the job. Your assistant drives Chloros.

The entire Chloros manual is published in a form language models read directly — a machine-readable index, and every page available as raw Markdown. Point Claude, ChatGPT or Copilot at it and ask for the script you need. The whole system, cameras included, is on the other side of that API.

YOU, TO YOUR ASSISTANT

Read mapir.gitbook.io/chloros/llms.txt, then write me a script that connects my three LATTICE cameras as a synced array, captures every 10 seconds for an hour, and exports NDVI with reflectance from the DAQ‑E on the roof.

WHAT IT WRITES
import chloros_sdk

serials = ["214701288", "213800234",
           "214000533"]

with chloros_sdk.connect_array(serials) as arr:
    result = arr.capture(
        "output/",
        processing="all",
        aligned=True,
    )
    print(len(result), "frames", result.skipped)

Why the generated script actually runs

The backend starts itself. There is no server to launch first, so the assistant cannot forget to.

Whole pipelines are single calls. Fewer moving parts to get wrong than a hand-assembled chain of steps.

Failures are loud. The CLI exits non-zero on problems and a run that produced nothing diagnoses itself, so the assistant gets something real to correct against.

Read before you run. Capture commands drive real hardware. Review anything an assistant writes for you before pointing it at an array in the field.

05 — Export

Chloros writes every level, in your formats

Chloros is where the measurement is made, not where it has to live. Every level of the pipeline is exportable, the raw camera stream stays open to your own tools, and nothing is locked behind a proprietary container.

Export level What it is Where it goes
Raw Sensor data untouched Archive, re-processing, your own pipeline
Debayered Linear demosaic, no display curve Custom radiometry work
Radiance float32, W/m²/sr/nm Physics-grade analysis, cross-instrument work
Reflectance uint16 percent reflectance Season-to-season and site-to-site comparison
Index Vegetation-index renders, LUT optional Maps, reports, the client-facing deliverable
Preview Display chain with colour and stretch Quick looks, web, sharing from the field

Written as 16-bit TIFF, 32-bit float TIFF, 8-bit PNG or 8-bit JPG. Pick which levels a project writes per camera and per export type, in bulk, before you capture.

Straight into GIS

16-bit TIFF for photogrammetry and GIS, 32-bit float for scientific work. Ground-sample-distance binning is carried into exports, and alignment transforms travel with every aligned frame.

The camera stream stays open

LATTICE speaks GigE Vision v2.0 over a single PoE cable, so the raw stream is readable by HALCON, LabVIEW, MATLAB or anything else you have already built — no proprietary driver in the way.

Into your own code

The Python SDK drops into Django, Flask, Jupyter or pandas with progress callbacks and context managers, so a Chloros run becomes a step in a pipeline you already own.

06 — Scale

Chloros scales from one capture to an overnight queue

The desktop application is free and complete. When the volume grows, the same processing runs headless, on Linux, on a GPU, or on a Jetson strapped to the aircraft.

Desktop

The full graphical application on Windows 10/11, free, with up to four LATTICE modules.

Command line

CHLOROS+

One-line processing, headless servers, and array capture at parity with the interface.

Python SDK

CHLOROS+

Drive hardware and processing from code, with the backend starting on first call.

Linux & Jetson

CHLOROS+

Ubuntu, Debian and NVIDIA JetPack 6.x for edge, robotics and server deployment.


07 — Chloros+

Free is the whole application. Chloros+ is what makes it a production tool.

Nothing is time-limited and nothing is a demo. The paid tiers add the automation surfaces, the horsepower and the platforms — the things you need once one capture becomes ten thousand.

Iron

FREE

The complete desktop application on Windows. This is not a trial.

The full graphical application, Windows 10 and 11
Survey3 and LATTICE processing, up to four LATTICE modules
DAQ light sensors, live reflectance and the index overlay
All 27 index presets, every export level, all 38 languages
Download free

Chloros+

COPPER · BRONZE · SILVER · GOLD

Everything in Iron, plus the surfaces and the throughput.

Command-line automation
Python SDK, and the AI workflow it unlocks
CUDA acceleration on 4 GB+ NVIDIA GPUs
Up to 16 images processed in parallel
Higher LATTICE camera counts
Custom index formulas
Linux amd64 and NVIDIA Jetson arm64
Up to 10 devices, plan dependent

Licences keep working offline for your plan’s grace period — 30 days on monthly plans, to expiry on yearly.

Compare Chloros+ plans

27 index presets, or write your own

The Index Calculator takes band chips, arithmetic and functions like sqrt() and log(), validates the expression as you type, and previews it against a live histogram before you commit to a batch.

NDVI NDRE GNDVI ENDVI EVI SAVI MSAVI2 OSAVI GCI LAI VARI WDRVI + 15 more

Custom formulas require a Chloros+ plan, and use the same syntax in the GUI, the CLI and the SDK.

38

languages, across every surface

The desktop application, the command line and the SDK all speak the same 38 languages, switchable at any time — including the messages that report files which failed to load.

See the full list
Specifications

What it runs, and what it runs on

LATTICE cameras

M3C, Bayer colour — 4 filter sets: FRGB, FRGN, FOCN, FNGB

M3M, monochrome — 23 narrowband filters, F385 to F988, spanning 379–985 nm

Sensor — Sony IMX265 global shutter, 2048×1536

Interface — GigE Vision v2.0 over PoE

Survey3 cameras

Models — Survey3W wide, Survey3N narrow

Filters — RGB, RGN, OCN, NGB, RE, NIR

Image types — RAW+JPG or JPG only

PPK — corrections from DAQ-A-SD log data

DAQ light sensors

Models — DAQ-U (USB), DAQ-M (Bluetooth LE), DAQ-E (Ethernet, PoE)

Spectrum — 135 points, 340–1010 nm at 5 nm, plus CIE XYZ

Units — spectral irradiance in W/m²/nm

Calibrated range — approximately 374–974 nm, NIST-traceable

Windows

OS — Windows 10 or 11, 64-bit

RAM — 8 GB minimum, 16 GB or more recommended

GPU — NVIDIA with 4 GB+ VRAM for CUDA (Chloros+)

Surfaces — GUI, CLI and Python SDK

Linux amd64

CHLOROS+

OS — Ubuntu 20.04+ or Debian 11+, x86_64

Install — single .deb package

GPU — NVIDIA with 4 GB+ VRAM for CUDA

Surfaces — CLI and Python SDK, no GUI

NVIDIA Jetson

CHLOROS+

Platform — JetPack 6.x, arm64

Models — Nano, Orin Nano, Orin NX, AGX Orin

Memory — 8 GB shared minimum, 16 GB+ recommended

Compute — adapts to the hardware, with thermal throttling for sustained runs


Start free. The whole desktop application, today.

Bring your Survey3 images, connect a LATTICE array, or plug in a DAQ and watch the spectrum move. Nothing is time-limited and nothing is a demo.

Questions about a build or a deployment? info@mapir.camera  ·  mapir.camera/community/contact