Registry / http-networking / bgutil-ytdlp-pot-provider

bgutil-ytdlp-pot-provider

JSON →
library1.3.1pypypiunverified

The `bgutil-ytdlp-pot-provider` is a Python plugin for `yt-dlp` (version 1.3.1) designed to generate and provide YouTube Proof-of-Origin (POT) tokens. This aims to bypass YouTube's 'Sign in to confirm you're not a bot' messages and 403 errors when using `yt-dlp` from flagged IP addresses. The plugin acts as an interface to an external POT generation service (either a Node.js/Deno HTTP server/script or a recommended Rust HTTP server/binary). The project is actively maintained with updates often tied to changes in YouTube's bot detection mechanisms.

pip install -U bgutil-ytdlp-pot-provider
INSTALL
IMPORT
SIG · BGUTIL-YTDLP-POT-P
B
bgutil-ytdlp-pot-provider
http-networkingpythonv1.3.1
Install
1.5s avg
Import
Disk
16MB
Pass rate
10/ 10
Env Coverage10 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v1.3.1 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.920 runs
installs and imports cleanly · install 0.0s · import 0.000s · 17.8MB
glibc
py 3.103.920 runs
installs and imports cleanly · install 1.5s · import 0.000s · 18MB
16MB installed
● package 16MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

Not applicable for direct import
This library is a yt-dlp plugin and is used via yt-dlp's command-line interface. Direct Python imports for end-user code are not typically needed or exposed.
The functionality is integrated into yt-dlp, and you interact with it by configuring yt-dlp parameters or ensuring the external provider is running.

This quickstart demonstrates how to use `yt-dlp` from Python to download a video, leveraging the `bgutil-ytdlp-pot-provider` plugin. It assumes the Rust POT Provider server is already running, which is the recommended setup. The Python code executes `yt-dlp` as a subprocess with the necessary extractor arguments to direct it to the POT provider.

# Step 1: Install and start the Rust POT Provider (recommended) # Download the appropriate binary from https://github.com/jim60105/bgutil-ytdlp-pot-provider-rs/releases # For example, for Linux x86_64: # wget https://github.com/jim60105/bgutil-ytdlp-pot-provider-rs/releases/latest/download/bgutil-pot-linux-x86_64 # chmod +x bgutil-pot-linux-x86_64 # mv bgutil-pot-linux-x86_64 /usr/local/bin/bgutil-pot # Start the provider (e.g., in a separate terminal or as a service): # bgutil-pot server --port 4416 # Step 2: Install the Python plugin # pip install -U bgutil-ytdlp-pot-provider import subprocess import os # Example: Download a YouTube video using yt-dlp with the POT provider # Ensure the Rust POT server is running on the default port 4416 or configured correctly. def download_video_with_pot(video_url): try: # yt-dlp automatically detects and uses the running POT provider. # The 'youtubepot-bgutilhttp:' prefix is used by yt-dlp to specify # using the bgutil-ytdlp-pot-provider HTTP mode. command = [ "yt-dlp", "--extractor-args", "youtubepot-bgutilhttp:base_url=http://127.0.0.1:4416", video_url ] print(f"Attempting to download {video_url} with POT...") result = subprocess.run(command, check=True, capture_output=True, text=True) print("Download successful!") print(result.stdout) except subprocess.CalledProcessError as e: print(f"Error during download: {e}") print(f"Stdout: {e.stdout}") print(f"Stderr: {e.stderr}") except FileNotFoundError: print("Error: yt-dlp command not found. Please ensure yt-dlp is installed and in your PATH.") # Replace with your desired YouTube video URL video_to_download = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" download_video_with_pot(video_to_download)
Debug
Known issues
breakingMajor breaking changes occurred in version 1.0.0. Both the external POT provider (Node.js/Deno/Rust) and the Python plugin must be updated in sync. Extractor arguments changed significantly.
fix
Update both the plugin and your POT provider to the latest versions. Adjust `yt-dlp` extractor arguments: `youtube:getpot_bgutil_baseurl` became `youtubepot-bgutilhttp:base_url` and `youtube:getpot_bgutil_script` became `youtubepot-bgutilscript:script_path`.
affects: Before 1.0.0
breakingThe `yt-dlp` dependency requires version 2025.05.22 or above for compatibility with the plugin's features and to address YouTube changes.
fix
Update `yt-dlp` to the latest version using `pip install -U yt-dlp`.
affects: < 2025.05.22 of yt-dlp
deprecatedWhen using the standalone provider (server or script), passing `visitor_data` or `data_sync_id` is deprecated. YouTube changes also led to the removal of `disable_innertube`.
fix
Use `--content-binding` instead of `--visitor-data` or `--data-sync-id` for script methods. Be aware that `disable_innertube` is no longer supported and may break POT generation for certain clients if no webpage is available.
affects: Before 1.0.0
gotchaProviding a POT token does not guarantee bypassing all 403 errors or bot checks, as YouTube's detection mechanisms are constantly evolving. It may only help your traffic appear more legitimate.
fix
Monitor `yt-dlp` and `bgutil-ytdlp-pot-provider` releases for updates, which often include fixes for new YouTube changes. Consider alternative proxies or networks if issues persist.
affects: All versions
gotchaIf using a local proxy server with the Dockerized POT provider, the Docker container's network isolation will prevent access unless `--net=host` is added to the `docker run` command.
fix
When running the Docker container for the POT provider, add `--net=host` to the `docker run` command if the provider needs to access a proxy running on the host machine.
affects: All versions with Docker
gotchaThe JavaScript-based POT generation script (as opposed to the HTTP server option or Rust implementation) is not recommended for high-concurrency usage. Each `yt-dlp` call incurs the overhead of spawning a new Node.js process.
fix
Use the HTTP server option (Node.js/Deno) or, preferably, the Rust POT provider in HTTP server mode for better performance and concurrency.
affects: All versions using JavaScript script mode
Upgrade
Version history
1.3.1latest on PyPI · released Mar 7, 2026
Audit
Dependencies
yt-dlprequiredRequired for the plugin to function; must be version 2025.05.22 or above.
Rust POT Provider (bgutil-pot)requiredExternal application (binary or Docker) that generates the actual POT tokens. The Python plugin communicates with this provider. The Rust implementation is recommended for performance and ease of deployment.
Node.js (>= 20) or Deno (>= 2.0.0)optionalAlternative runtime required if using the original JavaScript-based POT provider instead of the Rust version.
DockeroptionalRequired if running either the Node.js/Deno or Rust POT provider as a Docker container.
Agent activity
17 hits · last 30 days
node
14
Amazon
1
OpenAI (training)
1
Resources
bgutil-ytdlp-pot-provider — pip install bgutil-ytdlp-pot-provider · libregistry