weed-cli 2.3.0__tar.gz → 2.4.2__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 (29) hide show
  1. {weed_cli-2.3.0/weed_cli.egg-info → weed_cli-2.4.2}/PKG-INFO +28 -1
  2. {weed_cli-2.3.0 → weed_cli-2.4.2}/README.md +27 -0
  3. {weed_cli-2.3.0 → weed_cli-2.4.2}/pyproject.toml +1 -1
  4. {weed_cli-2.3.0 → weed_cli-2.4.2/weed_cli.egg-info}/PKG-INFO +28 -1
  5. {weed_cli-2.3.0 → weed_cli-2.4.2}/LICENSE +0 -0
  6. {weed_cli-2.3.0 → weed_cli-2.4.2}/dht.py +0 -0
  7. {weed_cli-2.3.0 → weed_cli-2.4.2}/discovery_relay.py +0 -0
  8. {weed_cli-2.3.0 → weed_cli-2.4.2}/lightning_settle.py +0 -0
  9. {weed_cli-2.3.0 → weed_cli-2.4.2}/node.py +0 -0
  10. {weed_cli-2.3.0 → weed_cli-2.4.2}/poc_reputation.py +0 -0
  11. {weed_cli-2.3.0 → weed_cli-2.4.2}/setup.cfg +0 -0
  12. {weed_cli-2.3.0 → weed_cli-2.4.2}/shell.py +0 -0
  13. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_dht.py +0 -0
  14. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_discovery_relay.py +0 -0
  15. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_host_live_reload.py +0 -0
  16. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_node_manifest.py +0 -0
  17. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_orbit_ws.py +0 -0
  18. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_timing_challenge.py +0 -0
  19. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_tunnel_failover.py +0 -0
  20. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/test_web_ui_api.py +0 -0
  21. {weed_cli-2.3.0 → weed_cli-2.4.2}/tests/testutil.py +0 -0
  22. {weed_cli-2.3.0 → weed_cli-2.4.2}/tunnel_relay.py +0 -0
  23. {weed_cli-2.3.0 → weed_cli-2.4.2}/web_ui.py +0 -0
  24. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed.py +0 -0
  25. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed_cli.egg-info/SOURCES.txt +0 -0
  26. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed_cli.egg-info/dependency_links.txt +0 -0
  27. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed_cli.egg-info/entry_points.txt +0 -0
  28. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed_cli.egg-info/requires.txt +0 -0
  29. {weed_cli-2.3.0 → weed_cli-2.4.2}/weed_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weed-cli
3
- Version: 2.3.0
3
+ Version: 2.4.2
4
4
  Summary: Censorship-resistant video PoC — discovery/hosting/download over signed relay events, a real Kademlia DHT, or a TLS-capable NAT-traversal tunnel
5
5
  License: MIT
6
6
  Keywords: p2p,video,censorship-resistant,discovery,dht,kademlia,nat-traversal
@@ -201,6 +201,29 @@ Includes real HTTP range support (`/api/stream/<job_id>`) so a
201
201
  `<video>` tag can seek a completed download instead of downloading it
202
202
  blind.
203
203
 
204
+ The player's ⇄ button is **video swap**: pick another download whose
205
+ picture stands in for the current track's — for an mp3 or a
206
+ static-image video, so the visualizer (and the player window) have real
207
+ footage. The audio stays with the track; the borrowed video loops on its
208
+ own, follows play/pause, and the choice is remembered per track in the
209
+ browser.
210
+
211
+ ### Orbit Visualizer plugins
212
+
213
+ The visualizer's modes and its Fade transitions are both open registries:
214
+ `window.orbitViz.registerMode({id, label, draw(ctx), init?, teardown?})`
215
+ and `window.orbitViz.registerTransition({id, label, draw(ctx)})`, with
216
+ `unregister*`/`list*` to match (the contracts are documented at the top
217
+ of `web/orbit_visualizer.js`). A registered mode gets a button, an entry
218
+ in the narrow-screen dropdown, a place in arrow/pad cycling and the MIDI
219
+ mode selector; a registered transition gets a Fade option and a turn in
220
+ "Random". A plugin that throws is logged once and disabled without
221
+ taking the draw loop down. `web/orbit_extras.js` (loaded by default) is
222
+ built entirely on that API and adds Halftone, Lava, Terrain, Rain,
223
+ Lissajous, Ripples, Cube, VHS, Win95 and Joy Division, plus the Melt, Dissolve, Iris,
224
+ Shatter, Wave, Spin, Zoom blur, RGB split, VHS and Win95 transitions; `web/orbit_plugin_example.js`
225
+ is a minimal one to copy.
226
+
204
227
  ### Docker
205
228
 
206
229
  `Dockerfile.node` + `docker-compose.node.yml` package `web_ui.py` to run
@@ -229,6 +252,10 @@ docker compose -f docker-compose.node.yml exec node python3 weed.py discover #
229
252
  - `/share` is a separate *bind* mount, not a named volume, so the actual
230
253
  `.ott` archives you're hosting are real files on the host you can see
231
254
  and manage directly. Point the web UI's Host form at `/share`.
255
+ - `web/` is bind-mounted read-only over the image's own copy, and the
256
+ server re-reads static files per request with `Cache-Control: no-store`,
257
+ so frontend edits show up on a browser reload — no rebuild or restart.
258
+ Python changes (`web_ui.py`, `node.py`) still need `make node`.
232
259
  - An entry's `last_path` (recorded at `ott add` time, on whatever
233
260
  machine ran it) is only trusted if it exists on disk; otherwise the
234
261
  node falls back to the given archive directory. This matters the
@@ -169,6 +169,29 @@ Includes real HTTP range support (`/api/stream/<job_id>`) so a
169
169
  `<video>` tag can seek a completed download instead of downloading it
170
170
  blind.
171
171
 
172
+ The player's ⇄ button is **video swap**: pick another download whose
173
+ picture stands in for the current track's — for an mp3 or a
174
+ static-image video, so the visualizer (and the player window) have real
175
+ footage. The audio stays with the track; the borrowed video loops on its
176
+ own, follows play/pause, and the choice is remembered per track in the
177
+ browser.
178
+
179
+ ### Orbit Visualizer plugins
180
+
181
+ The visualizer's modes and its Fade transitions are both open registries:
182
+ `window.orbitViz.registerMode({id, label, draw(ctx), init?, teardown?})`
183
+ and `window.orbitViz.registerTransition({id, label, draw(ctx)})`, with
184
+ `unregister*`/`list*` to match (the contracts are documented at the top
185
+ of `web/orbit_visualizer.js`). A registered mode gets a button, an entry
186
+ in the narrow-screen dropdown, a place in arrow/pad cycling and the MIDI
187
+ mode selector; a registered transition gets a Fade option and a turn in
188
+ "Random". A plugin that throws is logged once and disabled without
189
+ taking the draw loop down. `web/orbit_extras.js` (loaded by default) is
190
+ built entirely on that API and adds Halftone, Lava, Terrain, Rain,
191
+ Lissajous, Ripples, Cube, VHS, Win95 and Joy Division, plus the Melt, Dissolve, Iris,
192
+ Shatter, Wave, Spin, Zoom blur, RGB split, VHS and Win95 transitions; `web/orbit_plugin_example.js`
193
+ is a minimal one to copy.
194
+
172
195
  ### Docker
173
196
 
174
197
  `Dockerfile.node` + `docker-compose.node.yml` package `web_ui.py` to run
@@ -197,6 +220,10 @@ docker compose -f docker-compose.node.yml exec node python3 weed.py discover #
197
220
  - `/share` is a separate *bind* mount, not a named volume, so the actual
198
221
  `.ott` archives you're hosting are real files on the host you can see
199
222
  and manage directly. Point the web UI's Host form at `/share`.
223
+ - `web/` is bind-mounted read-only over the image's own copy, and the
224
+ server re-reads static files per request with `Cache-Control: no-store`,
225
+ so frontend edits show up on a browser reload — no rebuild or restart.
226
+ Python changes (`web_ui.py`, `node.py`) still need `make node`.
200
227
  - An entry's `last_path` (recorded at `ott add` time, on whatever
201
228
  machine ran it) is only trusted if it exists on disk; otherwise the
202
229
  node falls back to the given archive directory. This matters the
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "weed-cli"
7
- version = "2.3.0"
7
+ version = "2.4.2"
8
8
  description = "Censorship-resistant video PoC — discovery/hosting/download over signed relay events, a real Kademlia DHT, or a TLS-capable NAT-traversal tunnel"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weed-cli
3
- Version: 2.3.0
3
+ Version: 2.4.2
4
4
  Summary: Censorship-resistant video PoC — discovery/hosting/download over signed relay events, a real Kademlia DHT, or a TLS-capable NAT-traversal tunnel
5
5
  License: MIT
6
6
  Keywords: p2p,video,censorship-resistant,discovery,dht,kademlia,nat-traversal
@@ -201,6 +201,29 @@ Includes real HTTP range support (`/api/stream/<job_id>`) so a
201
201
  `<video>` tag can seek a completed download instead of downloading it
202
202
  blind.
203
203
 
204
+ The player's ⇄ button is **video swap**: pick another download whose
205
+ picture stands in for the current track's — for an mp3 or a
206
+ static-image video, so the visualizer (and the player window) have real
207
+ footage. The audio stays with the track; the borrowed video loops on its
208
+ own, follows play/pause, and the choice is remembered per track in the
209
+ browser.
210
+
211
+ ### Orbit Visualizer plugins
212
+
213
+ The visualizer's modes and its Fade transitions are both open registries:
214
+ `window.orbitViz.registerMode({id, label, draw(ctx), init?, teardown?})`
215
+ and `window.orbitViz.registerTransition({id, label, draw(ctx)})`, with
216
+ `unregister*`/`list*` to match (the contracts are documented at the top
217
+ of `web/orbit_visualizer.js`). A registered mode gets a button, an entry
218
+ in the narrow-screen dropdown, a place in arrow/pad cycling and the MIDI
219
+ mode selector; a registered transition gets a Fade option and a turn in
220
+ "Random". A plugin that throws is logged once and disabled without
221
+ taking the draw loop down. `web/orbit_extras.js` (loaded by default) is
222
+ built entirely on that API and adds Halftone, Lava, Terrain, Rain,
223
+ Lissajous, Ripples, Cube, VHS, Win95 and Joy Division, plus the Melt, Dissolve, Iris,
224
+ Shatter, Wave, Spin, Zoom blur, RGB split, VHS and Win95 transitions; `web/orbit_plugin_example.js`
225
+ is a minimal one to copy.
226
+
204
227
  ### Docker
205
228
 
206
229
  `Dockerfile.node` + `docker-compose.node.yml` package `web_ui.py` to run
@@ -229,6 +252,10 @@ docker compose -f docker-compose.node.yml exec node python3 weed.py discover #
229
252
  - `/share` is a separate *bind* mount, not a named volume, so the actual
230
253
  `.ott` archives you're hosting are real files on the host you can see
231
254
  and manage directly. Point the web UI's Host form at `/share`.
255
+ - `web/` is bind-mounted read-only over the image's own copy, and the
256
+ server re-reads static files per request with `Cache-Control: no-store`,
257
+ so frontend edits show up on a browser reload — no rebuild or restart.
258
+ Python changes (`web_ui.py`, `node.py`) still need `make node`.
232
259
  - An entry's `last_path` (recorded at `ott add` time, on whatever
233
260
  machine ran it) is only trusted if it exists on disk; otherwise the
234
261
  node falls back to the given archive directory. This matters the
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes