Update docs and screenshots
CI / backend (pull_request) Canceled after 0s
CI / shell (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / arm64-smoke (pull_request) Canceled after 0s
CI / backend (push) Canceled after 0s
CI / shell (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / arm64-smoke (push) Canceled after 0s
@@ -0,0 +1,124 @@
|
||||
# MIDI Bridge
|
||||
|
||||
## Formål
|
||||
|
||||
TuxDMX kan modtage normaliserede MIDI-events fra en ekstern Windows- eller Linux-maskine via en separat Python-bro i `tools/tuxdmx-midi-bridge/`.
|
||||
|
||||
Bridgen læser kun MIDI og sender events videre til TuxDMX. Den genererer aldrig DMX direkte.
|
||||
|
||||
## Eksisterende arkitektur før ændringen
|
||||
|
||||
- Sceneaktivering fandtes allerede via `POST /api/v1/scenes/{scene_slug}/activate`
|
||||
- Scenerelease fandtes allerede via `POST /api/v1/scenes/{scene_slug}/release`
|
||||
- Blackout fandtes allerede via `POST /api/v1/dmx/blackout` og `POST /api/v1/dmx/release-blackout`
|
||||
- Effektstart/-stop fandtes allerede via `POST /api/v1/effects/{effect_slug}/trigger` og `POST /api/v1/effects/{effect_slug}/stop`
|
||||
- Live status blev sendt ud via WebSocket på `/ws/live`
|
||||
- Session/CSRF og API-tokenmodeller fandtes i backend, men MIDI-broen havde ingen eksisterende transport eller mappingmodel
|
||||
|
||||
## Nye backend-endpoints
|
||||
|
||||
### Admin / WebUI
|
||||
|
||||
- `GET /api/v1/integrations/midi/bridges`
|
||||
- `GET /api/v1/integrations/midi/mappings`
|
||||
- `POST /api/v1/integrations/midi/mappings`
|
||||
- `PUT /api/v1/integrations/midi/mappings/{mapping_id}`
|
||||
- `DELETE /api/v1/integrations/midi/mappings/{mapping_id}`
|
||||
- `POST /api/v1/integrations/midi/mappings/{mapping_id}/test`
|
||||
- `GET /api/v1/integrations/midi/tokens`
|
||||
- `POST /api/v1/integrations/midi/tokens`
|
||||
- `DELETE /api/v1/integrations/midi/tokens/{token_id}`
|
||||
- `GET /api/v1/integrations/midi/learn`
|
||||
- `POST /api/v1/integrations/midi/learn/start`
|
||||
- `POST /api/v1/integrations/midi/learn/cancel`
|
||||
|
||||
### Bridge transport
|
||||
|
||||
- `POST /api/v1/integrations/midi/bridge/heartbeat`
|
||||
- `POST /api/v1/integrations/midi/bridge/events`
|
||||
|
||||
Bridge-endpoints kræver `Authorization: Bearer <token>`.
|
||||
|
||||
## Datamodel
|
||||
|
||||
### `midi_bridges`
|
||||
|
||||
- `bridge_id`
|
||||
- `device_name`
|
||||
- `ip_address`
|
||||
- `protocol_version`
|
||||
- `online`
|
||||
- `last_heartbeat_at`
|
||||
- `last_event_at`
|
||||
- `last_error`
|
||||
- `last_event`
|
||||
|
||||
### `midi_bridge_tokens`
|
||||
|
||||
- `label`
|
||||
- `token_hash`
|
||||
- `bridge_id` valgfri låsning til ét bridge-id
|
||||
- `scopes`
|
||||
- `last_used_at`
|
||||
- `revoked_at`
|
||||
|
||||
### `midi_mappings`
|
||||
|
||||
- `name`
|
||||
- `enabled`
|
||||
- `bridge_id`
|
||||
- `device_name`
|
||||
- `message_type`
|
||||
- `channel`
|
||||
- `number`
|
||||
- `action`
|
||||
- `target_type`
|
||||
- `target_id`
|
||||
- `mode`
|
||||
- `minimum_value`
|
||||
- `maximum_value`
|
||||
|
||||
## Understøttede actions
|
||||
|
||||
- `activate_scene`
|
||||
- `deactivate_scene`
|
||||
- `toggle_scene`
|
||||
- `flash_scene`
|
||||
- `blackout_on`
|
||||
- `blackout_off`
|
||||
- `blackout_toggle`
|
||||
- `set_master_dimmer`
|
||||
- `set_scene_intensity`
|
||||
- `start_effect`
|
||||
- `stop_effect`
|
||||
|
||||
## Modes
|
||||
|
||||
- `trigger`
|
||||
- `toggle`
|
||||
- `hold`
|
||||
- `flash`
|
||||
- `continuous`
|
||||
|
||||
## Sikkerhed
|
||||
|
||||
- Tokens returneres kun i klartekst ved oprettelse
|
||||
- Efter lagring vises kun `token_preview`
|
||||
- Bridge-token logges ikke
|
||||
- Protokolversion skal være `1`
|
||||
- Bridge kan låses til specifikt `bridge_id`
|
||||
- Ugyldige eller tilbagekaldte tokens afvises med `401`
|
||||
|
||||
## Bridge-installation
|
||||
|
||||
Se den fulde bridgepakke i:
|
||||
|
||||
- `tools/tuxdmx-midi-bridge/README.md`
|
||||
- `tools/tuxdmx-midi-bridge/config.example.yaml`
|
||||
- `tools/tuxdmx-midi-bridge/tuxdmx-midi-bridge.service.example`
|
||||
|
||||
## Kendte begrænsninger
|
||||
|
||||
- Fysisk MIDI-hardware er ikke testet i denne workspace-session
|
||||
- Bridge bruger HTTP, ikke indgående WebSocket, selv om UI stadig bruger WebSocket til live status
|
||||
- `set_effect_speed` er ikke implementeret, fordi effektmotoren endnu ikke har et stabilt genanvendeligt speed-interface
|
||||
@@ -13,10 +13,29 @@ Denne manual beskriver den nuvaerende WebUI og de vigtigste arbejdsgange.
|
||||
|
||||
## Vigtigt
|
||||
|
||||
- Screenshots i denne mappe er genereret lokalt i `mock`-tilstand den 23. juli 2026.
|
||||
- Screenshots i denne mappe er genereret lokalt i `mock`-tilstand den 25. juli 2026.
|
||||
- De afspejler UI og flows, men er ikke bevis for fysisk hardwareafvikling.
|
||||
- Fysisk hardwaretest skal stadig vurderes separat paa target-maskinen.
|
||||
|
||||
## Navigation
|
||||
|
||||
WebUI bruger nu en kompakt sidebar med grupperede undermenuer:
|
||||
|
||||
- `Overblik`
|
||||
Dashboard og Live Desk
|
||||
- `Live-kontrol`
|
||||
Scener, Effekter og BPM
|
||||
- `Lysopsaetning`
|
||||
Fixtures, DMX Patch og Placering
|
||||
- `Integrationer`
|
||||
MixItUp og MIDI
|
||||
- `Overvaagning`
|
||||
DMX monitor og Telemetry
|
||||
- `System`
|
||||
Backup og Indstillinger
|
||||
|
||||
Kun den aktive sektion staar aaben ad gangen, saa UI ikke fylder unodigt meget i venstre side.
|
||||
|
||||
## Arkitektur kort fortalt
|
||||
|
||||
- `Universe 1`
|
||||
@@ -186,6 +205,19 @@ ALSA-input skal vaelges i `Settings`, og derefter bruges BPM-siden til selve dri
|
||||
|
||||
Herfra kan du teste triggerflow og senere knytte stream-events til scener eller effekter.
|
||||
|
||||
## MIDI
|
||||
|
||||
`MIDI` samler den separate MIDI-bridge og dens mappings.
|
||||
|
||||
Herfra kan du:
|
||||
|
||||
- se aktive bridges
|
||||
- oprette og tilbagekalde bridge-tokens
|
||||
- bruge `MIDI Learn`
|
||||
- mappe knapper og faders til scener, effekter, blackout og master
|
||||
|
||||
MIDI sender ikke DMX direkte. Den kalder backendens eksisterende scene-, effekt- og systemhandlinger.
|
||||
|
||||
## DMX monitor
|
||||
|
||||
`DMX monitor` viser DMX-aktivitet.
|
||||
@@ -269,6 +301,12 @@ Fra denne workspace:
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\sync-windows-deploy.ps1
|
||||
```
|
||||
|
||||
Hvis du vil pushe dokumentation, screenshots og kode videre til TuxiNet Git:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\scripts\push-git-tuxinet.ps1 -InitIfNeeded -SetOrigin -StageAll -Commit -CommitMessage "Update docs and screenshots" -Push
|
||||
```
|
||||
|
||||
### Linux target-host
|
||||
|
||||
```bash
|
||||
|
||||
@@ -13,8 +13,9 @@ Indhold:
|
||||
|
||||
Vigtigt:
|
||||
|
||||
- Screenshots i denne mappe er genereret den 23. juli 2026 fra den lokale WebUI i `mock=1` mode.
|
||||
- Screenshots i denne mappe er genereret den 25. juli 2026 fra den lokale WebUI i `mock=1` mode.
|
||||
- De viser den aktuelle UI-struktur og sideopbygning.
|
||||
- De afspejler den kompakte, grupperede navigation med undermenuer.
|
||||
- De er ikke dokumentation for fysisk Raspberry Pi-, OLA-, USB-DMX- eller lys-hardwaretest.
|
||||
- Hardwareafgraensninger og manuel hardwarevalidering hoerer stadig hjemme i [HARDWARE-VALIDATION.md](../HARDWARE-VALIDATION.md).
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Screenshots
|
||||
|
||||
Dette er et samlet screenshotsaet af TuxDMX WebUI genereret den 23. juli 2026.
|
||||
Dette er et samlet screenshotsaet af TuxDMX WebUI genereret den 25. juli 2026.
|
||||
|
||||
Kilde:
|
||||
|
||||
@@ -10,6 +10,7 @@ Kilde:
|
||||
Formaal:
|
||||
|
||||
- vise sideopbygning
|
||||
- vise den kompakte navigation med grupperede undermenuer
|
||||
- understoette manualen
|
||||
- give et hurtigt visuelt overblik over systemet
|
||||
|
||||
@@ -51,6 +52,10 @@ Formaal:
|
||||
|
||||

|
||||
|
||||
### MIDI
|
||||
|
||||

|
||||
|
||||
### DMX monitor
|
||||
|
||||

|
||||
|
||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 59 KiB |