Install
openclaw skills install youtube-s3-uploaderDownload videos from YouTube, Twitter/X, TikTok, Douyin, Bilibili and upload to S3-compatible storage. Universal video downloader with smart quality selection and audio merging.
openclaw skills install youtube-s3-uploaderA universal video downloader that supports multiple platforms and uploads to S3-compatible storage.
video-to-s3-universal.js scriptv3.0.1 improves filename handling:
v2.0.0 fixes critical issues in v1.x:
--help displayclawhub install youtube-s3-uploader
Create ~/.youtube-s3-uploader.yml:
# Default bucket to use
default: my-videos
# Bucket configurations
buckets:
my-videos:
endpoint: https://your-s3-endpoint.com
access_key_id: YOUR_ACCESS_KEY_ID
secret_access_key: YOUR_SECRET_ACCESS_KEY
bucket_name: my-videos
region: auto # Use "auto" for Cloudflare R2, or specific region for AWS S3
# Optional: Custom public URL (e.g., CDN domain)
# public_url: https://cdn.yourdomain.com
youtube-s3-upload https://youtu.be/VIDEO_ID
buckets:
r2-storage:
endpoint: https://ACCOUNT_ID.r2.cloudflarestorage.com
access_key_id: YOUR_R2_ACCESS_KEY_ID
secret_access_key: YOUR_R2_SECRET_ACCESS_KEY
bucket_name: video-storage
region: auto
buckets:
aws-s3:
endpoint: https://s3.us-east-1.amazonaws.com
access_key_id: YOUR_AWS_ACCESS_KEY_ID
secret_access_key: YOUR_AWS_SECRET_ACCESS_KEY
bucket_name: my-video-bucket
region: us-east-1
buckets:
minio:
endpoint: http://localhost:9000
access_key_id: minioadmin
secret_access_key: minioadmin
bucket_name: uploads
region: us-east-1
# Download and upload a YouTube video (original method)
youtube-s3-upload https://youtu.be/8uZGlzWA4oo
# Download and upload using FIXED method (recommended for large files)
npm run youtube-to-s3-fixed -- https://youtu.be/8uZGlzWA4oo
# Specify custom S3 path
youtube-s3-upload https://youtu.be/VIDEO_ID --path videos/2026/march/my-video.mp4
# Use specific bucket (from config)
youtube-s3-upload https://youtu.be/VIDEO_ID --bucket backup-bucket
# Keep local file after upload (for debugging)
youtube-s3-upload https://youtu.be/VIDEO_ID --keep-local
# Upload a local video file to S3
upload-to-s3 /path/to/video.mp4
# With custom S3 path
upload-to-s3 /path/to/video.mp4 --path archived/videos/special.mp4
# Test S3 connection and bucket access
test-s3-connection
# Test specific bucket
test-s3-connection --bucket my-bucket
After successful processing, you'll get:
🎉 Processing Complete!
📊 Results:
Video Title: What Made the Turtle Cry!? Vedal's First Interaction with Neuro 3D
Original Size: 41.22 MB
Upload Time: 11.12 seconds
Average Speed: 3.71 MB/s
🔗 S3 Access URL:
https://s3.yourdomain.com/bucket-name/videos/2026-03-25/video-title.mp4
📁 S3 Path:
bucket-name/videos/2026-03-25/video-title.mp4
💡 Tip: This URL may require authentication. Use presigned URLs for temporary access.
Generate temporary access URLs (default: 1 hour):
generate-presigned-url videos/2026/march/my-video.mp4
# Custom expiration (e.g., 24 hours)
generate-presigned-url videos/2026/march/my-video.mp4 --expires 24h
# List recent uploads
list-s3-uploads
# List from specific bucket
list-s3-uploads --bucket my-bucket
# List with details
list-s3-uploads --detailed
# Delete a file
delete-from-s3 videos/old-video.mp4
# Delete with confirmation
delete-from-s3 videos/old-video.mp4 --confirm
YOUTUBE_S3_CONFIG: Path to config file (default: ~/.youtube-s3-uploader.yml)YOUTUBE_S3_DEFAULT_BUCKET: Override default bucketYOUTUBE_S3_KEEP_LOCAL: Keep local files (default: false)YOUTUBE_S3_DEBUG: Enable debug loggingyoutube-to-s3-fixed.js for files >50MBFor large video files (>50MB), use the fixed version that implements S3 Multipart Upload:
# Using npm script
npm run youtube-to-s3-fixed -- https://youtu.be/VIDEO_ID
# Direct script execution
node scripts/youtube-to-s3-fixed.js https://youtu.be/VIDEO_ID
# Upload existing large file
node scripts/fixed-upload-video-to-s3.js /path/to/large-video.mp4
The fixed version:
Enable debug logging to see detailed information:
YOUTUBE_S3_DEBUG=true youtube-s3-upload https://youtu.be/VIDEO_ID
MIT-0 - Free to use, modify, and redistribute. No attribution required.
Created by 西米露 (Simeilu) - A complete YouTube to S3 workflow for personal media storage.