Lexiverse
Lexiverse - 영어 학습자를 위한 AI 기반 문맥 독해 엔진
Nomi가 강의 내용을 실시간 필사하고, Mac에서 각 구절을 번역
Nomi transcribes your lectures as the teacher speaks, translates each passage on your Mac, and lets you ask questions about the class afterwards. Made for international students.
교육Swift · HTMLGitHub @Jasonsu22온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Native macOS app for on-device lecture transcription, translation, and study.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Studying in a second language is hard. The teacher talks fast, new terms are everywhere, and you can't listen and take notes at the same time. Nomi does the listening and writing for you, translates every passage right under the original, and answers your questions about the class afterwards. Speech recognition and translation run on your Mac, so your classes stay with you.
You can also chat while a lecture is recording. Live transcription always keeps priority. Nomi supports Chinese, English, Japanese, Korean, German, French, Spanish, Russian and Arabic.
You only do this once. Nomi needs macOS 26 or later on Apple silicon (M1 or newer).
Do I need the internet in class? No. After the models are downloaded once, transcription and translation work offline. You only need the internet for Web search or an API model.
Is it okay to record my lectures? Rules differ between schools and countries. Check your university's policy and ask your teacher first.
How much does it cost? Nomi is free and open source under the MIT license. If you connect your own API for questions, that provider may charge you.
Where do I report a problem? Open an issue, or use Help › Contact us in the app.
The interface is SwiftUI and the engine is Rust. The Swift module is LectureNoteApp.
You need an Apple Silicon Mac, macOS 26, Xcode (Swift 6.2), and Rust. The first build downloads dependencies, including a pinned revision of OminiX-MLX.
bash scripts/build-app.sh
open build/Nomi.app
build-app.sh accepts debug (the default) or release and writes build/Nomi.app. The build/ directory is not committed.
After a Swift-only change, refresh the existing app without rebuilding Rust:
bash scripts/refresh-app.sh
That script requires build/Nomi.app to exist already.
Without a paid Apple Developer certificate, macOS asks for the Keychain password again after every rebuild. Debug builds, and release builds made with NOMI_DEV_KEYS=1, copy each API key into a private file after the first approval, so rebuilding stops asking:
NOMI_DEV_KEYS=1 bash scripts/build-app.sh release
The script prints a warning when this mode is on. Builds you give to other people should be plain release builds, which keep keys in the Keychain only.
To package a release, build without NOMI_DEV_KEYS, then make the DMG:
bash scripts/build-app.sh release
bash scripts/build-dmg.sh
bash scripts/make-appcast.sh release-notes.md
build-dmg.sh writes build/Nomi-<version>-arm64.dmg with the installer background and the first-launch guide from Design/DMG/. It installs dmgbuild into build/.dmgbuild-venv on first use, and refuses debug and dev-key builds. make-appcast.sh signs it for automatic updates and writes build/updates/. Attach build/updates/Nomi-arm64.dmg and build/updates/appcast.xml to a GitHub release tagged v<version> and mark it Latest: the website's download link and the in-app updater (Sparkle, checking once a day) both read the latest release. Updates are signed with an EdDSA key kept in the login Keychain, so releases must be made on the Mac that holds it.
| Module | Where | |
|---|---|---|
| 🖥️ | SwiftUI interface, meetings, Ask, and settings | Sources/LectureNoteApp/ |
| 🧪 | Swift tests | Tests/LectureNoteTests/ |
| ⚙️ | Local engine, moxin-engine | Backend/moxin-engine/ |
| 🗣️ | Speech-recognition worker | Backend/workers/asr-worker/ |
| 🌐 | Translation and local question worker | Backend/workers/llm-worker/ |
| 📦 | ASR loader shipped with this repo | Backend/vendor/qwen3-asr-mlx/ |
| 🎨 | Logo, app icon, DMG and README art | Design/ |
| 🌍 | Website | website/ |
The packager copies moxin-engine, asr-worker, llm-worker, and mlx.metallib from Backend/target. Packaging stops if any of them is missing.
You do not need a checkout of Moxin-Voice or Moxin-Studio to compile or run Nomi. The engine, both workers, and the patched Qwen3-ASR loader are already in Backend/. The app starts that engine itself and stops it on quit. Debug builds look for Backend/target/debug/moxin-engine. The packaged app uses only the copy inside the bundle.
Downloaded weights stay in ~/.OminiX/models. On a Mac without them, download the models again from Settings.
| What | Where |
|---|---|
| Meetings, categories and meeting summaries | ~/Library/Application Support/Nomi/meetings.json |
| Source index and file copies | ~/Library/Application Support/Nomi/sources.json and sources/ |
| Links between meetings and sources | ~/Library/Application Support/Nomi/meeting-links.json |
| Ask history | ~/Library/Application Support/Nomi/chats/ |
| Meeting Q&A | ~/Library/Application Support/Nomi/qa/ |
| Memory | ~/Library/Application Support/Nomi/memory.json |
| Local models | ~/.OminiX/models |
| API keys | macOS Keychain; development builds also keep a copy in ~/Library/Application Support/Nomi/secrets.json (readable only by you) |
| Engine log | ~/Library/Logs/Nomi/engine.log |
Interface language, appearance, microphone permission, the selected local model, and API profiles are stored in the app’s UserDefaults.
swift test
cargo test --manifest-path Backend/Cargo.toml --locked
Pushes to main and pull requests run GitHub Actions. Swift is built and tested on macOS 26. The engine crates that do not use MLX (voice-core and moxin-engine) are tested on Linux. The speech and translation workers need Apple’s MLX, so that Linux runner does not compile them.
The live transcription path began in Moxin-Voice. Thank you. Nomi’s own interface and the work written for this app are MIT. Code and ideas taken from other projects stay under those projects’ licenses.
| Project | What Nomi took from it | Their license |
|---|---|---|
| Moxin-Voice | The live transcription engine, the speech and translation workers, and the shared voice pipeline. Nomi continues that work in Backend/. | Apache-2.0 |
| Moxin-Studio | The shape of the local model manager, and the set of text API providers. | Apache-2.0 |
| OminiX-MLX | The Apple Silicon inference crates, pinned at 6aac996. The patched ASR loader in Backend/vendor/qwen3-asr-mlx/ comes from this tree. | Apache-2.0. The vendored loader is also shipped with its MIT text. |
| Qwen3-ASR | The prompt format and the way recognition output is parsed. | Apache-2.0 |
| MLX | The array framework underneath OminiX-MLX. | MIT |
Nomi’s own source is MIT. Copyright 2026 Jason Su.
Imported and vendored code keeps its original license:
Backend/, adapted from Moxin-Voice, remains Apache-2.0.Backend/vendor/qwen3-asr-mlx/ remains under the MIT and Apache-2.0 texts shipped with it.