Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsThe most useful first step for speeding up repeated Python screenshots with MSS is to create one MSS object and reuse it, rather than opening and closing one for every frame. Capture only the monitor or rectangle you need, then avoid unnecessary pixel copies and channel conversions when handing the result to NumPy or OpenCV. There is no universal frames-per-second figure: the capture backend, operating system, display server, screen area, and work done after capture all affect the result.
Use one MSS instance for repeated captures
MSS recommends reusing an instance for intensive capture loops. Reopening an instance for every image adds setup and resource-management work; a single context-managed instance keeps that work outside the loop. The official usage guide describes this pattern as more memory efficient. MSS usage documentation
Install MSS in the Python environment that runs your script with python -m pip install mss. This minimal example captures the primary monitor a fixed number of times. It does not save images or perform image processing, so it isolates the capture calls from those other costs:
import mss
capture_count = 100
with mss.MSS() as sct:
monitor = sct.monitors[1] # First physical monitor; see monitor notes below.
for _ in range(capture_count):
frame = sct.grab(monitor)
# Use frame here before the next iteration if needed.
The preferred context-managed interface in the current usage documentation is MSS. The example’s frame is an MSS screenshot object; obtaining it does not write a file. If your real loop must run continuously, put the capture inside your application’s existing loop and ensure it has a stop condition. Avoid adding file writes, display updates, or expensive conversions until you have measured the capture-only path.
#1 Best Overall
- CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
- WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
- A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
Choose the right monitor index
MSS exposes monitor geometry through sct.monitors. Index 0 represents the combined virtual desktop; indices starting at 1 represent individual monitors. If you want one monitor, select its entry rather than grabbing the combined desktop. A multi-monitor layout can include negative left or top coordinates when a display is positioned left of or above the primary display, so use the metadata rather than assuming every monitor starts at (0, 0).
Capture only the pixels your task needs
Reducing the captured area is often a more direct optimization than changing loop structure: it limits the pixels MSS must acquire and the data that later stages may need to copy, convert, or process. MSS accepts a monitor description or a region with left and top coordinates plus width and height. The example below repeatedly grabs an 800-by-600 rectangle beginning 100 pixels from the desktop’s upper-left corner:
import mss
from mss.models import Region
region = Region(left=100, top=100, width=800, height=600)
with mss.MSS() as sct:
for _ in range(100):
frame = sct.grab(region)
# Process only this region's pixels.
Coordinates are in the desktop coordinate space, not necessarily relative to a particular window. Before relying on fixed coordinates, confirm the monitor arrangement, display scaling, and target application’s position on the machine where the script runs. For a region on a secondary display, take that monitor’s reported origin into account. If the application window moves or the display layout changes, fixed coordinates can capture the wrong area; update the region or derive it from the current monitor geometry.
Rank #2
- CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
- SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
For API details and examples of monitor and partial-screen capture, see the MSS examples.
Free tools Windows power users keep installed
One-click scans. No signup required.
Keep pixel handoffs efficient
After capture, data handling can consume as much time as acquisition. Avoid converting an MSS screenshot to a new image representation merely out of habit. MSS documents buffer-protocol paths for NumPy and OpenCV; on supported systems, consumers can use screenshot data without an avoidable intermediate copy. The current usage documentation says this direct-buffer support is enabled automatically on GNU/Linux with Python 3.12 or later. That is a platform- and version-specific behavior, not a promise that every capture pipeline is zero-copy. Check the current usage guide for compatibility details.
Match the channel order to the library
Pixel channel order matters. MSS’s examples use BGR for OpenCV and RGB for scikit-image and many other workflows. If a consumer expects BGR but receives RGB, colors will be wrong; a corrective channel swap may also add work to every frame. Select the representation that your next processing step actually expects, and consult the examples for the supported buffer path: MSS examples.
Rank #3
- Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
- Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
- Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
- In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
- Ultra-thin bezels: Maximize your viewing experience with thin bezels.
When a conversion is genuinely required, include it deliberately and measure its cost. For example, a pipeline that captures, converts, resizes, displays, and saves every frame should not be described as a capture benchmark. Each operation contributes latency and can obscure whether changing MSS usage helped.
Measure the whole pipeline, not just grab()
Benchmark on the target machine with the same display configuration, region, Python and MSS versions, backend, and downstream processing that production will use. Time stages separately first, then measure total end-to-end throughput. A useful profile distinguishes:
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware match- Capture: time spent in
sct.grab(...). - Conversion: NumPy array construction, channel reordering, or format conversion.
- Processing: detection, transforms, or other application logic.
- Output: display refreshes, encoding, disk writes, or network transfer.
Use a representative warm-up and enough iterations to see stable behavior, and report what the timing includes. Avoid quoting a generic FPS target or speed multiplier: the official material cited here does not establish a universal benchmark across machines. A fast capture call can still produce a slow application if conversion, processing, or output dominates.
Rank #4
- CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
- SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
- MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
- KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
- INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient
Account for backend and threading behavior
MSS performance depends partly on the operating system and capture backend. On Linux, the usage guide says MSS uses MIT-SHM when available and falls back to xgetimage when the extension is unavailable, including some remote SSH display scenarios. The Python MSS release notes describe a Linux XShm change intended to reduce overhead for frequent captures, but do not provide a complete, general benchmark table that supports a speed multiplier for every setup. Python MSS release notes
That makes local versus remote display sessions and backend availability relevant when profiling. A script that performs well on a local desktop may behave differently through a remote display path. Check the applicable MSS documentation and measure the environment where the script will run.
Threads do not make one shared MSS object capture in parallel
Calls to grab() on the same MSS object are serialized, according to the usage guide. Adding worker threads around one shared instance therefore is not a shortcut to parallel grabs. Separate MSS objects may or may not capture concurrently depending on the operating system. Treat concurrency as something to test on the actual platform, and account for the additional complexity and memory use of multiple captures rather than assuming a speedup.
Best Value
- 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
- 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
- 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
Troubleshoot slow or incorrect captures
- Every iteration feels slow: Check whether the loop creates a new MSS instance each time. Move instance creation outside the loop and reuse a context-managed object.
- Only part of the task is slow: Time capture, conversion, processing, and output separately. If writing or displaying images dominates, optimizing
grab()alone will not fix end-to-end performance. - The capture contains more screen than needed: Use a monitor entry or a smaller
Region, and verify its coordinates against the current monitor metadata. - Colors look swapped: Confirm whether the consumer expects RGB or BGR and use the matching MSS data path; MSS examples document those conventions.
- Remote Linux captures are slower than local ones: The available MIT-SHM path may not be available in that display environment, leading to the documented fallback. Measure over the actual remote setup.
- Adding threads did not improve throughput: Calls on one shared MSS object are serialized. Separate instances have platform-dependent concurrency, so test before adopting that design.
- A zero-copy expectation is not met: Direct screenshot buffer support is documented for GNU/Linux with Python 3.12 or later. Check the current compatibility guidance and whether your consumer introduces its own copy.
Or skip the browser setup
MSS is for capturing your computer’s desktop. If what you need is a screenshot of a website URL, ScreenshotNeo is a separate website screenshot API; it does not replace MSS for desktop capture. Its single GET request can return an image or PDF, and its response headers identify the page verdict and billing status. See the ScreenshotNeo API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners as a visitor and removes known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed. It also offers an MCP server for AI agents, with tools including take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots. Learn about ScreenshotNeo or sign up for 1,000 free screenshots a month with no card.
Further MSS documentation
For current API and compatibility information, start with MSS usage documentation and its examples. The project also publishes a stable documentation site; check the version relevant to your installed package when API behavior matters.
Frequently Asked Questions
Does MSS capture the whole monitor when I use sct.monitors[0]?
That entry describes the combined virtual desktop. Use an individual monitor entry or a Region when you need a specific display or rectangle.
Can I use MSS to screenshot a webpage by URL?
No. MSS captures the computer’s displayed screen; a website screenshot API such as ScreenshotNeo captures a page from a URL.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

