API текста с таймкодами
Описание эндпоинта
Текст с таймкодами возвращает таймкоды на уровне слов для песни — для синхронного отображения текста.
Эндпоинт: POST /api/lyrics/timeline
Оплата: Бесплатно (запрос только на чтение: ничего не списывается и задача генерации не создаётся).
Формат ответа: массив таймлайна возвращается напрямую — внешней обёртки data / success нет; после разбора это просто массив.
Параметры запроса
Headers
| Параметр | Тип | Обязательно | Примечания |
|---|---|---|---|
| Authorization | string | да | Bearer YOUR_API_KEY |
| Content-Type | string | да | application/json |
Параметры тела запроса
| Параметр | Тип | Обязательно | По умолчанию | Примечания |
|---|---|---|---|---|
| model | string | нет | suno-v6 | Клиентское имя модели: suno-v6, suno-v6-wild или suno-v6-mini |
| song_id | string | да | - | Идентификатор песни |
Пример запроса
curl -X POST https://www.suno-api.io/api/lyrics/timeline \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"song_id": "clip_id"
}'
Ответ
Ниже — реальный ответ из продакшена для песни длительностью 189,6 секунды на suno-v6 (в том вызове было 69 сегментов; здесь оставлены только первые и последние):
[
{
"word": "[Intro]\n\n\n[",
"start_s": 15,
"end_s": 15.04277,
"success": true,
"p_align": 0.99
},
{
"word": "Instrumental: ",
"start_s": 15.04704,
"end_s": 15.10264,
"success": true,
"p_align": 0.99
},
{
"word": "End]\n\n\n",
"start_s": 189.16974,
"end_s": 189.654,
"success": true,
"p_align": 0.99
}
]
Описание полей
| Поле | Тип | Примечания |
|---|---|---|
word |
string | Текст этого сегмента; он содержит собственные переводы строк: одна строка текста на сегмент, \n в конце сегмента и \n\n между абзацами, поэтому встречаются записи из одних пробелов |
start_s |
number | Время начала сегмента в секундах (с дробной частью) |
end_s |
number | Время окончания сегмента в секундах. end_s последнего сегмента практически равен длительности песни |
success |
boolean | Успешно ли выровнен этот сегмент |
p_align |
number | Уверенность выравнивания; по измерениям стабильно 0.99 |
Что важно учитывать
- Не ищите внешнюю обёртку. Ответ — это сам массив, а не
{"data": ...}, и поляsuccessв нём тоже нет. - В начале сегмента может не быть. У песни с чистым вступлением по измерениям первый сегмент появлялся только на 15-й секунде, и
start_sне гарантирует начало с0; для караоке обрабатывайте начальный промежуток сами. - Инструментальные и структурные маркеры тоже возвращаются в виде
[Intro],[Verse 1],Instrumental: soft arpeggiating piano, …,[End], и по ним также даётся время слово за словом. Перед сборкой субтитров отфильтруйте эти сегменты по начальному[или поInstrumental, иначе описания аранжировки будут показаны как текст песни. - Это пословно, а не построчно. Одна и та же строка текста часто делится на несколько сегментов, и их нужно объединять в строки по
\n; время строки — этоstart_sеё первого сегмента. - Число сегментов зависит от песни; не предполагайте фиксированное количество (измерено: у песни на 189,6 секунды было 69 сегментов, тело ответа около 6,5 КБ).
Создание файла .lrc
Этот эндпоинт возвращает только данные таймлайна и не отдаёт файл напрямую. Если нужен .lrc, соберите строки из возвращённого start_s в формате [mm:ss.cc] (поле word содержит собственные переводы строк — разделите по строкам и пропустите пустые). Пример — в разделе «Как получить текст с таймкодами (.lrc)» в API скачивания и прослушивания медиа песен.
Ниже — полный вариант с фильтрацией инструментальных и структурных маркеров (один сегмент на строку, удобно сначала проверить форму данных):
import re
SKIP = re.compile(r"^\[.*\]$|^Instrumental:")
def to_lrc(segments):
lines = []
for seg in segments:
if not seg.get("success", True):
continue
text = (seg.get("word") or "").strip()
if not text or SKIP.match(text):
continue
cs = int(max(0.0, float(seg["start_s"])) * 100 + 0.5)
lines.append(f"[{cs // 6000:02d}:{(cs % 6000) // 100:02d}.{cs % 100:02d}]{text}")
return "\n".join(lines)
Примечания по совместимости
В прежней документации использовался пример с объектом-обёрткой { success, song_id, lyrics: [...] }. Текущая документация считает правильным напрямую возвращаемый массив таймлайна.
Получить API-ключ
Создайте API-ключ в консоли после регистрации. Одна генерация стоит 0,6 ¥ и возвращает 2 трека, загрузки не ограничены, номер телефона не нужен.
Получить API-ключ Вернуться к обзору