plotarmordev / drama-tensorfold
git clone https://github.com/plotarmordev/drama-tensorfold.git
Fish Audio Drama 3 text-to-speech on the TensorFold native CUDA engine for DGX Spark (GB10): recipe, engine patches, benchmarks. Built with Fish Audio.
+37
stars, 24h · #404
+82
stars, 7 days · #1,567
+82
stars, 30 days · #6,323
106
★ total · +82% this week
5
forks · 1 open issues
Star history (as recorded here)
LanguagePython
LicenseApache-2.0
Created2026-10-16 (6d ago)
Last pushtoday
Watchers1
OwnerUser
Links
README excerpt
# drama-tensorfold **Fish Audio's Drama 3 text-to-speech, about 1.5x faster on an NVIDIA GB10, on TensorFold's native Zig/CUDA engine.** This repository patches TensorFold to run Drama 3. It builds the engine and starts a local speech server with an OpenAI-style `/v1/audio/speech` route, whole or streamed. It also holds every benchmark and accuracy check behind the numbers below. **Built with Fish Audio.** The model weights are not in this repository; you download them from Hugging Face under Fish Audio's own license. | I want to... | Use | What you get | |---|---|---| | Run Drama 3 on my GB10 | Quickstart | A local speech server, first audio in about 0.14 s | | Check the speed claims | `bench/` | Run the comparison on your machine | | Check the accuracy | `qualification/` | Every gate against the reference, with its honest result | ## Reference vs native On the same GB10 host (DGX Spark class, CUDA 13 libraries), one engine at a time: the stock sglang-omni reference against the final native build. Each engine read 24 English texts 3 times, with no failures on either. The results were independently reviewed. | Warm, p50 | sglang-omni reference | TensorFold native | Speedup | |---|---:|---:|---:| | Real-time factor (lower is faster) | 0.939 | 0.634 | **1.48x** | | Typical clip (about 8 s of audio), whole reply | 7.93 s | 4.89 s | **1.62x** | | First audio, streaming | 0.521 s | 0.141 s | **3.7x** | | Short texts (19–47 characters) | 2.50 s | 1.86 s | **1.35x** | | Medium texts (114–144 characters) | 7.93 s | 4.89 s | **1.62x** | | Long texts (283–313 characters) | 20.22 s | 12.90 s | **1.57x** | | Process start to ready (single start, reused caches) | 254 s | 6.4 s | **39x** | The last row is one start per engine, not a median and not disk-cold. The reference's admission and page-cache conditions differed from native's, and that effect was not isolated. Evidence: `results/before-after-02/`, and where each number comes from: provenance. The speed work changed no audio: all 46 normal test replies stayed byte-identical across the 14 speed patches. These numbers predate patch 0040, which trades about 5% of this speed for accuracy (see Status). ## Quickstart You need Linux with user systemd, CUDA 13, Zig 0.17.0 and 88 GiB of free memory at load (the server is capped at 54 GiB). The checkpoint alone takes about 39 GiB of disk; the engine checkout, build and runtime caches need more. The launcher takes your host's shared GPU lock, the one every GPU job on the machine already uses, so two models never load at once. Set `GPU_LOCK` to that file. Only if the host has none, create one with `touch` and make your other GPU jobs use it too. [code] When it prints `DRAMA_PILOT_READY`, synthesize from another terminal. The second command streams and plays as it arrives: [code] ### Try it with your coding agent [code] HTTP contract `POST /v1/audio/speech` takes `model` (`fishaudio/drama-3`), `input` (at most 4096 characters), `voice` (`default`, or a name lo