> ## Documentation Index
> Fetch the complete documentation index at: https://daily-hush-pcc-session-recordings-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Arctan

> Real-time speech enhancement and noise cancellation using Arctan Eigen

export const CommunityMaintained = ({maintainer, maintainerUrl, repo}) => <Note>
    <strong>Community-maintained integration.</strong> This service is built and
    maintained by{" "}
    <a href={maintainerUrl} target="_blank" rel="noreferrer">
      {maintainer}
    </a>
    . Pipecat does not test or officially support it. Please report issues and
    request changes on the{" "}
    <a href={repo} target="_blank" rel="noreferrer">
      source repository
    </a>
    . Learn more about{" "}
    <a href="/api-reference/server/services/community-integrations">
      community integrations
    </a>
    .
  </Note>;

<CommunityMaintained maintainer="Arctan AI" maintainerUrl="https://www.arctan.ai/eigen" repo="https://www.arctan.ai/eigen/docs" />

## Overview

`ArctanAudioFilter` is a `BaseAudioFilter` implementation backed by
[Arctan Eigen](https://www.arctan.ai/eigen), a low-latency speech enhancer and
noise canceller tuned for ASR/STT accuracy. You attach it to a transport's
`audio_in_filter`, and it cleans up incoming user audio — reducing background
noise, side-talk, and other degradation — before the audio reaches VAD and your
STT service.

<CardGroup cols={2}>
  <Card title="Arctan Eigen Docs" icon="book" href="https://www.arctan.ai/eigen/docs">
    SDK documentation, API reference, and troubleshooting
  </Card>

  <Card title="PyPI Package" icon="cube" href="https://pypi.org/project/arctan-vi/">
    The `arctan-vi` package on PyPI
  </Card>

  <Card title="Pipecat Integration Guide" icon="plug" href="https://www.arctan.ai/eigen/docs/python/integration/pipecat">
    Arctan's own guide to the Pipecat integration
  </Card>

  <Card title="Request Access" icon="key" href="https://www.arctan.ai/eigen">
    Request an SDK license key from Arctan
  </Card>
</CardGroup>

## Installation

This is a community-maintained package distributed separately from `pipecat-ai`:

```bash theme={null}
uv add "arctan-vi[pipecat]"
```

The `pipecat` extra installs the Arctan SDK along with the Pipecat integration.

Requires Python >= 3.11.

## Prerequisites

* **SDK license key**: Arctan requires a license key. Request access at
  [arctan.ai/eigen](https://www.arctan.ai/eigen).
* **Network access**: the agent process must be able to reach Arctan's servers
  to validate the license key.

### Required Environment Variables

* `ARCTAN_SDK_KEY`: your Arctan SDK license key

```bash theme={null}
export ARCTAN_SDK_KEY="arc_sk_live_..."
```

<Warning>
  Don't commit SDK license keys or `.env` files to source control.
</Warning>

## Configuration

<ParamField path="license_key" type="str | None" default="None">
  Arctan SDK license key. Falls back to the `ARCTAN_SDK_KEY` environment
  variable if not provided. When set, this value takes precedence over the
  environment variable.
</ParamField>

## Usage

Create one filter instance and pass it to your transport as `audio_in_filter`:

```python theme={null}
from arctan.pipecat import arctan_enhancer
from pipecat.transports.base_transport import TransportParams

audio_filter = arctan_enhancer.ArctanAudioFilter()

transport_params = TransportParams(
    audio_in_enabled=True,
    audio_in_filter=audio_filter,
)
```

The transport drives the filter lifecycle — `start(sample_rate)`,
`filter(audio)`, `process_frame(frame)`, and `stop()` — so no additional wiring
is needed.

### Passing the license key explicitly

```python theme={null}
audio_filter = arctan_enhancer.ArctanAudioFilter(
    license_key="arc_sk_live_...",
)
```

### With a specific transport

The filter works with any Pipecat transport that supports input audio filters:

```python theme={null}
from arctan.pipecat import arctan_enhancer
from pipecat.transports.daily.transport import DailyParams, DailyTransport

audio_filter = arctan_enhancer.ArctanAudioFilter()

transport = DailyTransport(
    room_url,
    token,
    "Bot",
    DailyParams(
        audio_in_enabled=True,
        audio_out_enabled=True,
        audio_in_filter=audio_filter,
    ),
)
```

## Input Frames

<ParamField path="FilterEnableFrame" type="Frame">
  Control frame to toggle enhancement on and off at runtime

  ```python theme={null}
  from pipecat.frames.frames import FilterEnableFrame

  # Bypass enhancement — audio passes through unchanged
  await task.queue_frame(FilterEnableFrame(enable=False))

  # Resume enhancement
  await task.queue_frame(FilterEnableFrame(enable=True))
  ```
</ParamField>

## Audio Requirements

The Arctan filter does **not** resample audio. Configure your input transport to
deliver PCM16 at a single, stable sample rate.

* Input must be signed 16-bit PCM (int16) bytes.
* The sample rate must be positive and must not change after the filter starts.
* Each chunk passed to `filter()` must contain complete int16 samples;
  incomplete samples raise an error.
* Any chunk size is accepted — the filter buffers partial data internally.

## Compatibility

Requires Pipecat 1.3 or later. Check the [Arctan
documentation](https://www.arctan.ai/eigen/docs) for the latest tested version
and release notes.
