screenvideo 2.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. screenvideo-2.1.1/LICENSE +21 -0
  2. screenvideo-2.1.1/PKG-INFO +273 -0
  3. screenvideo-2.1.1/README.md +228 -0
  4. screenvideo-2.1.1/pyproject.toml +97 -0
  5. screenvideo-2.1.1/screenvideo/__init__.py +3 -0
  6. screenvideo-2.1.1/screenvideo/core/__init__.py +24 -0
  7. screenvideo-2.1.1/screenvideo/core/audio.py +299 -0
  8. screenvideo-2.1.1/screenvideo/core/clipboard.py +139 -0
  9. screenvideo-2.1.1/screenvideo/core/config.py +109 -0
  10. screenvideo-2.1.1/screenvideo/core/cursor.py +231 -0
  11. screenvideo-2.1.1/screenvideo/core/gif.py +107 -0
  12. screenvideo-2.1.1/screenvideo/core/history.py +136 -0
  13. screenvideo-2.1.1/screenvideo/core/hotkeys.py +58 -0
  14. screenvideo-2.1.1/screenvideo/core/monitors.py +131 -0
  15. screenvideo-2.1.1/screenvideo/core/recorder.py +415 -0
  16. screenvideo-2.1.1/screenvideo/core/screenshot.py +83 -0
  17. screenvideo-2.1.1/screenvideo/main.py +24 -0
  18. screenvideo-2.1.1/screenvideo/mcp_server.py +389 -0
  19. screenvideo-2.1.1/screenvideo/ui/__init__.py +5 -0
  20. screenvideo-2.1.1/screenvideo/ui/app.py +358 -0
  21. screenvideo-2.1.1/screenvideo/ui/countdown.py +111 -0
  22. screenvideo-2.1.1/screenvideo/ui/floating_bar.py +152 -0
  23. screenvideo-2.1.1/screenvideo/ui/region_selector.py +233 -0
  24. screenvideo-2.1.1/screenvideo/ui/theme.py +48 -0
  25. screenvideo-2.1.1/screenvideo/ui/views/__init__.py +7 -0
  26. screenvideo-2.1.1/screenvideo/ui/views/history_view.py +306 -0
  27. screenvideo-2.1.1/screenvideo/ui/views/record_view.py +335 -0
  28. screenvideo-2.1.1/screenvideo/ui/views/settings_view.py +414 -0
  29. screenvideo-2.1.1/screenvideo/utils/__init__.py +13 -0
  30. screenvideo-2.1.1/screenvideo/utils/formatting.py +45 -0
  31. screenvideo-2.1.1/screenvideo/utils/system.py +76 -0
  32. screenvideo-2.1.1/screenvideo.egg-info/PKG-INFO +273 -0
  33. screenvideo-2.1.1/screenvideo.egg-info/SOURCES.txt +38 -0
  34. screenvideo-2.1.1/screenvideo.egg-info/dependency_links.txt +1 -0
  35. screenvideo-2.1.1/screenvideo.egg-info/entry_points.txt +3 -0
  36. screenvideo-2.1.1/screenvideo.egg-info/requires.txt +17 -0
  37. screenvideo-2.1.1/screenvideo.egg-info/top_level.txt +1 -0
  38. screenvideo-2.1.1/setup.cfg +4 -0
  39. screenvideo-2.1.1/tests/test_core.py +389 -0
  40. screenvideo-2.1.1/tests/test_mcp.py +165 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 eminsk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,273 @@
1
+ Metadata-Version: 2.4
2
+ Name: screenvideo
3
+ Version: 2.1.1
4
+ Summary: ScreenCapture Pro - Professional zero-memory screen recorder with modern UI, hotkey controls, and native MCP Server
5
+ Author-email: eminsk <M_N_Nik@yahoo.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/eminsk/screenvideo
8
+ Project-URL: Repository, https://github.com/eminsk/screenvideo
9
+ Project-URL: Issues, https://github.com/eminsk/screenvideo/issues
10
+ Project-URL: Changelog, https://github.com/eminsk/screenvideo/releases
11
+ Keywords: screen-recorder,screen-capture,mcp,mcp-server,wasapi,screenshot,fasm,zero-memory,desktop-app
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Programming Language :: Python :: 3.15
23
+ Classifier: Programming Language :: Python :: 3.16
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Topic :: Multimedia :: Graphics :: Capture :: Screen Capture
26
+ Classifier: Topic :: Multimedia :: Video :: Capture
27
+ Requires-Python: >=3.10
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Requires-Dist: opencv-python>=4.8.0; python_version < "3.16"
31
+ Requires-Dist: numpy>=1.24.0; python_version < "3.16"
32
+ Requires-Dist: mss>=9.0.0
33
+ Requires-Dist: keyboard>=0.13.5
34
+ Requires-Dist: ttkbootstrap>=1.10.0; python_version < "3.16"
35
+ Requires-Dist: pillow>=10.0.0; python_version < "3.16"
36
+ Requires-Dist: soundcard>=0.4.6; python_version < "3.16"
37
+ Requires-Dist: soundfile>=0.14.0; python_version < "3.16"
38
+ Requires-Dist: imageio-ffmpeg>=0.6.0
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
41
+ Requires-Dist: ruff>=0.3.0; extra == "dev"
42
+ Requires-Dist: build>=1.0.0; extra == "dev"
43
+ Requires-Dist: twine>=5.0.0; extra == "dev"
44
+ Dynamic: license-file
45
+
46
+ # 🎬 ScreenCapture Pro
47
+
48
+ [![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB.svg?logo=python&logoColor=white)](https://www.python.org/)
49
+ [![License: MIT](https://img.shields.io/badge/License-MIT-4CAF50.svg)](LICENSE)
50
+ [![MCP Server](https://img.shields.io/badge/MCP-Server%20Ready-blueviolet?logo=modelcontextprotocol)](https://github.com/eminsk/screenvideo)
51
+ [![Architecture: FASM x64](https://img.shields.io/badge/Native%20Build-FASM%20x64%20(~37%20KB)-E91E63.svg)](asm/README.md)
52
+ [![CI](https://github.com/eminsk/screenvideo/actions/workflows/ci.yml/badge.svg)](https://github.com/eminsk/screenvideo/actions/workflows/ci.yml)
53
+
54
+ **ScreenCapture Pro** is a modern, high-performance desktop screen recording and screenshot suite for Windows. Engineered with a zero-memory streaming architecture, low-latency WASAPI loopback audio, native Win32/x64 assembly optimizations, customizable hotkeys, interactive region snipping, and a sleek dark/light theme GUI.
55
+
56
+ ![Screen Recorder](icon.png)
57
+
58
+ ---
59
+
60
+ ## ✨ Key Features
61
+
62
+ - 🖥️ **Full-Screen & Multi-Monitor Support**: Seamless recording across single displays, multi-monitor setups, or virtual desktop workspaces.
63
+ - ✂️ **Interactive Region Selector & Snipping Tool**: Real-time visual region selection with darkened overlay, pixel dimensions HUD, aspect ratio guides, and dedicated snipping mode (`Shift+F11`).
64
+ - 📋 **Native Windows Clipboard Integration (`CF_DIB`)**: Instantly auto-copies snips and screenshots directly to the system clipboard for immediate `Ctrl+V` paste into Telegram, Discord, Slack, Word, or browsers. Includes 1-click "В буфер" and `Ctrl+C` in the gallery.
65
+ - 🔊 **System Audio Capture (WASAPI Loopback)**: Crystal-clear internal sound recording capturing speakers and headphones without external virtual cables.
66
+ - 🎤 **Microphone & Multi-Source Audio**: Record voice commentary independently or mixed synchronously with system audio.
67
+ - 💾 **Zero-Memory Direct-to-Disk Streaming**: Frames are encoded directly to disk via OpenCV/native pipes without ballooning RAM usage.
68
+ - ⏸️ **Synchronous Pause & Resume**: Instant pause and continuation keeping audio and video streams in lockstep.
69
+ - 🖱️ **Hardware Cursor Rendering & Halo Highlight**: Fast mouse pointer tracking with an optional translucent glowing halo for presentations and tutorials.
70
+ - 🎯 **Mouse Click Ripple HUD**: Real-time visual animated ripple circles on left and right mouse clicks with customizable colors for software demos.
71
+ - 🎞️ **Direct GIF Recording & 2-Pass Palette Exporter**: Create lightweight, crystal-clear animated GIFs using two-pass FFmpeg palette generation (`palettegen` + `paletteuse`), perfect for GitHub READMEs and bug reports.
72
+ - 📸 **Instant High-Res Screenshots & Configurable Formats**: Capture fullscreen or region snapshots in **PNG (lossless)**, **JPG (compact)**, or **BMP (uncompressed)** in one keystroke (`F11`).
73
+ - 📐 **Instant Region Selection Hotkey (`F2`)**: Press `F2` from anywhere to trigger interactive region selection without touching the mouse on the UI.
74
+ - 🎛️ **Floating Mini-Toolbar Widget**: Compact, draggable on-screen controller during active recording with live duration timer and quick-action buttons.
75
+ - ⏱️ **Animated Countdown (3.. 2.. 1..)**: Clean pre-recording visual countdown overlay.
76
+ - 📁 **Integrated Media Gallery & Manager**: In-app viewer for recorded videos, GIFs, and screenshots, instant playback in default media player, folder reveal, clipboard copying (`Ctrl+C`), and 1-click GIF conversion.
77
+ - 🎨 **Modern Themed Interface**: Customizable dark and light palettes powered by `ttkbootstrap` (Darkly, Superhero, Solar, Cyborg, Cosmo, Flatly, Minty).
78
+ - ⚙️ **Configurable Encoding**: Adjustable framerates (15, 24, 30, 60 FPS), screenshot formats (PNG, JPG, BMP), audio bitrates (128k–320k), container formats (MP4, AVI, MKV, GIF), and custom hotkeys.
79
+
80
+ ---
81
+
82
+ ## ⌨️ Default Hotkeys
83
+
84
+ | Hotkey | Action | Description |
85
+ | :--- | :--- | :--- |
86
+ | **`F2`** | **Select Region** | Opens interactive region selection overlay directly |
87
+ | **`F5`** | **Start Recording** | Begins screen capture (with animated 3..2..1 countdown) |
88
+ | **`F6`** | **Pause / Resume** | Instantly toggles recording state without dropping sync |
89
+ | **`F10`** | **Stop & Save** | Concludes capture, finalizes file headers, and opens gallery |
90
+ | **`F11`** | **Quick Screenshot** | Captures active display/region to PNG/JPG/BMP immediately |
91
+ | **`Shift+F11`** | **Interactive Snip** | Interactive region snipping with crosshair & instant clipboard copy |
92
+ | **`ESC`** | **Cancel** | Exits region selection overlay |
93
+
94
+ *(All hotkeys are rebindable in the Settings tab)*
95
+
96
+ ---
97
+
98
+ ## 📁 Clean Architecture
99
+
100
+ ```
101
+ screenvideo/
102
+ ├── src/
103
+ │ ├── core/ # Core engine independent of UI
104
+ │ │ ├── clipboard.py # Native Win32 CF_DIB clipboard integration
105
+ │ │ ├── config.py # Persistent JSON settings & state
106
+ │ │ ├── cursor.py # Fast pointer capture & halo renderer
107
+ │ │ ├── gif.py # 2-pass animated GIF palette generator
108
+ │ │ ├── history.py # Media catalog & metadata storage
109
+ │ │ ├── hotkeys.py # Safe global low-level keyboard listener
110
+ │ │ ├── monitors.py # Multi-monitor enumeration & geometry
111
+ │ │ ├── recorder.py # Multi-threaded FPS-locked video writer
112
+ │ │ └── screenshot.py # High-performance PNG snapshot engine
113
+ │ ├── ui/ # Presentation layer (ttkbootstrap)
114
+ │ │ ├── views/ # Functional views
115
+ │ │ │ ├── record_view.py # Main capture & telemetry control
116
+ │ │ │ ├── history_view.py # Gallery of saved captures
117
+ │ │ │ └── settings_view.py # Encoder & audio preferences
118
+ │ │ ├── app.py # Main application coordinator
119
+ │ │ ├── countdown.py # Transparent overlay countdown
120
+ │ │ ├── floating_bar.py # Draggable mini control widget
121
+ │ │ ├── region_selector.py # Visual interactive snipping overlay
122
+ │ │ └── theme.py # Typography, palette & styling tokens
123
+ │ └── utils/ # System helpers & formatting
124
+ │ ├── formatting.py # Human-readable time, bitrate & sizes
125
+ │ └── system.py # High-DPI scaling & explorer integration
126
+ ├── asm/ # Native x64 assembly performance routines
127
+ ├── tests/ # Automated unit and integration tests
128
+ │ └── test_core.py
129
+ ├── main.py # Application bootstrap entry point
130
+ ├── pyproject.toml # Modern package metadata & ruff config
131
+ └── LICENSE # Official MIT License
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 🚀 Quick Start
137
+
138
+ ### Prerequisites
139
+ - **Windows 10 / 11 (64-bit)**
140
+ - **Python 3.10+** (Python 3.12+ recommended)
141
+ - Package manager: [`uv`](https://github.com/astral-sh/uv) (recommended) or `pip`
142
+
143
+ ### Running from Source
144
+
145
+ ```bash
146
+ # Clone the repository
147
+ git clone https://github.com/eminsk/screenvideo.git
148
+ cd screenvideo
149
+
150
+ # Synchronize dependencies with uv
151
+ uv sync
152
+
153
+ # Launch ScreenCapture Pro
154
+ uv run python main.py
155
+ ```
156
+
157
+ ### Running Test Suite
158
+
159
+ ```bash
160
+ uv run python -m unittest discover tests
161
+ ```
162
+
163
+ ---
164
+
165
+ ## ⚡ Native Standalone Binary Build (Flat Assembler x64)
166
+
167
+ In addition to the Python edition, ScreenCapture Pro includes a **pure 64-bit Flat Assembler (FASM x64) native edition** in [`asm/`](asm/README.md):
168
+ - **Ultra-lightweight**: ~37 KB standalone executable with **zero external dependencies** and no Python runtime needed.
169
+ - **Microsecond responsiveness**: Direct Win32 API calls (`USER32`, `GDI32`, `AVIFIL32`, `DWMAPI`).
170
+ - **Instant Compilation**: Compile directly using the included `asm/FASM.EXE`:
171
+
172
+ ```cmd
173
+ cd asm
174
+ build.bat
175
+ ```
176
+
177
+ ---
178
+
179
+ ## 🤖 Native Model Context Protocol (MCP) Server
180
+
181
+ ScreenCapture Pro includes a native **Model Context Protocol (MCP)** server (`screenvideo-mcp`), allowing AI agents (Claude Desktop, Cursor, Antigravity, OpenManus) to inspect display configurations, capture screenshots or bounding regions with mouse pointers, enumerate WASAPI audio devices, and copy images directly to the Windows clipboard over JSON-RPC 2.0 stdio.
182
+
183
+ ### 🛠 Available MCP Tools
184
+
185
+ | Tool | Parameters | Description |
186
+ |:---|:---|:---|
187
+ | `screen_list_monitors` | *(none)* | Discover physical & virtual monitors, geometries, resolutions, and primary screen flags |
188
+ | `screen_capture` | `monitor_index, x, y, width, height, format, save_dir, include_cursor, highlight_cursor, return_base64, copy_to_clipboard` | Capture high-resolution screenshot of a monitor or region with optional cursor halo and base64 export |
189
+ | `screen_list_audio_devices` | *(none)* | Enumerate output speakers (supporting WASAPI loopback audio recording) and microphones |
190
+ | `screen_copy_to_clipboard` | `file_path` | Copy an image file (PNG/JPG/BMP) directly to the Windows clipboard (`CF_DIB`) |
191
+
192
+ ### 🚀 Running the Server
193
+
194
+ Run directly via the CLI:
195
+ ```bash
196
+ # Using Python module
197
+ python -m src.mcp_server
198
+
199
+ # Or via CLI script
200
+ screenvideo-mcp
201
+ ```
202
+
203
+ ### ⚙️ Client Integration Configurations
204
+
205
+ #### Cursor (`.cursor/mcp.json`)
206
+ ```json
207
+ {
208
+ "mcpServers": {
209
+ "screenvideo": {
210
+ "command": "screenvideo-mcp"
211
+ }
212
+ }
213
+ }
214
+ ```
215
+
216
+ #### Claude Desktop (`claude_desktop_config.json`)
217
+ ```json
218
+ {
219
+ "mcpServers": {
220
+ "screenvideo": {
221
+ "command": "python",
222
+ "args": ["-m", "src.mcp_server"]
223
+ }
224
+ }
225
+ }
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 🌐 Author & Open Source Ecosystem
231
+
232
+ **ScreenCapture Pro** is maintained by **[@eminsk](https://github.com/eminsk)** as part of an active suite of systems engineering and quantitative open-source projects:
233
+
234
+ ### Maintained Projects
235
+ * **[agentjit](https://github.com/eminsk/agentjit)** — Just-In-Time Compiler for AI Agent Trajectories compiling workflows into 0.08ms Python code with Native MCP Server (`agentjit-mcp`). Featured as #1 Top Story in The Daily Diff.
236
+ * **[nanorecall](https://github.com/eminsk/nanorecall)** — 100% Private, Zero-Cloud desktop screen and memory search engine in <200KB with Native MCP Server (`nanorecall-mcp`).
237
+ * **[nanovector](https://github.com/eminsk/nanovector)** — Ultra-compact SQLite of vector search in ~120KB with AVX2+FMA, hand-crafted FASM x64 kernels, and Native MCP Server (`nanovector-mcp`).
238
+ * **[nanogemm](https://github.com/eminsk/nanogemm)** — Minimalist, bare-metal SIMD & Assembly GEMM engine for Python. Sub-microsecond CPU matrix multiplication and Native MCP Server (`nanogemm-mcp`).
239
+ * **[xlsx_vievers](https://github.com/eminsk/xlsx_vievers)** — Desktop spreadsheet processor with headless 129-function formula engine, SIMD SSE2 math, and Native MCP Server (`xlsx-viewer-mcp`).
240
+ * **[yfinance-ta-patterns](https://github.com/eminsk/yfinance-ta-patterns)** — Technical analysis candlestick scanner with quantitative AI confluence scoring, backtesting, and Native MCP Server (`yfinance-ta-mcp`).
241
+ * **[avito-sdk](https://github.com/eminsk/avito-sdk)** — High-performance headless Avito scraping & data extraction SDK with price drop tracking and Native MCP Server (`avito-mcp`).
242
+ * **[StackOverflowAPI](https://github.com/eminsk/StackOverflowAPI)** — Modern bilingual desktop reference and search client for Stack Overflow with native x64 FASM and CustomTkinter editions.
243
+
244
+ ### Community Open Source Contributions
245
+ * **[conda-forge/staged-recipes](https://github.com/conda-forge/staged-recipes)** (850+ ⭐) — [PR #34899 (Merged)](https://github.com/conda-forge/staged-recipes/pull/34899): Added official Conda feedstock recipe for `xlsx-viewer-pro` & active feedstock submissions.
246
+ * **[Duff89/parser_avito](https://github.com/Duff89/parser_avito)** (750+ ⭐) — [PR #331 (Merged)](https://github.com/Duff89/parser_avito/pull/331), [PR #329 (Merged)](https://github.com/Duff89/parser_avito/pull/329), [PR #328 (Merged)](https://github.com/Duff89/parser_avito/pull/328), [PR #327 (Merged)](https://github.com/Duff89/parser_avito/pull/327), [PR #337 (Active)](https://github.com/Duff89/parser_avito/pull/337), [PR #334 (Active)](https://github.com/Duff89/parser_avito/pull/334).
247
+ * **[xtekky/gpt4free](https://github.com/xtekky/gpt4free)** (65k+ ⭐) — [PR #3514 (Merged)](https://github.com/xtekky/gpt4free/pull/3514): Fixed unhandled `AttributeError` on session token in Copilot provider.
248
+ * **[flet-dev/flet](https://github.com/flet-dev/flet)** (11k+ ⭐) — [PR #6817 (Merged)](https://github.com/flet-dev/flet/pull/6817): Fixed Windows build crash on directory cleanup permissions.
249
+ * **[sqlfluff/sqlfluff](https://github.com/sqlfluff/sqlfluff)** (8.5k+ ⭐) — [PR #8449 (Merged)](https://github.com/sqlfluff/sqlfluff/pull/8449): MySQL-family `CONVERT(expr, type)` parser and rule support.
250
+ * **[Textualize/rich](https://github.com/Textualize/rich)** (49k+ ⭐) & **[textual](https://github.com/Textualize/textual)** (26k+ ⭐) — Terminal rendering and selection edge-case fixes.
251
+
252
+ ---
253
+
254
+ ## 📄 License
255
+
256
+ This project is licensed under the **MIT License** — see the [LICENSE](LICENSE) file for details.
257
+
258
+ ---
259
+
260
+ <details>
261
+ <summary><b>📖 Описание на русском языке (Нажмите, чтобы развернуть)</b></summary>
262
+
263
+ ### Основные возможности
264
+ * **Запись всего экрана или нескольких мониторов**: поддержка мультимониторных систем (выбор конкретного монитора или виртуального рабочего стола).
265
+ * **Интерактивный селектор области (Snipping Tool)**: визуальное выделение области экрана с затемнением, подсказками и отображением точных размеров.
266
+ * **Запись системного звука (динамики / наушники)**: кристально чистый захват через Windows WASAPI Loopback.
267
+ * **Прямой стриминг на диск (Zero-Memory)**: видеокадры записываются напрямую в файл без утечек оперативной памяти.
268
+ * **Пауза и Возобновление (Pause & Resume)**: мгновенная синхронная пауза видео и звука.
269
+ * **Захват и подсветка курсора**: высокоскоростной рендеринг указателя мыши и мягкого ореола (Halo).
270
+ * **Горячие клавиши по умолчанию**: `F5` — старт, `F6` — пауза, `F10` — стоп, `F11` — скриншот, `ESC` — отмена.
271
+ * **Лицензия**: MIT.
272
+
273
+ </details>
@@ -0,0 +1,228 @@
1
+ # 🎬 ScreenCapture Pro
2
+
3
+ [![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB.svg?logo=python&logoColor=white)](https://www.python.org/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-4CAF50.svg)](LICENSE)
5
+ [![MCP Server](https://img.shields.io/badge/MCP-Server%20Ready-blueviolet?logo=modelcontextprotocol)](https://github.com/eminsk/screenvideo)
6
+ [![Architecture: FASM x64](https://img.shields.io/badge/Native%20Build-FASM%20x64%20(~37%20KB)-E91E63.svg)](asm/README.md)
7
+ [![CI](https://github.com/eminsk/screenvideo/actions/workflows/ci.yml/badge.svg)](https://github.com/eminsk/screenvideo/actions/workflows/ci.yml)
8
+
9
+ **ScreenCapture Pro** is a modern, high-performance desktop screen recording and screenshot suite for Windows. Engineered with a zero-memory streaming architecture, low-latency WASAPI loopback audio, native Win32/x64 assembly optimizations, customizable hotkeys, interactive region snipping, and a sleek dark/light theme GUI.
10
+
11
+ ![Screen Recorder](icon.png)
12
+
13
+ ---
14
+
15
+ ## ✨ Key Features
16
+
17
+ - 🖥️ **Full-Screen & Multi-Monitor Support**: Seamless recording across single displays, multi-monitor setups, or virtual desktop workspaces.
18
+ - ✂️ **Interactive Region Selector & Snipping Tool**: Real-time visual region selection with darkened overlay, pixel dimensions HUD, aspect ratio guides, and dedicated snipping mode (`Shift+F11`).
19
+ - 📋 **Native Windows Clipboard Integration (`CF_DIB`)**: Instantly auto-copies snips and screenshots directly to the system clipboard for immediate `Ctrl+V` paste into Telegram, Discord, Slack, Word, or browsers. Includes 1-click "В буфер" and `Ctrl+C` in the gallery.
20
+ - 🔊 **System Audio Capture (WASAPI Loopback)**: Crystal-clear internal sound recording capturing speakers and headphones without external virtual cables.
21
+ - 🎤 **Microphone & Multi-Source Audio**: Record voice commentary independently or mixed synchronously with system audio.
22
+ - 💾 **Zero-Memory Direct-to-Disk Streaming**: Frames are encoded directly to disk via OpenCV/native pipes without ballooning RAM usage.
23
+ - ⏸️ **Synchronous Pause & Resume**: Instant pause and continuation keeping audio and video streams in lockstep.
24
+ - 🖱️ **Hardware Cursor Rendering & Halo Highlight**: Fast mouse pointer tracking with an optional translucent glowing halo for presentations and tutorials.
25
+ - 🎯 **Mouse Click Ripple HUD**: Real-time visual animated ripple circles on left and right mouse clicks with customizable colors for software demos.
26
+ - 🎞️ **Direct GIF Recording & 2-Pass Palette Exporter**: Create lightweight, crystal-clear animated GIFs using two-pass FFmpeg palette generation (`palettegen` + `paletteuse`), perfect for GitHub READMEs and bug reports.
27
+ - 📸 **Instant High-Res Screenshots & Configurable Formats**: Capture fullscreen or region snapshots in **PNG (lossless)**, **JPG (compact)**, or **BMP (uncompressed)** in one keystroke (`F11`).
28
+ - 📐 **Instant Region Selection Hotkey (`F2`)**: Press `F2` from anywhere to trigger interactive region selection without touching the mouse on the UI.
29
+ - 🎛️ **Floating Mini-Toolbar Widget**: Compact, draggable on-screen controller during active recording with live duration timer and quick-action buttons.
30
+ - ⏱️ **Animated Countdown (3.. 2.. 1..)**: Clean pre-recording visual countdown overlay.
31
+ - 📁 **Integrated Media Gallery & Manager**: In-app viewer for recorded videos, GIFs, and screenshots, instant playback in default media player, folder reveal, clipboard copying (`Ctrl+C`), and 1-click GIF conversion.
32
+ - 🎨 **Modern Themed Interface**: Customizable dark and light palettes powered by `ttkbootstrap` (Darkly, Superhero, Solar, Cyborg, Cosmo, Flatly, Minty).
33
+ - ⚙️ **Configurable Encoding**: Adjustable framerates (15, 24, 30, 60 FPS), screenshot formats (PNG, JPG, BMP), audio bitrates (128k–320k), container formats (MP4, AVI, MKV, GIF), and custom hotkeys.
34
+
35
+ ---
36
+
37
+ ## ⌨️ Default Hotkeys
38
+
39
+ | Hotkey | Action | Description |
40
+ | :--- | :--- | :--- |
41
+ | **`F2`** | **Select Region** | Opens interactive region selection overlay directly |
42
+ | **`F5`** | **Start Recording** | Begins screen capture (with animated 3..2..1 countdown) |
43
+ | **`F6`** | **Pause / Resume** | Instantly toggles recording state without dropping sync |
44
+ | **`F10`** | **Stop & Save** | Concludes capture, finalizes file headers, and opens gallery |
45
+ | **`F11`** | **Quick Screenshot** | Captures active display/region to PNG/JPG/BMP immediately |
46
+ | **`Shift+F11`** | **Interactive Snip** | Interactive region snipping with crosshair & instant clipboard copy |
47
+ | **`ESC`** | **Cancel** | Exits region selection overlay |
48
+
49
+ *(All hotkeys are rebindable in the Settings tab)*
50
+
51
+ ---
52
+
53
+ ## 📁 Clean Architecture
54
+
55
+ ```
56
+ screenvideo/
57
+ ├── src/
58
+ │ ├── core/ # Core engine independent of UI
59
+ │ │ ├── clipboard.py # Native Win32 CF_DIB clipboard integration
60
+ │ │ ├── config.py # Persistent JSON settings & state
61
+ │ │ ├── cursor.py # Fast pointer capture & halo renderer
62
+ │ │ ├── gif.py # 2-pass animated GIF palette generator
63
+ │ │ ├── history.py # Media catalog & metadata storage
64
+ │ │ ├── hotkeys.py # Safe global low-level keyboard listener
65
+ │ │ ├── monitors.py # Multi-monitor enumeration & geometry
66
+ │ │ ├── recorder.py # Multi-threaded FPS-locked video writer
67
+ │ │ └── screenshot.py # High-performance PNG snapshot engine
68
+ │ ├── ui/ # Presentation layer (ttkbootstrap)
69
+ │ │ ├── views/ # Functional views
70
+ │ │ │ ├── record_view.py # Main capture & telemetry control
71
+ │ │ │ ├── history_view.py # Gallery of saved captures
72
+ │ │ │ └── settings_view.py # Encoder & audio preferences
73
+ │ │ ├── app.py # Main application coordinator
74
+ │ │ ├── countdown.py # Transparent overlay countdown
75
+ │ │ ├── floating_bar.py # Draggable mini control widget
76
+ │ │ ├── region_selector.py # Visual interactive snipping overlay
77
+ │ │ └── theme.py # Typography, palette & styling tokens
78
+ │ └── utils/ # System helpers & formatting
79
+ │ ├── formatting.py # Human-readable time, bitrate & sizes
80
+ │ └── system.py # High-DPI scaling & explorer integration
81
+ ├── asm/ # Native x64 assembly performance routines
82
+ ├── tests/ # Automated unit and integration tests
83
+ │ └── test_core.py
84
+ ├── main.py # Application bootstrap entry point
85
+ ├── pyproject.toml # Modern package metadata & ruff config
86
+ └── LICENSE # Official MIT License
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 🚀 Quick Start
92
+
93
+ ### Prerequisites
94
+ - **Windows 10 / 11 (64-bit)**
95
+ - **Python 3.10+** (Python 3.12+ recommended)
96
+ - Package manager: [`uv`](https://github.com/astral-sh/uv) (recommended) or `pip`
97
+
98
+ ### Running from Source
99
+
100
+ ```bash
101
+ # Clone the repository
102
+ git clone https://github.com/eminsk/screenvideo.git
103
+ cd screenvideo
104
+
105
+ # Synchronize dependencies with uv
106
+ uv sync
107
+
108
+ # Launch ScreenCapture Pro
109
+ uv run python main.py
110
+ ```
111
+
112
+ ### Running Test Suite
113
+
114
+ ```bash
115
+ uv run python -m unittest discover tests
116
+ ```
117
+
118
+ ---
119
+
120
+ ## ⚡ Native Standalone Binary Build (Flat Assembler x64)
121
+
122
+ In addition to the Python edition, ScreenCapture Pro includes a **pure 64-bit Flat Assembler (FASM x64) native edition** in [`asm/`](asm/README.md):
123
+ - **Ultra-lightweight**: ~37 KB standalone executable with **zero external dependencies** and no Python runtime needed.
124
+ - **Microsecond responsiveness**: Direct Win32 API calls (`USER32`, `GDI32`, `AVIFIL32`, `DWMAPI`).
125
+ - **Instant Compilation**: Compile directly using the included `asm/FASM.EXE`:
126
+
127
+ ```cmd
128
+ cd asm
129
+ build.bat
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 🤖 Native Model Context Protocol (MCP) Server
135
+
136
+ ScreenCapture Pro includes a native **Model Context Protocol (MCP)** server (`screenvideo-mcp`), allowing AI agents (Claude Desktop, Cursor, Antigravity, OpenManus) to inspect display configurations, capture screenshots or bounding regions with mouse pointers, enumerate WASAPI audio devices, and copy images directly to the Windows clipboard over JSON-RPC 2.0 stdio.
137
+
138
+ ### 🛠 Available MCP Tools
139
+
140
+ | Tool | Parameters | Description |
141
+ |:---|:---|:---|
142
+ | `screen_list_monitors` | *(none)* | Discover physical & virtual monitors, geometries, resolutions, and primary screen flags |
143
+ | `screen_capture` | `monitor_index, x, y, width, height, format, save_dir, include_cursor, highlight_cursor, return_base64, copy_to_clipboard` | Capture high-resolution screenshot of a monitor or region with optional cursor halo and base64 export |
144
+ | `screen_list_audio_devices` | *(none)* | Enumerate output speakers (supporting WASAPI loopback audio recording) and microphones |
145
+ | `screen_copy_to_clipboard` | `file_path` | Copy an image file (PNG/JPG/BMP) directly to the Windows clipboard (`CF_DIB`) |
146
+
147
+ ### 🚀 Running the Server
148
+
149
+ Run directly via the CLI:
150
+ ```bash
151
+ # Using Python module
152
+ python -m src.mcp_server
153
+
154
+ # Or via CLI script
155
+ screenvideo-mcp
156
+ ```
157
+
158
+ ### ⚙️ Client Integration Configurations
159
+
160
+ #### Cursor (`.cursor/mcp.json`)
161
+ ```json
162
+ {
163
+ "mcpServers": {
164
+ "screenvideo": {
165
+ "command": "screenvideo-mcp"
166
+ }
167
+ }
168
+ }
169
+ ```
170
+
171
+ #### Claude Desktop (`claude_desktop_config.json`)
172
+ ```json
173
+ {
174
+ "mcpServers": {
175
+ "screenvideo": {
176
+ "command": "python",
177
+ "args": ["-m", "src.mcp_server"]
178
+ }
179
+ }
180
+ }
181
+ ```
182
+
183
+ ---
184
+
185
+ ## 🌐 Author & Open Source Ecosystem
186
+
187
+ **ScreenCapture Pro** is maintained by **[@eminsk](https://github.com/eminsk)** as part of an active suite of systems engineering and quantitative open-source projects:
188
+
189
+ ### Maintained Projects
190
+ * **[agentjit](https://github.com/eminsk/agentjit)** — Just-In-Time Compiler for AI Agent Trajectories compiling workflows into 0.08ms Python code with Native MCP Server (`agentjit-mcp`). Featured as #1 Top Story in The Daily Diff.
191
+ * **[nanorecall](https://github.com/eminsk/nanorecall)** — 100% Private, Zero-Cloud desktop screen and memory search engine in <200KB with Native MCP Server (`nanorecall-mcp`).
192
+ * **[nanovector](https://github.com/eminsk/nanovector)** — Ultra-compact SQLite of vector search in ~120KB with AVX2+FMA, hand-crafted FASM x64 kernels, and Native MCP Server (`nanovector-mcp`).
193
+ * **[nanogemm](https://github.com/eminsk/nanogemm)** — Minimalist, bare-metal SIMD & Assembly GEMM engine for Python. Sub-microsecond CPU matrix multiplication and Native MCP Server (`nanogemm-mcp`).
194
+ * **[xlsx_vievers](https://github.com/eminsk/xlsx_vievers)** — Desktop spreadsheet processor with headless 129-function formula engine, SIMD SSE2 math, and Native MCP Server (`xlsx-viewer-mcp`).
195
+ * **[yfinance-ta-patterns](https://github.com/eminsk/yfinance-ta-patterns)** — Technical analysis candlestick scanner with quantitative AI confluence scoring, backtesting, and Native MCP Server (`yfinance-ta-mcp`).
196
+ * **[avito-sdk](https://github.com/eminsk/avito-sdk)** — High-performance headless Avito scraping & data extraction SDK with price drop tracking and Native MCP Server (`avito-mcp`).
197
+ * **[StackOverflowAPI](https://github.com/eminsk/StackOverflowAPI)** — Modern bilingual desktop reference and search client for Stack Overflow with native x64 FASM and CustomTkinter editions.
198
+
199
+ ### Community Open Source Contributions
200
+ * **[conda-forge/staged-recipes](https://github.com/conda-forge/staged-recipes)** (850+ ⭐) — [PR #34899 (Merged)](https://github.com/conda-forge/staged-recipes/pull/34899): Added official Conda feedstock recipe for `xlsx-viewer-pro` & active feedstock submissions.
201
+ * **[Duff89/parser_avito](https://github.com/Duff89/parser_avito)** (750+ ⭐) — [PR #331 (Merged)](https://github.com/Duff89/parser_avito/pull/331), [PR #329 (Merged)](https://github.com/Duff89/parser_avito/pull/329), [PR #328 (Merged)](https://github.com/Duff89/parser_avito/pull/328), [PR #327 (Merged)](https://github.com/Duff89/parser_avito/pull/327), [PR #337 (Active)](https://github.com/Duff89/parser_avito/pull/337), [PR #334 (Active)](https://github.com/Duff89/parser_avito/pull/334).
202
+ * **[xtekky/gpt4free](https://github.com/xtekky/gpt4free)** (65k+ ⭐) — [PR #3514 (Merged)](https://github.com/xtekky/gpt4free/pull/3514): Fixed unhandled `AttributeError` on session token in Copilot provider.
203
+ * **[flet-dev/flet](https://github.com/flet-dev/flet)** (11k+ ⭐) — [PR #6817 (Merged)](https://github.com/flet-dev/flet/pull/6817): Fixed Windows build crash on directory cleanup permissions.
204
+ * **[sqlfluff/sqlfluff](https://github.com/sqlfluff/sqlfluff)** (8.5k+ ⭐) — [PR #8449 (Merged)](https://github.com/sqlfluff/sqlfluff/pull/8449): MySQL-family `CONVERT(expr, type)` parser and rule support.
205
+ * **[Textualize/rich](https://github.com/Textualize/rich)** (49k+ ⭐) & **[textual](https://github.com/Textualize/textual)** (26k+ ⭐) — Terminal rendering and selection edge-case fixes.
206
+
207
+ ---
208
+
209
+ ## 📄 License
210
+
211
+ This project is licensed under the **MIT License** — see the [LICENSE](LICENSE) file for details.
212
+
213
+ ---
214
+
215
+ <details>
216
+ <summary><b>📖 Описание на русском языке (Нажмите, чтобы развернуть)</b></summary>
217
+
218
+ ### Основные возможности
219
+ * **Запись всего экрана или нескольких мониторов**: поддержка мультимониторных систем (выбор конкретного монитора или виртуального рабочего стола).
220
+ * **Интерактивный селектор области (Snipping Tool)**: визуальное выделение области экрана с затемнением, подсказками и отображением точных размеров.
221
+ * **Запись системного звука (динамики / наушники)**: кристально чистый захват через Windows WASAPI Loopback.
222
+ * **Прямой стриминг на диск (Zero-Memory)**: видеокадры записываются напрямую в файл без утечек оперативной памяти.
223
+ * **Пауза и Возобновление (Pause & Resume)**: мгновенная синхронная пауза видео и звука.
224
+ * **Захват и подсветка курсора**: высокоскоростной рендеринг указателя мыши и мягкого ореола (Halo).
225
+ * **Горячие клавиши по умолчанию**: `F5` — старт, `F6` — пауза, `F10` — стоп, `F11` — скриншот, `ESC` — отмена.
226
+ * **Лицензия**: MIT.
227
+
228
+ </details>
@@ -0,0 +1,97 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "screenvideo"
7
+ version = "2.1.1"
8
+ description = "ScreenCapture Pro - Professional zero-memory screen recorder with modern UI, hotkey controls, and native MCP Server"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [
13
+ { name = "eminsk", email = "M_N_Nik@yahoo.com" }
14
+ ]
15
+ keywords = [
16
+ "screen-recorder",
17
+ "screen-capture",
18
+ "mcp",
19
+ "mcp-server",
20
+ "wasapi",
21
+ "screenshot",
22
+ "fasm",
23
+ "zero-memory",
24
+ "desktop-app",
25
+ ]
26
+ classifiers = [
27
+ "Development Status :: 5 - Production/Stable",
28
+ "Intended Audience :: Developers",
29
+ "Intended Audience :: End Users/Desktop",
30
+ "Operating System :: Microsoft :: Windows",
31
+ "Programming Language :: Python :: 3",
32
+ "Programming Language :: Python :: 3.10",
33
+ "Programming Language :: Python :: 3.11",
34
+ "Programming Language :: Python :: 3.12",
35
+ "Programming Language :: Python :: 3.13",
36
+ "Programming Language :: Python :: 3.14",
37
+ "Programming Language :: Python :: 3.15",
38
+ "Programming Language :: Python :: 3.16",
39
+ "Programming Language :: Python :: Implementation :: CPython",
40
+ "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture",
41
+ "Topic :: Multimedia :: Video :: Capture",
42
+ ]
43
+ dependencies = [
44
+ "opencv-python>=4.8.0; python_version < '3.16'",
45
+ "numpy>=1.24.0; python_version < '3.16'",
46
+ "mss>=9.0.0",
47
+ "keyboard>=0.13.5",
48
+ "ttkbootstrap>=1.10.0; python_version < '3.16'",
49
+ "pillow>=10.0.0; python_version < '3.16'",
50
+ "soundcard>=0.4.6; python_version < '3.16'",
51
+ "soundfile>=0.14.0; python_version < '3.16'",
52
+ "imageio-ffmpeg>=0.6.0",
53
+ ]
54
+
55
+ [project.optional-dependencies]
56
+ dev = [
57
+ "pytest>=8.0.0",
58
+ "ruff>=0.3.0",
59
+ "build>=1.0.0",
60
+ "twine>=5.0.0",
61
+ ]
62
+
63
+ [project.scripts]
64
+ screenvideo = "screenvideo.main:main"
65
+ screenvideo-mcp = "screenvideo.mcp_server:main_mcp"
66
+
67
+ [project.urls]
68
+ Homepage = "https://github.com/eminsk/screenvideo"
69
+ Repository = "https://github.com/eminsk/screenvideo"
70
+ Issues = "https://github.com/eminsk/screenvideo/issues"
71
+ Changelog = "https://github.com/eminsk/screenvideo/releases"
72
+
73
+ [tool.setuptools.packages.find]
74
+ where = ["."]
75
+ include = ["screenvideo*"]
76
+
77
+ [tool.pytest.ini_options]
78
+ pythonpath = ["."]
79
+ testpaths = ["tests"]
80
+
81
+ [tool.ruff]
82
+ line-length = 100
83
+ target-version = "py310"
84
+ extend-exclude = [
85
+ "test_eminsk.py",
86
+ "sync_news_pipeline.py",
87
+ "deploy_ftp.py",
88
+ "scratch_*.py",
89
+ "professional_retouch_*.py",
90
+ ]
91
+
92
+ [tool.ruff.lint]
93
+ select = ["E", "F", "I", "N", "W"]
94
+ ignore = ["E501"]
95
+
96
+ [tool.ruff.lint.per-file-ignores]
97
+ "tests/*" = ["E402"]
@@ -0,0 +1,3 @@
1
+ """ScreenCapture Pro application package."""
2
+
3
+ __version__ = "2.1.1"
@@ -0,0 +1,24 @@
1
+ from screenvideo.core.audio import AudioRecorder, merge_video_audio
2
+ from screenvideo.core.config import AppConfig
3
+ from screenvideo.core.cursor import CursorRenderer
4
+ from screenvideo.core.history import HistoryManager, MediaItem
5
+ from screenvideo.core.hotkeys import HotkeyManager
6
+ from screenvideo.core.monitors import MonitorInfo, Region, get_available_monitors
7
+ from screenvideo.core.recorder import RecordingState, ScreenRecorder
8
+ from screenvideo.core.screenshot import capture_screenshot
9
+
10
+ __all__ = [
11
+ "AppConfig",
12
+ "AudioRecorder",
13
+ "CursorRenderer",
14
+ "HistoryManager",
15
+ "HotkeyManager",
16
+ "MediaItem",
17
+ "MonitorInfo",
18
+ "Region",
19
+ "RecordingState",
20
+ "ScreenRecorder",
21
+ "capture_screenshot",
22
+ "get_available_monitors",
23
+ "merge_video_audio",
24
+ ]