सामग्री पर जाएँ

yt-dlp: "Sign in to confirm you're not a bot" — इसका मतलब और समाधान

लेखक Tunelio टीमप्रकाशित अपडेट

यह YouTube की bot-दीवार है, yt-dlp का बग नहीं: YouTube ने आपकी request को automated माना और verified, signed-in session माँग रहा है। तुरंत उपाय: yt-dlp अपडेट करें, JavaScript runtime (Deno) लगाएँ, IPv4 पर दोबारा चलाएँ। न हो तो नीचे cookies, PO token और IP reputation उसी क्रम में हैं जो सच में काम करता है।

60 सेकंड का समाधान (पहले यह आज़माएँ)

ज़्यादातर मामले तीन चीज़ों से सुलझते हैं: पुराना yt-dlp, JavaScript runtime का न होना, या ऐसा IPv6 पता जिस पर YouTube भरोसा नहीं करता। cookies छूने से पहले ये चलाएँ:

# 1. अपडेट (pip: pip install -U yt-dlp)
yt-dlp -U

# 2. YouTube challenge हल करने के लिए JS runtime — Deno सुझाया जाता है
curl -fsSL https://deno.land/install.sh | sh

# 3. साफ़ cache के साथ IPv4 पर दोबारा
yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"

अब भी ब्लॉक? आगे पढ़ें। क्रम मायने रखता है: हर अगला कदम पिछले से महँगा और जोखिम भरा है, और सीधे cookies पर कूदना समस्या को स्थायी बनाने का सबसे आम तरीका है।

इस error का असली मतलब

जब yt-dlp YouTube से player data माँगता है, YouTube request को score करता है: IP पता और उसका इतिहास, valid Proof-of-Origin (PO) token है या नहीं, session cookie है या नहीं, और उस पते से हाल में कितनी requests आईं। score खराब हो तो player जवाब की जगह login-दीवार आती है और yt-dlp लिखता है “Sign in to confirm you’re not a bot”। आपकी command में कुछ गलत नहीं — YouTube बस स्रोत पर भरोसा नहीं करता।

ऐसा क्यों होता है — चार असली कारण

  • IP reputation। data-center range (हर VPS, cloud instance, CI runner) का score घर के कनेक्शन से बहुत नीचे होता है। अगस्त 2026 में हमारे अपने extraction fleet पर लगभग हर चौथा नया exit IP पहले ही संपर्क में bot-दीवार से टकराया; IPv6 और बुरा था: YouTube पूरे /64 को एक इकाई मानता है, एक शोर मचाने वाला पड़ोसी पूरा block flag कर देता है।
  • PO token नहीं। 2024 से YouTube अपने BotGuard JavaScript से बना Proof-of-Origin token चाहता है। yt-dlp इसे सिर्फ़ बाहरी JS runtime (Deno, Node, Bun) या PO-token provider plugin से बना सकता है; इसके बिना कुछ client सीधे ठुकरा दिए जाते हैं।
  • session नहीं। flagged IP से anonymous request बिल्कुल scraper जैसी दिखती है। असली browser session की cookies score बढ़ाती हैं — इसीलिए cookies “काम करती हैं”, और IP बहुत खराब होने पर काम करना बंद कर देती हैं।
  • मात्रा। एक पते से प्रति मिनट दर्जनों requests, ख़ासकर playlist और retry loop, साफ़ IP पर भी rate-based scoring चालू कर देती हैं।

इसी क्रम में ठीक करें

1. नवीनतम release (या nightly) पर अपडेट करें

YouTube हर कुछ हफ़्तों में player और signature code बदलता है और yt-dlp दिनों में उसका fix देता है। एक महीने से पुराना build ऐसे टूटता है जो bot check जैसा दिखता है। distro package बहुत पीछे रहते हैं — pip या official binary से इंस्टॉल करें और yt-dlp -U चलाएँ।

2. JavaScript runtime इंस्टॉल करें

मौजूदा yt-dlp को YouTube के challenge हल करने और PO token बनाने के लिए बाहरी JS runtime चाहिए। Deno सुझाया जाता है; Node.js और Bun भी चलते हैं। इसके बिना yt-dlp missing formats की चेतावनी देता है और अक्सर सीधे bot-दीवार में गिरता है। yt-dlp -v से जाँचें — debug header में runtime की लाइन दिखती है।

3. IPv4 force करें

yt-dlp -4 "https://youtu.be/dQw4w9WgXcQ"   # या: --force-ipv4

सर्वर पर दोनों address family हों तो yt-dlp IPv6 से जा सकता है, जहाँ YouTube की scoring सख़्त है (पूरा /64 एक इकाई)। यह एक flag “laptop पर चलता है, VPS पर नहीं” के हैरान करने वाले हिस्से को ठीक कर देता है — laptop आमतौर पर घर के router के पीछे सिर्फ़ IPv4 पर होते हैं।

4. Cookies — फेंकने लायक session से, कभी अपने मुख्य account से नहीं

Cookies YouTube को बताती हैं कि request असली session की है। किसी spare Google account से logged-in private window से export करें, फिर window बंद कर दें ताकि browser पीछे से session न बदले। रोज़ के account की cookies export न करें: flagged IP से बार-बार automated उपयोग उस account को rate-limit या lock करवा सकता है।

# private window से extension द्वारा cookies.txt export करें, फिर:
yt-dlp --cookies cookies.txt -4 "https://youtu.be/dQw4w9WgXcQ"

# या सीधे browser profile से पढ़ें (एक बार के local उपयोग के लिए):
yt-dlp --cookies-from-browser chrome "https://youtu.be/dQw4w9WgXcQ"

Cookies पैच हैं, इलाज नहीं: वे expire होती हैं, और IP ही flagged हो जाए तो session मदद नहीं करती। cookies एक-दो दिन ही चलें तो समस्या पता है, cookie file नहीं।

5. PO-token provider जोड़ें

debug output कहे कि client को PO token चाहिए जो yt-dlp नहीं ला सका, तो bgutil-ytdlp-pot-provider जैसा provider plugin लगाएँ। यह छोटा BotGuard service चलाकर yt-dlp के लिए token अपने-आप बनाता है। “अपने IP पर बने रहने” वाले समाधानों में यह सबसे भरोसेमंद है — और सबसे ज़्यादा छोड़ा जाने वाला भी।

6. दूसरा player client आज़माएँ

yt-dlp --extractor-args "youtube:player_client=tv" "https://youtu.be/dQw4w9WgXcQ"
# ये भी आज़माएँ: android, mweb, web_embedded (हर एक का अपना format set)

YouTube हर client को अलग score देता है और भरोसेमंद client की सूची हर कुछ हफ़्तों में बदलती है — इसे workaround मानें। कुछ client 1080p+ नहीं देते या अपनी cookies माँगते हैं।

7. IP बदलें: residential proxy या दूसरा network

अगर घर के कनेक्शन पर साफ़ laptop वही वीडियो बिना cookies उतार लेता है, तो समस्या सर्वर का IP है और कोई flag उसे ठीक नहीं करेगा। yt-dlp को --proxy से residential या mobile proxy से भेजें, या extraction साफ़ पते वाली मशीन पर ले जाएँ। सस्ते data-center proxy घुमाना शायद ही मदद करे — उनका score आपके VPS जैसा ही है।

8. रफ़्तार घटाएँ

yt-dlp --sleep-requests 2 --sleep-interval 5 --max-sleep-interval 15 --limit-rate 2M ...

Retry loop अस्थायी challenge को स्थायी flagged पते में बदलने का सबसे तेज़ तरीका है। रुकें, concurrency एक-दो download तक रखें, और bot-दीवार के बाद tight loop में कभी retry न करें।

लक्षण → सबसे संभावित कारण

  • laptop पर चलता है, VPS पर नहीं → IP reputation (कदम 3, फिर 7)।
  • कल तक चल रहा था, आज हर वीडियो fail → YouTube ने कुछ बदला; अपडेट (कदम 1) और JS runtime जाँचें (कदम 2)।
  • cookies से एक दिन चला, फिर fail → IP flagged; cookies नहीं बचा सकतीं (कदम 7)।
  • सिर्फ़ कुछ वीडियो/format fail; -v में PO token का ज़िक्र → PO-token provider (कदम 5) या दूसरा client (कदम 6)।
  • सिर्फ़ bulk run या playlist में fail → volume scoring (कदम 8)।

ग़लतियाँ जो हालत बिगाड़ती हैं

  • सर्वर पर निजी Google account की cookies — IP ही नहीं, account पर पाबंदी लग सकती है।
  • root से साझा, गंदे cache के साथ yt-dlp चलाना; --rm-cache-dir और per-user cache इस्तेमाल करें।
  • cookie file को ऐसे client के साथ मिलाना जो cookies के लिए नहीं बने (yt-dlp चेतावनी देता है) — दोनों का बुरा हिस्सा मिलता है।
  • challenge के बाद हर कुछ सेकंड में retry; सेकंड नहीं, मिनट रुकें, और हर कोशिश के बीच कुछ बदलें।

जब पैच करना फ़ायदे का न रहे

अगर yt-dlp एक बार के download की जगह bot, app या pipeline चला रहा है, तो यह दीवार operations का काम बन जाती है: cookie rotation, PO-token service, residential exit, रोज़ के अपडेट। hosted API यह सब सर्वर-साइड रखता है और आपके कोड को एक URL देता है:

curl "https://tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=720p" \
  -H "Authorization: Bearer tnl_your_api_key"
# → { "url": "https://…/tunnel?id=…&sig=…", "file_size_str": "28.52 MB", "status": "ok" }

Tunelio हमारी अपनी सेवा है, इसे ध्यान में रखें। ईमानदार बात: हफ़्ते में मुट्ठी भर वीडियो घर के कनेक्शन से उतारते हैं तो yt-dlp पर रहें — कदम 1 से 3 काफ़ी हैं। सर्वर पर हर हफ़्ते दीवार से लड़ते हैं तो सबसे सस्ता उपाय इस समस्या का मालिक न रहना है। नए account को 100 free credits मिलते हैं, card की ज़रूरत नहीं।

स्रोत

  • yt-dlp wiki — “How do I pass cookies to yt-dlp?” और PO token guide (github.com/yt-dlp/yt-dlp/wiki)।
  • yt-dlp README — YouTube के लिए JavaScript runtime की ज़रूरत (Deno सुझाया)।
  • bgutil-ytdlp-pot-provider — PO-token provider plugin।
  • हमारे अपने माप (Tunelio extraction fleet, अगस्त 2026): bot-दीवार से टकराने वाले नए exit का हिस्सा; IPv6 /64 scoring का व्यवहार।

सामान्य सवाल

क्या cookies जोड़ने से हमेशा ठीक हो जाता है?

अक्सर, पर ज़्यादा समय नहीं। cookies request का trust बढ़ाती हैं, लेकिन expire होती हैं, और बुरी तरह flagged IP को फिर भी challenge मिलता है। एक-दो दिन में cookies बंद हो जाएँ तो असली समस्या IP है।

क्या अपने Google account की cookies इस्तेमाल करना सुरक्षित है?

सर्वर पर नहीं। flagged पते से automated उपयोग account को rate-limit या lock करवा सकता है। private window में spare account लें, एक बार export करें, window बंद करें।

laptop पर क्यों चलता है और सर्वर पर क्यों नहीं?

laptop अच्छी reputation वाले घरेलू IPv4 पर है; सर्वर data-center range (अक्सर IPv6) में है जिसे YouTube संभावित bot मानता है। पहले IPv4 force करें, फिर residential exit सोचें।

PO token क्या है, क्या मुझे चाहिए?

YouTube के BotGuard script से बना Proof-of-Origin token, जो साबित करता है कि client असली browser है। कुछ client इसके बिना ठुकराए जाते हैं। yt-dlp इसे JS runtime या provider plugin से पाता है।

क्या hosted API भी उसी दीवार से टकराएगा?

वह आपकी जगह टकराता है और सर्वर-साइड संभालता है — ताज़ा session, PO token और residential IP — तो आपका कोड सिर्फ़ download URL देखता है।

संबंधित गाइड