TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
A speaker notes overlay for presentations that stays invisible to screen recording and video calls
AI summary · revised during review
ProductivityPython · HTMLGitHub @KumarPriyam123OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A floating speaker-notes overlay for Windows that is completely invisible to screen capture — Teams, Meet, Zoom, OBS, all of them. No admin rights. No drivers. No DLL injection. Just a Python window that hides itself using a single Win32 API call.
This started with Netflix.Read the full README ↗A floating speaker-notes overlay for Windows that is completely invisible to screen capture — Teams, Meet, Zoom, OBS, all of them. No admin rights. No drivers. No DLL injection. Just a Python window that hides itself using a single Win32 API call.
This started with Netflix.
Like most streaming services, Netflix blocks screen recording — try to capture it and you get a black rectangle where the video should be. I got curious about how that worked. After digging into it, I found that Windows exposes a per-window flag called SetWindowDisplayAffinity. When you set it to WDA_EXCLUDEFROMCAPTURE, the window is rendered normally on your screen but the capture pipeline sees only a transparent void.
Netflix's player sets this flag on its video surface. That's the whole trick.
The obvious next thought: what if I set that flag on a window I own? A window full of presenter notes, floating over everything, visible only to me — invisible to whoever is watching my screen share.
That is exactly what this project is.
Windows has a display stack with multiple layers. Applications like Netflix render into a protected layer that the capture APIs cannot read. The mechanism is a single function:
SetWindowDisplayAffinity(hwnd, WDA_EXCLUDEFROMCAPTURE)
The critical constraint: the calling process must own the window. You cannot cloak someone else's window — Windows enforces this. This is why Netflix's protection cannot be trivially bypassed by an external tool, and it is also why self-cloaking works perfectly: our Python process creates its own tkinter window and immediately cloaks it.
There is one subtle gotcha: tkinter.winfo_id() returns an inner child HWND, not the top-level window handle. SetWindowDisplayAffinity rejects child windows with error 87 (invalid parameter). The fix is GetParent(winfo_id()) to reach the real top-level HWND.
inner = window.winfo_id()
hwnd = ctypes.windll.user32.GetParent(inner) or inner
ctypes.windll.user32.SetWindowDisplayAffinity(hwnd, 0x00000011)
No admin. No elevated privileges. No side effects on the rest of the system.
# headings, ## subheadings, **bold**, - bullets, > speaker prompts> lines render as a distinct highlighted callout box, separate from the main notesA built-in live interview copilot — like Parakeet, but nothing leaves your machine. Click the ✦ COPILOT sidebar tab to arm it. It listens to the other side's audio (the call output, not your mic), transcribes it locally, and when you press F9 it streams an AI-generated answer straight into the same cloaked card — invisible to the screen share.
copilot_profile.md (git-ignored) and answers come back in first person, grounded in your background.Setup: install Ollama and ollama pull qwen3:8b, then pip install -r requirements.txt (first run downloads the Whisper model). See CLAUDE.md for env overrides and GPU notes.
http://localhost:11434 (Ollama). No audio, transcript, or answer is uploaded anywhere. Model weights are downloaded once from Hugging Face and then run offline.A single HTML file — no build step, no framework. Open it directly in your phone browser or deploy it to GitHub Pages / Vercel.
WDA_EXCLUDEFROMCAPTURE)pywin32 (usually pre-installed or available via pip)pip install -r requirements.txt
1. Clone and create a virtual environment
git clone https://github.com/Sid009192/speaker-notes-prompter.git
cd speaker-notes-prompter
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
2. Configure your sync method
Copy .env.example to .env and fill in your Firebase URL:
FIREBASE_URL=https://your-project-default-rtdb.firebaseio.com
Or leave it blank and use the --firebase / --local flags at runtime (see below).
# Activate venv first
.\.venv\Scripts\activate
# Auto-connect using .env
python overlay.py
# Local text file
python overlay.py sample_notes.txt
# Firebase (URL overrides .env)
python overlay.py --firebase https://your-project-default-rtdb.firebaseio.com
# Local WebSocket (same network as phone)
python overlay.py --local
# Prints the LAN IP — enter it in the web UI
# Custom port
python overlay.py --local --port 9000
# Slide Heading
## Subheading
Regular paragraph text. **Bold inline.**
- Bullet point one
- Bullet point two
> This is a speaker prompt — renders as a highlighted callout box.
> Visible only in the overlay, great for reminders and cues.
---
# Next Slide
--- on its own line separates slides.
https://your-app-default-rtdb.firebaseio.com).env as FIREBASE_URL=... or enter it in the web UITest mode rules expire after 30 days. Renew in Firebase Console → Rules if sync stops working.
overlay.py # Main application — OverlayApp class
copilot/ # Local, on-device AI copilot (capture, transcribe, LLM)
capture.py # WASAPI loopback audio capture
transcriber.py # faster-whisper STT (RealtimeSTT + Silero VAD)
llm.py # Ollama streaming client (local LLM)
engine.py # Orchestrator: audio -> STT -> buffer -> F9 -> answer
phone_ui/
index.html # Web UI for phone (no build step)
sample_notes.txt # Example notes file
requirements.txt # requests, websockets, + copilot deps
copilot_profile.example.md # Template for your private résumé summary
.env.example # Config template — copy to .env
| Key | Action |
|---|---|
← / → | Previous / next slide |
Ctrl + Shift + ` or Ctrl + ` | Toggle show / hide overlay (system-wide global hotkey + in-app) |
Ctrl + Shift + H or Ctrl + H | Toggle show / hide overlay (alternative global hotkey) |
F2 or Ctrl + E | Toggle Read-Only / Editable mode (locks click-to-edit; enables content space drag) |
Alt + D / Alt + I (or Ctrl + [ / ]) | Decrease / increase window opacity by 10% |
F9 | Copilot: answer the latest transcribed question (global while copilot mode is on) |
Ctrl + Shift + Q | Screen capture: take screenshot of presenter's screen & sync to client |
Escape | Close settings popup / slide switcher / stop copilot / exit |
SetWindowDisplayAffinity is a Win32 API with no equivalent on macOS or LinuxMIT