🎌 Личный загрузчик без ограничений

Скачивайте всё
с YouTube

MP3, FLAC, 4K видео, плейлисты, обложки —
без рекламы, без капчи, без лимитов.

⬇ Скачать сейчас
音楽
✦ Возможности

Почему именно здесь?

Не очередной онлайн-конвертер — полноценный инструмент с профессиональными возможностями, который работает так, как вы хотите.

Все аудио и видео форматы

MP3, M4A, OGG, FLAC, WAV, OPUS — для аудио. MP4, WebM, MKV — для видео. Качество аудио от 64 kbps до lossless, видео от 360p до 4K. Вы сами решаете, что нужно.

Плейлисты целиком

Вставьте ссылку на плейлист — получите полный список треков. Выберите нужные галочками и скачайте все сразу. Каждый трек обрабатывается параллельно.

Обложки и метаданные

Обложка вшивается прямо в MP3/FLAC/MP4 — видно в плеере, Telegram, VK Music. Отдельно скачивается как JPEG. Плюс полный JSON с описанием, тегами, главами и статистикой.

Файлы хранятся 24 часа

Скачали — не торопитесь. Файл лежит на сервере сутки. Можно вернуться через час, зайти с другого устройства, поделиться ссылкой. История хранится навсегда.

Субтитры прямо в видео

Вшиваем субтитры на любом языке (ru, en, de, fr...) прямо в MP4/MKV файл. Авторские и автоматически сгенерированные YouTube субтитры — выбирайте сами.

Личный кабинет

Войдите по email — и все загрузки в одном месте. Безлимитное скачивание, полная история, кнопки для повторного скачивания пока файл жив на сервере.

✦ Инструкция

Как пользоваться

Три шага — и файл у вас. Никакой регистрации для первого скачивания не нужно.

1

Вставьте ссылку на YouTube

Скопируйте URL и вставьте в поле. Подходят любые форматы ссылок:

  • https://www.youtube.com/watch?v=dQw4w9WgXcQ — обычная
  • https://youtu.be/dQw4w9WgXcQ — сокращённая
  • https://youtube.com/playlist?list=PLxxxxxx — плейлист
  • https://youtube.com/@channel/videos — канал или раздел
  • https://youtube.com/shorts/xxxxxxx — Shorts

Нажмите «Получить инфо» — покажем название, канал, длительность и превью перед скачиванием.

2

Выберите формат и настройки

Нажмите нужный формат: MP3 для музыки, MP4 для видео, FLAC для аудиофилов без потерь. Выберите качество, поставьте галочку «Обложка» если хотите встроенный арт, включите метаданные. Для плейлиста — выберите треки галочками и скачайте всё сразу.

3

Скачайте файл (и не только)

Прогресс виден в реальном времени: скачивание → конвертация → готово. Когда файл готов — появятся кнопки: ⬇ Скачать (основной файл), 🖼 Обложка (JPEG отдельно), 📄 JSON (полная информация о треке). Зарегистрированные пользователи могут вернуться в Кабинет и скачать повторно в течение 24 часов.

Скачать

Без регистрации — 1 бесплатное скачивание. Войдите по email — безлимитно.
9
форматов файлов
4K
максимальное видео
24ч
хранение на сервере
0₽
полностью бесплатно
загрузок для аккаунта
✦ Поддерживаемые ссылки

Что можно скачать

Вставьте любую ссылку с YouTube — сервис автоматически определит тип и предложит нужные настройки. Работают все форматы URL, включая мобильные, короткие и ссылки на Shorts.

🎵

Нарезка по главам — один клик

Многие YouTube-видео (лайвы, лонгриды, сборники, альбомы) содержат главы с таймкодами. Нажмите кнопку 🎵 Треки под скачанным файлом — сервис автоматически разрежет аудио по каждой главе и отдаст отдельные MP3 с правильными именами и обложками.

  • Каждый трек — отдельный файл с именем из главы
  • Обложка альбома встраивается в каждый MP3 / M4A
  • Все файлы доступны по прямым ссылкам из S3 — 48 часов
  • Через API можно запустить нарезку одним параметром: "split": true
✦ Форматы

Какой формат выбрать?

Поддерживаем 9 форматов — от компактного MP3 до lossless FLAC и 4K-видео. Разбираемся, что для чего.

MP3

Универсальный аудиоформат

Работает на любом устройстве и плеере. Качество от 64 до 320 kbps — для обычного прослушивания хватит 192 kbps. Меньше места, чем FLAC, но с небольшой потерей качества. Идеально для смартфона, машины, колонок.

FLAC

Без потерь для аудиофилов

Lossless-формат: сохраняет каждый бит оригинального звука. Файл больше MP3 в 3–5 раз, зато качество — точь-в-точь как в источнике. Подходит для Hi-Fi систем, студийного мониторинга, архивного хранения.

M4A

Аудио для Apple-экосистемы

Формат AAC в контейнере M4A — родной для iPhone, iPad, macOS и iTunes. При том же размере файла звучит лучше MP3. Поддерживает метаданные и обложки нативно. Оптимален если вы используете устройства Apple.

OGG / OPUS

Открытые форматы без лицензий

OGG Vorbis и OPUS — свободные кодеки. OPUS особенно хорош при низких битрейтах: 128 kbps OPUS звучит как 192 kbps MP3. Используется в WhatsApp, Telegram, Discord. Хорошая совместимость с Android.

MP4

Видео до 4K с любым качеством

Стандартный видеоформат — совместим со всеми устройствами и платформами. Выбирайте разрешение от 360p до 4K (2160p). Можно встроить субтитры, обложку и метаданные. Скачивается с лучшим видео и аудио потоком.

WebM / MKV

Контейнеры для профессионалов

WebM — открытый формат Google, отлично работает в браузерах. MKV — гибкий контейнер, вмещает любые кодеки, несколько аудиодорожек и субтитры. Оба подходят для сохранения видео в максимальном качестве.

✦ Сравнение

Чем отличаемся от других сервисов

Большинство онлайн-конвертеров YouTube2MP3 ограничивают форматы, показывают рекламу и не дают скачать плейлист. Мы — нет.

Функция YouTube2MP3.koderra.ru Типичный онлайн-сервис
Форматы аудиоMP3, FLAC, M4A, OGG, WAV, OPUSТолько MP3
Форматы видеоMP4, WebM, MKV до 4KMP4 до 1080p
Плейлисты✓ Целый плейлист с выбором треков✗ Только одно видео
Встроенная обложка✓ В MP3, FLAC, M4A, MP4
Субтитры в видео✓ Вшиваются в MP4/MKV
Метаданные✓ Исполнитель, альбом, год
JSON-информация о треке✓ Описание, теги, главы, статистика
История загрузок✓ Навсегда, в личном кабинете
Реклама✓ Полностью отсутствуетАгрессивная, 3–5 попапов
Ограничение на длину✓ Нет ограниченийЧасто до 15–20 минут
✦ О сервисе

Скачать MP3 с YouTube — просто и без лишнего

Как работает конвертер YouTube в MP3

Вы вставляете ссылку на видео — сервис получает информацию о нём через yt-dlp, один из лучших открытых загрузчиков видео. Затем скачивает аудиодорожку напрямую из YouTube и конвертирует её в нужный формат с помощью FFmpeg — профессионального инструмента для обработки медиафайлов.

Весь процесс занимает от нескольких секунд до минуты в зависимости от длины видео. Прогресс отображается в реальном времени. Готовый файл хранится на сервере 24 часа — скачивайте в любое удобное время.

Скачивание плейлистов с YouTube

Вставьте ссылку на плейлист — сервис покажет список всех треков с названиями и длительностью. Снимите галочки с тех, что не нужны, и нажмите «Скачать выбранные». Каждый трек обрабатывается параллельно, прогресс виден по каждому отдельно.

Плейлисты YouTube, подборки по каналу, результаты поиска — всё это можно скачать одним действием. Поддерживаются плейлисты любой длины.

Обложки треков и метаданные

При скачивании MP3 или FLAC вы можете включить опцию «Обложка в файл» — превью видео с YouTube будет вшито прямо в аудиофайл. Плееры на телефоне, в машине, в Telegram и VK Music покажут красивую картинку. Метаданные (название, исполнитель, альбом) прописываются автоматически. Дополнительно всегда доступен отдельный JPEG-файл с обложкой и JSON с полной информацией о треке.

Личный кабинет и история загрузок

Зарегистрируйтесь по email — и все ваши загрузки сохраняются в личном кабинете. Пока файл жив на сервере (24 часа), можно скачать повторно: с телефона, ноутбука, с другого браузера. После удаления файла запись в истории остаётся — видно, что и когда скачивалось. Лимит загрузок для зарегистрированных пользователей — безлимитный.

✦ FAQ

Часто задаваемые вопросы

Отвечаем на самые распространённые вопросы о скачивании музыки и видео с YouTube.

Как скачать MP3 с YouTube бесплатно?
Вставьте ссылку на видео YouTube в поле выше, нажмите «Получить инфо», выберите формат MP3 и нажмите «Скачать». Первое скачивание — бесплатно и без регистрации. Для безлимитного доступа войдите по email — регистрация занимает 30 секунд.
Можно ли скачать весь плейлист YouTube сразу?
Да. Вставьте ссылку на плейлист (например, youtube.com/playlist?list=...) — сервис покажет список всех треков. Выберите нужные галочками и нажмите «Скачать выбранные». Каждый трек скачается и сконвертируется параллельно.
Какое качество MP3 можно получить?
Максимальное качество зависит от исходного видео на YouTube. Для большинства видео доступно 192–320 kbps. В настройках выберите качество: от 64 kbps (компактно, для подкастов) до 320 kbps (максимальное, для музыки) или «Лучшее» (VBR — переменный битрейт, оптимальное соотношение качества и размера).
Как долго хранятся скачанные файлы?
Файлы хранятся на сервере 24 часа после скачивания. В течение этого времени вы можете скачать их повторно из Личного кабинета — с любого устройства. После 24 часов файл удаляется автоматически, но запись в истории остаётся навсегда.
Можно ли скачать видео в 4K?
Да, если YouTube предоставляет 4K-версию видео. Выберите формат MP4 (или WebM/MKV), в настройках качества выберите «4K (2160p)» — сервис скачает лучшую доступную версию. Обратите внимание: 4K-файлы могут весить несколько гигабайт.
Как встроить обложку в MP3-файл?
При выборе аудиоформата (MP3, FLAC, M4A и т.д.) поставьте галочку «🖼 Обложка в файл» перед нажатием «Скачать». Превью видео с YouTube будет автоматически вшито в аудиофайл. Дополнительно всегда доступна кнопка «🖼» для скачивания обложки отдельным JPEG-файлом.
Что такое формат FLAC и зачем он нужен?
FLAC (Free Lossless Audio Codec) — формат сжатия без потерь. В отличие от MP3, который убирает «незаметные» для уха частоты, FLAC сохраняет полностью весь звук оригинала. Файл весит в 3–5 раз больше MP3, зато качество идеальное. Выбирайте FLAC для Hi-Fi систем, студийного мониторинга или архивного хранения музыки.
Поддерживаются ли субтитры?
Да, для видеоформатов (MP4, MKV). Поставьте галочку «💬 Субтитры» и укажите нужные языки через запятую (например, ru,en). Субтитры будут скачаны — как авторские, так и автоматически сгенерированные YouTube — и вшиты прямо в видеофайл.
Нужна ли регистрация?
Нет — первое скачивание доступно без регистрации. Для безлимитного доступа и истории загрузок войдите по email: нажмите «Войти», введите email — на него придёт шестизначный код, после ввода которого вы авторизованы. Пароль не нужен.
Можно ли скачать YouTube Shorts в MP3?
Да. Shorts — это обычные короткие видео на YouTube. Вставьте ссылку вида youtube.com/shorts/xxx, выберите формат MP3 (или любой другой) и нажмите «Скачать». Сервис обработает его так же, как обычное видео.
Что такое нарезка по главам и как ей пользоваться?
Если YouTube-видео содержит главы (таймкоды в описании или на таймлайне), после скачивания появляется кнопка «🎵 Треки». Нажмите — сервис автоматически разрежет аудио на отдельные файлы по каждой главе, даст им имена из названий глав и встроит обложку. Это удобно для альбомов, лайвов и лонгридов, выложенных целиком.
Есть ли API для автоматического скачивания?
Да. Авторизованные пользователи могут получить API-ключ в разделе «API» и использовать его для программного скачивания. Поддерживается постановка задач на скачивание и нарезку по главам, хранение файлов в S3, опрос статуса задачи и получение готовых прямых ссылок. Подробная документация — в разделе API.

Мои загрузки

Готовые файлы хранятся на сервере 24 часа — можно вернуться и скачать в любой момент.
После истечения срока файл удаляется автоматически, но запись в истории остаётся навсегда.

💾 Файлы хранятся на нашем сервере и доступны только вам по вашей учётной записи. Скачайте их до истечения срока — после этого придётся загружать заново с YouTube.

Активные задачи

Загрузка...

История задач

Загрузка...

Настройки

Управляйте шаблонами имён файлов и другими параметрами аккаунта.

🗂 Шаблоны имён файлов

Имя файла формируется из шаблона. Используйте переменные в фигурных скобках — они заменятся реальными данными трека при скачивании.

{channel} — название канала / исполнителя
{title} — название видео / альбома
{id} — ID видео на YouTube
{chapter_num} — номер трека (01, 02…) только для глав
{chapter_title} — название главы только для глав
Примеры шаблонов
ШаблонРезультат файла
{channel} - {title}nireya-soviet-wave-1980s.mp3
{title}soviet-wave-1980s.mp3
{title} [{id}]soviet-wave-1980s-EIAsSYE33Po.mp3
{channel} - {chapter_num}. {chapter_title}nireya-01-polivoks-skyline.mp3
{chapter_num} {chapter_title}01-polivoks-skyline.mp3

Пробелы, точки и специальные символы автоматически преобразуются в дефисы. Кириллица транслитерируется в латиницу.

Используется когда скачиваешь весь трек целиком
Используется при нарезке по главам (кнопка «🎵 Треки» в кабинете)
⚙ Форматирование имён

Правила применяются к любому шаблону после подстановки значений.

Developer API

Программный доступ к сервису — ставьте задачи на скачивание и нарезку, получайте готовые файлы из S3.

🔑 Ваш API-ключ
Передаётся в заголовке X-Api-Key с каждым запросом. Кликните по ключу, чтобы показать.
ключ не сгенерирован
🧪 Playground — попробовать API
Введите одну или несколько ссылок (каждая на новой строке). Плейлисты будут автоматически разбиты на треки.
URLs (по одной на строке)
Эквивалентный curl-запрос:
— заполните поля выше —
Нужен сгенерированный API-ключ
1. Обзор и принцип работы

API позволяет программно скачивать аудио и видео с YouTube: отправляете ссылки — получаете готовые файлы в S3 с presigned URL. Плейлисты раскрываются в отдельные задачи автоматически.

Общая схема работы
1
Анализ — опционально: POST /api/info вернёт название, длительность, форматы и список треков плейлиста до создания задач.
2
Создание батчаPOST /api/v1/batch принимает массив URL (до 50), автоматически определяет плейлисты, создаёт по одной задаче на каждый трек и возвращает batch_id + список task_id.
3
ОпросGET /api/v1/batch/{id} возвращает все задачи батча сразу; GET /api/v1/tasks/{id} — одну задачу с полным JSON. Рекомендуемый интервал: 3–5 секунд.
4
Скачивание — в ответе поля track.file.url, track.thumbnail.url, chapters[n].file.url содержат presigned URL, действительные 48 часов. Сами файлы в S3 хранятся 24 часа.
Поддерживаемые форматы
🎵 Аудио
mp3m4aflacwavoggopus
🎬 Видео
mp4webmmkv
Режим split (нарезка по главам)
split: false  Скачать → конвертировать → S3. В ответе: track.file.url, обложка, info.json. Поле chapters = null.
split: true   Скачать → S3 (полный файл) → нарезать по главам YouTube → каждую главу в S3. Если у видео нет глав — нарезки не будет, chapters = null, полный файл доступен как обычно.
Base URL https://youtube2mp3.koderra.ru

2. Аутентификация

Все запросы к /api/v1/* требуют API-ключ в заголовке X-Api-Key. Ключ генерируется в блоке выше — он привязан к вашему аккаунту и даёт доступ только к вашим задачам.

HTTPPOST /api/v1/batch HTTP/1.1 Host: youtube2mp3.koderra.ru X-Api-Key: FtErcKl8zre_QDCWUlImpgRvosx3bSyxFZZaDYBVngY Content-Type: application/json
HTTP-кодЗначение
403Заголовок X-Api-Key отсутствует или ключ неверный
404Задача/батч не найдены или принадлежат другому ключу

⚠ Не передавайте ключ в URL-параметрах и не публикуйте в открытом коде. При компрометации — отзовите и сгенерируйте новый.


3. Анализ URL
POST /api/info Получить метаданные видео или содержимое плейлиста — без создания задачи

Используйте для предварительного анализа: узнать название, длительность, доступные форматы, наличие глав и треки плейлиста. Аутентификация не требуется.

Тело запроса
ПолеТипОписание
url*stringСсылка на видео, Shorts или плейлист YouTube
Ответ — одиночное видео
JSON{ "type": "video", "id": "dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up (Official Video)", "channel": "Rick Astley", "duration": 213, // секунды "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "video_heights": [2160, 1440, 1080, 720, 480, 360, 240], // доступные разрешения "audio_abr": 129, // нативный битрейт аудио, kbps "audio_codecs": ["AAC/M4A", "Opus/WebM"], // нативные аудиоформаты "has_chapters": false, "chapter_count": 0 }
Ответ — плейлист
JSON{ "type": "playlist", "title": "Popular Music Videos", "channel": "YouTube", "count": 183, "entries": [ { "id": "fOT0BUpITw8", "title": "BELLAKEO (Video Oficial) - Peso Pluma, Anitta", "duration": 183, "thumbnail": "https://i.ytimg.com/vi/fOT0BUpITw8/hqdefault.jpg", "url": "https://www.youtube.com/watch?v=fOT0BUpITw8" }, // ... остальные треки ... ] }

Поле audio_codecs: если в нём есть "AAC/M4A" — скачать в m4a можно без перекодирования (нативный поток). Аналогично "Opus/WebM" → opus/webm без потери качества.


4. Создать батч задач
POST /api/v1/batch Отправить 1–50 URL — плейлисты разбиваются на треки автоматически

Главный эндпоинт. Принимает массив ссылок любого типа — каждый URL анализируется: если это плейлист, он раскрывается в отдельные задачи по каждому треку. Все задачи запускаются немедленно в фоне.

Тело запроса (JSON)
ПолеТипПо умолч.Описание
urls* string[] Массив ссылок, максимум 50. Смешивайте одиночные видео и плейлисты в одном запросе
formatopt string"mp3" Аудио: mp3 m4a flac wav ogg opus  |  Видео: mp4 webm mkv
audio_qualityopt string"192" Битрейт для аудиоформатов, kbps: "320" "256" "192" "128" "64" "0""0" означает нативный поток без перекодирования
qualityopt string"best" Разрешение для видеоформатов: "best" "2160p" "1440p" "1080p" "720p" "480p" "360p"
splitopt booleanfalse Нарезать по главам YouTube. Применяется ко всем задачам батча. Если у видео нет глав — chapters = null
Ответ 202 Accepted
JSON{ "batch_id": "de8a48c6-7d56-46d8-9f36-e35cc48010fa", // UUID батча "status": "pending", "task_count": 3, // суммарное число задач (1 видео + плейлист из 2 треков = 3) "tasks": [ { "task_id": "c5c824a3-0f13-4c57-bc9c-3c78ff48f4c6", "source_type": "single", // "single" | "playlist_track" "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "playlist_index": null }, { "task_id": "a8f21b3c-...", "source_type": "playlist_track", "url": "https://www.youtube.com/watch?v=fOT0BUpITw8", "playlist_index": 0 // позиция в плейлисте, начиная с 0 }, { "task_id": "b3e90f1d-...", "source_type": "playlist_track", "url": "https://www.youtube.com/watch?v=abc123XYZ", "playlist_index": 1 } ] }

Если в массиве urls есть плейлист — сервис сначала запрашивает его содержимое у YouTube, что занимает несколько секунд. Ответ 202 приходит после создания всех задач.


5. Статус батча
GET /api/v1/batch/{batch_id} Все задачи батча с результатами — удобно для ожидания готовности всего пакета

Возвращает параметры батча и полный список задач, каждая со своим статусом и результатом. Задачи идут в порядке playlist_index → времени создания.

JSON{ "batch_id": "de8a48c6-7d56-46d8-9f36-e35cc48010fa", "status": "done", // агрегированный статус — см. ниже "created_at": "2026-06-02T18:39:10.123456+00:00", "format": "mp3", "quality": "best", "audio_quality": "128", "split": false, "task_count": 2, "tasks": [ { /* полный объект задачи — см. раздел 6 */ }, { /* ... */ } ] }
Значения поля status батча
ЗначениеКогда
"processing"Хотя бы одна задача ещё не завершена (pending / processing / splitting)
"done"Все задачи завершились со статусом done
"partial"Все задачи завершились, но часть — с ошибкой (error)

6. Одна задача — полный результат
GET /api/v1/tasks/{task_id} Самодостаточный JSON: источник, трек, файлы, главы

Каждая задача описывает себя полностью: откуда взята (тип источника, контекст плейлиста), результат скачивания, все файлы с presigned URL. Используйте этот эндпоинт для опроса отдельных задач или когда нужен полный JSON конкретного трека.

Задача в процессе (status ≠ done)
JSON{ "task_id": "c5c824a3-0f13-4c57-bc9c-3c78ff48f4c6", "status": "processing", // pending | processing | splitting | done | error "created_at": "2026-06-02T18:39:10.412345+00:00", "completed_at": null, "source": { "type": "single", // "single" | "playlist_track" "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "format": "mp3", "quality": "best", "split": false, "batch_id": "de8a48c6-7d56-46d8-9f36-e35cc48010fa", "playlist_title": null, // строка — если source_type = "playlist_track" "playlist_index": null // целое — позиция в плейлисте (с 0) } // поля track и chapters отсутствуют, пока задача не завершена }
Готово, без нарезки (split: false)
JSON{ "task_id": "c5c824a3-0f13-4c57-bc9c-3c78ff48f4c6", "status": "done", "created_at": "2026-06-02T18:39:10.412345+00:00", "completed_at": "2026-06-02T18:39:30.972839+00:00", "source": { "type": "single", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "format": "mp3", "quality": "best", "split": false, "batch_id": "de8a48c6-...", "playlist_title": null, "playlist_index": null }, "track": { "title": "Rick Astley - Never Gonna Give You Up (Official Video)", "channel": "Rick Astley", "duration": 213, // секунды "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "expires_at": "2026-06-03T18:39:30+00:00", // когда файл удалится из S3 "file": { "filename": "rick-astley-never-gonna-give-you-up.mp3", "size": 3414884, // байты "s3_key": "youtube2mp3/c8947d50-.../rick-astley-....mp3", "url": "https://s3.ru1.storage.beget.cloud/...?X-Amz-Expires=172800&..." }, "thumbnail": { "s3_key": "youtube2mp3/c8947d50-.../cover.webp", "url": "https://s3.ru1.storage.beget.cloud/...?X-Amz-Expires=172800&..." }, "info_json": { "s3_key": "youtube2mp3/c8947d50-.../info.json", "url": "https://s3.ru1.storage.beget.cloud/...?X-Amz-Expires=172800&..." } }, "chapters": null // null при split:false }
Готово с нарезкой (split: true, главы найдены)
JSON{ "task_id": "a9656525-e265-4644-9f10-3738f605d264", "status": "done", "source": { "type": "single", "split": true, /* ... */ }, "track": { "title": "Nireya's Soviet Wave Lo-fi Playlist", "duration": 4539, "expires_at": "2026-06-03T18:31:00+00:00", "file": { "filename": "nireya-soviet-wave.mp3", "size": 108943068, "url": "..." }, "thumbnail": { "url": "..." }, "info_json": { "url": "..." } }, "chapters": [ { "index": 0, // с 0 "title": "1. Cosmic Dawn of CCCP", "start_time": 0.0, // секунды "end_time": 364.0, "file": { "filename": "nireya-01-1-cosmic-dawn-of-cccp.mp3", "size": 8741560, "s3_key": "youtube2mp3/a10082d6-.../chapters/nireya-01-....mp3", "url": "https://s3.ru1.storage.beget.cloud/...?X-Amz-Expires=172800&..." }, "info_json": { "s3_key": "youtube2mp3/a10082d6-.../chapters/nireya-01-....info.json", "url": "..." } }, // ... ещё 20 глав ... ] }
Ошибка (status: "error")
JSON{ "task_id": "8f0e28ca-3d47-4819-bf98-c573a3edc555", "status": "error", "created_at": "2026-06-02T17:00:00+00:00", "completed_at": "2026-06-02T17:00:08+00:00", "source": { "type": "playlist_track", "url": "https://www.youtube.com/watch?v=DELETED", "format": "mp3", "split": false, "batch_id": "...", "playlist_title": "My Playlist", "playlist_index": 5 }, "error": "ERROR: [youtube] DELETED: Video unavailable" }

7. Статусы и жизненный цикл
Статус задачиОписание
pendingЗадача принята, ждёт свободного слота для обработки
processingИдёт скачивание с YouTube, конвертация и загрузка в S3
splittingТрек в S3, идёт нарезка по главам и загрузка глав в S3 (только при split: true)
doneВсе файлы загружены. В ответе есть track и, если нарезалось, chapters
errorОшибка. Поле error содержит текст от yt-dlp или S3
Типичное время выполнения
СценарийОриентир
Короткий трек, MP3, без нарезки15–40 сек
Трек 1 час, MP3, без нарезки1–3 мин
Трек 1 час, MP3, нарезка на 20 глав3–8 мин
Плейлист 10 треков (параллельно)30–120 сек
Хранение файлов и presigned URL
📦  Файлы в S3 хранятся 24 часа с момента завершения задачи. После этого файлы удаляются, но запись о задаче остаётся.
🔗  Presigned URL (поля *.url) действительны 48 часов. Если ссылка истекла, а файл ещё не удалён — просто повторите GET-запрос задачи, ответ содержит свежие URL.
🕐  Опрос: рекомендуемый интервал — раз в 3–5 секунд. Не опрашивайте чаще 1 раза в секунду.

8. Полная схема ответа задачи
Корневые поля (GET /api/v1/tasks/{id})
ПолеТипКогдаОписание
task_idstring (UUID)всегдаИдентификатор задачи
statusstringвсегдаpending / processing / splitting / done / error
created_atstring (ISO 8601)всегдаВремя создания задачи, UTC
completed_atstring | nullвсегдаВремя завершения или null пока не готово
sourceobjectвсегдаОписание источника (см. ниже)
errorstring | nullerrorСообщение об ошибке
trackobject | nulldoneДанные трека и ссылки на файлы
chaptersarray | nulldoneСписок глав, если нарезка прошла; иначе null
Объект source
ПолеТипОписание
typestring"single" — одиночное видео; "playlist_track" — трек из плейлиста
urlstringИсходный URL видео
formatstringЗапрошенный формат
qualitystringЗапрошенное качество видео ("best" и т.д.)
splitbooleanБыла ли запрошена нарезка по главам
batch_idstring (UUID)UUID батча, в котором создана задача
playlist_titlestring | nullНазвание плейлиста (только при type: "playlist_track")
playlist_indexinteger | nullПорядковый номер в плейлисте, начиная с 0 (только при type: "playlist_track")
Объект track (при status: done)
ПолеТипОписание
titlestringНазвание видео
channelstringНазвание канала / автора
durationintegerДлительность в секундах
thumbnail_urlstringПрямая ссылка на превью с серверов YouTube (без TTL)
expires_atstring (ISO 8601)Когда файлы будут удалены из S3 (через 24 часа после завершения)
fileobjectАудио/видео файл: filename, size (байт), s3_key, url (presigned, 48 ч)
thumbnailobjectОбложка в S3 (WebP): s3_key, url (presigned, 48 ч)
info_jsonobjectПолные метаданные yt-dlp в S3: s3_key, url (presigned, 48 ч)
Элемент массива chapters[n] (при split: true и наличии глав)
ПолеТипОписание
indexintegerПорядковый номер главы, начиная с 0
titlestringНазвание главы из YouTube
start_timefloatНачало главы в секундах
end_timefloatКонец главы в секундах
fileobjectАудиофайл главы: filename, size (байт), s3_key, url (presigned)
info_jsonobjectМетаданные главы в S3: s3_key, url (presigned)

9. Ошибки HTTP
КодПричина
400Неверные параметры запроса — пустой urls, больше 50 ссылок, некорректный URL в /api/info
403Заголовок X-Api-Key отсутствует или ключ неверный / отозван
404Задача или батч не найдены, либо принадлежат другому API-ключу
422Ошибка валидации JSON (отсутствует обязательное поле, неверный тип)
JSON// 403 — отсутствует или неверный ключ { "detail": "API key required — pass X-Api-Key header" } // 404 — задача не найдена { "detail": "Task not found" } // 400 — слишком много ссылок { "detail": "Maximum 50 URLs per batch" } // 422 — отсутствует обязательное поле urls { "detail": [{ "loc": ["body", "urls"], "msg": "field required", "type": "value_error.missing" }] }

10. Примеры кода
Анализ URL перед отправкой
bash# Узнать метаданные видео curl -s -X POST https://youtube2mp3.koderra.ru/api/info \ -H "Content-Type: application/json" \ -d '{"url":"https://youtube.com/watch?v=dQw4w9WgXcQ"}' | jq . # Получить список треков плейлиста curl -s -X POST https://youtube2mp3.koderra.ru/api/info \ -H "Content-Type: application/json" \ -d '{"url":"https://youtube.com/playlist?list=PL..."}' | jq '.entries[].title'
Одно видео → MP3 320kbps
bashBATCH=$(curl -s -X POST https://youtube2mp3.koderra.ru/api/v1/batch \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"urls":["https://youtube.com/watch?v=dQw4w9WgXcQ"],"format":"mp3","audio_quality":"320"}') BATCH_ID=$(echo $BATCH | jq -r .batch_id) TASK_ID=$(echo $BATCH | jq -r '.tasks[0].task_id') echo "batch_id: $BATCH_ID, task_id: $TASK_ID"
Ждать готовности задачи и скачать файл
bash# Опрашивать каждые 5 секунд while true; do STATUS=$(curl -s https://youtube2mp3.koderra.ru/api/v1/tasks/$TASK_ID \ -H "X-Api-Key: ВАШ_КЛЮЧ" | jq -r .status) echo "status: $STATUS" [ "$STATUS" = "done" ] || [ "$STATUS" = "error" ] && break sleep 5 done # Получить presigned URL и скачать FILE_URL=$(curl -s https://youtube2mp3.koderra.ru/api/v1/tasks/$TASK_ID \ -H "X-Api-Key: ВАШ_КЛЮЧ" | jq -r '.track.file.url') curl -L -o track.mp3 "$FILE_URL"
Плейлист + видео → MP3, нарезка по главам
bashBATCH=$(curl -s -X POST https://youtube2mp3.koderra.ru/api/v1/batch \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{ "urls": [ "https://youtube.com/playlist?list=PL...", "https://youtu.be/EIAsSYE33Po" ], "format": "mp3", "audio_quality": "192", "split": true }') echo "Создано задач: $(echo $BATCH | jq .task_count)" echo "Batch ID: $(echo $BATCH | jq -r .batch_id)" # Опросить весь батч сразу while true; do STATUS=$(curl -s https://youtube2mp3.koderra.ru/api/v1/batch/$(echo $BATCH | jq -r .batch_id) \ -H "X-Api-Key: ВАШ_КЛЮЧ" | jq -r .status) echo "batch status: $STATUS" [ "$STATUS" = "done" ] || [ "$STATUS" = "partial" ] && break sleep 5 done # Скачать главы первой задачи curl -s https://youtube2mp3.koderra.ru/api/v1/tasks/$(echo $BATCH | jq -r '.tasks[0].task_id') \ -H "X-Api-Key: ВАШ_КЛЮЧ" | jq -r '.chapters[]? | "\(.index+1). \(.title) → \(.file.url)"'
Видео в 4K MP4
bashcurl -s -X POST https://youtube2mp3.koderra.ru/api/v1/batch \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"urls":["https://youtube.com/watch?v=dQw4w9WgXcQ"],"format":"mp4","quality":"2160p"}' | jq .
pythonimport requests, time, os API_KEY = "ВАШ_КЛЮЧ" BASE_URL = "https://youtube2mp3.koderra.ru" HEADERS = {"X-Api-Key": API_KEY} def analyze(url: str) -> dict: """Получить метаданные URL без создания задачи.""" r = requests.post(f"{BASE_URL}/api/info", json={"url": url}) r.raise_for_status() return r.json() def create_batch(urls: list[str], **kwargs) -> dict: """Создать батч задач. Плейлисты раскрываются автоматически.""" r = requests.post( f"{BASE_URL}/api/v1/batch", headers=HEADERS, json={"urls": urls, **kwargs}, ) r.raise_for_status() return r.json() def wait_batch(batch_id: str, interval: int = 5) -> dict: """Ждать завершения батча, опрашивать каждые interval секунд.""" while True: r = requests.get(f"{BASE_URL}/api/v1/batch/{batch_id}", headers=HEADERS) data = r.json() print(f"{data['status']} — {sum(1 for t in data['tasks'] if t['status']=='done')}/{data['task_count']} готово") if data["status"] in ("done", "partial"): return data time.sleep(interval) def download_task(task: dict, out_dir: str = ".") -> None: """Скачать основной файл и все главы задачи в папку.""" if task["status"] != "done": print(f" ✗ {task['task_id'][:8]}: {task.get('error', 'ошибка')}") return src = task["source"] track = task["track"] label = (f"{src['playlist_title']} #{src['playlist_index']+1}" if src["playlist_title"] else "single") print(f" [{label}] {track['title']} ({track['duration']}s)") # Основной файл f = track["file"] path = os.path.join(out_dir, f["filename"]) with open(path, "wb") as fp: fp.write(requests.get(f["url"]).content) print(f" ✓ {f['filename']} ({f['size'] // 1024} KB)") # Главы (если есть) if task.get("chapters"): chapters_dir = os.path.join(out_dir, "chapters") os.makedirs(chapters_dir, exist_ok=True) for ch in task["chapters"]: cf = ch["file"] cpath = os.path.join(chapters_dir, cf["filename"]) with open(cpath, "wb") as fp: fp.write(requests.get(cf["url"]).content) print(f" глава {ch['index']+1}: {ch['title']}") # ── Пример использования ───────────────────────────────────────── if __name__ == "__main__": # 1. Опциональный анализ info = analyze("https://youtube.com/watch?v=EIAsSYE33Po") print(f"Видео: {info['title']}, {info['chapter_count']} глав") # 2. Создать батч — плейлист + одиночное видео batch = create_batch( urls=[ "https://youtube.com/playlist?list=PL...", "https://youtube.com/watch?v=dQw4w9WgXcQ", ], format="mp3", audio_quality="320", split=True, ) print(f"Батч {batch['batch_id']}: {batch['task_count']} задач") # 3. Ждать и скачать result = wait_batch(batch["batch_id"]) os.makedirs("downloads", exist_ok=True) for task in result["tasks"]: download_task(task, out_dir="downloads")
javascriptconst API_KEY = 'ВАШ_КЛЮЧ'; const BASE = 'https://youtube2mp3.koderra.ru'; const V1 = `${BASE}/api/v1`; const headers = { 'X-Api-Key': API_KEY, 'Content-Type': 'application/json' }; /** Анализ URL — без создания задачи, аутентификация не нужна */ async function analyze(url) { const r = await fetch(`${BASE}/api/info`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ url }), }); if (!r.ok) throw new Error(await r.text()); return r.json(); } /** Создать батч задач */ async function createBatch(urls, opts = {}) { const r = await fetch(`${V1}/batch`, { method: 'POST', headers, body: JSON.stringify({ urls, ...opts }), }); if (!r.ok) throw new Error(await r.text()); return r.json(); } /** Опросить батч до завершения */ async function waitBatch(batchId, intervalMs = 4000) { while (true) { const data = await fetch(`${V1}/batch/${batchId}`, { headers }).then(r => r.json()); const done = data.tasks.filter(t => t.status === 'done').length; console.log(`[${data.status}] ${done}/${data.task_count} готово`); if (data.status === 'done' || data.status === 'partial') return data; await new Promise(r => setTimeout(r, intervalMs)); } } /** Опросить одну задачу до завершения */ async function waitTask(taskId, intervalMs = 4000) { while (true) { const data = await fetch(`${V1}/tasks/${taskId}`, { headers }).then(r => r.json()); if (data.status === 'done') return data; if (data.status === 'error') throw new Error(data.error); await new Promise(r => setTimeout(r, intervalMs)); } } // ── Пример: одно видео → MP3, ждём и выводим ссылку ────────────── (async () => { // 1. Анализируем — узнаём есть ли главы const info = await analyze('https://youtube.com/watch?v=EIAsSYE33Po'); console.log(`${info.title} — ${info.chapter_count} глав`); // 2. Создаём батч (split=true, т.к. у видео есть главы) const batch = await createBatch( ['https://youtube.com/watch?v=EIAsSYE33Po'], { format: 'mp3', audio_quality: '192', split: info.has_chapters }, ); console.log(`batch_id: ${batch.batch_id}, задач: ${batch.task_count}`); // 3. Ждём одну задачу через /tasks/ (альтернатива waitBatch) const task = await waitTask(batch.tasks[0].task_id); console.log('Готово:', task.track.title); console.log('Файл:', task.track.file.url); console.log('Размер:', (task.track.file.size / 1024 / 1024).toFixed(1), 'MB'); console.log('Действует до:', task.track.expires_at); // 4. Вывести список глав (если split=true и главы есть) task.chapters?.forEach(ch => { const dur = Math.round(ch.end_time - ch.start_time); console.log(` ${ch.index + 1}. ${ch.title} (${dur}s) — ${ch.file.url}`); }); })(); // ── Пример: плейлист → скачать все треки параллельно ────────────── (async () => { const batch = await createBatch( ['https://youtube.com/playlist?list=PL...'], { format: 'mp3', audio_quality: '320' }, ); console.log(`Плейлист: ${batch.task_count} треков`); const result = await waitBatch(batch.batch_id); // Сортируем по playlist_index и выводим result.tasks .filter(t => t.status === 'done') .sort((a, b) => (a.source.playlist_index ?? 0) - (b.source.playlist_index ?? 0)) .forEach(t => { const { playlist_index, playlist_title } = t.source; console.log(`#${playlist_index + 1} [${playlist_title}] ${t.track.title}`); console.log(' ', t.track.file.url); }); })();