Una chiamata, contenuto pronto
run invia la generazione, fa polling con il backoff consigliato dall'API e restituisce la richiesta completata con result.url.
In breve
L'SDK TypeScript di Mage è il client ufficiale open source per l'API di Mage, pubblicato come @mage-space/sdk. Installalo con "npm install @mage-space/sdk", imposta MAGE_API_KEY e chiama mage.run con l'id di un modello e una configurazione per ottenere immagini, video o audio da uno qualsiasi dei 28 modelli. Funziona con Node.js 20.19 o successivo, o con qualsiasi runtime server con fetch, e ogni generazione si paga in Gems.
20.19+
Node.js
0
Dipendenze runtime
28
Modelli tipizzati
MIT
Open source
Configurazione
Aggiungi @mage-space/sdk al tuo progetto.
npm install @mage-space/sdkCrea una chiave in API → API Keys su mage.space ed esportala. Il client legge MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Chiama run con l'id di un modello e la sua configurazione. Attende il risultato e lo restituisce; l'output si trova in result.url.
import Mage from '@mage-space/sdk';
const mage = new Mage(); // reads MAGE_API_KEY
const request = await mage.run('mango', {
prompt: 'Editorial portrait in soft daylight, 35mm film look',
aspect_ratio: '4:5',
model_id: 'mango-v3',
});
console.log(request.result.url);Esempi
Ogni esempio parte da un client che legge MAGE_API_KEY.
import Mage from '@mage-space/sdk';
const mage = new Mage(); // reads MAGE_API_KEY
const submitted = await mage.generate('cherry', {
prompt: 'Waves rolling onto a black sand beach at sunset',
resolution: '720p',
duration: '5',
});
const final = await mage.requests.wait(submitted.request_id, {
timeout: 15 * 60_000,
onUpdate: (request) => console.log(request.status),
});import { readFile } from 'node:fs/promises';
import Mage from '@mage-space/sdk';
const mage = new Mage(); // reads MAGE_API_KEY
const clip = await mage.uploads.upload(await readFile('clip.mp4'), {
contentType: 'video/mp4',
});
await mage.run('cherry', {
prompt: 'Restyle this clip as a watercolor painting',
videos: [clip.url],
});import Mage from '@mage-space/sdk';
const mage = new Mage(); // reads MAGE_API_KEY
await mage.characters.create({
name: 'Ana',
handle: 'ana',
image: 'https://example.com/ana.png',
});
await mage.run('mango', { prompt: '@ana walking through a night market' });import Mage, { MageAPIError, MageGenerationError } from '@mage-space/sdk';
const mage = new Mage(); // reads MAGE_API_KEY
try {
await mage.run('mango', { prompt: 'A lighthouse at night' });
} catch (error) {
if (error instanceof MageAPIError && error.code === 'insufficient_gems') {
// Top up Gems, then try again.
} else if (error instanceof MageGenerationError) {
console.log('No output:', error.code);
} else {
throw error;
}
}Perché l'SDK
run invia la generazione, fa polling con il backoff consigliato dall'API e restituisce la richiesta completata con result.url.
Ogni invio include una chiave di idempotenza. Gli errori di rete e del server vengono ritentati con backoff, e un invio ritentato non viene mai addebitato di nuovo.
I file troppo grandi per un data URL passano da un upload firmato, con ticket, PUT e controllo delle dimensioni gestiti al posto tuo.
I rifiuti dell'API includono stato HTTP, codice di errore e ID della richiesta; generazioni fallite o annullate e timeout hanno tipi di errore dedicati.
MangoConfig, CherryConfig e gli altri sono generati dal riferimento API, così il tuo editor completa i campi e segnala le opzioni non valide.
ESM senza dipendenze runtime. Usa il fetch integrato in Node.js e ogni chiamata accetta un AbortSignal.
Riferimento
Gli stessi metodi valgono per ogni modello; il modello è il primo argomento.
| Metodo | Cosa fa |
|---|---|
| mage.run(model, config) | Invia una generazione, attende il completamento e restituisce la richiesta completata. |
| mage.generate(model, config) | Invia una generazione e restituisce subito la richiesta. |
| mage.requests.get / cancel / wait | Leggi, interrompi o attendi una richiesta tramite id. |
| mage.uploads.upload(data) | Carica un file fino a 100 MB e restituisce il suo URL. |
| mage.characters / mage.references | Elenca, crea ed elimina personaggi e riferimenti salvati. |
| mage.account.get() | Il tuo saldo di Gems. |
| mage.architectures.list() | Il catalogo dei modelli in tempo reale con opzioni e prezzi. |
Modelli
Immagine · da 37 Gems
Un fotorealismo che sembra una vera fotografia
Immagine · da 135 Gems
La nostra famiglia di modelli immagine di punta
Immagine · da 68 Gems
Testo nitido e leggibile, fino a 4K
Video · da 618 Gems
La nostra famiglia di modelli video di punta
Video · da 245 Gems
Tutte le funzioni video, a un prezzo più accessibile
Audio · da 19 Gems
Voci, musica ed effetti sonori da un unico prompt
FAQ
No. Una chiave API spende i tuoi Gems, quindi tienila sui tuoi server. L'API non invia header CORS, quindi i browser non possono chiamarla direttamente: chiama invece il tuo backend e lascia che sia lui a usare l'SDK.
Il pacchetto è solo ESM. Da Node.js 20.19 in poi è possibile usarlo anche con require() da CommonJS.
Sì, nel codice server, come i route handler e le server action. L'SDK si basa su fetch e su API Web standard come AbortSignal, quindi dovrebbe funzionare anche con altri runtime server con fetch, anche se la CI lo testa su Node.js.
Sì. Gli SDK e i nodi ComfyUI hanno licenza MIT su GitHub e installarli è gratis. Paghi solo le generazioni che esegui, in Gems, al prezzo indicato per ogni modello.
Sì. Passa l'id del nuovo modello come stringa e il modello viene eseguito: l'SDK controlla la configurazione in base ai campi che tutti i modelli hanno in comune. Un bot aggiorna i tipi ogni volta che cambia il riferimento API, quindi i nuovi modelli arrivano con i propri tipi nella release successiva.
Ogni invio include una Idempotency-Key. L'SDK crea una nuova chiave per ogni chiamata e la riutilizza quando ripete quella stessa chiamata, così un invio ripetuto restituisce la richiesta originale e non addebita nulla.
Sono in beta alla versione 0.x, quindi una versione minor può ancora modificarli. L'API ha un versionamento separato e resta stabile all'interno della v1.
Non ci sono abbonamenti né canoni mensili. Ogni generazione si paga in Gems al prezzo indicato per il suo modello, e 1.000 Gems costano 1 $ con il pacchetto standard. La pagina di ogni modello riporta il prezzo con le impostazioni predefinite e ogni risposta indica l'addebito esatto. Se una generazione fallisce, viene rimborsata; se la blocca la content policy di Mage, no. Una richiesta che il tuo saldo non copre viene rifiutata prima di qualsiasi addebito.
No. L'API funziona solo con i Gems. I piani di abbonamento e la generazione illimitata nell'app non valgono per le richieste API, quindi qualsiasi account Mage con dei Gems può usarla.
Sì. I contenuti che crei con Mage, anche tramite l'API e il server MCP, possono essere usati a fini commerciali. L'attribuzione è gradita ma non obbligatoria.
Un solo account, un solo saldo di Gems, tutti i modelli. Paghi solo ciò che generi.