Ray-Ban Meta: a failed audio start is swallowed and capture shows recording with no audio
Maintainers usually reply within 1 day
@Git-on-my-level is already working on this.
Since Oct 24, 2026.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 84/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- dart
- Domain
- audio-video-rtc
Research direction
Start at app/lib/services/devices/connectors/rayban_meta_connection.dart (performGetBleAudioBytesListener, ~L71-89): today it swallows the startAudioCapture() failure and returns a subscription anyway. Read the transport's rethrow at rayban_meta_transport.dart:265-272, then how capture_controller.dart:1927 treats a non-null subscription as ready. Make the failed start fail the attach, and add Ray-Ban to isCaptureSourceInScope in app/lib/services/capture/capture_wedge_monitor.dart:145. Done when the integration test from the issue reports callerError non-null (or a null subscription) instead of subscriptionReturned=true with zero frames.
Written by the indexing model from the issue text.
Description
TL;DR: When capture attaches to Ray-Ban Meta glasses, the connector creates the audio subscription, then starts the native HFP capture inside a try/catch that only logs. If the start fails (the selected microphone disappeared, the audio session is busy), the caller still gets a subscription, capture enters device recording ("Listening"), and no audio ever arrives. The wedge monitor ignores Ray-Ban, so nothing recovers it. Reproduced on the iOS Simulator with the real RayBanMetaDeviceConnection.
Product impact (see PRODUCT.md and ISSUE_TRIAGE_GUIDE.MD)
- Primary loop layer: Capture
- Involves data loss, failed capture, or broken sync/trust. Failed capture that looks like it is working: the user thinks Omi is listening and nothing is recorded.
Describe the bug
The transport rethrows correctly; the connector is where the error is lost.
To Reproduce
- Connect Ray-Ban Meta glasses.
- Start capture while the native audio start fails (for example the selected audio-only mic is no longer available).
- Home shows the glasses recording; no transcript and no audio arrive.
Current behavior
The listener call returns a subscription and does not throw; zero frames; no error reaches the caller.
Expected behavior
A failed start fails the attach (throw or return null) so capture shows an error and can retry, and Ray-Ban sources are covered by the wedge monitor.
Screenshots
No screenshot. Evidence below.
user ID (can we access the user info to validate the bug?):
Not needed: found in the code and reproduced without a user account (local fixture backend).
Smartphone + device (please complete the following information):
- Device: iOS Simulator, iPhone 16 (reproduction); the bug is in shared code, so physical iPhones are affected too
- OS: iOS 18.0 (Simulator)
- App Version:
mainat cf8201c2f5 (dev flavor) - Device version: Ray-Ban Meta
Additional context
Root cause. RayBanMetaDeviceConnection.performGetBleAudioBytesListener listens first, then try { await _metaTransport.startAudioCapture(); } catch (e) { Logger.debug(...) } and returns the subscription. The transport rethrows. Capture treats a non-null subscription as ready (capture_controller.dart:1927) and publishes device recording without requiring a frame (:2127). isCaptureSourceInScope only covers omi and friend_com.
Reproduction. Reproduced on the iOS Simulator (iPhone 16, iOS 18.0) with a temporary integration test on main at cf8201c2f5. The test drives the real production classes; only the platform boundary is faked (the RayBanMetaTransport: empty audio stream, startAudioCapture() throws PlatformException(hfp_start_failed)):
OMI_FACT:c15-rayban-start-failure-swallowed:startAudioCaptureCalls=1
OMI_FACT:c15-rayban-start-failure-swallowed:subscriptionReturned=true
OMI_FACT:c15-rayban-start-failure-swallowed:callerError=null
OMI_FACT:c15-rayban-start-failure-swallowed:framesReceived=0
OMI_FACT:c15-rayban-start-failure-swallowed:streamErrors=0
OMI_REPRO:c15-rayban-start-failure-swallowed:REPRODUCED
- Dominant language
- Python
- Stars
- 13.9k
- Forks
- 2.7k
- Avg merge
- 6h 8m
- Merged PRs (30d)
- 667
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from BasedHardware/omi
-
chore(gateway): emit INFO budget reserved/settled logs for proactivity v2 (chip task_2855f4ec)Possibly taken @ahmedcompk claimed this 30 days ago. Openbackend
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
BasedHardware/omi#20940 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: Memory non-active routes lack blank string validation and timezone normalizationPossibly taken @brandonstensby-dotcom claimed this 37 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
BasedHardware/omi#20084 ·
Maintainers usually reply within 1 day
-
[Bug]: Memory apply store lacks identifier validation and deletion receipt limit clampingPossibly taken @brandonstensby-dotcom claimed this 37 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
BasedHardware/omi#20075 ·
Maintainers usually reply within 1 day
-
[Bug]: Sync backfill sequencer lacks query limit clamping and sequence index boundsPossibly taken @brandonstensby-dotcom claimed this 37 days ago. Open
Difficulty 2/5 1-2 days Newbie friendliness 76/100
BasedHardware/omi#20070 ·
Maintainers usually reply within 1 day
-
[Bug]: Sync recording lineage lacks limit clamping and origin ID validationPossibly taken @Dimank92 claimed this 9 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
BasedHardware/omi#20064 ·
Maintainers usually reply within 1 day
All issues in BasedHardware/omi
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
hkust-nlp/Toolathlon#101 ·
-
enhancement good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
SkyTruth/cerulean-cloud#219 ·
-
area:security priority:low size:small
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
RonaldHensbergen/composable-data-stack#1217 ·
Maintainers usually reply within 1 day
-
good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
blixvip/BlendClone#27 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100