message-questionFAQ

Common questions about installation, setup, syncing, scrobbling, and troubleshooting.

Quick answers to common CrossWatch (CW) questions.

Setup

chevron-rightWhat is CW?hashtag

CW syncs watch state between media servers and trackers.

It runs locally and stores state on disk.

Start here: About CrossWatch.

chevron-rightI can’t remember my passwordhashtag

CW does not have a “forgot password” flow.

If you still have your config, disable UI auth:

  1. Open your config.json in a JSON-aware editor.

  2. Set:

"app_auth": {
  "enabled": false
}
  1. Restart the container.

  2. Log in, then re-enable auth and set a new password.

If you don’t care about keeping any settings/state, delete your config.json.

You will lose your configuration and local state.

chevron-rightUnable to login, but I don’t get a “password incorrect” messagehashtag

You probably switched between HTTP and HTTPS (or changed hostnames).

That can leave you with a stale auth cookie that never validates.

Delete the CW site cookies for that URL, then reload and log in again.

If you can’t find it, clear cookies for the whole site or try an incognito window.

chevron-rightDo I need Docker to run CW?hashtag

Yes. CW is currently distributed as Docker/container images only.

Use a persistent /config mount or you will lose state.

If you want NAS/Portainer-specific steps, start here: Container installationarrow-up-right.

Setup steps: Docker setup.

chevron-rightWhat port does the UI use?hashtag

Default UI port is 8787.

If you change the port mapping, your URL changes too.

Setup reference: Docker setup.

chevron-rightWhere does CW store its data?hashtag

CW stores state as JSON files under your config folder.

In Docker, that is usually /config inside the container.

If you are looking for settings and tokens, start here: Configuration (config.json).

chevron-rightWhich services are supported?hashtag

Media servers: Plex, Jellyfin, Emby.

Trackers: Trakt, SIMKL, MDBList, AniList.

Full list: Providers.

First run

chevron-rightShould I start with syncing or scrobbling?hashtag

If you want dataset alignment (watchlists/ratings/history), start with syncing.

If you want plays as they happen, enable scrobbling after.

Decision guide: What do you need?.

chevron-rightWhy do I need a metadata provider (TMDb)?hashtag

Better IDs mean better matching.

TMDb reduces “missing peer” issues and bad links.

Setup location: Settings → Metadata. Related: Settings.

chevron-rightWhat metadata should I use on my media server?hashtag

CW matches best when your media server stores stable external IDs (TMDb/IMDb/TVDb).

Use these defaults:

  • Plex Media Server: use the default Plex Movie and Plex TV Series metadata agents.

  • Emby and Jellyfin: use TMDb metadata for Movies and Series.

After changing metadata settings, refresh metadata so IDs get populated.

Related: Best practices and Metadata.

Syncing

chevron-rightWhat is a “pair”?hashtag

A pair is a source and a target with a mode and feature toggles.

Left side is Source. Right side is Target.

Deep dive: Configure Pairs.

chevron-rightWhat direction should I use: tracker → server or server → tracker?hashtag

Default is media server → tracker.

Trackers and servers play different roles. Pick a source of truth.

More context: Trackers vs. Media Servers.

chevron-rightIs two-way sync safe?hashtag

It can overwrite data. Treat it as an advanced mode.

Start one-way. Move to two-way only after multiple clean runs.

Safety defaults: Best practices.

chevron-rightI have two-way sync, but when I delete something it gets instantly re-addedhashtag

That usually means deletes are not enabled for that feature.

Edit the pair and enable the feature’s delete toggle:

  • Watchlist → enable Remove

  • Ratings → enable Remove (clear)

If Remove is off, CW treats your deletion as drift and adds it back.

chevron-rightCan I sync tracker history and ratings into my media server?hashtag

You can, but it is usually the wrong direction for history and ratings.

It can create drift and “ghost” history as libraries change.

Why it’s risky: Tracker to Media Server.

chevron-rightCan I sync between two media servers?hashtag

Possible, but fragile.

Only do it when libraries are near-identical and you can restore both servers.

Read this first: Media Server to Media Server.

chevron-rightI ran a history sync and it says X items unresolved. Did the sync fail?hashtag

No.

A run can complete successfully with unresolved > 0.

“Unresolved” means CrossWatch found history entries in the source.

It could not write a safe equivalent entry on the destination.

Common reasons (History):

  • Missing timestamp The destination requires watched_at, but the source entry has no usable date/time.

  • Not a playable item Some sources emit show/season roll-ups. Many destinations only accept movie/episode history.

  • Can’t match the item No stable ID match. Or the destination library does not contain that item/version.

Common log codes:

  • skip_missing_date The entry had no usable watch date/time, so it was skipped.

  • resolve_failed CrossWatch could not find a definite destination match. It did not apply the entry.

Related: Sync results and Unresolved.

chevron-rightDoes “unresolved” mean my watch history is wrong now?hashtag

Not necessarily.

Unresolved entries are typically entries the destination can’t represent anyway.

Most of the “good” history (episodes/movies with timestamps) still writes fine.

chevron-rightHow can I check if the sync did what I wanted?hashtag

Spot-check a few items you know you watched in the source.

Confirm they show as watched/played in the destination.

If those match, the sync likely did its job.

chevron-rightWhat’s the best way to use history sync long-term?hashtag

Use history sync as a one-time seed.

After that, rely on normal tracking going forward (scrobbling / play tracking).

Avoid repeatedly re-importing full history unless you are intentionally rebuilding.

chevron-rightCan I reduce unresolved items?hashtag

Sometimes.

Start with matching hygiene:

  • Ensure both sides have stable external IDs (TMDb/IMDb/TVDb), when supported. See: Metadata.

  • Ensure the destination library contains the content you are importing.

  • Prefer episode/movie-level history over show/season roll-ups.

To debug specific misses, run: Analyzer.

Scrobbling (real-time)

chevron-rightWhat’s the difference between syncing and scrobbling?hashtag

Syncing is periodic dataset alignment (watchlist/history/ratings).

Scrobbling pushes playback progress in real time while you watch.

Overview: Scrobble.

chevron-rightShould I use Watcher or Webhooks?hashtag

Use Watcher.

Legacy webhooks are deprecated and not maintained.

How to pick: Webhook or Watcher.

chevron-rightWhy don’t media server webhooks work with a self-signed HTTPS certificate?hashtag

If your media server must POST webhook events to CW over https://..., it may reject self-signed certificates.

Webhook delivery will fail.

This affects:

  • Plex: webhook delivery rejects self-signed TLS certificates.

  • Emby/Jellyfin: webhook plugins commonly reject self-signed certs unless the CA is trusted.

Fix it by using a reverse proxy with a publicly trusted certificate (example: Let’s Encrypt).

Keep CW on HTTP behind the proxy.

Related: HTTPS/TLS and Reverse proxies.

chevron-rightDoes Watcher require Plex Pass or Emby Premiere?hashtag

No. Watcher scrobbles without Plex Pass or Emby Premiere.

Ratings are Plex-only and require an extra helper webhook.

Setup: Watcher.

chevron-rightI see no Playing Cardhashtag

The Playing Card is the “Now Playing” footer widget.

It shows only when:

  • Settings → UI → Playing Card is enabled.

  • You configured TMDb in Settings → Metadata.

Then start playback on your media server.

chevron-rightWhich trackers can Watcher scrobble to?hashtag

Watcher targets Trakt, SIMKL, and MDBList.

You can choose one or multiple sinks.

Setup: Watcher.

Scheduling

chevron-rightHow do I run CW automatically?hashtag

Enable scheduling in Settings → Scheduling.

Start with a daily cadence. Move to sequential schedules only when needed.

Details: Scheduling.

Troubleshooting and tools

chevron-rightWhy does my password manager show popups or autofill prompts in CrossWatch?hashtag

Some password managers inject autofill and “save” overlays.

This can break API key and token fields in CrossWatch.

Fix:

  1. Add your CrossWatch URL to the password manager’s excluded / never autofill sites list.

  2. Reload CrossWatch.

  3. Re-enter the value manually.

This stops the extension from interfering with protected configuration fields.

chevron-rightWhy didn’t an item sync?hashtag

It is usually an ID or matching problem.

Run a sync once, then use Analyzer to see missing peers and missing IDs.

Workflow: Analyzer.

chevron-rightI get a reverse proxy timeout (504 Gateway Timeout)hashtag

This is almost always a timeout limit in front of CrossWatch.

This happens most often in Captures.

Captures can be slow on large Plex libraries.

There are two separate “timeout bombs”:

  • Frontend hard timeout: the web UI aborts API calls after ~180s (3 minutes).

    • If a Plex call takes longer, your browser stops waiting.

    • The backend may still be working.

  • Proxy timeouts: many reverse proxies default to ~60–120s read timeouts.

    • Long-running HTTP requests die mid-flight.

Fix:

  • Increase reverse proxy timeouts.

    • NGINX: proxy_read_timeout and proxy_send_timeout

  • Reduce how much data Captures has to scan.

  • If you can, run the capture from a direct LAN URL (no proxy) to confirm it’s proxy-only.

Reference config: Reverse proxies. Captures guide: Captures.

chevron-rightHow do I block an item from syncing?hashtag

Use Editor → Current State to apply provider-level blocks.

Blocks survive rebuilds because they are stored as policy.

How it works: Editor.

chevron-rightI changed pair direction or enabled new features. What now?hashtag

Avoid constant pair changes.

When you do major changes, reset local state so planning recalculates cleanly.

Guidance: Best practices and Maintenance.

chevron-rightWhat does “Clear state” do?hashtag

It deletes the local orchestrator runtime state file (state.json).

Next run becomes a full rebuild.

Details: Maintenance.

chevron-rightWhat should I do after I clear state or provider cache?hashtag

Clearing state/cache makes the next run behave like a first run.

To stay in control:

  1. Disable temporary scheduling (so nothing auto-runs).

  2. If you have multiple features enabled, run them separately.

This keeps the blast radius small and makes debugging easier.

Related: Maintenance and Best practices.

chevron-rightCan I export my data to other services?hashtag

Yes. Exporter converts your runtime state into import-friendly CSVs.

It does not write back to providers.

How to use it: Exporter.

chevron-rightWhat are Captures?hashtag

Captures are a local rollback tool.

They capture one provider dataset so you can restore it later.

Details: Captures.

chevron-rightAre Captures a full backup?hashtag

No.

Captures do not include CW config, tokens, or credentials.

They also won’t preserve every provider-side detail (notes, list metadata, etc.).

chevron-rightWhere are Captures stored?hashtag

Captures are written under your /config volume:

/config/snapshots/YYYY-MM-DD/

chevron-rightWhy is my Plex/Emby/Jellyfin capture missing items?hashtag

Captures follow your library whitelists for that feature.

If you whitelist libraries for History/Ratings/Watchlist, the capture includes only those libraries.

Guide: Library Whitelisting.

chevron-rightWhat’s the difference between “Merge” and “Clear + restore”?hashtag

Merge is the safe default. It only adds missing items.

Clear + restore is destructive. It clears the provider dataset first, then restores.

Security and access

chevron-rightShould I expose CW to the public internet?hashtag

No.

Use a VPN or a reverse proxy with authentication.

Security guidance: Disclaimer.

chevron-rightHow do I enable HTTPS?hashtag

Switch the UI protocol to HTTPS, then restart CW.

You can use self-signed certs or mount custom certs.

Steps: HTTPS/TLS.

chevron-rightDo you support reverse proxy and TLS issues?hashtag

Reverse proxy setups and HTTPS/TLS configuration are not in the supported scope.

Issues around proxies, certificates, and the TLS manager get lower priority.

I can’t spend much time debugging these setups. Sorry.

Reference: HTTPS/TLS and Reverse proxies.

chevron-rightCan I install CW as a phone “app”?hashtag

Yes, via PWA install.

You need HTTPS with a trusted certificate (usually via reverse proxy).

Steps: Mobile devices.

Limits and gotchas

chevron-rightDoes CW use a database?hashtag

No. CW stores state as JSON files.

That is simpler, but it caps scale for very large libraries.

Details: About CrossWatch.

chevron-rightCan I connect multiple users or multiple servers?hashtag

Yes.

Use profiles in Settings → Authentication.

Click Profile on a provider to add one.

Each profile is a fully separate connection.

You still need to do the full connect + settings + save flow.

CrossWatch creates the next available PROVIDER-P## ID automatically.

Then pick that profile in:

  • Pairs (source_instance / target_instance)

  • Watcher routes (provider_instance / sink_instance)

Warning: profiles can get complicated fast.

If you delete a profile, also delete or update any pairs/routes that reference it.

Guide: Profiles.

If you want full isolation (separate UI, separate state), run multiple containers.

Rules:

  • Use a different host port per container.

  • Use a separate /config per container.

How-to: Multiple containers (full isolation)arrow-up-right.

chevron-rightWhy is my first run slow?hashtag

Heavy backfills (full history/ratings) can take a long time.

Prefer incremental windows when possible. Ratings reads are not cached.

Details and guidance: About CrossWatch and Best practices.

chevron-rightWhy is my Trakt watchlist missing items?hashtag

Trakt Free has tight list limits (watchlist max 100).

SIMKL Free is more forgiving for large watchlists.

Quick comparison: Trakt vs SIMKL (Free plans).

Last updated

Was this helpful?