Skip to content

Environment Bootstrap Config

The web UI is the primary configuration surface for DVR servers. Use this page only when you need a headless or compose-managed bootstrap path.

Path Status Use it when
First-run wizard and Settings UI Recommended Use the first-run connection test, then manage saved servers in Settings.
CHANNELS_DVR_SERVERS Supported with limits Seed a fresh install with DVRs that do not need API keys. Read the override behavior below.
/config/settings.json Supported with care You manage config files directly and can keep valid JSON plus backups.
CHANNELS_DVR_HOST and CHANNELS_DVR_PORT Legacy compatibility You are carrying an older single-DVR install forward. These still work with startup warnings.
CW_DVR_<N>_* Deferred Do not use in v1.6.5.
/config/dvrs.yaml Deferred Do not use in v1.6.5.

CHANNELS_DVR_SERVERS accepts comma-separated entries in this form:

Name@host:port,Name@host:port

Example:

services:
channelwatch:
image: coderluii/channelwatch:1.6.5
container_name: channelwatch
init: true
network_mode: host
volumes:
- /opt/channelwatch:/config
environment:
TZ: "America/New_York"
CHANNELS_DVR_SERVERS: "Living Room@192.168.1.10:8089,Basement@192.168.1.20:8089"
restart: unless-stopped

On a fresh /config directory, the container entrypoint writes these entries to settings.json. Use Settings > General > DVR & App to confirm they were saved.

After confirming the saved entries, remove the DVR bootstrap variables from Compose and apply that Compose change with docker compose up -d. This recreates the service to change its environment; keep the same /config mount. Normal compatible in-app updates do not require this step.

Entries matching an existing host and port retain its ID and overrides. Other saved DVRs are kept. Use stable hostnames or IP addresses, and check notification routing if you replace an entry. The environment format has no API-key field; use the first-run manual form for a DVR that requires one.

Older compose files may contain:

environment:
CHANNELS_DVR_HOST: "192.168.1.10"
CHANNELS_DVR_PORT: "8089"

Those variables remain for compatibility and carry the same override caveat. Confirm the server is saved in Settings before removing them. For a new install, prefer the first-run wizard.

For a one-DVR compose file, the replacement is:

environment:
CHANNELS_DVR_SERVERS: "Main@192.168.1.10:8089"

If you manage /config/settings.json yourself, make a backup first and keep the JSON valid:

{
"dvr_servers": [
{
"id": "dvr_17c621dc",
"name": "Living Room",
"host": "192.168.1.10",
"port": 8089,
"enabled": true,
"api_key": "",
"overrides": {},
"deleted_at": null
}
]
}

This is an excerpt, not a replacement for your complete settings file. Preserve unrelated fields and existing IDs. Do not replace encrypted key values with empty strings.

The web UI validates values before saving and restarts the monitoring core. For a manual file change, follow Hot Reload and verify the DVR appears in Settings and connects on the dashboard.

Do not use these in ChannelWatch v1.6.5:

environment:
CW_DVR_1_NAME: "Living Room"
CW_DVR_1_HOST: "192.168.1.10"
CW_DVR_1_PORT: "8089"

The v1.6.5 app changelog lists CW_DVR_<N>_* and /config/dvrs.yaml as deferred. If you see those names in older references, do not treat them as the shipped runtime startup path for this release.

The Helm chart is single-replica only in v1.6.5 and stores writable state under /config. Use Install (Kubernetes / Helm) for the chart values and keep secrets in Kubernetes Secrets. Do not assume the chart has a dedicated dvrs values block for CW_DVR_<N>_* or /config/dvrs.yaml.