Personal AI track · Nebius × NVIDIA Global AI Hackathon
The voice notes from home finally
remember what Maa asked.
Say a parent's Hindi voice note hides an ask at 0:15 — «send ₹5,000 before Sunday». Hearth keeps each voice as NVIDIA NanoCodec tokens — 815,423 bytes an hour, 195× smaller than 22.05 kHz 16-bit PCM — searchable in Hindi or English, and turns every ask it can quote and date into a reminder.
- no account
- real Nebius Jobs
- raw audio
HEAD→404
The original, as uploaded: 14.4 seconds of read Hindi. ▶ plays a FLAC copy of the FLEURS clip.
Hearth's raw copy of this upload, on HEAD after the round trip held and it was deleted · 00:17:12 UTC
What Hearth stores: NanoCodec's codes, drawn as they are — a row per codebook, a tick per frame, 12.5 a second.
sha256 3b1a340060924b6b… · decoded on the same Job
आम शब्दों में जब प्रबंधक अपने पूर्व सहयोगियों का नेतृत्व करना शुरू करते हैं तो दो तरह के बर्ताव सामने आते हैं स्पेक्ट्रम का एक सिरा उन लड़कों में से एक या लड़कियों में से एक बने रहने की कोशिश कर रहा है।
Machine translation: In simple terms, when managers start leading their former colleagues, two kinds of behavior emerge at opposite ends of the spectrum: some try to remain like one of the boys or girls.
Asks proposed: 0 · stamped: 0 — this sentence asks for nothing, so nothing is stamped. Search finds it by a word in Hindi or English: «colleagues» → 0:00.
One FLEURS hi_in test sentence (Google, CC BY 4.0) — a middle clip of the 20 by round-trip drift (10th of 20). Read speech, not a family note: the consented, actor-voiced family sample replaces it once it is recorded. Press play, or click either picture to seek: the waveform plays the original, the strip the kept note, and one playhead runs over both, because they are the same 14.4 seconds.
Receipts · weighed on a Nebius Job
An hour of voice weighs 815,423 bytes.
Benchmark of record: Nebius Serverless AI Job aijob-e01y33r8hyfcn7np5v on cpu-d3 4vcpu-16gb — WER on 20 FLEURS hi_in clips; bytes per hour over all 45 clips it kept (those 20, 20 held-out, 5 long notes; 1,950 s of audio), in bench/results/latest.json; the ten live keeps are in bench/results/live-latest.json. An earlier run failed the round-trip gate (+5.94 pts) before the codec input was level-normalised; it is committed beside it.
bytes of NanoCodec codes — 195× smaller than 22.05 kHz 16-bit PCM
8.74 % → 12.83 % after encode → decode, 20 FLEURS hi_in clips
upload → kept p50 394 s, p95 402 s — cold start, install and model load included
what the bucket answers, on HEAD, for Hearth's raw copy once the round trip held and it was deleted
195 vitest + 24 pytest + 26 Playwright runs (13 tests × desktop and 375 px), all passing in evidence/ci-local-2026-10-15-site.txt · $0.1345 per hour of voice (compute only, at the cpu-d3 list price; start-up, install and model load excluded) · ASR real-time factor 0.16 on 4 vCPU · codec deterministic on CPU (same input, identical codes) · held-out fleurs20b 12.42 → 14.46 %
The Job, replayed from its own record
Under seven minutes on a CPU. Then the raw audio answers 404.
The judge sample went through the same Job as an upload: a Hearth job queued, a Nebius Serverless AI Job created, the worker transcribed the note, encoded it with NanoCodec, decoded it and transcribed it again. Then the seeding script pressed “Delete original now”, so the app deleted the raw upload at once — an ordinary upload waits 24 hours — and checked it. Every line is the record's own timestamp; press Replay to watch it at ×30.
00:10:10.319 queued 00:10:10.353 Nebius job aijob-e01ncwsnrzpd08qcv3 created 00:10:33.528 Nebius job PROVISIONING 00:11:22.768 Nebius job STARTING 00:12:25.288 Nebius job IMAGE_PULLING 00:13:12.310 Nebius job STARTING 00:13:28.068 Nebius job RUNNING 00:16:58.501 report done; 2 note(s) validated note 595158880a23 · 0:14 → 3,340 B · agreement 97.7 % 00:17:12.985 HEAD raw/… → 404 · originals/… → 404
Where the time goes · medians of 10 live keeps
Time to kept is minutes, not seconds — and most of it is the Job starting and loading two models (README · Honest limits 2).
Ten keeps through the deployed app · time to kept
The same 60 s Opus note, ten times · 10 of 10 kept · queue wait p50 0.5 s · it drifts 14.7 %, over the gate, so its original is kept until deleted · each space deleted after, its listings empty.
The gate · nothing is stamped on the model's word
The model proposes. Code decides what gets stamped.
Nemotron 3 Super reads the transcript and proposes promises with a strict json_schema. Its card does not list Hindi, so nothing it says is shown until code checks it: the quote must be verbatim in the transcript, the amount is parsed from the quote's own words, and the date is resolved from the quote and the note's own date.
Stamped — the quote, the amount and the date all hold
Not stamped — code removed the model's date
Both from one live call to nvidia/nemotron-3-super-120b-a12b on Nebius Token Factory — request chatcmpl-86b6920b56793fdf, 5.8 s — over a transcript we wrote for the test (text, no audio, anchored on Monday 12 Oct). No family note is public yet, so no postmark on this page sits on a real voice; the FLEURS note above proposed nothing and got nothing. The same record is on /proof.
How it keeps
Six parts. Each one is a file in the repo.
Stored as codes, not audio
NanoCodec turns each note into 13 codebooks × 12.5 frames a second, packed 11 bits each into a .hct file with its gain and a sha256. Above: the 60-second sample note, 753 frames, 13,532 bytes.
Deleted only after a check
The Job decodes the codes and transcribes them again. At 5 % word drift or less — and no segment of 8 words or more over 30 % — the app deletes the raw upload after a 24-hour grace and shows HEAD → 404; otherwise the original stays.
The model proposes; code decides
A promise is shown only if its quote is verbatim in the transcript; the amount and the date are re-derived from that quote.
Leave with everything
Delete-all shows the storage listings come back empty. Export zips the codes, transcript, memory, the .ics and decode.py — which rebuilt the sample's audio without Hearth at 57.5 dB SNR against the Job's own decode.
One Job, on CPU
One Python file — gzipped, with a launcher script and its pinned requirements — injected into a stock python:3.11 image on cpu-d3; when the region is full, the upload waits in a queue instead of failing.
A calendar feed for reminders
A webcal feed with alarms and neutral titles, for a phone's calendar to subscribe to — not yet tested on a real phone.
Honest by design · from the README
What Hearth does not claim.
CPU speed is ours.Neither NVIDIA card states CPU support; every speed number here was measured on
— README · Honest limits 1cpu-d3.
Nemotron 3 Super's card does not list Hindi.That is why the quote gate and field gate exist: its mistakes are dropped and counted, not shown.
— README · Honest limits 3
The round trip is lossy.It adds +4.09 WER points on average; one normal-level clip got worse (13.0 % → 47.8 %). A note whose drift exceeds the gate keeps its original: 15 of the 20 clips were under the gate.
— README · Honest limits 4
“Deliberate refusals: NemoClaw, OpenShell and Hermes Agent are named in the track text and not used (the one flow needs no agent runtime and judges could not install them). Tavily is not used either: nothing in the flow needs the live web.” — README · NVIDIA + Nebius Integration
Questions a judge would ask
Before you press play.
Is that a real family's voice?
No. Every voice on this page is FLEURS read speech (Google, CC BY 4.0), labelled where it plays — “It is not a family note and is never presented as one.” The consented, actor-voiced family sample replaces it once it is recorded.
— README · See it in Action
What happens to the raw audio?
It is kept 24 hours so you can compare, then deleted — and Hearth shows you the storage answering 404. If the round trip changes more than 5 % of the words (or more than 30 % of any segment of 8 words or more), the original is kept instead, and you can delete it yourself. Turn deletion off and originals stay in your space, counted as stored audio.
— the app's first screen · src/components/app/Agree.tsx · src/lib/pipeline.ts
What does Token Factory see — and keep?
Transcript text only, never audio. Token Factory may keep prompts and outputs for Speculative Decoding (stored in Finland, never used for training) unless Zero Data Retention is confirmed for the organisation; until then, non-sample spaces see this sentence and must opt in before any transcript text is sent.
— README · Honest limits 7
Why CPU — and why does a keep take minutes?
Both NVIDIA speech models run on cpu-d3 (4 vCPU): the ASR at a real-time factor of 0.16, the codec round trip at 0.63. Neither card states CPU support, so every speed number here is ours. Most of the ~6.6 minutes is the Job starting (≈164 s to a running container in the benchmark Job) and loading two models; the work itself is about a minute for a 60 s note.
— README · Honest limits 1–2 · bench/results/latest.json
Why no agent runtime — NemoClaw, OpenShell, Hermes Agent?
They are named in the track text and deliberately not used: the one flow — forward, keep, remember, find, delete or export — needs no agent runtime, and judges could not install them. Nemotron 3 Super is called with a strict json_schema, and code checks every proposal before anything is shown.
— README · NVIDIA + Nebius Integration
Can the codec change what she said?
Yes — it is lossy. Across 20 FLEURS hi_in clips the round trip adds 4.09 WER points (8.74 → 12.83 %), one normal-level clip got worse (13.0 % → 47.8 %), and a very quiet one went 38.9 % → 55.6 %. That is why the drift gate keeps drifting originals, and why every reminder says “as transcribed” and plays its source.
— README · Honest limits 4 · FEEDBACK.md §9



