Privacy policy
Last updated 2026-08-28. Applies to Overhear, version 1.0 (com.overhear.captions), for Meta Horizon OS.
Overhear turns what is said around you — or what your headset itself is playing — into captions you can read. Everything it does, it does on the headset.
What it processes
- The headset microphone, while you have pressed Start. Audio is turned into text by models running on the device and is then discarded, except in the one case described under "Kept audio" below.
- In-headset audio, if you switch the source pill to Headset: what apps on the headset are playing, captured through Android's playback-capture API after you accept the system's recording prompt. Calls and DRM-protected content are never captured — the platform does not allow it. Same treatment as the microphone: transcribed on the device, then discarded. The system's consent dialog says "share your view" because it is the platform's screen-sharing prompt, but Overhear takes only the sound: it has no code that receives, stores or transmits any image of your view.
Nothing else is read. The app does not use the cameras, does not read your files, does not read your account, your friends or your play history.
Where the audio goes: nowhere
Nothing the app hears, and nothing it writes down, ever leaves the headset. Speech is turned into text by models running on the device; the text, the translations, the speaker names and the sessions are written to storage only this app can read. There is no account, no sync, no cloud transcription, no backup and nothing to opt out of.
The app does use the network, for exactly two things and nothing else:
- downloading a language pack. The translation models and the Whisper second pass are 131–989 MB each. They are not in the app; you choose which ones you want in Settings → Language packs, and the Meta Horizon Store sends that one file. This is the same mechanism that downloads the app itself.
- checking that this copy of the app came from the store — the standard Meta entitlement check, which the platform performs on every store app. It is logged and nothing in the app is withheld if it fails.
Both go through Meta's Platform SDK to Meta's own servers, which already know you own the app. No audio, no transcript, no caption line, no speaker name and no setting is sent, to Meta or to anyone else. There is no server of ours for anything to be sent to.
The complete list of permissions the app requests:
| permission | why |
|---|---|
RECORD_AUDIO | the captions |
FOREGROUND_SERVICE, FOREGROUND_SERVICE_MICROPHONE | keep listening while the panel is not in front |
FOREGROUND_SERVICE_MEDIA_PROJECTION | the optional "Headset" audio source |
INTERNET, ACCESS_NETWORK_STATE | the two things above: fetching a language pack you asked for, and the store's entitlement check |
There is no location, no camera, no contacts, no storage-read and no account permission. (READ_MEDIA_AUDIO exists in development builds for a test hook that reads .wav files pushed by hand; it is not in the released app.)
No analytics, no third-party services
There is no analytics SDK, no crash reporter, no advertising identifier and no telemetry of any kind. Three third-party libraries are in the app: sherpa-onnx and ONNX Runtime, which run the speech models locally and open no connection at all; and Meta's Platform SDK, used only for the two things named above. The app never asks it for your user ID, your profile, your friends, your presence or your play history, and it stores nothing about you.
The models are other people's work, and they run unchanged on your headset. The translation directions between English, French, German and Spanish are OPUS-MT by the Language Technology Research Group at the University of Helsinki (Apache-2.0). The two Japanese directions are FuguMT by Satoshi Takahashi (CC BY-SA 4.0); the quantised copies the app downloads are a derivative work and carry the same licence.
What is stored on the headset, and how to delete it
| what | where | how to delete it |
|---|---|---|
| Sessions — one per Start: the caption lines, their times, translations and speaker names | app-private storage (files/sessions/) | Sessions → open one → Delete. Clear in the panel empties the current one. |
| Voice profiles — a name you gave a speaker plus a 192-number voiceprint, so that person is labelled again next time | app-private storage (files/voices.json) | Settings → Remembered voices → tap the × on a name |
| Kept audio — see below | app-private storage (files/sessions/<id>/audio/) | deleted automatically; also removed with the session |
| Settings — theme, typeface, text size, translate target, alert words | app-private preferences | cleared with the app's data |
| Transcripts you export yourself with Save, Export .srt or Share | Download/Captions/ on the headset | ordinary files: delete them like any other |
App-private storage is readable only by this app; uninstalling removes all of it. Nothing here is backed up off the device — the app sets android:allowBackup="false".
Kept audio
Audio is normally never written to disk. There is one exception, and it is off unless you turn it on: Settings → Improve transcript after Stop. With that on, each committed piece of speech in the sitting is kept as a .wav in app-private storage so that, after you press Stop, a larger model can read the sitting again and produce a better transcript. The audio is deleted as soon as that pass finishes. If a pass never runs, the kept audio is bounded to 300 MB across all sittings and the oldest is deleted first. It never leaves the headset, and turning the setting off stops any audio being kept at all.
Children
Overhear is not directed at children and collects no data from anyone.
Changes
Version 1.0 gained network access, for the on-demand model downloads described above. That is the only reason it has any, and if it ever gains another this policy will say so before that version ships — the app's permission list in the store always shows what it actually asks for.
Contact
Questions about this policy: file an issue at https://github.com/patoles/quest-caption.