v1.3 live in de App Store (Stemisolatie-hint) · de hefboom in lawaai is mic-richting (gemeten). Vers (8 aug): Apple honoreerde het Parakeet-model-request — CoreAI-Parakeet staat klaargezet als vierde engine in V·Switch, wachtend op de iOS 27-release (~september). Veldfeedback juli opende twee nieuwe publieken: accent-barrière (Engels met Indiaas accent, fonetisch gerenderd) en ouder van een doof kind. De engine-vraag — verdienen de model-engines hun accu + hitte terug? — zou bij Orbit (25 jul) beslist worden, maar er is geen meting gelogd; de beslissing staat nog open.
apple/coreai-models is "closed as completed" via PR #136 — een échte implementatie: export-recipe (models/parakeet/), Swift-runtime (CoreAISpeech) en parity-tests. Zelfde gewichten als de huidige V·Parakeet-engine, dus geen nauwkeurigheidswinst verwacht — de winst zit in de runtime: AOT-compilatie + prewarm raken precies de hardste grens, de klaarzet-tijd (23 jun). Beperking (README): de export is full-utterance, geen streaming-encoder — dus exact het bewezen re-transcribe-patroon. Bijvangst: CoreAISpeech draait óók Whisper-bundles → mogelijk de fix voor de definitieve iPad-Whisper-fail. Blocker: het package eist iOS/macOS 27; toestellen staan op 26.5. Besluit 8 aug: géén beta's — wachten op de release. Het draaiboek is af (vendor-aanpak, fp16-export met 24s-venster, manager-blauwdruk, meetplan klaarzet-tijd/geheugen/accu); de bouw wordt in september een korte sessie. Eén open vraag: de export-smoke-test strandde op een netwerk-block (Little Snitch), dus of de export op macOS 26 werkt is nog onbevestigd.[debug…]-regels. Weerlegd via verificatie: de live App Store-1.3 (READY_FOR_SALE, build 1780443185) bevat de strip-fix — geüpload 7 min ná de fix-commit, logt dus schoon. Les: voor "wat staat live" is ASC appStoreVersions de bron, niet build-status (= TestFlight; die misleidde mid-onderzoek met de vervuilde pre-fix-build die nooit naar de App Store ging). Het echte risico voor notitieboekje-gebruik = de persist-gap: Versta schrijft de transcript alleen weg bij stop/reset, niet bij pause() — en naar de achtergrond gaan/vergrendelen roept pause() aan → tekst kan verloren gaan. Voorgestelde (nog niet gebouwde) fix: persist-on-pause. Persist-gap in de Onderzoek-tab →…exp.switch) zodat de App-Store-Versta ongemoeid blijft. Fase A (de teardown zelf) bewezen: 64 engine-wissels, 0 WARN. Fase B (8/9 jun) af: instellingenscherm, één model per engine (Whisper 632MB — kleinere modellen waardeloos, grotere onbruikbaar traag), en het belangrijkste — een Apple-fallback met naadloze auto-switch + tekstbehoud (verbergt de trage model-compile achter een meteen werkende app), plus de hele cosmetische ronde (statusbalk onderin, tekst-rotatie-toggle). Fase C nog open: model-opslag-sectie + wis-functie (verborgen modellen stapelen in App Support, niet via Bestanden wisbaar → FileManager.removeItem). Engine-matrix in de Onderzoek-tab →AVAudioSession-opties (.mixWithOthers / A2DP-output behouden) die de mic openen zónder de output te kappen. NB — andere bug dan de "BT wordt mic-input"-kwestie (8 jun bewust níét gefixt: niet tegen iOS-default in vechten). (2) Interruption-handling (H3, code-review 10 jun): bij een binnenkomend gesprek/Siri lijkt de app te luisteren maar is doof — voor de doelgroep de ernstigste stille faalmodus, een aparte sessie waard. De code-review (subagent over heel V·Switch, 10 jun) fixte K1/K2/H1/H2/H6; nog open op severity: H3, H4, M2-M4 (o.a. geen herstel bij route-change/RØDE uitpluggen), M1, L1-L4.appStoreVersions → READY_FOR_SALE, build 1780443185). Eén nieuwe feature: een niet-blokkerende, eenmalig wegklikbare kaart die de gebruiker naar Stemisolatie (Apple's Voice Isolation) leidt voor beter verstaan in lawaai, plus een groene bevestiging als 't aan staat. De app blijft meteen bruikbaar — geen onboarding-flow. Build debug-vrij (#if !DEBUG strip-fix, commit 346aac5), 8 screenshots, metadata van 1.2 overgenomen. Onderbouwd door het WER-onderzoek — Stemisolatie is de enige gratis interne-mic-winst tegen lawaai. Open de Onderzoek-tab →appStoreVersions). Niet-blokkerende hint naar Voice Isolation + groene status als 't aan staat. Onderbouwd door het WER-onderzoek. Build 1780443185 (debug-vrij → logt schoon, ook geverifieerd op de live build). Bouwde voort op approved 1.2.pause() — en naar de achtergrond gaan/vergrendelen roept pause() aan → tekstverlies. Voorstel: persist-on-pause. Afgebakende, hoog-nut fix; nog niet gebouwd.task: .translate).CoreAISpeech-runtime via PR #136 (7 aug). Zelfde gewichten als V·Parakeet; de inzet is de runtime-winst op klaarzet-tijd (AOT-compile + prewarm). Draaiboek af (vendoren, fp16, 24s-venster, meetplan); wacht op de iOS 27-release — besluit 8 aug: geen beta's. Whisper-via-CoreAI lift mee als mogelijke iPad-fix.V·Switch maakt dit een eerlijke A/B: dezelfde audio, live wisselen tussen Apple / Whisper / Parakeet. In stilte zijn Whisper en Parakeet Apple-vergelijkbaar of beter — maar het hele punt van een zwaardere engine is lawaai, en daar tegenover staan twee kosten: (1) accu + hitte (de model-engines compileren bij first-run en trekken bij continu gebruik de accu hard leeg; Apple is veel lichter), (2) latency (Parakeet/Whisper doen pseudo-streaming; Apple's SpeechAnalyzer is een echte streaming-recognizer). De gekaderde test: lees hetzelfde 15-zinnen-dictee in babble op de interne mic, vergelijk de WER met Apple's 13,3% én meet stroomverbruik + warmte per engine (~10 min continu). Onder 13,3% mét aanvaardbare accu → echt voordeel, serieuze lawaai-modus. Anders → Apple-default blijft, model-engines als opt-in. De beslissende meting stond gepland voor Orbit (25 jul, met Bert, RØDE-richtmic + USB-verlengsnoer) maar is er niet van gekomen — het protocol ligt klaar voor de eerstvolgende gelegenheid, en de thuis-pre-test in Genelecs-babble kan zonder festival. V·Nemotron is al afgevallen (8 jun): streaming verliest van re-transcribe, ook op de beste tier. De FluidVoice-code-lezing (23 jun) bevestigt dit extern: hun snelle Parakeet is Engels-only, hun NL-pad is re-transcribe net als Versta — geen knop voor streaming-NL. FluidVoice-analyse →
Het WER-onderzoek liet geen twijfel: een externe richtmic halveert de fout (6,0% vs 13,3% intern). Drie routes: (a) een externe USB-C richtmic netjes ondersteunen + de gebruiker erheen coachen, (b) onderzoeken of de interne 4-mic-array softwarematig directioneel kan (setPreferredPolarPattern) — maar de cardioïde-test faalde hard (86%, verkeerde mic-zijde + kaal signaal), (c) accepteren dat dit hardware-afhankelijk is en het in de founder-story/marketing verwerken. Welke?
Mega-ASR-klasse engines (1.7B Qwen + LoRA op GPU) halen ~30% relatieve WER-winst in ruis, maar draaien niet on-device. Een knop "moeilijke omgeving" die audio naar een GPU-endpoint stuurt zou de bodem verschuiven, maar kost privacy + latency + geld en breekt de offline-belofte. Serieus apart bouwproject, geen middagklus. Eerst de gap meten — de benchmark-dataset is bruikbaar als eval zónder Mega-ASR te draaien.
Beslissing 13 mei: klein default-model (Whisper-tiny ~150MB of -small ~400MB quantized), Moshi-experiment bevestigde haalbaarheid. Versta draait nu op Apple's SFSpeechRecognizer (legacy-pad; de NL-opvolger is nog absent). Open: tiny of small als default? Past binnen WhisperKit of vereist refactor? In een v1.x of pas de v2-pivot? Vertaling als bijvangst.
Tycho 9 mei opende de tweede pijl (jij praat → ander leest) als product. Drie use-cases zitten in dezelfde knop: instructie, boodschap, ontvangen. Eigen knop / tab / landscape, of pinch-to-zoom als brug (groot zonder modus-omschakeling)? De ontvangen-modus bij 100 dB is nu fysiek verklaard (input-niveau, niet engine) — een richtmic is de echte fix.
Olivia 7 mei: huidige tekst "veel te lang" en AI slop. v1.3 nam de 1.2-beschrijving ongewijzigd over (alleen "Wat is nieuw" is nieuw), dus dit blijft open. Korter, persoonlijker, niet-technisch. Stem-referentie: reference_versta_anekdote + feedback_geen_em_dash.
De eval-rig reproduceerde op 14 sep in twintig seconden per run wat ruim vier maanden de stille-resume-bug heette. Elke stem apart komt bijna volledig op het scherm (92 en 96 procent), maar om en om valt de tweede stem weg: streng geteld 0 van 25 woorden, zonder fout of herstart en met hooguit 0,2 seconde pauze. De stilte-verklaringen (versterking, tasklimiet) vallen daarmee af voor dit verschijnsel; de volgende toets is een verse herkenner bij elke stemwissel. En iOS 27 voegt geen Nederlands toe aan Apple's nieuwe herkenner, dus de oude blijft.
Op de Kennisdag DFNA9 (12 sep) live gezien bij de stand van Even Realities: de G2 ondertitelt goed in een zaal, maar is niet getest in echt lawaai, en daarvoor kwam hij juist in beeld. In lawaai beslist de microfoon, niet het scherm, dus de koop hangt aan een lawaaitest met bril, telefoon en RØDE binnen de bedenktijd (t-VER-49). Daarvoor staat nu een testkit klaar: de termijn per koopkanaal, een woordfout-teller op Versta's eigen voorleestekst, een vertragingsmeter en een oordeel per situatie.
Het model-request bij Apple (issue #7, ingediend 10 jun) is gehonoreerd via PR #136: export-recipe + CoreAISpeech Swift-runtime, mét Whisper-bundle-ondersteuning. Code-verkenning van 8 aug leverde de volledige integratie-blauwdruk op: vierde engine-case naast Apple/Whisper/Parakeet, runtime vendoren (het package eist iOS 27, Versta's target is 17), manager als kopie-structuur van ParakeetSpeechManager met dezelfde re-transcribe-loop, eigen model-hosting (geen FluidAudio-ModelHub voor deze bundle), fp16-export met statisch 24s-venster. Het meetplan beslist in september of de engine blijft: klaarzet-tijd vs FluidAudio-Parakeet (526 ms warm), encode-tijd per tick, geheugenpiek, accu/warmte, A/B-kwaliteit. Bron: research/2026-08-08 CoreAI-Parakeet voorbereiding.md.
De tweewekelijkse engine-radar leverde voor het eerst niets op dat de lat haalt: uitsluitend format-conversies van al-beoordeelde families (Nemotron-reuploads, Parakeet-kwantisaties, Voxtral boven de klaarzet-grens, Moonshine nog steeds EN-only). Apple's SpeechAnalyzer telt nog altijd 30 locales zonder nl — vierde meetpunt op rij zonder enige beweging, dus productie blijft terecht op de oude SFSpeechRecognizer. Wel open uit een eerder venster: de FluidAudio v0.15.5-bump (ModelHub-herbouw, breaking change op de download-laag) — raakt de model-download-UX van V·Parakeet/V·Switch en zou het corrupt-model-vangnet structureel maken.
Twee publieken die niet in het ontwerp zaten. Mia gebruikt Versta voor Engels met Indiaas accent — het NL-model rendert fonetisch en dat is genoeg; derde use-case naast lawaai en slechthorendheid (en-IN-keuze bewust niet ingepland, turven bij meer meldingen). Hector (dove zoon) installeerde ter plekke en zag direct de stille-resume-haper — herbevestiging in het veld, en de les dat die haper vooral een demo-/first-impression-kost is. De founder-story kreeg een testimonial-sectie (Mia-boog).
De mondkap-met-mic uit een Twitter-draad bleek een volwassen categorie (court reporters; Talk Tech, Shiftall Mutalk 2, Skyted). Passieve isolatie 20-25 dB > cardioïde richtwerking 6-15 dB — akoestisch de sterkste optie in het hardware-spectrum, en bedraad USB omzeilt de iOS-BT-degradatie volledig. Maar het masker moet op de mond van de spreker (de vreemde) → sociaal onhaalbaar voor het kern-scenario. Geen aankoop; heractiveren bij een Duo-scenario met vaste partner of eigen dictatie in lawaai.
De code van FluidVoice (een macOS-dicteer-app op dezelfde Parakeet/FluidAudio-stack) diep gelezen om de ~15-jun research-reminder te beantwoorden: bestaat er een "knop" die streaming-NL alsnog goed maakt? Nee. FluidVoice's near-instant pad is Engels-only EOU; zijn NL-pad is re-transcribe — identiek aan V·Parakeet. Dat sluit het Nemotron-streaming-spoor definitief af (geen gratis snelheidswinst voor NL). Eén techniek is wél de moeite: een fast-preview-cache die de dure finale decode overslaat als de live-tekst al compleet genoeg is. Plus de strategische bevestiging: een rivaal die de engine centraal stelt kan dat alleen omdat hij in een hoog-SNR-regime leeft — mic/SNR blijft het eerste front, de engine het tweede. Volledige analyse in de Onderzoek-tab →
Een vriend meldt dat zijn moeder — na jaren weer een iPhone, mede dankzij Versta — de app als notitieboekje wil gebruiken en de transcript-logs echt wil lezen. Onno's aanname: de App Store-build schrijft nog [debug…]-regels. Onafhankelijk geverifieerd i.p.v. de premisse napraten: code op main (= v1.3) strijkt alle [debug…-regels in release (#if !DEBUG, commit 346aac5); de live App Store-versie is via ASC appStoreVersions opgezocht → READY_FOR_SALE, build 1780443185, geüpload 3 jun 01:35 = 7 min ná de strip-fix → de live build bevat de fix. De vervuilde pre-fix-build (1780441193, 00:59) ging alléén naar TestFlight, nooit naar de App Store — build-status toonde die en misleidde mid-onderzoek; appStoreVersions gaf de echte productie-release. Les: voor "wat staat live in de App Store" is appStoreVersions (READY_FOR_SALE) de bron, niet build-status (= TestFlight). Kanttekening: v1.1/v1.2 stripten niet → een verse 1.3-install (de moeder) start schoon, maar meegesleepte oude logs houden hun [debug…]-regels. Geen re-ship nodig. Het echte risico voor notitieboekje-gebruik = de persist-gap (tekst weg bij wegswitchen/vergrendelen zonder stop) → voorstel persist-on-pause.
Een los maar verwant spoor naast de tekst-route: de stem van iemand op de dansvloer als geluid in je oren krijgen. Twee researchsporen + Grok convergeerden — latency-keten ~150-250 ms (MFi-Bluetooth domineert, non-issue voor mond-aan-oor zonder lipbeeld), nabijheid/mic-richting > software, Roger bewezen winnaar, DeepFilterNet geen wonder in muziek. Kantelend feit (Onno's eigen scherm): Live Listen heeft op iOS 26 nu zélf een stemisolatie-toggle én (Engelse) live-transcriptie — dat corrigeert de eerdere high-confidence-claim (van mij + Grok) dat Voice Isolation niet in Live Listen te forceren was (gold voor oudere iOS). Recept: Live Listen aan, stemisolatie aan, Oticon Intent-mics dicht via de Companion-app, iPhone-mic bij de mond. Besluit: geen app bouwen zolang de Apple-stack volstaat; enige open vraag is stemisolatie-kwaliteit op échte ~100 dB → thuis (Genelecs-babble) + Orbit 25 juli. Plus een "praat hier"-lockscreen gemaakt (toon-aan-vreemde). Toestel-correctie verankerd: Onno draagt ~1 jaar Oticon Intent (de wiki leunde op verouderde Phonak-reviews).
Code-review (subagent over heel V·Switch, 10 jun): K1/K2/H1/H2/H6 gefixt; nog open op severity — H3 interruption-handling (binnenkomend gesprek/Siri → app lijkt te luisteren maar is doof; voor de doelgroep de ernstigste stille faalmodus), H4, M2-M4 (o.a. geen herstel bij route-change/RØDE uitpluggen, WhisperKit-buffer groeit onbegrensd), M1, L1-L4. Hoorapparaat-mic + in-oor-spraak (10 jun, North-Star): Tycho's "BT wordt mic"-bug geherframed tot mogelijk kern-feature — op de dansvloer praat men tóch al in je oor, en de hoorapparaat-mic zit precies dáár → closeness maximaal (mond op ~5 cm vs telefoon op armlengte ≈ 15-20 dB SNR-winst). Werkt al in productie zonder code (.allowBluetoothHFP aan). Thuis-pre-test (15-zinnen-dictee in babble, voorlezer op ~5 cm van het rechteroor) beslist vóór Orbit of dit kern-feature of leuke theorie is. Versta Duo (PoC werkt 11 jun): aparte app — elke telefoon transcribeert eigen near-field mic en relayt alleen tékst via MultipeerConnectivity. Eigen cockpit: versta-duo.html. Apple Core AI (10 jun, WWDC 2026): nieuw framework vervangt Core ML, officiële Whisper large-v3-turbo + AOT-compilatie (= instant load, raakt cold-start én fallback-noodzaak); Parakeet-v3 model-request ingediend (issue #7). Vereist iOS 27 → v3-spoor.
De losse forks (V·Apple, V·Whisper, V·Parakeet) zijn samengebracht tot één engine-agnostische app op branch feature/engine-switch-teardown (bouwt als V·Switch, …exp.switch; de App-Store-Versta blijft ongemoeid). Fase A — de teardown zelf: engine als verwisselbaar component achter de pijplijn, bewezen met 64 live wissels en 0 WARN. Fase B (8/9 jun) — uitgebouwd instellingenscherm met een tandwiel in de onderbalk; één model per engine (Whisper 632MB; submenu's eruit — kleinere modellen waardeloos, grotere onbruikbaar traag); een Apple-fallback met naadloze auto-switch + tekstbehoud die de trage model-compile verbergt achter een meteen werkende app; plus de cosmetische ronde (statusbalk onderin, tekst-rotatie-toggle). Onno: "naadloos, fantastisch". Fase C nog open: model-opslag-sectie + wis-functie (FileManager.removeItem voor de verborgen modellen in App Support). Naast de UX-winst dichtte dit een open vraag: de trage dev-loop-compile bleek grotendeels een debug-artefact (Xcode/devicectl-installs nemen sowieso een uncached ANE-pad) — of een échte App Store-update de compile-cache behoudt is alleen via TestFlight te meten.
NVIDIA's Nemotron-3.5-ASR-Streaming (uitgebracht 6 jun) leek de heilige graal: échte cache-aware streaming, meertalig incl. NL, on-device via dezelfde FluidAudio-SDK als Parakeet — lage latency (Apple's enige voordeel) mét NL. In één avond gebouwd (…exp.nemotron). Maar Onno's test (8 jun): slecht in stilte — verhaspelt, mist losse woorden én hele zinnen, vooral na een pauze. Slechter dan Parakeet/Whisper/Apple. Zelfs op de beste tier (1120ms + flush-op-pauze + warmup) geen verbetering. Gecontroleerde conclusie: V·Parakeet (NVIDIA, 0.6b, FluidAudio, NL, re-transcribe) = goed; V·Nemotron (zelfde leverancier/grootte/SDK/taal, streaming) = slecht → de enige variabele is streaming-decoding, dat kost de kwaliteit (minder context per decode). Onafhankelijk bevestigd door Joel (getmoshi.app), die Nemotron in batch inzet, niet streaming. Geparkeerd, niet weggegooid: de engine blijft herbruikbaar zodra er een beter streaming-NL-model komt; research-reminder ~15 jun naar FluidAudio-streaming-best-practices (Onno's instinct: een 0.6b dat hele zinnen mist ruikt naar een fixbare config).
Onno ontdekte Parakeet-0.6b-v3 (NVIDIA) in de Moshi-app — meertalig, NL ✓, on-device. In één avond/nacht een experimentele Versta-fork gebouwd (~/Developer/useful-apps/Versta-Parakeet/, "V·Parakeet") met de spraak-engine vervangen door Parakeet-TDT-0.6b-v3, volledig on-device CoreML/ANE via FluidAudio — geen SFSpeech-permissie meer nodig, alleen microfoon. Live iteratief: Onno testte elke build op de iPhone, ik analyseerde de device-logs. Het kantelpunt (it.5): wég van de sliding-window naar een re-transcribe-loop met commit-op-stabiliteit + geforceerd Nederlands (language: .dutch) + de #594-fixes — dat haalde de koude-inzet-verliezen, het Cyrillisch én de hoge latency in één klap weg. Daarna een stilte-poort (energie-gate) tegen ruis-hallucinatie, laad-UX en persistente tuning. Resultaat in stilte: ~90% accuraat, "vergelijkbaarder met het Apple-model". Aanbevolen config: interval 0,4s / commit 1,6s / silenceFloor 0,02. Eén open vraag: de lawaai-test vs Apple. Onderzoek-tab →
Feature: Stemisolatie-hint — niet-blokkerende, eenmalig wegklikbare kaart die de gebruiker naar Voice Isolation leidt, plus groene status als 't aan staat. Tikken opent de systeem-mic-modus-UI (showSystemUserInterface(.microphoneModes)); de app leest activeMicrophoneMode voor de bevestiging. Geen wijziging aan spraak-logica, privacy of dataflow. Build 1780443185, 8 screenshots (01-08), export-compliance OK → ingediend, en inmiddels goedgekeurd en live (geverifieerd 15 jun via ASC: READY_FOR_SALE).
Productie-app had UIFileSharingEnabled → gebruikers zagen [debug-modern]-regels in versta-log.txt. appendToLog (beide managers) strijkt nu [debug-regels weg in release-builds (#if !DEBUG); dev-builds houden ze. Op iPhone geverifieerd (Release-build → verse log: alleen transcripten, 0 debug-regels), commit 346aac5. De lopende 1.3-submissie geannuleerd en met de schone build opnieuw ingediend. Versie-hygiëne-bug ook gefixt: Info.plist verwees naar hardcoded versie/build (kostte eerder een geweigerde upload) → nu $(MARKETING_VERSION)/$(CURRENT_PROJECT_VERSION).
Eigen meet-app (~/Developer/useful-apps/Versta-Lab/): live wisselen tussen strategieën onder identieke audio-pijplijn + Diagnostics-HUD (hartslag, mic-niveau dBFS, klapper-maat, resume-latency, resume word loss, mic-route). Daaroverheen Onno's idee, het kantelpunt: 15 vaste NL-zinnen voorlezen in babble (via 2 Genelecs) en de WER per blok/conditie meten. Geen gevoel meer, maar cijfers. Volledige matrix in de Onderzoek-tab →
Apple's SFSpeechRecognizer on-device gebenchmarkt op 2500 EN-samples (Voices-in-the-Wild-Bench / NOIZEUS) → 30,7% WER totaal, echo/galm veruit het ergst (47-66%). Tooling buiten de vault in ~/Developer/versta-benchmarks/. De wekelijkse Apple-NL-watcher bevestigt: het NL-spraakmodel (Live Captions + SpeechTranscriber) is nog steeds absent — productie draait op de oude recognizer.
Twee hypotheses bewust níét als bevinding verkocht: (1) "AGC-uit helpt" — schone meting weerlegt het: WER gelijk (uit 19,3% / aan 18,0%), stabiliteit juist béter mét AGC (9× rood vs 19×). De eerdere indruk was een meetartefact. (2) Interne cardioïde (setPreferredPolarPattern(.cardioid)) = 86,0% WER — activeert de voorkant-mic (schermzijde) i.p.v. de onderkant én sluit Apple's voice-processing uit. Interne software-richting = harde doodlopende weg.
Populaire arXiv-paper (Tsinghua, Apache 2.0): ASR getraind op 2,4M ruis-samples, ~30% relatieve WER-winst in moeilijke akoestiek. Niet als Versta-engine — het is 1.7B Qwen + LoRA onder vLLM op een GPU, geen on-device drop-in. Wél bruikbaar: de benchmark-dataset als eval (gap meten zónder het model te draaien) en als blauwdruk voor een eventuele cloud-fallback. Dit was de aanleiding die de hele meet-sessie startte.
De versta-improver launchd-job (elke nacht 03:00 een variant op de iPhone, sinds 18 mei) is uitgeschakeld; experiment-bord + runs naar _archief/. Reden: het WER-onderzoek beantwoordde precies de vragen die de pijplijn najoeg (welke stilte-strategie wint? → geen) en bewees ze overbodig. De één gemergde winst blijft: confidence-weg (meter uit de UI). De experiment-dashboard-snapshot blijft als historisch overzicht staan.
Op of vlakbij dansvloer (~100 dB) sprak Tycho complimentjes in over wat de DJ deed; liet de tekst aan de DJ lezen. Spontane positieve reacties van vreemden, geen prompt vooraf. Tweede gebruiksmodus die toevallig in dezelfde knop zit: jij praat → ander leest (mic op 5-10 cm, ontvanger heeft geen audio nodig — omzeilt het ASR-noise-probleem volledig). 5e onafhankelijke wow-validatie. Open beslissing: first-class maken of in pinch-to-zoom absorberen?
Launch-post 6 mei: 2.595 impressies, 71 reacties, ~20 echte comments, 19 installs op 6 mei. Founder-story 12 mei: duizenden views, ~90 emoji's, ~20 reacties. Solide compounding-bouwsteen — bewijst dat WhatsApp + LinkedIn + App Store-combo lading geeft. Pre-mortem revisie #6 afgehandeld.
v1.1 goedgekeurd en live (175 territories). Diezelfde dag, vooraan bij Chef'Special: jongeren met prima gehoor reageerden enthousiast en installeerden de app meteen zelf. Mainstream-appeal bevestigd. Bug-signaal: gebruikers praten niet dichtbij genoeg → mic-afstand-UX (nu fysiek verklaard door het WER-onderzoek).
Submission was clean. Eerste v1.1 ging op 5 mei live (binnen ~1u CDN), v1.2 volgde erna. Cross-device sync werd niet meegenomen in v1.2 — verschoven naar v1.x-Inbox als gevolg van Olivia's rooms-uitbreiding (multi-peer i.p.v. 1-op-1).
Lessen voor v1.3: Notes for Reviewer met preempt op 4.2 + screenshots-disclosure + UGC-clarification was doorslaggevend. Industry-baseline van ~60% first-time approval gehaald op eerste poging.
Goedgekeurd en live in de App Store (geverifieerd 15 jun via ASC appStoreVersions → READY_FOR_SALE). Eén nieuwe feature t.o.v. 1.2: een niet-blokkerende, eenmalig wegklikbare kaart die de gebruiker naar Stemisolatie (Apple's Voice Isolation) leidt, plus een subtiele groene bevestiging onderaan als 't actief is. App blijft meteen bruikbaar (geen onboarding). Description/keywords ongewijzigd van 1.2 overgenomen; alleen "Wat is nieuw" + 3 nieuwe screenshots (06-08, Stemisolatie-flow).
Getriggerd door notitieboekje-gebruik (een gebruiker wil de transcript-logs lézen). Aanname "App Store-build schrijft nog [debug…]-regels" weerlegd: code op main strijkt ze in release (#if !DEBUG, commit 346aac5) en de live versie is build 1780443185, geüpload 7 min ná die fix. De vervuilde pre-fix-build 1780441193 ging alléén naar TestFlight. Les: voor "wat staat live" is appStoreVersions (READY_FOR_SALE) de bron — build-status toont de TestFlight-state en wees mid-onderzoek de verkeerde build aan. Een verse 1.3-install start schoon; alleen meegesleepte logs van v1.1/v1.2 (die stripten niet) houden oude regels. Geen re-ship nodig. Echte open issue voor notitieboekje-gebruik = de persist-gap (zie Status / Onderzoek).
appendToLog (beide managers) strijkt [debug-regels weg in release-builds; op iPhone geverifieerd (verse versta-log.txt = alleen transcripten). Commit 346aac5, schone build opnieuw ingediend.$(MARKETING_VERSION)/$(CURRENT_PROJECT_VERSION)), voorkomt de eerder geweigerde upload.reference_versta_anekdote + feedback_geen_em_dash.Olivia 7 mei: na korte stilte begint Versta vaak niet of pas na 1-2 zinnen. Ook in Apple Notes dictation reproduceerbaar. Na drie reproductie-tests + log-analyse: niet sluimer, maar AGC-recalibratie (Automatic Gain Control, onderdeel iOS Voice Processing I/O Unit).
Mogelijk conflict in huidige config: AVAudioSession.mode = .measurement (minimaliseert audio-processing) + setVoiceProcessingEnabled(true) (max audio-processing). Apple-docs vaag; in praktijk: mode wint waarschijnlijk → effectief geen VP. Mogelijk draaien we al zonder AGC zonder het te weten.
Update 3 jun — gemeten: de ground-truth-WER weerlegt de AGC-stilte-hypothese grotendeels. AGC-uit verbetert de WER niet (uit 19,3% / aan 18,0%) en de resume-"bug" kost weinig woorden (blok B 4,3%). De multi-speaker-zwakte blijft reëel, maar de échte hefboom bleek mic-richting, niet de gain-laag. Volledige matrix in Onderzoek →
De 4-modi debug-build van 9 mei gaf richting, maar werd uiteindelijk overgenomen door de nachtelijke experiment-pijplijn (sinds 18 mei): specifieke ingrepen op het probleem in plaats van log-vergelijkingen tussen audio-configs.
.measurement zonder VP?Aanvullend spoor — hardware: RØDE VideoMic Me-C+ binnen 12 mei. JBL PartyBox vervolg-thuistest staat klaar (vergelijking met 4 mei interne-mic-baseline). Als hardware-mic het 100 dB-probleem op zichzelf oplost, verschuift het AGC-spoor naar v2/Whisper-fork i.p.v. nog meer iOS-trucs.
Afloop 2-3 jun: dit AGC-spoor is afgesloten. De nachtelijke experiment-pijplijn is opgeheven en vervangen door een ground-truth-WER-meting. Uitkomst: geen van deze sporen (chain/timer/keepalive/vad/gate/AEC) verslaat Apple's Baseline; de hardware-mic deed dat wél (13,3% → 6,0%). Zie Onderzoek →
versta-log.txt wacht op uitlezen via xcrun devicectl.Accuracy + batterijverbruik in bass-zware setting getest. Resultaat: research/lawaai-test-2026-05-04.md in vault.
Alle externe + interne feedback nu chronologisch in één log: _Projects/Versta/feedback-log.md. Categorieën: bug · ui · feature · wow · use-case. Status-flow: new → triaged → scheduled (vX.Y) → done. Triage-ritueel zondagavond. Alleen scheduled items met versie-target krijgen een Kanban-kaart.
Dit onderzoek draaide de eigen aanpak om. We begonnen met "los de stilte-resume-bug op in software" (vier nachtelijke varianten) en eindigden met het gemeten bewijs dat dat het verkeerde probleem was. Het kantelpunt was Onno's idee: stop met op gevoel oordelen, lees een vaste tekst voor en bereken de WER. De aanleiding was een inbox-notitie over een ruis-ASR-paper (Mega-ASR); de uitkomst is een verdedigbare, ingediende App Store-feature.
Eén app (~/Developer/useful-apps/Versta-Lab/, bundle com.terwisscha.verstalab) waarin je live wisselt tussen strategieën onder een identieke audio-pijplijn, met een HUD die meet i.p.v. raadt:
Drie blokken met bewuste verstoringen: blok A schone basislijn (zin 1-5), blok B na een stilte-pauze van ~8s (meet resume), blok C na de mic even naar de speakers te draaien (meet mic-vergrendeling op ruis). Per conditie één opstelling, "Opnieuw luisteren" tussendoor, ruis constant via 2 Genelecs (voice_babble). WER = (vervangingen + weglatingen + invoegingen) ÷ referentiewoorden. Lager is beter — 0% perfect, 100% alles fout.
Apple's SFSpeechRecognizer on-device gebenchmarkt op 2500 EN-samples (Voices-in-the-Wild-Bench / NOIZEUS): 30,7% WER totaal, echo/galm veruit het ergst (47-66%). Dit is de bodem waar mic-richting niet onderuit komt — die verschuift alleen met een betere engine. De NL-opvolger van Apple (SpeechTranscriber) is nog steeds absent (wekelijkse watcher), dus productie draait op de oude recognizer. Tooling: ~/Developer/versta-benchmarks/.
De paper die de sessie startte (Tsinghua, Apache 2.0): ASR getraind op 2,4M ruis-samples, ~30% relatieve WER-winst in moeilijke akoestiek. Maar het is 1.7B Qwen + LoRA onder vLLM op een GPU (min. 8GB) — geen drop-in voor on-device Versta. Relevantie zit elders: (1) de benchmark-dataset als eval om de huidige gap te meten zónder het model te draaien, (2) als blauwdruk voor een optionele cloud "ruis-modus" — die de offline/privacy-belofte breekt, dus een serieus apart bouwproject.
Als mic-richting de bodem niet onderuit haalt, blijft één hefboom over: een betere engine. V·Parakeet is dat experiment, nu gebouwd. Een Versta-fork waarin Apple's recognizer vervangen is door NVIDIA Parakeet-TDT-0.6b-v3 (~600-700MB, NL + 24 EU-talen, auto-detect), volledig on-device via FluidAudio (CoreML/ANE, gepind v0.15.0). Model wordt bij eerste start gedownload; daarna 100% lokaal, alleen mic-permissie — geen SFSpeech meer.
language: .dutch-hint (geen Cyrillisch meer) + de #594-fixes (melChunkContext:false, dualDecodeArbitration:true) tegen dropped clauses + Engels-drift. Koude-inzet-verlies na stilte verdween (zin 1/7/11 weer perfect).Zolang elke engine in een eigen fork zat, was er geen eerlijke vergelijking en geen product. V·Switch lost dat op: de productie-Versta is opengebroken zodat de engine een verwisselbaar component wordt achter één gedeelde audio-pijplijn. Je kiest live via een tandwiel in de onderbalk. Gebouwd als aparte app (…exp.switch, branch feature/engine-switch-teardown) zodat de App-Store-Versta ongemoeid blijft.
FileManager.removeItem. Afgebakende bouwklus.SFSpeechRecognizer, debug-build van productie (pullbaar, mét logging) voor een eerlijke vergelijking. Echte streaming-recognizer → laagste latency, lichtste accu. De maatstaf: 13,3% WER intern in babble.Xcode-debug-meting (9 jun): de eerste ANE-compile van een 600MB-model piekt op ~2,33 GB geheugen (Whisper, 17 Pro Max). Dat overschrijdt de jetsam-limiet (~2,0-2,2 GB) van 4GB-toestellen (SE 2/3, 11, 12/12 mini, 13 mini) → daar verwacht ik een harde jetsam-crash bij de eerste compile. Op 12GB-toestellen geen geheugenprobleem (hooguit een zeldzame transiënte watchdog onder verzadiging). De compile draait correct async (main idle, queue com.apple.anef.p4) → geen code-fix, de mitigatie is een device-capability-gate: zware engines verbergen op low-RAM-toestellen. Parakeet is lichter (483MB-model → lagere piek, nog schoon te meten). NB: de ANE-compile wordt na de eerste keer naar schijf gecached → op een echte install is de piek een eenmalige first-use-kost. Dit weegt mee in de Apple-vs-model-beslissing: de model-engines zijn niet alleen zwaarder voor accu/hitte, maar mogelijk ook gewoon onbeschikbaar op een deel van het toestellenpark.
Het leek de doorbraak: échte cache-aware streaming, NL, on-device, lage latency. Maar de gecontroleerde vergelijking isoleert de oorzaak: V·Parakeet (re-transcribe) is goed, V·Nemotron (streaming) is slecht — zelfde leverancier (NVIDIA), grootteklasse (0.6b), SDK (FluidAudio) en taal. De enige variabele is de decode-modus. Re-transcribe her-decodeert het hele segment (veel context); streaming decodeert per chunk (weinig context) → mist losse woorden en hele zinnen, vooral na een pauze. Onafhankelijk bevestigd: Joel (getmoshi.app) zet hetzelfde model in batch in, niet streaming — "better accuracy and speed". Versta's live on-device streaming-NL blijft dus een differentiator die zelfs een volwassen app niet doet; het kost alleen (nog) kwaliteit. De research-reminder ~15 jun (FluidAudio-streaming-best-practices) is beantwoord via een code-lezing van FluidVoice (23 jun): voor NL bestaat de knop niet — zie de FluidVoice-analyse hieronder.
De ~15-jun research-reminder (bestaat er een knop die streaming-NL alsnog goed maakt?) is beantwoord door de code van een echte concurrent te lezen: FluidVoice (altic-dev, GPLv3) — een macOS-dicteer-app v1.6.0 die net als Versta op NVIDIA Parakeet via Apple-silicon leunt. 126 Swift-bestanden gelezen, kern ASRService.swift (3229 regels). De marketing-claim — "pretty much zero delay between speaking and seeing words" — rust op twee verschillende motoren, en het verschil is precies waar Versta's v2-vraag om draait. Confidence: high (uit de code gelezen).
parakeet_realtime_eou_120m: een true-streaming model met End-of-Utterance-detectie, 160 ms-chunks, delta-audio — alléén de nieuwe samples per tick, dus constante compute. Latency ~150-250 ms. Maar het is Engels-only → onbruikbaar voor NL."no VAD" staat letterlijk in de code). Regel-voor-regel dezelfde aanpak als V·Parakeet (interval 0,4 / commit 1,6 / floor 0,02). Compute groeit met de zinlengte.De engine levert niets nieuws, maar drie nette trucs in FluidVoice's code staan los van de engine-keuze en zijn wél bruikbaar voor Versta:
MLModel-objecten delen → +~100 KB i.p.v. dubbel geheugen. Direct relevant voor Versta's ANE-contentie (crash #4) als er ooit boosting/rescoring bijkomt.FluidVoice heeft voor Versta's twee kernproblemen — stilte en lawaai — geen oplossing; het ontwíjkt ze via use-case. Het is push-to-talk dicteren: jij houdt een toets in, praat dicht bij de mic, in een stille kamer. Geen always-on luisteren → Versta's hele stilte-resume-saga bestaat daar structureel niet. En de enige drempel in de hele audio-pipeline zit op de waveform-animatie, niet op de transcriptie — er is geen ruisonderdrukking, want de SNR is gewoon goed.
Daarmee onderschrijft een rivaal Versta's duurste inzicht: de engine is het tweede front; mic-richting/SNR (en de gebruiks-context) is het eerste. Een app die de engine centraal stelt kan dat alléén omdat hij in het makkelijke akoestische regime leeft dat Versta's noordster — de dansvloer — juist uitsluit. Zet diezelfde engine op ~100 dB en hij stort net zo hard in.
CoreAISpeech-runtime, óók voor Whisper-bundles (mogelijke iPad-fix). Integratie-draaiboek af (8 aug); wachten op de iOS 27-release (~sept), bewust geen beta's.De WER-meting wees capture (SNR) aan als de grootste hefboom in lawaai — vóór welke engine dan ook. Doel: betere SNR, het liefst zonder dat gebruikers een richtmic moeten kopen. Het plan (één mic per sessie, reset ertussen) stond voor Orbit 25 jul maar is niet uitgevoerd; deze condities wachten op de eerstvolgende echte ~100 dB-dansvloer:
.allowBluetoothHFP aan). Tegenkrachten: BT-spraakprofiel = lagere kwaliteit + waarschijnlijk geen Voice Isolation, slechts één toestel is de mic (10 jun: rechts), DSP-gedrag bij 100+ dB onbekend. Thuis-pre-test beslist of dit kern-feature of theorie is.AVAudioSession typisch .measurement met voice-processing uit als default. Aanzetten via AVAudioInputNode.setVoiceProcessingEnabled(true) (iOS 13+). v1.3 leidt de gebruiker naar de systeem-mic-modus.AVInputPickerInteraction (AVKit) — toont aangesloten mics, live levels, Mic Modes. Bron: WWDC25 "Enhance your app's audio recording capabilities".setPreferredPolarPattern(.cardioid) = 86,0% (verkeerde zijde + kaal signaal). Winst zit in fysieke richting + behoud van Apple's processing.Versta levert standaard een klein Whisper-model (tiny ~150MB of small ~400MB quantized). Grote modellen (medium 1.5GB+) blijven optioneel als opt-in voor power-users die bewust voor zware situaties willen upgraden.
Aanleiding: Moshi-experiment 13 mei. Grote modellen hadden onacceptabel lange neural-engine-aanpassing bij eerste run plus lange in-memory-load. Een 400MB small-quantized werkte "opvallend goed" voor dictation in normale omstandigheden.
task: .translate ingebouwd. Strategisch eerst: core "live ondertiteling" of apart spoor?MultipeerConnectivity multi-peer, lokaal, geen server..mixWithOthers / A2DP-output behouden.pause() — en naar de achtergrond gaan/vergrendelen roept pause() aan → tekstverlies. Raakt direct het nieuwe notitieboekje-gebruik (een gebruiker die de logs wil lézen). Voorstel: persist-on-pause. Afgebakende, hoog-nut fix.