Download videos or photos from Instagram, YouTube, TikTok, Twitter/X and other platforms. Trigger automatically when user sends a bare URL from these platforms (no need to say "download"). Also trigger when user explicitly asks to download/save/grab media from a URL. Handles compression for Telegram delivery (16MB limit).
pip install yt-dlp)~/.local/bin/ffmpeg (no sudo needed)twitter-cli) pour URLs Twitter/XInstagram reels/posts, YouTube, TikTok, Twitter/X, Reddit, Facebook, and 1000+ sites (yt-dlp supported).
Avant tout téléchargement, identifier explicitement la source à partir de l'URL :
x.com / twitter.com → flow Twitter/Xinstagram.com → flow Instagramyoutube.com / youtu.be → flow YouTubetiktok.com → flow TikTok⚠️ Ne pas lancer directement un downloader générique sans avoir d'abord identifié la plateforme. Le bon downloader / fallback dépend de la source.
Si l'URL est un tweet X/Twitter (x.com ou twitter.com) :
source ~/clix-env/bin/activate
clix tweet <tweet_id> --json | python3 -c "
import sys, json
data = json.load(sys.stdin)
# Le tweet principal ou le premier dans le thread
tweet = data[0] if isinstance(data, list) else data
for m in tweet.get('media', []):
if m['type'] == 'video':
print(m['url'])
elif m['type'] == 'photo':
print(m['url'])
"
export PATH="$HOME/.local/bin:$PATH"
cd /home/openclaw/.openclaw/workspace
# Essai 1 : yt-dlp avec l'URL du tweet
yt-dlp -o "video_download.%(ext)s" "<TWEET_URL>"
# Si échec ou résultat vide : fallback clix -> URL média directe -> curl
curl -L -o video_download.mp4 "<MEDIA_URL>"
yt-dlp échoue sur X/Twitter, considérer ça comme normal et basculer immédiatement sur le fallback clix puis curl. Ne pas insister inutilement avec le mauvais downloader.Après identification de la source, utiliser le flow approprié. Si aucune logique spécifique n'existe pour la plateforme, utiliser le flow générique yt-dlp.
export PATH="$HOME/.local/bin:$PATH"
cd /home/openclaw/.openclaw/workspace
# TOUJOURS utiliser -f b (pre-merged) pour éviter les freezes vidéo
yt-dlp -f b -o "video_download.%(ext)s" "<URL>"
⚠️ IMPORTANT :
-f b (best pre-merged format) au lieu du défaut DASH split. Le merge DASH crée souvent des freezes vidéo.ffmpeg -y -i video.mp4 -c:v libx264 -crf 18 -c:a aac -b:a 192k video_h264.mp4
ffprobe avant d'envoyer.For Instagram:
ls -lh video_download.*
ffmpeg -y -i video_download.mp4 \
-vcodec libx264 -crf 28 -preset fast \
-acodec aac -b:a 128k \
video_compressed.mp4
Adjust -crf if still too large:
28 = good quality, ~25-30% size reduction32 = acceptable quality, ~50% reduction35 = lower quality, ~65% reductionSi <16MB → envoyer via Telegram :
message(action=send, target=<chat_id>, filePath=<path>, caption="...")
File must be under /home/openclaw/.openclaw/workspace/ for Telegram send.
Si >16MB → NE PAS compresser. Upload directement sur Google Drive en qualité originale et envoyer le lien. Mathis veut la qualité intacte, pas de perte.
rm -f video_download.* video_compressed.*
twitter-cli pour re-auth--cookies-from-browser chrome-crf 35 or scale down: -vf scale=-2:720pip install --upgrade yt-dlpexport PATH="$HOME/.local/bin:$PATH" or reinstall static binary from johnvansickle.com