Навык API DeepManim
Используйте API DeepManim, чтобы создавать, улучшать и озвучивать анимированные объясняющие видео из текстовых запросов.
Базовый URL
https://api.deepmanim.com/api/v1
Аутентификация
Для всех запросов нужен ключ API в заголовке Authorization:
Authorization: Bearer dm_k_YOUR_API_KEY
Рабочий процесс
Обычно процесс выглядит так:
- Создайте видео из текстового запроса через
POST /generate - Проверяйте полученное задание через
GET /jobs/{job_id}, покаstatusне станет"completed" - Улучшайте видео дополнительными инструкциями через
POST /improve(необязательно, можно повторять) - Добавьте озвучку через
POST /audio, когда результат вас устраивает - Улучшите озвучку через
POST /improve-narration, если это необходимо
Генерация и улучшение стоят от 1,5 кредитов и зависят от предустановки. Запросы audio и improve-narration стоят 1 кредит. Чтение данных бесплатно.
Конечные точки
POST /generate
Создать новое видео по текстовому запросу. Озвучка включена по умолчанию.
Тело запроса:
{
"message": "Объясни гравитацию",
"session_id": null,
"preferred_locale": "ru"
}
message(required): Запрос с описанием того, что нужно анимировать.session_id(optional): Передайте существующий ID сессии, чтобы продолжить разговор.
Ответ:
{
"job_id": "abc-123",
"session_id": "def-456",
"status": "pending"
}
POST /improve
Улучшить или изменить существующее видео. Аудио НЕ включается — добавьте его через /audio после всех изменений.
Тело запроса:
{
"session_id": "def-456",
"message": "Добавь больше цветов и замедли анимацию",
"preferred_locale": "ru"
}
Ответ:
{
"job_id": "ghi-789",
"session_id": "def-456",
"status": "pending"
}
POST /audio
Добавить озвучку к существующему видео.
Тело запроса:
{
"session_id": "def-456",
"message_id": "msg-123",
"high_quality": false,
"preferred_locale": "ru"
}
POST /improve-narration
Улучшить существующую озвучку видео.
Тело запроса:
{
"session_id": "def-456",
"message_id": "msg-123",
"high_quality": true,
"mode": "better_narration",
"instruction": "Сделай объяснение более понятным для начинающих.",
"preferred_locale": "ru"
}
GET /jobs/{job_id}
Проверять состояние задания. Поле phase показывает прогресс: brainstorming → crafting_vision → assembling_pieces → polishing → done
Ответ после завершения:
Ответ после завершения:
{
"job_id": "abc-123",
"status": "completed",
"phase": "done",
"estimated_time_remaining_seconds": 0,
"result": {
"video_url": "https://...",
"description": "Объясни гравитацию",
"session_id": "def-456",
"message_id": "msg-789",
"duration_seconds": 24.6,
"has_audio": true,
"follow_up": "Сделай объяснение более понятным для начинающих."
}
}
Возможные значения status: pending, running, completed, failed.
POST /jobs/{job_id}/cancel — Отменить выполняющееся или ожидающее задание.
GET /sessions — Показать все ваши сессии.
GET /sessions/{session_id} — Получить сессию с полной историей сообщений.
DELETE /sessions/{session_id} — Удалить сессию и все её сообщения.
GET /sessions/{session_id}/jobs
Показать задания сессии. Необязательный параметр запроса: ?status=completed
GET /messages/{message_id} — Получить сообщение по ID.
GET /credits
Получить баланс: balance, total_used, total_purchased, plan.
GET /me
Получить сведения о пользователе: id, email, display_name.
Коды ошибок
401— отсутствует или недействителен ключ API402— недостаточно кредитов404— ресурс не найден400— недействительный запрос
Стратегия опроса
Задания обычно выполняются 60–120 секунд. Опросите GET /jobs/{job_id} каждые 3–5 секунд. Используйте estimated_time_remaining_seconds, чтобы менять частоту. Остановитесь, когда status станет completed или failed.
Пример: полный процесс
import requests, time
API_KEY = "dm_k_YOUR_KEY"
BASE = "https://api.deepmanim.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# 1. Создать
r = requests.post(f"{BASE}/generate", headers=headers, json={
"message": "Объясни гравитацию",
"preferred_locale": "ru"
})
job_id = r.json()["job_id"]
session_id = r.json()["session_id"]
# 2. Опросить до завершения
while True:
job = requests.get(f"{BASE}/jobs/{job_id}", headers=headers).json()
if job["status"] in ("completed", "failed"):
break
time.sleep(4)
# 3. Получить результат
video_url = job["result"]["video_url"]
message_id = job["result"]["message_id"]
# 4. При необходимости улучшить
r = requests.post(f"{BASE}/improve", headers=headers, json={
"session_id": session_id,
"message": "Добавь больше цветов и замедли анимацию",
"preferred_locale": "ru"
})
# Опросите новый job_id тем же способом…
# 5. Добавить аудио после улучшений
r = requests.post(f"{BASE}/audio", headers=headers, json={
"session_id": session_id,
"message_id": message_id,
"high_quality": False,
"preferred_locale": "ru"
})
# Опросить новый job_id…
# 6. При необходимости улучшить педагогику озвучки
r = requests.post(f"{BASE}/improve-narration", headers=headers, json={
"session_id": session_id,
"message_id": message_id,
"high_quality": True,
"mode": "better_narration",
"instruction": "Сделай объяснение более понятным для начинающих.",
"preferred_locale": "ru"
})
# Опросить новый job_id…