What You'll Build
A local 13-language text-to-speech pipeline using OpenAudio S1 Mini — the 0.5 B-parameter distilled version of Fish Audio's S1 model — running on an RTX 4070. You'll launch the official tools.api_server from the fish-speech codebase, hit it with curl, and get back synthesised speech in any of English, Chinese, Japanese, German, French, Spanish, Korean, Arabic, Russian, Dutch, Italian, Polish, or Portuguese.
Hardware data: RTX 4070 (12 GB VRAM) · openaudio-s1-mini runtime fits in ~5 GB VRAM per a TrueNAS deployment that tested it on a 24 GB RTX 3090 and confirmed it loading on a 6 GB RTX A2000 (archy.net, 2026-02-17) · weights ~3.61 GB on disk · See benchmark data
ℹ️ The 12 GB card is over-provisioned for this 0.5 B model. S1 Mini's runtime footprint (~5 GB) leaves roughly 7 GB of the RTX 4070's 12 GB idle. That headroom is real but not the point of this recipe — S1 Mini fits comfortably on far smaller cards (it loads on a 6 GB RTX A2000 per archy.net). If you want to put the spare VRAM to work, you can colocate a second small model (e.g. a Whisper ASR model for a speech-to-speech loop) on the same card; that workload is out of scope here.
⚠️ Non-commercial, share-alike weights. The S1 Mini weights are licensed CC-BY-NC-SA-4.0 per the Hugging Face model card (confirmed via the HF API
cardData.license). This is not a permissive license: you may use the weights for research, demos, and personal projects, but the NC clause forbids commercial deployment or paid services, and the SA clause requires that any redistributed derivative carry the same CC-BY-NC-SA-4.0 terms with attribution. Thefish-speechcodebase itself ships under the "Fish Audio Research License" (repo LICENSE). For a commercially-usable open-weight TTS in the same VRAM class, see VoxCPM or Kokoro.
ℹ️ Repo recently renamed. The canonical Hugging Face slug
fishaudio/openaudio-s1-mininow 307-redirects tofishaudio/s1-mini— same model, same weights, samecc-by-nc-sa-4.0license. Both the redirecting old URL and the new one work; the install commands below use the path names the official docs expect.
Requirements
| Component | Minimum | Tested |
|---|---|---|
| GPU | 6 GB VRAM (model loaded on a 6 GB RTX A2000 per archy.net) | RTX 4070 (12 GB GDDR6X, 192-bit, AD104 sm_89) |
| RAM | 16 GB system | — |
| Storage | ~4 GB | 1.74 GB model.pth + 1.87 GB codec.pth (HF tree API) |
| Software | Python 3.12, PyTorch ≥ 2.5 with CUDA 12.6+, Linux/WSL2 | fish-speech (GitHub main) |
Installation
1. Clone the fish-speech repo
Per the official install guide:
git clone https://github.com/fishaudio/fish-speech.git
cd fish-speech
2. Create the environment and install dependencies
The official docs offer two paths — conda and uv — and three CUDA build extras: cu126, cu128, cu129. The RTX 4070 is Ada-class (compute capability sm_89), which is supported by every modern PyTorch wheel, so any of the three CUDA extras work and no special wheel selection is required:
uv sync --python 3.12 --extra cu126
Conda equivalent (official install guide):
conda create -n fish-speech python=3.12 -y
conda activate fish-speech
pip install -e .[cu126]
If you prefer a wheel from PyTorch's index directly, the Ada-tested combination is torch >= 2.5 from https://download.pytorch.org/whl/cu126, cu128, or cu129 — the three CUDA build extras documented by the official install guide. Unlike Blackwell GPUs (sm_120), the RTX 4070 needs no cu128-specific wheel — the default pip install torch already includes sm_89 kernels and full prebuilt FlashAttention-2 / Triton support, so you can keep flash_attention_2 wherever sample code enables it.
3. Authenticate with Hugging Face
The S1 Mini repo is gated (gated: auto on the HF API) — you must request access and accept the model's terms on the Hugging Face page, then log in locally:
huggingface-cli login
4. Download the weights
hf download fishaudio/openaudio-s1-mini --local-dir checkpoints/openaudio-s1-mini
This pulls ~3.6 GB of files (model.pth, codec.pth, config.json, tokenizer.tiktoken, special_tokens.json) into checkpoints/openaudio-s1-mini/, the path expected by the inference scripts. The size matches: "About 3.5 GB to download" per the archy.net deployment guide, and the live HF tree API reports 1.74 GB model.pth + 1.87 GB codec.pth = 3.61 GB total.
Equivalent Python form:
python -c "from huggingface_hub import snapshot_download; snapshot_download('fishaudio/openaudio-s1-mini', local_dir='checkpoints/openaudio-s1-mini')"
Running
Option A — API server (recommended)
The canonical entrypoint for serving S1 Mini is tools.api_server. The flags below come verbatim from the official Fish Audio Running Inference docs:
uv run --python 3.12 python -m tools.api_server \
--listen 0.0.0.0:8080 \
--llama-checkpoint-path "checkpoints/openaudio-s1-mini" \
--decoder-checkpoint-path "checkpoints/openaudio-s1-mini/codec.pth" \
--decoder-config-name modded_dac_vq
The --decoder-config-name modded_dac_vq is mandatory for S1 Mini — it pins the codec architecture variant the distilled model was trained against (official docs).
Synthesise a sentence with curl:
curl -X POST "http://127.0.0.1:8080/v1/tts" \
-H "Content-Type: application/json" \
-d '{"text": "Testing one two three."}' \
--output out.wav
Option B — Gradio WebUI
For an interactive UI, swap tools.api_server for tools.run_webui with the same checkpoint flags:
uv run --python 3.12 python -m tools.run_webui \
--llama-checkpoint-path "checkpoints/openaudio-s1-mini" \
--decoder-checkpoint-path "checkpoints/openaudio-s1-mini/codec.pth" \
--decoder-config-name modded_dac_vq
Then open http://127.0.0.1:7860.
Optional: --compile for faster repeat inference
Add the --compile flag to enable torch.compile optimisation for faster inference (official docs). The first call pays a one-time compile cost (10–30 s), after which subsequent calls run on a fused graph. The RTX 4070's ~7 GB headroom over the ~5 GB inference envelope leaves room for the compiled graph without OOM risk.
Results
- Speed: No measurement on the RTX 4070 has been published, and our backend has no benchmark for this pair yet (/check/openaudio-s1-mini/rtx-4070 returns
verdict: unknown). As external reference points only, an independent TrueNAS deployment (archy.net, Feb 2026) measured 4.85 s to synthesise the "Testing one two three." sentence on a 24 GB RTX 3090, and 9.35 s on a 6 GB RTX A2000. The RTX 4070 (Adasm_89, 12 GB GDDR6X, 192-bit, ~504 GB/s bandwidth) is in the same Ada generation as the RTX 3090's predecessor architecture but not a close enough sibling to either reference card to quote as a target number, so we do not extrapolate one. These are not RTX 4070 figures — submit a measured run via /contribute to seed/check/. - VRAM usage: ~5 GB during inference, measured on a 24 GB RTX 3090 and confirmed by the model loading on a 6 GB RTX A2000 (archy.net). The article states verbatim: "The model needs about 5GB of VRAM." This is consistent with the derived envelope from the live HF tree API — 1.74 GB
model.pth+ 1.87 GBcodec.pth= 3.61 GB on disk + activations. On the RTX 4070's 12 GB budget that leaves ~7 GB free for the OS desktop, browser,--compilegraph, batched generations, or a co-resident small model. - Quality notes: 13 languages supported (en, zh, ja, de, fr, es, ko, ar, ru, nl, it, pl, pt); emotion / tone markers like
(angry),(laughing),(whispering)are honoured per the HF model card. S1 Mini is a distillation of the larger S1 — quality is close but not identical.
For the full benchmark data, see /check/openaudio-s1-mini/rtx-4070.
Troubleshooting
OSError: You are trying to access a gated repo
You haven't requested access / accepted the model's terms, or aren't logged in. Visit the model page, click "Agree and access repository", then re-run huggingface-cli login with a token that has read access to gated repos. (An unauthenticated request to the repo's README returns HTTP 401 — that is expected for a gated repo, not a broken link.)
Codec config name confusion
If you copy-paste an older snippet that uses --decoder-config-name firefly_gan_vq (the pre-OpenAudio codec name), inference will fail with a config-load error. S1 Mini requires modded_dac_vq per the official Running Inference docs.
Out of memory on first generation
The model runs in ~5 GB but enabling --compile or sending very large prompt batches can push the working set higher. On the RTX 4070 (12 GB, bf16-capable) this is unlikely from the model itself — you have ~7 GB of headroom — but it can still bite if you stack additional models on the same card. Drop --compile, or add the --half flag, which the official docs describe for GPUs without bf16 support to use fp16 instead. The RTX 4070 (Ada) supports bf16 natively, so --half is normally unnecessary; reach for it only when juggling multiple co-resident models.
pip install -e .[cu126] fails to resolve a torch wheel
If wheel resolution stalls, switch to cu128 or cu129 — all three include sm_89 kernels and are functionally equivalent for the RTX 4070. Re-run:
pip install -e .[cu128]