> For the complete documentation index, see [llms.txt](https://wiki.crosswatch.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.crosswatch.app/crosswatch/settings/configure-pairs/features/progress.md).

# Progress

Progress syncs **resume position**.

It keeps “Continue Watching” aligned across supported providers.

It does **not** mark items watched.

Use [History](/crosswatch/settings/configure-pairs/features/history.md) for watched state.

{% hint style="warning" %}
Progress is **experimental** and **best-effort**.

Resume data is not equally reliable across providers.

Plex is usually the least reliable for progress timestamps.

Start one-way and validate with a few titles.
{% endhint %}

Tracking issue: <https://github.com/cenodude/CrossWatch/issues/119>

{% tabs %}
{% tab title="End users" %}

### Supported pairs

The **Advanced Playback Progress** section appears only when both sides support progress sync.

Supported progress providers are:

* Plex
* Emby
* Jellyfin
* Nuvio
* PublicMetaDB
* CrossWatch local

### What syncs

Progress syncs the position where playback stopped.

It does **not** treat a missing resume position as a clear request.

Watched history stays separate from progress sync.

### Pair controls

Per pair, you can control:

* **Enable**
* **Mode** — one-way or two-way
* **Add / Update**
* **Remove (clear)**

Clear support depends on the destination provider.

**Emby** and **Jellyfin** support clears.

**Plex** does not support clears.

### Advanced playback progress

These settings live on the pair.

Different pairs can use different progress rules.

#### Minimum seconds

Default: `60`

Resume positions below this value are ignored.

A stop in the first minute does not sync with the default.

Use `0` to disable this filter.

#### Change threshold

Default: `30`

CrossWatch writes progress only when the source and destination differ by at least this value.

This reduces noisy writes from small player timing differences.

Use `0` to consider every difference.

#### Ignore near complete

Default: `95` percent

Positions at or above this value do not sync as unfinished progress.

This lets [History](/crosswatch/settings/configure-pairs/features/history.md) own the watched state.

Enable History if you rely on this setting.

#### Replay watched items

Default: disabled

By default, CrossWatch does not write unfinished progress over a watched destination item.

With this enabled, CrossWatch can mark the destination unwatched and restore the source resume point.

Use it only for deliberate rewatches.

#### Timestamp tolerance

Default: `30` seconds

Accepted range: `0` to `300` seconds

If the destination timestamp is newer than the source by more than this value, CrossWatch skips the write.

Increase it when minor clock drift blocks valid writes.

<details>

<summary>Change threshold examples</summary>

With a threshold of `30` seconds:

* Source `20:00`, destination `19:45` → no write
* Source `20:00`, destination `19:20` → write allowed

</details>

{% hint style="info" %}
Recommended defaults:

* Minimum seconds: `60`
* Change threshold: `30`
* Ignore near complete: `95`
* Replay watched items: disabled
* Timestamp tolerance: `30`
  {% endhint %}

<figure><img src="/files/BtTm1i8O4LuW8xSqlZKF" alt=""><figcaption></figcaption></figure>

### Progress vs Playback

**Progress** updates when the pair runs.

**Playback** reads the provider live.

The numbers can differ between those views.

That is normal.
{% endtab %}

{% tab title="Power users" %}

### Planning vs write scope

These settings affect planning for all supported progress pairs:

* **Minimum seconds**
* **Change threshold**
* **Ignore near complete**

These settings mainly affect writes to **Plex**, **Emby**, and **Jellyfin** destinations:

* **Replay watched items**
* **Timestamp tolerance**

**Nuvio**, **PublicMetaDB**, and **CrossWatch local** use their own write rules.

### Regression handling

When the source position is behind the destination, CrossWatch checks timestamps first.

Without usable timestamps, it does not move progress backward.

In two-way mode, the newest usable progress usually wins.

If timestamps are missing, the higher position wins.

### Clear behavior

Progress does **not** clear just because the source has no resume position.

Clear behavior still depends on pair remove settings and provider support.

{% hint style="warning" %}
One-way remove behavior uses **One-Way Remove mode (Deletions based on Source)** in [Global settings](/crosswatch/settings/configure-pairs/global-settings.md).

If you want source-side clears to mirror to the destination, you usually want **Mirror** mode.
{% endhint %}

Progress clears are tombstone-driven.

That means a clear can take two runs:

1. CrossWatch records that the source item disappeared.
2. The next run treats that disappearance as real and applies the clear.

See [Tombstones](broken://spaces/3rh5THg1PdhVsBt3GALo/pages/AbAHapoU4fVH9SPBWr36).

### Additional write protection

Before writing to **Plex**, **Emby**, or **Jellyfin**, CrossWatch also skips when:

* the item is actively playing on the destination
* source and destination are the same provider instance
* the source has no usable progress timestamp
* the destination is newer than the allowed tolerance
* the destination is watched and replay mode is off
* the positions are already materially equal

These checks prevent scheduled syncs from overwriting newer destination activity.

### Provider notes

* **Plex** does not support clear
* **Plex** timestamps can be delayed or missing
* **Emby** clears by setting progress to `0`
* **Jellyfin** clears by setting progress to `0`
* **Nuvio** supports progress removal when pair removal is enabled
* **Replay watched items** is implemented for Plex, Emby, and Jellyfin destinations

### Related

* [Features](/crosswatch/settings/configure-pairs/features.md)
* [Configure Pairs](/crosswatch/settings/configure-pairs.md)
* [Playback](/crosswatch/main-dashboard/navigation/playback.md)
* [History](/crosswatch/settings/configure-pairs/features/history.md)
  {% endtab %}
  {% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://wiki.crosswatch.app/crosswatch/settings/configure-pairs/features/progress.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
