← Maker

Versta Cockpit

v1.3 live in de App Store (Stemisolatie-hint) · de hefboom in lawaai is mic-richting (gemeten). Nieuw: een echte gebruiker zet Versta in als notitieboekje — de live build logt schoon, maar de persist-gap (tekst weg bij wegswitchen) is nu het echte risico. V·Switch 2.0 wisselt live tussen Apple, Whisper en Parakeet mét Apple-fallback; de open vraag — verdienen de model-engines hun accu + hitte terug? — wordt bij Orbit (25 juli) beslist.

dagen live in App Store
3 + fallback
engines in V·Switch 2.0
13,3 → 6,0%
WER intern → richtmic (babble)
🗒️
Use-case + verificatie · 15 jun
Een gebruiker zet Versta in als notitieboekje — de live build logt schoon, maar de persist-gap is het echte risico
Een vriend wiens moeder — na jaren weer een iPhone, mede dankzij Versta — de app als notitieboekje wil gebruiken, dus de transcript-logs echt wil lézen. Aanname: de App Store-build schrijft nog [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 →
🔀
Mijlpaal · 8/9 jun · Versta 2.0
V·Switch — één app wisselt live tussen Apple, Whisper én Parakeet, met naadloze Apple-fallback. Onno: "naadloos, fantastisch"
De drie engine-forks zijn samengebracht achter één pijplijn: een engine-agnostische merge waarin je via een tandwiel in de onderbalk live van engine wisselt — basis = de productie-Versta, gebouwd als aparte app (…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 →
🦻
Bug · doelgroep-kritisch · 9 jun · + code-review 10 jun
Twee stille faalmodi voor de doelgroep: BT-output-kaping + interruption-handling
(1) BT-output-kaping: de mic-sessie onderbreekt lopende Bluetooth-audio. Dat raakt precies de kern-doelgroep: slechthorenden die hun BT-hoorapparaten als koptelefoon gebruiken om mee te luisteren — Versta opstarten knipt die output af. Geldt voor álle engines (gedeelde audio-sessie) én de productie-audio-config. Te onderzoeken: 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.
🚀
Mijlpaal · live · READY_FOR_SALE
Versta 1.3 staat live in de App Store — feature: Stemisolatie-hint
Goedgekeurd en live (geverifieerd 15 jun via ASC appStoreVersionsREADY_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 →
🎧
Tweede route · 12 jun
Naast de tekst-route ook de audio-route: de stem schóón in je oren krijgen i.p.v. als tekst
De north-star (een ander verstaan in extreem lawaai) heeft twee wegen. Versta is de tekst-route (spraak → ondertitel). Daarnaast bleek op iOS 26 een audio-route gratis testbaar: Live Listen heeft nu zélf een stemisolatie-toggle (zelf ontdekt — corrigeert de eerdere high-confidence-aanname dat Voice Isolation niet in Live Listen te forceren was). Recept: Live Listen aan (iPhone-mic → Oticon Intent), stemisolatie aan, Oticon-mics dicht via de Companion-app, iPhone-mic bij de mond van de spreker. Besluit (Versta.md): geen app bouwen zolang de Apple-stack volstaat — latency is een non-issue voor mond-aan-oor (geen lipbeeld). Enige ongemeten onbekende: alle Voice-Isolation-metingen waren op kamervolume; ~100 dB blijft open → thuis in Genelecs-babble, dan Orbit 25 juli. Hulpmiddel: een "praat hier"-lockscreen.
Afgerond · 2-3 jun · was blocker sinds 7 mei
Stilte-resume-bug onderzocht & afgesloten — geen software-truc verslaat Apple's Baseline
Gebouwd: een meet-lab (Versta Lab) met schakelbare strategieën + Diagnostics-HUD, en een ground-truth WER-protocol (15 vaste zinnen voorlezen in babble via Genelecs). Uitkomst: geen restart-strategie, gate, cardioïde of AGC verslaat de kale Baseline. De resume-"bug" kost objectief weinig wóórden (blok ná stilte: 4,3% WER). De échte hefboom is mic-richting/SNR: een externe richtmic halveert de fout (13,3% → 6,0%). De 4 stilte-varianten én de nachtelijke experiment-pijplijn zijn hiermee overbodig en opgeheven.
🎯
Kerninzicht · gemeten, niet gevoeld
De hefboom is mic-richting, niet software
Alle software-hefbomen getest en gemeten: restart-strategieën, gate, cardioïde, AGC. Alleen Stemisolatie beweegt de naald op de interne mic (13,3% → 11,3%) → vandaar de v1.3-hint. Verder rendement zit in een externe richtmic (6,0%) of een betere engine — niet in iOS-trucs. De engine-accuratesse-bodem (Apple's recognizer: 30,7% WER in een ruis-benchmark) is een apart, duurder spoor. Volledige matrix in de Onderzoek-tab →
⚖️
De vraag die V·Switch nu kan beslissen
Verdienen de model-engines hun accu + hitte terug, of is Apple gewoon prima?
V·Switch maakt het eindelijk een eerlijke A/B: dezelfde audio, live wisselen tussen Apple / Whisper / Parakeet. In stilte zijn Whisper en Parakeet Apple-vergelijkbaar of beter — maar twee dingen drukken terug. (1) Accu + hitte: Whisper/Parakeet trekken de accu hard leeg en maken de telefoon heet (compile + continu gebruik); Apple is veel lichter. (2) Lawaai is de enige test die telt, en die staat nog open. Eén streaming-kandidaat al afgevallen: V·Nemotron getest én geparkeerd (8 jun) — streaming verliest van re-transcribe, ook op de beste tier. De beslissing valt bij Orbit (25 juli): lawaai-WER + accu/hitte per engine. Tot dan is Apple-default het uitgangspunt, met de model-engines als opt-in. Engine-matrix →
🎤
Wow-vondst die blijft staan · Tycho 9 mei
Zenden-modus — DJ's reageerden spontaan lief
Op de dansvloer (~100 dB) sprak Tycho complimentjes in en liet ze de DJ lezen. Spontane positieve reacties van vreemden. 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). Open beslissing: first-class maken in v1.3 of in pinch-to-zoom-feature absorberen?
Live
v1.2 — App Store
Live sinds 5 mei 2026, 175 territories. NL, on-device, drie doelgroepen. Pinch-to-zoom + (inmiddels verwijderde) confidence-meter.
Live
v1.3 — Stemisolatie-hint (READY_FOR_SALE)
Live in de App Store (geverifieerd 15 jun via ASC 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.
Nu
Persist-on-pause — het notitieboekje-vangnet dichten
Concreet getriggerd 15 jun: een gebruiker (moeder van een vriend) zet Versta in als notitieboekje. Versta schrijft de transcript alleen weg bij stop/reset, niet bij pause() — en naar de achtergrond gaan/vergrendelen roept pause() aan → tekstverlies. Voorstel: persist-on-pause. Afgebakende, hoog-nut fix; nog niet gebouwd.
v2 — gebouwd
Versta 2.0 (V·Switch) — engine-wissel + Apple-fallback, fase A+B af
De accuratesse-bodem (30,7% WER in ruis) verschuift alleen met een betere engine. Het v2-voertuig staat er nu: V·Switch brengt Apple / Whisper / Parakeet samen achter één pijplijn, kiesbaar via een tandwiel, met naadloze Apple-fallback (verbergt de model-compile). Fase A (teardown, 64 wissels 0 WARN) + fase B (één model per engine, fallback, cosmetiek) af; fase C = model-opslag + wis-functie nog open. Streaming-kandidaat V·Nemotron getest + geparkeerd (streaming < re-transcribe). Open: lawaai-WER + accu/hitte beslissen of de model-engines hun kost terugverdienen (Orbit 25 juli). Cloud "ruis-modus" (Mega-ASR-klasse) blijft een apart project — breekt de offline-belofte. Vertaling als bijvangst (task: .translate).
Backlog
Multi-speaker · meertalig · festival-modus
Multi-speaker via SpeechTranscriber Conversation-preset — geblokkeerd: iOS 26 SpeechTranscriber heeft nog geen NL (wekelijkse watcher bevestigt afwezig). Meertalig pas zodra Apple Live Captions NL ondersteunt. Festival-woord-herkenning + snel-lees-modus (anker-letters) als v1.x-features.

Model-engines vs Apple-default — verdienen ze hun accu + hitte terug? Beslist bij Orbit

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. Beslissende meting: Orbit-festival 25 juli (met Bert, RØDE-richtmic + USB-verlengsnoer). V·Nemotron is al afgevallen (8 jun): streaming verliest van re-transcribe, ook op de beste tier.

Externe richtmic als product-spoor — ondersteunen, aanraden, of intern richten?

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?

Cloud "ruis-modus" als optionele fallback — bouwen of niet?

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.

Whisper-fork als hoofd-pad — wanneer overstappen?

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.

Zenden-modus first-class — of in pinch-to-zoom absorberen?

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.

ASC-beschrijving: nu herschrijven of bij de volgende versie?

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.

15 jun — Notitieboekje-gebruik + verificatie: live 1.3 logt schoon, persist-gap is het echte risico

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.

12 jun — Audioroute: Live Listen + stemisolatie op iOS 26 (de stem in je oren, niet als tekst)

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).

10-11 jun — Hardening code-review, hoorapparaat-mic als North-Star-feature, Versta Duo PoC, Apple Core AI

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.

8→9 jun — Versta 2.0 (V·Switch): de drie engines achter één pijplijn, met Apple-fallback

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.

8 jun — V·Nemotron gebouwd, getest en geparkeerd: streaming verliest van re-transcribe

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).

5→6 jun — V·Parakeet: tweede STT-engine in 10 iteraties gebouwd (één nacht)

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 →

3 jun — Versta 1.3 ingediend voor App Store-review (sindsdien live)

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).

3 jun — Debug-log entries gefixt + schone herindiening

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).

2-3 jun — Versta Lab + ground-truth WER-meting (de doorbraak)

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 →

2-3 jun — Engine-benchmark: Apple's recognizer 30,7% WER in ruis

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.

2-3 jun — AGC-hypothese weerlegd, interne cardioïde faalt op 86%

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.

2 jun — Mega-ASR-paper als inbox-trigger

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.

2-3 jun — Nachtelijke experiment-pijplijn opgeheven

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.

9 mei — Tycho op Geheime Liefde — zenden-modus ontdekt

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?

6-12 mei — LinkedIn launch + founder-story

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.

5 mei — Bevrijdingsfestival + App Store-launch

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).

v1.2 live in App Store (v1.1 → v1.2 binnen release-cyclus)

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.

v1.3 LIVE — Stemisolatie-hint (READY_FOR_SALE)

Goedgekeurd en live in de App Store (geverifieerd 15 jun via ASC appStoreVersionsREADY_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).

Build 1780443185 (debug-vrij, geüpload 3 jun 01:35) · 8 screenshots (01-08, 1320×2868, nl-NL) · export-compliance OK. Notes for Reviewer: Voice Isolation via showSystemUserInterface(.microphoneModes), leest activeMicrophoneMode, geen wijziging aan on-device SFSpeechRecognizer / dataflow.

15 jun — Logging-verificatie: de live build logt schoon (bron-hiërarchie-les)

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).

App ID6764358771
Bundlecom.terwisscha.versta
Beschikbaar in175 territories (alle Apple-markten)
PrijsGratis
CategorieHulpprogramma's
Primary localenl-NL

Stilte-resume bug + multi-speaker bug — één AGC-hypothese bindt drie feedback-entries

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).

1. AanlooptijdAGC moet bij start leren wat spraak vs. ruis is. Verklaart waarom Versta beter verstaat naarmate er langer gesproken wordt.
2. Recalibratie op stilteTijdens lange pauzes update AGC zijn noise-floor op die stilte. Eerste woorden na hervatten landen op verkeerde gain → 1-2 zinnen verloren. Verklaart Olivia's stilte-resume bug.
3. Per-spreker-fixatieAGC kalibreert op stem-eigenschappen huidige spreker. Tweede stem mismatched gain. Verklaart Tycho's multi-speaker rapport (29 apr) + Olivia's drie sub-symptomen (30 apr).

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 →

Hoe het AGC-spoor zich vertakte na 9 mei festival

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.

Spoor 1 · stilte-chain (verworpen)Direct nieuwe SFSpeechRecognitionTask chainen na finalize. Maakte het probleem ERGER — recognizer-state corrumpeerde, zelfs manual restart hielp niet. Les: niet te agressief task-roteren binnen een lifecycle.
Spoor 2 · stilte-timer (op iPhone)1s expliciete check of task is afgerond, dan restart. Simpeler dan chain. Tot 1s extra latency.
Spoor 3 · stilte-vad (op iPhone)RMS-energie als voice-activity-detection. Recognition herstart pas zodra geluid weer detecteert wordt, ipv blind chainen. CPU- en batterij-vriendelijker.
Spoor 4 · stilte-keepalive (op iPhone)Zachte witte-ruis-frames tijdens stilte om finalize te voorkomen. Risico: accuracy ondermijning, valse positives.
Spoor 5 · preview-buffer (op iPhone)Geen fix maar mitigatie — 3s waveform-strook onderaan voor visuele zekerheid dat mic luistert. Hulpmiddel zolang bug bestaat.
Spoor 6 · aec-aggressief (op iPhone, vastgelopen)iOS exposeert géén instelbare AGC. VPIO-unit kent alleen binaire toggles. Spec-hypothese onuitvoerbaar. Verwerpen of pivot naar .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 →

9 mei 2026 · Geheime Liefde festival
Tycho Fransen + DJ's + Onno
Dansvloer ~100 dB SPL + bass, meerdere sprekers
Wow + bug + 2 features
Tycho ontdekte zenden-modus: complimentjes inspreken, DJ leest tekst — spontane lieve reacties van vreemden (5e wow-validatie). Pinch-to-zoom feature-request volgde direct uit zenden-modus-gebruik (1u werk, hoge ROI). Bug: ontvangen-modus structureel kapot bij 100 dB — input-niveau-probleem, niet engine. RØDE Me-C+ besteld als hardware-route. 4-modi debug-build draaide; versta-log.txt wacht op uitlezen via xcrun devicectl.
7 mei 2026
Olivia ter Wisscha — brunch-brainstorm
Brunch, eigen-gebruik feedback + strategische input
Blocker + UI + feature + marketing
10 sub-items (A-J) verwerkt in feedback-log + taken.md. Belangrijkste: (A) stilte-resume bug als blocker voor promo-push, (B) bewegende-golf mic-indicator, (C) telefoon-als-microfoon visuele taal (🎤), (D) rooms-uitbreiding op paired-phone — 4e onafhankelijke validatie cross-device, (E) ASC-tekst herschrijven (te lang/AI slop), (F) content-strategie met diversiteit, (G) frustratie-anekdote als reel, (H) IG-bio gender-neutraal + grotere profielfoto ter plekke gefixt, (J) ouders/grootouders met hoortoestellen-use-case.
7 mei 2026
Edward Dolk — terras De Poort
Toevallige ontmoeting na training, alleen met een Paulaner
Sociale validatie in het wild
"Ik zit net aan twee andere mensen te vertellen over jou, dat jij die app hebt gemaakt." Edward had Onno's WhatsApp ontvangen en bracht het ongevraagd ter sprake bij tafelgenoten. Bewijs dat App-Store-push + persoonlijke WhatsApp doorwerkt. Bonus: Edward heeft Sanger-ervaring, kan helpen MYO6-WGS-confirmatie.
5 mei 2026
Bevrijdingsfestival — vooraan bij podium
Festival, extreem lawaai (Chef'Special), vreemden in directe omgeving
Wow + bug
Jongeren met prima gehoor reageerden enthousiast en installeerden de app meteen zelf. Mainstream-appeal bevestigd: niet alleen voor slechthorenden. Bug-signaal: gebruikers praten niet dichtbij genoeg, mondelinge uitleg nodig → mic-afstand UX-issue voor v1.2.
5 mei 2026
Jan Nico van Aalsum
Mondeling doorgegeven aan Onno, dag van App Store-launch
Use-case + feature-request
Onafhankelijke melding van paired-phone use-case: koppel twee telefoons, spreker praat in eigen mic, luisteraar leest op haar eigen scherm. Zelfde idee als Tycho dag eerder, andere framing. Twee onafhankelijke melders binnen 24u = sterk validatie-signaal voor v1.2.
4 mei 2026
Tycho Fransen — voorbereidingsgesprek
Voorbereiding op gezamenlijke test 9 mei
Edge case + feature
Twee dingen: (1) BT-hoorapparaten worden audio-input → mic-route-issue (edge case voor v1.2). (2) Eerste paired-phone-suggestie: twee slechthorenden onderling.
30 apr 2026
Olivia ter Wisscha (+ medetester)
WhatsApp-feedback aan Onno, samen getest
Wow + bug + UX
Eerste indruk: "makkelijk te gebruiken" + "goed leesbaar". Multi-speaker bug bevestigd in 3 sub-symptomen. Mic-icoon-bug + privacy-onboarding: opgelost vóór launch. Strategische pivot-suggestie: "ondertitel één persoon" i.p.v. dialoog-transcriptor.
29 apr 2026
Tycho + Silke (dochter) + Tobias (vriendje)
Rustige omgeving (thuis bij Tycho)
Bug ontdekt
Drie testers enthousiast, "geweldig". Eerste vriend die Versta zonder aansporing zelf inzet en deelt met derden. Multi-speaker bug ontdekt: tweede spreker slechter opgepikt.
26 apr 2026
Gast op verjaardagsfeest
Huis, druk feest (niet extreem lawaaiig)
Wow-validatie
Spontane wow over leesbaarheid op afstand toen Onno zichzelf ondertitelde. Externe validatie van fresh-eyes outsider. Geen voorkennis, geen gehoorbeperking.

JBL PartyBox bass-test — gedaan 4 mei

Accuracy + batterijverbruik in bass-zware setting getest. Resultaat: research/lawaai-test-2026-05-04.md in vault.

Feedback-log opgezet 30 apr

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.

→ Vervangt verspreide notities. WhatsApp-templates voor uitnodiging + follow-up + bedank-bericht erin.
Drempel virale-claimMinstens één spontane "wow" van vreemde, niet uitgelokt
Tester-interview20-30% zegt "blij ermee" / "geld voor over"
Video-authenticiteitRauw festival-materiaal, geen fake reactions

De omslag — van "fix de bug in software" naar een gemeten antwoord

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.

Versta Lab — schakelbare strategieën + Diagnostics-HUD

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:

Hartslagms sinds de laatste recognizer-callback — maakt "HANGT" objectief zichtbaar.
Mic-niveau + routedBFS + welke mic actief is (intern / cardioïde / RØDE) ter verificatie.
Klapper-maataantal × rood / toestand-churn — het zuiverste verwarrings-signaal.
Resume word loss + latencygemiste woorden in zin 6 & 11 (direct ná de pauzes) + app-gemeten hersteltijd.

Na het WER-onderzoek opgeschoond tot Baseline + Cardioïde; de stilte-strategieën (chain/timer/keepalive/vad/gate) zijn eruit gehaald — bewezen overbodig.

15 vaste zinnen, voorgelezen in babble

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.

RØDE — externe richtmic de hefboom6,0%
Baseline + Stemisolatie intern · de v1.3-hint11,3%
Baseline intern · huidige productie = softwarematige bodem13,3%
Gate v2 + RØDE poort dropt eigen woorden17,3%
Baseline · AGC-aan intern18,0%
Baseline · AGC-uit intern · "AGC-uit helpt" weerlegd19,3%
Gate v2 intern20,0%
Cardioïde intern · verkeerde mic-zijde + kaal signaal86,0%
≤8% goed ≤15% ≤30% >30% slecht

Per-blok-inzicht: Baseline's zwakte is blok C (mic-op-speaker) met 29,4% — maar bijna alleen invoegingen (recognizer verzint ruis erbij, eigen spraak komt door). De RØDE drukt blok C naar 7,8%: een richtmic wijst de speaker-ruis fysiek af. Blok B (ná stilte) is met Baseline juist 4,3% — bijna foutloos, ondanks het visueel dramatische "HANGT".

Geen software-truc wintRestart-strategieën, gate, cardioïde én AGC — geen verslaat Apple's kale Baseline (13,3%). Stoppen met restart-trucs; Baseline blijft productie.
Mic-richting is de hefboomDe RØDE halveert de fout (13,3% → 6,0%). Het pijnpunt (blok C, mic-op-speaker) zakt van 29,4% naar 7,8% — de richtmic wijst de ruis fysiek af.
Stemisolatie = enige gratis interne winst13,3% → 11,3% (~15% relatief), vooral blok C. Niet programmatisch te forceren (privacy) → de app leidt de gebruiker erheen. Dít werd de v1.3-feature.
De resume-"bug" viel objectief meeBlok B (ná stilte) = 4,3% met Baseline. Visueel dramatisch (rood/HANGT), maar kost weinig wóórden bij duidelijk doorpraten.
AGC-uit helpt niet (weerlegd)WER gelijk (uit 19,3% / aan 18,0%); stabiliteit béter mét AGC (9× rood vs 19×). Geen reden AGC uit te zetten.
Interne cardioïde = doodlopend (86%)Activeert de voorkant-mic i.p.v. de onderkant én sluit voice-processing uit. Software-richting op de interne mic werkt niet.

Apple's recognizer: 30,7% WER in ruis

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/.

Mega-ASR — bullseye-probleem, geen on-device-oplossing

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.

V·Parakeet — de eerste echte engine-kandidaat, on-device (5→6 jun)

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.

Architectuur-lesHet échte streaming-model (Nemotron-EOU) is Engels-only → onbruikbaar voor NL. NL zit op het v3-batch-model; de winnende aanpak werd een re-transcribe-loop met commit-op-stabiliteit (VAD-vrij), niet de sliding-window. Latency ≈ interval (~0,4s).
Doorbraak (it.5)De v3-API heeft een publieke 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).
Stilte-poortRest-bug "Thankfully"-hallucinatie op pure stilte → energie-gate op piek-RMS (stilte 0,000 vs spraak 0,18-0,42, enorme kloof; confidence scheidt níét). Live tunebaar, default 0,02.
Stand in stilte~90% accuraat, zinsbeginnen blijven staan — Onno: "zeer indrukwekkende verbetering, vergelijkbaarder met het Apple-model". Van bijna-dood-spoor naar serieuze kandidaat in 10 iteraties.

De beslissende test staat nog open. Parakeet wint op latency níét (Apple's SpeechAnalyzer is een echte streaming-recognizer; Parakeet doet pseudo-streaming) — de mogelijke waarde zit puur in accuratesse in lawaai. Volg hetzelfde 3-blok-dictee in babble op de interne mic: onder Apple's 13,3% = echt engine-voordeel (serieus v2-spoor), erboven = geen winst, parkeren. Memory: project_versta_parakeet.

V·Switch — de drie engines achter één pijplijn (8/9 jun)

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.

Fase A — teardownDe engine als plug-in achter de pijplijn. Bewezen robuust: 64 live engine-wissels, 0 WARN. Basis = de echte productie-Versta, geen herschrijf.
Fase B — af (8/9 jun)Instellingenscherm + tandwiel; één model per engine (Whisper 632MB, submenu's eruit — klein = waardeloos, groot = te traag); Apple-fallback met naadloze auto-switch + tekstbehoud; cosmetiek (statusbalk onderin, tekst-rotatie). Onno: "naadloos, fantastisch".
Apple-fallback = de trucDe model-engines compileren traag bij first-run (ANE). De fallback toont meteen een werkende Apple-transcriptie en switcht naadloos door zodra het model klaar is — de compile-wachttijd verdwijnt achter een bruikbare app.
Fase C — openModel-opslag-sectie (totale + per-model grootte) + wis-knop: de gedownloade modellen stapelen verborgen in App Support en zijn niet via Bestanden te wissen → FileManager.removeItem. Afgebakende bouwklus.

Bijvangst-inzicht: de pijnlijke dev-loop-compile (minuten per install) is grotendeels een debug-artefact — Xcode/devicectl-installs nemen altijd een uncached ANE-pad. Of een échte App Store-update de compile-cache behoudt (model op een stabiel App-Support-pad) is mechanistisch waarschijnlijk maar onbewezen → alleen via TestFlight te meten. Memory: reference_ane_compile_cache.

V·Apple — dev-baselineApple 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.
V·Whisper — kwaliteitWhisperKit large-v3-turbo q, re-transcribe. Beste schermweergave in stilte, kwaliteit > Parakeet. Re-launch ~seconden. Lawaai nog open.
V·Parakeet — streaming-vriendelijkNVIDIA Parakeet-v3, re-transcribe, forced-NL + #594-flags. Goede zinsbegin, in stilte Apple-vergelijkbaar. Lawaai nog open.
V·Continu — achtergrondApple SF zonder auto-pause; achtergrond-luisteren bevestigd, ~productiesnelheid. 1 crash bij een gelijktijdige audio-app (mic-contentie).
V·Nemotron — geparkeerdNVIDIA Nemotron-3.5 streaming via FluidAudio. Getest 8 jun → slecht in stilte (verhaspelt, mist zinnen). Streaming < re-transcribe, ook op de beste tier. Engine herbruikbaar zodra een beter streaming-NL-model verschijnt.
V·Switch — de merge (2.0)Alle 3 (Apple/Whisper/Parakeet) kiesbaar via tandwiel, met Apple-fallback. De engine-agnostische app zelf, niet één engine. Fase A+B af, fase C open.

De model-engines zijn vermoedelijk high-end-only — een device-capability-gate nodig

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.

V·Nemotron — waarom streaming de kwaliteit kost

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. Research-reminder ~15 jun: FluidAudio-streaming-best-practices (preprocessing, context-tiles, decoding) — als er een knop blijkt, heropenen.

Drie sporen, helder gescheiden

Nu (v1.3)Software-trucs gestopt; Baseline = productie. De enige gratis interne winst — Stemisolatie — landt als niet-blokkerende hint. Live in de App Store (READY_FOR_SALE). Eerstvolgende afgebakende fix: persist-on-pause (notitieboekje-vangnet).
Next (v1.x)Externe richtmic netjes ondersteunen/aanraden (de gemeten hefboom). USB-C verlengsnoer voor de RØDE binnen vanaf 10 jun → richtmic als losse handmic dicht bij de mond, pre-Orbit testbaar. Open: interne 4-mic-array softwarematig richten — maar cardioïde faalde, dus onzeker.
Later (v2 — gebouwd)De accuratesse-bodem verschuiven met een betere engine. Het voertuig staat er: V·Switch 2.0 (Apple/Whisper/Parakeet + fallback, fase A+B af). De open vraag is niet meer "kunnen we een tweede engine bouwen" maar "verdienen de model-engines hun accu + hitte terug in lawaai?" — beslist bij Orbit. Twee dempers op het model-spoor: Nemotron al afgevallen (streaming < re-transcribe), en de model-engines zijn vermoedelijk high-end-only (jetsam-piek ~2,33 GB → device-capability-gate). Cloud ruis-modus blijft een apart project.
v3-spoor — Apple Core AI (iOS 27)WWDC 2026: nieuw framework vervangt Core ML, met officiële Whisper large-v3-turbo in de catalogus + AOT-compilatie (instant load → raakt cold-start én de Apple-fallback-noodzaak). Mogelijk de fix voor de iPad-Whisper-fail. Parakeet-v3 model-request ingediend (issue #7). Beta-stappen vanaf juli, vereist iOS 27 (sept 2026).

SNR vóór engine: wat haalt de gratis truc, wat de €70-mic?

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. Bij Orbit (met Bert, één mic per sessie, reset ertussen) worden deze naast elkaar gemeten op een echte ~100 dB-dansvloer:

Closeness — grootste gratis hefboomInverse-square: elke halvering van mond-tot-mic-afstand ≈ +6 dB SNR. UX-richting: laat de ánder onderaan de telefoon praten. Confidence: high (fysica).
Hoorapparaat-mic + in-oor-spraak (North-Star, 10 jun)Tycho's "BT wordt mic"-bug geherframed: op de dansvloer praat men tóch al in je oor, en de hoorapparaat-mic zit precies dáár → mond op ~5 cm vs telefoon op armlengte ≈ 15-20 dB SNR-winst. Werkt al in productie zonder code (.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.
RØDE-richtmic — de bewezen winnaarHalveerde de WER (13,3% → 6,0%). USB-C verlengsnoertje binnen vanaf 10 jun → richtmic als losse handmic dicht bij de mond van de spreker, telefoon blijft leesscherm. Niet gratis (~€70), maar het ijkpunt.
Hand-koker · body-shield · high-passHand om de onderkant-mic (akoestisch schild + closeness-proxy), hurken/lichamen als geluidsval (situationeel reëel), en een high-pass <~120 Hz tegen techno-sub-bass die de AGC verstoort. Alle gratis, software/instructie. Confidence: moderate.

Eerlijk: de RØDE verdubbelde de kwaliteit, dus gratis trucs halen dat waarschijnlijk niet vólledig — maar Voice Isolation + closeness kunnen stápelen. Orbit meet het verschil. NB: bij ~100 dB zakt elke engine volledig in — dan is mic-SNR de bottleneck, niet de engine.

Externe richtmic + Voice Isolation — de API's

Voice Isolation expliciet aanBij externe USB-mics is de shared 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.
iOS 26+ in-app pickerAVInputPickerInteraction (AVKit) — toont aangesloten mics, live levels, Mic Modes. Bron: WWDC25 "Enhance your app's audio recording capabilities".
Waarom hardware-cardioïde werkt, software nietRØDE (extern, goed gericht, processing intact) = 6,0%. Interne setPreferredPolarPattern(.cardioid) = 86,0% (verkeerde zijde + kaal signaal). Winst zit in fysieke richting + behoud van Apple's processing.

Skelet + bronnen: research/grok-briefing-voice-isolation.md + research/2026-05-10 Festival mic research van Grok.md.

Default-model = klein

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.

OnderbouwingEerste indruk = snel bruikbaar zijn, niet pieken in kwaliteit op zinnen waar gebruiker sowieso niet diep luistert. Opt-in upgrade-pad past bij App Store-marketing.
Mitigatie tegenargumentKlein-default kan eerste indruk afzwakken in extreme omstandigheden (café, 6-persoonsvergadering). Maar dat zijn niet de marketing-baseline. Upgrade = natuurlijke progressie-haak: "standaard sneller, optioneel preciezer".
Open vragenTiny of small als v1.x-default? Past binnen huidige WhisperKit of vereist refactor? Hoort in v1.3 of pas v2-pivot?
Bijvangst: vertaalfunctie2 user-requests binnen 12 mei. Whisper's task: .translate ingebouwd. Strategisch eerst: core "live ondertiteling" of apart spoor?
Rooms cross-device syncEén spreker, groep leest mee (klas, tour, vergadering, familie rond grootouder). 4 validatie-signalen, geparkeerd uit v1.2. MultipeerConnectivity multi-peer, lokaal, geen server.
Zenden-modus first-classTycho's jij praat → ander leest als eigen modus, of pinch-to-zoom als brug. Open beslissing.
Multi-speaker robustnessSpeechTranscriber (iOS 26) Conversation-preset. Geen NL — geparkeerd tot Apple uitbreidt.
BT-output-kaping (doelgroep-kritisch, 9 jun)De mic-sessie onderbreekt lopende Bluetooth-audio → wie z'n BT-hoorapparaat als koptelefoon gebruikt, verliest de output zodra Versta start. Geldt voor álle engines + productie. Onderzoek .mixWithOthers / A2DP-output behouden.
BT als mic-input — besloten niet te fixen (8 jun)BT-headsets worden ook default mic-input (Tycho). Bewust níét geblokkeerd: niet tegen iOS-default in vechten, workaround bekend, en sommige gebruikers willen de hoorapparaat-mic juist (meeting-transcriptie). Afvangbaar via instructie.
Persist-gap (concreet getriggerd 15 jun)Versta schrijft de transcript alleen weg bij stop/reset, niet bij 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.
Festival-woord-herkenningKeyword-match (~50 dance-termen) + per-woord animatie. Maakt app "festival-cool" i.p.v. "medisch hulpmiddel". v1.x.
Snel-lees-modus (anker-letters)Eerste 40-60% van elk woord vetgedrukt → fixation points. Bionic-Reading-concept (vrij), eigen naam (merknaam beschermd). v1.x.