NilsBriggen 1bf406d3a8
CI / test (push) Successful in 20s
CI / deploy-web (push) Successful in 37s
CI / build-apk (push) Successful in 7m21s
Fix post-transcribe freeze: batch embeddings off the main thread + guard load
Two reported symptoms — the transcript screen sitting on its loading spinner
after a transcription, and a follow-up transcription stuck at 0% — both trace
to the same cause: after a transcript saves, embedOne() embeds the whole
lecture in ONE synchronous WASM call on the MAIN thread. Measured in a browser
harness: embedding 150 segments blocks the thread for ~1.86s straight (a 50ms
heartbeat fired once instead of ~35x); on a phone or a long lecture that's many
seconds of total UI freeze. During it the just-navigated transcript screen
can't run its get() callback (looks "stuck loading") and a concurrent
transcription's progress UI is frozen at 0%.

- embeddingStore.embedTranscript: embed in batches of 16, yielding to the event
  loop between batches, so the UI stays responsive. Per-text vectors are
  identical (e5 pools each text independently); this only changes scheduling.
- transcript/[id].tsx: the get() load had NO error handling, so a rejected load
  (or a long freeze) left the spinner up forever. Add .catch -> show a real
  "couldn't load" message instead of an infinite spinner; also catch the
  (non-fatal) media-url load.

Ruled out (via harness) the theory that the e5 embedding model hits the same
WASM MatMulNBits load failure as Whisper — e5 (encoder-only) loads fine at both
q8 and fp32 on WASM, so its dtype is left unchanged.

Proper long-term fix (separate, larger): run embeddings in a Web Worker.

Validated: tsc clean, 282 tests, web export OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:20:56 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00
2026-06-13 17:05:52 +02:00

Welcome to your Expo app 👋

This is an Expo project created with create-expo-app.

Get started

  1. Install dependencies

    npm install
    
  2. Start the app

    npx expo start
    

In the output, you'll find options to open the app in a

You can start developing by editing the files inside the app directory. This project uses file-based routing.

Get a fresh project

When you're ready, run:

npm run reset-project

This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.

Other setup steps

Learn more

To learn more about developing your project with Expo, look at the following resources:

Join the community

Join our community of developers creating universal apps.

S
Description
Private, on-device transcription studio (web + native). Runs Whisper in your browser/phone — no uploads, no subscription.
Readme MIT 2.3 MiB
Languages
TypeScript 93.7%
Shell 3.3%
Dockerfile 2.1%
JavaScript 0.8%
CSS 0.1%