A lightweight Windows overlay manager and client library for creating click through overlay windows.
Project description
overlays
A lightweight Windows overlay manager and client library for creating click through overlay windows: highlights, countdowns, elapsed timers, and QR codes, all communicated over a named pipe. This project is licensed under the Apache License 2.0. See the LICENSE file for details.
Features
- Highlight Windows: Draw colored rectangles around screen regions for attention-grabbing highlights.
- Countdown Timers: Display a countdown clock with a custom message.
- Elapsed Time Windows: Track and display elapsed time since creation.
- QR Code Overlays: Render QR codes with captions.
- Named-Pipe IPC: Send commands from your application to the overlay manager via a simple pipe.
- Graceful Shutdown: Press
Ctrl+Cor sendSIGTERMto clean up windows and threads.
Requirements
- Windows 10 or later (older Versions might work but aren't supported)
- Python 3.10+
- Dependencies:
pywin32,qrcode
Getting Started
1a. Run the Overlay Manager
The overlay manager hosts a named-pipe server and listens for overlay commands.
To run the manager, simply use the following uv command:
uvx overlays
You should see the following output:
🔧 OverlayManager - Windows Overlay Application
================================================
✅ Signal handlers configured
🚀 Starting OverlayManager...
✅ OverlayManager initialized successfully
📡 Named pipe server: \\.\pipe\overlay_manager
🎯 Application ready - overlay windows can now be created
💡 Press Ctrl+C to shutdown gracefully
1b. Run the Overlay Manager with env vars
Specify your environment variables in your .env file or in your terminal, i.e. OVERLAY_PIPE_NAME="overlay_manager_env"
Afterwards run the overlay manager:
uvx overlays
You should see the following allowed arguments:
🔧 OverlayManager - Windows Overlay Application
================================================
✅ Signal handlers configured
🚀 Starting OverlayManager...
✅ OverlayManager initialized successfully
📡 Named pipe server: \\.\pipe\overlay_manager_env
🎯 Application ready - overlay windows can now be created
💡 Press Ctrl+C to shutdown gracefully
Supported env vars:
| Variable | Description |
|---|---|
| OVERLAY_PIPE_NAME | Defines the name of the win32 pipe |
2. Embed the OverlayClient in Your Code
Import and instantiate the OverlayClient to send overlay commands:
from overlays.client import OverlayClient
# Create one client to connect to the manager's pipe
overlay = OverlayClient(pipe_name=r"\\.\pipe\overlay_manager")
# Create a highlight window
overlay.create_highlight_window(rect=(100, 100, 400, 300), timeout_seconds=5)
# Create a 10-second countdown
overlay.create_countdown_window(message_text="Get ready!", countdown_seconds=10)
# Create an elapsed-time window
overlay.create_elapsed_time_window(message_text="Session Length")
# Show a QR code for some data
overlay.create_qrcode_window(data={"url": "https://example.com"}, duration=15, caption="Scan me")
# Update a window's message
overlay.update_window_message(window_id=2, new_message="Halfway there...")
# Close a specific window
overlay.close_window(window_id=1)
# Take and cancel breaks
overlay.take_break(duration_seconds=60)
overlay.cancel_break()
IPC Commands Reference
| Command | Args | Description |
|---|---|---|
create_highlight_window |
rect: (l, t, r, b), timeout_seconds: int |
Shows a colored rectangle for a duration. |
create_countdown_window |
message_text: str, countdown_seconds: int |
Starts a countdown timer. |
create_elapsed_time_window |
message_text: str |
Displays elapsed time since creation. |
create_qrcode_window |
data: str | dict, duration: int, caption: str |
Renders a QR code overlay. |
update_window_message |
window_id: int, new_message: str |
Changes the text of a countdown/elapsed window. |
close_window |
window_id: int |
Closes a countdown or elapsed window. |
take_break |
duration_seconds: int |
Holds incoming commands for a break period. |
cancel_break |
(none) | Cancels any active break and flushes queue. |
Graceful Shutdown
Press Ctrl+C in the console running main.py, or send a SIGTERM signal. The manager will clean up all open windows and exit.
Contributing
Contributions are always welcome!
The following steps should be used:
- Fork the repo.
- Create a feature branch.
- Submit a pull request—happy to review improvements!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file overlays-1.5.1.tar.gz.
File metadata
- Download URL: overlays-1.5.1.tar.gz
- Upload date:
- Size: 2.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5847822b53609e5a12f63de8a1d8b8474669d67b80826fdd190c7eb69e9c1534
|
|
| MD5 |
048f047417875e6bf5cab8f646fd5a9d
|
|
| BLAKE2b-256 |
ed0632ce489432f59d44f93d15d17b349e186880a7d9d49d9137d3d59d8016db
|
File details
Details for the file overlays-1.5.1-py3-none-any.whl.
File metadata
- Download URL: overlays-1.5.1-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b268b3e5c63fb16ad5f0371b7505f7045b2a95dc50bc82560a2dbedead8b7658
|
|
| MD5 |
8536cf77cdf9fd3475fac82cb287c659
|
|
| BLAKE2b-256 |
2d5c1cfa91755282ec6f190e69cd6efcef16f4d89ab6d30b9e1488cd88211950
|