volatouch 1.0.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Uğur Türker Kebeci
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,4 @@
1
+ include LICENSE
2
+ include README.md
3
+ recursive-include volatouch/web *
4
+ recursive-include assets *
@@ -0,0 +1,246 @@
1
+ Metadata-Version: 2.4
2
+ Name: volatouch
3
+ Version: 1.0.0
4
+ Summary: Ultra-low latency mobile air control & wireless trackpad for PC over local Wi-Fi.
5
+ Home-page: https://github.com/ugurturkerkebeci/volatouch
6
+ Author: Uğur Türker Kebeci
7
+ Author-email: Uğur Türker Kebeci <167927605+ugurturkerkebeci@users.noreply.github.com>
8
+ License: MIT
9
+ Project-URL: Homepage, https://github.com/ugurturkerkebeci/volatouch
10
+ Project-URL: Repository, https://github.com/ugurturkerkebeci/volatouch
11
+ Project-URL: Issues, https://github.com/ugurturkerkebeci/volatouch/issues
12
+ Keywords: remote-desktop,trackpad,air-control,mouse,keyboard,low-latency,screen-stream,fastapi,websockets
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: Microsoft :: Windows
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Topic :: System :: Hardware
25
+ Classifier: Topic :: Multimedia :: Graphics :: Capture
26
+ Requires-Python: >=3.8
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: fastapi>=0.100.0
30
+ Requires-Dist: uvicorn[standard]>=0.22.0
31
+ Requires-Dist: websockets>=11.0
32
+ Requires-Dist: mss>=9.0.0
33
+ Requires-Dist: opencv-python>=4.8.0
34
+ Requires-Dist: pynput>=1.7.6
35
+ Dynamic: author
36
+ Dynamic: home-page
37
+ Dynamic: license-file
38
+ Dynamic: requires-python
39
+
40
+ <p align="center">
41
+ <img src="https://raw.githubusercontent.com/ugurturkerkebeci/volatouch/main/assets/banner.jpg" alt="Volatouch Banner" width="100%" />
42
+ </p>
43
+
44
+ <p align="center">
45
+ <img src="https://raw.githubusercontent.com/ugurturkerkebeci/volatouch/main/assets/logo.jpg" alt="Volatouch Logo" width="120" style="border-radius: 24px;" />
46
+ </p>
47
+
48
+ <h1 align="center">VOLATOUCH</h1>
49
+
50
+ <p align="center">
51
+ <strong>Ultra-Low Latency Mobile Air Control & Wireless Trackpad for PC over Wi-Fi</strong>
52
+ </p>
53
+
54
+ <p align="center">
55
+ <a href="https://pypi.org/project/volatouch/"><img src="https://img.shields.io/pypi/v/volatouch.svg?color=6366f1&style=for-the-badge" alt="PyPI version" /></a>
56
+ <a href="https://pypi.org/project/volatouch/"><img src="https://img.shields.io/pypi/pyversions/volatouch.svg?color=06b6d4&style=for-the-badge" alt="Python Versions" /></a>
57
+ <a href="https://github.com/ugurturkerkebeci/volatouch/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-emerald.svg?style=for-the-badge" alt="License: MIT" /></a>
58
+ <a href="https://github.com/ugurturkerkebeci/volatouch/stargazers"><img src="https://img.shields.io/github/stars/ugurturkerkebeci/volatouch?style=for-the-badge&color=eab308" alt="GitHub Stars" /></a>
59
+ <a href="https://github.com/ugurturkerkebeci/volatouch/issues"><img src="https://img.shields.io/github/issues/ugurturkerkebeci/volatouch?style=for-the-badge&color=ec4899" alt="GitHub Issues" /></a>
60
+ <img src="https://img.shields.io/badge/Platform-Windows-0284c7.svg?style=for-the-badge&logo=windows" alt="Platform: Windows" />
61
+ </p>
62
+
63
+ <p align="center">
64
+ <a href="#-quick-start-pypi">⚡ Quick Start</a> •
65
+ <a href="#-key-features">✨ Features</a> •
66
+ <a href="#-gesture--touch-cheatsheet">📱 Gestures</a> •
67
+ <a href="#-architecture">🏗️ Architecture</a> •
68
+ <a href="#-security--sandbox">🛡️ Security</a> •
69
+ <a href="#-settings--diagnostics">⚙️ Settings</a> •
70
+ <a href="#-t%C3%BCrk%C3%A7e-rehber">🇹🇷 Türkçe Rehber</a>
71
+ </p>
72
+
73
+ ---
74
+
75
+ ## ⚡ Quick Start (PyPI)
76
+
77
+ Install and launch Volatouch with a single command from your terminal:
78
+
79
+ ```bash
80
+ # 1. Install Volatouch via pip
81
+ pip install volatouch
82
+
83
+ # 2. Launch the server
84
+ volatouch
85
+ ```
86
+
87
+ Once started, the console displays your local server address (e.g., `http://192.168.1.5:8000`).
88
+ Open this URL in **Safari** or **Chrome** on your phone (connected to the same Wi-Fi) — **no mobile app installation required!**
89
+
90
+ ---
91
+
92
+ ## ✨ Key Features
93
+
94
+ - **🚀 Ultra-Low Latency Binary Video Streaming:**
95
+ - Screen capture powered by `mss` delivering hardware-level **60 FPS**.
96
+ - Direct 4-channel BGRA JPEG compression via OpenCV (`cv2.imencode`), skipping CPU color-space conversions.
97
+ - Raw binary ArrayBuffer transmission over WebSockets with 8-byte high-precision double timestamp headers for sub-millisecond round-trip profiling.
98
+ - Zero-delay, single-slot subscriber queues (`asyncio.Queue(maxsize=1)`) prevent buffer bloat and queue lag.
99
+
100
+ - **🎯 Dual Input Modes (Direct Target & Relative Trackpad):**
101
+ - **Direct Mode:** Tap anywhere on your phone's screen to navigate the cursor directly to that coordinate on your desktop display.
102
+ - **Relative Trackpad Mode:** Precision multi-touch trackpad navigation with acceleration and configurable sensitivity.
103
+
104
+ - **🏝️ Draggable Floating Action Island:**
105
+ - **L-Click / R-Click:** Dedicated, ergonomic primary action buttons.
106
+ - **Hold / Drag Lock:** One-tap persistent mouse hold with tactile haptic feedback for window movement and drag-and-drop.
107
+ - **Scroll Up / Down:** Instant micro-step vertical scrolling without needing two-finger gestures.
108
+ - **Collapsible Mini-Pill:** Compact mode keeps 100% of your screen visible when not interacting.
109
+ - **Auto Boundary Clamping:** Widgets automatically re-align to stay safely within the viewport across orientation changes and fullscreen toggles.
110
+
111
+ - **⌨️ Comprehensive Built-In Virtual Keyboard:**
112
+ - Full **QWERTY layout** with smart dynamic Caps / Shift character switching.
113
+ - **Sticky Modifier Keys:** `Ctrl`, `Shift`, `Alt`, and `Win (Super)` lock on tap (highlighted in indigo) for seamless desktop combos (e.g., `Ctrl` + `C`).
114
+ - Dedicated **F1–F12 function row**, navigation keys (`Esc`, `Tab`, `Home`, `End`, Arrows), and **Voice / Text input drawer**.
115
+
116
+ - **📱 Landscape Edge-to-Edge Fill Mode:**
117
+ - Switch between **Fit (Aspect Ratio)** and **Fill (Full Screen Stretch)** modes to eliminate black side bars on widescreen mobile displays.
118
+
119
+ - **🌐 Bilingual UI (English & Türkçe):**
120
+ - Instant toggle between English and Turkish directly from Settings, remembered via `localStorage`.
121
+
122
+ ---
123
+
124
+ ## 📱 Gesture & Touch Cheatsheet
125
+
126
+ | Gesture / Action | Relative Mode | Direct Mode |
127
+ | :--- | :--- | :--- |
128
+ | **1-Finger Drag** | Relative Mouse Cursor Movement | Direct Mouse Cursor Positioning |
129
+ | **1-Finger Tap** | Left Click (Mouse 1) | Left Click at Tap Point |
130
+ | **2-Finger Tap** | Right Click (Mouse 2) | Right Click at Tap Point |
131
+ | **2-Finger Scroll** | Smooth Vertical Mouse Wheel Scroll | Smooth Vertical Mouse Wheel Scroll |
132
+ | **Long Press (>350ms)** | Drag & Drop (Left Mouse Down) | Drag & Drop at Point |
133
+ | **Island `[ HOLD ]`** | Toggles Left Button Lock | Toggles Left Button Lock |
134
+ | **Island `[ UP/DOWN ]`**| Mouse Scroll Wheel Increment | Mouse Scroll Wheel Increment |
135
+
136
+ ---
137
+
138
+ ## 🏗️ Architecture
139
+
140
+ ```mermaid
141
+ flowchart TD
142
+ subgraph Host ["Desktop Host (Windows)"]
143
+ MSS["mss (Screen Capture 60 FPS)"] --> BGRA["Direct BGRA Frame (No cvtColor)"]
144
+ BGRA --> CV2["cv2.imencode (JPEG Compression)"]
145
+ CV2 --> TIME["Timestamp Header (8-Byte Double)"]
146
+ TIME --> ASYNC["Zero-Copy Queue (asyncio.Queue)"]
147
+ ASYNC --> WS_STREAM["/ws/stream (Binary WebSocket)"]
148
+
149
+ WS_INPUT["/ws/input (JSON WebSocket)"] --> CTRL["InputController (pynput)"]
150
+ CTRL --> OS_INPUT["Windows OS Hardware Emulation"]
151
+ end
152
+
153
+ subgraph Client ["Mobile Client (Browser / PWA)"]
154
+ WS_STREAM --> BITMAP["createImageBitmap (Worker-like GPU decode)"]
155
+ BITMAP --> RAF["requestAnimationFrame() -> HTML5 Canvas"]
156
+
157
+ TOUCH["Multi-Touch Engine (Direct & Relative)"] --> WS_INPUT
158
+ KB["Virtual Keyboard & Sticky Modifiers"] --> WS_INPUT
159
+ ACTIONS["Floating Island (Click, Hold, Scroll)"] --> WS_INPUT
160
+ end
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 🛡️ Security & Sandbox
166
+
167
+ Volatouch implements defense-in-depth security to protect your workstation on shared Wi-Fi networks:
168
+
169
+ 1. **Subnet Verification (RFC-1918):** Only clients within the identical `/24` private local subnet as the host machine can access endpoints or initiate WebSocket handshakes. External and non-local requests receive an immediate `403 Forbidden`.
170
+ 2. **Strict Origin & CSP Isolation:** Rejects unauthorized origin headers; enforces modern `Content-Security-Policy`, `X-Frame-Options: DENY`, and strict frame-ancestors restrictions.
171
+ 3. **Whitelisted Hardware Commands:** Only explicit, sanitized commands (`mouse_move`, `mouse_click`, `key_tap`, etc.) are processed. Arbitrary shell commands are impossible.
172
+ 4. **Failsafe Key Release:** Whenever a WebSocket connection drops, all pressed keys and mouse buttons are instantly released via `input_ctrl.release_all()` to prevent stuck keys on your PC.
173
+ 5. **Private Console Telemetry:** No third-party tracking, no external web calls, and silenced debug logs. The host console only shows an active connection counter.
174
+
175
+ ---
176
+
177
+ ## ⚙️ Settings & Diagnostics
178
+
179
+ Tap the floating gear icon to access:
180
+ - **JPEG Quality Slider (15% – 95%):** Dynamically tune bandwidth usage vs. visual clarity in real time.
181
+ - **Resolution Scale Slider (30% – 100%):** Downscale resolution for ultra-high FPS over congested Wi-Fi channels.
182
+ - **Cursor Speed & Acceleration:** Fine-tune trackpad velocity and exponential sensitivity curves.
183
+ - **Real-time Latency & FPS Badge:** Monitor live stream frame rates and hardware round-trip ping in milliseconds.
184
+ - **Language Selector:** Seamlessly switch between **English** and **Türkçe**.
185
+
186
+ ---
187
+
188
+ ## 💻 Running From Source
189
+
190
+ If you prefer building and developing Volatouch locally:
191
+
192
+ ### Prerequisites
193
+ - Python 3.8+ (Recommended: Python 3.10+)
194
+ - Node.js 18+ (for building the frontend)
195
+
196
+ ### Setup
197
+
198
+ ```bash
199
+ # 1. Clone repository
200
+ git clone https://github.com/ugurturkerkebeci/volatouch.git
201
+ cd volatouch
202
+
203
+ # 2. Install Python dependencies
204
+ pip install -r backend/requirements.txt
205
+
206
+ # 3. Build React frontend
207
+ cd frontend
208
+ npm install
209
+ npm run build
210
+ cd ..
211
+
212
+ # 4. Run application
213
+ python run.py
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 🇹🇷 Türkçe Rehber
219
+
220
+ Volatouch, aynı yerel Wi-Fi ağına bağlı bilgisayarınızı mobil cihazınızın web tarayıcısı üzerinden sıfıra yakın gecikmeyle (ultra-low latency) yönetmenizi sağlayan yüksek performanslı bir uzaktan kontrol ve hava trackpad sistemidir.
221
+
222
+ ### Hızlı Kurulum (PyPI):
223
+ ```bash
224
+ pip install volatouch
225
+ volatouch
226
+ ```
227
+ Konsolda yazan adresi (örn. `http://192.168.1.5:8000`) telefonunuzun tarayıcısında açmanız yeterlidir.
228
+
229
+ ### Başlıca Özellikler:
230
+ - **Sıfır Gecikme:** `mss` ve `OpenCV` tabanlı binary JPEG akışı, doğrudan GPU'da çizilen HTML5 Canvas ile tear veya kare düşmesi yaşatmaz.
231
+ - **Doğrudan ve Bağıl Mod:** İster ekrana dokunup imleci doğrudan oraya yönlendirin (Direct), ister dizüstü bilgisayar trackpad'i gibi kullanın (Relative).
232
+ - **Yüzen Fonksiyon Adası:** Sol tık, sağ tık, dosya sürüklemek için sol tık kilidi (`HOLD`), ve hassas kaydırma (`UP`/`DOWN`) butonları.
233
+ - **Dahili Türkçe/İngilizce QWERTY Klavye:** `Ctrl`, `Alt`, `Shift` gibi niteleyici tuşları basılı tutma desteği, F1–F12 tuşları ve ses/metin aktarım çekmecesi.
234
+ - **Yerel Ağ Güvenliği:** Yalnızca aynı yerel Wi-Fi alt ağındaki (subnet) cihazların bağlanmasına izin verir.
235
+
236
+ ---
237
+
238
+ ## 📄 License
239
+
240
+ Distributed under the **MIT License**. See [`LICENSE`](./LICENSE) for full details.
241
+
242
+ ---
243
+
244
+ <p align="center">
245
+ Crafted with ❤️ by <a href="https://github.com/ugurturkerkebeci">Uğur Türker Kebeci</a>
246
+ </p>
@@ -0,0 +1,207 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/ugurturkerkebeci/volatouch/main/assets/banner.jpg" alt="Volatouch Banner" width="100%" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/ugurturkerkebeci/volatouch/main/assets/logo.jpg" alt="Volatouch Logo" width="120" style="border-radius: 24px;" />
7
+ </p>
8
+
9
+ <h1 align="center">VOLATOUCH</h1>
10
+
11
+ <p align="center">
12
+ <strong>Ultra-Low Latency Mobile Air Control & Wireless Trackpad for PC over Wi-Fi</strong>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="https://pypi.org/project/volatouch/"><img src="https://img.shields.io/pypi/v/volatouch.svg?color=6366f1&style=for-the-badge" alt="PyPI version" /></a>
17
+ <a href="https://pypi.org/project/volatouch/"><img src="https://img.shields.io/pypi/pyversions/volatouch.svg?color=06b6d4&style=for-the-badge" alt="Python Versions" /></a>
18
+ <a href="https://github.com/ugurturkerkebeci/volatouch/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-emerald.svg?style=for-the-badge" alt="License: MIT" /></a>
19
+ <a href="https://github.com/ugurturkerkebeci/volatouch/stargazers"><img src="https://img.shields.io/github/stars/ugurturkerkebeci/volatouch?style=for-the-badge&color=eab308" alt="GitHub Stars" /></a>
20
+ <a href="https://github.com/ugurturkerkebeci/volatouch/issues"><img src="https://img.shields.io/github/issues/ugurturkerkebeci/volatouch?style=for-the-badge&color=ec4899" alt="GitHub Issues" /></a>
21
+ <img src="https://img.shields.io/badge/Platform-Windows-0284c7.svg?style=for-the-badge&logo=windows" alt="Platform: Windows" />
22
+ </p>
23
+
24
+ <p align="center">
25
+ <a href="#-quick-start-pypi">⚡ Quick Start</a> •
26
+ <a href="#-key-features">✨ Features</a> •
27
+ <a href="#-gesture--touch-cheatsheet">📱 Gestures</a> •
28
+ <a href="#-architecture">🏗️ Architecture</a> •
29
+ <a href="#-security--sandbox">🛡️ Security</a> •
30
+ <a href="#-settings--diagnostics">⚙️ Settings</a> •
31
+ <a href="#-t%C3%BCrk%C3%A7e-rehber">🇹🇷 Türkçe Rehber</a>
32
+ </p>
33
+
34
+ ---
35
+
36
+ ## ⚡ Quick Start (PyPI)
37
+
38
+ Install and launch Volatouch with a single command from your terminal:
39
+
40
+ ```bash
41
+ # 1. Install Volatouch via pip
42
+ pip install volatouch
43
+
44
+ # 2. Launch the server
45
+ volatouch
46
+ ```
47
+
48
+ Once started, the console displays your local server address (e.g., `http://192.168.1.5:8000`).
49
+ Open this URL in **Safari** or **Chrome** on your phone (connected to the same Wi-Fi) — **no mobile app installation required!**
50
+
51
+ ---
52
+
53
+ ## ✨ Key Features
54
+
55
+ - **🚀 Ultra-Low Latency Binary Video Streaming:**
56
+ - Screen capture powered by `mss` delivering hardware-level **60 FPS**.
57
+ - Direct 4-channel BGRA JPEG compression via OpenCV (`cv2.imencode`), skipping CPU color-space conversions.
58
+ - Raw binary ArrayBuffer transmission over WebSockets with 8-byte high-precision double timestamp headers for sub-millisecond round-trip profiling.
59
+ - Zero-delay, single-slot subscriber queues (`asyncio.Queue(maxsize=1)`) prevent buffer bloat and queue lag.
60
+
61
+ - **🎯 Dual Input Modes (Direct Target & Relative Trackpad):**
62
+ - **Direct Mode:** Tap anywhere on your phone's screen to navigate the cursor directly to that coordinate on your desktop display.
63
+ - **Relative Trackpad Mode:** Precision multi-touch trackpad navigation with acceleration and configurable sensitivity.
64
+
65
+ - **🏝️ Draggable Floating Action Island:**
66
+ - **L-Click / R-Click:** Dedicated, ergonomic primary action buttons.
67
+ - **Hold / Drag Lock:** One-tap persistent mouse hold with tactile haptic feedback for window movement and drag-and-drop.
68
+ - **Scroll Up / Down:** Instant micro-step vertical scrolling without needing two-finger gestures.
69
+ - **Collapsible Mini-Pill:** Compact mode keeps 100% of your screen visible when not interacting.
70
+ - **Auto Boundary Clamping:** Widgets automatically re-align to stay safely within the viewport across orientation changes and fullscreen toggles.
71
+
72
+ - **⌨️ Comprehensive Built-In Virtual Keyboard:**
73
+ - Full **QWERTY layout** with smart dynamic Caps / Shift character switching.
74
+ - **Sticky Modifier Keys:** `Ctrl`, `Shift`, `Alt`, and `Win (Super)` lock on tap (highlighted in indigo) for seamless desktop combos (e.g., `Ctrl` + `C`).
75
+ - Dedicated **F1–F12 function row**, navigation keys (`Esc`, `Tab`, `Home`, `End`, Arrows), and **Voice / Text input drawer**.
76
+
77
+ - **📱 Landscape Edge-to-Edge Fill Mode:**
78
+ - Switch between **Fit (Aspect Ratio)** and **Fill (Full Screen Stretch)** modes to eliminate black side bars on widescreen mobile displays.
79
+
80
+ - **🌐 Bilingual UI (English & Türkçe):**
81
+ - Instant toggle between English and Turkish directly from Settings, remembered via `localStorage`.
82
+
83
+ ---
84
+
85
+ ## 📱 Gesture & Touch Cheatsheet
86
+
87
+ | Gesture / Action | Relative Mode | Direct Mode |
88
+ | :--- | :--- | :--- |
89
+ | **1-Finger Drag** | Relative Mouse Cursor Movement | Direct Mouse Cursor Positioning |
90
+ | **1-Finger Tap** | Left Click (Mouse 1) | Left Click at Tap Point |
91
+ | **2-Finger Tap** | Right Click (Mouse 2) | Right Click at Tap Point |
92
+ | **2-Finger Scroll** | Smooth Vertical Mouse Wheel Scroll | Smooth Vertical Mouse Wheel Scroll |
93
+ | **Long Press (>350ms)** | Drag & Drop (Left Mouse Down) | Drag & Drop at Point |
94
+ | **Island `[ HOLD ]`** | Toggles Left Button Lock | Toggles Left Button Lock |
95
+ | **Island `[ UP/DOWN ]`**| Mouse Scroll Wheel Increment | Mouse Scroll Wheel Increment |
96
+
97
+ ---
98
+
99
+ ## 🏗️ Architecture
100
+
101
+ ```mermaid
102
+ flowchart TD
103
+ subgraph Host ["Desktop Host (Windows)"]
104
+ MSS["mss (Screen Capture 60 FPS)"] --> BGRA["Direct BGRA Frame (No cvtColor)"]
105
+ BGRA --> CV2["cv2.imencode (JPEG Compression)"]
106
+ CV2 --> TIME["Timestamp Header (8-Byte Double)"]
107
+ TIME --> ASYNC["Zero-Copy Queue (asyncio.Queue)"]
108
+ ASYNC --> WS_STREAM["/ws/stream (Binary WebSocket)"]
109
+
110
+ WS_INPUT["/ws/input (JSON WebSocket)"] --> CTRL["InputController (pynput)"]
111
+ CTRL --> OS_INPUT["Windows OS Hardware Emulation"]
112
+ end
113
+
114
+ subgraph Client ["Mobile Client (Browser / PWA)"]
115
+ WS_STREAM --> BITMAP["createImageBitmap (Worker-like GPU decode)"]
116
+ BITMAP --> RAF["requestAnimationFrame() -> HTML5 Canvas"]
117
+
118
+ TOUCH["Multi-Touch Engine (Direct & Relative)"] --> WS_INPUT
119
+ KB["Virtual Keyboard & Sticky Modifiers"] --> WS_INPUT
120
+ ACTIONS["Floating Island (Click, Hold, Scroll)"] --> WS_INPUT
121
+ end
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 🛡️ Security & Sandbox
127
+
128
+ Volatouch implements defense-in-depth security to protect your workstation on shared Wi-Fi networks:
129
+
130
+ 1. **Subnet Verification (RFC-1918):** Only clients within the identical `/24` private local subnet as the host machine can access endpoints or initiate WebSocket handshakes. External and non-local requests receive an immediate `403 Forbidden`.
131
+ 2. **Strict Origin & CSP Isolation:** Rejects unauthorized origin headers; enforces modern `Content-Security-Policy`, `X-Frame-Options: DENY`, and strict frame-ancestors restrictions.
132
+ 3. **Whitelisted Hardware Commands:** Only explicit, sanitized commands (`mouse_move`, `mouse_click`, `key_tap`, etc.) are processed. Arbitrary shell commands are impossible.
133
+ 4. **Failsafe Key Release:** Whenever a WebSocket connection drops, all pressed keys and mouse buttons are instantly released via `input_ctrl.release_all()` to prevent stuck keys on your PC.
134
+ 5. **Private Console Telemetry:** No third-party tracking, no external web calls, and silenced debug logs. The host console only shows an active connection counter.
135
+
136
+ ---
137
+
138
+ ## ⚙️ Settings & Diagnostics
139
+
140
+ Tap the floating gear icon to access:
141
+ - **JPEG Quality Slider (15% – 95%):** Dynamically tune bandwidth usage vs. visual clarity in real time.
142
+ - **Resolution Scale Slider (30% – 100%):** Downscale resolution for ultra-high FPS over congested Wi-Fi channels.
143
+ - **Cursor Speed & Acceleration:** Fine-tune trackpad velocity and exponential sensitivity curves.
144
+ - **Real-time Latency & FPS Badge:** Monitor live stream frame rates and hardware round-trip ping in milliseconds.
145
+ - **Language Selector:** Seamlessly switch between **English** and **Türkçe**.
146
+
147
+ ---
148
+
149
+ ## 💻 Running From Source
150
+
151
+ If you prefer building and developing Volatouch locally:
152
+
153
+ ### Prerequisites
154
+ - Python 3.8+ (Recommended: Python 3.10+)
155
+ - Node.js 18+ (for building the frontend)
156
+
157
+ ### Setup
158
+
159
+ ```bash
160
+ # 1. Clone repository
161
+ git clone https://github.com/ugurturkerkebeci/volatouch.git
162
+ cd volatouch
163
+
164
+ # 2. Install Python dependencies
165
+ pip install -r backend/requirements.txt
166
+
167
+ # 3. Build React frontend
168
+ cd frontend
169
+ npm install
170
+ npm run build
171
+ cd ..
172
+
173
+ # 4. Run application
174
+ python run.py
175
+ ```
176
+
177
+ ---
178
+
179
+ ## 🇹🇷 Türkçe Rehber
180
+
181
+ Volatouch, aynı yerel Wi-Fi ağına bağlı bilgisayarınızı mobil cihazınızın web tarayıcısı üzerinden sıfıra yakın gecikmeyle (ultra-low latency) yönetmenizi sağlayan yüksek performanslı bir uzaktan kontrol ve hava trackpad sistemidir.
182
+
183
+ ### Hızlı Kurulum (PyPI):
184
+ ```bash
185
+ pip install volatouch
186
+ volatouch
187
+ ```
188
+ Konsolda yazan adresi (örn. `http://192.168.1.5:8000`) telefonunuzun tarayıcısında açmanız yeterlidir.
189
+
190
+ ### Başlıca Özellikler:
191
+ - **Sıfır Gecikme:** `mss` ve `OpenCV` tabanlı binary JPEG akışı, doğrudan GPU'da çizilen HTML5 Canvas ile tear veya kare düşmesi yaşatmaz.
192
+ - **Doğrudan ve Bağıl Mod:** İster ekrana dokunup imleci doğrudan oraya yönlendirin (Direct), ister dizüstü bilgisayar trackpad'i gibi kullanın (Relative).
193
+ - **Yüzen Fonksiyon Adası:** Sol tık, sağ tık, dosya sürüklemek için sol tık kilidi (`HOLD`), ve hassas kaydırma (`UP`/`DOWN`) butonları.
194
+ - **Dahili Türkçe/İngilizce QWERTY Klavye:** `Ctrl`, `Alt`, `Shift` gibi niteleyici tuşları basılı tutma desteği, F1–F12 tuşları ve ses/metin aktarım çekmecesi.
195
+ - **Yerel Ağ Güvenliği:** Yalnızca aynı yerel Wi-Fi alt ağındaki (subnet) cihazların bağlanmasına izin verir.
196
+
197
+ ---
198
+
199
+ ## 📄 License
200
+
201
+ Distributed under the **MIT License**. See [`LICENSE`](./LICENSE) for full details.
202
+
203
+ ---
204
+
205
+ <p align="center">
206
+ Crafted with ❤️ by <a href="https://github.com/ugurturkerkebeci">Uğur Türker Kebeci</a>
207
+ </p>
Binary file
Binary file
@@ -0,0 +1,52 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "volatouch"
7
+ version = "1.0.0"
8
+ description = "Ultra-low latency mobile air control & wireless trackpad for PC over local Wi-Fi."
9
+ readme = "README.md"
10
+ authors = [
11
+ { name = "Uğur Türker Kebeci", email = "167927605+ugurturkerkebeci@users.noreply.github.com" }
12
+ ]
13
+ license = { text = "MIT" }
14
+ keywords = ["remote-desktop", "trackpad", "air-control", "mouse", "keyboard", "low-latency", "screen-stream", "fastapi", "websockets"]
15
+ classifiers = [
16
+ "Development Status :: 5 - Production/Stable",
17
+ "Intended Audience :: Developers",
18
+ "Intended Audience :: End Users/Desktop",
19
+ "License :: OSI Approved :: MIT License",
20
+ "Operating System :: Microsoft :: Windows",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.8",
23
+ "Programming Language :: Python :: 3.9",
24
+ "Programming Language :: Python :: 3.10",
25
+ "Programming Language :: Python :: 3.11",
26
+ "Programming Language :: Python :: 3.12",
27
+ "Topic :: System :: Hardware",
28
+ "Topic :: Multimedia :: Graphics :: Capture",
29
+ ]
30
+ requires-python = ">=3.8"
31
+ dependencies = [
32
+ "fastapi>=0.100.0",
33
+ "uvicorn[standard]>=0.22.0",
34
+ "websockets>=11.0",
35
+ "mss>=9.0.0",
36
+ "opencv-python>=4.8.0",
37
+ "pynput>=1.7.6",
38
+ ]
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/ugurturkerkebeci/volatouch"
42
+ Repository = "https://github.com/ugurturkerkebeci/volatouch"
43
+ Issues = "https://github.com/ugurturkerkebeci/volatouch/issues"
44
+
45
+ [project.scripts]
46
+ volatouch = "volatouch.cli:main"
47
+
48
+ [tool.setuptools]
49
+ packages = ["volatouch"]
50
+
51
+ [tool.setuptools.package-data]
52
+ volatouch = ["web/**/*", "web/*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,54 @@
1
+ from setuptools import setup, find_packages
2
+ import os
3
+
4
+ with open("README.md", "r", encoding="utf-8") as fh:
5
+ long_description = fh.read()
6
+
7
+ setup(
8
+ name="volatouch",
9
+ version="1.0.0",
10
+ author="Uğur Türker Kebeci",
11
+ author_email="167927605+ugurturkerkebeci@users.noreply.github.com",
12
+ description="Ultra-low latency mobile air control & wireless trackpad for PC over local Wi-Fi.",
13
+ long_description=long_description,
14
+ long_description_content_type="text/markdown",
15
+ url="https://github.com/ugurturkerkebeci/volatouch",
16
+ project_urls={
17
+ "Bug Tracker": "https://github.com/ugurturkerkebeci/volatouch/issues",
18
+ "Source Code": "https://github.com/ugurturkerkebeci/volatouch",
19
+ },
20
+ packages=find_packages(include=["volatouch", "volatouch.*"]),
21
+ package_data={
22
+ "volatouch": ["web/**/*", "web/*"],
23
+ },
24
+ include_package_data=True,
25
+ classifiers=[
26
+ "Development Status :: 5 - Production/Stable",
27
+ "Intended Audience :: Developers",
28
+ "Intended Audience :: End Users/Desktop",
29
+ "License :: OSI Approved :: MIT License",
30
+ "Operating System :: Microsoft :: Windows",
31
+ "Programming Language :: Python :: 3",
32
+ "Programming Language :: Python :: 3.8",
33
+ "Programming Language :: Python :: 3.9",
34
+ "Programming Language :: Python :: 3.10",
35
+ "Programming Language :: Python :: 3.11",
36
+ "Programming Language :: Python :: 3.12",
37
+ "Topic :: System :: Hardware",
38
+ "Topic :: Multimedia :: Graphics :: Capture",
39
+ ],
40
+ python_requires=">=3.8",
41
+ install_requires=[
42
+ "fastapi>=0.100.0",
43
+ "uvicorn[standard]>=0.22.0",
44
+ "websockets>=11.0",
45
+ "mss>=9.0.0",
46
+ "opencv-python>=4.8.0",
47
+ "pynput>=1.7.6",
48
+ ],
49
+ entry_points={
50
+ "console_scripts": [
51
+ "volatouch=volatouch.cli:main",
52
+ ],
53
+ },
54
+ )
@@ -0,0 +1,7 @@
1
+ """
2
+ Volatouch: Ultra-low latency mobile air control & wireless trackpad for PC over local Wi-Fi.
3
+ """
4
+
5
+ __version__ = "1.0.0"
6
+ __author__ = "Uğur Türker Kebeci"
7
+ __license__ = "MIT"
@@ -0,0 +1,4 @@
1
+ from volatouch.cli import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,19 @@
1
+ import argparse
2
+ import sys
3
+ import uvicorn
4
+ from volatouch.config import config, LOCAL_IP
5
+
6
+ def main():
7
+ parser = argparse.ArgumentParser(
8
+ prog="volatouch",
9
+ description="Volatouch: Zero-Latency Mobile Air Control & Remote Trackpad for PC over local Wi-Fi."
10
+ )
11
+ parser.add_argument("--host", default=config.host, help=f"Host interface to bind (default: {config.host})")
12
+ parser.add_argument("--port", type=int, default=config.port, help=f"Port to listen on (default: {config.port})")
13
+ parser.add_argument("--version", action="version", version="%(prog)s 1.0.0")
14
+ args = parser.parse_args()
15
+
16
+ uvicorn.run("volatouch.main:app", host=args.host, port=args.port, log_level="warning", access_log=False)
17
+
18
+ if __name__ == "__main__":
19
+ main()
@@ -0,0 +1,26 @@
1
+ import socket
2
+ from dataclasses import dataclass
3
+
4
+ def get_local_ip() -> str:
5
+ """Attempts to find the LAN IP address of this machine."""
6
+ try:
7
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
8
+ # Does not actually create a connection, just gets outbound interface
9
+ s.connect(("8.8.8.8", 80))
10
+ ip = s.getsockname()[0]
11
+ s.close()
12
+ return ip
13
+ except Exception:
14
+ return "127.0.0.1"
15
+
16
+ @dataclass
17
+ class StreamConfig:
18
+ host: str = "0.0.0.0"
19
+ port: int = 8000
20
+ default_quality: int = 55 # JPEG quality (10-100)
21
+ default_scale: float = 0.70 # Resolution scale (0.3 - 1.0)
22
+ target_fps: int = 60 # Maximum capture rate
23
+ monitor_index: int = 1 # Primary monitor in mss
24
+
25
+ config = StreamConfig()
26
+ LOCAL_IP = get_local_ip()