Local Character › Methodology · Last reviewed 2026-09-29

Methodology

Every claim this site makes about speed, size or privacy is listed here with how it was measured. Measurements were taken by the developer on an Apple Silicon Mac (Apple GPU) in Chromium with WebGPU, on the live site, in September 2026. Other hardware will differ.

The pipeline

JobModelRuntime in the browserSizeLicence
Chat repliesGemma 4 E2B (instruction-tuned), gemma-4-E2B-it-webLiteRT-LM web (@litert-lm/core 0.17.1) on WebGPU; needs WebAssembly JSPI and relaxed SIMD2,008,432,640 bytesGemma Terms of Use
Scene picturesDreamShaper 8 with an LCM scheduler, 4 steps, 512×512ONNX Runtime Web on WebGPUabout 2.16 GBCreativeML OpenRAIL-M
Spoken repliesKokoro-82M (fp32), 28 English voicesONNX Runtime Web on WebGPU; the final iSTFT runs in JavaScriptabout 0.37 GBApache-2.0
Speech inputWhisper base (fp32 encoder and merged decoder)ONNX Runtime Web 1.27 on WebGPU, greedy decoding; log-mel features computed in JavaScriptabout 0.29 GBMIT

Model files are served by SHA-256 from models.skillsafe.ai, SkillSafe's registry of vetted model files, and kept in the browser's Cache Storage after the first download. The ONNX models (pictures, voice and speech input) share one GPU queue, so they run one at a time instead of colliding.

Measured results

WhatResultHowDate
Chat reply time6-8 s per reply in a 71-message chatLive site, cached model2026-09-29
Chat reply time, 35-turn scripted testmean 8.1 s, slowest 13 s (the previous MediaPipe runtime: mean 17.8 s, slowest 39 s)Same 35 turns replayed on both runtimes2026-09-28
Time to first wordabout 0.3 s, flat across turnsThe conversation keeps its attention cache between turns2026-09-28
Chat model ready after reloadabout 4 s from the cached fileLive site2026-09-29
Voice, cold startabout 28 s to the first soundFirst reply after a reload; the app pre-warms the voice model to hide this2026-09-24
Speech recognition accuracyToken ids identical to Python ONNX Runtime on the same audio; log-mel features within 2×10-5 of the reference WhisperFeatureExtractorIndependent reference implementation, same input2026-09-24
Picture model downloadabout 2 minutes for 2.2 GBFirst picture on a fast connection2026-09-24

Weak results, stated plainly

How privacy is enforced

The app has no chat endpoint to send messages to. Characters, chats and personas are written to the browser's IndexedDB; model files go to Cache Storage. The hosting platform sets a Content-Security-Policy that limits which hosts the page can contact. The privacy page lists every network request the app makes.

Open Local Character →