> For the complete documentation index, see [llms.txt](https://mapir.gitbook.io/chloros/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mapir.gitbook.io/chloros/project-settings/project-settings.md).

# Project Settings

The Project Settings <img src="https://1328410239-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOlCbgXiWzMtaOKj49kpf%2Fuploads%2Fgit-blob-7cb8106ef6f5240be86c1e39c926f53d8295322d%2Ficon_project-settings.JPG?alt=media" alt="" data-size="line"> sidebar in Chloros allows you to configure all aspects of image processing, calibration target detection, multispectral index calculations, and export options for your project. These settings are saved with your project and can be saved as templates for reuse across multiple projects.

## Accessing Project Settings

To access Project Settings:

1. Open a project in Chloros
2. Click the **Project Settings** <img src="https://1328410239-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOlCbgXiWzMtaOKj49kpf%2Fuploads%2Fgit-blob-7cb8106ef6f5240be86c1e39c926f53d8295322d%2Ficon_project-settings.JPG?alt=media" alt="" data-size="line"> tab in the left sidebar
3. The settings panel will display all available configuration options organized by category

{% hint style="info" %}
**Settings that depend on other settings are greyed out.** When a parent switch makes a setting impossible (for example, unchecking *Reflectance calibration / white balance* makes *Export reflectance* impossible), the dependent control is disabled and its tooltip names the switch that has to change.
{% endhint %}

***

## Display

### Image Thumbnail Resolution

* **Type**: Dropdown selection
* **Options**: `Default (512 px)`, `1024 px`, `2048 px`, `Full resolution`
* **Default**: Default (512 px)
* **Description**: Resolution (longest edge, in pixels) at which the image-grid thumbnails are rendered. Higher values look sharper when zoomed in but load slower and use more memory. Full resolution serves the original image size.
* **Note**: Display-only — this never affects processing or exported files.

***

## Target Detection

These settings control how Chloros detects and processes calibration targets in your images. Both are only active while **Reflectance calibration / white balance** is enabled (they are greyed out otherwise, because target detection is skipped entirely).

### Minimum calibration sample area (px)

* **Type**: Number
* **Range**: 0 to 10,000 pixels
* **Default**: 25 pixels
* **Description**: Sets the minimum area (in pixels) required for a detected region to be considered a valid calibration target sample. Smaller values will detect smaller targets but may increase false positives. Larger values require bigger, clearer target regions for detection.
* **When to adjust**:
  * Increase if you're getting false detections on small image artifacts
  * Decrease if your calibration targets appear small in your images and are not being detected

### Minimum Target Clustering (0-100)

* **Type**: Number
* **Range**: 0 to 100
* **Default**: 60
* **Description**: Controls the clustering threshold for grouping similar colored regions when detecting calibration targets. Higher values require more similar colors to be grouped together, resulting in more conservative target detection. Lower values allow more color variation within a target group.
* **When to adjust**:
  * Increase if calibration targets are being split into multiple detections
  * Decrease if calibration targets with color variation are not being fully detected

***

## Processing

These settings control how Chloros processes and calibrates your images.

### Vignette correction

* **Type**: Checkbox
* **Default**: Enabled (checked)
* **Description**: Applies vignette correction to compensate for lens darkening at the edges of images. Vignetting is a common optical phenomenon where the corners and edges of an image appear darker than the center due to lens characteristics.
* **Side effect**: This switch also selects which *uncalibrated fallback product* a run writes (see below).

### Reflectance calibration / white balance

* **Type**: Checkbox
* **Default**: Enabled (checked)
* **Description**: Enables reflectance calibration — from detected in-frame calibration targets and/or DAQ light-sensor downwelling data, depending on the camera and what is available. This normalizes reflectance values across your dataset and ensures consistent measurements regardless of lighting conditions.
* **When disabled**: Target detection is skipped entirely, and **no reflectance product can be produced by any camera** — Survey3 target-driven and LATTICE DAQ-driven alike. The dependent settings (*Export reflectance*, *Minimum recalibration interval*, and the Target Detection thresholds) are greyed out.

### Uncalibrated fallback products: Export sensor response / Export vignette corrected

* **Type**: Two checkboxes
* **Defaults**: Both enabled (checked)
* **Description**: When a frame cannot be reflectance-calibrated (no calibration target was found, or reflectance calibration is switched off), it is written as an *uncalibrated fallback product* instead. **Exactly one of the two fallback products exists per run, for every camera model**, chosen by the *Vignette correction* switch:
  * Vignette correction **on** → `Vignette_Corrected_Images/` (governed by **Export vignette corrected**)
  * Vignette correction **off** → `Sensor_Response_Images/` (governed by **Export sensor response**)
* The fallback that is not in play is greyed out. Unchecking the one in play stops that file from being written at all.

### LATTICE export products

For projects containing LATTICE captures, each imported LATTICE frame fans out into every enabled **and applicable** product in a single processing pass. Four checkboxes control the fan-out (all default **on**):

| Setting                | Output folder                    | What it exports                                                                                                                                                                                                            |
| ---------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Export debayered**   | `Debayered_Images/`              | The linear debayered image. Applies to RGB and multispectral cameras.                                                                                                                                                      |
| **Export preview**     | `Preview_Images/`                | The display preview. RGB = white balance (DAQ-illuminant when available, else gray-world) + gamma; multispectral = false-colour stretch.                                                                                   |
| **Export radiance**    | `Radiance_Images/`               | Float32 spectral radiance in W/m²/sr/nm. Multispectral (M3C/M3M) only — not applicable to RGB masters. Always written as 32-bit TIFF regardless of the *Calibrated image format* setting.                                  |
| **Export reflectance** | `Reflectance_Calibrated_Images/` | Uint16 reflectance, scaled so **32768 = reflectance 1.0** (stamped as XMP `Chloros:PixelScale`). Multispectral only, written when a matching `.daq` downwelling record (or a QA-passing in-frame target) covers the frame. |

* RGB master cameras emit debayered + preview; radiance/reflectance are skipped for them as not applicable.
* Bit depth of debayered/preview follows the *Calibrated image format* setting; radiance is always float32.
* Survey3 processing is unaffected by these four toggles.

The same four toggles exist headless as `chloros-cli process --debayered / --preview / --radiance / --reflectance` and as the SDK's matching parameters. They replaced the old `--radiometric-output` flag, which no longer exists.

{% hint style="warning" %}
**Turning every applicable product off makes the run fail.** As of 1.2.0 a processing run that was asked for products but wrote no image product reports failure and the CLI exits non-zero, instead of reporting a silent success. The log names the product it could not write and why. A deliberately metadata-only run (nothing requested) is still a success.
{% endhint %}

### Reflectance source (project setting, set via CLI/SDK)

The project also stores which **reflectance reference** the LATTICE reflectance product uses. There is no dedicated control in the settings panel; the value is stored in the project configuration as `Processing → "Target reflectance source"` and is set with `chloros-cli process --reflectance-source {auto,target,daq}` or the SDK's `reflectance_source` parameter:

* **`auto`** (default): a QA-passing in-frame calibration target becomes the absolute reference, falling back to the DAQ downwelling divide (ρ = πL/E) when no target is present or QA fails.
* **`target`**: strict target-driven reflectance — no DAQ substitution.
* **`daq`**: DAQ-authoritative reflectance; in-frame targets are not used as the reference.

The stored value is matched case-insensitively and a few spellings are accepted as aliases: `target`, `target_image`, `empirical` and `empirical_line` all mean **target**; `daq`, `dls`, `light_sensor` and `sensor` all mean **daq**. Anything else — including an absent key — resolves to **auto**.

Per-unit **measured** target scans are looked up by the target unit's serial/QR, as `<serial>.csv`, in three places: the directory given with `--target-reflectance-dir` (stored as `Processing → "Target reflectance dir"`), the project's own `target_reflectance/` folder, and the path in the `CHLOROS_TARGET_REFLECTANCE_DIR` environment variable. When no measured scan exists for that unit, the nominal published curve for the target model is used instead.

### Debayer method

* **Type**: Dropdown selection
* **Options**:
  * Standard (Fast, Medium Quality)
  * Texture Aware (Slow, Highest Quality) \[Chloros+]
* **Default**: Standard (Fast, Medium Quality)
* **Description**: Selects the demosaicing algorithm used to convert raw Bayer pattern sensor data into full-color images. The "Standard (Fast, Medium Quality)" method provides an optimal balance between processing speed and image quality. The "Texture Aware (Slow, Highest Quality)" \[Chloros+] uses a high-quality edge-aware debayer combined with an AI/ML denoising model which removes nearly all the debayering noise. The Texture Aware model requires GPU memory (VRAM) to run. We recommend using it when you have >4GB VRAM available for faster processing.
* **When the row is a dropdown at all**: the two-option dropdown appears only when **both** are true — you are signed in with a qualifying Chloros+ subscription, **and** the project contains no LATTICE captures. Otherwise the row renders as plain text reading `Standard (Fast, Medium Quality)` with nothing to choose.
* **LATTICE note**: There is no LATTICE-trained Texture Aware model, and the pipeline forces the standard demosaic for LATTICE frames regardless of the stored value. If you add a LATTICE folder to a project that already had Texture Aware selected, Chloros rewrites the setting back to Standard rather than leaving a stale value in `project.json`.

### Minimum recalibration interval

* **Type**: Number
* **Range**: 0 to 3,600 seconds
* **Default**: 0 seconds
* **Description**: Sets the minimum time interval (in seconds) between using calibration targets. When set to 0, Chloros will use every detected calibration target. When set to a higher value, Chloros will only use calibration targets that are separated by at least this many seconds, reducing processing time for datasets with frequent calibration target captures.
* **When to adjust**:
  * Set to 0 for maximum calibration accuracy when lighting conditions vary
  * Increase (e.g., to 60-300 seconds) for faster processing when lighting is consistent and you have frequent calibration target images

### Light sensor timezone offset

* **Type**: Number
* **Range**: -12 to +12 hours
* **Default**: 0 hours
* **Description**: Specifies the timezone offset (in hours from UTC) for light sensor data timestamps, used when matching light-sensor logs to image capture times. Newer `.daq` recordings carry their own timezone provenance, so this is mainly needed for older logs recorded in local time.

### Apply PPK corrections

* **Type**: Checkbox
* **Default**: Disabled (unchecked)
* **Description**: Enables the use of Post-Processed Kinematic (PPK) corrections from MAPIR DAQ recorders containing a GPS (GNSS). When enabled, Chloros will use any .daq log files containing exposure pin data in your project directory and apply precise geolocation corrections to your images.
* **Requirement**: .daq log file with exposure pin entries must be present in your project directory
* **When to enable**: It is recommended to always enable PPK correction if you have exposure feedback entries in your .daq log file.

### Exposure Pin 1

* **Type**: Dropdown selection
* **Visibility**: Only visible when "Apply PPK corrections" is enabled AND exposure data is available for Pin 1
* **Options**:
  * Camera model names detected in the project
  * "Do Not Use" - Ignore this exposure pin
* **Default**: Auto-selected based on project configuration
* **Description**: Assigns a specific camera to Exposure Pin 1 for PPK time synchronization. The exposure pin records the exact timing when the camera shutter is triggered, which is critical for accurate PPK geolocation.
* **Auto-selection behavior**:
  * Single camera + single pin: Automatically selects the camera
  * Single camera + two pins: Pin 1 automatically assigned to the camera
  * Multiple cameras: Manual selection required

### Exposure Pin 2

* **Type**: Dropdown selection
* **Visibility**: Only visible when "Apply PPK corrections" is enabled AND exposure data is available for Pin 2
* **Options**:
  * Camera model names detected in the project
  * "Do Not Use" - Ignore this exposure pin
* **Default**: Auto-selected based on project configuration
* **Description**: Assigns a specific camera to Exposure Pin 2 for PPK time synchronization when using a dual-camera setup.
* **Auto-selection behavior**:
  * Single camera + single pin: Pin 2 automatically set to "Do Not Use"
  * Single camera + two pins: Pin 2 automatically set to "Do Not Use"
  * Multiple cameras: Manual selection required
* **Note**: The same camera cannot be assigned to both Pin 1 and Pin 2 simultaneously.

***

## DAQ Light Sensor

This section appears in Project Settings and lists every DAQ downwelling file in the project — `.daq` recordings and DAQ-M `.csv` downwelling logs. Recordings made in the Light Sensors tab are added to the open project automatically.

Each row shows the file, the sensor model, and the diffuser-cap correction actually in force for that file. Above the rows is a single project-wide control:

### Cap override (all files)

* **Type**: Dropdown selection
* **Options**: `Auto` plus the cap correction profiles valid for the sensor kinds present in the project
* **Default**: Auto
* **Stored as**: `Processing → "DAQ cap id"` (default `auto`)
* **Description**: `Auto` uses each file's recorded cap (the Sunshine cap is assumed where nothing was recorded — all MAPIR DAQs ship with the sunshine corrector). Picking a specific cap overrides **every** downwelling file in the project: raw recordings are corrected with it, and recordings that already carry a cap are re-referenced (the recorded correction is undone and the selected one applied).
* **Important**: The selected cap must match the cap that was physically fitted during recording. Neither the sensor nor the software can detect the physical cap — a mismatched cap ID mis-corrects the spectra.

There is deliberately **one** project-wide control rather than per-file dropdowns: the setting reaches every downwelling source in the project.

***

## Array Alignment

This section appears **only** when at least one image in the project carries the module-to-module alignment transform that LATTICE arrays stamp at capture time (XMP `Chloros:Alignment*` tags). It shows how many images carry alignment tags, which camera is the reference (`REF` badge), and a per-camera table of image counts.

### Apply array alignment

* **Type**: Checkbox
* **Default**: Enabled (checked)
* **Stored as**: `Processing → "Array alignment"`
* **Description**: Warps every processed product (debayered / preview / radiance / reflectance / index) into the array's shared reference geometry using the transform stamped at capture. Off = export in native per-sensor geometry.

### Crop to common overlap

* **Type**: Checkbox (only active while *Apply array alignment* is on)
* **Default**: Enabled (checked)
* **Stored as**: `Processing → "Array alignment crop"`
* **Description**: Crops aligned exports to the region all camera modules share, so every band has the same footprint. Off keeps the full sensor canvas (black fill outside the source).

### Resampling

* **Type**: Dropdown selection (only active while *Apply array alignment* is on)
* **Options**: `Bilinear (smooth, default)`, `Nearest (preserve exact values)`, `Cubic (sharpest)`
* **Default**: Bilinear
* **Stored as**: `Processing → "Array alignment interpolation"`
* **Description**: Interpolation used by the alignment warp. Nearest preserves exact source values (no inter-pixel mixing) for strict radiometric analysis; Bilinear is best for mapping and visual use.

The same three options exist headless as `chloros-cli process --array-alignment`, `--array-alignment-crop`, and `--array-alignment-interp {bilinear,nearest,cubic}`.

***

## Index

These settings allow you to configure multispectral indices for analysis and visualization.

### Add index

* **Type**: Special index configuration panel
* **Description**: Opens an interactive panel where you can select and configure multispectral vegetation indices (NDVI, NDRE, EVI, etc.) to calculate during image processing. You can add multiple indices, each with its own visualization settings.
* **Available indices**: The GUI dropdown includes **27** pre-defined multispectral index formulas (see [Multispectral Index Formulas](/chloros/project-settings/multispectral-index-formulas.md) for the complete list, including which names are also accepted by the CLI/SDK `--indices` option).
* **Features**:
  * Select from pre-defined index formulas
  * Drag your camera's filter channels onto the formula's band slots
  * Configure visualization color gradients (LUT - Look-Up Tables)
  * Set threshold values and clipping modes
  * Create custom index formulas
* **Note**: Indices are not calculated for single-band LATTICE M3M mono cameras — multi-band indices are undefined on one band. Survey3 and LATTICE M3C are unaffected.

Each index you add renders its formula as math, with a coloured circle per band slot: red = Red, green = Green, blue = Blue, orange = Orange, cyan = Cyan, purple = NIR, magenta = RE. Drag a circle from the row above the formula onto a slot to bind it; double-click a bound slot to clear it. The index only computes once every slot the formula uses has a channel.

### Custom Formulas (Chloros+ Feature)

* **Type**: Array of custom formula definitions
* **Availability**: Requires signing in with a qualifying Chloros+ subscription.
* **Description**: Allows you to create and save custom multispectral index formulas using band math. Custom formulas are saved with your project settings and can be used just like built-in indices.
* **How to create**:
  1. In the Index configuration panel, open the custom formula calculator
  2. Write the formula using the **band-slot symbols**, not band names
  3. Save the formula with a descriptive name — it then appears at the bottom of the formula dropdown, and you drag your camera's channel circles onto its slots exactly like a built-in preset
* **Formula syntax**:
  * Band slots: `x`, `y`, `z`, `a`, `b`, `c` — six positions you map to real channels by dragging
  * Operators: `+`, `-`, `*`, `/`, `^`, and `()` for grouping
  * Functions: `sqrt()`, `log()`, `ln()`, `abs()`, `sign()`, `log1p()`, `log2()`
* **Why symbols, not band names**: a formula written as `(y-x)/(y+x)` works on any camera, because the drag-and-drop mapping decides whether `y` is the 850 nm NIR of an RGN filter or the 808 nm NIR of an OCN filter. The built-in presets are stored the same way — see [Multispectral Index Formulas](/chloros/project-settings/multispectral-index-formulas.md) for the exact symbol form of all 27.
* **Where they work**: custom formulas are saved with the project settings and can be used in the [Index/LUT Sandbox](/chloros/image-viewer-gui/index-lut-sandbox.md) as well as in processing. They are **not** accepted by the CLI/SDK `--indices` name list, which only expands the 22 built-in preset names.

***

## Export

These settings control the format and quality of exported processed images.

### Calibrated image format

* **Type**: Dropdown selection
* **Options**:
  * **TIFF (16-bit)** - Uncompressed 16-bit TIFF format
  * **TIFF (32-bit, Percent)** - 32-bit floating-point TIFF with reflectance values as percentages
  * **PNG (8-bit)** - Compressed 8-bit PNG format
  * **JPG (8-bit)** - Compressed 8-bit JPEG format
* **Default**: TIFF (16-bit)
* **Description**: Selects the file format for saving processed and calibrated images. Exports land in a per-format subfolder inside each camera's folder (`tiff16`, `tiff32`, `png8`, `jpg8`), with one `<Product>_Images/` folder per product. Exported files keep the source filename — the folder, not a filename suffix, identifies the product.
* **Format recommendations**:
  * **TIFF (16-bit)**: Recommended for scientific analysis and professional workflows. Preserves maximum data quality with no compression artifacts. Best for multispectral analysis and further processing in GIS software.
  * **TIFF (32-bit, Percent)**: Best for workflows that require reflectance values as percentages (0-100%). Offers maximum precision for radiometric measurements.
  * **PNG (8-bit)**: Good for web viewing and general visualization. Smaller file sizes with lossless compression, but reduced dynamic range.
  * **JPG (8-bit)**: Smallest file sizes, best for previews and web display only. Uses lossy compression which is not suitable for scientific analysis.
* **Note**: LATTICE radiance is always exported as 32-bit float TIFF regardless of this setting.

***

## Save Project Template

This feature allows you to save your current project settings as a reusable template.

* **Type**: Text input + Save button
* **Description**: Enter a descriptive name for your settings template and click the save icon. The template will store all your current project settings (target detection, processing options, indices, and export format) for easy reuse in future projects. Templates are stored in the `Project Templates/` folder inside your project save folder, and can also be selected or exported from the main menu (*Select Template* / *Save Template* / *Export Template*).
* **Use cases**:
  * Create templates for different camera systems (RGB, multispectral, NIR)
  * Save standard configurations for specific crop types or analysis workflows
  * Share consistent settings across a team
* **How to use**:
  1. Configure all your desired project settings
  2. Enter a template name (e.g., "RedEdge Survey3 NDVI Standard")
  3. Click the save icon
  4. The template can now be loaded when creating new projects

***

## Save Project Folder

This setting specifies where new projects are saved by default.

* **Type**: Directory path display + Edit button
* **Default (Windows)**: `C:\Users\[Username]\Chloros Projects`
* **Default (Linux)**: `~/Chloros Projects`
* **Description**: Shows the current default directory where new Chloros projects are created. Click the edit icon to select a different directory. The override is stored as a single line of text in `~/.chloros/working_directory.txt` — on Windows that is `C:\Users\<Username>\.chloros\working_directory.txt`. If that file is missing, or names a path that no longer exists, Chloros falls back to the default above. The CLI reads and writes the same file, so `chloros-cli` and the GUI always agree on where projects live.
* **Project Templates** live in a `Project Templates/` subfolder of this directory.
* **When to change**:
  * Set to a network drive for team collaboration
  * Change to a drive with more storage space for large datasets
  * Organize projects by year, client, or project type in different folders
* **Note**: Changing this setting only affects NEW projects. Existing projects remain in their original locations.

***

## Settings Persistence

A Chloros project is a **folder**. All project settings are saved in `project.json` inside it; connected hardware is remembered alongside it in `cameras.json` and `sensors.json`, so reopening a project also reconnects its cameras and light sensors. When you reopen a project, all settings are restored exactly as you left them. Saved projects can also be driven headless with `chloros-cli project` or the SDK's `open_project`.

### Settings Hierarchy

Settings are applied in the following order:

1. **System defaults** - Built-in defaults defined by Chloros
2. **Template settings** - If you load a template when creating a project
3. **Saved project settings** - Settings saved with the project file
4. **Manual adjustments** - Any changes you make during the current session

### Settings and Image Processing

Processing settings are read when a processing run starts. Changing a setting does not retroactively alter products that are already on disk — run processing again to apply the new settings. A few settings never affect processing at all:

* Image Thumbnail Resolution (display-only)
* Save Project Template
* Save Project Folder

***

## Configuration key reference

For automation (CLI `--config`, SDK `configure`, or reading `project.json` directly), these are the exact keys under `Project Settings`:

| Key path                                                  | Type                                                                            | Default           |
| --------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------- |
| `Display → Image Thumbnail Resolution`                    | `"512" \| "1024" \| "2048" \| "full"`                                           | `"512"`           |
| `Target Detection → Minimum calibration sample area (px)` | number 0-10000                                                                  | `25`              |
| `Target Detection → Minimum Target Clustering (0-100)`    | number 0-100                                                                    | `60`              |
| `Processing → Vignette correction`                        | bool                                                                            | `true`            |
| `Processing → Reflectance calibration / white balance`    | bool                                                                            | `true`            |
| `Processing → Export sensor response`                     | bool                                                                            | `true`            |
| `Processing → Export vignette corrected`                  | bool                                                                            | `true`            |
| `Processing → Export debayered`                           | bool                                                                            | `true`            |
| `Processing → Export preview`                             | bool                                                                            | `true`            |
| `Processing → Export radiance`                            | bool                                                                            | `true`            |
| `Processing → Export reflectance`                         | bool                                                                            | `true`            |
| `Processing → Array alignment`                            | bool                                                                            | `true`            |
| `Processing → Array alignment crop`                       | bool                                                                            | `true`            |
| `Processing → Array alignment interpolation`              | `"Bilinear" \| "Nearest" \| "Cubic"`                                            | `"Bilinear"`      |
| `Processing → Debayer method`                             | `"Standard (Fast, Medium Quality)" \| "Texture Aware (Slow, Highest Quality)"`  | Standard          |
| `Processing → Minimum recalibration interval`             | number 0-3600                                                                   | `0`               |
| `Processing → Light sensor timezone offset`               | number -12..12                                                                  | `0`               |
| `Processing → Apply PPK corrections`                      | bool                                                                            | `false`           |
| `Processing → DAQ cap id`                                 | cap profile id or `"auto"`                                                      | `"auto"`          |
| `Processing → Target reflectance source`                  | `"auto" \| "target" \| "daq"`                                                   | `"auto"`          |
| `Index → Add index`                                       | list of index configs                                                           | `[]`              |
| `Export → Calibrated image format`                        | `"TIFF (16-bit)" \| "TIFF (32-bit, Percent)" \| "PNG (8-bit)" \| "JPG (8-bit)"` | `"TIFF (16-bit)"` |

The `Array alignment` keys are written the first time the Array Alignment section renders or an automation call sets them. While they are absent the pipeline uses the same values shown above (`true`, `true`, bilinear), so a project.json without them behaves identically to one with them.

### Keys stored in `project.json` with no control in the settings panel

These live under the same `Project Settings` tree and are read by processing, but you will not find a widget for them in the sidebar:

| Key path                                                | Type                                            | Default  | Set by                                                                                                                                                                                                                                                                                                       |
| ------------------------------------------------------- | ----------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Processing → LATTICE input level`                      | `"auto" \| "raw" \| "debayered" \| "processed"` | `"auto"` | `chloros-cli process --input-level`, SDK `input_level=`. Overrides how LATTICE input TIFFs are interpreted; `auto` infers from each file's `Chloros:ProcessingLevel` XMP tag plus channel count. Ignored for Survey3 `.raw` captures. Deliberately not a GUI setting — auto is correct in every normal case. |
| `Processing → Target reflectance dir`                   | path string                                     | `""`     | `chloros-cli process --target-reflectance-dir`, or the project target API                                                                                                                                                                                                                                    |
| `Processing → Target reflectance config`                | dict keyed by camera serial                     | `{}`     | Registering an in-frame target (mode `fixed_block` / `fixed_strip` / `aruco`)                                                                                                                                                                                                                                |
| `Processing → DAQ-U log path`                           | path string                                     | `""`     | SDK `process_folder(daq_log_path=…)`. Points at a `.daq` recording or a folder of them                                                                                                                                                                                                                       |
| `Target Detection → Minimum calibration target squares` | number                                          | `4`      | Legacy default; no control and no CLI flag                                                                                                                                                                                                                                                                   |
| `UI → Grid thumbnail size`                              | number                                          | `160`    | The image grid's own thumbnail zoom slider                                                                                                                                                                                                                                                                   |

Two viewer preferences are stored **top-level in `project.json`**, outside `Project Settings` entirely, because they are display state rather than processing settings:

| Key path                   | Type          | Default | Set by                                                                                                                           |
| -------------------------- | ------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `viewer_display → gsd_bin` | integer 1–256 | `1`     | The image tab's GSD (px) control — see [Opening an Image Full Screen](/chloros/image-viewer-gui/opening-an-image-full-screen.md) |

***

## Best Practices

1. **Start with defaults**: The default settings work well for most MAPIR camera systems and typical workflows.
2. **Create templates**: Once you've optimized settings for a specific workflow or camera, save them as a template to ensure consistency across projects.
3. **Test before full processing**: When experimenting with new settings, test on a small subset of images before processing your entire dataset.
4. **Document your settings**: Use descriptive template names that indicate the camera system, processing type, and intended use (e.g., "Survey3\_RGB\_NDVI\_Agriculture").
5. **Export format selection**: Choose your export format based on your end use:
   * Scientific analysis → TIFF (16-bit or 32-bit)
   * GIS processing → TIFF (16-bit)
   * Quick visualization → PNG (8-bit)
   * Web sharing → JPG (8-bit)

***

For more information on multispectral indices in Chloros, see [Multispectral Index Formulas](/chloros/project-settings/multispectral-index-formulas.md) page.
