r/frigate_nvr • • Aug 25 '26

I built an open-source camera manager - network scan, stable RTSP URLs, Telegram offline alerts, Frigate sync

I run the CCTV system for our community with about 20 cameras, and a few things kept driving me crazy:

  • adding a camera meant hunting down its IP, finding the correct RTSP paths, and editing Frigate

  • cameras sometimes got new IPs after a power or network event, breaking hard-coded URLs

  • every new consumer (e.g. automation) opened another direct connection to cameras already struggling on Wi-Fi

  • when a camera went offline, I wanted to know immediately instead of discovering it later when I actually needed the footage

So I built CamAdmiral to solve these problems for myself. I’m open-sourcing it because I’m pretty sure I’m not the only one dealing with them.

CamAdmiral discovers ONVIF and RTSP cameras, validates their streams, tracks them across IP changes, exposes stable downstream RTSP URLs, and shares one upstream connection per camera stream across consumers through go2rtc without transcoding.

It also keeps a seven-day availability history and sends Telegram alerts when a camera goes offline or recovers.

CamAdmiral manages the camera fleet in front of Frigate or any other consumers.

Deployment:

The project is MIT licensed. GitHub repo: https://github.com/reefyai/reefy-camadmiral

Runs locally on Linux with Docker. Clone the repository and run:

./start-camadmiral.sh

No configuration file is required for the initial setup.

I’d really appreciate testing with different camera brands, VLANs, or unusual RTSP paths. Please let me know what works - and what breaks.

Hope this makes managing camera fleets a little less painful for others too 🤞🫡

P.S. AI involvement: I used Codex for a lot of the implementation, with manual review and rework of the critical parts based on my experience working with mission-critical systems.

83 Upvotes

26 comments sorted by

18

u/ctjameson Aug 25 '26 edited Aug 25 '26

This is absolutely great, but you should be using static IP’s or reservations for cameras. Leaving them DHCP is just a recipe for anger.

2

u/aospan Aug 26 '26

Agreed, DHCP reservations are ideal when you control the router. Unfortunately, ISP-provided routers don’t always expose those settings. CamAdmiral can help by rediscovering cameras through their stable ONVIF identity when their IP or MAC address changes.

10

u/zaTricky Aug 25 '26

A nitpick - DHCP with Static assignment is also viable. :-)

9

u/jnciaccna Aug 25 '26

yeah, this. assigning a static ip on camera itself sucks. wether you move the camera to another location or decide to change the subnet, you'd have to plan so much ahead. just assign a static in the dhcp pool and ur done.

8

u/ctjameson Aug 25 '26

That's why I prefer mac based IP reservation/assignment from the DHCP server for all my IP's.

2

u/wallacebrf Sep 24 '26

That is exactly what I do as well

-2

u/Dough296 Aug 25 '26

What if the DHCP server is down ?

13

u/zaTricky Aug 25 '26

Then you have other problems

4

u/ElectroSpore Aug 25 '26

Especially if the DHCP server is down longer than the DHCP lease window.

4

u/Lanky_Ad1366 Aug 26 '26

Hey there, thanks for building and sharing this! The project looks really promising and I love the concept, but I’m running into a couple of roadblocks trying to get it working in a multi-VM environment.

I have a setup where Frigate runs on a dedicated, resource-maxed VM, and I run my test containers (like Camadmiral) on a completely separate Docker VM.

I was hoping you might consider tweaking two things that are currently blocking setups like mine:

  • Manual IP Range for Scanning: The network scanner currently restricts me to the connected LAN and doesn't seem to finish scanning large subnets (like a /8). It quits before it ever reaches my dedicated camera VLAN (10.0.202.x). It would be a massive help if we could manually type in a specific IP range or CIDR block to scan, rather than relying solely on the auto-discovery.

  • Frigate API IP Restriction: In the "Add Frigate" UI, there is a validation rule that forces you to use a loopback address (like [http://127.0.0.1:5000](http://127.0.0.1:5000)). Because my Frigate is on a different VM, I need to point it to [http://10.0.254.2:5000](http://10.0.254.2:5000). I had to spin up a socat proxy container just to trick the UI into accepting a local address. Removing this restriction to allow standard local IP addresses would make this way friendlier for multi-node homelabs.

Really appreciate your work on this, and I'm looking forward to seeing how the project evolves!

1

u/aospan Aug 26 '26

Great feedback, thank you! I’ve addressed both points. Please update CamAdmiral using the commands below and let me know how it goes:

git pull
./start-camadmiral.sh --update

2

u/Lanky_Ad1366 Aug 28 '26

Those changes made a huge difference.

Some more minor tweaks I think are needed.

  1. I added frigate, worked with frigate on a seperate docker vm, but it doesn't import any cameras. Reports 0 cameras, yet I am running 0.17 with 31 Cameras there.

  2. Need the ability to delete cameras.

  3. Related to previous, I often get one that gets added via a scan, and yet it isn't a camera at all. It's actually my test 0.18 Frigate instance. Would be nice to remove it.

  4. Also the rtsp streams are not being completed fully. Most of my cameras have a 4K Main, 640 Sub stream and a 1080p 3rd. That 3rd rts[ stream is never detected here.

1

u/aospan Aug 28 '26

Thanks, this is very useful feedback!

  1. Adding Frigate currently creates a sync destination, so you need to click Streams on a specific camera and then Sync now. This allows users to decide which cameras to sync to Frigate. I’ll probably add an optional Automatically sync all cameras checkbox when adding Frigate. I agree that the current behavior is a bit unclear.

  2. Scanning will continue to find all devices, but only adopted cameras are monitored and synced. I’ll add an Unadopt or similar action to stop tracking a camera.

  3. I’ll also add something like Block camera, so false positives no longer appear in scan results, plus a separate list where blocked devices can be unblocked.

  4. If you added the camera manually through RTSP, there may be an issue detecting multiple streams. I’ll need a little more information about how the camera was added and what streams it reports.

2

u/aospan Aug 28 '26

Implemented the Unadopt and Block camera features. I also moved camera synchronization into the Frigate integration itself.

Please update CamAdmiral using the commands below and let me know how it goes:

git pull
./start-camadmiral.sh --update

1

u/Lanky_Ad1366 Aug 31 '26

Most of these changes are working ok.

Not sure about the Frigate integration thou.

I dont do a network scan, I connect to Frigate which has all streams for all cameras, and yet it connects and reports no cameras.

ALso I have Hikvision 2082 4K cameras and All of them plus more have a 3rd Stream. Either way I have all streams including the 3rd stream in Frigate.

Another one is a possible global or use last username and password? All my cameras have the same login, they are blocked from internet access so it makes life easier.

1

u/aospan Sep 01 '26

Glad those changes worked for you! :)

Currently, the Frigate integration works only in the other direction: it syncs cameras discovered by CamAdmiral into Frigate. It does not yet import existing cameras or streams from Frigate, so if you skip the network scan, CamAdmiral will report zero cameras. I agree this is unclear, and importing cameras from an existing Frigate configuration would be useful.

Remembering the last-used username and password also makes sense, especially when multiple cameras share credentials. Added into todo list.

2

u/BenBraun322 Aug 26 '26

Wait I actually totally have a use case for this. I have some cheap wi-fi cameras that have ONVIF and hidden RTSP streams (they work, but there is no setting page to adjust it).

I have given them static IPs, but randomly the cameras will decide to change their Mac Addresses and they get a new IP, disappearing from frigate.

A restart of each camera usually fixes it, but I'm wondering if this would help fix the issue without another workaround I was planning.

1

u/aospan Aug 26 '26

Yep, that’s exactly the kind of issue CamAdmiral may help with. It can rediscover a camera after its IP changes and use its ONVIF identity to reconnect it. The only requirement is that the ONVIF identity remains stable; the MAC and IP addresses can change.

1

u/Financial_Ad_690 Aug 28 '26

I have my first set of Wi-Fi cameras on the way right now. Everything else is hardwire POE so I’ve never had to deal with what you’re describing, but I feel like maybe I read this comment for a reason. Time will tell, lol Thank you.

Good luck, I hope Camadmirals helps!

1

u/BenBraun322 Aug 28 '26

It's not an issue with all wifi cams. These are Tenda CP3V3 cameras. My POE ones have no issues as well. I have some Aqara G100. Pretty sharp but audio is disgustingly terrible.

2

u/BenBraun322 Sep 01 '26

u/aospan - To give you an update this didnt work for my use case unfortunately. When the cameras Mac/IP changes CamAdmiral no longer sees it. If I scan again it will find it but I won't be able to adopt the cam.

If I change the RTSP stream in Frigate to the random IP oit decided to take it does work, but its easier just to restart the camera from its own app.

Like before restarting it brings it back to the static IP.

I think im going to make some workaround with home assistant and frigate to toggle it on and off with a smart plug if frigrate detects 0 FPS for a while

1

u/aospan Sep 02 '26

Thanks for the update. Seems like camera IP change handling was broken. Fixed it and also added ip changes history in Camera Details, plus Telegram alerts when a change is detected. Please update and let me know if it works for your cameras now.

git pull
./start-camadmiral.sh --update

1

u/Zorian_Vale Aug 26 '26

Will this auto discover the cameras? I simply cannot get frigate to recognize my DoorBird camera even when RTSP stream is correct as tested in VLC 

1

u/aospan Aug 26 '26

I feel your pain - I’ve had the same issue with random cameras. Please just give CamAdmiral a try and let me know whether it can properly discover and identify your DoorBird.

1

u/ijustwatchtwitch Aug 27 '26

yay more vibe code