# RGB camera profiles A profile is a **settings XML exported from the VimbaX Viewer**. A profile named `X` is `X.xml` in this directory, and `[Camera.rgb] profile = X` in `config.ini` selects it. The program hands the XML straight to the Vimba X SDK (`LoadSettings`). Nothing else writes camera settings, and there is no fallback — a missing `X.xml` is a startup error. That is deliberate: GenICam validity is *stateful* (`AcquisitionFrameRate` is only writable once `AcquisitionFrameRateEnable` is set, `Width`'s maximum depends on binning, `IntensityAutoPrecedence` takes `Minimizenoise` but not `MinimizeNoise`), so a hand-written list can be individually plausible and collectively wrong. The Viewer greys out invalid combinations as you configure; that is the guardrail this design relies on. ## These files live on the device only The XMLs are exported on the LattePanda, because that is where the camera is, so they exist nowhere in the repo. `deploy.sh` therefore excludes `*.xml` and `*.txt` under this directory from its `rsync --delete` — without that, the next deploy erases them. This README does sync; it is repo documentation. Keep a copy somewhere durable if a profile represents real tuning effort: a reflash or a rebuilt device starts with an empty directory. ## To create or change a profile 1. Open the VimbaX Viewer and connect to the camera. 2. Configure it. The Viewer will not let you pick an invalid combination. 3. Save the settings XML over `.xml` here. 4. Restart. The program notices the file changed, regenerates `.txt`, and logs every setting that moved. ## The `.txt` files Beside each `X.xml` the program writes `X.txt`: a generated, human-readable record of the same settings, so a profile can be read and diffed without opening the Viewer. **It configures nothing.** Editing it changes nothing; it is overwritten whenever the XML changes. ## Profiles this rig expects `config.ini` ships referencing `standard` and `night`. They were previously hand-written; these are the values they used, as a starting point when recreating them in the Viewer. Everything not listed was identical. | Setting | `standard` | `night` | |---|---|---| | `AcquisitionFrameRate` | 10 | 1 | | `SensorBitDepth` | Bpp8 | Bpp12 | | `ExposureAutoMin` | 200 | 1000 | | `ExposureAutoMax` | 20000 | 500000 | | `GainAutoMax` | 24 | 48 | | `IntensityAutoPrecedence` | Minimizeexposuretime | Minimizenoise | | `DeviceIndicatorMode` | Active | Off | | `DeviceIndicatorLuminance` | 10 | 0 | Both used 2×2 binning at `RGB8` (2256×2256, 15.3 MB/frame) and a 250 MB/s `DeviceLinkThroughputLimit`. **That binning is not optional at 10 Hz**: a full-resolution RGB8 frame is 61 MB, which caps out near 4 fps under that limit. The full previous definitions are in git history at `config/camera_modes/rgb/{standard,night}.ini`. `settle_wait_ms` / `frame_timeout_ms` are *not* camera settings and are not in the XML — they live in `config.ini` under `[Camera.rgb.]`.