Developers / SDKs / Python

Stem Splitting in Python.

Shippen Sie Stem Separation aus Ihrem Python-Service in zwölf Zeilen — keine GPU, kein Modell-Download, kein FFmpeg. Typisierter Client auf PyPI, FastAPI- und Flask-Webhook-Handler auf dieser Seite, dasselbe htdemucs_ft-Modell, dem Sie bereits vertrauen.

$pip install aistemsplitter
v0.1.0GitHubPyPI
API-Key erhaltenAPI-Dokumentation lesen

Auf dieser Seite

  1. 01Installieren
  2. 02Authentifizieren
  3. 03Hello World
  4. 04Methoden
  5. 05Webhooks
  6. 06Nächste Schritte
/ install

Installieren

$pip install aistemsplitter
/ authenticate

Authentifizieren

Erstellen Sie einen Key auf der Entwickler-Einstellungsseite und exportieren Sie ihn dann als AISTEMSPLITTER_API_KEY, damit der Client ihn automatisch aufnimmt. Übergeben Sie api_key= nur dann an den Konstruktor, wenn Sie einen Key pro Request benötigen — env var ist der empfohlene Standard.

txt
import os
from aistemsplitter import AiStemSplitter

client = AiStemSplitter(api_key=os.environ["AISTEMSPLITTER_API_KEY"])
/ hello world

Hello World

Zwölf Zeilen von Imports bis zu vier Stems auf der Festplatte. Reicht einen Job an htdemucs_ft ein, pollt bis zur Fertigstellung und schreibt dann vocals.wav, drums.wav, bass.wav und other.wav neben Ihr Skript. Kopieren, einfügen, ausführen.

txt
import os
import requests
from aistemsplitter import AiStemSplitter

client = AiStemSplitter(api_key=os.environ["AISTEMSPLITTER_API_KEY"])

# 1. Submit a split job
job = client.create_split(
    input={"type": "direct_url", "url": "https://example.com/song.mp3"},
    stem_model="htdemucs_ft",
)

# 2. Wait until completion (polls under the hood)
result = client.wait_for_split(job.id)

# 3. Download all six stems to disk
for name, url in result.stems.items():
    with requests.get(url, stream=True) as r:
        with open(f"./{name}.wav", "wb") as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
/ methods

Methoden

Die gesamte SDK-Oberfläche besteht aus vier typisierten Methoden, die Sie in unter einer Minute erfassen können — submit, get, wait, download. Jede spiegelt einen REST-Endpunkt, sodass Sie jederzeit über /developers/api auf Raw HTTP wechseln können, wenn Sie dem typisierten Wrapper entwachsen. Exponierte Modelle: htdemucs_ft, htdemucs, htdemucs_6s. Abgerechnet mit $0.08–$0.14 pro Minute gegen Credit-Pakete, die nie verfallen.

createSplit(input)
README

Reicht einen neuen Split-Job ein; gibt eine Job-ID und queued-Status zurück.

getSplit(id)
README

Ruft den aktuellen Status eines Split-Jobs ab.

waitForSplit(id, timeout_s=600)
README

Pollt, bis der Job erfolgreich ist, fehlschlägt oder das Timeout abläuft.

listSplits(query=None)
README

Paginierte Liste der letzten Split-Jobs für den API-Key.

presignUpload(filename)
README

Erstellt eine vorab signierte PUT-URL für direkte Browser-/Server-Uploads.

verifyWebhook(headers, raw_body)
README

Verifiziert die HMAC-SHA256-Signatur eines eingehenden Webhook-Payloads.

/ webhooks

Webhooks

Überspringen Sie die Polling-Schleife in Produktion. Setzen Sie webhook_url beim Submit, verifizieren Sie dann die HMAC-Signatur des eingehenden POST und lesen Sie vorab signierte Stem-URLs direkt aus dem Body. FastAPI- und Flask-Handler stehen auf derselben Seite.

txt
import os
from fastapi import FastAPI, Request, HTTPException
from aistemsplitter import AiStemSplitter

app = FastAPI()
client = AiStemSplitter(api_key=os.environ["AISTEMSPLITTER_API_KEY"])

@app.post("/webhooks/aistemsplitter")
async def handle_webhook(request: Request):
    raw = await request.body()
    try:
        event = client.verify_webhook(request.headers, raw)
    except Exception:
        raise HTTPException(status_code=400, detail="invalid signature")

    if event.type == "split.succeeded":
        # event.data["stems"] -> six URLs
        pass
    elif event.type == "split.failed":
        # event.data["error"] -> { code, message }
        pass
    return {"ok": True}
/ frequently asked

FAQ

  • Should I use the sync client or the async one?

    Default to sync (StemSplitter) — that's what the 12-line hello world uses, and it's what fits naturally inside a Django view or a Celery task. Switch to AsyncStemSplitter when you're already on FastAPI, Starlette, or asyncio in a notebook: the method names match (await client.submit, await client.wait, await client.download), so swapping costs one import + one await per call.

  • Does it work with FastAPI and Flask?

    Yes — both are first-class. The Webhooks section above ships runnable handlers for each: FastAPI uses async def webhook(request: Request) with verify_signature; Flask uses a sync @app.post route. Both verify HMAC-SHA256 with one import (from aistemsplitter import verify_signature) and unpack presigned stem URLs from the JSON body without extra parsing.

  • How do I install in a virtualenv or Poetry project?

    Standard tooling: `python -m venv .venv && source .venv/bin/activate && pip install aistemsplitter` for venv; `poetry add aistemsplitter` for Poetry; `uv add aistemsplitter` for uv. The package is pure-Python wheels (no native compilation), so installation completes in seconds on every platform — no pyenv shim, no FFmpeg pre-step, no GPU driver.

  • Will hosted output match my local htdemucs_ft quality?

    Yes. We expose the same model file the open-source community trusts — htdemucs_ft, plus htdemucs and htdemucs_6s — so output is bit-comparable to a local Demucs run with the same model + same input, modulo our managed inference settings (batch size, precision). Pass model='htdemucs_6s' on submit when you need guitar and piano stems.

  • What if I outgrow the typed SDK and need raw HTTP?

    Drop straight to /developers/api. The SDK is a thin typed wrapper over the same REST endpoints the curl quickstart calls, so the auth header (Authorization: Bearer ast_live_…), the webhook signature scheme (HMAC-SHA256 in aistemsplitter-signature), and the response shapes are identical. You can mix-and-match — call submit via the SDK, fetch status via raw httpx for a custom retry policy.

  • How do I handle very long audio without timing out?

    Two strategies. (1) Use webhooks — set webhook_url on submit and skip the polling loop entirely; the API posts results when the job finishes regardless of duration. (2) For files larger than 50 MB, call client.presign_upload() to get a direct-to-storage URL, upload via httpx multipart, then submit with the returned audio_url instead of streaming through our gateway.

  • Sollte ich den Sync-Client oder den Async-Client nutzen?

    Nutzen Sie standardmäßig sync (StemSplitter) — das verwendet auch das 12-Zeilen-Hello-World, und es passt natürlich in eine Django View oder einen Celery Task. Wechseln Sie zu AsyncStemSplitter, wenn Sie bereits auf FastAPI, Starlette oder asyncio in einem Notebook sind: Die Methodennamen stimmen überein (await client.submit, await client.wait, await client.download), sodass der Wechsel einen Import und ein await pro Aufruf kostet.

  • Funktioniert es mit FastAPI und Flask?

    Ja — beide sind first-class. Der Webhooks-Abschnitt oben liefert ausführbare Handler für beide: FastAPI nutzt async def webhook(request: Request) mit verify_signature; Flask nutzt eine synchrone @app.post-Route. Beide verifizieren HMAC-SHA256 mit einem Import (from aistemsplitter import verify_signature) und entpacken vorab signierte Stem-URLs aus dem JSON-Body ohne zusätzliches Parsing.

  • Wie installiere ich in einem virtualenv- oder Poetry-Projekt?

    Standard-Tooling: `python -m venv .venv && source .venv/bin/activate && pip install aistemsplitter` für venv; `poetry add aistemsplitter` für Poetry; `uv add aistemsplitter` für uv. Das Paket besteht aus Pure-Python-Wheels (keine native Kompilierung), daher ist die Installation auf jeder Plattform in Sekunden abgeschlossen — kein pyenv-Shim, kein FFmpeg-Vorschritt, kein GPU-Treiber.

  • Entspricht gehostete Ausgabe meiner lokalen htdemucs_ft-Qualität?

    Ja. Wir exponieren dieselbe Modelldatei, der die Open-Source-Community vertraut — htdemucs_ft plus htdemucs und htdemucs_6s — sodass die Ausgabe mit einem lokalen Demucs-Lauf bei gleichem Modell und gleicher Eingabe bit-vergleichbar ist, abgesehen von unseren verwalteten Inferenz-Einstellungen (Batch Size, Precision). Übergeben Sie model='htdemucs_6s' beim Submit, wenn Sie Gitarren- und Piano-Stems benötigen.

  • Was, wenn ich dem typisierten SDK entwachse und Raw HTTP brauche?

    Wechseln Sie direkt zu /developers/api. Das SDK ist ein dünner typisierter Wrapper über dieselben REST-Endpunkte, die der curl-Quickstart aufruft, sodass der Auth-Header (Authorization: Bearer ast_live_…), das Webhook-Signaturschema (HMAC-SHA256 in aistemsplitter-signature) und die Response-Shapes identisch sind. Sie können mischen — Submit über das SDK aufrufen, Status über Raw httpx für eine eigene Retry-Policy abrufen.

  • Wie gehe ich mit sehr langem Audio um, ohne in Timeouts zu laufen?

    Zwei Strategien. (1) Nutzen Sie Webhooks — setzen Sie webhook_url beim Submit und überspringen Sie die Polling-Schleife vollständig; die API postet Ergebnisse, wenn der Job fertig ist, unabhängig von der Dauer. (2) Für Dateien größer als 50 MB rufen Sie client.presign_upload() auf, um eine Direct-to-Storage-URL zu erhalten, laden per httpx multipart hoch und submitten anschließend mit der zurückgegebenen audio_url, statt durch unser Gateway zu streamen.

/ next steps

Nächste Schritte

API-Referenz

Vollständige REST-Endpunkte, Fehlercodes, OpenAPI-3.1-Spezifikation.

n8n-Integration

Einen Node in einen Workflow ziehen — kein Code erforderlich.

GitHub-Repo

Source, Issues und Releases für aistemsplitter auf PyPI.

Shippen Sie Stem Separation vor Sprint-Ende.

Keine Karte nötig, um einen Key zu erstellen. Der Free Tier deckt Ihre ersten 3 Minuten ab; der Rest läuft über Credit-Pakete, die nie verfallen — $0.08–$0.14 pro Minute je nach Volumen.

API-Key erhaltenMit dem Team sprechen
LogoAI Stem Splitter

Bringen Sie Ihr nächstes KI-Produkt schneller auf den Markt.

GitHubDiscordEmail
Produkt
  • Funktionen
  • Preise
  • FAQ
Kostenlose Tools
  • Key Finder
  • Nightcore Maker
  • Pitch Changer
  • Slowed Reverb Maker
  • TikTok Voice Generator
KI-Tools
  • AI Vocal Removal
  • AI Acapella Extractor
  • Guitar Remover
  • YouTube & SoundCloud Vocal Remover
  • Karaoke Maker
  • AI Drum Remover
  • Voice Isolator
Alternativen
  • Lalal.ai-Alternative
  • Splitter.ai alternative
  • VocalRemover-Alternative
Ressourcen
  • Blog
  • API
Entwickler
  • API-Referenz
  • SDKs
  • API-Key erhalten
Integrationen
  • n8n-Integration
Vertrauen
  • Stripe Climate
  • Product Hunt
Rechtliches
  • Cookie-Richtlinie
  • Datenschutzrichtlinie
  • Nutzungsbedingungen
BadgeBadge
BadgeBadge
BadgeBadge
BadgeBadge
© 2026 AI Stem Splitter All Rights Reserved.
LogoAI Stem Splitter
StartseitePreise
API-Referenz

REST-Endpunkte, Auth, Callbacks, OpenAPI-3.1-Spezifikation.

SDKs

Sieben First-party-SDKs (Node, Python, Java, Go, PHP, Swift, Lua).

API-Key erhalten

API-Key unter Einstellungen → Entwickler erstellen.

Key Finder

Tempo und Tonart erkennen – ohne Anmeldung

Nightcore Maker

Nightcore, daycore, or sped-up versions from a YouTube link or upload.

Pitch Changer

Tonhöhe nach oben oder unten verschieben, ohne das Tempo zu beeinflussen.

Slowed Reverb Maker

Slow + Reverb-Edits für TikTok, Reels und Slowed-Playlists.

TikTok Voice Generator

Kostenlose KI-Voiceovers für kurze Videos.

AI Vocal Removal

Remove vocals for karaoke tracks, quick acapellas, and six-stem previews from files or supported links

AI Acapella Extractor

Holen Sie eine saubere Acapella aus jedem Song für einen Remix, ein Mashup oder einen DJ-Edit.

Guitar Remover

Hol die Gitarre raus und übe über die echte Band — Vocals, Drums und Bass bleiben drin.

YouTube & SoundCloud Vocal Remover

YouTube- oder SoundCloud-Link einfügen und in Gesang, Schlagzeug, Bass, Klavier, Gitarre und weitere Stems aufteilen

Karaoke Maker

Remove vocals from a song to make a clean instrumental backing track for sing-alongs, rehearsals, and karaoke nights

AI Drum Remover

Lade einen Song hoch und lade einen drumless Track herunter — Vocals, Bass und alles außer den Drums.

Voice Isolator

Extrahiere gesprochene Stimme aus verrauschten Aufnahmen, Interviews, Anrufen und Field Audio.

Blog
Dashboard