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.0

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.0
File Size Uploaded
async_yt_dlp-0.1.0.tar.gz 330.9 kB Details

Built distribution (wheel)

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

Total release size: 390.5 kB

Release files / async_yt_dlp-0.1.0.tar.gz

Download URL async_yt_dlp-0.1.0.tar.gz
Size 330.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e10817c4761557a55dee81f596e1da8cc4895e531cae4832ede12bd001f46936
BLAKE2b-256 checksum
How to use checksums
e37878cfe1f3372fd9d6e781ac5995330bca23c23d69afeba4bddfbbff949931
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.0-py3-none-any.whl

Download URL async_yt_dlp-0.1.0-py3-none-any.whl
Size 59.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
af8e785bd849ae83090f05b77293af0fb7fa15d26fda49165944efa5bda01549
BLAKE2b-256 checksum
How to use checksums
ff69ebaabf30a744b7cebef6e8d50cc38da4453ed8c074432c7e74359f87a494
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

0.1.1

2 release files

This release

0.1.0 This release

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