For the complete documentation index, see llms.txt. This page is also available as Markdown.

Default config values

Reference list of CrossWatch config.json

This page lists the defaults that users actually tune.

It intentionally hides connection fields.

Full schema: Configuration (config.json)

Runtime-generated defaults (good to know)

Some defaults are written on load/save:

  • version is stamped to the running app version (leading v removed).

  • security.webhook_ids.* can be auto-generated if missing.

  • ui._autogen is added on first run only.

Normalization rules are documented in: Configuration (config.json)

Safe global defaults (sync engine)

These are the “don’t surprise me” defaults.

  • sync.enable_add: true

  • sync.enable_remove: false

  • sync.one_way_remove_mode: source_deletes

  • sync.verify_after_write: false

  • sync.dry_run: false

  • sync.drop_guard: false

  • sync.allow_mass_delete: true

  • sync.tombstone_ttl_days: 1

  • sync.include_observed_deletes: true

Blackbox defaults:

  • sync.blackbox.enabled: true

  • sync.blackbox.promote_after: 1

  • sync.blackbox.cooldown_days: 30

  • sync.blackbox.block_adds: true

  • sync.blackbox.block_removes: true

Runtime and performance defaults

These control logging and how writes are chunked.

  • runtime.debug: false

  • runtime.debug_http: false

  • runtime.debug_mods: false

  • runtime.snapshot_ttl_sec: 300

  • runtime.apply_chunk_size: 100

  • runtime.apply_chunk_pause_ms: 50

  • runtime.apply_chunk_size_by_provider.SIMKL: 500

  • runtime.apply_chunk_size_by_provider.MDBLIST: 500

  • runtime.apply_chunk_size_by_provider.PUBLICMETADB: 500

  • runtime.suspect_min_prev: 20

  • runtime.suspect_shrink_ratio: 0.1

Scheduling defaults

  • scheduling.enabled: false

  • scheduling.mode: every_n_hours

  • scheduling.every_n_hours: 12

  • scheduling.daily_time: 03:30

Advanced schedule:

  • scheduling.advanced.enabled: false

  • scheduling.advanced.jobs: []

Scrobble (Watcher) defaults

  • scrobble.enabled: false

  • scrobble.mode: watch

Watcher behavior:

  • scrobble.watch.autostart: false

  • scrobble.watch.pause_debounce_seconds: 5

  • scrobble.watch.suppress_start_at: 99

Progress rules (used by sinks):

  • scrobble.trakt.progress_step: 25

  • scrobble.trakt.stop_pause_threshold: 80

  • scrobble.trakt.force_stop_at: 95

  • scrobble.trakt.regress_tolerance_percent: 5

UI defaults

  • ui.show_watchlist_preview: true

  • ui.show_playingcard: true

  • ui.show_AI: true

  • ui.protocol: http

TLS defaults:

  • ui.tls.self_signed: true

  • ui.tls.hostname: localhost

  • ui.tls.valid_days: 825

Provider tuning defaults

Plex

HTTP:

  • plex.timeout: 10.0

  • plex.max_retries: 3

Workers:

  • plex.rating_workers: 12

  • plex.history_workers: 12

History:

  • plex.history.include_marked_watched: true

  • plex.history.libraries: [] (empty means all)

Ratings:

  • plex.ratings.libraries: [] (empty means all)

Watchlist:

  • plex.watchlist_page_size: 100

  • plex.watchlist_query_limit: 25

  • plex.watchlist_write_delay_ms: 0

  • plex.watchlist_title_query: true

  • plex.watchlist_use_metadata_match: true

  • plex.watchlist_guid_priority: ["tmdb","imdb","tvdb","agent:themoviedb:en","agent:themoviedb","agent:imdb"]

Jellyfin / Emby

HTTP:

  • *.timeout: 15.0

  • *.max_retries: 3

Scrobble library whitelist:

  • *.scrobble.libraries: [] (empty means all)

Watchlist emulation:

  • *.watchlist.mode: favorites

  • *.watchlist.playlist_name: Watchlist

  • *.watchlist.watchlist_query_limit: 25

  • *.watchlist.watchlist_write_delay_ms: 0

  • *.watchlist.watchlist_guid_priority: ["tmdb","imdb","tvdb","agent:themoviedb:en","agent:themoviedb","agent:imdb"]

History:

  • *.history.history_query_limit: 25

  • *.history.history_write_delay_ms: 0

  • *.history.history_guid_priority: ["tmdb","imdb","tvdb","agent:themoviedb:en","agent:themoviedb","agent:imdb"]

  • *.history.libraries: [] (empty means all)

Ratings:

  • *.ratings.ratings_query_limit: 2000

  • *.ratings.libraries: [] (empty means all)

Trakt

HTTP:

  • trakt.timeout: 10

  • trakt.max_retries: 5

Rate limiting:

  • trakt.rate_limit.get_per_sec: 3.33

  • trakt.rate_limit.post_per_sec: 1

Watchlist:

  • trakt.watchlist_use_etag: true

  • trakt.watchlist_shadow_ttl_hours: 168

  • trakt.watchlist_batch_size: 100

  • trakt.watchlist_log_rate_limits: true

  • trakt.watchlist_freeze_details: true

Ratings:

  • trakt.ratings_per_page: 100

  • trakt.ratings_max_pages: 50

  • trakt.ratings_chunk_size: 100

History:

  • trakt.history_per_page: 100

  • trakt.history_max_pages: 10000

  • trakt.history_unresolved: false

  • trakt.history_number_fallback: false

SIMKL

  • simkl.date_from: "" (optional backfill start, YYYY-MM-DD)

Rate limiting:

  • simkl.rate_limit.get_per_sec: 10

  • simkl.rate_limit.post_per_sec: 1

MDBList

HTTP:

  • mdblist.timeout: 10

  • mdblist.max_retries: 3

Rate limiting:

  • mdblist.rate_limit.get_per_sec: 10

  • mdblist.rate_limit.post_per_sec: 1

Watchlist:

  • mdblist.watchlist_shadow_ttl_hours: 0

  • mdblist.watchlist_shadow_validate: true

  • mdblist.watchlist_page_size: 200

  • mdblist.watchlist_batch_size: 100

  • mdblist.watchlist_freeze_details: true

Ratings:

  • mdblist.ratings_per_page: 200

  • mdblist.ratings_max_pages: 50

  • mdblist.ratings_chunk_size: 500

  • mdblist.ratings_write_delay_ms: 600

  • mdblist.ratings_max_backoff_ms: 8000

History:

  • mdblist.history_per_page: 1000

  • mdblist.history_max_pages: 250

  • mdblist.history_chunk_size: 500

  • mdblist.history_write_delay_ms: 600

  • mdblist.history_max_backoff_ms: 8000

PublicMetaDB

HTTP:

  • publicmetadb.timeout: 15.0

  • publicmetadb.max_retries: 3

Rate limiting:

  • publicmetadb.rate_limit.get_per_sec: 20

  • publicmetadb.rate_limit.post_per_sec: 3

Ratings quota:

  • publicmetadb.ratings_submit_per_hour: 200

  • publicmetadb.ratings_update_per_hour: 100

Watchlist:

  • publicmetadb.watchlist_name: Watchlist

  • publicmetadb.watchlist_auto_create: true

  • publicmetadb.watchlist_page_size: 100

History and progress:

  • publicmetadb.history_per_page: 100

  • publicmetadb.history_max_pages: 1000

  • publicmetadb.progress_per_page: 100

  • publicmetadb.progress_max_pages: 1000

Ratings:

  • publicmetadb.ratings_label: Overall

TMDb metadata

  • metadata.locale: en-US

  • metadata.ttl_hours: 6

TMDb (Sync)

  • tmdb_sync.timeout: 15.0

  • tmdb_sync.max_retries: 3

Tautulli (history import)

HTTP:

  • tautulli.timeout: 10.0

  • tautulli.max_retries: 3

History paging:

  • tautulli.history.per_page: 100

  • tautulli.history.max_pages: 5000

CrossWatch (local provider)

  • crosswatch.root_dir: /config/.cw_provider

  • crosswatch.enabled: true

  • crosswatch.retention_days: 30

  • crosswatch.auto_snapshot: true

  • crosswatch.max_snapshots: 64

  • crosswatch.restore_watchlist: latest

  • crosswatch.restore_history: latest

  • crosswatch.restore_ratings: latest

Last updated

Was this helpful?