Cross-platform screen overlay with blur, black, white, and custom modes
Project description
๐ฅ๏ธ ScreenOverlay
Cross-platform Python library for creating instant fullscreen overlays with blur, solid colors, or custom effects.
Perfect for privacy screens, focus modes, screen recording, presentations, visual effects, and more.
๐ Our Story
While developing ScreenStop - our advanced AI-powered phone screenshot detection system - we found ourselves constantly needing to blur or obscure our screens during development, testing, and demos. We needed something instant, lightweight, and cross-platform that didn't require screen recording permissions.
After trying various solutions and finding them too slow (>1 second latency), too complex, or requiring special permissions, we built our own. ScreenOverlay was born from this need - a <50ms overlay system that just works.
We're releasing it as open-source (MIT) because we believe privacy tools should be accessible to everyone. Whether you're protecting sensitive data during a video call, building focus apps, or just need a quick screen blackout - ScreenOverlay has you covered.
Want enterprise-grade screen protection? Check out our flagship product ScreenStop below.
โจ Features
- ๐ญ 4 Overlay Modes - blur, black, white, custom colors
- โก Ultra Fast - <50ms startup, native OS blur effects
- ๐ฅ๏ธ Multi-Monitor Support - Automatically blurs ALL screens simultaneously
- ๐ No Permissions - No screen recording access required
- ๐ Cross-Platform - macOS, Windows, Linux
- ๐ฏ Simple API - One line of code to activate
- ๐ชถ Lightweight - Minimal dependencies
๐ฆ Installation
pip install screenoverlay
That's it! No additional setup required.
๐ Quick Start
Simple Duration-Based Overlay
from screenoverlay import Overlay
# Privacy blur (great for screen sharing)
Overlay(mode='blur', blur_strength=4).activate(duration=5)
# Full blackout
Overlay(mode='black').activate(duration=3)
# Flash effect
Overlay(mode='white').activate(duration=1)
# Custom colored overlay
Overlay(mode='custom', color_tint=(255, 100, 100), opacity=0.7).activate()
# Multi-monitor control
Overlay(mode='blur', all_screens=True).activate(duration=5) # Blur all monitors (default)
Overlay(mode='blur', all_screens=False).activate(duration=5) # Blur only primary monitor
Press ESC to dismiss the overlay early.
Instant Show/Hide Control โญ NEW
For real-time applications that need instant toggling with zero latency (like ScreenStop):
from screenoverlay import Overlay
import time
# Initialize once (one-time ~300ms setup)
overlay = Overlay(mode='blur', blur_strength=4)
overlay.start()
# Then show/hide instantly (~0.1ms each)
overlay.show() # Overlay appears instantly
time.sleep(2)
overlay.hide() # Overlay disappears instantly
overlay.show() # Show again - still instant!
time.sleep(2)
overlay.hide()
# Cleanup when done
overlay.stop()
Performance: show() and hide() take ~0.1ms - virtually instant! Perfect for real-time control.
See examples/ folder for more use cases!
๐จ Overlay Modes
1๏ธโฃ Blur Mode
Blurred background with customizable strength - perfect for privacy during screen sharing.
Overlay(
mode='blur',
blur_strength=4, # 1-5: higher = more obscured
color_tint=(120, 120, 150), # RGB tint color
opacity=0.85 # 0.0-1.0
).activate(duration=5)
Use Cases:
- ๐ฅ Privacy during screen recording/sharing
- ๐ง Focus mode / distraction blocking
- ๐ฑ Hide sensitive information temporarily
2๏ธโฃ Black Mode
Full black screen overlay - instant privacy.
Overlay(mode='black').activate(duration=3)
Use Cases:
- ๐ Quick privacy/security blackout
- ๐ฌ Presentation breaks
- โธ๏ธ Screen pause effect
3๏ธโฃ White Mode
Full white screen overlay - clean and bright.
Overlay(mode='white').activate(duration=2)
Use Cases:
- ๐ก Flash effects
- ๐๏ธ Scene transitions
- โจ Attention grabber
4๏ธโฃ Custom Mode
Create your own colored overlays with custom transparency.
Overlay(
mode='custom',
color_tint=(255, 0, 0), # Red overlay
opacity=0.5 # Semi-transparent
).activate(duration=5)
Use Cases:
- ๐จ Branded overlays
- ๐ Color filters
- ๐ช Creative effects
๐ Complete API Reference
Overlay Class
Overlay(
mode='blur', # 'blur', 'black', 'white', 'custom'
blur_strength=3, # 1-5 (only for mode='blur')
opacity=0.85, # 0.0-1.0
color_tint=(136, 136, 136), # RGB tuple (0-255)
all_screens=True # True = all monitors, False = primary only
)
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
mode |
str | 'blur' |
Overlay mode: 'blur', 'black', 'white', 'custom' |
blur_strength |
int | 3 |
Blur intensity 1-5 (only for blur mode) |
opacity |
float | 0.85 |
Window opacity 0.0 (transparent) to 1.0 (opaque) |
color_tint |
tuple | (136, 136, 136) |
RGB color values (0-255) |
all_screens |
bool | True |
If True, blur all monitors. If False, blur only primary monitor |
activate() Method
Show overlay for a fixed duration.
overlay.activate(duration=5)
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
duration |
float | 5 |
How long to show overlay (seconds) |
Note: Press ESC to dismiss early.
start() Method โญ NEW
Initialize the overlay process for instant show/hide control.
overlay.start()
Important: Call this once at app startup. It creates a background process (~300ms). After initialization, use show() and hide() for instant toggling.
show() Method โญ NEW
Show the overlay instantly (~0.1ms).
overlay.show()
Performance: Virtually instant - no subprocess creation, just a queue message.
hide() Method โญ NEW
Hide the overlay instantly (~0.1ms).
overlay.hide()
Performance: Even faster than show() - typically <0.1ms.
stop() Method
Stop and cleanup the overlay process.
overlay.stop()
Note: Call this when your application exits to gracefully terminate the overlay process.
๐ก Real-World Usage Examples
Privacy Screen During Video Call
from screenoverlay import Overlay
# Activate blur when discussing sensitive info
overlay = Overlay(mode='blur', blur_strength=5)
overlay.activate(duration=10)
Focus Timer (Pomodoro Technique)
from screenoverlay import Overlay
import time
def pomodoro_session():
# 25-minute work session
print("๐
Focus time! Work for 25 minutes...")
time.sleep(25 * 60)
# 5-minute break with screen overlay
print("โ Break time!")
Overlay(mode='black', opacity=0.8).activate(duration=5 * 60)
pomodoro_session()
Screen Flash Effect
from screenoverlay import Overlay
# Quick camera flash effect
Overlay(mode='white', opacity=0.9).activate(duration=0.3)
Custom Branded Overlay
from screenoverlay import Overlay
# Brand color overlay with transparency
Overlay(
mode='custom',
color_tint=(74, 144, 226), # Brand blue
opacity=0.6
).activate(duration=3)
๐ฅ๏ธ Platform Support
| Platform | Native Blur | Requirements |
|---|---|---|
| macOS | โ NSVisualEffectView | pyobjc-framework-Cocoa (auto-installed) |
| Windows | โ DWM Acrylic/Mica | Built-in (no extra deps) |
| Linux | โ ๏ธ Compositor-dependent* | Built-in (no extra deps) |
*Linux blur quality depends on your desktop compositor (KDE, GNOME, etc.)
โ๏ธ System Requirements
- Python: 3.7 or higher
- Tkinter: Usually included with Python
- macOS only:
pyobjc-framework-Cocoa(automatically installed) - Windows/Linux: No additional dependencies
โก Performance
Latency Benchmarks โญ UPDATED
- activate() (duration-based): <50ms startup
- start() (one-time init): ~300ms (creates subprocess)
- show() / hide(): ~0.1ms (virtually instant!)
How It Works
- Method: Native OS window effects (no screen capture)
- Permissions: None required (works without screen recording access)
- Memory: Minimal footprint (~10 MB per screen)
- Process Model: Separate process with queue-based messaging
- Multi-Monitor: Automatically detects and covers all screens
Why so fast? Unlike traditional screen capture approaches (400-1000ms), we use:
- Native OS-level window blur effects (no image processing)
- Persistent subprocess with
withdraw()/deiconify()toggling - Queue-based messaging for instant communication
- One window per monitor (all controlled simultaneously)
This makes show() and hide() nearly 10,000x faster than recreating the overlay each time!
๐ก๏ธ Interested in Advanced Screen Protection?
ScreenOverlay is great for quick privacy needs, but what if you need automatic, AI-powered protection?
Meet ScreenStop ๐ฑ๐
Our flagship product, ScreenStop, is an enterprise-grade ML-powered system that automatically detects when someone is taking a screenshot with their phone and triggers instant screen protection.
Key Features:
- ๐ค AI-Powered Detection - Advanced YOLO + custom ML model
- โก Real-time Processing - 216ms detection time
- ๐ฏ 100% Accuracy - Zero false positives in production
- ๐ Automatic Protection - No manual activation needed
- ๐ข Enterprise Ready - Scalable and production-tested
Perfect For:
- ๐ Protecting confidential presentations
- ๐ผ Corporate security compliance
- ๐ฅ HIPAA/healthcare data protection
- ๐ฆ Financial services security
- ๐ฌ Research & IP protection
ScreenOverlay provides the instant privacy overlay.
ScreenStop provides the intelligence to trigger it automatically.
โ Learn more about ScreenStop
๐ง Development & Testing
Local Installation
# Clone the repository
git clone https://github.com/pekay-ai/screenoverlay.git
cd screenoverlay
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in editable mode
pip install -e .
# Run examples
python examples/basic_duration.py
python examples/start_stop_control.py
Examples
Check out the examples/ directory for complete working examples:
basic_duration.py- Simple blur overlay with fixed durationblack_screen.py- Privacy blackout screenshow_hide_control.pyโญ NEW - Instant show/hide toggling (~0.1ms)start_stop_control.py- Manual control with multiprocessingcustom_color.py- Custom colored overlay
Each example is fully documented and ready to run!
๐ค Contributing
Contributions are welcome! Here's how you can help:
- ๐ด Fork the repository
- ๐ฟ Create a feature branch (
git checkout -b feature/amazing-feature) - ๐พ Commit your changes (
git commit -m 'Add amazing feature') - ๐ค Push to the branch (
git push origin feature/amazing-feature) - ๐ Open a Pull Request
Ideas for Contributions
- ๐ Bug fixes
- ๐ Documentation improvements
- โจ New overlay modes or effects
- ๐งช Additional tests
- ๐ Platform-specific optimizations
๐ Licensing
ScreenOverlay uses a dual-license model similar to xlwings:
๐ Non-Commercial Use (Free)
Free for individuals and non-commercial purposes:
โ
Personal projects
โ
Educational use
โ
Academic research
โ
Open source projects (OSI-approved licenses)
โ
Non-profit organizations
โ
Evaluation and testing
No license key needed - just pip install screenoverlay and start using it!
๐ผ Commercial Use (License Required)
A commercial license is required if you use ScreenOverlay:
๐ผ At a company or for commercial purposes
๐ข In a commercial product or service
๐ฐ For client work or revenue-generating activities
๐ง In any business context
Pricing:
| License Type | Price | Use Case |
|---|---|---|
| ๐จโ๐ป Developer | $149/year | Single developer |
| ๐ฅ Team | $699/year | Up to 5 developers |
| ๐ข Enterprise | Custom | Unlimited developers + priority support |
All commercial licenses include:
โ
Commercial use rights
โ
Priority email support
โ
Perpetual license for purchased version
โ
1 year of updates
Purchase License | Contact Sales
โ Which License Do I Need?
Simple rule: If you're using it in a business/commercial context, you need a commercial license.
| Scenario | License Needed |
|---|---|
| Personal side project (no revenue) | ๐ Non-Commercial |
| Learning Python at home | ๐ Non-Commercial |
| University research project | ๐ Non-Commercial |
| Open source project (MIT, GPL, etc.) | ๐ Non-Commercial |
| Using at your company/job | ๐ผ Commercial |
| Building a SaaS product | ๐ผ Commercial |
| Freelance client work | ๐ผ Commercial |
| Integrating into commercial software | ๐ผ Commercial |
๐ Acknowledgments
- Built during the development of ScreenStop
- Uses Python's
tkinterfor cross-platform GUI - Leverages native OS APIs for optimal performance
- Inspired by the need for instant, permission-free privacy controls
๐ฌ Contact & Support
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ง Email: ppnicky@gmail.com
- ๐ข Enterprise Solutions: Contact us about ScreenStop for advanced protection
๐ Show Your Support
If you find ScreenOverlay useful:
- โญ Star the repository
- ๐ฆ Share on social media
- ๐ Write about your use case
- ๐ Explore ScreenStop for advanced features
Built with โค๏ธ by ScreenStop
Download ยท Report Bug ยท Request Feature ยท ScreenStop
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 screenoverlay-0.6.5.tar.gz.
File metadata
- Download URL: screenoverlay-0.6.5.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68c7ef1687782c05091dce9cb1a65f1ab3c5743524efef5ea8b7781088e3162e
|
|
| MD5 |
13c0f0f94b97efee919c90be46c954f0
|
|
| BLAKE2b-256 |
e8aec66f42a5db9f304fb03277dd3778e30022a1e18f0a23cb5fa1d2859a9caa
|
File details
Details for the file screenoverlay-0.6.5-py3-none-any.whl.
File metadata
- Download URL: screenoverlay-0.6.5-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfa6ab6691085bba325db97a1fb674f21f06966f55ac7d964fa2cf45980bffd9
|
|
| MD5 |
d90e6945f359a302f72c63e62d55deff
|
|
| BLAKE2b-256 |
b37e83e08c3134eab1cdf2530abbd0c4c56c443f3917d821372c8ac1ae45f989
|