Skip to content

Keys Ghost Machine v0.2.0 — Kokoro Lite voice + fixes, powered by TensorFold 1.1.4

Choose a tag to compare

@drowzeys drowzeys released this 25 Oct 19:15
· 5 commits to main since this release

Superseded by v0.2.1 (fixes fresh DGX Spark installs).

Keys Ghost Machine v0.2.0: Kokoro Lite voice and stability fixes, powered by TensorFold 1.1.4

Kokoro Lite, a second voice for smaller machines. Kokoro-82M
(hexgrad, Apache-2.0) can now speak for Boo instead of Drama 3, or beside it with a switch in the page. It is for
memory-constrained hardware: a DGX Spark that shares its memory with other work, or a Mac at the low end of the
requirements. Everything else (Bolt, Cosmos3-Edge, Parakeet, Eyes of Kai, Hermes) stays the same.

  • Install Lite, DGX Spark (about 48 GB free memory):
    curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash -s -- --voice lite
  • Install Lite, Mac (Apple silicon, macOS 26+; 96 GB comfortable, 64 GB tight): the same command,
    curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash -s -- --voice lite
  • Docker, Lite (DGX Spark, no Drama 3 mount needed):
    docker run --gpus all --rm -p 8095:8095 -e VOICE_ENGINE=lite -e KAI=1 \
      -v ~/keys-ghost-machine/models/NVIDIA-Nemotron-3.5-Bolt-74B-A9B-24GB:/models/bolt \
      -v ~/keys-ghost-machine/models/cosmos3-tf:/models/cosmos3 -v ~/models/hf-cache:/models/hf-cache \
      ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.0
  • Both, with a Full/Lite toggle: install with --voice both (or -e VOICE_ENGINE=both in Docker, with the
    Drama 3 mount) and the page shows a Full / Lite switch per conversation; the voice list follows the engine.
    On an existing install, kgm voice full|lite|both switches. Pick a Kokoro voice in the page's Voice list
    (bf_emma by default, af_heart is Kokoro's best rated) or set KOKORO_VOICE=af_heart in Docker.
  • Trade-off: on a DGX Spark Lite answers in about 0.33–0.40 s voice to voice (Full 0.55–0.77 s) and uses about
    40 GB less memory. On a Mac it is about as fast as Full and saves about 9 GB. Lite speaks English only in Boo and
    has no voice cloning, emotion control or the 14 Drama 3 voices.

Kokoro Lite vs Drama 3 (4-bit)

Kokoro Lite Drama 3 4-bit (NVFP4)
Model 82M parameters, ~330 MB Billions of parameters, 4-bit NVFP4
Voice-engine memory: DGX Spark ~3.5 GB ~42 GB
Voice-engine memory: Mac ~0.8 GB ~10 GB
Voice starts: Spark 33–40 ms 112–121 ms
Voice starts: Mac 51–54 ms ~60 ms
Voice to voice: Spark 0.33–0.40 s 0.55–0.77 s
Voice to voice: Mac 0.49–0.64 s 0.43–0.61 s
Naturalness (UTMOS) 4.35 (bf_emma) – 4.52 (af_heart) 4.53 (Vesper)
Voices 54 built in 14 custom, incl. Vesper
Voice cloning No Yes
Emotion/style control No Yes
Long-line stalls None Occasional; fixed by the silence guard + resume in v0.2.0
Streaming Whole sentence (<0.13 s) Streams within a sentence
Languages EN, ES, FR, IT, PT, HI, JA, ZH Wider, incl. German
Licence Apache-2.0 Fish Audio Community License (hosted commercial use needs a Fish licence)

Spark: Lite is twice as fast and frees ~40 GB. Mac: same speed, so run both and keep Vesper with a Lite toggle.
Choose Drama for a signature voice, cloning, emotion or German; choose Kokoro for small or shared hardware, an Apache
licence or the lowest delay.

Fixes

  • Drama 3 long-line stalls: a long reply that went quiet after its first sentence (on about 1 in 5 paragraph-length
    lines) is now caught. The DGX Spark's Drama 3 build gains TensorFold 1.1.4's silence guard (new in the v0.2.0
    Linux archive and the Docker image), the Mac build already had it, and Boo itself drops a stalled take's quiet tail
    and asks for the unspoken rest.
  • Never deaf after a fast short reply: a quick reply such as "I'm on it." could leave Boo marked as still
    speaking, and the session stopped listening. Fixed (64 of 64 turns heard in testing).
  • Drama 3 "speech output capacity is full" (503): the keep-warm loop no longer outlives its page or a stopped
    microphone (it stops on disconnect, after 2 s without audio and after 60 s), warms with one "Mm." at a time and never
    while anything is being said; a refused line is asked again for up to retry_s (6 s) instead of being lost; a
    stopped turn frees its speech slot at once.
  • DGX Spark installs: the page could not connect after Parakeet warmed up. NeMo's CUDA-graph decoder wrote a NUL
    into Python's shared b" " object (an empty NVRTC log read into b" " * 1), which broke uvicorn's status lines and
    websockets' parser and left damaged .pyc files. Boo now gives NVRTC its own buffer (the Docker image was not
    affected).
  • Bolt repetition loops: a reply that starts repeating a sentence it already said ends there, unsaid.
  • Interrupted replies stopped before their first word no longer leave "(interrupted)" in the history for the
    brain to copy.
  • The reference Mac now runs voice_engine: both, with the Full/Lite toggle tested live.

Assets

File Platform Contents
keys-boo-tensorfold-1.1.4-macos-arm64.tar.gz Apple silicon, macOS 26+ Unchanged from v0.1.0: one tensorfold-native for Bolt (with libbolt.dylib), Drama 3 NVFP4 with named voices, the voice-prefix cache and 1.1.4's silence guard, and Cosmos3-Edge on Metal
keys-boo-tensorfold-1.1.4-linux-aarch64.tar.gz DGX Spark (GB10), CUDA 13 Updated: tensorfold-drama3-nvfp4 now has TensorFold 1.1.4's silence guard flags (drowzeys/TensorFold drama3-cuda-voices-guard, 240ab0fb; good takes byte-identical, first audio unchanged); tensorfold-cosmos3 unchanged. Bolt uses the stock TensorFold 1.1.4 release

Each archive has README.md, CHANGES.md, LICENSE, NOTICE, THIRD_PARTY_NOTICES.md, LICENSES/ and SHA256SUMS; check it against its .sha256 file. These are unofficial community builds of TensorFold (Ash Hart, Apache-2.0), not official releases. Model weights are not included. The one-shot installer now fetches v0.2.0 and, on a re-run, replaces a v0.1.0 build.

Docker (DGX Spark)

docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.0
docker run --gpus all --rm -p 8095:8095 \
  -v ~/models/bolt:/models/bolt -v ~/models/drama:/models/drama -v ~/models/cosmos3:/models/cosmos3 \
  -v ~/models/hf-cache:/models/hf-cache -e KAI=1 \
  ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.0

-e VOICE_ENGINE=lite (no Drama mount) or -e VOICE_ENGINE=both (Full/Lite switch); KOKORO_VOICE picks the Kokoro voice. :latest now points at 0.2.0. See docker/README.md.

Upgrading

  • One-shot install: run the installer again (it takes the code from main, which also has the DGX Spark connection fix made right after tagging; add --voice lite or --voice both to change the voice); it updates the code and the DGX Spark build, and keeps your models.
  • Docker: docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.0.

Verified

  • Docker 0.2.0 on a DGX Spark in all three modes: full (Drama 3 with the silence guard on, Vesper first audio ≈ 135 ms), lite (Kokoro-82M, a sentence in ≈ 45 ms), both (a spoken turn in each engine, switched over the page's Full/Lite message); /health reports the engines.
  • The DGX Spark Drama 3 build with the guard: byte-identical audio to v0.1.0's on a 15-line stall set when no take stalls, same first audio.

Credits

Kokoro-82M, kokoro and misaki by hexgrad (Apache-2.0); mlx-audio by Prince Canuma (MIT); spaCy and en_core_web_sm by Explosion (MIT); espeak-ng (GPL-3.0); StyleTTS 2 (Yinghao Aaron Li et al., MIT); TensorFold (Ash Hart, Apache-2.0); the NVFP4 Drama 3 engine and checkpoint by plotarmordev; Nemotron 3.5 Bolt, Cosmos3-Edge and Parakeet v3 by NVIDIA; Drama 3 by Fish Audio (Fish Audio's licence applies to Drama 3 and its outputs); Eyes of Kai by tonyd2wild; Hermes by Nous Research. Full list in CREDITS.md.

Questions and bug reports: GitHub Issues.