Omi audio capture
Bluetooth LE audio from compatible Omi / DevKit firmware. Opus is decoded on the phone into 16 kHz mono PCM. A foreground notification keeps recording status and a Stop control accessible.
Independent Omi companion · Android only
Turn your Omi into a private, offline recorder. Capture audio, see a live transcript, and revisit a better draft later. Everything is processed on your phone.
Android only for now — no iOS version.
Android 8+ · API 26+ · arm64-v8a · Android preview · Release notes & checksums
No account. No cloud transcription. No PC relay.
Microphone audio over Bluetooth LE
Download 0.4.13 / build 20, the latest signed Android preview. Public source is 0.4.13 / versionCode 20. The download includes all controls in this guide. This is a prerelease, not a stable release. See release and source details.
NotTheOmiAIApp replaces the cloud-dependent recording workflow with a phone-local one. Omi supplies the sound. Your phone handles the rest.
Select your Omi over Bluetooth LE. Connect Omi is an explicit recording request: recording begins when decoded audio actually arrives, not merely when Bluetooth reports a connection.
Audio is written into encrypted storage before live speech recognition sees it. Vosk displays quick English draft text while you speak.
Stop & save finishes the recording. Whisper performs a local second pass on saved audio while capture is idle. The original live draft stays available.
Browse by day, search your library, play a recording, or deliberately export text and WAV audio to a destination you choose.
Two speech engines, separate jobs. Fast live drafts during capture; a more considered pass after you save.
Bluetooth LE audio from compatible Omi / DevKit firmware. Opus is decoded on the phone into 16 kHz mono PCM. A foreground notification keeps recording status and a Stop control accessible.
Vosk shows partial text as speech arrives and saves finished phrases into the transcript log. Home displays recent phrases and sessions; the full saved transcript remains in Library.
Bundled Whisper small.en Q5_1, running through whisper.cpp on the CPU, refines saved recordings. No account, API key or runtime model download.
Refinement saves encrypted checkpoints and yields when capture starts. Interrupted jobs resume from committed progress. Pending, failed and completed states remain visible; failed items retain their audio and draft.
Explicitly choose Source: Phone microphone when you want to record without Omi. It uses its own microphone permission. The app never silently swaps to the phone mic when the wearable disappears.
Recoverable BLE loss shows Waiting for Omi / AUDIO PAUSED. Missing audio is marked. When decoded audio returns, a separate encrypted continuation entry prevents playback or export from disguising the gap.
Within an explicitly started session, capped-backoff reconnect attempts continue through recoverable loss. Stop or Disconnect cancels those attempts. Battery updates and Bluetooth callbacks alone never count as audio recovery.
PCM queue-capacity recovery. When valid audio encounters a full capture queue, the app preserves the accepted prefix, marks the loss boundary and recovers without deliberately closing the BLE connection. Invalid audio, closed queues and terminal storage/permission errors are different failure paths—not hidden as successful recovery.
Initial startup with no decoded audio is bounded at 120 seconds. Missing sound cannot be reconstructed. Physical radio reliability and all-day endurance are not guaranteed by software tests.
Keep the recording, not just the latest text on screen. Audio and transcripts stay together on your phone until you delete them.
15 GB of retained PCM audio (15,000,000,000 bytes across recordings), with a 128 MiB free-space reserve. Large WAV exports use RF64 when standard RIFF sizes are insufficient. Current playback also handles long-position counter wrap. Models, transcripts, database overhead and exports use additional space. The older 0.4.7 build instead has a 2 GiB retained-audio quota.
No age-based deletion or automatic cloud upload. A quota is a limit, not a promise of recording duration or a whole-app storage cap.
Choose each button action independently in Omi device & controls. Mappings apply to the next press, even while recording. These are app-local settings—not a firmware rewrite. The 0.4.13 download includes these base actions, plus profiles, smart actions, flashlight and four/five-press mappings below.
Included in 0.4.13
Volume actions target the media stream, not ringtone or call volume. Music commands are requests to a compatible Android media player, not confirmation that playback changed.
The opt-in triple-press mapping defaults to No action. With four/five unassigned, it combines stock tap notifications within 650 ms; enabling it delays single/double actions by up to that window. Higher-count mappings extend the window as explained below. Nearby separate gestures can combine. Firmware supplies no native triple-press event.
Connect for buttons — no recording connects the controls without audio capture. A configured Start or toggle action can begin recording. Stop & save returns to standby after accepted audio drains; Disconnect closes the connection.
Music actions send Android media keys to the active media session. Phone shortcuts open launchable apps or supported legacy shortcut providers. When the app is not visibly focused and unlocked, a tap-to-run notification provides the handoff. Launcher-private/dynamic shortcuts are not universally available; destination apps may use the network.
See the wearable battery percentage when the standard battery service returns a valid value. Unsupported or invalid readings are not presented as a real battery level.
Read the current brightness and explicitly apply 0–100% on compatible firmware. Controls are capability-gated and writes require readback. Zero requests minimum brightness; firmware-owned indicators may still light up.
Included in 0.4.13 Introduced in the 0.4.12 source checkpoint.
Choose Everyday, Meeting or Music manually. Each profile saves independent actions and shortcut targets. Everyday keeps your existing mappings; Music starts with play/pause and next track. Switching profiles cancels pending gestures; notification settings are shared across profiles. There is no automatic meeting detection or automatic profile switching.
Four/five start with No action. Triple-only retains its 650 ms grouping while four/five remain unassigned. Assigning four extends the fixed window to 950 ms; assigning five extends it to 1250 ms. The highest assigned count sets the window, starting at the first received firmware tap event—not a sliding deadline.
Shorter gestures wait for the window, so higher counts add latency. Separate nearby gestures can combine. Leaving triple/four/five at No action preserves original single/double timing. These are experimental combined taps assembled from stock single/double notifications, not native firmware gestures.
One action with two explicit contexts: insert a bookmark while recording; request music play/pause in controls-only standby. It does not automatically start recording.
A bounded built-in action requests Pause first, then starts recording only when idle. It never stops an existing recording. Android does not acknowledge whether the player actually paused. No arbitrary macros or user-defined action chains.
Toggle the phone torch through Android CameraManager. Use Allow flashlight permission to explicitly grant optional Camera access; selecting the action does not grant permission or turn on the torch. No camera preview or photo capture is opened.
Torch status follows camera callbacks and reports unknown, unsupported or camera-busy states. Android background restrictions still apply. Real four/five cadence, motor patterns and locked-screen torch physical acceptance remain pending.
Device discovery: use Find nearby Omi, Stop scanning and Forget selected device in settings. Scanning alone does not connect or record. Device selection is disabled while connected; the Home Connect Omi flow explicitly proceeds into recording.
Included in 0.4.13 Notification filter choice is new in this version.
Optional notification vibrations request a motor pattern on your connected Omi when eligible new phone notifications arrive. Choose which notifications qualify, which apps can trigger them and which pattern to use.
The setting is off by default and stays opt-in. Existing cards are not replayed when you enable it or reconnect, and disconnected events are not queued for later delivery.
Notification filter is separate from All apps / Selected apps only. The filter controls notification types; app selection controls which packages can trigger them.
The default when no filter preference is saved. Includes silent/low-importance, grouped (including group-summary), ongoing, foreground-service and DND-delivered posts. ONLY_ALERT_ONCE is not a blanket exclusion.
This mode can request Omi motor pulses even during DND (Do Not Disturb). Android must still deliver the post to the listener; the safeguards below still apply.
Retains restrictive filtering: silent/low-importance, ongoing/foreground-service and group-summary posts are skipped. Automatic alerts are suppressed during DND. Choose this mode if you want the more selective policy.
Included in 0.4.13 Introduced in the 0.4.12 source checkpoint.
The feature does not create a second BLE client or reconnect an absent wearable. There is no replay backlog or phone-motor substitution. Turn it off to stop notification-triggered haptics without changing recording. Patterns use the existing BLE owner and serialized, guarded writes.
Both filters retain own-app and package exclusions, stale and duplicate suppression, and reconnect fences. Bursts allow at most one attempted pattern per 1.5 seconds; busy events are skipped. An eligible post does not guarantee a pulse. Message text is not read, saved or sent to Omi; filtering uses metadata only.
The manual test does not itself check DND. It uses the selected default pattern on the existing connection, with a matching label such as Test double pulse on Omi or Test triple pulse on Omi. It requires the switch, notification access and supported modern firmware. A command acknowledgment reports BLE acceptance—not an independent physical measurement.
The command path is implemented and software-tested. WhatsApp physical motor delivery is not verified. Physical motor-pattern acceptance remains pending on the wearable and firmware.
No internet permission in the Android app. No sign-in, analytics SDK, cloud transcription or automatic upload.
This documentation website is hosted by GitHub Pages and has no added analytics, remote fonts or client-side trackers. Website hosting is separate from the offline Android app.
Android only for now — no iOS version. Use an Android 8+ phone with arm64-v8a support. A compatible Omi wearable is needed for wearable capture; the optional phone microphone works without one.
Download NotTheOmiAIApp-0.4.13-arm64-v8a.apk from the v0.4.13 preview release. Checksums and third-party notices are provided with that release. A GitHub source ZIP is not an installable app.
Allow APK installation from the app you use to open the download, if Android asks. Update an existing installation in place with the same signer. Do not uninstall or clear app data. Version 0.4.13 is a new build. An in-place update from 0.4.12 has been verified; a build signed with a different key cannot update your installation.
Charge and wake the wearable, enable Bluetooth, and disconnect competing Omi apps so they do not hold the peripheral.
Grant the required permissions and select your wearable. First use verifies and copies bundled models locally. Audio capture starts when real decoded audio arrives; Cancel connection stops preparation.
Use Stop & save in the app or its notification. Open Library to read or play the recording; Whisper refinement follows locally. Use Disconnect Omi in the current build to end button standby as well.
The signed APK includes both speech models; see the exact release assets for file size and checksums. No runtime speech-model download is needed. Record with participants' permission.
The signed APK and public source are both 0.4.13. The download includes the profiles and other controls first published in 0.4.12 source, plus the new notification filter and screenshot support. This remains an Android preview, not a stable release.
A signed arm64-v8a Android APK with both speech models bundled.
An in-place USB update was verified. Motor delivery, real-world radio and all-day endurance acceptance remain separate.
The public application source covers the same features as this download. Tests and portable build instructions are included; signing keys and generated payloads are not.
Build from source with your own signing key. A differently signed build cannot update an existing installation in place.
Build source 0.4.13 ↗Current-branch source ZIPs contain 0.4.13, not an installable app. Automatic source archives attached to older release tags remain historical snapshots. The older 0.4.11 preview and older 0.4.7 preview remain historical downloads; 0.4.12 was published as source without a public APK release. Root-level legacy binary manifests describe 0.3.1; use checksums attached to the exact release you download.
No. Capture, recognition and storage run on the Android phone. A compatible wearable and Bluetooth are needed for Omi capture. The optional phone microphone source works without the wearable. Competing apps should release their Omi connection.
No automatic recording on app launch or reboot. Connecting through Connect Omi is an explicit start request. Button-only connection is a different mode and saves no audio. A configured start/toggle button can explicitly transition from connected standby into recording.
After audio establishes a session, recoverable loss enters Waiting for Omi and retries with capped backoff. Actual decoded audio is required to resume. Reported gaps lead to separate continuation entries, and missing audio remains missing. Some pauses with contiguous sequence numbers can be undetected. Terminal errors still stop capture.
Stop & save stops audio capture, drains accepted audio and returns a healthy Omi session to button-only standby. Disconnect ends the wearable connection and button control too. Cancel before initial audio and fatal failures do not silently reopen standby. Long press remains firmware-controlled.
Whisper runs after saving, while capture is idle. Android may defer background jobs. Reopen the app after reboot or force-stop to reschedule durable work. Failed items keep their saved audio and original draft; use Refine / retry with Whisper when offered. A live draft is not represented as a completed refined transcript.
No AI summaries, speaker identification or translation. The bundled recognition models are English-only. Transcription is fallible, including on accents and noisy wearable audio; review important wording against the recording.
The client targets the inspected stock Omi / DevKit Opus protocols with codec IDs 20 and 21, 16 kHz mono audio and sequence/fragment framing. Unknown codecs fail visibly. Optional battery, button and brightness characteristics are validated rather than assumed. OmiGlass is not blanket-certified; incompatible brightness responses are rejected before writing.
Android API 26+ is required. The public APK is arm64-v8a; source builds also support x86_64. No 32-bit ARM build is provided.
Not from the app alone. Backups are disabled and the encryption key is local to the installation. Uninstalling or clearing data loses the key and library. Export files you wish to retain before doing either; exports are plaintext and outside the app's deletion controls.
No. Foreground services and a partial wake lock support ongoing capture, but phone power policies, radio conditions, firmware and thermal load matter. Process death can lose an uncommitted tail; interrupted sessions are recovered on the next launch. A blocked native recognizer can delay final saving or teardown. Software regression tests are not a wearable endurance benchmark.
No. NotTheOmiAIApp is an independent companion. It does not flash firmware, recover recordings from wearable storage, sync time, send cloud commands or replace firmware-owned power behaviour.
Public Android source 0.4.13 / versionCode 20, tests and build tooling. The application is MIT-licensed; bundled components keep their own licences.
The public build uses Java 17, Android SDK 34, Android NDK 27.2.12479018 and CMake. Prepare the pinned models and native libraries before running Gradle. Build preparation fetches verified dependencies; installed-app transcription stays offline.
Concentus decodes Opus; Vosk provides preview recognition; whisper.cpp powers saved-audio refinement. Dependencies and provenance are pinned in the repository. Signing keys, generated model/native payloads and private runtime data are not part of the source repository.
Retained 0.4.13 evidence includes 112 targeted signed-emulator tests and a separate 11-test ad-hoc rerun. The rerun is non-additive; this is not a full-suite result or hardware acceptance. Android tests were not freshly rerun for publication.
A 0.4.12 → 0.4.13 USB update was verified against the exact APK bytes, installed identity and permissions. No recording was started during that installation check. Real four/five cadence, motor patterns, WhatsApp delivery and locked-screen torch physical acceptance remain pending.
Historical 0.4.12 evidence includes 125 Android instrumentation tests, 54 gesture scenarios and 641 haptic/BLE scenarios. These checks overlap; do not add them together or treat them as current 0.4.13 results.
Documentation is maintained separately under docs/. This page does not change the app, install an APK or start a recording. The download and public source are both 0.4.13. Publishing source does not replace release assets or change older tags.