feat(call): in-call soundboard, quality controls, room call-permissions
Element Call is now consumed as our self-built fork (@lotusguild/element-call-embedded); wire up its previously-dormant capabilities and document the fork as live. Soundboard (P5-15): a call-bar button plays user-uploaded audio clips into the call as a real published track (io.lotus.inject_audio) plus local playback. Clips are uploadable like emoji/sticker packs, stored in io.lotus.soundboard account data (synced across devices). Gated by a Settings toggle + volume. Quality controls (P5-31): per-user mic/screenshare bitrate + screenshare framerate (Settings -> Calls), applied via io.lotus.set_quality clamped to any room cap. Room admins set caps and hard call-permissions (allow_screenshare / allow_camera) in Room Settings -> Voice; the call bar hides blocked buttons. - New: CallSoundboard, useSoundboard, soundboardClips; RoomQuality, useCallQuality, callQuality (+ unit tests). - Optimistic-write RoomQuality admin UI (no stale-state clobber). - Docs: mark EC fork live across README/FEATURES/TODO/BUGS/TESTING; add D2 manual-test steps. Numeric quality caps are client-cooperative; screenshare/camera permissions are hard-enforced server-side (see LotusGuild/matrix voice-limit-guard). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -144,22 +144,25 @@ The source code lives in `/root/code/cinny`. All changes should be made on the `
|
||||
|
||||
See [LOTUS_FEATURES.md](LOTUS_FEATURES.md) for the full feature changelog and [LOTUS_TODO.md](LOTUS_TODO.md) for the work backlog.
|
||||
|
||||
### 🔱 Planned: Element Call fork ("Lotus Call")
|
||||
### 🔱 Element Call fork ("Lotus Call") — LIVE
|
||||
|
||||
Voice/video channels embed **Element Call**. Today it's a **pre-built npm bundle**
|
||||
(`@element-hq/element-call-embedded` 0.20.1) copied to `public/element-call/` and
|
||||
served same-origin; we steer it via the `matrix-widget-api` plus fragile DOM
|
||||
hacks. Because we don't own its compiled source, several in-call issues (avatar
|
||||
decorations on tiles, camera focus/fullscreen during screenshare, mic recovery
|
||||
after reconnect, native theming, real call-audio injection) are unfixable from
|
||||
outside.
|
||||
Voice/video channels embed **Element Call**, which is now our **self-built fork**
|
||||
(`@lotusguild/element-call-embedded` `0.20.1-lotus.1`, source at
|
||||
`LotusGuild/element-call`), published to our private Gitea npm registry and served
|
||||
same-origin. We no longer depend on the upstream prebuilt bundle, so in-call
|
||||
behavior is editable source instead of fragile DOM/widget hacks.
|
||||
|
||||
**The plan is to fork `element-hq/element-call` into a new `LotusGuild/element-call`
|
||||
repo, build it from source, and host our own build** for true ownership. The full
|
||||
self-contained plan and integration map — written for a fresh session with no
|
||||
prior context — is in **[`HANDOFF_ELEMENT_CALL_FORK.md`](HANDOFF_ELEMENT_CALL_FORK.md)**.
|
||||
Infra/hosting notes also live in the `LotusGuild/matrix` repo README. Search the
|
||||
docs for the **`[EC-FORK]`** tag to find every related note.
|
||||
**Shipped via the fork:** denoise as an in-source LiveKit audio stage (survives
|
||||
reconnects), in-call speaking/mute events, focus-a-participant during screenshare,
|
||||
avatar decorations on EC video tiles, and a native transparent background.
|
||||
**Built but dormant (need cinny UI):** real call-audio injection
|
||||
(`io.lotus.inject_audio` → in-call soundboard) and quality controls
|
||||
(`io.lotus.set_quality`).
|
||||
|
||||
The full plan and integration map is in
|
||||
**[`HANDOFF_ELEMENT_CALL_FORK.md`](HANDOFF_ELEMENT_CALL_FORK.md)**; infra/hosting +
|
||||
build-pipeline notes live in the `LotusGuild/matrix` repo README. Search the docs
|
||||
for the **`[EC-FORK]`** tag to find every related note.
|
||||
|
||||
### Build
|
||||
|
||||
|
||||
Reference in New Issue
Block a user