Jedno wywołanie, gotowe media
run wysyła generację, odpytuje API z zalecanym przez nie opóźnieniem (backoff) i zwraca ukończone zgłoszenie z result.url.
W skrócie
Mage TypeScript SDK to oficjalny klient open source dla API Mage, opublikowany jako @mage-space/sdk. Zainstaluj go poleceniem „npm install @mage-space/sdk”, ustaw MAGE_API_KEY i wywołaj mage.run z ID modelu i konfiguracją, aby otrzymać gotowe obrazy, wideo lub audio z dowolnego z 28 modeli. Działa na Node.js 20.19 lub nowszym albo w dowolnym środowisku serwerowym z fetch, a każde generowanie jest płatne w Gems.
20.19+
Node.js
0
Zależności uruchomieniowe
28
Typowane modele
MIT
Open source
Konfiguracja
Dodaj @mage-space/sdk do swojego projektu.
npm install @mage-space/sdkUtwórz klucz w API → API Keys na mage.space i wyeksportuj go. Klient odczytuje MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Wywołaj run z ID modelu i jego konfiguracją. Metoda czeka na wynik i go zwraca; wynik znajdziesz w 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);Przykłady
Każdy przykład zaczyna się od klienta, który odczytuje 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;
}
}Dlaczego SDK
run wysyła generację, odpytuje API z zalecanym przez nie opóźnieniem (backoff) i zwraca ukończone zgłoszenie z result.url.
Każde zgłoszenie ma klucz idempotentności. Błędy sieci i serwera są ponawiane z opóźnieniem (backoff), a ponowione zgłoszenie nigdy nie jest rozliczane drugi raz.
Pliki zbyt duże na data URL trafiają przez podpisany upload, a bilet, żądanie PUT i sprawdzenie rozmiaru obsługujemy za Ciebie.
Odmowy API zawierają status HTTP, kod błędu i identyfikator żądania, a nieudane lub anulowane generacje i przekroczenia czasu mają własne typy błędów.
MangoConfig, CherryConfig i pozostałe są generowane z dokumentacji API, więc edytor podpowiada pola i wychwytuje nieprawidłowe opcje.
ESM bez zależności uruchomieniowych. Korzysta z wbudowanego w Node.js fetch, a każde wywołanie przyjmuje AbortSignal.
Dokumentacja
Te same metody obsługują każdy model; model jest pierwszym argumentem.
| Metoda | Co robi |
|---|---|
| mage.run(model, config) | Wysyła generowanie, czeka na nie i zwraca ukończone żądanie. |
| mage.generate(model, config) | Wysyła generowanie i od razu zwraca żądanie. |
| mage.requests.get / cancel / wait | Odczytaj, zatrzymaj lub poczekaj na żądanie według ID. |
| mage.uploads.upload(data) | Przesyła plik do 100 MB i zwraca jego URL. |
| mage.characters / mage.references | Wyświetla, tworzy i usuwa zapisane postaci oraz referencje. |
| mage.account.get() | Twoje saldo Gems. |
| mage.architectures.list() | Aktualny katalog modeli z opcjami i cenami. |
Modele
Obraz · od 37 Gems
Fotorealizm, który uchodzi za prawdziwe zdjęcie
Obraz · od 135 Gems
Nasza flagowa rodzina modeli obrazu
Obraz · od 68 Gems
Wyraźny, czytelny tekst, do 4K
Wideo · od 618 Gems
Nasza flagowa rodzina modeli wideo
Wideo · od 245 Gems
Wszystkie funkcje wideo w bardziej przyjaznej cenie
Audio · od 19 Gems
Głosy, muzyka i efekty dźwiękowe z jednego promptu
FAQ
Nie. Klucz API wydaje twoje Gems, więc trzymaj go na swoich serwerach. API nie wysyła nagłówków CORS, więc przeglądarki nie mogą wywoływać go bezpośrednio; wywołuj własny backend, a on niech korzysta z SDK.
Pakiet jest tylko w ESM. Node.js 20.19 i nowszy mogą też załadować go przez require() z CommonJS.
Tak, w kodzie serwerowym, np. w route handlerach i server actions. SDK jest zbudowane na fetch i standardowych Web API, takich jak AbortSignal, więc inne środowiska serwerowe z fetch też powinny działać, choć CI testuje je na Node.js.
Tak. SDK i węzły ComfyUI mają licencję MIT na GitHubie, a ich instalacja jest darmowa. Płacisz tylko za wykonane generowania, w Gems, według ceny podanej przy każdym modelu.
Tak. Przekaż ID nowego modelu jako ciąg znaków, a zostanie uruchomiony; SDK sprawdza jego konfigurację względem pól wspólnych dla wszystkich modeli. Bot aktualizuje typy za każdym razem, gdy zmienia się dokumentacja API, więc nowe modele dostają własne typy w następnym wydaniu.
Każde zgłoszenie zawiera nagłówek Idempotency-Key. SDK tworzy nowy klucz dla każdego wywołania i używa go ponownie, gdy samo ponawia to wywołanie, więc ponowione zgłoszenie zwraca pierwotne żądanie i nic nie kosztuje.
Są w wersji beta (0.x), więc wersja minor może jeszcze coś w nich zmienić. Samo API ma osobne wersjonowanie i pozostaje stabilne w ramach v1.
Nie ma subskrypcji ani opłaty miesięcznej. Każda generacja jest płatna w Gems według ceny danego modelu, a 1000 Gems kosztuje 1 USD w standardowym pakiecie. Strona każdego modelu podaje cenę przy ustawieniach domyślnych, a każda odpowiedź zawiera dokładną kwotę opłaty. Za nieudaną generację zwracamy koszt, ale nie w przypadku zablokowania jej przez politykę treści Mage. Zapytanie, na które nie wystarcza Twojego salda, zostanie odrzucone, zanim cokolwiek zostanie pobrane.
Nie. API działa wyłącznie na Gems. Plany członkowskie i ich nielimitowane generowanie w aplikacji nie dotyczą zapytań API, więc może z niego korzystać każde konto Mage z Gems.
Tak. Treści tworzone w Mage, także przez API i serwer MCP, możesz wykorzystywać komercyjnie. Podanie autorstwa jest mile widziane, ale nie jest wymagane.
Jedno konto, jedno saldo Gems, wszystkie modele. Płacisz tylko za to, co wygenerujesz.