1 First login & what you'll see
Open /console and enter your 6-digit business PIN — the one you were given when your business was set up. Each business has its own; it's never a file you edit.
Once you're in, four tabs run the show:
- Overview — home base: the day's decide list, at a glance.
- Live — the camera grid, every feed at once.
- Situations — past activity grouped for review.
- Setup — cameras, hours, Telegram, sensitivity — everything below lives here.
A state lamp reads one of three ways: STANDING WATCH (armed, all quiet), INCIDENT (something happened), or OFF DUTY (you're open, detection paused).
Two things point you toward setup: a "Finish setup (N/7)" button that resumes the console's own wizard exactly where you left it, and a Protection Status banner (more in §7). This guide explains the setup, but the console is the source of truth — Protection Status and readiness reflect live server state, not this page.
🔐 Five wrong PIN attempts locks the login for a minute — that's on purpose.
2 Add a camera
In Setup → Cameras, you add a camera, then confirm it's live — the wizard shows you a snapshot so you know the stream address actually works before you move on. Give each camera a name you'd recognise at 3am ("Back door", not "cam2"), and its stream address:
- rtsp://user:pass@192.168.1.50:554/stream1 — most CCTV cameras and NVRs. Find the exact path in your camera's manual or app (search "your camera model RTSP URL").
- http://…/video.mjpg — MJPEG network cameras.
- 0 — a USB webcam plugged into the guard's computer.
Using an NVR, phone app, or restreamer? If a camera won't stream to Vigil directly, run a local bridge (MediaMTX, go2rtc, Frigate, Blue Iris, Agent DVR, or a phone IP-webcam app) that re-exposes it as a local rtsp:// or MJPEG URL, then add that URL under Setup → Cameras → Advanced → Connect via a local bridge. The bridge runs on your side and Vigil reads its local stream; Vigil doesn't install or manage the bridge. Cloud-only cameras aren't supported directly — Vigil doesn't use the vendor cloud — but many still work once they can produce a local stream.
Once added, the camera is available to the guard; arming and your alert settings control when alerts are sent — adding a camera doesn't by itself put it on alert.
Testing without a real feed? A YouTube or other demo URL is rejected unless you tick "This is a demo source" — and even then, it won't send real alerts unless you separately enable demo alerts. That's deliberate: demo footage should never be able to page you or a customer by accident.
3 Protect a zone (optional)
Draw a zone over a place no one should be after hours — the till, a stockroom, the fire exit. Anyone who steps into it is treated as an intrusion on sight — escalated even from a single glimpse on poor footage. The rest of the frame is still watched exactly as before; the zone just draws a hard line around the spot that matters most.
4 Connect your phone
Alerts arrive through your own Telegram bot — there is no shared bot we provide. You bring it from @BotFather: send /newbot, give it a name, and BotFather hands you a token.
In the console, the fastest path is "Set up alerts — guided (60s)":
- Paste the token, then press "Verify & continue" — the console checks the token with Telegram right there, so a bad token is caught immediately and a typo can't silently overwrite a working one.
- Press "Open my bot & pair ↗" (or send /start <code> to your bot yourself). The pairing code shown in the console is deliberately different from your login PIN, so a paired chat can never log into your console.
- Press "Send my test alert" — this is how you know alerts reach your phone, before you ever rely on it for real.
Pair the manager's phone too if you like; everyone paired gets every alert. Send /status any time for an instant "armed / cameras online / open incidents" check.
5 Set your hours & arming
The guard arms itself the moment you close and stands down when you open. Setup → Opening hours:
- Set open and close per day. Closing after midnight works — open 18:00, close 02:00 means the guard takes over at 2am.
- Tick closed for days you don't open — the guard watches all day.
- Need an exception? Arm now / Disarm 1 hour in the top strip override the schedule; Follow schedule puts it back.
🧹 Cleaner comes at 6am? Either schedule around it, or expect an alert and tap ✅ All clear — the guard doesn't know faces, only people.
6 When an alert arrives
A person confirmed on camera while you're closed sends a photo with the person boxed, the camera name, time, and confidence. Two buttons:
- ✅ All clear — it's the cleaner / it's handled. Closes the incident and tells everyone paired.
- 🚨 Escalate — marks it escalated and pings every paired phone. Evidence is already saved for the police report.
A close-up follow-up photo is sent to your phone right after — a face crop (or the top of the person if the face isn't clear). When a vehicle is visible, a plate crop is also captured and saved as extra evidence in the console — it isn't sent as a phone alert.
You won't get spammed: after an alert, the same camera stays quiet for 5 minutes — repeat sightings extend the incident instead of re-buzzing your phone. A camera that goes dark while armed sends its own warning, and a recovery note when the camera comes back.
7 Staying protected
The Protection Status banner is the honest answer to "are alerts actually working right now." If everything is working, the banner stays out of your way.
Two states worth knowing:
- A blue "Finish setup to start guarding" — setup isn't complete yet.
- A red "Coverage gap — an alert would not reach you right now" — for example an unverified bot token, no paired phone, or a camera offline.
Either one comes with a Fix button that jumps straight to the thing that needs attention.
8 Detection & alerts
Start with the recommended starting values; adjust only if alerts are too noisy or too quiet.
Setup → Detection:
- Minimum confidence (0.55) — raise it if you get false alarms (reflections, posters); lower it if it misses people far from the camera.
- Consecutive frames (2) — how many frames in a row must show a person. 2 kills single-frame ghosts; higher is stricter but slower to alert.
- Quiet period per camera (300s) — how long a camera stays quiet after an alert before it can send another.
Setup → Alerts also has a threshold: Every person (the default), Elevated & up, or Urgent only. These numbers are recommended starting values, not magic — change one thing at a time and see what it does to your alert volume.
9 Where your footage goes
No cloud recording — Vigil never stores your footage. Footage from cameras on your own network stays on your premises; a camera connected through the Vigil Connector has its live video relayed to Vigil for processing, never recorded. Alert photos are sent to Telegram. If AI scene understanding is enabled, one best frame may be sent to the AI provider.
10 Troubleshooting
- Camera shows offline — check the URL works in VLC (Media → Open Network Stream), the camera is on the same network as the guard, and credentials are in the URL. The guard retries on its own.
- No Telegram messages — open Setup → Telegram: is your chat shown as paired? Pairing uses the pairing code there (/start CODE), which is not your console login PIN.
- Alerts while you're open — check the schedule matches reality, and that no Arm now override is stuck (top strip → Follow schedule).
- Not sure it's watching — send /status, or check the Protection Status banner and press Fix.
🕐 Running in Docker? Set the TZ environment variable to your local timezone — the schedule runs on local time.