Один вызов — готовый файл
run отправляет генерацию, опрашивает статус с интервалом, который рекомендует API, и возвращает завершённый запрос с result.url.
Главное
Python SDK для Mage — официальный клиент с открытым исходным кодом для Mage API, опубликован как mage-space. Установите его командой "pip install mage-space", задайте MAGE_API_KEY и вызовите mage.run с id модели и конфигом, чтобы получить готовые изображения, видео или аудио от любой из 28 моделей. Он работает на Python 3.10 и новее, а каждая генерация оплачивается в Gems.
3.10+
Python
httpx
HTTP-клиент
28
Типизированные модели
MIT
Открытый код
Настройка
Добавьте mage-space в свой проект.
pip install mage-spaceСоздайте ключ в разделе API → API Keys на mage.space и экспортируйте его. Клиент читает переменную MAGE_API_KEY.
export MAGE_API_KEY="mage_sk_..."Вызовите run с id модели и её конфигурацией. Метод дождётся результата и вернёт его; файл доступен по адресу result.url.
from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
request = mage.run("mango", {
"prompt": "Editorial portrait in soft daylight, 35mm film look",
"aspect_ratio": "4:5",
"model_id": "mango-v3",
})
print(request["result"]["url"])Примеры
Каждый пример начинается с клиента, который читает MAGE_API_KEY.
from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
submitted = mage.generate("cherry", {
"prompt": "Waves rolling onto a black sand beach at sunset",
"resolution": "720p",
"duration": "5",
})
final = mage.requests.wait(
submitted["request_id"],
timeout=900,
on_update=lambda request: print(request["status"]),
)from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
clip = mage.uploads.upload("clip.mp4") # a path, bytes, or a binary file
mage.run("cherry", {
"prompt": "Restyle this clip as a watercolor painting",
"videos": [clip["url"]],
})from mage_space import Mage
mage = Mage() # reads MAGE_API_KEY
mage.characters.create(
name="Ana",
handle="ana",
image="https://example.com/ana.png",
)
mage.run("mango", {"prompt": "@ana walking through a night market"})from mage_space import Mage, MageAPIError, MageGenerationError
mage = Mage() # reads MAGE_API_KEY
try:
mage.run("mango", {"prompt": "A lighthouse at night"})
except MageAPIError as error:
if error.code == "insufficient_gems":
print("Gems needed:", error.body["error"]["gems_required"])
else:
raise
except MageGenerationError as error:
print("No output:", error.code)Зачем нужен SDK
run отправляет генерацию, опрашивает статус с интервалом, который рекомендует API, и возвращает завершённый запрос с result.url.
Каждый запрос содержит ключ идемпотентности. При сетевых и серверных ошибках запрос повторяется с нарастающей задержкой, а повторная отправка никогда не оплачивается снова.
Файлы, слишком большие для data URL, загружаются по подписанной ссылке: тикет, PUT-запрос и проверку размера SDK берёт на себя.
Отказы API содержат HTTP-статус, код ошибки и идентификатор запроса; для неудачных и отменённых генераций и для тайм-аутов есть отдельные типы ошибок.
У Mage и AsyncMage одни и те же методы. Асинхронный клиент подходит для веб-серверов, ноутбуков и конвейеров, где одновременно идёт много генераций.
Для каждой модели есть TypedDict, например MangoConfig, он создаётся из справочника API. Аннотируйте конфиг им, и тайп-чекер проверит поля.
Справочник
Одни и те же методы работают для всех моделей; модель передаётся первым аргументом.
| Метод | Что делает |
|---|---|
| mage.run(model, config) | Отправляет генерацию, ждёт её завершения и возвращает готовый запрос. |
| mage.generate(model, config) | Отправляет генерацию и сразу возвращает запрос. |
| mage.requests.get / cancel / wait | Получить запрос по id, остановить его или дождаться завершения. |
| mage.uploads.upload(data) | Загружает путь, байты или файл размером до 100 МБ и возвращает его URL. |
| mage.characters / mage.references | Список, создание и удаление сохранённых персонажей и референсов. |
| mage.account.get() | Ваш баланс Gems. |
| mage.architectures.list() | Актуальный каталог моделей с параметрами и ценами. |
Модели
Изображения · от 37 Gems
Фотореализм, неотличимый от настоящего снимка
Изображения · от 135 Gems
Наше флагманское семейство моделей для изображений
Изображения · от 68 Gems
Чёткий, читаемый текст, до 4K
Видео · от 618 Gems
Наше флагманское семейство моделей для видео
Видео · от 245 Gems
Все возможности видео по более доступной цене
Аудио · от 19 Gems
Голоса, музыка и звуковые эффекты из одного промпта
FAQ
Да. У AsyncMage те же методы, что и у Mage, но с await, и он работает как асинхронный контекстный менеджер.
Python 3.10 и новее. Единственные зависимости — httpx и typing-extensions.
Да. Используйте Mage в скриптах и ноутбуках или AsyncMage с asyncio, чтобы запускать много генераций одновременно. Для аккаунта одновременно может выполняться до 20 генераций.
Да. SDK и узлы ComfyUI распространяются на GitHub по лицензии MIT, а установка бесплатна. Вы платите только за запущенные генерации — в Gems, по цене, указанной для каждой модели.
Да. Передайте id новой модели строкой — и она запустится: SDK проверяет конфигурацию по полям, общим для всех моделей. Бот обновляет типы при каждом изменении справочника API, поэтому новые модели получают собственные типы в следующем релизе.
Каждый запрос отправляется с Idempotency-Key. SDK создаёт новый ключ для каждого вызова и использует его повторно, когда сам повторяет этот вызов, поэтому повторная отправка возвращает исходный запрос и ничего не списывает.
Они находятся в бета-версии 0.x, поэтому в минорных версиях возможны изменения. Сам API версионируется отдельно и остаётся стабильным в рамках v1.
Подписки и ежемесячной платы нет. Каждая генерация оплачивается в Gems по цене её модели, а 1 000 Gems в стандартном пакете стоят $1. На странице каждой модели указана цена при настройках по умолчанию, а в каждом ответе — точная сумма списания. Если генерация не удалась, Gems возвращаются; если её заблокировала политика контента Mage — нет. Запрос, на который не хватает баланса, отклоняется до любого списания.
Нет. API работает только на Gems. Тарифы и безлимитная генерация в приложении на запросы к API не распространяются, поэтому им может пользоваться любой аккаунт Mage с Gems.
Да. Контент, созданный в Mage, в том числе через API и MCP-сервер, можно использовать в коммерческих целях. Указывать авторство приятно, но необязательно.
Один аккаунт, один баланс Gems, все модели. Платите только за то, что генерируете.