yt-dlp-threads
A yt-dlp extractor plugin for Threads
(threads.com / threads.net).
yt-dlp has no built-in Threads extractor — support has been requested for years without a merged implementation (#7523, #10133, #12021) — and Threads serves anonymous clients a JavaScript login wall with no media in the HTML.
How it works
Meta server-renders the full post — including the CDN media URLs — for
link-preview crawlers. This plugin fetches the post page with a Googlebot
User-Agent to bypass the login wall, then extracts the progressive (muxed)
mp4 URL(s) from the embedded JSON. Handles canonical @user/post/<id> links,
/share/<code>/ short links, and multi-video (carousel) posts.
Caveat: this bypass is inherently fragile. If Meta stops serving crawlers the full payload or changes the embedded JSON keys, extraction will break. There is no cookie/auth support — only publicly viewable posts work.
Install
Requires yt-dlp with plugin support (2023.01.02+).
As a pip package (installs into the same environment as yt-dlp):
pip install git+https://github.com/tribixbite/yt-dlp-threads
As a manual plugin (no install): drop the yt_dlp_plugins folder into a
yt-dlp plugin directory, e.g.
mkdir -p ~/.config/yt-dlp/plugins/yt-dlp-threads
cp -r yt_dlp_plugins ~/.config/yt-dlp/plugins/yt-dlp-threads/
Usage
yt-dlp "https://www.threads.com/@someone/post/ABC123"
yt-dlp -F "https://www.threads.com/share/xxxxxxxx/" # list formats (hd/sd)
Verify it loaded: yt-dlp --verbose <url> prints [debug] Extractor Plugins: ThreadsIE.
Notes
- A Threads page embeds many posts (thread items, replies, recommendations). The extractor selects the one whose shortcode matches your URL; if that post isn't in the page data (deleted, private, login-gated) it raises an error rather than returning some other post's video.
durationis decoded from the CDN URL'sefgparameter — Threads posts have novideo_durationfield.- Image-only and text-only posts are not supported (video only).
Development
python -m unittest discover -s tests -v # offline tests, no network
ruff check .
License
Unlicense (public domain).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yt_dlp_threads-0.1.0.tar.gz.
File metadata
- Download URL: yt_dlp_threads-0.1.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a606fd37d8c8f38a1665e93ef2174d5a14f1f998b962dd39aa58c525fa9fc466
|
|
| MD5 |
7c409b1c59b8cfca82530967ed683a66
|
|
| BLAKE2b-256 |
eb5150cc00a4489a10c85b1fa0f99a54fd0d1e3f622cc2b585ebf15a53dd6526
|
Provenance
The following attestation bundles were made for yt_dlp_threads-0.1.0.tar.gz:
Publisher:
publish.yml on tribixbite/yt-dlp-threads
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yt_dlp_threads-0.1.0.tar.gz -
Subject digest:
a606fd37d8c8f38a1665e93ef2174d5a14f1f998b962dd39aa58c525fa9fc466 - Sigstore transparency entry: 2430449758
- Sigstore integration time:
-
Permalink:
tribixbite/yt-dlp-threads@c4c44141cb10715f94296a808f5d89a0d24dfe94 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tribixbite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c4c44141cb10715f94296a808f5d89a0d24dfe94 -
Trigger Event:
release
-
Statement type:
File details
Details for the file yt_dlp_threads-0.1.0-py3-none-any.whl.
File metadata
- Download URL: yt_dlp_threads-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
266e4d50a7e1f9dc574b2d92e170379e7c28cc0ba8803464e4f0b457c9e4853a
|
|
| MD5 |
c4bd13344e1881f658ac0c3b253dd9c0
|
|
| BLAKE2b-256 |
04908dfc7055f6dc562fa190f6ad516a787851979eaaa4b601b7ed727ab0e1c4
|
Provenance
The following attestation bundles were made for yt_dlp_threads-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on tribixbite/yt-dlp-threads
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yt_dlp_threads-0.1.0-py3-none-any.whl -
Subject digest:
266e4d50a7e1f9dc574b2d92e170379e7c28cc0ba8803464e4f0b457c9e4853a - Sigstore transparency entry: 2430450649
- Sigstore integration time:
-
Permalink:
tribixbite/yt-dlp-threads@c4c44141cb10715f94296a808f5d89a0d24dfe94 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tribixbite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c4c44141cb10715f94296a808f5d89a0d24dfe94 -
Trigger Event:
release
-
Statement type: