Skip to main content

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.

PyPI version Python Support License: MIT Platform Support

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:

  1. Native OS-level window blur effects (no image processing)
  2. Persistent subprocess with withdraw()/deiconify() toggling
  3. Queue-based messaging for instant communication
  4. 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/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 duration
  • black_screen.py - Privacy blackout screen
  • show_hide_control.py โญ NEW - Instant show/hide toggling (~0.1ms)
  • start_stop_control.py - Manual control with multiprocessing
  • custom_color.py - Custom colored overlay

Each example is fully documented and ready to run!


๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. ๐Ÿด Fork the repository
  2. ๐ŸŒฟ Create a feature branch (git checkout -b feature/amazing-feature)
  3. ๐Ÿ’พ Commit your changes (git commit -m 'Add amazing feature')
  4. ๐Ÿ“ค Push to the branch (git push origin feature/amazing-feature)
  5. ๐ŸŽ‰ 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 tkinter for cross-platform GUI
  • Leverages native OS APIs for optimal performance
  • Inspired by the need for instant, permission-free privacy controls

๐Ÿ“ฌ Contact & Support


๐ŸŒŸ 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 Pekay

Download ยท Report Bug ยท Request Feature ยท ScreenStop

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

screenoverlay-0.6.2.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

screenoverlay-0.6.2-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file screenoverlay-0.6.2.tar.gz.

File metadata

  • Download URL: screenoverlay-0.6.2.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for screenoverlay-0.6.2.tar.gz
Algorithm Hash digest
SHA256 830364c51dcef467bacf9082dd0dcaaef290d2d6330c14f39849140c99d249e7
MD5 4dd113cf2e4ae0942fdc33663a51dcce
BLAKE2b-256 10e8237a3c5a2fc87e1459805b401d7021e57ccdee64d2775dcba3061da46b38

See more details on using hashes here.

File details

Details for the file screenoverlay-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: screenoverlay-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for screenoverlay-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7b063a79c4c9915c100e8337a267e45d04c9caba825ee0cf40afa51bc521e5f0
MD5 b1219dba4b986d35f749384b2eaddeb8
BLAKE2b-256 a6c3e23a595eb5bbdddf0046f90dd35c9ac263f4ee6dce96f53e222fa2a1f0ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page