Un appel, un média prêt
run envoie la génération, interroge l'API avec le backoff qu'elle recommande et renvoie la requête terminée avec result.url.
En un coup d’œil
Le SDK Python de Mage est le client officiel et open source de l'API Mage, publié sous le nom mage-space. Installe-le avec « pip install mage-space », définis MAGE_API_KEY, puis appelle mage.run avec un identifiant de modèle et une configuration pour obtenir des images, des vidéos ou de l'audio finalisés avec l'un des 28 modèles. Il fonctionne avec Python 3.10 ou version ultérieure, et chaque génération est payée en Gems.
3.10+
Python
httpx
Client HTTP
28
Modèles typés
MIT
Open source
Configuration
Ajoute mage-space à ton projet.
pip install mage-spaceCrée une clé dans API → API Keys sur mage.space et exporte-la. Le client lit MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Appelle run avec un identifiant de modèle et sa configuration. Il attend le résultat et le renvoie ; le fichier généré se trouve dans result.url.
from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
request = mage.run("mango", {
"prompt": "Editorial portrait in soft daylight, 35mm film look",
"aspect_ratio": "4:5",
"model_id": "mango-v3",
})
print(request["result"]["url"])Exemples
Chaque exemple part d’un client qui lit MAGE_API_KEY.
from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
submitted = mage.generate("cherry", {
"prompt": "Waves rolling onto a black sand beach at sunset",
"resolution": "720p",
"duration": "5",
})
final = mage.requests.wait(
submitted["request_id"],
timeout=900,
on_update=lambda request: print(request["status"]),
)from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
clip = mage.uploads.upload("clip.mp4") # a path, bytes, or a binary file
mage.run("cherry", {
"prompt": "Restyle this clip as a watercolor painting",
"videos": [clip["url"]],
})from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
mage.characters.create(
name="Ana",
handle="ana",
image="https://example.com/ana.png",
)
mage.run("mango", {"prompt": "@ana walking through a night market"})from mage_space import Mage, MageAPIError, MageGenerationError
mage = Mage() # reads MAGE_API_KEY
try:
mage.run("mango", {"prompt": "A lighthouse at night"})
except MageAPIError as error:
if error.code == "insufficient_gems":
print("Gems needed:", error.body["error"]["gems_required"])
else:
raise
except MageGenerationError as error:
print("No output:", error.code)Pourquoi le SDK
run envoie la génération, interroge l'API avec le backoff qu'elle recommande et renvoie la requête terminée avec result.url.
Chaque envoi porte une clé d'idempotence. Les erreurs réseau et serveur sont retentées avec backoff, et un envoi retenté n'est jamais facturé deux fois.
Les fichiers trop volumineux pour une data URL passent par un upload signé, avec le ticket, le PUT et la vérification de taille gérés pour toi.
Les refus de l'API incluent leur statut HTTP, leur code d'erreur et leur identifiant de requête ; les générations échouées ou annulées et les délais dépassés ont leurs propres types d'erreur.
Mage et AsyncMage partagent toutes leurs méthodes. Le client asynchrone convient aux serveurs web, aux notebooks et aux pipelines qui lancent de nombreuses générations à la fois.
Chaque modèle a son TypedDict, comme MangoConfig, généré à partir de la référence de l'API. Annote une configuration avec lui et ton vérificateur de types contrôle les champs.
Référence
Les mêmes méthodes couvrent tous les modèles ; le modèle est le premier argument.
| Méthode | Ce qu'il fait |
|---|---|
| mage.run(model, config) | Envoie une génération, attend son résultat et renvoie la requête terminée. |
| mage.generate(model, config) | Envoie une génération et renvoie aussitôt la requête. |
| mage.requests.get / cancel / wait | Lit, arrête ou attend une requête à partir de son identifiant. |
| mage.uploads.upload(data) | Envoie un chemin, des octets ou un fichier jusqu'à 100 Mo et renvoie son URL. |
| mage.characters / mage.references | Liste, crée et supprime les personnages et références enregistrés. |
| mage.account.get() | Ton solde de Gems. |
| mage.architectures.list() | Le catalogue des modèles en temps réel, avec options et prix. |
Modèles
Image · à partir de 37 Gems
Un photoréalisme digne d'une vraie photo
Image · à partir de 135 Gems
Notre famille d'images phare
Image · à partir de 68 Gems
Texte net et lisible, jusqu'en 4K
Vidéo · à partir de 618 Gems
Notre famille de vidéos phare
Vidéo · à partir de 245 Gems
Toutes les fonctions vidéo, à un prix plus doux
Audio · à partir de 19 Gems
Voix, musique et effets sonores à partir d'un seul prompt
FAQ
Oui. AsyncMage a les mêmes méthodes que Mage, à attendre avec await, et fonctionne comme gestionnaire de contexte asynchrone.
Python 3.10 et versions ultérieures. Ses seules dépendances sont httpx et typing-extensions.
Oui. Utilise Mage dans des scripts et des notebooks, ou AsyncMage avec asyncio pour lancer de nombreuses générations à la fois. Le compte peut avoir jusqu'à 20 générations en cours simultanément.
Oui. Les SDK et les nœuds ComfyUI sont sous licence MIT sur GitHub, et leur installation est gratuite. Tu paies uniquement les générations que tu lances, en Gems, au prix indiqué pour chaque modèle.
Oui. Passe l’identifiant du nouveau modèle sous forme de chaîne et il s’exécute ; le SDK vérifie sa configuration avec les champs communs à tous les modèles. Un bot met à jour les types dès que la référence de l’API change, donc les nouveaux modèles arrivent avec leurs propres types dans la version suivante.
Chaque envoi comporte une Idempotency-Key. Le SDK crée une nouvelle clé à chaque appel et la réutilise quand il relance lui-même cet appel : un envoi renvoyé retourne donc la requête d’origine et ne coûte rien.
Ils sont en bêta en version 0.x, donc une version mineure peut encore les modifier. L’API elle-même suit son propre versionnement et reste stable dans la v1.
Il n'y a ni abonnement ni frais mensuels. Chaque génération est payée en Gems au prix indiqué pour son modèle, et 1 000 Gems coûtent 1 $ avec le pack standard. La page de chaque modèle indique son prix avec les réglages par défaut, et chaque réponse précise le montant exact débité. Une génération qui échoue est remboursée ; celle que la politique de contenu de Mage bloque ne l'est pas. Une requête que ton solde ne peut pas couvrir est refusée avant tout débit.
Non. L'API fonctionne uniquement avec des Gems. Les abonnements et leur génération illimitée dans l'appli ne s'appliquent pas aux requêtes API : n'importe quel compte Mage avec des Gems peut donc l'utiliser.
Oui. Tu peux utiliser à des fins commerciales les contenus créés avec Mage, y compris via l'API et le serveur MCP. La mention de la source est appréciée, mais pas obligatoire.
Un seul compte, un seul solde de Gems, tous les modèles. Ne paie que ce que tu génères.