1回の呼び出しで、完成したメディアを取得
runは生成を送信し、APIが推奨するバックオフでポーリングして、result.urlを含む完了済みのリクエストを返します。
ひと目でわかる概要
Mage TypeScript SDKは、Mage APIの公式オープンソースクライアントで、@mage-space/sdkとして公開されています。「npm install @mage-space/sdk」でインストールし、MAGE_API_KEYを設定して、モデルIDと設定を指定してmage.runを呼び出すだけで、28モデルのいずれかから完成した画像・動画・音声を取得できます。Node.js 20.19以降、またはfetchが使えるサーバーランタイムで動作し、すべての生成はGemで支払います。
20.19+
Node.js
0
ランタイム依存パッケージ
28
型付きモデル
MIT
オープンソース
セットアップ
プロジェクトに@mage-space/sdkを追加します。
npm install @mage-space/sdkmage.spaceの「API → API Keys」でキーを作成し、環境変数に設定します。クライアントはMAGE_API_KEYを読み込みます。
export MAGE_API_KEY="mage_sk_..."モデルIDとその設定を指定してrunを呼び出します。結果を待って返し、出力は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);使用例
各例は、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;
}
}SDKを使う理由
runは生成を送信し、APIが推奨するバックオフでポーリングして、result.urlを含む完了済みのリクエストを返します。
送信にはすべて冪等性キーが付きます。ネットワークエラーやサーバーエラーはバックオフ付きで再試行され、再試行した送信が再び課金されることはありません。
データURLには大きすぎるファイルは署名付きアップロードで送信。チケットの取得、PUT、サイズの確認はSDKが処理します。
APIに拒否された場合は、HTTPステータス、エラーコード、リクエストIDが付きます。生成の失敗やキャンセル、タイムアウトには、それぞれ専用のエラー型があります。
MangoConfigやCherryConfigなどの型はAPIリファレンスから生成されるため、エディタがフィールドを補完し、無効なオプションも検出します。
ランタイム依存のないESMです。Node.js組み込みのfetchを使い、すべての呼び出しでAbortSignalを指定できます。
リファレンス
どのモデルでも同じメソッドを使えます。モデルは第1引数で指定します。
| メソッド | できること |
|---|---|
| mage.run(model, config) | 生成を送信して完了を待ち、完了したリクエストを返します。 |
| mage.generate(model, config) | 生成を送信し、すぐにリクエストを返します。 |
| mage.requests.get / cancel / wait | IDを指定して、リクエストの取得、停止、完了待ちを行います。 |
| mage.uploads.upload(data) | 最大100 MBのファイルをアップロードし、そのURLを返します。 |
| mage.characters / mage.references | 保存済みのキャラクターとリファレンスの一覧表示、作成、削除を行います。 |
| mage.account.get() | Gemの残高です。 |
| mage.architectures.list() | オプションと価格つきの最新モデルカタログです。 |
モデル
FAQ
いいえ。APIキーを使うとGemが消費されるため、キーはサーバー側で管理してください。APIはCORSヘッダーを返さないので、ブラウザから直接呼び出すことはできません。代わりに自分のバックエンドを呼び出し、そこでSDKを使ってください。
パッケージはESM専用です。Node.js 20.19以降なら、CommonJSからもrequire()で読み込めます。
はい。ルートハンドラーやサーバーアクションなどのサーバーコードで使えます。SDKはfetchとAbortSignalなどの標準Web APIで作られているため、fetchが使える他のサーバーランタイムでも動作するはずですが、CIでテストしているのはNode.jsです。
はい。SDKとComfyUIノードはGitHubでMITライセンスで公開されており、インストールは無料です。料金がかかるのは実行した生成分のみで、各モデルの表示価格どおりにGemで支払います。
はい。新しいモデルのIDを文字列で渡せば実行できます。SDKは、すべてのモデルに共通するフィールドに対して設定内容をチェックします。APIリファレンスが変更されるたびにボットが型を更新するため、新しいモデルは次のリリースで専用の型とともに追加されます。
送信するたびにIdempotency-Keyが付きます。SDKは呼び出しごとに新しいキーを作り、その呼び出しを自動でリトライするときは同じキーを再利用します。そのため、リトライされた送信は元のリクエストを返し、料金は発生しません。
現在は0.xのベータ版のため、マイナーバージョンで変更される場合があります。API自体は別のバージョン管理で、v1の間は安定しています。
サブスクリプションや月額料金はありません。生成ごとに、モデルごとの表示価格が Gems で差し引かれます。標準パックでは 1,000 Gems が $1 です。各モデルのページにはデフォルト設定での価格が掲載されており、各レスポンスには実際の請求額が含まれます。生成に失敗した場合は返却されますが、Mage のコンテンツポリシーでブロックされた場合は返却されません。残高が足りないリクエストは、課金される前に拒否されます。
いいえ。API は Gems だけで利用できます。メンバーシッププランやアプリ内での無制限生成は API リクエストには適用されないため、Gems のある Mage アカウントなら誰でも呼び出せます。
はい。APIやMCPサーバー経由を含め、Mageで作成したコンテンツは商用利用できます。クレジット表記は歓迎しますが、必須ではありません。
アカウントはひとつ、Gemsの残高もひとつで、すべてのモデルが使えます。料金は生成した分だけです。