Una llamada, contenido terminado
run envía la generación, consulta el estado con el backoff que recomienda la API y se resuelve con la solicitud completada y result.url.
De un vistazo
El SDK de TypeScript de Mage es el cliente oficial y de código abierto de la API de Mage, publicado como @mage-space/sdk. Instálalo con "npm install @mage-space/sdk", define MAGE_API_KEY y llama a mage.run con un id de modelo y una configuración para obtener imágenes, video o audio terminados de cualquiera de los 28 modelos. Funciona con Node.js 20.19 o posterior, o con cualquier entorno de servidor con fetch, y cada generación se paga en Gems.
20.19+
Node.js
0
Dependencias en tiempo de ejecución
28
Modelos tipados
MIT
Código abierto
Configuración
Añade @mage-space/sdk a tu proyecto.
npm install @mage-space/sdkCrea una clave en API → API Keys en mage.space y expórtala. El cliente lee MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Llama a run con un id de modelo y su configuración. Espera el resultado y lo devuelve; la salida está en 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);Ejemplos
Cada ejemplo parte de un cliente que lee 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 qué el SDK
run envía la generación, consulta el estado con el backoff que recomienda la API y se resuelve con la solicitud completada y result.url.
Cada envío lleva una clave de idempotencia. Los errores de red y de servidor se reintentan con backoff, y un envío reintentado nunca se cobra de nuevo.
Los archivos demasiado grandes para una URL de datos pasan por una subida firmada, y el ticket, el PUT y la comprobación de tamaño se gestionan por ti.
Los rechazos de la API incluyen su estado HTTP, código de error e ID de solicitud; las generaciones fallidas o canceladas y los tiempos de espera agotados tienen sus propios tipos de error.
MangoConfig, CherryConfig y los demás se generan a partir de la referencia de la API, así que tu editor autocompleta los campos y detecta opciones no válidas.
ESM sin dependencias en tiempo de ejecución. Usa el fetch integrado en Node.js y cada llamada acepta una AbortSignal.
Referencia
Los mismos métodos sirven para todos los modelos; el modelo es el primer argumento.
| Método | Qué hace |
|---|---|
| mage.run(model, config) | Envía una generación, espera a que termine y devuelve la solicitud completada. |
| mage.generate(model, config) | Envía una generación y devuelve la solicitud de inmediato. |
| mage.requests.get / cancel / wait | Consulta, detén o espera una solicitud por su id. |
| mage.uploads.upload(data) | Sube un archivo de hasta 100 MB y devuelve su URL. |
| mage.characters / mage.references | Lista, crea y elimina personajes y referencias guardados. |
| mage.account.get() | Tu saldo de Gems. |
| mage.architectures.list() | El catálogo de modelos en vivo con opciones y precios. |
Modelos
Imagen · desde 37 Gems
Fotorrealismo que parece una fotografía
Imagen · desde 135 Gems
Nuestra familia de imágenes insignia
Imagen · desde 68 Gems
Texto nítido y legible, hasta 4K
Vídeo · desde 618 Gems
Nuestra familia de vídeo insignia
Vídeo · desde 245 Gems
Todas las funciones de vídeo, a un precio más amable
Audio · desde 19 Gems
Voces, música y efectos de sonido con un solo prompt
Preguntas frecuentes
No. Una clave de API gasta tus Gems, así que guárdala en tus servidores. La API no envía encabezados CORS, por lo que los navegadores no pueden llamarla directamente; llama a tu propio backend y que sea este quien use el SDK.
El paquete es solo ESM. Node.js 20.19 y posteriores también pueden cargarlo con require() desde CommonJS.
Sí, en código de servidor como los route handlers y las server actions. El SDK se basa en fetch y en API web estándar como AbortSignal, así que otros entornos de servidor con fetch también deberían funcionar, aunque la CI lo prueba en Node.js.
Sí. Los SDK y los nodos de ComfyUI tienen licencia MIT en GitHub y instalarlos es gratis. Solo pagas por las generaciones que ejecutes, en Gems, al precio que figura para cada modelo.
Sí. Pasa el id del nuevo modelo como cadena y se ejecuta; el SDK comprueba su configuración con los campos que comparten todos los modelos. Un bot actualiza los tipos cada vez que cambia la referencia de la API, así que los modelos nuevos llegan con sus propios tipos en la siguiente versión.
Cada envío lleva una Idempotency-Key. El SDK genera una clave nueva por llamada y la reutiliza cuando reintenta esa llamada por su cuenta, así que un envío reintentado devuelve la solicitud original y no cobra nada.
Están en beta en la versión 0.x, así que una versión menor aún puede cambiarlos. La API en sí tiene su propio versionado y se mantiene estable dentro de v1.
No hay suscripción ni cuota mensual. Cada generación se paga en Gems al precio indicado de su modelo, y 1000 Gems cuestan 1 $ en el paquete estándar. La página de cada modelo muestra su precio con la configuración por defecto, y cada respuesta indica el cargo exacto. Si una generación falla, se reembolsa; si la política de contenido de Mage la bloquea, no. Una solicitud que tu saldo no pueda cubrir se rechaza antes de cobrar nada.
No. La API funciona solo con Gems. Los planes de membresía y su generación ilimitada dentro de la app no se aplican a las solicitudes de la API, así que cualquier cuenta de Mage con Gems puede usarla.
Sí. El contenido que creas con Mage, también a través de la API y el servidor MCP, se puede usar con fines comerciales. Se agradece la atribución, pero no es obligatoria.
Una cuenta, un saldo de Gems, todos los modelos. Paga solo por lo que generes.