Skip to content

Releases: ashmere/NuinTalker

v0.2.2 — Imported boards render at native size

Choose a tag to compare

@ashmere ashmere released this 28 Apr 18:47
v0.2.2
a327bbc

Imported OBF boards (e.g. Project Core, 6×6) now render at their author-specified dimensions instead of being forced through the user's gridSize setting. Gap-size scales down for dense imports so cells stay readable.

v0.2.1 — Project Core import fix

Choose a tag to compare

@ashmere ashmere released this 28 Apr 18:33
v0.2.1
79e2335

Bug fix release

Real-world OBF files (CoughDrop exports, the Project Core example from openboardformat.org/examples) use integer button ids, not strings. The v0.2.0 parser threw on these. This release coerces ids to strings and accepts `null` entries in `grid.order` as empty cells.

Cross-checked against the official OBF Ruby gem — the gem accepts whatever the JSON contains because Ruby is dynamically typed. Our string coercion brings parity with what real-world exporters produce.

The Project Core fixture (CC BY-SA, attributed in `NOTICE`) is now part of the test suite.

v0.2.0 — Open Board Format import

Choose a tag to compare

@ashmere ashmere released this 28 Apr 18:15
v0.2.0
4944396

NuinTalker v0.2.0

Live at https://ashmere.github.io/NuinTalker/ once the deploy workflow finishes.

What's new

  • OBF / OBZ vocabulary import: Carers can import a .obf or .obz file from any AAC tool that exports the Open Board Format — PrAACtical AAC samples, OpenAAC, CoughDrop public boards. From Settings → "Imported boards", click the file picker; the imported board joins the Vocabulary dropdown alongside the built-in YAMLs.
  • Inline data-URL images and ZIP-bundled images both work; everything stays on-device.
  • Multi-board navigation (load_board links) is parsed but not yet auto-traversed on dwell-select — each .obz board is selectable as its own vocabulary.

Implementation

  • New ADR 0006-fflate-for-obz.md — fflate (~12 KB MIT) for in-browser ZIP reading.
  • Pure parsers obfImporter.ts (12 unit tests) and obzImporter.ts (7 unit tests) keep parsing logic side-effect-free.
  • IndexedDB persistence (saveImportedBoard / getImportedBoard / listImportedBoards) survives offline reload.
  • Playwright e2e covers the upload → switch → speak path.

Privacy

Same posture as v0.1.0: imported files stay on your device. No upload, no telemetry.

v0.1.0 — first web release

Choose a tag to compare

@ashmere ashmere released this 27 Apr 18:49
v0.1.0
daacb2a

NuinTalker v0.1.0

First public release of the web rewrite. Replaces the Flutter/Dart implementation (preserved at the v0-dart-archive tag).

Live site: https://ashmere.github.io/NuinTalker/

What's in this release

Tracking

  • MediaPipe Tasks for Web FaceLandmarker (478 landmarks + iris) on-device
  • Eye-corner-referenced iris position with One-Euro filter smoothing
  • Head pitch + yaw from the facial transformation matrix as the dominant signal
  • 9-point per-user affine calibration
  • Dwell selector with configurable jitter tolerance, cool-down, and exit-grace

UI

  • Flank-3x3 default layout: hardcoded "More" / "All Done" flank slots, paginated 9-cell centre
  • Mulberry SVG symbols (CC BY-SA 4.0)
  • Single ARASAAC pictogram for "stop" (CC BY-NC-SA 4.0 — see ADR 0005)
  • Diagnostic HUD (Cmd+D / Ctrl+D)
  • Carer-lock (Cmd+S / Ctrl+S, or four-corner long-press)
  • Vocabulary tailored for tube-fed users (single "hunger" cell)
  • Sentence bar with horizontal scroll keeps a stable height

Architecture

  • Vite 7 + React 19 + TypeScript 6 strict
  • Zustand stores, Tailwind v4, Web Speech API, idb-keyval, vite-plugin-pwa
  • 106 Vitest units, Playwright e2e dwell-to-speak

Browser support

  • Chrome / Edge: first-class
  • Firefox: best-effort
  • Safari: not supported (Web Speech voice quality, getUserMedia constraints)

Privacy

All face landmarking, gaze inference, dwell timing, TTS, and persistence happen in the browser on your device. No video, audio, transcript, gaze trace, or usage event leaves the device.

What this release does not do yet

  • Open Board Format (OBF) import — drafted in specs/002-obf-import, implementation comes next
  • Multi-profile UI (one profile per browser today)
  • Word prediction
  • Non-English voices beyond what Web Speech ships

Licence note

Shipping the ARASAAC stop.png symbol restricts the project to non-commercial use under CC BY-NC-SA 4.0. To enable a commercial path, replace that one file (the rest of the symbol set is Mulberry CC BY-SA 4.0). See NOTICE.