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.
- {webatem-0.2.2 → webatem-0.2.4}/PKG-INFO +18 -10
- {webatem-0.2.2 → webatem-0.2.4}/README.md +17 -9
- {webatem-0.2.2 → webatem-0.2.4}/pyproject.toml +1 -1
- webatem-0.2.4/webatem/launcher.py +791 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/server.py +22 -2
- {webatem-0.2.2 → webatem-0.2.4}/webatem/templates/launcher.html +26 -10
- {webatem-0.2.2 → webatem-0.2.4}/webatem/urls.py +1 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/views.py +11 -1
- {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/PKG-INFO +18 -10
- webatem-0.2.2/webatem/launcher.py +0 -572
- {webatem-0.2.2 → webatem-0.2.4}/LICENSE +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/activity.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/apps.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/activity.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/commands.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/consumer.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/device_api.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/logging.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/control/views.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/discovery.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/connection.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/hyperdeck/views.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/ip_upload_lock.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/broadcast.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/views.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/media_pool/watcher.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0001_initial.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0002_switcher.py +0 -0
- {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
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/0004_delete_switcher.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/migrations/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/models.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/netutil.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/dialog.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/export.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/profile/views.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/routing.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/sightings.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/atem_connect.css +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/atem_control.css +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/css/theme.css +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/OFL.txt +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Bold.ttf +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Italic.ttf +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Medium.ttf +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-Regular.ttf +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/fonts/poppins/Poppins-SemiBold.ttf +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/icon.png +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_connect.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_control.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_control_page.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_discovery.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_hyperdeck.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_profile.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_realtime_slider.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/atem_server_settings.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/custom-scrollbar.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/js/pp-select.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/README.md +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/alpine.min.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/alpinejs-collapse-3.14.3.min.js +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/bootstrap-icons.min.css +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/static/vendor/webatem.css +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/storage.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/tally.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/connect.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_atem_info.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_fade_to_black.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_fairlight.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_header.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_hyperdeck_panel.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_macros.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_media_pool.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_profile_modal.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_dsk.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_transition.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_settings_usk.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_slider.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_transition_controls.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_transition_style.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_fly.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_keyframe.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_mask.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control/_usk_slider.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templates/control.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templatetags/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/templatetags/static_v.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/uploader.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/atem_control/urls.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/setup.cfg +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/__init__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/__main__.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/asgi.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/context.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/settings.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/templates/base.html +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem/websocket.py +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/SOURCES.txt +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/dependency_links.txt +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/entry_points.txt +0 -0
- {webatem-0.2.2 → webatem-0.2.4}/webatem.egg-info/requires.txt +0 -0
- {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.
|
|
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.
|
|
80
|
-
|
|
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.
|
|
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>:
|
|
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:
|
|
135
|
-
From another device: http://192.168.1.50:
|
|
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
|
-
|
|
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
|
|
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 +
|
|
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.
|
|
42
|
-
|
|
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.
|
|
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>:
|
|
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:
|
|
97
|
-
From another device: http://192.168.1.50:
|
|
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
|
-
|
|
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
|
|
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 +
|
|
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.
|
|
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" }
|