UAPFinder

Set up a sky camera

The capture service watches the night sky through a network camera on your own computer and records only what moves. It runs entirely on your machine — once it is signed in to your UAP Finder account, the phone app can find it.

Copy the reference build

The channel's own camera, exactly. Nothing about it is special — it is the combination that is known to work, so if you would rather not choose, choose this.

  1. Buy a Reolink CX820. A 4K outdoor camera that sees in colour at night. It is powered over its Ethernet cable (PoE), so if your router has no PoE ports you also want a small PoE injector or switch. Any Reolink model with RTSP will do; this is the one the reference camera runs.
  2. Mount it pointing straight up at the biggest patch of open sky you have — a fence post, a wall bracket, the edge of a roof. Keep trees and eaves out of the frame where you can; what you cannot avoid, you mask later in one click.
  3. Plug it into the same network as a Windows PC that stays on overnight, and set its camera-side options as listed two panels down (clock overlay off, spotlight off, RTSP on).
  4. Paste one line into PowerShell on that PC — it is under Install it in one step below. It asks for the camera's address and password, installs everything, and starts watching at dusk.
  5. Sign in on the camera's own page when it opens, with the same account you use in the phone app. That is the pairing: your captures appear in the app and, if you choose to share them, on the map.

What you need

  • A Windows PC that stays on overnight, ideally wired rather than on Wi-Fi.
  • An RTSP network camera pointed at the sky. Anything exposing a main and a sub stream works — the sub stream feeds detection, the main stream is recorded. Reolink models are what this was built and tested against (a CX820 runs the reference camera).
  • FFmpeg — the service uses it to decode and record. The one-step installer below installs it for you; by hand, winget install Gyan.FFmpeg.
  • Disk space. Clips are full quality. Budget tens of gigabytes and let retention reclaim the rest.

Set the camera up first

Five minutes in the camera's own settings saves far more later — the detector sees whatever the camera shows it, including things you stop noticing yourself.

  • Turn off the on-screen clock and any text overlay. A burned-in timestamp changes every second, and a detector cannot tell that from a light moving. Ours chained events all night before we spotted it.
  • Turn off the spotlight and any IR flood aimed into the sky.
  • Fix the exposure if the camera lets you. Auto-exposure hunting reads as the whole frame changing at once.
  • Enable RTSP and note the username and password. Give the camera a static address or a DHCP reservation so it does not move.
  • Aim it at open sky. Trees at the edge of frame are the single largest source of false detections — branches move all night in any breeze.

Install it in one step

Open PowerShell on the PC that will run the camera (no need to run it as administrator - the script asks for that itself) and paste:

irm https://uapfinder.com/install.ps1 | iex

You do not need an account to install. The script downloads the service from the same public release feed every installed camera updates itself from, and checks the download against the SHA-256 that feed publishes before it unpacks anything. The account comes afterwards: signing in on the dashboard is what pairs the camera to you.

What it asks, and what it does

It asks four things, each with a default you can accept:

  • The camera's address, user and password (RTSP). Leave the address blank to fill it in on the dashboard instead, where Test connection tells a wrong password apart from a wrong address.
  • Where captures go. Default C:\ProgramData\UAPFinder\captures; pick a drive with tens of gigabytes free.
  • Schedule: Night (only while the sun is below the horizon at the camera - needs the location you set from your phone afterwards, and captures continuously until it has one) or Always.

Then it:

  • relaunches itself as administrator - installing a Windows service needs that;
  • installs FFmpeg with winget if it is missing, and writes its full path into the camera's config (a service does not see your PATH);
  • downloads the latest release, verifies the SHA-256, and unpacks it to C:\UAPFinder\svc;
  • registers the UAPFinderCapture service - starts with Windows, restarts if it crashes - allows its two ports through Windows Firewall (your PC's own firewall; nothing on your router changes), and puts a UAP Finder Camera shortcut on your desktop;
  • writes your answers to appsettings.Local.json - once. Running the script again upgrades the service in place and never rewrites that file, so your camera login, location and account link survive every upgrade;
  • opens the dashboard at http://localhost:5199 and prints what to do next.

Unattended installs pass the answers as parameters instead of being asked - -CameraHost, -CameraUser, -CameraPassword (a SecureString keeps it out of your history), -CapturesDir, -Schedule, -NoBrowser. iex cannot take arguments, so bind the text to a script block: & ([scriptblock]::Create((irm https://uapfinder.com/install.ps1))) -CameraHost 192.168.1.50 .... -DryRun prints the plan and changes nothing. The script is plain text you can read first; it carries no secrets and nothing about any particular machine.

After it finishes

  1. If you left the camera address blank: in the dashboard's Camera panel, fill in the address, username and password, press Test connection, then save. Capture starts on its own within about half a minute.
  2. In the Account panel, sign in with the same UAP Finder account you use on this site. That is the entire pairing step - no codes, no port numbers, nothing to copy across. Signing in shares nothing publicly.
  3. Set the camera's location from the phone app (My Cameras) or from your cameras on this site - both have a use this device's location button. The position is what lets the software say which satellites and aircraft were overhead, and when night begins where you are. Your exact coordinates never leave your machine - the public map only ever shows a deliberately blurred location.
  4. On the dashboard, set the mount's aim and paint ignore zones over anything that is not sky. Both need the picture in front of you, so they live there and only there (more below).

The manual route

If you would rather not run a script from the internet, or you are building from source, the same result by hand:

Sign in to download the zip - or take the latest package from the public release feed, which needs no account (the manifest names the zip and its SHA-256).

  1. Install FFmpeg: winget install Gyan.FFmpeg. Requires the .NET 10 runtime too; if it is missing, Windows offers it on first run, or winget install Microsoft.DotNet.Runtime.10.
  2. Unzip the package somewhere permanent, for example C:\UAPFinder\svc.
  3. Right-click PowerShell, Run as administrator, then run .\install-service.ps1 from that folder. It registers the service, sets it to start automatically and restart on failure, puts the UAP Finder Camera shortcut on your desktop, and allows the two ports through Windows Firewall.
  4. Open the dashboard from that shortcut - it lives at http://localhost:5199. It comes up before you have a camera and says so; nothing is wrong, it is waiting for you. Then follow After it finishes above. Set Camera:FfmpegPath / FfprobePath to FFmpeg's full path in appsettings.Local.json if the dashboard reports it cannot find ffmpeg - a service does not see your PATH.

Tune it on the first clear night

Defaults are deliberately cautious. Two settings decide whether you wake up to a handful of real captures or a thousand pieces of noise.

  1. Set the schedule to Night. Capture pauses until the sun is well below the horizon. Left on Always, a camera films drifting cloud all afternoon.
  2. Mask anything that isn't sky. The dashboard's ignore zones blank a region from detection only — recordings are untouched. Cover treetops, roof lines, and any corner where foliage intrudes. On the reference camera this alone cut events from roughly a thousand a night to under a hundred.
  3. Star-calibrate the aim when you have a clear night. The dashboard lists which bright stars are up; click three or more in the live view and solve. Everything downstream — satellite matching, aircraft matching, the "is that just Vega?" check — inherits the accuracy of that aim.

Then, on your phone

Sign in to the app with the same account and open ⋯ → My Cameras. Your camera appears by name.

You do not need to open a port, forward anything, or enable UPnP. On your home Wi-Fi the app talks to the camera directly, which is fastest and keeps the video on your own network. From anywhere else it falls back to a relay: your camera holds an outgoing connection to this site, and requests travel back down that. Nothing on your home network listens for incoming connections, so there is nothing to expose — and it works even if your internet provider puts you behind shared carrier addressing, where port forwarding cannot work at all.

What is and isn't shared

Signing the camera in only makes it discoverable by you. Publishing sightings to the public map is a separate switch that stays off until you turn it on.

On your home network, video goes straight from your camera to your phone and never touches this site. Away from home it necessarily passes through it, because that relay is what removes the need to open your network — those bytes are held only long enough to reach your phone and are not added to the public archive. If you would rather that never happen, watch clips at home; the app always prefers the direct path when it can reach the camera.

Something went wrong. Reloading usually fixes it. Reload 🗙