Skip to content
nytka-appPublic

About

Self-hosted server for the Omi AI necklace: transcribes, summarizes and searches your recordings on a machine you run.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

236 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nytka-server

status: Parked CI last commit

Nytka server

Self-hosted server for the Omi AI necklace: transcribes, summarizes and searches your recordings on a machine you run.

Parked. It works; I am not changing it now and may come back.

flowchart LR
  pendant[Omi pendant] -- Bluetooth --> app[Nytka Android app]
  app -- "audio chunks over HTTPS" --> server[Nytka server]
  server -- "speech only, silence dropped" --> stt[Transcription endpoint you choose]
  server -- "closed conversations" --> llm[Language model you choose]
  server <--> db[(Postgres)]
  server -- "conversations, search, Ask" --> app
  server -- webhooks --> tools[Your other tools]
  server -- MCP --> agents[AI agents]
Loading

Why

Omi is an open-source AI necklace that records the conversations around you. Its official app sends every recording to Omi's cloud, and self-hosting that backend means Firebase, Google Cloud Storage, Pinecone, Redis and OpenAI, with no Compose file. The free plan stops at 300 minutes and 30 questions a month. I wanted my recordings on my own machine, with models I pick, and no quota. Nytka is the companion app and server that do that; this repository is the server, nytka-app/android is the app. Why it is built this way: vision.

Facts as of 2026-10, checked against each project's own README or store listing. "Unknown" means the project's own docs do not say.

Nytka Omi (official app) Chronicle LocusTether
Self-host effort Docker Compose Firebase, Google Cloud Storage, Pinecone, Redis, OpenAI, no Compose file Docker + MongoDB CUDA, Docker, Ollama, Syncthing
Choose your models any OpenAI-compatible endpoint fixed providers with your keys yes Ollama only
Usage quotas none 300 min and 30 questions a month free none none
Offline sync from the pendant yes yes unknown no
Tags yes no unknown no
Raw audio export yes no unknown zip
TV and media kept out of people yes no no no
iOS no yes yes no

What it does

  • Transcripts without the silence. The server drops silence with Silero VAD (a small voice-activity model), sends only speech to any OpenAI-compatible transcription endpoint, and groups the result into conversations.
  • Titles, summaries, tasks and memories. With a language model you choose, each closed conversation gets a title, a summary and tasks, and lasting facts about you become memories. The summary can follow a template for a meeting, lecture, doctor's visit or call, which you can edit. A task you already have open joins it instead of repeating, and a near repeat waits in the review inbox (duplicate tasks).
  • People and your own voice. It learns your voice, groups other voices, keeps facts about the people you talk to, and keeps the TV and phone calls out of them.
  • Search and Ask over everything, in Ukrainian and English, plus a daily digest and briefs before calendar events. With an embeddings model and pgvector they also find by meaning, not only by the words you said (vector search).
  • Webhooks and MCP. Your other tools hear about new conversations, tasks and memories; AI agents read it all over MCP (Model Context Protocol, how AI tools read data) with 19 read tools and 3 that write.
  • Usage and a budget. Each transcription request is priced by a table you can edit, GET /api/v1/usage shows the cost per day, the month so far and its forecast, and past a monthly budget batches go to a free engine and are marked to transcribe again, never dropped (usage and budget).
  • Nothing is lost. Audio the pendant stored while the phone was away arrives later at the time it was recorded, and an Omi export imports in one call. Nytka's own export reads back in, to restore a server or move to a new one (restore).

Not here: an iOS app, a hosted version for people who do not self-host, and OAuth sign-in for MCP clients. What each milestone adds, and what comes next, is in the roadmap.

Warning

Nytka records the people around the wearer. You are responsible for following the recording and privacy laws where you use it. Nytka is an independent project, not affiliated with or endorsed by Based Hardware; "Omi" is a trademark of its owner.

Quick start

On a Linux or macOS host with Docker. This writes ./nytka with a generated admin token and Postgres password, and starts Postgres, the server, a local speech-to-text server and a local language model, so it needs no account and no API key. Local models are slower and less accurate than a hosted provider.

curl -fsSL https://raw.githubusercontent.com/nytka-app/server/main/scripts/install.sh | bash
curl http://127.0.0.1:8080/healthz

healthz answers {"status":"healthy"}. Then give the phone an HTTPS address and pair the app: Install the server walks through it, and through a hosted transcription account such as Groq, step by step, in about 15 minutes.

To build from source instead: .NET 10 SDK and a Docker daemon (the tests start Postgres through Testcontainers).

dotnet build
dotnet test

How it works

The app uploads the pendant's Opus audio in chunks of about 30 seconds. A processing run drops silence, stores the speech and queues transcription; a conversation ends after two minutes without speech. Jobs run in three lanes so a slow model or webhook receiver never delays transcription: audio, AI, and hooks.

The invariant that matters: times are capture times. The pendant stops sending in silence and Bluetooth drops frames, so the server never turns a sample count into a time; audio pulled from the pendant's own storage carries its recording times, and conversations form by them, not by arrival. Each processing run commits in one transaction, so a crash repeats work and never loses or duplicates it. Architecture has the detail.

Numbers

Value Source
HTTP API routes 82 rows of the table in API
MCP tools 22 (19 read, 3 write) MCP
Database migrations 32 db/migrations/
Test methods 1,391 [Fact] and [Theory] in tests/

Docs


Apache-2.0 · Notice.

About

Self-hosted server for the Omi AI necklace: transcribes, summarizes and searches your recordings on a machine you run.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages