talks-reducer 0.7.1__tar.gz → 0.8.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.
Files changed (68) hide show
  1. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/PKG-INFO +24 -2
  2. talks_reducer-0.7.1/talks_reducer.egg-info/PKG-INFO → talks_reducer-0.8.0/README.md +175 -181
  3. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/__about__.py +1 -1
  4. talks_reducer-0.8.0/talks_reducer/cli.py +549 -0
  5. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/discovery.py +78 -22
  6. talks_reducer-0.8.0/talks_reducer/gui/__init__.py +21 -0
  7. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/__main__.py +1 -1
  8. talks_reducer-0.7.1/talks_reducer/gui/__init__.py → talks_reducer-0.8.0/talks_reducer/gui/app.py +249 -414
  9. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/discovery.py +1 -1
  10. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/layout.py +18 -31
  11. talks_reducer-0.8.0/talks_reducer/gui/progress.py +80 -0
  12. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/remote.py +11 -3
  13. talks_reducer-0.8.0/talks_reducer/gui/startup.py +202 -0
  14. talks_reducer-0.8.0/talks_reducer/icons.py +123 -0
  15. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/pipeline.py +65 -31
  16. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/server.py +111 -47
  17. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/server_tray.py +192 -236
  18. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/service_client.py +77 -14
  19. talks_reducer-0.7.1/README.md → talks_reducer-0.8.0/talks_reducer.egg-info/PKG-INFO +203 -153
  20. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer.egg-info/SOURCES.txt +17 -0
  21. talks_reducer-0.8.0/tests/test_audio.py +253 -0
  22. talks_reducer-0.8.0/tests/test_chunks.py +123 -0
  23. talks_reducer-0.8.0/tests/test_cli.py +680 -0
  24. talks_reducer-0.8.0/tests/test_discovery.py +316 -0
  25. talks_reducer-0.8.0/tests/test_entrypoints.py +62 -0
  26. talks_reducer-0.8.0/tests/test_ffmpeg.py +401 -0
  27. talks_reducer-0.8.0/tests/test_gui_app.py +270 -0
  28. talks_reducer-0.8.0/tests/test_gui_discovery.py +332 -0
  29. talks_reducer-0.8.0/tests/test_gui_layout.py +604 -0
  30. talks_reducer-0.8.0/tests/test_gui_progress.py +38 -0
  31. talks_reducer-0.8.0/tests/test_gui_remote.py +330 -0
  32. talks_reducer-0.8.0/tests/test_gui_startup.py +145 -0
  33. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/tests/test_gui_summary_parsing.py +1 -1
  34. talks_reducer-0.8.0/tests/test_icons.py +37 -0
  35. talks_reducer-0.8.0/tests/test_models_version.py +149 -0
  36. talks_reducer-0.8.0/tests/test_pipeline.py +154 -0
  37. talks_reducer-0.8.0/tests/test_pipeline_service.py +292 -0
  38. talks_reducer-0.8.0/tests/test_progress.py +101 -0
  39. talks_reducer-0.8.0/tests/test_server.py +494 -0
  40. talks_reducer-0.8.0/tests/test_server_tray.py +297 -0
  41. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/tests/test_service_client.py +171 -0
  42. talks_reducer-0.7.1/talks_reducer/cli.py +0 -505
  43. talks_reducer-0.7.1/tests/test_audio.py +0 -47
  44. talks_reducer-0.7.1/tests/test_cli.py +0 -264
  45. talks_reducer-0.7.1/tests/test_discovery.py +0 -119
  46. talks_reducer-0.7.1/tests/test_gui_remote.py +0 -171
  47. talks_reducer-0.7.1/tests/test_pipeline_service.py +0 -105
  48. talks_reducer-0.7.1/tests/test_server.py +0 -181
  49. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/LICENSE +0 -0
  50. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/pyproject.toml +0 -0
  51. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/setup.cfg +0 -0
  52. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/__init__.py +0 -0
  53. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/__main__.py +0 -0
  54. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/audio.py +0 -0
  55. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/chunks.py +0 -0
  56. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/ffmpeg.py +0 -0
  57. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/preferences.py +0 -0
  58. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/gui/theme.py +0 -0
  59. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/models.py +0 -0
  60. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/progress.py +0 -0
  61. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/resources/__init__.py +0 -0
  62. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer/version_utils.py +0 -0
  63. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer.egg-info/dependency_links.txt +0 -0
  64. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer.egg-info/entry_points.txt +0 -0
  65. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer.egg-info/requires.txt +0 -0
  66. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/talks_reducer.egg-info/top_level.txt +0 -0
  67. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/tests/test_gui_preferences.py +0 -0
  68. {talks_reducer-0.7.1 → talks_reducer-0.8.0}/tests/test_gui_theme.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: talks-reducer
3
- Version: 0.7.1
3
+ Version: 0.8.0
4
4
  Summary: CLI for speeding up long-form talks by removing silence
5
5
  Author: Talks Reducer Maintainers
6
6
  License-Expression: MIT
@@ -26,7 +26,7 @@ Requires-Dist: bump-my-version>=0.5.0; extra == "dev"
26
26
  Requires-Dist: pyinstaller>=6.4.0; extra == "dev"
27
27
  Dynamic: license-file
28
28
 
29
- # Talks Reducer
29
+ # Talks Reducer [![Coverage Status](https://coveralls.io/repos/github/popstas/talks-reducer/badge.svg?branch=master)](https://coveralls.io/github/popstas/talks-reducer?branch=master)
30
30
 
31
31
  Talks Reducer shortens long-form presentations by removing silent gaps and optionally re-encoding them to smaller files. The
32
32
  project was renamed from **jumpcutter** to emphasize its focus on conference talks and screencasts.
@@ -174,6 +174,28 @@ The helper wraps the Gradio API exposed by `server.py`, waits for processing to
174
174
  path you provide. Pass `--small` to mirror the **Small video** checkbox or `--print-log` to stream the server log after the
175
175
  download finishes.
176
176
 
177
+ ## Faster PyInstaller builds
178
+
179
+ PyInstaller spends most of its time walking imports. To keep GUI builds snappy:
180
+
181
+ - Create a dedicated virtual environment for packaging the GUI and install only
182
+ the runtime dependencies you need (for example `pip install -r
183
+ requirements.txt -r scripts/requirements-pyinstaller.txt`). Avoid installing
184
+ heavy ML stacks such as Torch or TensorFlow in that environment so PyInstaller
185
+ never attempts to analyze them.
186
+ - Use the committed `talks-reducer.spec` file via `./scripts/build-gui.sh`.
187
+ The spec excludes Torch, TensorFlow, TensorBoard, torchvision/torchaudio,
188
+ Pandas, Qt bindings, setuptools' vendored helpers, and other bulky modules
189
+ that previously slowed the analysis stage. Set
190
+ `PYINSTALLER_EXTRA_EXCLUDES=module1,module2` if you need to drop additional
191
+ imports for an experimental build.
192
+ - Keep optional imports in the codebase lazy (wrapped in `try/except` or moved
193
+ inside functions) so the analyzer only sees the dependencies required for the
194
+ shipping GUI.
195
+
196
+ The script keeps incremental build artifacts in `build/` between runs. Pass
197
+ `--clean` to `scripts/build-gui.sh` when you want a full rebuild.
198
+
177
199
  ## Contributing
178
200
  See `CONTRIBUTION.md` for development setup details and guidance on sharing improvements.
179
201
 
@@ -1,181 +1,175 @@
1
- Metadata-Version: 2.4
2
- Name: talks-reducer
3
- Version: 0.7.1
4
- Summary: CLI for speeding up long-form talks by removing silence
5
- Author: Talks Reducer Maintainers
6
- License-Expression: MIT
7
- Requires-Python: >=3.9
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Requires-Dist: audiotsm>=0.1.2
11
- Requires-Dist: scipy>=1.10.0
12
- Requires-Dist: numpy>=1.22.0
13
- Requires-Dist: tqdm>=4.65.0
14
- Requires-Dist: tkinterdnd2>=0.3.0
15
- Requires-Dist: Pillow>=9.0.0
16
- Requires-Dist: pystray>=0.19.5
17
- Requires-Dist: imageio-ffmpeg>=0.4.8
18
- Requires-Dist: gradio>=4.0.0
19
- Provides-Extra: dev
20
- Requires-Dist: build>=1.0.0; extra == "dev"
21
- Requires-Dist: twine>=4.0.0; extra == "dev"
22
- Requires-Dist: pytest>=7.0.0; extra == "dev"
23
- Requires-Dist: black>=23.0.0; extra == "dev"
24
- Requires-Dist: isort>=5.12.0; extra == "dev"
25
- Requires-Dist: bump-my-version>=0.5.0; extra == "dev"
26
- Requires-Dist: pyinstaller>=6.4.0; extra == "dev"
27
- Dynamic: license-file
28
-
29
- # Talks Reducer
30
-
31
- Talks Reducer shortens long-form presentations by removing silent gaps and optionally re-encoding them to smaller files. The
32
- project was renamed from **jumpcutter** to emphasize its focus on conference talks and screencasts.
33
-
34
- ![Main demo](docs/assets/screencast-main.gif)
35
-
36
- ## Example
37
- - 1h 37m, 571 MB Original OBS video recording
38
- - 1h 19m, 751 MB Talks Reducer
39
- - 1h 19m, 171 MB — Talks Reducer `--small`
40
-
41
- ## Changelog
42
-
43
- See [CHANGELOG.md](CHANGELOG.md).
44
-
45
- ## Install GUI (Windows, macOS)
46
- Go to the [releases page](https://github.com/popstas/talks-reducer/releases) and download the appropriate artifact:
47
-
48
- - **Windows** `talks-reducer-windows-0.4.0.zip`
49
- - **macOS** `talks-reducer.app.zip`
50
-
51
- > **Troubleshooting:** If launching the bundle (or running `python -m talks_reducer.gui`) prints `macOS 26 (2600) or later required, have instead 16 (1600)!`, make sure you're using a Python build that ships a modern Tk. The stock [python.org 3.13.5 installer](https://www.python.org/downloads/release/python-3135/) includes Tk 8.6 and has been verified to work.
52
-
53
- When extracted on Windows the bundled `talks-reducer.exe` behaves like running
54
- `python -m talks_reducer.gui`: double-clicking it launches the GUI
55
- and passing a video file path (for example via *Open with…* or drag-and-drop
56
- onto the executable) automatically queues that recording for processing.
57
-
58
- ## Install CLI (Linux, Windows, macOS)
59
- ```
60
- pip install talks-reducer
61
- ```
62
-
63
- **Note:** FFmpeg is now bundled automatically with the package, so you don't need to install it separately. You you need, don't know actually.
64
-
65
- The `--small` preset applies a 720p video scale and 128 kbps audio bitrate, making it useful for sharing talks over constrained
66
- connections. Without `--small`, the script aims to preserve original quality while removing silence.
67
-
68
- Example CLI usage:
69
-
70
- ```sh
71
- talks-reducer --small input.mp4
72
- ```
73
-
74
- Need to offload work to a remote Talks Reducer server? Pass `--url` with the
75
- server address and the CLI will upload the input, wait for processing to finish,
76
- and download the rendered video. You can also provide `--host` to expand to the
77
- default Talks Reducer port (`http://<host>:9005`):
78
-
79
- ```sh
80
- talks-reducer --url http://localhost:9005 demo.mp4
81
- talks-reducer --host 192.168.1.42 demo.mp4
82
- ```
83
-
84
- Remote jobs respect the same timing controls as the local CLI. Provide
85
- `--silent-threshold`, `--sounded-speed`, or `--silent-speed` to tweak how the
86
- server trims and accelerates segments without falling back to local mode.
87
-
88
- Want to see progress as the remote server works? Add `--server-stream` so the
89
- CLI prints live progress bars and log lines while you wait for the download.
90
-
91
- ### Speech detection
92
-
93
- Talks Reducer now relies on its built-in volume thresholding to detect speech. Adjust `--silent_threshold` if you need to fine-tune when segments count as silence. Dropping the optional Silero VAD integration keeps the install lightweight and avoids pulling in PyTorch.
94
-
95
- When CUDA-capable hardware is available the pipeline leans on GPU encoders to keep export times low, but it still runs great on
96
- CPUs.
97
-
98
- ## Simple web server
99
-
100
- Prefer a lightweight browser interface? Launch the Gradio-powered simple mode with:
101
-
102
- ```sh
103
- talks-reducer server
104
- ```
105
-
106
- The browser UI mirrors the CLI timing controls with sliders for the silent
107
- threshold and playback speeds, so you can tune exports without leaving the
108
- remote workflow.
109
-
110
- Want the server to live in your system tray instead of a terminal window? Use:
111
-
112
- ```sh
113
- talks-reducer server-tray
114
- ```
115
-
116
- Bundled Windows builds include the same behaviour: run
117
- `talks-reducer.exe --server` to launch the tray-managed server directly from the
118
- desktop shortcut without opening the GUI first.
119
-
120
- Pass `--debug` to print verbose logs about the tray icon lifecycle, and
121
- `--tray-mode pystray-detached` to try pystray's alternate detached runner. If
122
- the icon backend refuses to appear, fall back to `--tray-mode headless` to keep
123
- the web server running without a tray process. The tray menu highlights the
124
- running Talks Reducer version and includes an **Open GUI**
125
- item (also triggered by double-clicking the icon) that launches the desktop
126
- Talks Reducer interface alongside an **Open WebUI** entry that opens the Gradio
127
- page in your browser. Close the GUI window to return to the tray without
128
- stopping the server. Launch the tray explicitly whenever you need it—either run
129
- `talks-reducer server-tray` directly or start the GUI with
130
- `python -m talks_reducer.gui --server` to boot the tray-managed server instead
131
- of the desktop window. The GUI now runs standalone and no longer spawns the tray
132
- automatically; the deprecated `--no-tray` flag is ignored for compatibility.
133
- The tray command itself never launches the GUI automatically, so use the menu
134
- item (or relaunch the GUI separately) whenever you want to reopen it. The tray
135
- no longer opens a browser automatically—pass `--open-browser` if you prefer the
136
- web page to launch as soon as the server is ready.
137
-
138
- This opens a local web page featuring a drag-and-drop upload zone, a **Small video** checkbox that mirrors the CLI preset, a live
139
- progress indicator, and automatic previews of the processed output. The page header and browser tab title include the current
140
- Talks Reducer version so you can confirm which build the server is running. Once the job completes you can inspect the resulting
141
- compression ratio and download the rendered video directly from the page.
142
-
143
- The desktop GUI mirrors this behaviour. Open **Advanced** settings to provide a
144
- server URL and click **Discover** to scan your local network for Talks Reducer
145
- instances listening on port `9005`. The button now updates with the discovery
146
- progress, showing the scanned/total host count as `scanned / total`. A new
147
- **Processing mode** toggle lets you decide whether work stays local or uploads
148
- to the configured server—the **Remote** option becomes available as soon as a
149
- URL is supplied. Leave the toggle on **Local** to keep rendering on this
150
- machine even if a server is saved; switch to **Remote** to hand jobs off while
151
- the GUI downloads the finished files automatically.
152
-
153
- ### Uploading and retrieving a processed video
154
-
155
- 1. Open the printed `http://localhost:<port>` address (the default port is `9005`).
156
- 2. Drag a video onto the **Video file** drop zone or click to browse and select one from disk.
157
- 3. **Small video** starts enabled to apply the 720p/128 kbps preset. Clear the box before the upload finishes if you want to keep the original resolution and bitrate.
158
- 4. Wait for the progress bar and log to report completion—the interface queues work automatically after the file arrives.
159
- 5. Watch the processed preview in the **Processed video** player and click **Download processed file** to save the result locally.
160
-
161
- Need to change where the server listens? Run `talks-reducer server --host 0.0.0.0 --port 7860` (or any other port) to bind to a
162
- different address.
163
-
164
- ### Automating uploads from the command line
165
-
166
- Prefer to script uploads instead of using the browser UI? Start the server and use the bundled helper to submit a job and save
167
- the processed video locally:
168
-
169
- ```sh
170
- python -m talks_reducer.service_client --server http://127.0.0.1:9005/ --input demo.mp4 --output output/demo_processed.mp4
171
- ```
172
-
173
- The helper wraps the Gradio API exposed by `server.py`, waits for processing to complete, then copies the rendered file to the
174
- path you provide. Pass `--small` to mirror the **Small video** checkbox or `--print-log` to stream the server log after the
175
- download finishes.
176
-
177
- ## Contributing
178
- See `CONTRIBUTION.md` for development setup details and guidance on sharing improvements.
179
-
180
- ## License
181
- Talks Reducer is released under the MIT License. See `LICENSE` for the full text.
1
+ # Talks Reducer [![Coverage Status](https://coveralls.io/repos/github/popstas/talks-reducer/badge.svg?branch=master)](https://coveralls.io/github/popstas/talks-reducer?branch=master)
2
+
3
+ Talks Reducer shortens long-form presentations by removing silent gaps and optionally re-encoding them to smaller files. The
4
+ project was renamed from **jumpcutter** to emphasize its focus on conference talks and screencasts.
5
+
6
+ ![Main demo](docs/assets/screencast-main.gif)
7
+
8
+ ## Example
9
+ - 1h 37m, 571 MB — Original OBS video recording
10
+ - 1h 19m, 751 MB — Talks Reducer
11
+ - 1h 19m, 171 MB — Talks Reducer `--small`
12
+
13
+ ## Changelog
14
+
15
+ See [CHANGELOG.md](CHANGELOG.md).
16
+
17
+ ## Install GUI (Windows, macOS)
18
+ Go to the [releases page](https://github.com/popstas/talks-reducer/releases) and download the appropriate artifact:
19
+
20
+ - **Windows** — `talks-reducer-windows-0.4.0.zip`
21
+ - **macOS** — `talks-reducer.app.zip`
22
+
23
+ > **Troubleshooting:** If launching the bundle (or running `python -m talks_reducer.gui`) prints `macOS 26 (2600) or later required, have instead 16 (1600)!`, make sure you're using a Python build that ships a modern Tk. The stock [python.org 3.13.5 installer](https://www.python.org/downloads/release/python-3135/) includes Tk 8.6 and has been verified to work.
24
+
25
+ When extracted on Windows the bundled `talks-reducer.exe` behaves like running
26
+ `python -m talks_reducer.gui`: double-clicking it launches the GUI
27
+ and passing a video file path (for example via *Open with…* or drag-and-drop
28
+ onto the executable) automatically queues that recording for processing.
29
+
30
+ ## Install CLI (Linux, Windows, macOS)
31
+ ```
32
+ pip install talks-reducer
33
+ ```
34
+
35
+ **Note:** FFmpeg is now bundled automatically with the package, so you don't need to install it separately. You you need, don't know actually.
36
+
37
+ The `--small` preset applies a 720p video scale and 128 kbps audio bitrate, making it useful for sharing talks over constrained
38
+ connections. Without `--small`, the script aims to preserve original quality while removing silence.
39
+
40
+ Example CLI usage:
41
+
42
+ ```sh
43
+ talks-reducer --small input.mp4
44
+ ```
45
+
46
+ Need to offload work to a remote Talks Reducer server? Pass `--url` with the
47
+ server address and the CLI will upload the input, wait for processing to finish,
48
+ and download the rendered video. You can also provide `--host` to expand to the
49
+ default Talks Reducer port (`http://<host>:9005`):
50
+
51
+ ```sh
52
+ talks-reducer --url http://localhost:9005 demo.mp4
53
+ talks-reducer --host 192.168.1.42 demo.mp4
54
+ ```
55
+
56
+ Remote jobs respect the same timing controls as the local CLI. Provide
57
+ `--silent-threshold`, `--sounded-speed`, or `--silent-speed` to tweak how the
58
+ server trims and accelerates segments without falling back to local mode.
59
+
60
+ Want to see progress as the remote server works? Add `--server-stream` so the
61
+ CLI prints live progress bars and log lines while you wait for the download.
62
+
63
+ ### Speech detection
64
+
65
+ Talks Reducer now relies on its built-in volume thresholding to detect speech. Adjust `--silent_threshold` if you need to fine-tune when segments count as silence. Dropping the optional Silero VAD integration keeps the install lightweight and avoids pulling in PyTorch.
66
+
67
+ When CUDA-capable hardware is available the pipeline leans on GPU encoders to keep export times low, but it still runs great on
68
+ CPUs.
69
+
70
+ ## Simple web server
71
+
72
+ Prefer a lightweight browser interface? Launch the Gradio-powered simple mode with:
73
+
74
+ ```sh
75
+ talks-reducer server
76
+ ```
77
+
78
+ The browser UI mirrors the CLI timing controls with sliders for the silent
79
+ threshold and playback speeds, so you can tune exports without leaving the
80
+ remote workflow.
81
+
82
+ Want the server to live in your system tray instead of a terminal window? Use:
83
+
84
+ ```sh
85
+ talks-reducer server-tray
86
+ ```
87
+
88
+ Bundled Windows builds include the same behaviour: run
89
+ `talks-reducer.exe --server` to launch the tray-managed server directly from the
90
+ desktop shortcut without opening the GUI first.
91
+
92
+ Pass `--debug` to print verbose logs about the tray icon lifecycle, and
93
+ `--tray-mode pystray-detached` to try pystray's alternate detached runner. If
94
+ the icon backend refuses to appear, fall back to `--tray-mode headless` to keep
95
+ the web server running without a tray process. The tray menu highlights the
96
+ running Talks Reducer version and includes an **Open GUI**
97
+ item (also triggered by double-clicking the icon) that launches the desktop
98
+ Talks Reducer interface alongside an **Open WebUI** entry that opens the Gradio
99
+ page in your browser. Close the GUI window to return to the tray without
100
+ stopping the server. Launch the tray explicitly whenever you need it—either run
101
+ `talks-reducer server-tray` directly or start the GUI with
102
+ `python -m talks_reducer.gui --server` to boot the tray-managed server instead
103
+ of the desktop window. The GUI now runs standalone and no longer spawns the tray
104
+ automatically; the deprecated `--no-tray` flag is ignored for compatibility.
105
+ The tray command itself never launches the GUI automatically, so use the menu
106
+ item (or relaunch the GUI separately) whenever you want to reopen it. The tray
107
+ no longer opens a browser automatically—pass `--open-browser` if you prefer the
108
+ web page to launch as soon as the server is ready.
109
+
110
+ This opens a local web page featuring a drag-and-drop upload zone, a **Small video** checkbox that mirrors the CLI preset, a live
111
+ progress indicator, and automatic previews of the processed output. The page header and browser tab title include the current
112
+ Talks Reducer version so you can confirm which build the server is running. Once the job completes you can inspect the resulting
113
+ compression ratio and download the rendered video directly from the page.
114
+
115
+ The desktop GUI mirrors this behaviour. Open **Advanced** settings to provide a
116
+ server URL and click **Discover** to scan your local network for Talks Reducer
117
+ instances listening on port `9005`. The button now updates with the discovery
118
+ progress, showing the scanned/total host count as `scanned / total`. A new
119
+ **Processing mode** toggle lets you decide whether work stays local or uploads
120
+ to the configured server—the **Remote** option becomes available as soon as a
121
+ URL is supplied. Leave the toggle on **Local** to keep rendering on this
122
+ machine even if a server is saved; switch to **Remote** to hand jobs off while
123
+ the GUI downloads the finished files automatically.
124
+
125
+ ### Uploading and retrieving a processed video
126
+
127
+ 1. Open the printed `http://localhost:<port>` address (the default port is `9005`).
128
+ 2. Drag a video onto the **Video file** drop zone or click to browse and select one from disk.
129
+ 3. **Small video** starts enabled to apply the 720p/128 kbps preset. Clear the box before the upload finishes if you want to keep the original resolution and bitrate.
130
+ 4. Wait for the progress bar and log to report completion—the interface queues work automatically after the file arrives.
131
+ 5. Watch the processed preview in the **Processed video** player and click **Download processed file** to save the result locally.
132
+
133
+ Need to change where the server listens? Run `talks-reducer server --host 0.0.0.0 --port 7860` (or any other port) to bind to a
134
+ different address.
135
+
136
+ ### Automating uploads from the command line
137
+
138
+ Prefer to script uploads instead of using the browser UI? Start the server and use the bundled helper to submit a job and save
139
+ the processed video locally:
140
+
141
+ ```sh
142
+ python -m talks_reducer.service_client --server http://127.0.0.1:9005/ --input demo.mp4 --output output/demo_processed.mp4
143
+ ```
144
+
145
+ The helper wraps the Gradio API exposed by `server.py`, waits for processing to complete, then copies the rendered file to the
146
+ path you provide. Pass `--small` to mirror the **Small video** checkbox or `--print-log` to stream the server log after the
147
+ download finishes.
148
+
149
+ ## Faster PyInstaller builds
150
+
151
+ PyInstaller spends most of its time walking imports. To keep GUI builds snappy:
152
+
153
+ - Create a dedicated virtual environment for packaging the GUI and install only
154
+ the runtime dependencies you need (for example `pip install -r
155
+ requirements.txt -r scripts/requirements-pyinstaller.txt`). Avoid installing
156
+ heavy ML stacks such as Torch or TensorFlow in that environment so PyInstaller
157
+ never attempts to analyze them.
158
+ - Use the committed `talks-reducer.spec` file via `./scripts/build-gui.sh`.
159
+ The spec excludes Torch, TensorFlow, TensorBoard, torchvision/torchaudio,
160
+ Pandas, Qt bindings, setuptools' vendored helpers, and other bulky modules
161
+ that previously slowed the analysis stage. Set
162
+ `PYINSTALLER_EXTRA_EXCLUDES=module1,module2` if you need to drop additional
163
+ imports for an experimental build.
164
+ - Keep optional imports in the codebase lazy (wrapped in `try/except` or moved
165
+ inside functions) so the analyzer only sees the dependencies required for the
166
+ shipping GUI.
167
+
168
+ The script keeps incremental build artifacts in `build/` between runs. Pass
169
+ `--clean` to `scripts/build-gui.sh` when you want a full rebuild.
170
+
171
+ ## Contributing
172
+ See `CONTRIBUTION.md` for development setup details and guidance on sharing improvements.
173
+
174
+ ## License
175
+ Talks Reducer is released under the MIT License. See `LICENSE` for the full text.
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.7.1"
5
+ __version__ = "0.8.0"