Notes
AI: local or online
not yet reviewed by publik. It is live now; the founder has not reviewed this version yet.

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.
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)
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 telemetry, no account required.
AGPL-3.0-or-later. Fork it, ship it, improve it — just keep it open.