webatem 0.2.2__tar.gz → 0.2.4__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 (109) hide show
  1. {webatem-0.2.2 → webatem-0.2.4}/PKG-INFO +18 -10
  2. {webatem-0.2.2 → webatem-0.2.4}/README.md +17 -9
  3. {webatem-0.2.2 → webatem-0.2.4}/pyproject.toml +1 -1
  4. webatem-0.2.4/webatem/launcher.py +791 -0
  5. {webatem-0.2.2 → webatem-0.2.4}/webatem/server.py +22 -2
  6. {webatem-0.2.2 → webatem-0.2.4}/webatem/templates/launcher.html +26 -10
  7. {webatem-0.2.2 → webatem-0.2.4}/webatem/urls.py +1 -0
  8. {webatem-0.2.2 → webatem-0.2.4}/webatem/views.py +11 -1
  9. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/PKG-INFO +18 -10
  10. webatem-0.2.2/webatem/launcher.py +0 -572
  11. {webatem-0.2.2 → webatem-0.2.4}/LICENSE +0 -0
  12. {webatem-0.2.2 → webatem-0.2.4}/atem_control/__init__.py +0 -0
  13. {webatem-0.2.2 → webatem-0.2.4}/atem_control/activity.py +0 -0
  14. {webatem-0.2.2 → webatem-0.2.4}/atem_control/apps.py +0 -0
  15. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/__init__.py +0 -0
  16. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/activity.py +0 -0
  17. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/commands.py +0 -0
  18. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/consumer.py +0 -0
  19. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/device_api.py +0 -0
  20. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/logging.py +0 -0
  21. {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/views.py +0 -0
  22. {webatem-0.2.2 → webatem-0.2.4}/atem_control/discovery.py +0 -0
  23. {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/__init__.py +0 -0
  24. {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/connection.py +0 -0
  25. {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/views.py +0 -0
  26. {webatem-0.2.2 → webatem-0.2.4}/atem_control/ip_upload_lock.py +0 -0
  27. {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/__init__.py +0 -0
  28. {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/broadcast.py +0 -0
  29. {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/views.py +0 -0
  30. {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/watcher.py +0 -0
  31. {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0001_initial.py +0 -0
  32. {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0002_switcher.py +0 -0
  33. {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0003_remove_atemcontrollog_atem_contro_user_id_3d6bb9_idx_and_more.py +0 -0
  34. {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0004_delete_switcher.py +0 -0
  35. {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/__init__.py +0 -0
  36. {webatem-0.2.2 → webatem-0.2.4}/atem_control/models.py +0 -0
  37. {webatem-0.2.2 → webatem-0.2.4}/atem_control/netutil.py +0 -0
  38. {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/__init__.py +0 -0
  39. {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/dialog.py +0 -0
  40. {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/export.py +0 -0
  41. {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/views.py +0 -0
  42. {webatem-0.2.2 → webatem-0.2.4}/atem_control/routing.py +0 -0
  43. {webatem-0.2.2 → webatem-0.2.4}/atem_control/sightings.py +0 -0
  44. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/atem_connect.css +0 -0
  45. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/atem_control.css +0 -0
  46. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/theme.css +0 -0
  47. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/OFL.txt +0 -0
  48. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Bold.ttf +0 -0
  49. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Italic.ttf +0 -0
  50. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Medium.ttf +0 -0
  51. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Regular.ttf +0 -0
  52. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  53. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/icon.png +0 -0
  54. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_connect.js +0 -0
  55. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_control.js +0 -0
  56. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_control_page.js +0 -0
  57. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_discovery.js +0 -0
  58. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_hyperdeck.js +0 -0
  59. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_profile.js +0 -0
  60. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_realtime_slider.js +0 -0
  61. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_server_settings.js +0 -0
  62. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/custom-scrollbar.js +0 -0
  63. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/pp-select.js +0 -0
  64. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/README.md +0 -0
  65. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/alpine.min.js +0 -0
  66. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/alpinejs-collapse-3.14.3.min.js +0 -0
  67. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/bootstrap-icons.min.css +0 -0
  68. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  69. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  70. {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/webatem.css +0 -0
  71. {webatem-0.2.2 → webatem-0.2.4}/atem_control/storage.py +0 -0
  72. {webatem-0.2.2 → webatem-0.2.4}/atem_control/tally.py +0 -0
  73. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/connect.html +0 -0
  74. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_atem_info.html +0 -0
  75. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_fade_to_black.html +0 -0
  76. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_fairlight.html +0 -0
  77. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_header.html +0 -0
  78. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_hyperdeck_panel.html +0 -0
  79. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_macros.html +0 -0
  80. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_media_pool.html +0 -0
  81. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_profile_modal.html +0 -0
  82. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_dsk.html +0 -0
  83. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_transition.html +0 -0
  84. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_usk.html +0 -0
  85. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_slider.html +0 -0
  86. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_transition_controls.html +0 -0
  87. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_transition_style.html +0 -0
  88. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_fly.html +0 -0
  89. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_keyframe.html +0 -0
  90. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_mask.html +0 -0
  91. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_slider.html +0 -0
  92. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control.html +0 -0
  93. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templatetags/__init__.py +0 -0
  94. {webatem-0.2.2 → webatem-0.2.4}/atem_control/templatetags/static_v.py +0 -0
  95. {webatem-0.2.2 → webatem-0.2.4}/atem_control/uploader.py +0 -0
  96. {webatem-0.2.2 → webatem-0.2.4}/atem_control/urls.py +0 -0
  97. {webatem-0.2.2 → webatem-0.2.4}/setup.cfg +0 -0
  98. {webatem-0.2.2 → webatem-0.2.4}/webatem/__init__.py +0 -0
  99. {webatem-0.2.2 → webatem-0.2.4}/webatem/__main__.py +0 -0
  100. {webatem-0.2.2 → webatem-0.2.4}/webatem/asgi.py +0 -0
  101. {webatem-0.2.2 → webatem-0.2.4}/webatem/context.py +0 -0
  102. {webatem-0.2.2 → webatem-0.2.4}/webatem/settings.py +0 -0
  103. {webatem-0.2.2 → webatem-0.2.4}/webatem/templates/base.html +0 -0
  104. {webatem-0.2.2 → webatem-0.2.4}/webatem/websocket.py +0 -0
  105. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/SOURCES.txt +0 -0
  106. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/dependency_links.txt +0 -0
  107. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/entry_points.txt +0 -0
  108. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/requires.txt +0 -0
  109. {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webatem
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Browser-based control for Blackmagic ATEM switchers: run it, open the browser, your switchers are there
5
5
  Author: Lucas Romanenko
6
6
  License: MIT
@@ -76,8 +76,10 @@ Every way of running it **auto-discovers the ATEMs on your network**
76
76
 
77
77
  1. Click your platform's **Download** button at the top (or the
78
78
  [Releases](https://github.com/lucas-romanenko/webatem/releases) page).
79
- 2. Open it. It starts a local server, opens your browser, and lists the ATEMs
80
- on your network. Pick one and you're controlling it.
79
+ 2. Open it. The icon appears in the menu bar / tray and the launcher window
80
+ comes up: pick the interface and port if the defaults are not right, then
81
+ **Launch GUI** opens the control page in your browser with the ATEMs on
82
+ your network listed. Pick one and you're controlling it.
81
83
 
82
84
  That's the whole setup — nothing to install alongside it, no Python, no Docker.
83
85
 
@@ -90,7 +92,13 @@ page in your browser), **Hide** and **Quit**. Closing the window just hides
90
92
  it; the tray menu is three items — **Show/Hide window**, **Launch GUI**,
91
93
  **Quit**. Changing the interface or port restarts the server on the new
92
94
  address right there; handy on a laptop with Wi-Fi, Ethernet and a VPN at
93
- once. The same settings are behind the gear on the connect page.
95
+ once. Whichever interface you pick, this computer can always reach its own
96
+ server at `127.0.0.1` too (a VPN address is not always reachable from the
97
+ machine that owns it), and if that interface is gone at the next start
98
+ WebATEM listens on all interfaces and says so. The same settings are behind
99
+ the gear on the connect page. The default port is **8880** (Bitfocus
100
+ Companion has 8000); if the port is taken anyway, the next free one is used
101
+ and the window says so.
94
102
 
95
103
  <details>
96
104
  <summary><b>First-launch security prompt</b> (the app isn't code-signed yet)</summary>
@@ -117,7 +125,7 @@ docker run -d --name webatem --network host --restart unless-stopped \
117
125
  -v webatem-data:/app/data ghcr.io/lucas-romanenko/webatem:latest
118
126
  ```
119
127
 
120
- Open `http://<that-box>:8000` from any device on the network. It comes back
128
+ Open `http://<that-box>:8880` from any device on the network. It comes back
121
129
  automatically on reboot. No `.env` file needed — every setting has a working
122
130
  default (SQLite DB + a generated secret key live in the `webatem-data`
123
131
  volume); see [.env.example](.env.example) for knobs like `PORT`, `TIME_ZONE`,
@@ -131,8 +139,8 @@ prints the address to open from another device:
131
139
 
132
140
  ```
133
141
  WebATEM is running.
134
- On this machine: http://127.0.0.1:8000/atem/
135
- From another device: http://192.168.1.50:8000/atem/
142
+ On this machine: http://127.0.0.1:8880/atem/
143
+ From another device: http://192.168.1.50:8880/atem/
136
144
  ```
137
145
 
138
146
  Keep it up with a systemd unit, `tmux` or `nohup`.
@@ -151,7 +159,7 @@ webatem
151
159
  ```
152
160
 
153
161
  Same behaviour as the download: a native process on your real network, the
154
- browser opens, the tray icon appears where there is a desktop. Prebuilt wheels
162
+ tray icon and the launcher window appear where there is a desktop. Prebuilt wheels
155
163
  for every platform mean no compiler is needed. Upgrade with
156
164
  `pipx upgrade webatem`.
157
165
 
@@ -291,7 +299,7 @@ ATEM switchers (UDP 9910) · HyperDecks (TCP 9993 / FTP)
291
299
  command dispatch table, the media-pool watcher, LAN discovery, and the UI.
292
300
  - **`webatem/`** — the project package: settings, the ASGI entry, the
293
301
  WebSocket origin guard, and `launcher.py` — the `webatem` command that runs
294
- the same web app locally, opens a browser and lives in the tray. The
302
+ the same web app locally and lives in the tray with its launcher window. The
295
303
  downloads are that launcher frozen per OS by PyInstaller
296
304
  (`build/desktop/`); the PyPI package is the same code installed by pip.
297
305
  - **One tag, three deliverables.** A `v*` tag publishes the Mac / Windows /
@@ -306,7 +314,7 @@ git clone https://github.com/lucas-romanenko/webatem.git
306
314
  cd webatem
307
315
  npm install && npm run build:css # the stylesheet — without it the app renders unstyled
308
316
  pip install -e ".[test]" # Python 3.10+; the device libraries install as wheels
309
- python -m webatem # the launcher: server + browser + tray
317
+ python -m webatem # the launcher: server + tray + window
310
318
  python -m pytest tests/ -q # the suite (no hardware needed)
311
319
  ```
312
320
 
@@ -38,8 +38,10 @@ Every way of running it **auto-discovers the ATEMs on your network**
38
38
 
39
39
  1. Click your platform's **Download** button at the top (or the
40
40
  [Releases](https://github.com/lucas-romanenko/webatem/releases) page).
41
- 2. Open it. It starts a local server, opens your browser, and lists the ATEMs
42
- on your network. Pick one and you're controlling it.
41
+ 2. Open it. The icon appears in the menu bar / tray and the launcher window
42
+ comes up: pick the interface and port if the defaults are not right, then
43
+ **Launch GUI** opens the control page in your browser with the ATEMs on
44
+ your network listed. Pick one and you're controlling it.
43
45
 
44
46
  That's the whole setup — nothing to install alongside it, no Python, no Docker.
45
47
 
@@ -52,7 +54,13 @@ page in your browser), **Hide** and **Quit**. Closing the window just hides
52
54
  it; the tray menu is three items — **Show/Hide window**, **Launch GUI**,
53
55
  **Quit**. Changing the interface or port restarts the server on the new
54
56
  address right there; handy on a laptop with Wi-Fi, Ethernet and a VPN at
55
- once. The same settings are behind the gear on the connect page.
57
+ once. Whichever interface you pick, this computer can always reach its own
58
+ server at `127.0.0.1` too (a VPN address is not always reachable from the
59
+ machine that owns it), and if that interface is gone at the next start
60
+ WebATEM listens on all interfaces and says so. The same settings are behind
61
+ the gear on the connect page. The default port is **8880** (Bitfocus
62
+ Companion has 8000); if the port is taken anyway, the next free one is used
63
+ and the window says so.
56
64
 
57
65
  <details>
58
66
  <summary><b>First-launch security prompt</b> (the app isn't code-signed yet)</summary>
@@ -79,7 +87,7 @@ docker run -d --name webatem --network host --restart unless-stopped \
79
87
  -v webatem-data:/app/data ghcr.io/lucas-romanenko/webatem:latest
80
88
  ```
81
89
 
82
- Open `http://<that-box>:8000` from any device on the network. It comes back
90
+ Open `http://<that-box>:8880` from any device on the network. It comes back
83
91
  automatically on reboot. No `.env` file needed — every setting has a working
84
92
  default (SQLite DB + a generated secret key live in the `webatem-data`
85
93
  volume); see [.env.example](.env.example) for knobs like `PORT`, `TIME_ZONE`,
@@ -93,8 +101,8 @@ prints the address to open from another device:
93
101
 
94
102
  ```
95
103
  WebATEM is running.
96
- On this machine: http://127.0.0.1:8000/atem/
97
- From another device: http://192.168.1.50:8000/atem/
104
+ On this machine: http://127.0.0.1:8880/atem/
105
+ From another device: http://192.168.1.50:8880/atem/
98
106
  ```
99
107
 
100
108
  Keep it up with a systemd unit, `tmux` or `nohup`.
@@ -113,7 +121,7 @@ webatem
113
121
  ```
114
122
 
115
123
  Same behaviour as the download: a native process on your real network, the
116
- browser opens, the tray icon appears where there is a desktop. Prebuilt wheels
124
+ tray icon and the launcher window appear where there is a desktop. Prebuilt wheels
117
125
  for every platform mean no compiler is needed. Upgrade with
118
126
  `pipx upgrade webatem`.
119
127
 
@@ -253,7 +261,7 @@ ATEM switchers (UDP 9910) · HyperDecks (TCP 9993 / FTP)
253
261
  command dispatch table, the media-pool watcher, LAN discovery, and the UI.
254
262
  - **`webatem/`** — the project package: settings, the ASGI entry, the
255
263
  WebSocket origin guard, and `launcher.py` — the `webatem` command that runs
256
- the same web app locally, opens a browser and lives in the tray. The
264
+ the same web app locally and lives in the tray with its launcher window. The
257
265
  downloads are that launcher frozen per OS by PyInstaller
258
266
  (`build/desktop/`); the PyPI package is the same code installed by pip.
259
267
  - **One tag, three deliverables.** A `v*` tag publishes the Mac / Windows /
@@ -268,7 +276,7 @@ git clone https://github.com/lucas-romanenko/webatem.git
268
276
  cd webatem
269
277
  npm install && npm run build:css # the stylesheet — without it the app renders unstyled
270
278
  pip install -e ".[test]" # Python 3.10+; the device libraries install as wheels
271
- python -m webatem # the launcher: server + browser + tray
279
+ python -m webatem # the launcher: server + tray + window
272
280
  python -m pytest tests/ -q # the suite (no hardware needed)
273
281
  ```
274
282
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "webatem"
7
- version = "0.2.2"
7
+ version = "0.2.4"
8
8
  description = "Browser-based control for Blackmagic ATEM switchers: run it, open the browser, your switchers are there"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }