Skip to content
Klarword

Klarword is designed for a computer. You can read these pages here, but to transcribe, open the site on a desktop or laptop: the model weighs hundreds of megabytes and the computation runs on your machine.

Nothing is sent, and you can check it

Klarword does not ask you to believe it. Processing happens in your browser, the browser forbids the page to connect anywhere else, and you can see it for yourself in thirty seconds.

Check for yourself

  1. Disconnect the network. Load a model, then turn off Wi-Fi or unplug the cable. Drop a file and transcribe: everything works. Even reload the page; it comes back.
  2. Open the Network tab. In the developer tools (F12), Network tab, drop a file and start transcribing. No request leaves during the work; the first time, only the model files arrive, from this site.
  3. Read the content security policy. It is in the header of every page and reproduced below. The line connect-src 'self' forbids the browser any connection to another domain. The browser enforces it, not us.
  4. Compare the fingerprints. Every model file has a SHA-256 fingerprint published below. The tool checks it before use, and you can recompute it yourself on the downloaded file.

The architecture

The site is a set of static files: pages, code, a compute engine and models. The server serves them and does nothing else. There is no server-side application, no database, no account, and no address to which a recording could be sent.

The architecture Your computer The Klarword tab The page: player, editor, exports The worker: Whisper model, WebAssembly or WebGPU engine The browser's private storage: verified models Your recording Your export

The Klarword server
Static files: pages, code, engine, models

Once:pages, code, model Never:audio, text,file name

What is downloaded, and from where

When the tool opens, the browser downloads the page, its code and its style sheet. The first time a model runs, it downloads the compute engine and then the files of the chosen model. Everything comes from this site, and nothing else is requested: no font, no third-party script, no analytics.

The library that runs the model (transformers.js) knows how to fetch its files from Hugging Face and its engine from a content delivery network. In Klarword it is not allowed to: its download function is replaced by one that refuses, and it only reads the verified files stored on your computer. An unexpected request fails with a message instead of going out.

What is never sent

Not the audio, not the video, not the transcript, not your corrections, not the names of your files. There is no counter, no usage log, no telemetry. The server does not know you transcribed anything.

This site's server keeps no access log. The hosting provider keeps its own technical logs at machine level, under its security rules.

What is stored on your computer

The models and the engine are stored in the private space the browser keeps for this site (Origin Private File System), after their fingerprint has been checked. This avoids downloading them again, and makes offline work possible. The tool's “On this computer” panel lists them and lets you delete them.

Your recording is never stored there. It is read into memory, in the tab, and forgotten when the tab closes; so is the transcript. That is why the tool asks you to save it.

Only one thing from your work is kept from one visit to the next: the glossary you wrote, in the browser's local storage, on this computer. It does not leave the computer; you export it yourself as a text file to share it.

Recording from the microphone

The tool can record straight from the computer's microphone. The browser asks for your permission first; the sound is then kept in memory in the tab, exactly like a file you had dropped, and transcribed the same way. It is not sent anywhere. If you want to keep it, the tool offers to save it on your computer; otherwise it disappears when the tab closes.

The site's Permissions-Policy header allows the microphone for this site only, and forbids the camera, geolocation and the rest.

Offline mode

A service worker keeps a copy of the tool's pages and code so that it reloads with the network off. It makes no request on its own, queues nothing for later, and only touches this site's files. Pages go to the network first when it is there, so that you always read the content security policy in force.

The spell checker

The browser's spell checker is off by default in the editor. The basic one in Chrome, Edge and Firefox works on the computer; but Chrome's “enhanced spell check” sends the typed text to Google. If you turn it on in Klarword, check your browser's setting first.

What this architecture does not guarantee

  • An extension installed in your browser can read the page and make its own requests. For sensitive work, use a profile without extensions.
  • A compromised computer stays compromised: Klarword does not protect against spyware installed on the machine.
  • The browser itself sends information to its publisher (updates, crash reports) according to its own settings.
  • The request list shown in the tool is kept by the page. The browser's Network tab is the check that counts.

An independent audit

The code served can be read in the browser, and the self-hosted package is identical to the site's, with its fingerprint. An organisation can therefore have it audited by the provider of its choice, or ask its security officer to review it before approving it. Write to us to receive the package to audit.

The content security policy

Sent by the server with every page, and repeated in the page itself in case it is placed on another server:

default-src 'self';
script-src 'self' 'wasm-unsafe-eval' blob:;
worker-src 'self' blob:;
style-src 'self' 'unsafe-inline';
img-src 'self' blob: data:;
media-src 'self' blob:;
font-src 'self';
connect-src 'self' blob:;
object-src 'none';
frame-src 'none';
base-uri 'none';
form-action 'none'

File fingerprints

Every file the tool can download, with its size and SHA-256 fingerprint. The models come from the onnx-community repositories on Hugging Face, pinned to a specific revision, and are served by this site. To check a file: sha256sum on Linux, shasum -a 256 on macOS, certutil -hashfile file SHA256 on Windows.

FileSizeSHA-256
Compute engine (onnxruntime-web)
ort/ort-wasm-simd-threaded.asyncify.mjsunder 1 MB0966b6105cd936744498aa60df7a22cbd47af3374dbc64a9ab561c08a71e3611
ort/ort-wasm-simd-threaded.asyncify.wasm27 MB49871f5a4409519797e127440868a6d1923339d9185907f301a5b2a1d90af082
Fast · onnx-community/whisper-base · revision 1846881b6b3a
config.jsonunder 1 MBf4d0608f7d918166da7edb3e188de5ef1bfe70d9802e785d271fd88111e9cf4b
generation_config.jsonunder 1 MB61070cf8de25b1e9256e8e102ded49d8d24a8369ed36ef84fdf21549e68125a0
onnx/decoder_model_merged_quantized.onnx54 MBfa3ef9902734ce5ae6f9ef2bdb2ba9a6c4b5785b09f4f420ce036573dc9d090b
onnx/encoder_model_quantized.onnx23 MB5862993336bf33acd23736071aae2b32261d3b1b2f37780194460d4ef974dd46
preprocessor_config.jsonunder 1 MBa6a76d28c93edb273669eb9e0b0636a2bddbb1272c3261e47b7ca6dfdbac1b8d
tokenizer.json2 MB27fc476bfe7f17299480be2273fc0608e4d5a99aba2ab5dec5374b4482d1a566
tokenizer_config.jsonunder 1 MB2e036e4dbacfdeb7242c7d4ec4149f4a16e86026048f94d1637e3a8ee9c6a573
Balanced · onnx-community/whisper-small · revision 36050c46d777
config.jsonunder 1 MB457854d452f17661e197d74aee12b8e74fb75ba30ebfaa7426d0d61ea1e08a18
generation_config.jsonunder 1 MBf538b28220c6a6d6f1af1458d4141cacb4ef4963df3de98a19490440c412ddf0
onnx/decoder_model_merged_q4.onnx233 MB795c61b344576719c2b249cc9911c78b4cc552c8c6a5407be21a3380a0791b13
onnx/decoder_model_merged_quantized.onnx157 MBec07c3cbb64172c39791e26ee870a65ac22b458c36722bfe2776b3dbf741e0c9
onnx/encoder_model_q4.onnx66 MB9f088ad0fe15ba2cf094c9fb22ac7fe1111fc9ef317c1e4d1f6a3bca38a931ba
onnx/encoder_model_quantized.onnx92 MBa43a83f3c5361cd591cfa7c36f14b43cf7cb22f47a415cc14a8d557be800fa92
preprocessor_config.jsonunder 1 MBa6a76d28c93edb273669eb9e0b0636a2bddbb1272c3261e47b7ca6dfdbac1b8d
tokenizer.json2 MB27fc476bfe7f17299480be2273fc0608e4d5a99aba2ab5dec5374b4482d1a566
tokenizer_config.jsonunder 1 MB2a4c4281cf9f51ac6ccc406fdc711a087afe6530f671fa7b80953edc498275ce
Accurate · onnx-community/whisper-large-v3-turbo · revision 360ebcde2559
config.jsonunder 1 MB35cd83669f75bc2867f3b3a4461850392d5e308cd6ea951c3700539883c28df1
generation_config.jsonunder 1 MB16f95291d2f47c944d3c2b19390bba7965666555c1ea2a0bdc850d1fab45612f
onnx/decoder_model_merged_q4.onnx334 MB8b933ac24074a24a1635084d06a4ed37e387ef22d980f184a5fc27418e9ceeb8
onnx/decoder_model_merged_q4f16.onnx194 MB45981cdd958a4c8e1447839850d2e6e27e30974ccbe31b4a1e5ebe9ad8965a5f
onnx/encoder_model_q4.onnx425 MB7e64b20dd7b556cb7a2c1c65d9fbf31af985323c006f993d2a9dd10083547d78
onnx/encoder_model_q4f16.onnx370 MBaafd3383f1aa372db0825a885730ebbbae7e34871ec0460428663c69641a63d0
preprocessor_config.jsonunder 1 MB7ccc62c6f2765af1f3b46c00c9b5894426835a05021c8b9c01eecb6dfb542711
tokenizer.json2 MB6d8cbd7cd0d8d5815e478dac67b85a26bbe77c1f5e0c6d76d1ce2abc0e5f21ca
tokenizer_config.jsonunder 1 MB844b642c73a91359722f47b35705f7174686df33d252695d8572cf9ac03a6389
Speakers, turns · onnx-community/pyannote-segmentation-3.0 · revision 733a93b6473d
config.jsonunder 1 MB5a4c6bb4f49f1b47c9bd398aac78b8cd4a9f30a0ff91b5c2dc68d05e13e160cf
onnx/model.onnx6 MB057ee564753071c0b09b5b611648b50ac188d50846bff5f01e9f7bbf1591ea25
preprocessor_config.jsonunder 1 MBdfc7d35a3895f8997eb94521e28b1921c03480a34fa9bcbb6bef1f1934f81480
Speakers, voice fingerprint · onnx-community/wespeaker-voxceleb-resnet34-LM · revision 6a61a1833ff2
config.jsonunder 1 MB4a65a1544d2085d7819632f130583d83f6815f49ef6c8ba6c8eb460bd4085041
onnx/model.onnx27 MB3955447b0499dc9e0a4541a895df08b03c69098eba4e56c02b5603e9f7f4fcbb
preprocessor_config.jsonunder 1 MBa81bbded0530b1bf5c3d395d2c5c7c266686e348be5989171290ace960f24ec2