Soundeffekte per Textprompt erzeugen, komplett lokal und ohne Cloud. Genau das leistet Stable Audio 3 Small SFX von Stability AI. Das Modell ist klein, schnell und läuft auf jeder halbwegs aktuellen GPU. In dieser Anleitung installiere ich es auf einem Ubuntu Server mit einer NVIDIA RTX 6000 Ada Generation. Am Ende hast Du einen eigenen API Endpunkt, den Du aus jeder Anwendung im Netzwerk ansprechen kannst.
Der Weg dorthin ist überschaubar. Fünf Phasen, dann läuft es.
Warum dieses Modell
Stability AI hat im Mai 2026 die Modellfamilie Stable Audio 3 veröffentlicht. Drei Varianten sind als Open Weights auf Hugging Face verfügbar. Small SFX ist die kleinste davon und speziell auf Soundeffekte optimiert.
- 433 Millionen Parameter, das ist winzig für ein Diffusionsmodell.
- Peak VRAM rund 1,7 bis 2,4 GB, je nach Länge der Ausgabe.
- Bis zu 120 Sekunden Audio pro Generierung.
- 44,1 kHz Stereo als Ausgabeformat.
- Läuft auch ohne GPU, reine CPU Inferenz ist möglich.
Der geringe VRAM Bedarf ist der eigentliche Clou. Auf meinem Server laufen bereits andere Dienste auf derselben Karte. Zwei bis drei Gigabyte extra fallen dabei kaum ins Gewicht. Das Modell darf also einfach danebenwohnen.
Wichtig für die Praxis: Small SFX braucht kein Flash Attention. Das gilt nur für die Medium Variante. Damit entfällt der komplette Kompilierungsaufwand. Wenn Du im Log später die Meldung flash_attn not installed siehst, ist das kein Fehler. Der Code schaltet sauber auf die Standard Attention um.
Voraussetzungen
| Komponente | Anforderung |
|---|---|
| Betriebssystem | Ubuntu 22.04 oder 24.04 |
| GPU | NVIDIA mit mindestens 4 GB VRAM, bei mir eine RTX 6000 Ada |
| Treiber | Aktueller NVIDIA Treiber, passend zu Deiner CUDA Version |
| Python | wird über uv verwaltet |
| Speicherplatz | etwa 10 GB für Modell und Text Encoder |
| Account | Hugging Face Konto mit Access Token |
Der Paketmanager uv ist Pflicht. Das Projekt setzt darauf. Falls Du ihn noch nicht hast, genügt ein Einzeiler.
Befehl: curl -LsSf https://astral.sh/uv/install.sh | sh
Befehl: source $HOME/.local/bin/env
Befehl: uv --version
Phase 1: Modellzugang auf Hugging Face freischalten
Das Repository ist gated. Ohne Freischaltung schlägt der Download fehl. Das ist der häufigste Stolperstein.
Schritt für Schritt:
- Auf Hugging Face einloggen.
- Die Modellseite stabilityai/stable-audio-3-small-sfx öffnen.
- Die Lizenzbedingungen lesen und bestätigen.
- Unter Settings einen Access Token mit Leserechten erzeugen.
Du bestätigst dabei zwei Lizenzen. Einmal die Stability AI Community License für das Modell selbst. Und zusätzlich die Gemma Terms of Use. Der Grund dafür ist der Text Encoder. Stable Audio 3 nutzt das vortrainierte Modell t5gemma-b-b-ul2 von Google für die Textkonditionierung. Das wird beim ersten Start automatisch mitgeladen.
Phase 2: Repository klonen und installieren
Jetzt geht es auf den Server. Ich lege das Projekt direkt in meinem Home Verzeichnis ab.
Befehl: cd ~
Befehl: git clone https://github.com/Stability-AI/stable-audio-3.git
Befehl: cd stable-audio-3
Der Befehl uv sync installiert die Basisumgebung. Das reicht für die Python API und die Kommandozeile. Standardmäßig wird PyTorch gegen CUDA 12.6 gebaut.
Befehl: uv sync
Falls Du eine andere CUDA Version fährst, installierst Du Torch vorher manuell und lässt uv die beiden Pakete anschließend in Ruhe.
Befehl: uv pip install torch==2.7.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu128
Befehl: uv sync --no-install-package torch --no-install-package torchaudio
Für Torch 2.7.1 stehen die Varianten cu118, cu126 und cu128 bereit. Die Gradio Oberfläche ist optional und kommt über ein Extra dazu.
Befehl: uv sync --extra ui
Phase 3: Konfiguration
Drei Umgebungsvariablen entscheiden über einen reibungslosen Betrieb.
Der Hugging Face Token
Ohne diesen Token kommst Du nicht an die Gewichte. Er ist Pflicht.
Befehl: export HF_TOKEN=hf_dein_token_hier
Der Cache Pfad (optional)
Standardmäßig landen die Gewichte unter ~/.cache/huggingface. Ich habe es genau dabei belassen und empfehle Dir dasselbe. Für die meisten Installationen ist das die unkomplizierteste Variante.
Nur wenn Deine Systempartition knapp ist, verschiebst Du den Cache. Wichtig dabei: der Ordner muss dem Benutzer gehören, unter dem später auch der Dienst läuft. Sonst bekommst Du beim Start ein Permission denied.
Befehl: sudo mkdir -p /opt/hf-cache
Befehl: sudo chown -R $USER:$USER /opt/hf-cache
Befehl: export HF_HOME=/opt/hf-cache
Merke Dir Deine Entscheidung. Sie muss später in der Konfiguration des Dienstes identisch sein, sonst lädt der Dienst alle Gewichte ein zweites Mal herunter.
Das GPU Pinning
Ohne Einschränkung greift der Prozess auf alle sichtbaren Karten zu. Auf einem System mit mehreren GPUs willst Du das steuern.
Schau Dir zuerst an, welche Karten Dein Server überhaupt hat.
Befehl: nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv
Der Wert, den Du setzt, muss dem Index aus dieser Ausgabe entsprechen. Bei einer einzelnen Karte ist das immer die 0.
Befehl: export CUDA_VISIBLE_DEVICES=0
Hier lauert eine fiese Falle. Setzt Du versehentlich eine 1, obwohl es nur eine Karte gibt, blendest Du damit die einzige vorhandene GPU aus. Torch meldet dann RuntimeError: No CUDA GPUs are available, obwohl nvidia-smi die Karte einwandfrei anzeigt. Mich hat das eine halbe Stunde gekostet.
Auf einem System mit zwei Karten und einer bereits laufenden LLM Inferenz auf GPU 0 wäre die 1 dagegen genau richtig.
Alle drei Variablen gehören dauerhaft in Deine .bashrc oder besser gleich in die Konfiguration des Dienstes aus Phase 5.
Phase 4: Der erste Smoke Test
Jetzt der spannende Teil. Das Projekt bringt eine fertige Kommandozeile mit. Damit erzeugst Du den ersten Sound ohne eine Zeile Python.
Befehl: cd ~/stable-audio-3
Befehl: uv run stable-audio --model small-sfx \
-p "rooster crowing at dawn, close mic, clean recording" \
--duration 5 \
-o /tmp/hahn.wav
Beim ersten Aufruf dauert es. Modell und Text Encoder werden heruntergeladen. Danach geht es sehr schnell.
Prüfe das Ergebnis:
Befehl: ls -lh /tmp/hahn.wav
Befehl: ffprobe /tmp/hahn.wav
Erwartet werden 44100 Hz, zwei Kanäle und fünf Sekunden Länge. Wenn Du keine Audioausgabe auf dem Server hast, ziehst Du Dir die Datei per scp auf den Arbeitsrechner.
Befehl: scp <benutzer-Name>@<IP-Adresse des Servers>:/tmp/hahn.wav .
Bei mir sieht der Befehl dann wie folgt aus.
Befehl: scp ingmar@192.168.2.119:/tmp/hahn.wav .
Weitere Prompts zum Testen
Ein einzelner Test sagt wenig aus. Probiere eine kleine Serie durch.
Befehl: uv run stable-audio --model small-sfx -p "cow mooing in a barn, close mic" --duration 4 -o /tmp/kuh.wav
Befehl: uv run stable-audio --model small-sfx -p "wolf howling in a distant forest at night" --duration 6 -o /tmp/wolf.wav
Befehl: uv run stable-audio --model small-sfx -p "heavy rain on a metal roof, steady, no thunder" --duration 10 -o /tmp/regen.wav
Die vollständige Liste der Parameter zeigt Dir die Hilfe.
Befehl: uv run stable-audio --help
Smoke Test über Python
Wenn Du direkt in eine Anwendung integrieren willst, nutzt Du die Python API. Der Aufruf ist erfreulich kurz. Lege Dir dafür eine Datei test_sa3.py im Repository an.
from stable_audio_3 import StableAudioModel
model = StableAudioModel.from_pretrained("small-sfx")
audio = model.generate(
prompt="chugging train coming into station with horn",
duration=7,
)
Führe sie über uv aus, damit die virtuelle Umgebung greift.
Befehl: uv run python test_sa3.py
Hier geht es zum Teil 2: Stable Audio 3 Small SFX auf dem eigenen Server: Installation, Konfiguration und erster Smoke Test 2/2
(Mit der Unterstützung von Claude erstellt)






Ein toller Guide der leicht zugänglich und verständlich ist. Perfekt für ein kleines Side-Project geeignet. Aktuell half mir noch mein…
Thank you for this great tutorial, could you share n8n workflow and comfyui workflow please?
Hallo Anton, die Meldung besagt das in meinem Beisiel Methoden verwendet werden die veraltet (deprecated) sind. Also müsstest Du die…
Danke für das Tool! Ich habe erst kürzlich angefangen mich mit der Thematik zu beschäftigen und bin für meine Erwartungen…
Hallo, ich habe ihre Anleitung befolgt und bekomme im letzten Schritt leider immer folgende Meldung im Terminal: bash <(wget -qO-…