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.
- screenvideo-2.1.1/LICENSE +21 -0
- screenvideo-2.1.1/PKG-INFO +273 -0
- screenvideo-2.1.1/README.md +228 -0
- screenvideo-2.1.1/pyproject.toml +97 -0
- screenvideo-2.1.1/screenvideo/__init__.py +3 -0
- screenvideo-2.1.1/screenvideo/core/__init__.py +24 -0
- screenvideo-2.1.1/screenvideo/core/audio.py +299 -0
- screenvideo-2.1.1/screenvideo/core/clipboard.py +139 -0
- screenvideo-2.1.1/screenvideo/core/config.py +109 -0
- screenvideo-2.1.1/screenvideo/core/cursor.py +231 -0
- screenvideo-2.1.1/screenvideo/core/gif.py +107 -0
- screenvideo-2.1.1/screenvideo/core/history.py +136 -0
- screenvideo-2.1.1/screenvideo/core/hotkeys.py +58 -0
- screenvideo-2.1.1/screenvideo/core/monitors.py +131 -0
- screenvideo-2.1.1/screenvideo/core/recorder.py +415 -0
- screenvideo-2.1.1/screenvideo/core/screenshot.py +83 -0
- screenvideo-2.1.1/screenvideo/main.py +24 -0
- screenvideo-2.1.1/screenvideo/mcp_server.py +389 -0
- screenvideo-2.1.1/screenvideo/ui/__init__.py +5 -0
- screenvideo-2.1.1/screenvideo/ui/app.py +358 -0
- screenvideo-2.1.1/screenvideo/ui/countdown.py +111 -0
- screenvideo-2.1.1/screenvideo/ui/floating_bar.py +152 -0
- screenvideo-2.1.1/screenvideo/ui/region_selector.py +233 -0
- screenvideo-2.1.1/screenvideo/ui/theme.py +48 -0
- screenvideo-2.1.1/screenvideo/ui/views/__init__.py +7 -0
- screenvideo-2.1.1/screenvideo/ui/views/history_view.py +306 -0
- screenvideo-2.1.1/screenvideo/ui/views/record_view.py +335 -0
- screenvideo-2.1.1/screenvideo/ui/views/settings_view.py +414 -0
- screenvideo-2.1.1/screenvideo/utils/__init__.py +13 -0
- screenvideo-2.1.1/screenvideo/utils/formatting.py +45 -0
- screenvideo-2.1.1/screenvideo/utils/system.py +76 -0
- screenvideo-2.1.1/screenvideo.egg-info/PKG-INFO +273 -0
- screenvideo-2.1.1/screenvideo.egg-info/SOURCES.txt +38 -0
- screenvideo-2.1.1/screenvideo.egg-info/dependency_links.txt +1 -0
- screenvideo-2.1.1/screenvideo.egg-info/entry_points.txt +3 -0
- screenvideo-2.1.1/screenvideo.egg-info/requires.txt +17 -0
- screenvideo-2.1.1/screenvideo.egg-info/top_level.txt +1 -0
- screenvideo-2.1.1/setup.cfg +4 -0
- screenvideo-2.1.1/tests/test_core.py +389 -0
- 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
|
+
[](https://www.python.org/)
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
[](https://github.com/eminsk/screenvideo)
|
|
51
|
+
[-E91E63.svg)](asm/README.md)
|
|
52
|
+
[](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
|
+

|
|
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
|
+
[](https://www.python.org/)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://github.com/eminsk/screenvideo)
|
|
6
|
+
[-E91E63.svg)](asm/README.md)
|
|
7
|
+
[](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
|
+

|
|
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,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
|
+
]
|