← All How-To Guides
Cameras

How to Connect Wyze Cameras to LightNVR Cloud

Drop your Wyze account credentials into the go2rtc config override, click Suggest, and LightNVR auto-discovers every camera on your account — streaming directly from the cameras over your LAN, not relayed through Wyze's cloud.

6 min read Difficulty: Beginner

1. Why Wyze + LightNVR Cloud

Wyze cameras are the most popular consumer IP cameras in the US — cheap, well-built, easy to install. Their downside has always been the cloud-only recording model: 12-second motion clips, 14-day deletion, recurring Wyze Cam Plus fees for anything more.

LightNVR Cloud changes that without asking you to flash third-party firmware. Drop your Wyze account credentials into LightNVR’s go2rtc config override and LightNVR pulls every Wyze camera on your account into the dashboard as a first-class stream — continuous recording, full quality, your retention.

What you get:

  • Continuous recording — not 12-second clips
  • Off-site storage — footage survives if the camera is stolen or destroyed
  • No Wyze Cam Plus subscription
  • No firmware reflash — stock Wyze app keeps working alongside LightNVR
  • Direct LAN streaming — video flows camera → LightNVR; Wyze’s cloud only authenticates the initial handshake
  • Mixed-brand support — record Wyze, Reolink, and Amcrest cameras side-by-side in one dashboard

2. How the go2rtc bridge works

LightNVR embeds go2rtc, which speaks a native wyze:// source protocol. When you save your Wyze account credentials in the go2rtc config override, here’s what happens at startup:

  1. go2rtc authenticates to Wyze’s account API using your api_id, api_key, and account password.
  2. Wyze returns the per-camera DTLS keys (the enr parameter), MAC addresses, and device UIDs.
  3. go2rtc opens a direct DTLS connection from the LightNVR host to each camera over your LAN. No more cloud round-trip for video.
  4. LightNVR consumes each go2rtc stream like any other source — same recording, same browser viewer, same retention rules.
Wyze’s cloud is only touched once at startup to fetch keys. After that, the video stream is LAN-only — cameras work even if Wyze’s servers are down or if you block the cameras at your router. Your Wyze account password sits in override.yaml on the LightNVR host (mode 0600, redacted in API responses).

3. Supported Wyze models

The go2rtc wyze:// source works with the cameras Wyze exposes through its account API. Verified models:

Model Wyze model code Notes
Wyze Cam v3WYZEC1-JZ1080p, indoor/outdoor.
Wyze Cam v4HL_CAM42K resolution. Budget more upload bandwidth.
Wyze Cam OG / OG TelephotoHL_CAM3P / HL_CAM3PTCompact form factor, same feature set as v3.
Wyze Cam Pan v3HL_PAN3Streaming works; pan/tilt controls stay Wyze-app only.
Wyze keeps adding models to their API. If your camera works in the Wyze app, the Suggest button in section 6 is the fastest way to find out whether it’s bridgeable — it shows everything go2rtc could enumerate from your account.

4. Get your Wyze API credentials

Wyze provides developer API credentials separate from your account password. You need three values:

  • api_id — a UUID issued per developer account
  • api_key — the corresponding key string
  • Account password — the same password you use in the Wyze app

To get the first two:

  1. Sign in at developer-api-console.wyze.com with your Wyze account.
  2. Request a Personal API Key (Wyze emails it to you the first time).
  3. Copy the Key ID (your api_id) and the API Key (your api_key).
Treat these like a password. They give full read access to every camera on your Wyze account. LightNVR stores them in override.yaml with mode 0600 on the host and redacts them in any API or preview response — but they still appear in plain text inside the override editor. Don’t paste the override into a public issue.

5. Configure the go2rtc override

  1. Open your LightNVR Cloud dashboard.
  2. Navigate to Settings → go2rtc.
  3. Scroll to the go2rtc Config Override textarea.
  4. Paste this block, swapping in your three values from section 4:
wyze:
  api_id: YOUR_WYZE_API_ID
  api_key: YOUR_WYZE_API_KEY
  password: YOUR_WYZE_ACCOUNT_PASSWORD
  1. Click Save. LightNVR validates the YAML and restarts go2rtc with the new credentials.
  2. The Settings page will show a green confirmation when go2rtc comes back up with your override merged in. If validation fails, you’ll see a line/column pointer instead — nothing is saved.
Don’t list any cameras yet. Auto-discovery (next section) is the easy way — and avoids the per-camera enr, mac, and uid parameters you’d otherwise have to look up manually.

6. Auto-discover your cameras

With your credentials saved, go2rtc can enumerate every camera on your Wyze account.

  1. From Settings → go2rtc, click Show effective config to confirm the override is loaded (your credentials will be shown as <redacted>).
  2. Open the go2rtc web UI (linked from the Settings page) and click Suggest — go2rtc returns one entry per Wyze camera, with a fully-formed wyze://...?dtls=true&enr=...&mac=...&model=...&uid=... URL.
  3. For each camera you want to record, copy the suggested URL.
  4. Back in LightNVR’s dashboard, go to Settings → Streams → Add Stream.
  5. Give the stream a friendly name (e.g., “Front Door”, “Garage”) and paste the wyze:// URL as the source.
  6. Click Save. The stream goes live and recording begins within ~10 seconds.

A discovered URL looks roughly like this (redacted):

wyze://10.0.1.242?dtls=true&enr=<encrypted-key>&mac=2CAA8E1460B5&model=WYZEC1-JZ&uid=11D6C733WYJZC2LA111A

You can also paste a wyze:// URL directly into the override streams: block if you prefer a config-as-code approach — both routes produce identical results. The override side wins if the same name appears in both.

7. Tuning: hardware decode + audio

Wyze streams arrive as H.264 video with AAC audio over DTLS. Most browsers play them fine out of the box, but you may want to layer ffmpeg passthrough shims for two reasons:

  • Hardware-accelerated decode on the LightNVR host (lower CPU)
  • Codec compatibility for older WebRTC implementations

This pattern works inside your override streams: block:

streams:
  wyze_frontdoor:
    - wyze://10.0.1.242?dtls=true&enr=...&mac=...&model=WYZEC1-JZ&uid=...
    - ffmpeg:wyze_frontdoor#audio=aac
    - ffmpeg:wyze_frontdoor#video=h264#hardware

go2rtc treats the first entry as the primary producer; the ffmpeg: entries are derived re-encodes of the same stream — #audio=aac exposes an AAC track for clients that need one, #video=h264#hardware uses GPU acceleration where available (VAAPI on Intel, NVENC on Nvidia, V4L2-M2M on Pi/RK35xx). The original wyze:// source keeps running untouched.

The #hardware flag only takes effect if the LightNVR host actually has a compatible accelerator. On a vanilla VM it silently falls back to software encode — same result, higher CPU. Check the go2rtc log after restart to confirm which path it picked.

8. Troubleshooting

Suggest returns nothing / authentication fails

  • Re-check your api_id and api_key at developer-api-console.wyze.com. They’re long strings — copy/paste errors are common.
  • The password field is your Wyze account password, not your API key. Easy to mix up.
  • If you have two-factor authentication on your Wyze account, you may need a one-time app password from the Wyze developer console.
  • Click Show effective config to confirm your override actually parsed — if you see wyze: with a redacted block in the rendered output, the credentials are loaded.

Camera shows up in Suggest but stream doesn’t connect

  • The camera must be reachable from the LightNVR host on the LAN. If your LightNVR runs off-site, you’ll need a WireGuard tunnel back to the camera’s network.
  • Make sure the camera is plugged in and online in the Wyze app first.
  • Reserve a static IP for the camera on your router — Wyze DTLS keys are tied to the IP go2rtc sees at startup. DHCP reshuffles break the stream.

Stream works for hours then dies

  • Wyze DTLS keys (enr) rotate periodically. go2rtc handles re-keying automatically using your stored credentials — if it’s failing, your api_id/api_key may have been revoked. Regenerate them in the Wyze developer console.
  • Weak Wi-Fi causes more reconnects than Ethernet. The Wyze cam v3’s antenna is mediocre — move it closer to your access point if you see frequent gaps.

I want to keep using the Wyze app

You can. The Wyze app talks to the camera through Wyze’s relay; go2rtc connects directly over the LAN. Both paths run simultaneously without interference.

I want to rotate / revoke credentials

  • Regenerate the API key at developer-api-console.wyze.com.
  • Update the override and click Save. LightNVR restarts go2rtc with the new credentials in place.
  • If you’re changing the Wyze account password too, update both fields in the same save — otherwise authentication fails between the password change and the override edit.