---
title: "OmrSettings"
canonical_url: "https://www.nutrient.io/api/python/settings/vision/advanced/omr-settings/"
md_url: "https://www.nutrient.io/api/python/settings/vision/advanced/omr-settings.md"
last_updated: "2026-09-02T09:34:35.870Z"
description: "Settings for Omr. Values fall back through three levels: document → SDK → built-in default."
---

Settings for Omr. Values fall back through three levels: document → SDK → built-in default. Writes target the document only when set on a document's settings, otherwise the SDK globally when set on SdkSettings.

**Tags:** `Vision`, `Advanced`

```python

from nutrient_sdk import OmrSettings

```

## Construction

`OmrSettings` is accessed through a [`Document`](/api/python/document/) instance for per-document overrides, or via [`SdkSettings`](/api/python/settings/document/sdk-settings/) for SDK-wide defaults.

```python

# Per-document override

with Document.open("input.pdf") as doc:
    settings = doc.settings.omr_settings
    settings.some_field = new_value          # mutate fields directly

# SDK-wide default (applies to all documents)

SdkSettings.omr_settings.some_field = new_value

```

Settings are configured by writing to fields on the returned object. The settings property itself cannot be reassigned — `doc.settings.omr_settings = other_settings` is rejected.

## Properties

### adaptive_character_level

```python

@property
def adaptive_character_level(self) -> float

@adaptive_character_level.setter
def adaptive_character_level(self, value: float) -> None

```

Fraction of the paper level below which ink is as dark as the printed character.

**Type:** `float`

**Default:** `0.55f`

---

### adaptive_character_visible_coverage

```python

@property
def adaptive_character_visible_coverage(self) -> float

@adaptive_character_visible_coverage.setter
def adaptive_character_visible_coverage(self, value: float) -> None

```

Portion of the bubble holding character-dark ink above which the printed character counts as still visible — the signature of an erased mark rather than a deliberate one.

**Type:** `float`

**Default:** `0.10f`

---

### adaptive_deep_shade_level

```python

@property
def adaptive_deep_shade_level(self) -> float

@adaptive_deep_shade_level.setter
def adaptive_deep_shade_level(self, value: float) -> None

```

Fraction of the paper level below which ink counts as deliberate shading.

**Type:** `float`

**Default:** `0.70f`

---

### adaptive_disc_radius

```python

@property
def adaptive_disc_radius(self) -> float

@adaptive_disc_radius.setter
def adaptive_disc_radius(self, value: float) -> None

```

Radius of the analyzed bubble interior, as a fraction of the field size, chosen to sit inside the printed ring.

**Type:** `float`

**Default:** `0.36f`

---

### adaptive_field_paper_sanity

```python

@property
def adaptive_field_paper_sanity(self) -> float

@adaptive_field_paper_sanity.setter
def adaptive_field_paper_sanity(self, value: float) -> None

```

A field whose own paper reads darker than this fraction of the page's paper is overfilled past its margins; its paper estimate is untrustworthy, so the page's is used instead.

**Type:** `float`

**Default:** `0.60f`

---

### adaptive_ink_margin

```python

@property
def adaptive_ink_margin(self) -> float

@adaptive_ink_margin.setter
def adaptive_ink_margin(self, value: float) -> None

```

Fraction below a field's paper level at which ink starts counting as a mark.

**Type:** `float`

**Default:** `0.12f`

---

### adaptive_mark_deep_coverage

```python

@property
def adaptive_mark_deep_coverage(self) -> float

@adaptive_mark_deep_coverage.setter
def adaptive_mark_deep_coverage(self, value: float) -> None

```

Portion of the bubble that deliberate shading must cover for the field to be a mark.

**Type:** `float`

**Default:** `0.60f`

---

### adaptive_mark_shade_coverage

```python

@property
def adaptive_mark_shade_coverage(self) -> float

@adaptive_mark_shade_coverage.setter
def adaptive_mark_shade_coverage(self, value: float) -> None

```

Portion of the bubble that light shading must cover for the field to be a mark, provided the printed character is also covered.

**Type:** `float`

**Default:** `0.60f`

---

### adaptive_minimum_paper

```python

@property
def adaptive_minimum_paper(self) -> int

@adaptive_minimum_paper.setter
def adaptive_minimum_paper(self, value: int) -> None

```

Paper darker than this absolute level is not believed to be paper; the page-wide level is used for that field instead.

**Type:** `int`

**Default:** `100`

---

### adaptive_paper_percentile

```python

@property
def adaptive_paper_percentile(self) -> int

@adaptive_paper_percentile.setter
def adaptive_paper_percentile(self, value: int) -> None

```

Percentile of a field's pixels taken to represent its paper level. A field is mostly paper even when marked, so a high percentile lands on the paper rather than on the mark.

**Type:** `int`

**Default:** `90`

---

### enable_adaptive_binarization

```python

@property
def enable_adaptive_binarization(self) -> bool

@enable_adaptive_binarization.setter
def enable_adaptive_binarization(self, value: bool) -> None

```

Indicates whether the black and white reduction threshold applied before mark detection is derived from the image, rather than using a fixed value. Mark detection operates on black and white data, so a color or grayscale image is reduced first. The fixed threshold treats anything lighter than itself as blank, which discards marks made with light ink — for example gray shading or a soft pencil — before detection runs. The resulting field is reported as empty rather than as a low-confidence mark. When enabled, each OMR field is instead measured against the paper level found within that same field, so ink appreciably darker than its surrounding paper is preserved however light it is. Because every field is judged on its own, this also holds up on tinted or aged stock and on pages that are lit unevenly, where no single threshold would suit the whole image. Enable this for forms whose marks are not reliably solid black. If the fields cannot be measured, the fixed threshold is used, so enabling this cannot give a worse result than leaving it off. Erased marks are recognized and reported as not filled: an erased bubble keeps light residue with the printed character showing through it, which differs measurably from a deliberate mark — shading a bubble either darkens it deeply or covers its character. Marks cancelled by other means, such as crossing out or blotting, are not distinguished from deliberate marks; resolving those requires knowing which fields belong to the same question, which this method does not. This setting has no effect when the supplied image is already black and white, because no reduction is performed in that case.

**Type:** `bool`

**Default:** `false`

---

---

## Related pages

- [Advanced](/api/python/settings/vision/advanced.md)
- [Per-document override](/api/python/settings/vision/advanced/ai-augmenter-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/ai-processing-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/anthropic-api-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/claude-api-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/content-extraction-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/custom-vlm-api-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/deskew-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/document-layout-json-export-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/finalizer-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/form-labeling-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/form-recognition-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/google-api-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/handwriting-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/inference-layout-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/local-vlm-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/ocr-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/open-ai-api-endpoint-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/open-ai-languages-detection-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/open-ai-picture-alt-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/preprocessing-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/reading-order-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/segmenter-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/table-recognition-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/vision-acceleration-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/vision-descriptor-settings.md)
- [Per-document override](/api/python/settings/vision/advanced/words-detection-settings.md)

