Uma chamada, mídia pronta
O run envia a geração, faz polling com o backoff recomendado pela API e retorna a requisição concluída com result.url.
Resumo rápido
O SDK TypeScript do Mage é o cliente oficial e de código aberto da API do Mage, publicado como @mage-space/sdk. Instale com "npm install @mage-space/sdk", defina MAGE_API_KEY e chame mage.run com o id de um modelo e uma configuração para obter imagens, vídeos ou áudio prontos de qualquer um dos 28 modelos. Ele roda no Node.js 20.19 ou superior, ou em qualquer runtime de servidor com fetch, e toda geração é paga em Gems.
20.19+
Node.js
0
Dependências de runtime
28
Modelos tipados
MIT
Código aberto
Configuração
Adicione @mage-space/sdk ao seu projeto.
npm install @mage-space/sdkCrie uma chave em API → API Keys em mage.space e exporte-a. O cliente lê MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Chame run com o id de um modelo e sua configuração. Ele espera o resultado e o retorna; a saída fica em 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);Exemplos
Cada exemplo parte de um cliente que lê 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;
}
}Por que usar o SDK
O run envia a geração, faz polling com o backoff recomendado pela API e retorna a requisição concluída com result.url.
Todo envio leva uma chave de idempotência. Erros de rede e de servidor são repetidos com backoff, e um envio repetido nunca é cobrado de novo.
Arquivos grandes demais para uma data URL passam por um upload assinado, com ticket, PUT e verificação de tamanho tratados para você.
As recusas da API trazem o status HTTP, o código de erro e o ID da requisição; gerações com falha ou canceladas e timeouts têm tipos de erro próprios.
MangoConfig, CherryConfig e os demais são gerados a partir da referência da API, então seu editor completa os campos e aponta opções inválidas.
ESM sem dependências de runtime. Usa o fetch nativo do Node.js, e toda chamada aceita um AbortSignal.
Referência
Os mesmos métodos servem para todos os modelos; o modelo é o primeiro argumento.
| Método | O que faz |
|---|---|
| mage.run(model, config) | Envia uma geração, espera por ela e retorna a requisição concluída. |
| mage.generate(model, config) | Envia uma geração e retorna a requisição imediatamente. |
| mage.requests.get / cancel / wait | Consulta, interrompe ou espera uma requisição pelo id. |
| mage.uploads.upload(data) | Envia um arquivo de até 100 MB e retorna a URL dele. |
| mage.characters / mage.references | Lista, cria e exclui personagens e referências salvos. |
| mage.account.get() | Seu saldo de Gems. |
| mage.architectures.list() | O catálogo de modelos em tempo real, com opções e preços. |
Modelos
Imagem · a partir de 37 Gems
Fotorrealismo que parece uma fotografia de verdade
Imagem · a partir de 135 Gems
Nossa família de imagens principal
Imagem · a partir de 68 Gems
Texto nítido e legível, até 4K
Vídeo · a partir de 618 Gems
Nossa família de vídeos principal
Vídeo · a partir de 245 Gems
Todos os recursos de vídeo, por um preço mais amigável
Áudio · a partir de 19 Gems
Vozes, música e efeitos sonoros a partir de um único prompt
Perguntas frequentes
Não. Uma chave de API gasta seus Gems, então mantenha-a nos seus servidores. A API não envia cabeçalhos CORS, então os navegadores não conseguem chamá-la diretamente; chame seu próprio backend e deixe que ele use o SDK.
O pacote é somente ESM. O Node.js 20.19 e superiores também conseguem usar require() nele a partir do CommonJS.
Sim, em código de servidor, como route handlers e server actions. O SDK é baseado em fetch e em APIs Web padrão, como AbortSignal, então outros runtimes de servidor com fetch também devem funcionar, embora o CI o teste no Node.js.
Sim. Os SDKs e os nodes do ComfyUI têm licença MIT no GitHub, e instalá-los é grátis. Você paga apenas pelas gerações que executar, em Gems, pelo preço listado de cada modelo.
Sim. Passe o id do novo modelo como string e ele roda; o SDK confere a configuração com os campos que todos os modelos compartilham. Um bot atualiza os tipos sempre que a referência da API muda, então os novos modelos chegam com seus próprios tipos na versão seguinte.
Todo envio leva uma Idempotency-Key. O SDK cria uma nova chave a cada chamada e a reutiliza quando ele mesmo tenta essa chamada de novo, então um envio repetido retorna a requisição original e não cobra nada.
Eles estão em beta na versão 0.x, então uma versão secundária ainda pode alterá-los. A API em si tem versionamento separado e permanece estável dentro da v1.
Não há assinatura nem mensalidade. Cada geração é paga em Gems, pelo preço listado do modelo, e 1.000 Gems custam US$ 1 no pacote padrão. A página de cada modelo mostra o preço com as configurações padrão, e cada resposta informa o valor exato cobrado. Uma geração que falha é reembolsada; uma bloqueada pela política de conteúdo do Mage, não. Uma requisição que o seu saldo não cobre é recusada antes de qualquer cobrança.
Não. A API funciona apenas com Gems. Os planos de assinatura e a geração ilimitada no app não valem para requisições de API, então qualquer conta do Mage com Gems pode usá-la.
Sim. O conteúdo que você cria com o Mage, inclusive pela API e pelo servidor MCP, pode ser usado comercialmente. Os créditos são bem-vindos, mas não obrigatórios.
Uma conta, um saldo de Gems, todos os modelos. Pague apenas pelo que você gerar.