Bina 0.4 Koochik β browser WebGPU INT4
Try Bina in your browser
Use the public Bina 0.4 Koochik Space or its standalone app. The Persian interface follows persianvlm.com/ocr. Inference runs on the visitor's device using the pinned checkpoint 18,404 WebGPU INT4 runtime; images and text are never uploaded. The first run downloads about 770 MB, then four sessions stay resident for subsequent images. PNG, JPG and WebP are supported; PDF is not. Current desktop Chrome/Edge with WebGPU is recommended. The published qualification scores remain scoped to the frozen 64 set, not a per-input guarantee.
Browser derivative of Reza2kn/Bina-0.4-Koochik, pinned to checkpoint 18,404, with the same 630,800,496 unique parameters. Main training was untouched. The four split ONNX components stay loaded across images and regions; per-image decoder KV state is reset. Stop retains the sessions and Unload releases the worker.
170 linear matrices use symmetric GPTQ INT4 group32 codes and FP32 scales calibrated on 64 training-only regions using fresh checkpoint 18,404 teacher sequences. Embedding/output tables, positions, convolutions, norms and biases retain higher precision. Four-bit describes linear codes; it does not describe every stored parameter or activation. The original packed candidate is 533,891,055 bytes (about 6.771 effective bits per original parameter including exceptions). This split package stores some components separately. No native BitNet or universal speed claim is made.
Actual browser validation
On Apple M2 / Chrome156 WebGPU, the frozen64-image / 71-region test reached 98.8603% pooled NFC character agreement to the matched corrected uncompressed BF16-cast source, and 97.3635% to the original whole-page source. There were zero capped or repeated outputs. All71 regions used just four session creations, zero warm model loads and zero tracked live request tensors after completion.
The metric is 1 - pooled NFC Levenshtein edits / pooled NFC source characters, unclipped. It measures source agreement, not human OCR accuracy or a per-input guarantee. Calibration is source-group disjoint from final qualification. The final set did not fit weights or select candidates. The JavaScript pixel-only layout matched the Python policy's exact boxes and all RGB pixels for all64 images; it covers all original pixels once. Independent synthetic component controls passed against Torch reference tensors with actual GPU compute dispatches.
The custom ONNX Runtime Web JSEP kernel rounds dequantized INT4 weights to BF16 with ties-to-even, then uses FP32 arithmetic. Use the supplied pinned runtime: generic ORT Web can choose different precision and divergent tokens. Query-tiled vision attention keeps every key. Greedy decoding uses RP1.1, 2048 tokens per region, and the source resolution retry. There is no repeated-passage stop, no-repeat constraint, output deduplication or hidden trimming in qualified inference. Exact generated token fidelity and character parity are separate checks.
Run locally
The complete runtime download is approximately 770.2 MB (decimal), including higher precision exceptions, split components, tokenizer/position assets and runtime files. INT4 does not mean every parameter or activation is four bits.
Download the entire repo including external .data, runtime .wasm and tokenizer files. No npm build is needed:
python serve.py --port 8123
Open http://127.0.0.1:8123/ in a WebGPU-capable Chrome browser. Click Load WebGPU once, then Transcribe for the newly authored demo or a local8-bit PNG. Images stay on device. Save the raw JSON with the download link. HTTP localhost supplies a secure context; other hosting requires HTTPS plus the COOP/COEP headers used by the server. Serve this folder as the site root.
The demo installation smoke transcribed both authored lines exactly. The private letter, protected images, raw evaluation transcriptions and training samples are excluded. qualification.json and validation/ contain aggregate/synthetic evidence. Latencies during concurrent quality checks are not speed benchmarks; retained sessions avoid repeated weight downloads and initialization but do not guarantee a speedup for every image.
Other browsers, mobile GPU memory limits, WebAssembly parity, ONNX CUDA and sherpa-onnx are not qualified by this WebGPU release. Small logos, decorative text and complex scans remain limitations. Markup is not separately corpus-qualified.
Provenance and license
Parent architecture: NVIDIA Nemotron-3.5-Parse. Source weights and original provenance are in the standalone parent. Candidate SHA256: 8b702a444a2ff70d478f4bd06875f19ec7fed2b6084d16013f1cf41c4ac7e469. Preserve OpenMDW1.1 LICENSE, ONNX Runtime and other third-party notices. custom-runtime/build-receipt.json identifies the patched browser runtime. Model components and asset hashes are in their manifests. The newly supplied layout, client and server do not change the original model's architecture or main training.
Local latency diagnostic
On the same newly authored400x104 PNG (34 generated tokens) on an Apple M2 Mac, the supplied loader settings produced warm median end-to-end times of browser: 2.650 s across three real repeated generations. Only one inference process was active; normal desktop apps and the idle resident browser could remain present. These short-demo numbers are not corpus throughput, mobile measurements or a universal speed claim. See validation/latency-demo-*.json.