Skip to main content

async-yt-dlp

CI PyPI version Python 3.11+ Typing: Typed License: MIT

Высокопроизводительная, строго типизированная асинхронная Python-библиотека обёртка над yt-dlp.

ВозможностиУстановкаБыстрый стартАрхитектураДокументацияЛицензия


async-yt-dlp — это универсальный асинхронный SDK / adapter layer над мощным синхронным ядром yt-dlp. Библиотека спроектирована для использования в любых современных async-приложениях:

  • Telegram-ботах (aiogram, telethon, pyrogram)
  • Discord-ботах (discord.py)
  • Веб-сервисах и API (FastAPI, Litestar, Aiohttp)
  • Фоновых воркерах и очередях (Celery, ARQ, Taskiq)

Библиотека не зависит от Telegram или каких-либо веб-фреймворков и является полностью самостоятельным проектом.


Возможности

  • 100% Async Native: Все блокирующие операции сети, диска и ffmpeg вынесены в системные потоки через asyncio.to_thread. Event loop никогда не блокируется.
  • Строгая типизация: Модели MediaInfo, FormatInfo, DownloadResult, ProgressEvent (PEP 561 py.typed, совместимо со строгим режимом mypy).
  • Потокобезопасность: Изолированный экземпляр YoutubeDL на каждую операцию исключает состояние гонки и порчу сессий.
  • Плавный стриминг прогресса: Асинхронный генератор download_with_progress с адаптивным троттлингом (защита от перегрузки интерфейса и спама).
  • Контроль параллельности: Встроенный DownloadManager на базе asyncio.Semaphore с ограничением емкости очереди (backpressure).
  • Структурированная конкурентность: Поддержка asyncio.TaskGroup в пакетной загрузке download_many.
  • Честная модель отмены: Корректная обработка task.cancel(), таймаутов asyncio.timeout и graceful shutdown.
  • Безопасность данных: Автоматическая маскировка паролей, токенов, cookies и прокси в логах; защита от SSRF и протокола file://.
  • Проверка зависимостей: Встроенная диагностика окружения (check_dependencies) для проверки yt-dlp, ffmpeg, ffprobe и JS-движков.

Установка

Требуется Python 3.11+.

# Базовая установка:
pip install async-yt-dlp

# С опциональной интеграцией с async-ffmpeg:
pip install "async-yt-dlp[ffmpeg]"

# Полный набор (async-ffmpeg + сетевые акселераторы curl-cffi, websockets и др.):
pip install "async-yt-dlp[full]"

Или с использованием uv:

uv add async-yt-dlp

Быстрый старт

1. Извлечение метаданных видео или плейлиста

import asyncio
from async_yt_dlp import AsyncYTDLP


async def main():
    async with AsyncYTDLP() as ytdlp:
        info = await ytdlp.extract_info("https://www.youtube.com/watch?v=BaW_jenozKc")
        print(f"🎬 {info.title}")
        print(f"👤 Автор: {info.uploader}")
        print(f"⏱ Длительность: {info.duration_seconds} сек.")


if __name__ == "__main__":
    asyncio.run(main())

2. Скачивание видео с настройками качества

import asyncio
from pathlib import Path
from async_yt_dlp import AsyncYTDLP, YTDLPOptions


async def main():
    options = YTDLPOptions(
        format="bestvideo[height<=720]+bestaudio/best[height<=720]",
        output_path=Path("./downloads"),
        output_template="%(title)s.%(ext)s",
    )

    async with AsyncYTDLP(default_options=options) as ytdlp:
        result = await ytdlp.download("https://www.youtube.com/watch?v=BaW_jenozKc")
        print(f"✅ Файл сохранен: {result.filepath} ({result.file_size} байт)")


if __name__ == "__main__":
    asyncio.run(main())

3. Стриминг прогресса загрузки в реальном времени

import asyncio
from async_yt_dlp import AsyncYTDLP, DownloadStatus


async def main():
    async with AsyncYTDLP() as ytdlp:
        url = "https://www.youtube.com/watch?v=BaW_jenozKc"

        async for event in ytdlp.download_with_progress(url, throttle_interval=0.5):
            if event.status == DownloadStatus.DOWNLOADING:
                print(
                    f"\rЗагрузка: {event.percent:.1f}% | {event.speed_str} | ETA: {event.eta_str}",
                    end="",
                )
            elif event.status == DownloadStatus.COMPLETE:
                print("\nГотово!")


if __name__ == "__main__":
    asyncio.run(main())

Архитектура

┌───────────────────────────────────────────────┐
│     Приложение (Telegram, Web, CLI, Bot)      │
└───────────────────────┬───────────────────────┘
                        │
            ┌───────────▼───────────┐
            │       AsyncYTDLP      │  ← Фасад, API, Lifecycle
            └───────────┬───────────┘
                        │
            ┌───────────▼───────────┐
            │    DownloadManager    │  ← Semaphore, Backpressure, Shutdown
            └───────────┬───────────┘
                        │
            ┌───────────▼───────────┐
            │     ThreadBackend     │  ← asyncio.to_thread, изолированный
            └───────────┬───────────┘     экземпляр YoutubeDL на операцию
                        │
            ┌───────────▼───────────┐
            │   yt_dlp.YoutubeDL    │  ← Синхронный движок yt-dlp
            └───────────────────────┘

Подробное описание архитектуры доступно в документе docs/architecture.md.


Документация

Подробные руководства на русском языке находятся в каталоге docs/:

  1. Быстрый старт
  2. Архитектура и дизайн
  3. Справочник публичного API
  4. Конфигурация YTDLPOptions
  5. Управление параллельностью
  6. Модель отмены и таймауты
  7. Отслеживание прогресса
  8. Иерархия исключений
  9. Безопасность и санитизация
  10. Производительность и оптимизация
  11. Развертывание и Docker
  12. Руководство для разработчиков
  13. Тестирование
  14. Устранение неполадок
  15. Миграция с синхронного yt-dlp

Примеры использования

В каталоге examples/ представлены готовые примеры кода:


Лицензия

Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.

Release files for async-yt-dlp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for async-yt-dlp 0.1.1
File Size Uploaded
async_yt_dlp-0.1.1.tar.gz 330.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-yt-dlp 0.1.1
File Interpreter ABI Platform
async_yt_dlp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 390.5 kB

Release files / async_yt_dlp-0.1.1.tar.gz

Download URL async_yt_dlp-0.1.1.tar.gz
Size 330.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ef2f8c7adb64c52b0156ab2e28951809bdda15d2eec36cab3a56b496b7a315dd
BLAKE2b-256 checksum
How to use checksums
576ff871ef25a65024b5ae598c08896e03728498ce5b64c956b700aaed9f6876
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / async_yt_dlp-0.1.1-py3-none-any.whl

Download URL async_yt_dlp-0.1.1-py3-none-any.whl
Size 59.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1c5e89f119b87cb9de2d9717b12227a4628ed7c161ffe2b17d9190a1d9fe7d69
BLAKE2b-256 checksum
How to use checksums
ca9ba3933131139f91181f73c66bc207ba18b06ed1524a656c5c8e2966b451d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page