> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/curator/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/curator/_mcp/server.

# nemo_curator.stages.audio.filtering.sigmos

SIGMOS (Signal-based Mean Opinion Score) filter stage.

Filters audio segments based on SIGMOS quality metrics including
noise, overall quality, signal quality, coloration, discontinuity,
loudness, and reverberation.

Accepts a single input format: either in-memory (waveform + sample\_rate)
or audio\_filepath to a WAV file. Uses the SigMOS ONNX model directly;
no temp files.

The ONNX model is downloaded automatically from Microsoft's SIG-Challenge
repository on first use and cached at \~/.cache/nemo\_curator/sigmos\_model/.
Users can also provide a pre-downloaded model via the `model_path` parameter.

## Module Contents

### Classes

| Name                                                                                 | Description                             |
| ------------------------------------------------------------------------------------ | --------------------------------------- |
| [`SIGMOSFilterStage`](#nemo_curator-stages-audio-filtering-sigmos-SIGMOSFilterStage) | SIGMOS quality assessment filter stage. |

### Functions

| Name                                                                                     | Description                                             |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| [`_get_audio_numpy_sr`](#nemo_curator-stages-audio-filtering-sigmos-_get_audio_numpy_sr) | Get (audio mono float32 numpy, sample\_rate) from item. |

### Data

[`_DEFAULT_MODEL_DIR`](#nemo_curator-stages-audio-filtering-sigmos-_DEFAULT_MODEL_DIR)

[`_SIGMOS_MODEL_FILENAME`](#nemo_curator-stages-audio-filtering-sigmos-_SIGMOS_MODEL_FILENAME)

[`_SIGMOS_MODEL_URL`](#nemo_curator-stages-audio-filtering-sigmos-_SIGMOS_MODEL_URL)

### API

```python
class nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage(
    model_dir: str = _DEFAULT_MODEL_DIR,
    model_path: str | None = None,
    noise_threshold: float | None = 4.0,
    ovrl_threshold: float | None = 3.5,
    sig_threshold: float | None = None,
    col_threshold: float | None = None,
    disc_threshold: float | None = None,
    loud_threshold: float | None = None,
    reverb_threshold: float | None = None,
    name: str = 'SIGMOSFilter',
    batch_size: int = 1,
    resources: nemo_curator.stages.resources.Resources = (lambda: Resources(cpus=1.0...
)
```

Dataclass

**Bases:** [ProcessingStage\[AudioTask, AudioTask\]](/nemo-curator/nemo_curator/stages/base#nemo_curator-stages-base-ProcessingStage)

SIGMOS quality assessment filter stage.

Filters audio segments based on SIGMOS quality metrics.
Input: items with waveform + sample\_rate (tensor/array) or audio\_filepath (WAV).
The ONNX model is loaded once in setup() and reused for all predictions.

The model is automatically downloaded from Microsoft's SIG-Challenge
GitHub repository on first use and cached at
`~/.cache/nemo_curator/sigmos_model/`. To skip downloading, place
the ONNX file there manually or pass `model_path` pointing
directly to the file.

**Parameters:**

**`model_dir`** `str` — default: \_DEFAULT\_MODEL\_DIR

Directory to store the downloaded model weights
(default: `~/.cache/nemo_curator/sigmos_model/`).

---

**`model_path`** `str | None` — default: None

Direct path to a local SIGMOS ONNX model file.
Overrides model\_dir when provided.

---

**`noise_threshold`** `float | None` — default: 4.0

Minimum noise score (None to disable)

---

**`ovrl_threshold`** `float | None` — default: 3.5

Minimum overall score (None to disable)

---

**`sig_threshold`** `float | None` — default: None

Minimum signal score (None to disable)

---

**`col_threshold`** `float | None` — default: None

Minimum coloration score (None to disable)

---

**`disc_threshold`** `float | None` — default: None

Minimum discontinuity score (None to disable)

---

**`loud_threshold`** `float | None` — default: None

Minimum loudness score (None to disable)

---

**`reverb_threshold`** `float | None` — default: None

Minimum reverb score (None to disable)

---

**`batch_size`** `int = 1`

---

**`col_threshold`** `float | None = None`

---

**`disc_threshold`** `float | None = None`

---

**`loud_threshold`** `float | None = None`

---

**`model_dir`** `str = _DEFAULT_MODEL_DIR`

---

**`model_path`** `str | None = None`

---

**`name`** `str = 'SIGMOSFilter'`

---

**`noise_threshold`** `float | None = 4.0`

---

**`ovrl_threshold`** `float | None = 3.5`

---

**`resources`** `Resources`

---

**`reverb_threshold`** `float | None = None`

---

**`sig_threshold`** `float | None = None`

---

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.__post_init__()
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._check_thresholds(
    scores: dict[str, float]
) -> tuple[bool, list[str]]
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._download_model(
    model_dir: str
) -> str
```

staticmethod

Download SIGMOS ONNX model from Microsoft's SIG-Challenge repository.

Returns the path to the validated model file.

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._initialize_model() -> None
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._process_single(
    task: nemo_curator.tasks.AudioTask
) -> nemo_curator.tasks.AudioTask | None
```

Run SIGMOS scoring on a single (non-nested) task.

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._resolve_model_path() -> str
```

Resolve the ONNX model path: model\_path override → model\_dir download.

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage._scores_from_prediction(
    score_data: typing.Any
) -> dict[str, float]
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.inputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.outputs() -> tuple[list[str], list[str]]
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.process(
    task: nemo_curator.tasks.AudioTask
) -> nemo_curator.tasks.AudioTask | list[nemo_curator.tasks.AudioTask]
```

Process a single AudioTask and filter by SIGMOS quality metrics.

When `task.data` contains a `"segments"` key (nested mode from VAD),
each segment is evaluated individually and only survivors are kept.

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.setup(
    _: nemo_curator.backends.base.WorkerMetadata | None = None
) -> None
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.setup_on_node(
    _node_info: nemo_curator.backends.base.NodeInfo | None = None,
    _worker_metadata: nemo_curator.backends.base.WorkerMetadata | None = None
) -> None
```

```python
nemo_curator.stages.audio.filtering.sigmos.SIGMOSFilterStage.teardown() -> None
```

```python
nemo_curator.stages.audio.filtering.sigmos._get_audio_numpy_sr(
    item: dict[str, typing.Any],
    task_id: str
) -> tuple[numpy.ndarray, int] | None
```

Get (audio mono float32 numpy, sample\_rate) from item.

Returns None if unavailable or load fails.

```python
nemo_curator.stages.audio.filtering.sigmos._DEFAULT_MODEL_DIR = str(Path.home() / '.cache' / 'nemo_curator' / 'sigmos_model')
```

```python
nemo_curator.stages.audio.filtering.sigmos._SIGMOS_MODEL_FILENAME = 'model-sigmos_1697718653_41d092e8-epo-200.onnx'
```

```python
nemo_curator.stages.audio.filtering.sigmos._SIGMOS_MODEL_URL = 'https://github.com/microsoft/SIG-Challenge/raw/main/ICASSP2024/sigmos/model-sig...
```