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.
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:
- go2rtc authenticates to Wyze’s account API using your
api_id,api_key, and account password. - Wyze returns the per-camera DTLS keys (the
enrparameter), MAC addresses, and device UIDs. - go2rtc opens a direct DTLS connection from the LightNVR host to each camera over your LAN. No more cloud round-trip for video.
- LightNVR consumes each go2rtc stream like any other source — same recording, same browser viewer, same retention rules.
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 v3 | WYZEC1-JZ | 1080p, indoor/outdoor. |
| Wyze Cam v4 | HL_CAM4 | 2K resolution. Budget more upload bandwidth. |
| Wyze Cam OG / OG Telephoto | HL_CAM3P / HL_CAM3PT | Compact form factor, same feature set as v3. |
| Wyze Cam Pan v3 | HL_PAN3 | Streaming works; pan/tilt controls stay Wyze-app only. |
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 accountapi_key— the corresponding key string- Account password — the same password you use in the Wyze app
To get the first two:
- Sign in at developer-api-console.wyze.com with your Wyze account.
- Request a Personal API Key (Wyze emails it to you the first time).
- Copy the Key ID (your
api_id) and the API Key (yourapi_key).
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
- Open your LightNVR Cloud dashboard.
- Navigate to Settings → go2rtc.
- Scroll to the go2rtc Config Override textarea.
- 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
- Click Save. LightNVR validates the YAML and restarts go2rtc with the new credentials.
- 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.
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.
- From Settings → go2rtc, click Show effective config to confirm the override is loaded (your credentials will be shown as
<redacted>). - 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. - For each camera you want to record, copy the suggested URL.
- Back in LightNVR’s dashboard, go to Settings → Streams → Add Stream.
- Give the stream a friendly name (e.g., “Front Door”, “Garage”) and paste the
wyze://URL as the source. - 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.
#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_idandapi_keyat developer-api-console.wyze.com. They’re long strings — copy/paste errors are common. - The
passwordfield 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, yourapi_id/api_keymay 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.