Developers / SDK's / Python

Stems splitsen, in Python.

Ship stemscheiding vanuit je Python-service in twaalf regels — geen GPU, geen modeldownload, geen FFmpeg. Typed client op PyPI, FastAPI- en Flask-webhookhandlers op deze pagina, hetzelfde htdemucs_ft-model dat je al vertrouwt.

$pip install aistemsplitter
v0.1.0GitHubPyPI
API-sleutel ophalenAPI-docs lezen

Op deze pagina

  1. 01Installeren
  2. 02Authenticeren
  3. 03Hello world
  4. 04Methoden
  5. 05Webhooks
  6. 06Volgende stappen
/ install

Installeren

$pip install aistemsplitter
/ authenticeren

Authenticeren

Maak een sleutel op de developer settings-pagina en exporteer die daarna als AISTEMSPLITTER_API_KEY, zodat de client hem automatisch oppakt. Geef api_key= alleen door aan de constructor wanneer je per request een sleutel nodig hebt — de env var is de aanbevolen default.

txt
import os
from aistemsplitter import AiStemSplitter

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

Hello world

Twaalf regels van imports tot vier stems op disk. Dient een job in bij htdemucs_ft, pollt tot die klaar is en schrijft daarna vocals.wav, drums.wav, bass.wav en other.wav naast je script. Kopieer, plak, draai.

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

Het volledige SDK-oppervlak bestaat uit vier typed methods die je in minder dan een minuut scant — submit, get, wait, download. Elke methode spiegelt één REST-endpoint, zodat je naar raw HTTP via /developers/api kunt afdalen zodra je de typed wrapper ontgroeit. Beschikbare modellen: htdemucs_ft, htdemucs, htdemucs_6s. Gefactureerd tegen $0.08–$0.14 per minuut tegen creditpakketten die nooit verlopen.

createSplit(input)
README

Dien een nieuwe split-job in; retourneert een job-id en queued-status.

getSplit(id)
README

Haal de huidige status van een split-job op.

waitForSplit(id, timeout_s=600)
README

Poll totdat de job slaagt, faalt of de timeout verstrijkt.

listSplits(query=None)
README

Gepagineerde lijst met recente split-jobs voor de API-sleutel.

presignUpload(filename)
README

Krijg een vooraf ondertekende PUT-URL voor directe browser-/serveruploads.

verifyWebhook(headers, raw_body)
README

Verifieer de HMAC-SHA256-signature op een inkomende webhook-payload.

/ webhooks

Webhooks

Sla de polling-loop in productie over. Zet webhook_url op submit, verifieer daarna de HMAC-signature op de inkomende POST en lees presigned stem-URL's rechtstreeks uit de body. FastAPI- en Flask-handlers op dezelfde pagina.

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}
/ veelgestelde vragen

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.

  • Moet ik de sync client of de async client gebruiken?

    Gebruik standaard sync (StemSplitter) — dat is wat de 12-regelige hello world gebruikt, en het past natuurlijk in een Django view of Celery task. Stap over op AsyncStemSplitter wanneer je al op FastAPI, Starlette of asyncio in een notebook zit: de methodenamen blijven gelijk (await client.submit, await client.wait, await client.download), dus wisselen kost één import + één await per call.

  • Werkt het met FastAPI en Flask?

    Ja — beide zijn first-class. De Webhooks-sectie hierboven levert runnable handlers voor beide: FastAPI gebruikt async def webhook(request: Request) met verify_signature; Flask gebruikt een sync @app.post-route. Beide verifiëren HMAC-SHA256 met één import (from aistemsplitter import verify_signature) en pakken presigned stem-URL's uit de JSON-body zonder extra parsing.

  • Hoe installeer ik in een virtualenv- of Poetry-project?

    Standaard tooling: `python -m venv .venv && source .venv/bin/activate && pip install aistemsplitter` voor venv; `poetry add aistemsplitter` voor Poetry; `uv add aistemsplitter` voor uv. Het package bestaat uit pure-Python wheels (geen native compilation), dus installatie is op elk platform in seconden klaar — geen pyenv-shim, geen FFmpeg-voorstap, geen GPU-driver.

  • Komt hosted output overeen met mijn lokale htdemucs_ft-kwaliteit?

    Ja. We exposen hetzelfde modelbestand dat de open-source community vertrouwt — htdemucs_ft, plus htdemucs en htdemucs_6s — zodat output op bitniveau vergelijkbaar is met een lokale Demucs-run met hetzelfde model + dezelfde input, afgezien van onze managed inference-instellingen (batch size, precision). Geef model='htdemucs_6s' mee op submit wanneer je guitar- en piano-stems nodig hebt.

  • Wat als ik de typed SDK ontgroei en raw HTTP nodig heb?

    Ga direct naar /developers/api. De SDK is een dunne typed wrapper over dezelfde REST-endpoints die de curl-quickstart aanroept, dus de auth header (Authorization: Bearer ast_live_…), de webhook-signature scheme (HMAC-SHA256 in aistemsplitter-signature) en de response shapes zijn identiek. Je kunt mixen en matchen — submit via de SDK aanroepen, status ophalen via raw httpx voor een eigen retry-policy.

  • Hoe verwerk ik heel lange audio zonder timeouts?

    Twee strategieën. (1) Gebruik webhooks — zet webhook_url op submit en sla de polling-loop volledig over; de API post resultaten wanneer de job klaar is, ongeacht de duur. (2) Roep voor bestanden groter dan 50 MB client.presign_upload() aan om een direct-to-storage URL te krijgen, upload via httpx multipart en submit daarna met de geretourneerde audio_url in plaats van door onze gateway te streamen.

/ volgende stappen

Volgende stappen

API-reference

Volledige REST-endpoints, foutcodes, OpenAPI 3.1-spec.

n8n-integratie

Drop een node in een workflow — geen code nodig.

GitHub-repo

Source, issues, releases voor aistemsplitter op PyPI.

Ship stemscheiding vóór de sprint eindigt.

Geen kaart nodig om een sleutel te maken. De gratis tier dekt je eerste 3 minuten; daarna draai je op creditpakketten die nooit verlopen — $0.08–$0.14 per minuut, afhankelijk van volume.

API-sleutel ophalenPraat met het team
LogoAI Stem Splitter

Lanceer je volgende AI-product sneller met dit template.

GitHubDiscordEmail
Product
  • Functies
  • Prijzen
  • FAQ
Gratis tools
  • Song Key Finder
  • Nightcore Maker
  • Pitch Changer
  • Slowed Reverb Maker
  • TikTok Voice Generator
AI-tools
  • AI Vocal Removal
  • AI Acapella Extractor
  • Guitar Remover
  • YouTube & SoundCloud Vocal Remover
  • Karaoke Maker
  • AI Drum Remover
  • Voice Isolator
Alternatieven
  • Lalal.ai-alternatief
  • Splitter.ai alternative
  • VocalRemover-alternatief
Bronnen
  • Blog
  • API
Developers
  • API-referentie
  • SDK's
  • API-sleutel ophalen
Integraties
  • n8n-integratie
Vertrouwen
  • Stripe Climate
  • Product Hunt
Juridisch
  • Cookiebeleid
  • Privacybeleid
  • Servicevoorwaarden
BadgeBadge
BadgeBadge
BadgeBadge
BadgeBadge
© 2026 AI Stem Splitter All Rights Reserved.
LogoAI Stem Splitter
HomePrijzen
API-referentie

REST-endpoints, auth, callbacks, OpenAPI 3.1-specificatie.

SDK's

Zeven first-party SDK's (Node, Python, Java, Go, PHP, Swift, Lua).

API-sleutel ophalen

Maak een sleutel aan in Settings → Developer.

Song Key Finder

Detecteer tempo en toonsoort — geen aanmelding nodig

Nightcore Maker

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

Pitch Changer

Verschuif de pitch omhoog of omlaag zonder het tempo te beïnvloeden.

Slowed Reverb Maker

Slow + reverb-edits voor TikTok, Reels en slowed playlists.

TikTok Voice Generator

Gratis AI-voice-overs voor korte video's.

AI Vocal Removal

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

AI Acapella Extractor

Haal een schone acapella uit elk nummer voor een remix, mashup of DJ-edit.

Guitar Remover

Haal de gitaar eruit en oefen mee met de echte band — vocalen, drums en bas blijven.

YouTube & SoundCloud Vocal Remover

Plak een YouTube- of SoundCloud-link en splits deze in zang, drums, bas, piano, gitaar en andere stems

Karaoke Maker

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

AI Drum Remover

Upload een nummer en download één drumless track — vocals, bass en alles behalve de drums.

Voice Isolator

Haal gesproken stem uit rumoerige opnames, interviews, gesprekken en veldopnames.

Blog
Dashboard