@youka/sdk и @youka/cli версии 0.2.0 или новее для этих примеров. Проекты, созданные через API, остаются доступными в вашей библиотеке Youka.
Выберите рабочий процесс и модель
kind выбирает рабочий процесс проекта. karaoke разделяет стемы. lyric-video использует исходное аудио и не списывает кредиты за разделение. Если kind опущен, сохраняется существующее поведение karaoke. Обработка текста — это отдельный выбор: выравнивание, транскрипция или без обработки.
Перед выбором модели определите доступные модели и соответствие аккаунта требованиям.
suppliedTextHandling различает выравнивание, ключевые термины провайдера и корректировку после транскрипции. Соответствие требованиям отражает аутентифицированный аккаунт. Обнаружение описывает настроенную поддержку, а не гарантию доступности провайдера. Проверка запросов и расчёты стоимости остаются определяющими.
Модели, которым нужен изолированный вокал, не могут обрабатывать lyric video без разделения. Используйте их в рабочем процессе karaoke вместе с моделью разделения, которая выдаёт вокал. Wav2Vec2 — модель выравнивания. ElevenLabs Scribe — модель транскрипции. Переданный текст транскрипции — это ориентир, а не гарантия идентичного выходного текста.
Создание проектов и расчёт стоимости
--kind или передайте --kind karaoke и выберите --split-model. Используйте --mode none, чтобы создать проект без обработки текста. Запросы lyric-video отклоняют параметры разделения.
Рассчитывайте стоимость для того же источника, рабочего процесса и опций обработки до создания.
Корректировка таймингов без задач обработки
Считывайте выравнивания черезGET /projects/{projectId}/alignments, затем получайте выбранный ресурс через GET /projects/{projectId}/alignments/{alignmentId}. Список содержит alignments, selectedAlignmentId и selectionRevision. Каждый ресурс включает тайминговую нагрузку, revision, selected и selectionRevision.
Обновления заменяют объект alignment целиком. Они не запускают синхронизацию и не создают удержание кредитов на обработку. При редактировании сохраняйте ID, текст, индексы строк/слов/субслов, информацию о певце и переводы. Времена — это абсолютные десятичные секунды. Вносите желаемую корректировку один раз в отправляемых значениях. Не добавляйте ту же корректировку повторно как offset при экспорте.
select: true, чтобы сохранить и выбрать атомарно. Чтобы выбрать существующие тайминги, не заменяя их, вызовите client.projects.alignments.select(projectId, alignmentId, { expectedRevision, expectedSelectionRevision }).
Ревизия выравнивания защищает содержимое таймингов. Ревизия выбора защищает то, какое выравнивание активно. Устаревший токен приводит к HTTP 409. Получите актуальный ресурс, сравните правки и отправьте осознанную замену. Не обновляйте токен автоматически, перезаписывая изменения другого редактора.
CLI принимает JSON-файл или стандартный ввод. Файл импорта содержит { "alignment": { "items": [...] }, "expectedRevision": "..." }. Добавляйте select и expectedSelectionRevision при атомарном выборе. Экспортированные ресурсы также содержат метаданные ответа, поэтому перед импортом извлеките поля запроса.
Экспорт выбранной версии
versionId необязателен в запросах экспорта и обновлениях настроек, а также в query для GET настроек. Если его опустить, сохраняется поведение основной версии. Выбранное выравнивание относится к проекту, а стили и настройки относятся к выбранной версии.
versionId, alignmentId и alignmentRevision. Эти поля идентифицируют снимок таймингов, использованный для этого экспорта или подготовленного payload. Каждая подготовка читает текущее состояние, поэтому отдельный последующий экспорт может увидеть более новые правки. Сохраняйте возвращённый payload, когда внешний рендерер должен отрендерить ровно этот подготовленный снимок, и обновляйте его, когда истекают подписанные URL медиа.
Прозрачный локальный вывод использует ProRes 4444 в контейнере MOV. --mute-all сопоставляет всем стемам проекта нулевую громкость. Тишина и отсутствие аудиодорожки — разные свойства результата; проверяйте отрендеренный файл, если нижестоящему инструменту требуется одно из них. Локальный рендеринг не расходует кредиты облачного экспорта и остаётся предметом существующей проверки доступных возможностей.
Тайминги слов, глобальные аудио offset’ы и опережение текста — это отдельные настройки. Существующие макеты управляют видимостью строк. Этот релиз не обещает фиксированный интервал появления для каждой строки и не добавляет отдельный API для прикрепления backing-track.
Безопасная работа с каталогом
Ведите манифест со стабильным ID элемента, отпечатком источника, настройками операции, ключом идемпотентности, ID проекта/задачи и последним терминальным результатом. Повторно используйте ключ только для повторов одного и того же запроса. Сохраняйте результаты создания до ожидания завершения, чтобы перезапуск мог продолжить опрос. Загрузки и локальная подготовка файлов имеют собственный жизненный цикл; ключ идемпотентности создания не дедуплицирует каждую загрузку. Исполняемый пример catalogue example принимает ID заранее загруженных входных файлов и сохраняет по одной контрольной точке на элемент. Манифест выглядит так.catalogue.ts. Установите его зависимости и задайте YOUKA_API_KEY. Используйте проект Node.js с "type": "module" в package.json.
.lock только после подтверждения, что PID, записанный в нём, больше не запущен.
Начинайте с одного элемента «в полёте». Увеличивайте ограниченное число воркеров только после измерения задержек обработки и ответов о лимитах для вашего аккаунта. Повторяйте транспортные ошибки и ограничения по rate limit с backoff, учитывая Retry-After. Не делайте слепые повторы для ошибок валидации, конфликтов таймингов или терминальных сбоев обработки. Ошибки аутентификации требуют корректных учётных данных; они не означают, что задача обработки провалилась.
Сохраняйте существующий опрос облачных задач и обработку кредитов при неудачах. Здесь не вводятся batch endpoint, обещание webhook’ов, изменение цен, изменение лицензирования или политика хранения.