Développeurs / SDKs / Python

Séparation de stems, en Python.

Livrez la séparation de stems depuis votre service Python en douze lignes — sans GPU, sans téléchargement de modèle, sans FFmpeg. Client typé sur PyPI, handlers webhook FastAPI et Flask sur cette page, le même modèle htdemucs_ft que vous connaissez déjà.

$pip install aistemsplitter
v0.1.0GitHubPyPI
Obtenir une clé APILire la documentation API

Sur cette page

  1. 01Installation
  2. 02Authentification
  3. 03Hello world
  4. 04Méthodes
  5. 05Webhooks
  6. 06Étapes suivantes
/ installation

Installation

$pip install aistemsplitter
/ authentification

Authentification

Créez une clé sur la page des paramètres développeur, puis exportez-la comme AISTEMSPLITTER_API_KEY afin que le client la récupère automatiquement. Passez api_key= au constructeur seulement quand vous avez besoin d’une clé par requête — la variable d’environnement est le défaut recommandé.

txt
import os
from aistemsplitter import AiStemSplitter

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

Hello world

Douze lignes des imports à quatre stems sur disque. Soumet un job à htdemucs_ft, poll jusqu’à la fin, puis écrit vocals.wav, drums.wav, bass.wav et other.wav à côté de votre script. Copiez, collez, exécutez.

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)
/ méthodes

Méthodes

La surface complète du SDK tient en quatre méthodes typées que vous pouvez parcourir en moins d’une minute — soumettre, récupérer, attendre, télécharger. Chacune reflète un endpoint REST, afin que vous puissiez descendre au HTTP brut via /developers/api lorsque le wrapper typé ne suffit plus. Modèles exposés : htdemucs_ft, htdemucs, htdemucs_6s. Facturé à 0,08–0,14 $ par minute sur des packs de crédits sans expiration.

createSplit(input)
README

Soumet un nouveau job de séparation ; renvoie un job id et le statut queued.

getSplit(id)
README

Récupère le statut actuel d’un job de séparation.

waitForSplit(id, timeout_s=600)
README

Poll jusqu’à ce que le job réussisse, échoue ou que le timeout expire.

listSplits(query=None)
README

Liste paginée des jobs de séparation récents pour la clé API.

presignUpload(filename)
README

Obtient une URL PUT présignée pour les uploads directs navigateur/serveur.

verifyWebhook(headers, raw_body)
README

Vérifie la signature HMAC-SHA256 d’un payload webhook entrant.

/ webhooks

Webhooks

Évitez la boucle de polling en production. Définissez webhook_url à la soumission, puis vérifiez la signature HMAC sur le POST entrant et lisez les URLs de stems présignées directement depuis le body. Handlers FastAPI et Flask sur la même page.

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}
/ questions fréquentes

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.

  • Dois-je utiliser le client sync ou async ?

    Par défaut, utilisez sync (StemSplitter) — c’est ce qu’utilise le hello world en 12 lignes, et c’est ce qui s’intègre naturellement dans une vue Django ou une tâche Celery. Passez à AsyncStemSplitter quand vous êtes déjà sur FastAPI, Starlette ou asyncio dans un notebook : les noms de méthodes correspondent (await client.submit, await client.wait, await client.download), donc l’échange coûte un import + un await par appel.

  • Fonctionne-t-il avec FastAPI et Flask ?

    Oui — les deux sont first-class. La section Webhooks ci-dessus fournit des handlers exécutables pour chacun : FastAPI utilise async def webhook(request: Request) avec verify_signature ; Flask utilise une route sync @app.post. Les deux vérifient HMAC-SHA256 avec un seul import (from aistemsplitter import verify_signature) et dépaquettent les URLs de stems présignées depuis le body JSON sans parsing supplémentaire.

  • Comment l’installer dans un virtualenv ou un projet Poetry ?

    Outillage standard : `python -m venv .venv && source .venv/bin/activate && pip install aistemsplitter` pour venv ; `poetry add aistemsplitter` pour Poetry ; `uv add aistemsplitter` pour uv. Le package est en roues pure-Python (aucune compilation native), donc l’installation se termine en quelques secondes sur toutes les plateformes — pas de shim pyenv, pas d’étape FFmpeg, pas de pilote GPU.

  • La sortie hébergée correspondra-t-elle à la qualité de mon htdemucs_ft local ?

    Oui. Nous exposons le même fichier de modèle que la communauté open source utilise — htdemucs_ft, plus htdemucs et htdemucs_6s — donc la sortie est bit-comparable à une exécution Demucs locale avec le même modèle + la même entrée, modulo nos paramètres d’inférence managée (batch size, précision). Passez model='htdemucs_6s' à la soumission quand vous avez besoin des stems guitar et piano.

  • Et si je dépasse le SDK typé et que j’ai besoin de HTTP brut ?

    Passez directement à /developers/api. Le SDK est un wrapper typé fin au-dessus des mêmes endpoints REST que le quickstart curl appelle, donc le header d’authentification (Authorization: Bearer ast_live_…), le schéma de signature webhook (HMAC-SHA256 dans aistemsplitter-signature) et les formes de réponse sont identiques. Vous pouvez combiner — appeler submit via le SDK, récupérer le statut via httpx brut pour une politique de retry personnalisée.

  • Comment gérer de l’audio très long sans timeout ?

    Deux stratégies. (1) Utilisez les webhooks — définissez webhook_url à la soumission et évitez entièrement la boucle de polling ; l’API poste les résultats quand le job se termine, quelle que soit la durée. (2) Pour les fichiers de plus de 50 MB, appelez client.presign_upload() pour obtenir une URL direct-to-storage, uploadez via httpx multipart, puis soumettez avec audio_url retournée au lieu de streamer via notre gateway.

/ étapes suivantes

Étapes suivantes

Référence API

Endpoints REST complets, codes d’erreur, spec OpenAPI 3.1.

Intégration n8n

Déposez un node dans un workflow — aucun code requis.

Repo GitHub

Source, issues, releases pour aistemsplitter sur PyPI.

Livrez la séparation de stems avant la fin du sprint.

Pas de carte pour créer une clé. L’offre gratuite couvre vos 3 premières minutes ; le reste utilise des packs de crédits sans expiration — 0,08–0,14 $ par minute selon le volume.

Obtenir une clé APIParler à l’équipe
LogoAI Stem Splitter

Lancez votre prochain produit IA plus rapidement avec ce modèle.

GitHubDiscordEmail
Produit
  • Fonctionnalités
  • Tarifs
  • FAQ
Outils gratuits
  • Détecteur de tonalité
  • Nightcore Maker
  • Pitch Changer
  • Slowed Reverb Maker
  • Générateur de voix TikTok
Outils IA
  • AI Vocal Removal
  • AI Acapella Extractor
  • Guitar Remover
  • Vocal Remover YouTube & SoundCloud
  • Karaoke Maker
  • AI Drum Remover
  • Voice Isolator
Alternatives
  • Alternative à Lalal.ai
  • Splitter.ai alternative
  • Alternative à VocalRemover
Ressources
  • Blog
  • API
Développeurs
  • Référence API
  • SDKs
  • Obtenir une clé API
Intégrations
  • Intégration n8n
Confiance
  • Stripe Climate
  • Product Hunt
Mentions légales
  • Politique de cookies
  • Politique de confidentialité
  • Conditions d'utilisation
BadgeBadge
BadgeBadge
BadgeBadge
BadgeBadge
© 2026 AI Stem Splitter All Rights Reserved.
LogoAI Stem Splitter
AccueilTarifs
Référence API

Endpoints REST, authentification, callbacks, spec OpenAPI 3.1.

SDKs

Sept SDKs officiels (Node, Python, Java, Go, PHP, Swift, Lua).

Obtenir une clé API

Générez une clé dans Settings → Developer.

Détecteur de tonalité

Détectez le tempo et la tonalité musicale — sans inscription

Nightcore Maker

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

Pitch Changer

Modifiez le pitch vers le haut ou vers le bas sans affecter le tempo.

Slowed Reverb Maker

Éditions slow + reverb pour TikTok, Reels et playlists slowed.

Générateur de voix TikTok

Voix off IA gratuite pour vidéos courtes.

AI Vocal Removal

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

AI Acapella Extractor

Extrayez une acapella propre de n'importe quelle chanson pour un remix, un mashup ou un edit DJ.

Guitar Remover

Sors la guitare et travaille sur le vrai groupe — voix, batterie et basse restent.

Vocal Remover YouTube & SoundCloud

Collez un lien YouTube ou SoundCloud et séparez-le en voix, batterie, basse, piano, guitare et autres 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

Importe une chanson et télécharge une piste sans batterie — voix, basse et tout sauf la batterie.

Voice Isolator

Extrais la voix parlée depuis des enregistrements bruités, interviews, appels et prises de terrain.

Blog
Tableau de bord