Independent Omi companion · Android only

Your Omi.
Your phone.
Your words.

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.

The local-first signal pathBLE → phone

Omi wearable

Microphone audio over Bluetooth LE

Opus audio · decoded locally

Your Android phone

NO CLOUD
  1. 01
    Keep the audioEncrypted local recording
  2. 02
    See words as you speakVosk · live English draft
  3. 03
    Refine after savingWhisper · on-device second pass
  4. 04
    Find it againLibrary · playback · explicit export
Processing diagram, not a screenshot. No personal audio or transcript shown.
Android 8+API 26 minimum
Fully on-deviceBundled speech models
AES-GCMEncrypted audio & text
Open sourceMIT application code
Version guide

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.

01

A recorder, not another cloud account.

NotTheOmiAIApp replaces the cloud-dependent recording workflow with a phone-local one. Omi supplies the sound. Your phone handles the rest.

  1. Connect your wearable.

    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.

  2. Record first. Preview as you go.

    Audio is written into encrypted storage before live speech recognition sees it. Vosk displays quick English draft text while you speak.

  3. Save, then refine.

    Stop & save finishes the recording. Whisper performs a local second pass on saved audio while capture is idle. The original live draft stays available.

  4. Read, listen, or export.

    Browse by day, search your library, play a recording, or deliberately export text and WAV audio to a destination you choose.

Not just for recording. Choose Connect for buttons — no recording to use configured wearable button actions without subscribing to the audio stream or creating a recording.
02

Capture now. Make sense of it later.

Two speech engines, separate jobs. Fast live drafts during capture; a more considered pass after you save.

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.

Live English transcription

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.

Offline Whisper refinement

Bundled Whisper small.en Q5_1, running through whisper.cpp on the CPU, refines saved recordings. No account, API key or runtime model download.

Resumable background work

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.

Phone microphone fallback

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.

Honest interruption handling

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.

Recovery without pretending nothing happened.

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.

Included in 0.4.13

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.

03

A library you can actually revisit.

Keep the recording, not just the latest text on screen. Audio and transcripts stay together on your phone until you delete them.

  • Calendar & day browsingLibrary opens on Today. Move between months, choose a day or switch to All dates. Marked dates show saved-recording counts in your phone's current time zone. This is a recording browser, not integration with a phone calendar.
  • SearchSearch titles and full saved transcripts for the selected day or across all dates. Matching is case-insensitive substring search, not semantic search. Completed Whisper text is searched when available.
  • PlaybackPlay and stop saved audio locally, streamed from encrypted storage without a plaintext playback cache. Playback is blocked during capture, and stops on audio-focus loss or when you leave the activity. No seek, speed or pause/resume control is exposed.
  • Browse without losing your placeSaved recordings appear newest-first, 12 per page. Date, search, page and scroll position are retained when returning from detail. Use Refresh saved recordings when completed transcription changes become available.
  • Unreadable-entry noticesDamaged entries are reported, not silently discarded. Results may be incomplete; encrypted originals are retained.
  • RenameGive a saved recording a useful title. Active recordings must be stopped before rename, playback, export or deletion.
  • Refine / retry with WhisperRetry failed refinement or explicitly opt an eligible older recording into a local Whisper pass. Old recordings are not silently reprocessed.
  • View original live draftRead the original Vosk text even after refinement. Refined text becomes the selected transcript only when the full pass succeeds.
  • Export textSave the selected transcript, retaining loss, incomplete-transcript and bookmark annotations. The export is an unencrypted copy.
  • Export audioSave a WAV copy using Android's destination picker. Gap-separated entries are not silently stitched together.
  • Delete recordingPermanently remove that recording's audio and transcript from the app after confirmation. Previously exported copies are not deleted.
Included in 0.4.13 · since 0.4.8

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.

04

Small button. Useful choices.

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.

  • Bookmark in transcriptSingle-press default
  • Start recording
  • Stop & saveDouble-press default
  • Start / stop recording
  • Play / pause music
  • Pause music
  • Phone shortcut
  • No action

More media controls.

Included in 0.4.13

  • Play music
  • Next track
  • Previous track
  • Stop music
  • Fast-forward music
  • Rewind music
  • Media volume up
  • Media volume down
  • Mute / unmute media

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.

Triple press · experimental combined taps

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.

Button-only standby

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 & phone shortcuts

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.

Battery status

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.

Brightness control

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.

A profile for the way you use it.

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.

  • Single press
  • Double press
  • Triple press
  • Four pressesNo action by default
  • Five pressesNo action by default
Five independent dropdowns. One fixed grouping window.

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.

Smart: bookmark recording / play-pause idle

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.

Pause music → 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.

Flashlight toggle

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.

Observed state, not assumed success

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.

Connection required. Buttons cannot act through a disconnected wearable. Long press and power behaviour belong to the firmware. Wearable shake is unavailable; phone movement is not used as a substitute. There is no firmware flashing, LED-colour editor, wearable audio playback or unrestricted phone automation.
05

A nudge on your wearable.

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.

  1. Open Omi device & controls and turn Notification vibrations on.
  2. Grant Android notification access when prompted.
  3. Keep Omi connected for recording or through Connect for buttons — no recording.

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.

Choose what qualifies.

Notification filter is separate from All apps / Selected apps only. The filter controls notification types; app selection controls which packages can trigger them.

All notifications

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.

Alerting only

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.

Choose the apps. Choose the pattern.

Included in 0.4.13 Introduced in the 0.4.12 source checkpoint.

  • Notification appsChoose All apps or Selected apps only. An empty selected-app list means no notification pulses. Use Choose apps & patterns to select visible launchable apps.
  • Default vibration patternShort pulse, Double pulse, Triple pulse or Long pulse. Short/double/triple request one, two or three short pulses; long requests one longer pulse, using bounded stock motor presets.
  • Per-app choicesUse the default or choose a per-app pattern. Per-app patterns also apply in All apps mode. Notification preferences are shared across control profiles, not reset when you choose Meeting or Music.
  • Keep your opt-inUpgrading preserves the previous enabled state, selected packages and pattern overrides. All apps and Double pulse remain the defaults for those separate settings. Changing notification choices cancels queued vibrations; it does not grant notification access, connect or start recording.

Only the existing connection

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.

Safeguards in both filters

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.

06

Private by architecture.

No internet permission in the Android app. No sign-in, analytics SDK, cloud transcription or automatic upload.

  • Encrypted storageAudio and transcript payloads use AES-256-GCM with an Android Keystore key. Selected device details and button preferences are local operational settings.
  • Screenshots and backupsScreenshots are allowed throughout the app, including transcript and settings screens. They can include visible private content; review them before sharing. App backups remain disabled. Transcript text is not put into notification bodies or logs.
  • You choose what leavesExport uses Android's document picker. Exported text and audio are unencrypted; the destination app may sync them to its own cloud service.
  • Keep the keyDo not uninstall or clear app data to update. Removing the app's data loses its local encryption key and library. An APK update must use the same signing identity.

Permissions, explained.

Nearby devices / Bluetooth

Discover and connect to Omi. Android 8–11 additionally requires Location permission and system Location for BLE scanning; the app does not collect location.

Notifications

Show capture status and a Stop control. Omi capture and button-only connection require notifications enabled. The optional wearable alerts also require separate notification-listener access.

Microphone

Needed only when explicitly choosing the phone microphone. It is not required to capture audio arriving from Omi over BLE.

Foreground service & wake lock

Support user-started capture outside the foreground UI. Android power management and physical connection reliability still affect endurance.

Camera · optional flashlight

Optional, explicitly granted permission for Flashlight toggle through CameraManager. Selecting the action does not grant access. No photos, camera preview or camera stream are captured. Not required for Omi recording.

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.

07

From install to first recording.

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.

  1. Get the signed preview APK.

    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.

  2. Install without deleting your library.

    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.

  3. Prepare Omi.

    Charge and wake the wearable, enable Bluetooth, and disconnect competing Omi apps so they do not hold the peripheral.

  4. Tap Connect Omi.

    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.

  5. Save and explore.

    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.

08

What's documented. What's available.

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.

Latest downloadable preview

0.4.13 · build 20

A signed arm64-v8a Android APK with both speech models bundled.

  • All notifications / Alerting only filter choices
  • Screenshots allowed throughout the app
  • Profiles, smart actions, flashlight and four/five-press controls
  • Notification app selection and default/per-app patterns
  • 15 GB retained PCM quota, RF64 exports and queue-capacity recovery
Get v0.4.13 ↗

An in-place USB update was verified. Motor delivery, real-world radio and all-day endurance acceptance remain separate.

Public source

0.4.13 · versionCode 20

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.

09

The useful details.

Does it need the official Omi app, an account or a computer?

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.

Does it record when I open the app or reboot?

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.

What happens if Bluetooth drops or audio stops arriving?

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.

How is Stop different from Disconnect?

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.

Why is Whisper still pending, or showing a failed state?

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.

Does it summarise conversations or identify speakers?

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.

Which wearables and phone architectures are supported?

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.

Can I restore my library after uninstalling?

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.

Does it guarantee all-day, screen-off recording?

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.

Is this affiliated with Omi or Based Hardware?

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.

10

Open it up.

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.