English ·
简体中文 ·
繁體中文 ·
日本語 ·
हिन्दी ·
Español ·
العربية ·
Français
বাংলা ·
Português ·
Bahasa Indonesia ·
اردو ·
Русский ·
Deutsch ·
Naijá ·
مصري
ویڈیو اور آڈیو ڈاؤن لوڈ کرنے کا کمانڈ لائن ٹول، جو لوگوں اور AI ایجنٹس دونوں کے لیے بنا ہے۔
لنک دیں۔ اسٹریم منتخب کریں۔ ویڈیو، آڈیو، سب ٹائٹلز، ابواب اور سرورق ایک فائل میں حاصل کریں۔
تنصیب · فوری آغاز · معاون سائٹس · ایجنٹ گائیڈ · اختیارات · ریلیزز
| ↓ آپ کا میڈیا، آپ کے انداز میں | ⌘ ایک بائنری، ہر ڈیسک ٹاپ | { } آٹومیشن کے لیے تیار |
|---|---|---|
| پانچوں سائٹس پر ایک ہی اصطلاحات سے معیار، کوڈیک، صفحات اور فائل کے نام منتخب کریں | macOS، Linux اور Windows کے لیے ایک Go بائنری، جو متوازی رینج ڈاؤن لوڈ کرتی ہے اور رکے ہوئے ڈاؤن لوڈ دوبارہ جاری کرتی ہے | stdout پر ایک JSON دستاویز، stderr پر لاگز، بامعنی ایگزٹ کوڈ؛ ٹرمینل کے بغیر کوئی سوال نہیں |
| 01 / جائزہ | 02 / انتخاب | 03 / ڈاؤن لوڈ | 04 / یکجا |
|---|---|---|---|
| ہر اسٹریم دیکھیں | اپنی ترجیحات طے کریں | گھر لے آئیں | سب کچھ ایک ساتھ |
| صفحات، کوڈیک اور سائز | معیار، آڈیو اور صفحات | رینج یا سیگمنٹ میں | ٹریک، سب ٹائٹلز اور سرورق |
haul info "<url>" |
-q 720p -c avc,m4a |
haul "<url>" |
ffmpeg / MP4Box |
ٹرمینل کے اندر ایک جھلک
$ haul info -q 720p "https://youtu.be/DdCEmlAydcw"
haul v1.0.0
Inside Anthropic's molecular biology lab
channel Anthropic · 2026-09-24 · 00:01:15
Video
▶ 0 720p 1190×720 AVC 24fps 755 kbps 6.8 MB
1 720p 1190×720 VP9 24fps 528 kbps 4.7 MB
2 720p 1190×720 AV1 24fps 388 kbps 3.5 MB
3 1080p 2048×1240 VP9 24fps 5827 kbps 52.3 MB
…
19 144p 238×144 AVC 24fps 50 kbps 459.0 KB
Audio
▶ 0 OPUS 131 kbps 1.2 MB
1 M4A 130 kbps 1.2 MB
…ذاتی، تحقیقی اور دیگر غیر تجارتی استعمال کے لیے۔ حقوقِ اشاعت اور ہر سائٹ کی شرائط کا احترام آپ کی ذمہ داری ہے۔
haul macOS، Linux اور Windows (amd64 اور arm64) پر چلتا ہے۔ ٹریک یکجا (mux) کرنے کے لیے ffmpeg درکار ہے؛ YouTube اور X کے لیے yt-dlp بھی، اور YouTube پلیئر کی جانچ کے لیے deno چاہیے:
brew install ffmpeg yt-dlp deno # macOS
sudo apt install ffmpeg pipx unzip curl # Linux (Debian / Ubuntu)
pipx install "yt-dlp[default]" && pipx ensurepath
curl -fsSL https://deno.land/install.sh | sh -s -- -y
winget install Gyan.FFmpeg # Windows، ایک وقت میں ایک پیکیج
winget install yt-dlp.yt-dlp
winget install DenoLand.DenoLinux پر yt-dlp کو ڈسٹری بیوشن کے پیکیج سے نہیں بلکہ pipx سے، یا اس کی ریلیزز سے yt-dlp_linux (arm64 پر yt-dlp_linux_aarch64) لے کر انسٹال کریں: YouTube اکثر بدلتا رہتا ہے اور پیکیج والے ورژن پیچھے رہ جاتے ہیں۔ انسٹال کرنے کے بعد نیا ٹرمینل کھولیں تاکہ یہ ٹولز PATH میں آ جائیں۔
Releases سے اپنے سسٹم کا آرکائیو ڈاؤن لوڈ کریں — haul-<version>-<os>-<arch>.tar.gz (Windows پر .zip) — اور haul کو اپنے PATH کے کسی بھی فولڈر میں رکھیں:
tar -xzf haul-*-darwin-arm64.tar.gz
mkdir -p ~/.local/bin && mv haul-*/haul ~/.local/bin/موجودہ ریلیز طریقہ macOS ورژن پر دستخط کرتا ہے اور Apple سے نوٹرائزیشن حاصل کرتا ہے۔ haul-<version>-darwin-<arch>.pkg منتخب کریں؛ اس کے ساتھ نوٹرائزیشن ٹکٹ منسلک ہے اور یہ haul کو /usr/local/bin میں نصب کرتا ہے۔ آرکائیو میں وہی دستخط شدہ پروگرام ہے، مگر پہلی تصدیق کے لیے انٹرنیٹ درکار ہو سکتا ہے۔ پرانے ورژن غیر دستخط شدہ ہو سکتے ہیں۔
سورس سے بلڈ کریں · Go 1.26+
go install github.com/ac1982/haul/cmd/haul@latestیا کلون کی گئی ریپوزٹری سے:
go build -o haul ./cmd/haulایک لنک سے شروع کریں۔ haul طے شدہ طور پر دستیاب بہترین اسٹریم منتخب کرتا ہے۔
haul "https://youtu.be/DdCEmlAydcw"ڈاؤن لوڈ سے پہلے معلومات دیکھیں، یا معیار اور کوڈیک منتخب کریں:
haul info "https://youtu.be/DdCEmlAydcw"
haul -q 720p -c avc,m4a "https://youtu.be/DdCEmlAydcw" # QuickTime کے لیے H.264 + AACکمانڈ کا حوالہ
| کمانڈ | مطلب |
|---|---|
haul <url> [options] |
ڈاؤن لوڈ (haul download <url> کے برابر) |
haul info <url> [--urls] |
آئٹم، اس کے صفحات اور اسٹریم دکھاتا ہے؛ کچھ ڈاؤن لوڈ نہیں کرتا |
haul login bilibili |
بہتر معیار کے لیے bilibili میں لاگ ان |
haul templates |
فائل نام کے ٹیمپلیٹ متغیرات |
haul --help |
سائٹس، ایجنٹ استعمال، ایگزٹ کوڈ، مثالیں |
haul download --help |
تمام اختیارات |
| سائٹ | لنکس | ضرورت |
|---|---|---|
| YouTube | youtube.com/watch?v=…, youtu.be/…, /shorts/…, /embed/…, /live/… |
yt-dlp, deno |
| X | x.com/<user>/status/<id>, twitter.com/…؛ /video/<n> پوسٹ کی ایک ویڈیو منتخب کرتا ہے |
yt-dlp |
weibo.com/<uid>/<id>, weibo.com/tv/show/…, video.weibo.com/show?fid=…, m.weibo.cn/status/…, t.cn/… |
yt-dlp | |
| bilibili | ویڈیوز، bangumi، کورسز، مجموعے، سیریز، پسندیدہ، صارف صفحات، b23.tv، براہ راست BV… av… ep… ss… md… |
– |
| Xiaoyuzhou | xiaoyuzhoufm.com/episode/<id>, /podcast/<id> |
– |
| Apple Podcasts | podcasts.apple.com/<cc>/podcast/<name>/id<show>؛ ایک قسط کے لیے ?i=<episode> کے ساتھ |
– |
صرف آڈیو
haul --audio-only "https://youtu.be/DdCEmlAydcw"
haul --audio-only -c m4a "https://youtu.be/DdCEmlAydcw" # Opus کے بجائے AACچند حصے، پورا سیزن یا تازہ ترین قسط
# منتخب حصے، آپ کے Movies فولڈر میں
haul -p 1-3,10 -w ~/Movies "https://www.bilibili.com/video/BV1Wv411h7kN"
# سیزن کی تمام اقساط
haul -p ALL "https://www.bilibili.com/bangumi/play/ss33073"
# پوڈکاسٹ کی سب سے نئی قسط
haul -p LAST "https://podcasts.apple.com/us/podcast/the-daily/id1200361736"
# X پوسٹ کی تمام ویڈیوز
haul -p ALL "https://x.com/<user>/status/<id>"منظم فائلیں، سب ٹائٹلز یا تعاملی انتخاب
haul -o "<uploader>/<title> [<quality>]" "https://youtu.be/DdCEmlAydcw"
haul --sub-lang en,zh "https://youtu.be/DdCEmlAydcw" # صرف ان زبانوں کے سب ٹائٹلز
haul -i "BV1qt4y1X7TW" # تیر والی کلیدوں سے اسٹریم منتخب کریںایجنٹ کو جو کچھ چاہیے وہ سب haul --help میں ہے؛ llms.txt اسی رہنمائی کا فائل نسخہ ہے۔ مختصراً:
haul info --json "<url>" # 1. معلومات دیکھیں
haul --json --video-stream 2 --audio-stream 0 "<url>" # 2. بالکل یہی اسٹریم ڈاؤن لوڈ کریں
haul --json -q 720p -c avc,m4a "<url>" # یا ترجیحات کو انتخاب کرنے دیں--jsonکے ساتھ stdout پر صرف ایک JSON دستاویز آتی ہے؛ پیش رفت اور لاگز stderr پر جاتے ہیں۔ اس کیfilesفہرست میں آؤٹ پٹ فائلیں ہوتی ہیں، نئی یا پہلے سے موجود۔- ٹرمینل کے بغیر کچھ بھی تعاملی نہیں۔ ٹرمینل نہ ہو تو
-iایگزٹ کوڈ 2 کے ساتھ ناکام ہوتا ہے اور اس کی جگہ استعمال ہونے والے فلیگ بتاتا ہے۔ infoمیں اسٹریم انڈیکس اسی ترتیب میں ہوتے ہیں جس میں haul انتخاب کرتا ہے؛infoاور ڈاؤن لوڈ دونوں کو وہی-q/-cدیں۔- پلے لسٹ، سیزن، شو یا کئی ویڈیوز والی پوسٹ پر
infoاس کے صفحات دکھاتا ہے؛-p <n>اس صفحے کے اسٹریم اور سب ٹائٹلز بھی شامل کرتا ہے۔ - ڈسک پر پہلے سے موجود صفحات
"status": "skipped", "reason": "exists"کے طور پر بتائے جاتے ہیں، اس لیے دوبارہ چلانا محفوظ ہے۔
JSON جواب کی مثال · ایک کامیاب ڈاؤن لوڈ
ڈاؤن لوڈ یہ پرنٹ کرتا ہے:
{
"ok": true,
"command": "download",
"site": "youtube",
"input": "https://youtu.be/DdCEmlAydcw",
"title": "Inside Anthropic's molecular biology lab",
"uploader": "Anthropic",
"published": "2026-09-23T18:01:32Z",
"description": "…",
"pageCount": 1,
"files": ["/Users/me/Movies/Inside Anthropic's molecular biology lab.mp4"],
"pages": [
{
"index": 1,
"id": "DdCEmlAydcw",
"title": "Inside Anthropic's molecular biology lab",
"durationSeconds": 75,
"published": "2026-09-23T18:01:32Z",
"selected": true,
"status": "downloaded",
"file": "/Users/me/Movies/Inside Anthropic's molecular biology lab.mp4",
"sizeBytes": 3434260,
"selectedVideo": 0,
"selectedAudio": 0,
"video": [{ "index": 0, "quality": "360p", "resolution": "594x360", "codec": "AVC", "fps": 24, "bitrateKbps": 214, "sizeBytes": 2014782 }],
"audio": [{ "index": 0, "codec": "M4A", "bitrateKbps": 130, "sizeBytes": 1220994 }],
"subtitles": [{ "lang": "en" }]
}
]
}یہ haul --json -q 360p -c avc,m4a … کا جواب ہے۔ یہاں کلیدیں پڑھنے کی ترتیب میں ہیں اور اسٹریم کی فہرستیں صرف منتخب اسٹریم تک مختصر کی گئی ہیں؛ اصل دستاویز اپنی کلیدیں حروفِ تہجی کی ترتیب سے رکھتی ہے اور ہر اسٹریم دکھاتی ہے۔
ناکامی پر "ok": false کے ساتھ "error": {"kind", "message", "exitCode"} پرنٹ ہوتا ہے، اور اس سے پہلے مکمل ہونے والے صفحات جواب میں برقرار رہتے ہیں۔
| ایگزٹ کوڈ | مطلب | error.kind |
|---|---|---|
| 0 | مکمل | – |
| 1 | ڈاؤن لوڈ یا اخذ کرنے میں ناکامی | failed |
| 2 | غیر معاون لنک یا اختیار کی غلط قدر | input |
| 3 | ضروری ٹول موجود نہیں (ffmpeg، yt-dlp) | dependency |
| 4 | لاگ ان ضروری ہے یا مدت ختم ہو گئی | auth |
| 64 | غلط کمانڈ لائن (نامعلوم فلیگ، غائب آرگیومنٹ) | – |
| 130 | منسوخ | cancelled |
haul download --help تمام اختیارات دکھاتا ہے۔ اہم اختیارات:
| گروپ | اختیارات |
|---|---|
| عمومی | --json, --config <file>, --debug |
| اسٹریم | -q, --quality <list>, -c, --codec <list>, --video-stream <n>, --audio-stream <n>, -i, --interactive, --video-ascending, --audio-ascending |
| صفحات | -p, --pages <spec>, --show-all, --hide-streams |
| مواد | --audio-only, --video-only, --subtitle-only, --cover-only, --skip-subtitle, --sub-lang <list>, --auto-subtitles, --skip-cover, --skip-mux |
| آؤٹ پٹ | -o, --output <template>, --multi-output <template>, -w, --work-dir <dir>, --lang <code>, --no-tags, --archive, --delay <seconds> |
| bilibili | --api web|tv|app|intl, --danmaku, --danmaku-only, --danmaku-format xml,ass, --cookie, --token؛ مزید اختیارات --help-hidden میں |
| ٹولز | --ffmpeg, --yt-dlp, --use-mp4box, --mp4box, --use-aria2c, --aria2c, --aria2c-args, --single-connection |
معیار اور کوڈیک کی ترجیحات
معیار اور کوڈیک۔ -q وہی لیبل لیتا ہے جو اسٹریم جدول دکھاتا ہے: YouTube پر 1080p، 720p60؛ bilibili پر 8K، Dolby Vision، HDR، 4K، 1080P60، 1080P+، 1080P، 720P۔ -c ویڈیو کے لیے av1 vp9 hevc avc اور آڈیو کے لیے m4a opus flac eac3 mp3 لیتا ہے۔ یہ ترجیحات ہیں، فلٹر نہیں: جو فہرست میں نہیں وہ بعد میں آتا ہے، بہترین پہلے۔ --video-ascending / --audio-ascending سب سے چھوٹے ڈاؤن لوڈ کے لیے ترتیب الٹ دیتے ہیں۔
صفحات کا انتخاب
صفحات۔ 8، 1,2، 3-5، 1-3,10، ALL، LAST (آخری صفحہ، یعنی شو کی سب سے نئی قسط؛ LATEST بھی چلتا ہے)۔ کسی ایک قسط کا لنک، یا ?p=N، وہ صفحہ خود منتخب کر لیتا ہے۔ صفحات سے مراد bilibili ویڈیو کے حصے، سیزن، شو یا فہرست کی اقساط، اور X پوسٹ کی ویڈیوز ہیں۔
فائل کے نام اور ٹیمپلیٹ متغیرات
فائل کے نام۔ ایک صفحے والا آئٹم: <title>؛ کئی صفحات والا (چاہے -p صرف ایک لے): <title>/[P<pageNumberWithZero>]<pageTitle>، کل صفحات کی تعداد کے مطابق آگے صفر لگا کر۔ متغیرات:
<title> <pageNumber> <pageNumberWithZero> <pageTitle> <id> <site> <uploader> <uploaderId> <quality> <resolution> <fps> <videoCodec> <videoBitrate> <audioCodec> <audioBitrate> <publishDate> <pageDate>، اور bilibili کے <bvid> <aid> <cid> <api>۔
تاریخوں کو فارمیٹ دیا جا سکتا ہے: <publishDate:yyyy-MM-dd>۔ توسیع خود شامل ہوتی ہے۔
YouTube · اخذ، سب ٹائٹلز اور پلے لسٹس
YouTube اپنے اسٹریم URL کو پلیئر کی ایسی جانچوں سے محفوظ رکھتا ہے جن کے لیے JavaScript رن ٹائم درکار ہے، اس لیے اخذ کرنے کا کام yt-dlp -J پر چھوڑا گیا ہے (جو انہیں deno میں چلاتا ہے)؛ اس کے بعد کا سارا کام haul خود کرتا ہے۔ اپ لوڈ کیے گئے سب ٹائٹلز فائل میں شامل کیے جاتے ہیں؛ خودکار طور پر بنے سب ٹائٹلز صرف --auto-subtitles کے ساتھ۔ googlevideo صرف محدود بائٹ رینج دیتا ہے، اس لیے ٹریک ایک وقت میں 10 MB کی ایک رینج کر کے لائے جاتے ہیں۔ watch?v=…&list=… صرف وہی ویڈیو ڈاؤن لوڈ کرتا ہے۔ yt-dlp کو تازہ رکھیں: YouTube کی تبدیلیوں کے حل وہیں آتے ہیں۔
X · عوامی پوسٹس اور آڈیو
X کی عوامی پوسٹس کے لیے لاگ ان نہیں چاہیے۔ اس کی ویڈیوز آڈیو سمیت ایک ہی MP4 فائل ہوتی ہیں، اس لیے جدول میں صرف ویڈیو دکھائی دیتی ہے؛ --audio-only آڈیو الگ کرتا ہے۔
bilibili · لاگ ان، بہتر معیار اور danmaku
bilibili کو اس کے اپنے web، TV، APP (gRPC) اور بین الاقوامی API کے ذریعے پڑھا جاتا ہے۔ لاگ آؤٹ حالت میں صرف کم معیار ملتا ہے (عام طور پر 480P تک)؛ 1080P، 4K، HDR، Dolby Vision اور Hi-Res آڈیو کے لیے لاگ ان کریں:
haul login bilibili # bilibili ایپ سے QR کوڈ اسکین کریں
haul login bilibili --from-edge # macOS: Microsoft Edge کا لاگ ان دوبارہ استعمال کریں (یا --from-chrome; --profile "Profile 1")
haul login bilibili --tv # TV ایکسیس ٹوکن، --api tv / --api app کے لیےبراؤزر کا لاگ ان پڑھنا فی الحال صرف macOS پر کام کرتا ہے: اس کے لیے ٹرمینل کو Full Disk Access چاہیے، اور macOS ایک بار “Safe Storage” کی چین آئٹم کی اجازت مانگتا ہے۔ --danmaku اسکرین پر چلتے تبصرے (danmaku) XML اور ASS میں محفوظ کرتا ہے؛ --danmaku-format ass ان میں سے صرف ایک رکھتا ہے۔
Xiaoyuzhou & Apple Podcasts · اقساط اور میٹاڈیٹا
Xiaoyuzhou اور Apple Podcasts کو yt-dlp نہیں چاہیے: Xiaoyuzhou کے صفحات میں آڈیو لنک ہوتا ہے، اور Apple کے لنکس عوامی iTunes API اور شو کی RSS فیڈ کے ذریعے جاتے ہیں۔ اقساط اپنا فارمیٹ (.mp3 یا .m4a) برقرار رکھتی ہیں؛ سرورق شامل ہوتا ہے، شو البم اور میزبان فنکار بنتا ہے۔ شو کا لنک حالیہ اقساط پرانی سے نئی ترتیب میں دکھاتا ہے، اس لیے -p LAST سب سے نئی قسط ہے۔
~/.config/haul/ (یا $HAUL_HOME) میں یہ فائلیں ہوتی ہیں:
| فائل | مقصد |
|---|---|
config.json |
کسی بھی اختیار کی طے شدہ قدر |
cookie.txt, tv-token.txt, app-token.txt |
bilibili لاگ ان |
archives.txt |
پہلے سے ڈاؤن لوڈ شدہ صفحات (--archive) |
config.json میں اختیارات کے نام camelCase میں ہوتے ہیں، bilibili والے "bilibili" کے اندر، اور اس میں صرف وہی لکھنا ہوتا ہے جو بدلنا ہو؛ فہرست array بھی ہو سکتی ہے اور کاما سے الگ کی گئی string بھی۔ کمانڈ لائن فلیگ اسے اوور رائیڈ کرتے ہیں:
{
"workDir": "~/Movies/haul",
"codec": "avc,hevc,m4a",
"quality": "1080p,1080P",
"output": "<uploader>/<title>",
"archive": true,
"bilibili": { "danmaku": true, "danmakuFormat": ["ass"] }
}go build ./cmd/haul
go test ./... # آف لائن، چند سیکنڈ
HAUL_LIVE=1 go test -run Live ./internal/... # bilibili، YouTube، X اور Apple Podcasts سے بھی رابطہ کرتا ہےآف لائن ٹیسٹ کبھی نیٹ ورک کو نہیں چھوتے: ٹیسٹ ایک فرضی http.RoundTripper سے بات کرتے ہیں، جو ریکارڈ شدہ API جوابات اور نقلی CDN (صرف رینج دینے والے سرور، ٹوٹتے کنکشن، رینج کو نظرانداز کرنے والے سرور) سے جواب دیتا ہے۔ مکمل سلسلے کے ٹیسٹ اصل ffmpeg سے ٹریک یکجا کرتے ہیں اور نتیجہ ffprobe سے جانچتے ہیں؛ ffmpeg انسٹال نہ ہو تو یہ چھوڑ دیے جاتے ہیں۔ ساخت اور اصولوں کے لیے AGENTS.md دیکھیں۔
v* ٹیگ پش کرنے پر GitHub Actions ٹیسٹ چلاتا ہے، ہر پلیٹ فارم کے لیے کراس کمپائل کرتا ہے اور ریلیز شائع کرتا ہے۔
yt-dlp, FFmpeg, GPAC, aria2, pflag, x/term, rsc.io/qr، اور bilibili-API-collect اور bilibili-grpc-api کے API نوٹس۔
ایک لنک۔ آپ کا میڈیا۔
haul حاصل کریں · ایجنٹ حوالہ · تعاون کریں