Local-first AI systems and public demos

Run it. Teach it. Inspect it.

Crunchy Codes is my public workshop for Open Day experiences, local model infrastructure, and practical tools that make AI systems easier to explain, operate, and trust.

idea build ship
Open Day Public demos
Local AI Model runtime
Desktop Practical tools
Illustrated avatar of Dr Jason Holdsworth

Who am I

Dr Jason Holdsworth

I build practical local-first tools.

I'm Dr Jason Holdsworth, a Digital Technology academic and educator at James Cook University, and the maker behind Crunchy Codes. My work sits around local-first software, practical AI tools, public teaching demos, and human-AI interaction experiments.

Digital Technology educator Local-first software Teaching demos Human-AI interaction

Now building

Recent public work.

  1. SafeSet DOCX protection, restoration validation, and Windows private-storage foundations
  2. Token Trail hosted demo with a pinned, memory-only next-token trace service
  3. Overdraw XP-Pen input diagnostics and display-mapping guidance
  4. ModelDeck offline SceneChat corpus review with fixed metadata and local JSON saves
  5. Red Dust Rover classroom search-algorithm simulator with animated BFS and A*

Projects

Recent public portfolio.

The latest repositories form a connected local-first lab: public experiences for teaching AI, shared infrastructure for running and evaluating models, and practical tools for the machines hosting them.

Project lanes

Open Day experiences

Visitor-ready experiments that make tokens, computer vision, speech, cybersecurity, and human oversight visible enough to discuss.

Project lanes

Local AI infrastructure

Shared runtimes, routing and conversion workbenches, evaluation harnesses, local model clients, and explicit offline fallbacks for dependable, inspectable experiments.

Project lanes

Practical tools and maker projects

Focused GNOME, Android, macOS, VS Code, and desktop projects for inspecting local state and exploring useful software ideas.

Local desktop tool / private speech-to-text

SpeakText

Private local dictation for Fedora GNOME Wayland using whisper.cpp and an IBus input method. Configurable Shift or Control gestures drive record, review, and commit with revisable in-place previews; audio and transcripts stay in memory. When no default source is configured, it can select a sole physical microphone safely. While dictation is active, ordinary editor keys are held so they cannot submit a chat or move focus before review is complete.

Python whisper.cpp GNOME Wayland IBus

Fedora desktop tool / screenshots and GIFs

Grab

A GNOME top-bar capture tool for whole-desktop screenshots and silent GIF recordings on Wayland. It supports clipboard capture, crop and pen editing, optional PNG saving, and private temporary editing copies retained for no more than 24 hours.

Python GTK 4 GNOME Wayland Local-first

Replay-first MVP / local speech

SpeechShift

An honest speech-transformation demo with prepared local voice and language shifts, plus an opt-in, memory-only microphone path. Its local DSP baseline transforms captured audio without pretending to recognise or translate the visitor's words.

Python FastAPI Local audio Privacy-first

Active build / speech-following iPhone teleprompter

FollowScript

A native iPhone teleprompter that follows spoken progress through prepared scripts using local speech recognition where supported. Its presentation library keeps editable or imported scripts with local audio and video takes, while bounded alignment, manual repositioning, and explicit pause controls keep the speaker in charge.

SwiftUI Local speech Audio and video takes No app backend

macOS app / local RAW photo triage

CameraShotPicker

A small SwiftUI tool for reviewing camera RAW files from an SD card or local folder, ranking likely sharp images with an adjustable heuristic, manually refining the selection, and copying chosen originals to an export folder. File access stays scoped to user-selected folders and needs no external service.

SwiftUI RAW images Sharpness ranking Local-first

Research POC / Windows pen overlay

Overdraw

A Windows-first proof of concept for drawing over a full-screen, click-through visual layer while ordinary mouse and keyboard input continues to reach the underlying apps. It explores signed UIAccess builds, pointer-target pen input, diagnostic fallback hooks, and display-mapping checks for pen displays.

C# .NET 8 WinForms and Win32 Pen diagnostics

Open Day demo / staged text refinement

Text Diffusion Lab

A public explanation of generation by iterative refinement rather than next-token prediction. The visitor experience has a reliable scripted path, while staff can run the published DiffusionGemma Q4 variant through ModelDeck's native job API with explicit readiness, progress, and cancellation handling.

TypeScript Teaching demo DiffusionGemma Scripted fallback

Active build / cybersecurity awareness

Can You Spot the Scam?

A local-first game where visitors investigate fictional messages, flag warning signs, choose safe responses, and solve approachable cipher cases with concise educational feedback.

Teaching demo / pathfinding on Mars

Red Dust Rover

An interactive classroom simulator for Years 5–9 that generates a 20 × 20 Mars terrain and animates breadth-first search or A* finding a route around hazards. Step controls, explanations, path length, cells explored, timing, and Mars facts make the algorithms visible.

MVP 0.2 / human oversight demo

Humans in the Loop

A QR phone-to-screen experience where a crowd sets goals and rules, reviews a deterministic AI-style proposal, and decides when to accept, repair, seek evidence, or involve a person.

Live demo / token-level generation

TokenTrail

See a small open model generate one token at a time, with real next-token probabilities and alternatives at every step. The hosted demo runs independently of the local TokenTrail setup.

Research MVP / local voice conversation

Repartee

An interruptible voice-conversation experiment where a weak local speech layer owns timing and bounded replies, then escalates more substantive requests to ModelDeck through the same output path.

Android maker project / adaptive live wallpaper

Bouncer

An Android live wallpaper that turns glowing-ball physics into a configurable device experiment, with two-stage preview and wallpaper calibration, live frame-timing telemetry, adaptive performance controls, optional collisions, and visual controls.

VS Code extension / local usage visibility

Codex Local Meter

A local-first status-bar extension that reads Codex session files, shows reported rate limits and a rolling 15-minute token pace, and keeps session content on the device. Optional live account reads use the locally installed Codex App Server without starting a model turn or sending session content.

macOS menu bar app / local usage visibility

Codex Local Meter App

A native macOS companion to the VS Code extension that reads local Codex session files and keeps reported rate limits separate from fixed-window activity estimates. Optional live account reads use the local Codex App Server without starting a model turn or sending session content.

GNOME extension + host safety service / Framework Desktop

System Usage Monitor

A Fedora 44 top-bar monitor for RAM, storage, temperature, fan readings, and configurable local JSONL history, with an optional Auto-Powersaver service that exposes explicit operating modes, hot protection, and competing-controller diagnostics.

Desktop app and CLI / model library

HuggingFacePull

A local FastAPI, Electron, and command-line tool for finding, grouping, queueing, and downloading Hugging Face model snapshots. It honours standard cache overrides, supports low-concurrency or opt-in Xet transfers, and separates library-record removal from deletion of cached model data.

Local-first principles

Tools should explain themselves.

Recent Crunchy Codes projects favour explicit user control: local files over hidden services, recoverable downloads over silent failure, and privacy-safe metadata over unnecessary telemetry.

Stay close to the user

Read local state directly, keep sensitive content on-device, and avoid network calls unless the tool genuinely needs them.

Make progress recoverable

Large downloads, long chats, and local experiments should preserve work instead of forcing people to start over.

Keep the controls visible

Prefer plain commands, clear status, and inspectable behaviour over magic that leaves the user guessing.

Contact

Questions, bugs, and project support

For project support, feature ideas, bug reports, or security concerns, use the support page or the issue tracker linked from the relevant project.

Open support