docker-wyze-bridge is a free, open source internet of things (iot) project written in Python and released under AGPL-3.0. It has 3,268 GitHub stars, 295 forks and 376 open issues, and was last pushed 12 days ago. On this registry it ranks #22 of 68 tracked projects in Internet of Things (IoT), with 5 head-to-head comparisons available.

What is docker-wyze-bridge?

docker-wyze-bridge is a Docker-based bridge that turns Wyze camera feeds into local WebRTC, RTSP, RTMP, and HLS/LL-HLS streams for Home Assistant users, self-hosters, and anyone who wants Wyze video without the cloud.

What it is

docker-wyze-bridge is a Python project published as the Docker image mrlt8/wyze-bridge, released under the AGPL-3.0 licence. It creates a local WebRTC, RTSP, RTMP, or HLS/Low-Latency HLS stream for most Wyze cameras — including the outdoor, doorbell, and 2K models — with no modifications, third-party firmware, or special firmware required. Video streams direct from the camera, so it adds no bandwidth cost or subscription, and the bridge exposes a web interface at http://localhost:5050 for managing cameras and streams.

The concrete problem it solves is that Wyze cameras otherwise only reach the internet through Wyze's own cloud and app, which leaves local integrations such as an NVR or Home Assistant without a standard stream to consume. By bridging the cameras to well-known streaming protocols, it gives local software something it can actually play. Since May 2024, setup requires an API Key and API ID obtained from Wyze's support site, and the project warns against forwarding ports or enabling DMZ access to the bridge.

Key capabilities

  • Serves the same camera feed simultaneously as WebRTC, RTSP, RTMP, and HLS or Low-Latency HLS, using ports 8554, 8888, and 5050 in its quick-start command.
  • Works with a long documented camera list: Wyze Cam V1, V2, V3, V3 Pro, V4, Floodlight and Floodlight V2, Pan, Pan V2, Pan V3, Pan Pro, Outdoor, Outdoor V2, and Doorbell and Doorbell V2.
  • Runs without modified or third-party firmware, streaming directly from the camera with no subscription.
  • Provides a built-in web interface at http://localhost:5050, and installs as a Home Assistant / hassio add-on.
  • Captures snapshots with a SNAPSHOT_FORMAT timelapse-style custom format, and prunes them with SNAPSHOT_KEEP (for example SNAPSHOT_KEEP=180, SNAPSHOT_KEEP=72h, SNAPSHOT_KEEP=3d).
  • Publishes to an RTMP livestream destination and supports RESTREAMIO keys for restream.io, for example RESTREAMIO_FRONT_DOOR=re_My_Custom_Key123.
  • Exposes an MQTT topic set and can raise MTX_WRITEQUEUESIZE to handle higher bitrates.

Who uses it and how

  • Home Assistant users deploy it as a hassio add-on so camera streams appear locally in Home Assistant.
  • Self-hosters run it through docker-compose or Portainer alongside their existing NVR stack.
  • Owners of mixed fleets combine several generations — V1 through V4, Pan variants, floodlights and doorbells — behind one bridge.
  • Streamers point it at an RTMP destination or a restream.io key to push a camera feed to a livestream platform.
  • Users keep it isolated on their LAN, given the explicit warning not to forward ports or enable DMZ on the router or firewall.

Getting started

Install Docker and run docker run -p 8554:8554 -p 8888:8888 -p 5050:5000 -e WB_AUTH=false mrlt8/wyze-bridge, then open the web interface at http://localhost:5050.

How it compares

It slots into the Home Assistant and hassio add-on ecosystem alongside MQTT and NVR tooling, and no comparable Wyze streaming bridge is listed in this registry, so it stands alone here.

When to use it — and when not to

You must be willing to supply a Wyze API Key and API ID and to operate the exposed ports yourself, and the bridge's warning about port forwarding and DMZ applies directly to the deployment. It is not a good fit if you want official, cloud-supported local streaming from Wyze, if you refuse third-party bridges, or if you need a polished support channel: the repository carries 376 open issues, which suggests triage may be slow for problems you hit.

project readme (upstream, from github) — read inline

Docker GitHub release (latest by date) Docker Image Size (latest semver) Docker Pulls

WebRTC/RTSP/RTMP/HLS Bridge for Wyze Cam

479shots_so

Create a local WebRTC, RTSP, RTMP, or HLS/Low-Latency HLS stream for most of your Wyze cameras including the outdoor, doorbell, and 2K cams.

No modifications, third-party, or special firmware required.

It just works!

Streams direct from camera without additional bandwidth or subscriptions.

Please consider ⭐️ starring or ☕️ sponsoring this project if you found it useful, or use the affiliate link when shopping on amazon!

[!IMPORTANT] As of May 2024, you will need an API Key and API ID from: https://support.wyze.com/hc/en-us/articles/16129834216731.

[!WARNING] Please double check your router/firewall and do NOT forward ports or enable DMZ access to the bridge unless you know what you are doing!

Wyze Cam V1 Wyze Cam V2 Wyze Cam V3 Wyze Cam V3 Pro Wyze Cam V4 Wyze Cam Floodlight Wyze Cam Floodlight V2 Wyze Cam Pan Wyze Cam Pan V2 Wyze Cam Pan V3 Wyze Cam Pan Pro Wyze Cam Outdoor Wyze Cam Outdoor V2 Wyze Cam Doorbell Wyze Cam Doorbell V2

See the supported cameras section for additional information.

Quick Start

Install docker and run:

docker run -p 8554:8554 -p 8888:8888 -p 5050:5000 -e WB_AUTH=false mrlt8/wyze-bridge

You can then use the web interface at http://localhost:5050 where localhost is the hostname or ip of the machine running the bridge.

See basic usage for additional information or visit the wiki page for additional information on using the bridge as a Home Assistant Add-on.

What's Changed in v2.10.3

  • FIX: Increased MTX_WRITEQUEUESIZE to prevent issues with higher bitrates.
  • FIX: Restart RTMP livestream on fail (#1333)
  • FIX: Restore user data on bridge restart (#1334)
  • NEW: SNAPSHOT_KEEP Option to delete old snapshots when saving snapshots with a timelapse-like custom format with SNAPSHOT_FORMAT. (#1330)
    • Example for 3 min: SNAPSHOT_KEEP=180, SNAPSHOT_KEEP=180s, SNAPSHOT_KEEP=3m
    • Example for 3 days: SNAPSHOT_KEEP=72h, SNAPSHOT_KEEP=3d
    • Example for 3 weeks: SNAPSHOT_KEEP=21d, SNAPSHOT_KEEP=3w
  • NEW: RESTREAMIO option for livestreaming via restream.io. (#1333)
    • Example RESTREAMIO_FRONT_DOOR=re_My_Custom_Key123

What's Changed in v2.10.2

  • FIX: day/night FPS slowdown for V4 cameras (#1287) Thanks @cdoolin and @Answer-1!
  • NEW: Update battery level in WebUI

What's Changed in v2.10.0/v2.10.1

FIXED: Could not disable WB_AUTH if WB_API is set. (#1304)

WebUI Authentication

Simplify default credentials for the WebUI:

  • This will not affect users who are setting their own WB_PASSWORD and WB_API.
  • Default WB_PASSWORD will now be derived from the username part of the Wyze email address instead of using a randomly generated password.
    • Example: For the email address john123@doe.com, the WB_PASSWORD will be john123.
  • Default WB_API will be based on the wyze account for persistance.

Stream Authentication

NEW: STREAM_AUTH option to specify multiple users and paths:

  • Username and password should be separated by a :
  • An additional : can be used to specify the allowed IP address for the user.
    • This does NOT work with docker desktop
    • Specify multiple IPs using a comma
  • Use the @ to specify paths accessible to the user.
    • Paths are optional for each user.
    • Multiple paths can be specified by using a comma. If none are provided, the user will have access to all paths/streams
  • Multiple users can be specified by using | as a separator

EXAMPLE:

STREAM_AUTH=user:pass@cam-1,other-cam|second-user:password@just-one-cam|user3:pass
  • user:pass has access to cam-1 and other-cam
  • second-user:password has access to just-one-cam
  • user3:pass has access to all paths/cameras

See Wiki for more information and examples.

Recording via MediaMTX

Recoding streams has been updated to use MediaMTX with the option to delete older clips.

Use RECORD_ALL or RECORD_CAM_NAME to enable recording.

  • RECORD_PATH Available variables are %path or {cam_name}, %Y %m %d %H %M %S %f %s (time in strftime format).
  • RECORD_LENGTH Length of each clip. Use s for seconds , h for hours. Defaults to 60s
  • RECORD_KEEP Delete older clips. Use s for seconds , h for hours. Set to 0s to disable automatic deletion. Defaults to 0s

View previous changes

FAQ

  • How does this work?
    • It uses the same SDK as the app to communicate directly with the cameras. See kroo/wyzecam for details.
  • Does it use internet bandwidth when streaming?
    • Not in most cases. The bridge will attempt to stream locally if possible but will fallback to streaming over the internet if you're trying to stream from a different location or from a shared camera. See the wiki for more details.
  • Can this work offline/can I block all wyze services?
    • No. Streaming should continue to work without an active internet connection, but will probably stop working after some time as the cameras were not designed to be used without the cloud. Some camera commands also depend on the cloud and may not function without an active connection. See wz_mini_hacks for firmware level modification to run the camera offline.
  • Why aren't all wyze cams supported yet (OG/Doorbell Pro)?
    • These cameras are using a different SDK and will require a different method to connect and stream. See the awesome cryze project by @carTloyal123.

Compatibility

Supports arm32v7 Architecture Supports arm64v8 Architecture Supports amd64 Architecture Supports Apple Silicon Architecture

Home Assistant Add-on Homebridge Portainer stack Unraid Community App

Should work on most x64 systems as well as on most modern arm-based systems like the Raspberry Pi 3/4/5 or Apple Silicon M1/M2/M3.

The container can be run on its own, in Portainer, Unraid, as a Home Assistant Add-on, locally or remotely in the cloud.

Ubiquiti Unifi

[!NOTE]
Some network adjustments may be needed - see this discussion for more information.

Supported Cameras

[!IMPORTANT] Some newer camera firmware versions may cause issues with remote access via P2P. Local "LAN" access seems unaffected at this time. A temporary solution is to use a VPN. See the OpenVPN example.

Camera Model Tutk Support Latest FW
Wyze Cam v1 [HD only] WYZEC1 ✅ 3.9.4.x
Wyze Cam V2 WYZEC1-JZ ✅ 4.9.9.x
Wyze Cam V3 WYZE_CAKP2JFUS ✅ 4.36.11.x
Wyze Cam V4 [2K] HL_CAM4 ✅ 4.52.3.x
Wyze Cam Floodlight WYZE_CAKP2JFUS ✅ 4.36.11.x
Wyze Cam Floodlight V2 [2k] HL_CFL2 ✅ 4.53.2.x
Wyze Cam V3 Pro [2K] HL_CAM3P ✅ 4.58.11.x
Wyze Cam Pan WYZECP1_JEF ✅ 4.10.9.x
Wyze Cam Pan v2 HL_PAN2 ✅ 4.49.11.x
Wyze Cam Pan v3 HL_PAN3 ✅ 4.50.4.x
Wyze Cam Pan Pro [2K] HL_PANP ✅ -
Wyze Cam Outdoor WVOD1 ✅ 4.17.4.x
Wyze Cam Outdoor v2 HL_WCO2 ✅ 4.48.4.x
Wyze Cam Doorbell WYZEDB3 ✅ 4.25.1.x
Wyze Cam Doorbell v2 [2K] HL_DB2 ✅ 4.51.1.x
Wyze Cam Doorbell Pro 2 AN_RDB1 ❓ -
Wyze Battery Cam Pro AN_RSCW ⚠️ -
Wyze Cam Flood Light Pro [2K] LD_CFP ⚠️ -
Wyze Cam Doorbell Pro GW_BE1 ⚠️ -
Wyze Cam OG GW_GC1 ⚠️ -
Wyze Cam OG Telephoto 3x GW_GC2 ⚠️ -

Basic Usage

docker-compose (recommended)

This is similar to the docker run command, but will save all your options in a yaml file.

  1. Install Docker Compose.
  2. Use the sample as a guide to create a docker-compose.yml file with your wyze credentials.
  3. Run docker-compose up.

Once you're happy with your config you can use docker-compose up -d to run it in detached mode.

[!CAUTION] If your credentials contain a $ character, you need to escape it with another $ sign (e.g., pa$$word > pa$$$$word) or leave your credentials blank and use the webUI to login.

[!NOTE] You may need to update the WebUI links if you're changing the ports or using a reverse proxy.

Updating your container

To update your container, cd into the directory where your docker-compose.yml is located and run:

docker-compose pull # Pull new image
docker-compose up -d # Restart container in detached mode
docker image prune # Remove old images

🏠 Home Assistant

Visit the wiki page for additional information on Home Assistant.

Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.

Additional Info

Web-UI

The bridge features a basic Web-UI which can display a preview of all your cameras as well as direct links to all the video streams.

The web-ui can be accessed on the default port 5000:

http://localhost:5000/

See also:

WebRTC

WebRTC should work automatically in Home Assistant mode, however, some additional configuration is required to get WebRTC working in the standard docker mode.

  • WebRTC requires two additional ports to be configured in docker:

      ports:
        ...
        - 8889:8889 #WebRTC
        - 8189:8189/udp # WebRTC/ICE
    
  • In addition, the WB_IP env needs to be set with the IP address of the server running the bridge.

      environment:
        - WB_IP=192.168.1.116
    
  • See documentation for additional information/options.

Advanced Options

All environment variables are optional.

Other Wyze Projects

Honorable Mentions:

Video Streaming:

  • gtxaspec/wz_mini_hacks - Firmware level modification for Ingenic based cameras with an RTSP server and self-hosted mode to use the cameras without the wyze services.
  • thingino - Advanced custom firmware for some Ingenic-based wyze cameras.
  • carTloyal123/cryze - Stream video from wyze cameras (Gwell cameras) that use the Iotvideo SDK from Tencent Cloud.
  • xerootg/cryze_v2 - Stream video from wyze cameras (Gwell cameras) that use the Iotvideo SDK from Tencent Cloud.
  • mnakada/atomcam_tools - Video streaming for Wyze v3.

General Wyze:

Frequently asked questions

Is docker-wyze-bridge free to use?

docker-wyze-bridge is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does docker-wyze-bridge do?

WebRTC/RTSP/RTMP/LL-HLS bridge for Wyze cams in a docker container

What is docker-wyze-bridge written in?

docker-wyze-bridge is primarily written in Python. Its source is publicly available at https://github.com/mrlt8/docker-wyze-bridge, and it has 3,268 GitHub stars.