Документация API
REST API для AI-дубляжа через Dpunk · базовый URL: https://dpunk.online
1. Аутентификация
Получите персональный ключ в разделе API (требуется аккаунт и подтверждённый email).
Передавайте ключ в каждом запросе:
Альтернатива: Authorization: Bearer dpk_ваш_ключ
2. Схема работы
POST /api/v1/dub— отправить видео и параметры, получить job idGET /api/v1/jobs/<id>— опрашивать статус (queued → running → done)GET /api/v1/jobs/<id>/download— скачать готовый MP4
3. Запуск дубляжа
multipart/form-data — загрузка файла (основной способ):
Обязательные поля: project_name, source_language, target_language, video.
Форматы: MP4, MKV, MOV, AVI, WebM, WAV, MP3, M4A. Максимум 500 МБ.
Ответ при успехе: HTTP 202 с полем id — сохраните его для опроса.
4. Опциональные параметры
| Параметр | Описание |
|---|---|
voice_prompt | Промпт VoiceDesign для голоса |
voice_gender | male | female |
voice_age | Возраст голоса (5–90) |
voice_design_temperature | Креативность TTS (0–1) |
voice_design_by_key | JSON: промпт по полу и возрастной группе |
dub_volume_percent | Громкость дубляжа, % (по умолчанию 100) |
original_audio_ratio | Доля оригинала (0–1, по умолчанию 0.3) |
Плейсхолдеры в voice_prompt: {lang}, {gender_hint}, {age_hint}
5. Клонирование голоса из сэмпла
Короткий аудио-сэмпл (MP3/WAV, до 10 МБ, 3–10 сек) задаёт голос для выбранных возрастных групп. Можно комбинировать: сэмпл для male, VoiceDesign-промпт для female.
| Поле multipart | Описание |
|---|---|
voice_sample_male | Файл сэмпла мужского голоса |
voice_sample_female | Файл сэмпла женского голоса |
voice_sample_male_ages | child,teenager,mature,elderly (через запятую) |
voice_sample_female_ages | То же для женского пола |
voice_sample_male_ref_text | Точный текст из мужского сэмпла (рекомендуется) |
voice_sample_female_ref_text | Точный текст из женского сэмпла |
video_path и серверных путей в JSON —
только загрузка файлов через multipart.
6. Статус и список задач
Статусы: queued, running, done, error.
Список ваших задач (до 50 последних). Чужие задачи недоступны.
7. Скачивание результата
Доступно только при status = done.
8. Коды ответов
| Код | Значение |
|---|---|
| 200 | OK — GET, скачивание |
| 202 | Accepted — задача создана |
| 401 | Неверный или отсутствующий API key |
| 404 | Задача не найдена (или не ваша) |
| 409 | Результат ещё не готов |
| 413 | Файл слишком большой |
| 503 | GPU занят другой задачей |
9. Пример на Python
Полный сценарий: запуск дубляжа с клонированием голоса, ожидание и скачивание MP4.
import time
import requests
BASE = "https://dpunk.online"
HEADERS = {"X-API-Key": "dpk_ваш_ключ"}
with open("video.mp4", "rb") as video, \
open("voice.wav", "rb") as sample:
r = requests.post(
f"{BASE}/api/v1/dub",
headers=HEADERS,
data={
"project_name": "demo",
"source_language": "en",
"target_language": "ru",
"voice_sample_male_ages": "mature,elderly",
"voice_sample_male_ref_text": "Hello, this is my reference voice.",
"voice_design_temperature": "0.72",
},
files={
"video": ("video.mp4", video, "video/mp4"),
"voice_sample_male": ("voice.wav", sample, "audio/wav"),
},
timeout=600,
)
r.raise_for_status()
job_id = r.json()["id"]
print("job:", job_id)
while True:
st = requests.get(
f"{BASE}/api/v1/jobs/{job_id}",
headers=HEADERS,
timeout=60,
)
st.raise_for_status()
data = st.json()
print("status:", data["status"])
if data["status"] == "done":
break
if data["status"] == "error":
raise RuntimeError(data.get("error"))
time.sleep(60)
out = requests.get(
f"{BASE}/api/v1/jobs/{job_id}/download",
headers=HEADERS,
stream=True,
timeout=600,
)
out.raise_for_status()
with open("demo_dubbed.mp4", "wb") as f:
for chunk in out.iter_content(chunk_size=1024 * 1024):
if chunk:
f.write(chunk)
print("saved: demo_dubbed.mp4")
10. Управление ключами
Ключи создаются в личном кабинете. Каждый ключ показывается один раз при генерации.
Создать аккаунт