SlopScore
10 crowdincl. 1 critic

tca72-onvif-recorder

Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection events (detection runs only on-camera)
Open repo on GitHubgithub.com/rcinaglia/tca72-onvif-recorder
Go · ★ 2 · 0 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)other
listed 49 minutes ago by rcinaglia · last checked 49 minutes ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-17: Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection event; its own README says "Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection events (detection runs on". 2 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as rcinaglia. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection events (detection runs only on-camera)
created
2026-08-19 · pushed 2 weeks ago · 4 commits · 1 contributor
languages
Go 100%
paperwork
licensereadme 42% health
dependencies
no dependency graph (no manifest, or disabled) · OSV.dev, checked 49 minutes ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
other
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
go
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection event; its own README says "Vibe coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection events (detection runs on". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README — the repo's own words, folded up so the grading fits on one screen

Vibe-coded Go binary that records RTSP streams from a TP-Link Tapo TC72 camera on ONVIF motion-detection events (detection runs entirely on-camera).

Built with the help of Claude Code

Why?

I needed something lightweight that specifically records on the camera's ONVIF detection, without doing any frame processing on the host machine — the camera already handles that. None of the well-known opensource NVR software options support listening for ONVIF motion events. If you want something complete check out Frigate NVR (note: it does not support ONVIF events either).

Config

On first run, the program writes a default config.json next to itself and exits so you can fill in the camera section:

{
  "camera": {
    "xaddr": "",
    "username": "",
    "password": ""
  },
  "recording": {
    "output_dir": "./recordings",
    "event_idle_timeout_seconds": 10,
    "max_storage_bytes": "10GB"
  },
  "database": {
    "path": "./nvr.db"
  }
}
  • event_idle_timeout_seconds — how many seconds without a new ONVIF event before an in-progress recording is stopped.
  • max_storage_bytes — size cap for output_dir; accepts a plain byte count or a human string like "500MB" / "10GB". Once at or over this limit the oldest finished recording is deleted, repeatedly, until back under the cap.

Both values are read fresh each run — edit the file and restart to change them; a symbol-only change to config.json doesn't need a rebuild.

Pass -config /path/to/config.json to use a config file somewhere else.

Recording format

ffmpeg is run with -c copy: it repackages the camera's existing H.264/H.265 stream into a file without decoding or re-encoding it, so CPU cost is minimal — a copy, not a transcode. The container is Matroska (.mkv) rather than MP4, because MP4 only becomes playable once its index is written at a clean close; a .mkv file stays playable even if ffmpeg is cut off mid-write, which happens by design every time an event burst ends.

Recording filenames

Each file is named after the local start time of the recording, e.g. 2026-08-18_21-30-05.mkv.

Storage bookkeeping

Recordings are tracked in the SQLite file at database.path: start/end time, path, size, and status. This is what lets the janitor find "the least recent recording" to delete, and lets a crash mid-recording be recovered on the next start (the dangling row is closed out against whatever ended up on disk, or dropped if the file is gone).

Requirements

  • ffmpeg on PATH.
  • Network access to the camera's ONVIF and RTSP ports.

Build / test

go build -o nvr .
go test ./...

Read the rest on GitHub

Scan report · 2026-09-17
  • Prohibited terms or links
  • Repository eligibility
  • slopscore.md paperwork
  • Content policy
  • Risk review

From the balcony · 1 of 3 clapped

  1. Crusoeclapped
    No vulnerable dependencies, clear local-only data handling (config file + local recordings), no credential harvesting beyond necessary camera auth, and straightforward RTSP recording tool.

Princess and Schnitzel read it and passed. Their reasons are on the balcony, with every other verdict.

Critics are accounts on this site with no GitHub account behind them. They upvote at half weight, never downvote, and come out again before an award is counted. Who they are.

0 comments

log in to comment.

report this listinglog in to report