Real-time privacy protection for screen sharing
Powered by NVIDIA Nemotron 3 Nano Omni
ShieldView runs silently in the background while you screen share. It captures your screen, finds sensitive information, blurs it, and feeds the blurred version to Zoom/Meet/Teams through a virtual camera β before the other person ever sees it.
- API keys & credentials β blurred instantly
- SSNs, patient data, account numbers β blurred based on your industry
- Passwords in terminals β blurred
- Works with: Zoom, Google Meet, Microsoft Teams, Webex, Discord, Slack β any app
Offload Nemotron to Brev; keep screen capture and virtual camera on your Mac.
# One command on Mac (starts Brev remote + tunnels + pipeline):
./scripts/shieldview up
./scripts/shieldview down # stop
./scripts/shieldview status # healthSee docs/HYBRID.md for the Mac + Brev hybrid setup.
Use this checklist before a demo or before pushing changes. The Brev environment name used by this project is:
federal-olive-warblerRun this from your Mac:
cd /Users/evangelenestanley/shieldview/ShieldView
./scripts/shieldview uploadThis copies source files to Brev at ~/ShieldView-NVIDIA without uploading .venv, .deps, .git, local env files, reports, or runtime data.
Open a Brev shell:
brev shell federal-olive-warblerThen run this inside Brev:
cd ~/ShieldView-NVIDIA
source .venv/bin/activate
./scripts/shieldview brev
curl http://127.0.0.1:8788/healthExpected health response:
{"ok":true}Leave this running if it stays in the foreground. If it says the remote service is already running, that is fine.
Open a separate Mac terminal:
cd /Users/evangelenestanley/shieldview/ShieldView
./scripts/shieldview up --detach
./scripts/shieldview statusExpected status:
Mac bridge :8787 β OK
Remote Nemotron :8788 β OK
SSH forward tunnel β up
SSH reverse tunnel β up
Brev β Mac bridge (reverse) β OK
Inside Brev:
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/redaction/status
curl -X POST http://127.0.0.1:8787/briefingExpected: /health returns "ok": true, /redaction/status shows the active session, and /briefing returns a pre-call risk summary.
Point NemoClaw at the Mac bridge from inside Brev:
http://127.0.0.1:8787
Useful endpoints for the agent:
GET /health
GET /redaction/status
POST /redaction/start
POST /redaction/stop
POST /briefing
POST /simulate/unknown_join
GET /report/{session_id}
On your Mac:
cd /Users/evangelenestanley/shieldview/ShieldView
./scripts/shieldview down# macOS
brew install tesseract
# Install OBS (for the virtual camera driver)
# Download from: https://obsproject.com
# Open OBS β Tools β Virtual Camera β Start β close OBSpip install -r requirements.txtCopy .env.example to .env and replace the placeholder:
cp .env.example .env
# edit .env:
NVIDIA_API_KEY=nvapi-YOUR-KEY-HEREGet your key from: build.nvidia.com β sign in β Get API Key
No credits yet? Use OpenRouter (free) instead:
USE_OPENROUTER = True
OPENROUTER_API_KEY = "sk-or-YOUR-KEY-HERE" # openrouter.ai β free tierpython setup.pyThis asks about your industry, apps, and sensitive data types. Takes 2 minutes. Only needs to be done once.
python main.pyZoom β Settings β Video β Camera β OBS Virtual Camera
That's it. ShieldView is now protecting your screen share.
| Key | Action |
|---|---|
b |
Pre-call briefing β scan open windows for risks |
r |
Generate incident report for current session |
f |
Submit feedback to improve detection |
s |
Show session stats |
u |
Simulate unknown attendee joining |
q |
Stop ShieldView |
python main.py --debug # Show bounding boxes instead of blur (testing)
python main.py --briefing # Run pre-call briefing before starting
python main.py --setup # Re-run setup wizard
python main.py --fps 5 # Override FPS (lower = less CPU)Your screen
β
mss captures frames at 10fps
β
Tesseract OCR reads text + regex finds patterns (every frame, instant)
β
Nemotron 3 Nano Omni deep scan (every 4 seconds, catches what regex misses)
β
OpenCV blurs detected regions
β
pyvirtualcam feeds blurred frames to Zoom as a fake webcam
β
Other person sees your screen with sensitive parts blurred
Privacy guarantee: No raw screen frames are ever stored or sent to the cloud. Nemotron only receives compressed JPEG snapshots for analysis. The actual sensitive values are never logged β only metadata (type, location, timestamp).
Virtual camera not showing in Zoom:
- Make sure OBS is installed
- Open OBS β Tools β Virtual Camera β Start
- Quit and reopen Zoom
- Check Settings β Video β Camera dropdown
pyvirtualcam error on start:
- The virtual camera must be running before Zoom opens
- Always start
python main.pybefore joining a Zoom call
Tesseract not found:
brew install tesseractAPI key error:
- Check
.envβ key should start withnvapi- - Alternative: set
USE_OPENROUTER=trueand add an OpenRouter key
Latency / high CPU:
- Lower FPS:
python main.py --fps 5 - Or edit
PIPELINE_FPS = 5inconfig.py
python scripts/smoke_test.py| Feature | Status |
|---|---|
| Screen capture | β Real (mss) |
| OCR detection | β Real (Tesseract) |
| Regex patterns | β Real (30+ patterns) |
| Blur rendering | β Real (OpenCV) |
| Virtual camera | β Real (pyvirtualcam + OBS) |
| Nemotron vision scan | β Real (NVIDIA API) |
| Pre-call briefing | β Real (Nemotron) |
| Post-call report | β Real (Nemotron + SQLite) |
| Unknown attendee detection | u) |
| Credential auto-rotation | β Not implemented (recommendation only) |
ShieldView/
βββ main.py β Run this
βββ setup.py β One-time setup wizard
βββ config.py β Settings; secrets come from .env
βββ requirements.txt
βββ shared/
β βββ state.py β Global shared state
βββ pipeline/
β βββ capture.py β Screen grab (mss)
β βββ detect.py β OCR + regex detection
β βββ render.py β Blur + overlay
β βββ main.py β Main pipeline loop
βββ agent/
β βββ nemotron.py β Nemotron API client
βββ bridge/
β βββ bridge.py β FastAPI HTTP bridge
βββ memory/
β βββ db.py β SQLite helpers
β βββ schema.sql β Database schema
βββ scripts/
βββ smoke_test.py β Installation verification
Built for the NVIDIA Hackathon | ShieldView Team