From Noisy Kenyan ID OCR to JSON with MLX and Candle
Fine-tune a 50M-parameter model on synthetic Kenyan ID OCR, measure field-level accuracy, and package the fused F16 weights for Candle inference in Rust.
Category archive
Field notes collected under Software Engineering.
Fine-tune a 50M-parameter model on synthetic Kenyan ID OCR, measure field-level accuracy, and package the fused F16 weights for Candle inference in Rust.
A measured walkthrough of the modes, schema, synthetic fixture, and small understanding model I put around PP-OCRv6 to extract Kenyan ID fields locally.
How my Mattermost bridge keeps recurring schedules outside Codex, gives each run explicit state, and records the result without leaving an agent goal alive.
The architecture, bridge, and security boundary behind my self-hosted Mattermost interface to Codex on a local development machine.
I built a Flutter desktop UI for Perplexity's Bumblebee scanner to make scan scope, package inventory, exact exposure matches, diagnostics, and history easier to inspect.
How I built a Flutter client that keeps Jules sessions, approvals, and code diffs in one workspace, with account-scoped caching and visible sync state.
How Dream TTS separates its Flutter interface from Rust synthesis work so document imports, resumable jobs, model files, and private audio stay manageable.
A practical quality loop for local text-to-speech: representative fixtures, contextual normalization, useful latency metrics, defect labels, and release checks.
A practical design for keeping engine selection, sentence queues, playback, voice packages, and recovery behind one local speech service.
A practical design for packaging Piper, wrapping its CLI, and testing local speech synthesis across Windows, macOS, and Linux.
How to choose, benchmark, package, and isolate a local text-to-speech stack without treating a good demo as production evidence.
How an internal loopback API let us cache auth responses in Gravitee after the Groovy sandbox and OAuth2 resource ruled out simpler approaches.