一次呼叫,直接拿到成品
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 的伺服器執行環境中運作,每次生成皆以 Gems 付費。
20.19+
Node.js
0
執行階段相依套件
28
型別化模型
MIT
開源
設定
將 @mage-space/sdk 加入你的專案。
npm install @mage-space/sdk在 mage.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。
每次送出都帶有冪等鍵。遇到網路錯誤與伺服器錯誤時會以退避方式重試,重試送出的請求絕不會再次收費。
太大而無法使用 data URL 的檔案會改走簽署上傳,票證、PUT 請求與大小檢查都由 SDK 代為處理。
API 拒絕請求時會附上 HTTP 狀態碼、錯誤代碼與請求 ID;生成失敗、被取消或逾時,也各有專屬的錯誤類型。
MangoConfig、CherryConfig 等型別皆由 API 參考文件自動產生,因此編輯器能補全欄位,並攔截無效的選項。
採用 ESM 格式,沒有任何執行階段相依套件。使用 Node.js 內建的 fetch,每次呼叫都能傳入 AbortSignal。
參考
同一組方法適用於所有模型;模型是第一個引數。
| 方法 | 功能 |
|---|---|
| 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() | 你的 Gems 餘額。 |
| mage.architectures.list() | 即時模型目錄,包含選項與價格。 |
模型
常見問題
不行。API 金鑰會消耗你的 Gems,所以請只保存在你的伺服器上。API 不會傳送 CORS 標頭,因此瀏覽器無法直接呼叫;請改為呼叫你自己的後端,再由後端使用 SDK。
此套件僅提供 ESM。Node.js 20.19 以上版本也能在 CommonJS 中用 require() 載入。
可以,適用於伺服器端程式碼,例如 route handler 與 server action。SDK 以 fetch 和 AbortSignal 等標準 Web API 建構,因此其他支援 fetch 的伺服器執行環境應該也能運作,不過 CI 只在 Node.js 上測試。
是的。SDK 與 ComfyUI 節點皆以 MIT 授權在 GitHub 上開源,安裝完全免費。你只需為實際執行的生成付費,以 Gems 依各模型標示的價格計算。
可以。將新模型的 id 以字串傳入就能執行;SDK 會依所有模型共通的欄位檢查設定。每當 API 參考文件有變動,機器人就會更新型別,所以新模型會在下一個版本附上自己的型別。
每次提交都會帶有 Idempotency-Key。SDK 會為每次呼叫產生新的金鑰,並在自行重試該次呼叫時沿用同一把金鑰,因此重試的提交會回傳原本的請求,不會再次收費。
目前處於 0.x 的 Beta 階段,次要版本仍可能更動內容。API 本身的版本另外管理,並在 v1 內保持穩定。
沒有訂閱制,也沒有月費。每次生成都依該模型的標示價格以 Gems 支付,標準方案中 1,000 Gems 為 $1。每個模型頁面都會列出預設設定下的價格,每次回應也會顯示實際扣款金額。生成失敗會退款;但被 Mage 內容政策封鎖的不會退款。若你的餘額不足以支付請求,系統會在扣款前直接拒絕。
不需要。API 只使用 Gems。會員方案及其應用程式內無限生成的權益不適用於 API 請求,因此任何擁有 Gems 的 Mage 帳號都能呼叫。
可以。你使用 Mage 建立的內容,包括透過 API 和 MCP 伺服器產生的內容,都可以用於商業用途。我們歡迎標示出處,但不強制要求。
一個帳號、一份 Gems 餘額,通用所有模型。只需為你生成的內容付費。