> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# updateSendSettings()

> Updates how the local client publishes camera, custom video, and screen share tracks.

`updateSendSettings(settings)`

Controls simulcast layer configuration and which layers are sent. Useful for adapting to poor network conditions or high CPU load, or for ensuring high-quality video when conditions allow.

## Parameters

<ParamField body="settings" type="DailySendSettings" required>
  An object configuring send settings per track type. All keys are optional. Each value accepts a preset string (see below) or a `DailyVideoSendSettings` object:

  * `video` — local camera track. Also supports `allowAdaptiveLayers` (see below).
  * `customVideoDefaults` — default settings for all custom video tracks. Uses [camera presets](#camera-and-custom-track-presets).
  * `screenVideo` — screen share track. Uses [screen share presets](#screen-share-presets).
  * `[customKey: string]` — settings for a specific named custom track, using the track's `trackName` as the key.

  <Expandable title="DailyVideoSendSettings fields" defaultOpen="true">
    <ParamField body="encodings" type="object">
      Simulcast layer encoding parameters. Accepts up to three layers (`low`, `medium`, `high`), each specified as [RTCRtpEncodingParameters](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpEncodingParameters). Layers must be defined starting from `"low"` and progressing upward.
    </ParamField>

    <ParamField body="maxQuality" type="'low' | 'medium' | 'high'">
      The highest simulcast layer to publish. All layers at or below this level are sent. For example, `'medium'` publishes both `low` and `medium`.
    </ParamField>

    <ParamField body="allowAdaptiveLayers" type="boolean">
      Enables [Daily Adaptive Bitrate](/docs/guides/architecture-and-monitoring/adaptive-bitrate) for the `video` key. When `true`, Daily dynamically adjusts the highest layer based on network conditions.
    </ParamField>
  </Expandable>
</ParamField>

## Camera and custom track presets

| Preset                             | Description                                                                  |
| ---------------------------------- | ---------------------------------------------------------------------------- |
| `'quality-optimized'`              | Higher resolutions and bitrate; best for good networks                       |
| `'bandwidth-and-quality-balanced'` | High resolution with bandwidth savings; suitable for most networks (default) |
| `'bandwidth-optimized'`            | Lower bitrate; best for constrained networks (e.g., cellular)                |
| `'default-video'`                  | Resets to default (same as `'bandwidth-and-quality-balanced'`)               |

## Screen share presets

| Preset                         | Description                                                                 |
| ------------------------------ | --------------------------------------------------------------------------- |
| `'detail-optimized'`           | Low bitrate and frame rate (max 5 fps); best for static content like slides |
| `'motion-and-detail-balanced'` | Balanced; max 15 fps; good for whiteboards and document editing             |
| `'motion-optimized'`           | Full motion; max 30 fps; 2 Mbps cap to protect call quality (default)       |
| `'default-screen-video'`       | Resets to default (same as `'motion-optimized'`)                            |

<Note>
  Send only a single simulcast layer for screen video. Define only the `"low"` layer and set `maxQuality` to `"low"`. Multiple layers are supported but screen shares are bandwidth-intensive and additional layers can degrade performance.
</Note>

## Return value

Returns `Promise<DailySendSettings>` that resolves with the updated send settings. Also triggers a [`send-settings-updated`](/reference/react-native/events/settings-events#send-settings-updated) event.

## Examples

```javascript theme={null}
// Switch camera to bandwidth-optimized preset
await call.updateSendSettings({
  video: 'bandwidth-optimized',
});
```

```javascript theme={null}
// Custom screen share with a single simulcast layer
call.updateSendSettings({
  screenVideo: {
    encodings: {
      low: { maxBitrate: 1500000, maxFramerate: 25 },
    },
    maxQuality: 'low',
  },
});
```

```javascript theme={null}
// Custom encodings for all custom video tracks
call.updateSendSettings({
  customVideoDefaults: {
    encodings: {
      low: { maxBitrate: 100000, scaleResolutionDownBy: 4, maxFramerate: 10 },
      medium: { maxBitrate: 200000, scaleResolutionDownBy: 2, maxFramerate: 15 },
      high: { maxBitrate: 700000, scaleResolutionDownBy: 1, maxFramerate: 25 },
    },
  },
});
```

```javascript theme={null}
// Override settings for a specific named custom track
await call.updateSendSettings({
  myCustomVideo: {
    maxQuality: 'medium',
  },
});
```

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [getSendSettings()](/reference/react-native/instance-methods/get-send-settings)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [send-settings-updated](/reference/react-native/events/settings-events#send-settings-updated)
    * [cpu-load-change](/reference/react-native/events/network-events#cpu-load-change)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Send-side video quality](/docs/guides/scaling-calls/best-practices-to-scale-large-experiences#change-send-side-video-quality)
    * [Adaptive bitrate](/docs/guides/architecture-and-monitoring/adaptive-bitrate)
  </Card>
</CardGroup>
