一次调用,直接得到成品
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() 引入。
可以,用于路由处理程序和 server actions 等服务器端代码。SDK 基于 fetch 和 AbortSignal 等标准 Web API 构建,因此其他支持 fetch 的服务器运行时应该也能使用,不过 CI 只在 Node.js 上测试。
是的。SDK 和 ComfyUI 节点均以 MIT 许可证在 GitHub 上开源,安装完全免费。你只需为实际运行的生成按每个模型标注的价格以 Gems 付费。
可以。把新模型的 id 以字符串形式传入即可运行;SDK 会根据所有模型共有的字段检查配置。每当 API 参考文档更新,机器人都会同步更新类型,因此新模型会在下一个版本中带着自己的类型发布。
每次提交都会带上 Idempotency-Key。SDK 每次调用都会生成新的密钥,并在自行重试该调用时复用它,因此重试提交只会返回原始请求,不会再次扣费。
目前处于 0.x 测试阶段,次版本更新仍可能带来变动。API 本身单独进行版本管理,在 v1 内保持稳定。
没有订阅,也没有月费。每次生成按对应模型的标价以 Gems 支付,标准包中 1,000 Gems 售价 $1。每个模型页面都会列出默认设置下的价格,每次响应也会返回实际扣费金额。生成失败会退还 Gems;因违反 Mage 内容政策而被拦截的则不予退还。如果你的余额不足以支付某次请求,该请求会在扣费前被拒绝。
不需要。API 仅使用 Gems。会员方案及其应用内无限生成权益不适用于 API 请求,因此任何有 Gems 的 Mage 账号都可以调用。
可以。你用 Mage 创作的内容(包括通过 API 和 MCP 服务器生成的内容)可用于商业用途。署名我们会很感谢,但不是必须的。
一个账号,一份 Gems 余额,畅用所有模型。按生成量付费,用多少付多少。