Repository navigation
Releases: drowzeys/keys-ghost-machine-audio-visual-agent
Release list
v0.3.0: TensorFold 1.1.5
Boo moves to TensorFold 1.1.5. Bolt on a DGX Spark now runs on the stock TensorFold 1.1.5 release. The keys builds move to 1.1.5 as well: Bolt and Cosmos3-Edge on the Mac (one tensorfold-native with libbolt.dylib), and Cosmos3-Edge on CUDA.
To update, run the install command again, then kgm restart. In Docker, run docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.3.0.
- Same answers, same speed. Measured on an M5 Ultra against the 1.1.4 builds with the same flags:
- Bolt's greedy replies are identical (7 of 7). Its first token is 77–81 ms on 1.1.5 and 79–80 ms on 1.1.4, at about 96 tokens a second on both.
- Cosmos3-Edge's camera answers are identical (7 of 7), with a 78 ms first token on both.
- The Mac's Drama 3 stays on the 1.1.4-keys.1 engine. The Mac archive ships it as
bin/tensorfold-drama.- Stock 1.1.5 can read the NVFP4 pruned checkpoint on Metal and reuse a voice's reference prefill. Its first audio in a named voice, however, was 107–343 ms, against a steady 67–79 ms for the keys engine.
- The DGX Spark's Drama 3 is unchanged: plotarmordev's NVFP4 fork with the voice-prefix cache and the silence guard.
- The v0.2.2 fixes stay. The DGX Spark no longer speaks a Drama 3 keep-warm line, and the TensorFold engines in the Docker image keep cuBLASLt 13.1.
Mac voice to voice (16 synthetic questions): Full 0.45–0.71 s, Lite 0.53–0.57 s.
Assets: keys-boo-tensorfold-1.1.5-macos-arm64.tar.gz and keys-boo-tensorfold-1.1.5-linux-aarch64.tar.gz, each with its .sha256. These are unofficial community builds of TensorFold (Apache-2.0); each archive has its own README, change list, licences and SHA256SUMS.
v0.2.2 (superseded by v0.3.0): DGX Spark Full voice ~0.5 s voice to voice
Superseded by v0.3.0.
A speed fix for v0.2.1: the DGX Spark's Full voice (Drama 3) answers in about 0.47–0.55 s voice to voice instead of 1.0–1.1 s. Update by running the install command again (it pulls the new code and keeps your models), then kgm restart; in Docker, pull 0.2.2.
Fixes
- No Drama 3 keep-warm line on the DGX Spark. While you spoke, Boo kept Drama 3 busy with a throwaway "Mm.". The Spark's CUDA Drama 3 runs one synthesis at a time, so when you stopped, the reply's first sentence waited (503, retried) until that line ended, and the extra speech also slowed speech recognition and Bolt. On CUDA Drama 3 starts fast from idle anyway (~115 ms first audio), so the Spark profile now sets
"keep_warm": falseon the voice. Bolt is still kept warm; the Mac is unchanged. Applies to native installs and Docker. - Docker: Drama 3 is back on its fast kernel. The base image's cuBLASLt 13.6 made the Spark Drama 3 build turn its one-row tower kernel off. The TensorFold engines in the image now get the cuBLASLt 13.1 they are qualified with; PyTorch keeps the image's own.
Measured on one DGX Spark in Docker, 7 synthetic questions, two passes each, 0.5 s and 8 s between turns:
| v0.2.1 | v0.2.2 | |
|---|---|---|
| Voice to voice, median | 1.01–1.13 s | 0.47–0.55 s |
| Speech recognition | 53–61 ms | 28–30 ms |
| Bolt first token (from end of speech) | 182–189 ms | 92–96 ms |
| First audio (from end of speech) | 880–1001 ms | 308–422 ms |
Install
curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash # Drama 3
curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash -s -- --voice lite # Kokoro-82M
docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.2Image: ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.2 (also latest), digest sha256:db11ca335e08f033a669900316563bde8bd6c80843db52d53c50e51262e0adc0.
Builds
The two engine archives are the v0.2.0 files, unchanged (same SHA-256), re-attached here so the installer finds them:
keys-boo-tensorfold-1.1.4-macos-arm64.tar.gz:409b8572896316c66ff9e91d778aeab9ba8c85191fed629441698160a7874b8dkeys-boo-tensorfold-1.1.4-linux-aarch64.tar.gz:0b95dd1d83ca2c4df3f557e7495ef1e1ac8a039e2b82ed6129b22670b670a545
Their contents, licences and sources are described in the v0.2.0 release and the README.
v0.2.1 (superseded by v0.2.2): fresh DGX Spark installs connect again; no "(Boo says)"
Superseded by v0.2.2: the DGX Spark Full voice answers in ~0.5 s instead of 1.0-1.1 s. Use v0.2.2 and image
0.2.2.
A fix release for v0.2.0. Update by running the install command again (it pulls the new code and keeps your models), then kgm restart; in Docker, pull 0.2.1.
Fixes
- Fresh DGX Spark installs 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 intob" " * 1). That broke uvicorn's status lines and websockets' parser, so the page never connected, and left damaged.pycfiles. Boo now gives NVRTC its own buffer. (The v0.2.0 Docker image was not affected.) - "(Boo says)" at the start of a reply. After a Full/Lite or voice switch, the sample line went into the conversation as "(Boo says) Hi, this is how I sound now.", and Bolt could copy the label, or the whole line, into its next replies. The sample is no longer kept, Boo's own short lines are kept without a label, and a leading stage direction such as "(Boo says)" is dropped before a reply is spoken or stored.
- Docs: the Mac's Drama 3 first audio in the speed table is ~60 ms on TensorFold 1.1.4 with the engine warm, as in a conversation. It said 122 ms, which is the figure after the engine has sat idle.
Install
curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash # Drama 3
curl -fsSL https://raw.githubusercontent.com/drowzeys/keys-ghost-machine-audio-visual-agent/main/install.sh | bash -s -- --voice lite # Kokoro-82M
docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.1Builds
The two engine archives are the v0.2.0 files, unchanged (same SHA-256), re-attached here so the installer finds them:
keys-boo-tensorfold-1.1.4-macos-arm64.tar.gz:409b8572896316c66ff9e91d778aeab9ba8c85191fed629441698160a7874b8dkeys-boo-tensorfold-1.1.4-linux-aarch64.tar.gz:0b95dd1d83ca2c4df3f557e7495ef1e1ac8a039e2b82ed6129b22670b670a545
Their contents, licences and sources are described in the v0.2.0 release and the README.
Keys Ghost Machine v0.2.0 — Kokoro Lite voice + fixes, powered by TensorFold 1.1.4
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=bothin 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|bothswitches. Pick a Kokoro voice in the page's Voice list
(bf_emmaby default,af_heartis Kokoro's best rated) or setKOKORO_VOICE=af_heartin 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 toretry_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 sharedb" "object (an empty NVRTC log read intob" " * 1), which broke uvicorn's status lines and
websockets' parser and left damaged.pycfiles. 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 liteor--voice bothto 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);/healthreports 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.
Keys Ghost Machine v0.1.0 — powered by TensorFold 1.1.4
Superseded by v0.2.0 — please use v0.2.0 (fixes Drama 3 long-line stalls with the silence guard on the DGX Spark and stall resume, the deafness after fast short replies, Drama 3 503 "speech output capacity is full" errors, Bolt repetition loops and interrupted replies in the history; adds the Kokoro-82M Lite voice). Docker:
ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.2.0.
Keys Ghost Machine v0.1.0: a hands-free audio/visual agent, powered by TensorFold
Meet Boo: talk to it from your phone, show it things through your camera, and let it hand real work to a tool-using agent, with no keyboard and no terminal. It runs entirely on your own hardware, on a DGX Spark or an Apple silicon Mac, and you reach it from anywhere on your private Tailscale network.
▶ 46-second demo: https://github.com/drowzeys/keys-ghost-machine-audio-visual-agent/blob/main/docs/media/promo-45s.mp4
What it does
- Speech in, speech out: Parakeet v3 hears you, Nemotron 3.5 Bolt answers, Drama 3 speaks, starting about half a second after you stop talking on a Mac.
- Sees through your camera: Cosmos3-Edge describes what's in front of you, reads text, and tells your left from your right on a selfie camera; the hand tracker counts fingers exactly.
- Live facts in seconds: questions about the president, the weather or the news are looked up on the web in the same turn.
- Real work in the background: "ask Hermes…" hands a task to a tool-using agent, which asks you out loud before running anything that changes your machine.
- Remembers: camera captions every 1 s to 15 min while the camera is on, kept 1 day to 1 week.
- Yours to shape: name it, pick one of 14 voices (Vesper is the default), and turn on the Futuristic effect.
Measured (TensorFold 1.1.4)
| Apple silicon Mac | DGX Spark | |
|---|---|---|
| Voice to voice | 0.47–0.60 s | 0.55–0.77 s |
| Camera answer (first token) | 79 ms | 103 ms |
| Voice starts (Vesper) | 122 ms | 121 ms |
Requirements
- Mac: Apple silicon with 96 GB unified memory minimum (128 GB+ recommended).
- DGX Spark: one Spark (128 GB), about 64 GB free.
- Disk: about 50 GB for the models.
Get it
- Code (MIT): https://github.com/drowzeys/keys-ghost-machine-audio-visual-agent
- Prebuilt Mac and DGX Spark builds of TensorFold 1.1.4: https://github.com/drowzeys/keys-ghost-machine-audio-visual-agent/releases/tag/v0.1.0
- Docker image (DGX Spark):
docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.1.0 - 14 voices + model card: https://huggingface.co/drowzeys/keys-ghost-machine-audio-visual-agent
- TensorFold source branches: https://github.com/drowzeys/TensorFold
Built on the work of many people: NVIDIA (Bolt, Cosmos3-Edge, Parakeet), Fish Audio (Drama 3) and plotarmordev's NVFP4 build, Ash Hart (TensorFold), tonyd2wild (Eyes of Kai), Nous Research (Hermes), the qwen-audio-agent design, Silero, MediaPipe, Three.js and more. The full list is in the Credits section of the README. These are unofficial community builds of TensorFold, not official releases.
Questions and bug reports: GitHub Issues.
Build details
Prebuilt TensorFold builds and a Docker image for Boo, built on TensorFold 1.1.4.
These are unofficial community builds of TensorFold by drowzeys (Apache-2.0), not official TensorFold releases. Model weights are not included.
Assets
| File | Platform | Contents |
|---|---|---|
keys-boo-tensorfold-1.1.4-macos-arm64.tar.gz |
Apple silicon, macOS 26+ | One tensorfold-native that serves Nemotron 3.5 Bolt (with libbolt.dylib), Drama 3 NVFP4 with named voices and the voice-prefix cache, and Cosmos3-Edge on Metal |
keys-boo-tensorfold-1.1.4-linux-aarch64.tar.gz |
DGX Spark (GB10), CUDA 13 | tensorfold-cosmos3 (Cosmos3-Edge on CUDA, 1.1.4) and tensorfold-drama3-nvfp4 (plotarmordev's NVFP4 Drama engine + voice-prefix cache). Bolt uses the stock TensorFold 1.1.4 release |
Each archive has README.md (requirements and run commands), CHANGES.md (every commit on top of upstream), LICENSE, NOTICE, THIRD_PARTY_NOTICES.md, LICENSES/ and SHA256SUMS. Check the archive against its .sha256 file.
Docker (DGX Spark)
docker pull ghcr.io/drowzeys/keys-ghost-machine-audio-visual-agent:0.1.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.1.0See docker/README.md.
Source
https://github.com/drowzeys/TensorFold branches bolt-metal-114, drama3-metal-voices-114, cosmos3-metal-114, cosmos3-cuda-114, drama3-cuda-voices.
Verified
- macOS (M5 Ultra): Bolt answers greedy chat identically to the source build; Drama 3 audio is byte-identical to the live build; Cosmos3-Edge serves text and images.
- DGX Spark: Drama 3 audio is byte-identical to the live Spark build; Cosmos3-Edge gives the same answers as the live server and matches the transformers reference (cosine 0.9998).
Credits
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. Full list in CREDITS.md.