Notes
AI: local or online
publik verified: the founder reviewed this exact version for malware and approved it

Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.
| Model | Quality | Per 1,000 uses |
|---|---|---|
| On your computer (Ollama, 4-bit download size) | ||
| Granite 4.2 3B2.2 GB | 9 | $0 |
| Phi-4 Mini2.5 GB | 6 | $0 |
| Llama 3.1 8B4.9 GB | 7 | $0 |
| gpt-oss 20B14 GB | 9 | $0 |
| Gemma 4 31B20 GB | 19* | $0 |
| Qwen3.5 35B-A3B24 GB | 19* | $0 |
| publik API | ||
| publik-fastGLM-5.3 Flash | 42 | $1.00 |
| publik-balancedMiMo-V2.6-Pro · Turbolarp | 46 | $10.00 |
| publik-smartGPT-6 Sol | 48 | $18.00 |
Quality: Artificial Analysis Intelligence Index v4.3.2, read 2026-09-22 (publik API models 2026-09-25); * = estimated by Artificial Analysis. Sizes: the Ollama library, read 2026-09-22.
Every step written out. No terminal experience needed. Pick your setup.
Turn any lecture, PDF, or video into study notes, flashcards, quizzes, and a study chat — free, and private by default.
NitroAI is a small desktop shell around a local web app. When you open it, the app starts a tiny local server on your machine, shows it in a window, keeps it alive, and shuts it down when you quit. That local server is what does the things a plain web page can't — extracting YouTube transcripts with yt-dlp and managing the local AI runtime — so you never install those tools by hand.
You pick one on first launch (and can switch any time in Settings):
~/Library/Application Support/publik/apps/nitroai.json (mac) / %LOCALAPPDATA%\publik\apps\nitroai.json (Windows), readable only by you, and never leaves the app's local server. Builds without a publik app token (forks, npm run app without PUBLIK_APP_TOKEN) simply don't offer this option.sk-…), Anthropic (sk-ant-…) or publik (pk_…) key for the highest-quality notes, quizzes, chat, and podcast voices. The key is stored only on this computer and used only to call your provider directly. A key you enter yourself is never overwritten by the publik setup.Your notes and generated content live only on your machine (in the app's local database); you can export everything from Settings at any time.
The packaged app sends two usage events to publik: app_opened at each launch and active_session every 30 minutes while it runs. This happens in every mode, fully local included.
Each event holds the app name, the app version, the operating system, the CPU type and a random install ID, so a computer without publik API is counted anonymously. On a computer that is set up for publik API, the event also carries that install's publik key: publik then links the count to the install and, if you linked one, to your publik account.
It never holds your notes, prompts, file names or your own provider keys.
To turn it off, set DO_NOT_TRACK=1 (or PUBLIK_TELEMETRY=0) in the environment before you start NitroAI. Details: https://publikhq.com/skills/telemetry.md.
Requires Node ≥ 20.19 (Node 21.x is not supported — use 20.19+ or 22 LTS).
git clone https://github.com/Blueturboguy07/NitroAI.git
cd NitroAI
npm install
npm run dev # Vite dev server (hot reload) — includes the YouTube helper
npm run serve # build once, then serve the app + helpers at http://localhost:4180
npm run app # build, then launch the full desktop shell (Electron)
Build installers locally:
npm run dist:mac # → release/NitroAI-mac-<arch>.dmg
npm run dist:win # → release/NitroAI-Setup-Windows.exe
npm run dist:linux # → release/NitroAI-Linux-x86_64.AppImage
Or let CI do it: push a tag (git tag v0.1.0 && git push --tags) and the
release workflow builds macOS, Windows, and
Linux installers and attaches them to a GitHub Release.
Other scripts: npm test (Vitest), npm run typecheck.
src/ React app (UI + all generation/engine/ingest logic, TypeScript)
lib/engine/ provider abstraction: publik API, OpenAI, Anthropic, and local Ollama
lib/ingest/ text / url / youtube / pdf / docx / audio → normalized text
lib/generation/ notes, flashcards, quiz, podcast, chat
server/ the local server the desktop shell runs
httpServer.mjs serves the built app + /api/youtube-extract + /api/local/* + /api/publik/*
publik.mjs publik API credential (mint after consent, stored 0600, key never in the renderer)
publikProxy.mjs streaming proxy to publik API — the renderer's only door to it
ytdlp.mjs yt-dlp download + caption/audio extraction
ollama.mjs Ollama install / serve / model-pull lifecycle
electron/ the desktop shell (starts the server, opens the window)
publik-telemetry.cjs publik usage counts client (see Usage counts)
By default the release workflow produces ad-hoc-signed builds — valid, but not notarized, so users get a one-time OS warning. If you have signing certificates, add them as GitHub repo secrets (Settings → Secrets and variables → Actions) and every tagged build is automatically signed and notarized — installers then open with no warning at all. No code changes needed; the build detects the secrets.
macOS (needs a paid Apple Developer account and a Developer ID Application certificate):
| Secret | What it is |
|---|---|
CSC_LINK | Your Developer ID Application cert, exported from Keychain as a .p12, then base64-encoded: base64 -i cert.p12 | pbcopy |
CSC_KEY_PASSWORD | The password you set when exporting the .p12 |
APPLE_ID | Your Apple ID email |
APPLE_APP_SPECIFIC_PASSWORD | An app-specific password for that Apple ID (not your login password) |
APPLE_TEAM_ID | Your 10-character Team ID (Apple Developer → Membership) |
Windows (optional — needs an Authenticode code-signing certificate):
| Secret | What it is |
|---|---|
WIN_CSC_LINK | Your code-signing cert as a base64-encoded .pfx |
WIN_CSC_KEY_PASSWORD | The .pfx password |
publik API (optional — makes publik the default engine in your build):
| Secret | What it is |
|---|---|
PUBLIK_APP_TOKEN | The pat_… app token publik issues for this app. Baked into the build (extraMetadata.publik.appToken); without it the build offers only Local and your own key. It identifies the build, not the user, and publik rate-limits what it can mint. |
Then cut a release: git tag v0.1.3 && git push --tags. That's it — nothing else to configure.
React 19 · Vite · Tailwind · Electron shell · publik API (default) · Ollama (local) · OpenAI / Anthropic (your own key) · KaTeX · FSRS spaced repetition. No backend of its own, no account required. The only telemetry is the usage count: no content, and you can turn it off.
AGPL-3.0-or-later. Fork it, ship it, improve it — just keep it open.