Nomi:自带 API key 的 AI 饮食记录 Android 应用
david-x3d/nomi
Nomi 是一款 Android 饮食记录应用,需用户自备 AI 提供商 API key,推荐 Exa + Gemini 组合,由 Exa 检索网络证据、Gemini 解析为结构化营养数据。
Important
Bring your own API key. Nomi does not include hosted AI credits or a shared cloud account. AI-powered food research, interpretation, and image analysis require a key for the provider you choose. Nomi asks for it during setup, and it can be changed in Settings → AI provider. Provider usage may incur charges on your own account.
📸 Screenshots
✨ Features
- 🗣️ Log food with natural language by typing or on-device dictation.
- 📷 Recognize meals and nutrition labels from photos. Estimate food weights using plate size, cutlery and other visible scale cues, then review and edit the grams before researching nutrition. Long-press the icon for photo or menu scan.
- 🍽️ Scan full restaurant menus, search the extracted dishes, and select multiple items.
- 🔎 Research branded products and restaurant meals using configurable AI providers.
- ⚖️ Preserve explicit quantities and scale nutrition deterministically.
- ✏️ Correct a logged amount with phrases such as “I ate 60 g less” without repeating online research.
- ⭐ Reuse recent foods, favorites, and saved meals.
- 🕘 Reuse any past day: copy it whole, or pick the individual foods you want again to eat today or keep as a saved meal.
- 📊 Track calories, macros, micronutrients, weight, goals, logging streak, and progress.
- 🌍 Use the app in ten languages with metric and US customary quantities.
- 🔐 Keep nutrition history local, with API keys protected by Android Keystore-backed encryption.
- 📤 Export a JSON diary of each day's foods, calories, protein and carbs, or a restoreable backup without API keys.
- 📤 Send text or photos to Nomi from any app with the Android share sheet.
- ⌚ Use Nomi on a Wear OS watch: see what is left today, dictate a meal, log favorites with a tap, and add a tile or a watch-face complication.
- 📲 Share a day with another Nomi by holding the two phones together. Long-press a food, tick the foods to send, then tap the phones back to back. No pairing, no account, no server.
🌍 Languages
Nomi's interface is fully translated into ten languages. On first launch it follows your system language and falls back to English; you can switch at any time in Settings → Language, where each language is listed under its own name.
| Language | Code | Language | Code |
|---|---|---|---|
| English | en |
Nederlands | nl |
| Deutsch | de |
Português | pt |
| Español | es |
Shqip | sq |
| Français | fr |
Svenska | sv |
| Italiano | it |
Türkçe | tr |
Food logging speaks the same languages: you can write or dictate a meal in any of them, and the AI keeps the food's own language in the logged name — “Rührei mit Speck”, “Pollo alla cacciatora”, “Beurre” — instead of translating it into English. Numbers, times, and dates are formatted for the selected language, and an amount typed with a comma (1,5) is understood everywhere.
🔑 AI setup
Tip
Recommended: Exa + Gemini. Exa retrieves focused web evidence and Gemini turns those sources into structured nutrition data. A Gemini Flash Lite model is the recommended cost-conscious choice when it is available for your Google API project.
A new install is set up for Exa + Gemini: Exa researches the food, and Gemini interprets what you log, changes portions and reads photos. The last setup step asks for a Google Gemini API key and an Exa API key and checks them before saving. You can skip it and add the keys later under Settings → AI provider.
Installs that were set up before v2.10.0 keep the providers they had. To move one to Exa + Gemini:
- Open Settings → AI provider → Provider and model per task → Food research.
- Select Exa + Gemini and enter your own Gemini and Exa API keys.
- Tap Test connection, then Save.
Supported configurations include Sonar, Exa + Gemini, Perplexity, OpenRouter, OpenAI, and compatible custom endpoints. Exa + Gemini requires both a Google Gemini API key and an Exa API key. Only the text or image needed for the selected action is sent to the configured provider.
API keys are stored on the device, excluded from app backups, and never committed to this repository. Nomi cannot provide, recover, or pay for third-party API credentials.
📱 Installation
- Open the latest GitHub release.
- Download the
Nomi-…-release.apkasset. - Allow installation from your browser or file manager when Android asks.
- Install the APK, then configure your own AI provider keys.
For the watch, download Nomi-…-wear-release.apk from the same release and install it on the watch with adb install over Wi-Fi debugging or a sideloading app such as Wear Installer. The watch app works only together with Nomi on the paired phone.
GitHub releases are the official distribution channel for this repository. Verify the SHA-256 digest shown by GitHub when integrity matters.
🎨 Design
Nomi is a native Jetpack Compose app built with Material 3 Expressive. It supports light, dark, dynamic-color, and pitch-black surfaces; spatial cards; responsive motion; edge-to-edge layouts; and phone/tablet navigation patterns.
🛡️ Privacy
- Nutrition history, saved meals, favorites, goals, and weight records are locally saved
- API credentials use Android Keystore-backed encryption and are excluded from exports and backups.
- Meal text or a selected image is sent only when an AI-powered action needs it.
- The configured provider's own privacy policy and pricing apply to those requests.
- Exported backups do not contain API keys or diagnostic events.
- Exported diaries list foods and daily calorie, protein and carbohydrate totals. They do not contain API keys.
- Sharing a day hands it to the other phone over NFC and nowhere else. Nothing is uploaded, and no relay, account, or internet connection is involved. What you send is what you ticked, and the receiving phone shows you the day before writing anything into its diary.
🧰 Requirements
| Purpose | Requirement |
|---|---|
| Install | Android 8.0 (API 26) or newer |
| Build | JDK 17 and Android SDK 37 |
| AI features | Your own supported provider API key(s) |
| Tap to share | NFC on both phones, and the receiving phone unlocked with Nomi open |
| Watch app | Wear OS 3 or newer, paired with a phone that has Nomi and Google Play services |
🏗️ Build from source
Windows:
.\gradlew.bat :app:assembleDebugmacOS or Linux:
./gradlew :app:assembleDebug
The debug APK is written to app/build/outputs/apk/debug/app-debug.apk. Build the Wear OS app with :wear:assembleDebug; it is written to wear/build/outputs/apk/debug/wear-debug.apk.
Run unit tests with:
.\gradlew.bat :app:testDebugUnitTestThe optional nutrition evaluation tools live in eval/. Place live-evaluation credentials in eval/.env, which is ignored by Git, and run python eval/run_eval.py --smoke before a full --live evaluation.
🏷️ Versioning
Nomi follows semantic versioning for new releases:
- Patch (
1.2.0 → 1.2.1): fixes, polish, and small performance improvements. - Minor (
1.2.1 → 1.3.0): substantial backward-compatible features or redesigns. - Major (
1.x → 2.0.0): incompatible storage, behavior, or platform changes.
Published historical tags are immutable so existing APK links and update paths remain valid. Release notes are maintained in English.
📄 License
Nomi is released under the PolyForm Noncommercial License 1.0.0.
You may use the app, read the source, run it, study it, fork it, modify it, and share your changes — for any noncommercial purpose. Personal use, hobby projects, study and research all count, as does use by schools, charities, and public institutions.
You may not sell Nomi or anything built from it, or use it commercially. That includes selling copies, charging for access, and running it as a paid service.
No trademark rights are granted. "Nomi", the name, the fox logo, and the app icon stay with the copyright holder, so a fork needs its own name and icon. This is stated as a Required Notice: in the licence, which means it has to travel with every copy you pass on.
Copyright © 2026 Nomi. The software is provided "as is", without warranty of any kind. Third-party dependencies keep their own licences, and the brand names visible in the screenshots belong to their respective owners.
Note
This is a source-available licence, not an OSI-approved open-source one — the noncommercial restriction is what puts it outside that definition.
来源:GitHub · github.com