io.lotus.set_audio_output stores the host's deviceId as-is; audio_output_state never sends the promised device list #44
Closed
opened 2026-10-05 00:17:58 -04:00 by jared
·
1 comment
No Branch/Tag Specified
lotus
feat/call-summary-details
feat/soundboard-mic-mix
feat/mobile-self-tile
feat/screenshare-audio-state
feat/decorations-origin
docs/lotus-call-error
lotus-stall-retry
docs/lotus-protocol
lotus-soundboard-not-permitted
lotus-mic-sampler-churn
lotus-call-error
fix/audio-output-list
lotus-notify-none
lotus-screenshare-prompt
lotus-call-origin
v0.25.0-lotus.29
v0.25.0-lotus.28
v0.25.0-lotus.27
v0.25.0-lotus.26
v0.25.0-lotus.25
v0.25.0-lotus.24
v0.25.0-lotus.23
v0.25.0-lotus.22
v0.25.0-lotus.21
v0.25.0-lotus.20
v0.25.0-lotus.19
v0.25.0-lotus.18
v0.25.0-lotus.17
v0.25.0-lotus.16
v0.25.0-lotus.15
v0.25.0-lotus.14
v0.25.0-lotus.13
v0.25.0-lotus.12
v0.25.0-lotus.11
v0.25.0-lotus.10
v0.25.0-lotus.9
v0.25.0-lotus.8
v0.25.0-lotus.7
v0.25.0-lotus.6
v0.25.0-lotus.5
v0.25.0-lotus.4
v0.25.0-lotus.3
v0.25.0-lotus.2
v0.25.0-lotus.1
v0.20.1
Labels
Clear labels
a11y
area: audio-pipeline
area: build-publish
area: deafen
area: decorations
area: denoise
area: livekit
area: mobile-ui
area: soundboard-inject
area: upstream-sync
area: widget-actions
bug
dependencies
docs
enhancement
performance
priority: critical
priority: high
priority: low
priority: medium
research
security
tech-debt
ux
Accessibility
Fork area: audio-pipeline
Fork area: build-publish
Fork area: deafen
Fork area: decorations
Fork area: denoise
Fork area: livekit
Fork area: mobile-ui
Fork area: soundboard-inject
Fork area: upstream-sync
Fork area: widget-actions
Something is not working
Package versions and advisories
Docs wrong or missing
New feature
Audio pipeline cost, re-render storms, leaks
Data loss, security hole, or crash on a main path
Broken feature or serious usability problem
Minor issue or polish
Wrong behaviour in an edge case or notable degradation
Origin checks, capability leaks, media/key handling
Code health, fragile patterns
Usability or visual inconsistency
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: LotusGuild/element-call#44
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The fork half of cinny#310 (call-bar audio output switch).
startLotusAudioOutput(src/lotus/lotusAudioOutput.ts) has two problems:mediaDevices.audioOutput.select(). That id comes fromenumerateDevices()in the chat page, a different frame and origin, so it never matches this frame's ids.select()writes it tomatrix-setting-audio-outputanyway, andselectDevice$then falls back to the default output. Measured: the host sent91fc1920…for "Fake Audio Output 2", the fork's own id for that device is03ad4b42…, and the output stayed on Default.io.lotus.audio_output_statesends only{ deviceId }. The doc comment says{ deviceId, available: [{id,label}] }. Without the list, the host can't offer ids that work.Fix (with cinny#310):
available(this frame'saudioOutput.available$as{id, label}) inaudio_output_state, and re-send it ondevicechange.set_audio_output { deviceId }only when it is one of this frame's ids. Otherwise try{ label }matching, and ignore unknown ids rather than persisting them.Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny
30e2dbcd, cinny-desktop8f67ec7, element-call3b0050e8.Fixed by #49 (released as 0.25.0-lotus.24):
io.lotus.audio_output_statenow carries the frame's ownavailablelist, and the host builds its menu from it (cinny #417). Verified with the published package: picking an output saves a real frame device and the ✓ follows it.🤖 Claude Code