Awesome-omni-skill Media Uploader - R2/S3 with video download
Upload files or download videos from popular platforms (YouTube, Vimeo, Bilibili, etc.) and upload to Cloudflare R2, AWS S3, or any S3-compatible storage with secure presigned download links.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/content-media/media-uploader-r2-s3-with-video-download" ~/.claude/skills/diegosouzapw-awesome-omni-skill-media-uploader-r2-s3-with-video-download && rm -rf "$T"
manifest:
skills/content-media/media-uploader-r2-s3-with-video-download/SKILL.mdsource content
Media Uploader - R2/S3 with Video Download
Upload files or download videos from popular platforms to Cloudflare R2 or any S3-compatible storage and generate presigned download links.
What it does:
- Upload any file to R2/S3 and get a shareable link
- Download videos from 100+ sites using lux:
- Chinese platforms: Xiaohongshu (小红书/xhslink.com), Douyin, Bilibili, iXigua
- International: YouTube, Vimeo, Instagram, Twitter/X, TikTok, Facebook
- Extract audio-only from videos
- All uploads get secure, expiring presigned URLs (default: 5 minutes)
Features
- Upload files to R2/S3 buckets
- Download videos from popular platforms and auto-upload to R2/S3
- Generate presigned download URLs (configurable expiration)
- Support for any S3-compatible storage (R2, AWS S3, MinIO, etc.)
- Multiple bucket configurations
- Automatic content-type detection
- Audio-only download option for videos
Configuration
Create
~/.r2-upload.yml (or set R2_UPLOAD_CONFIG env var):
# Default bucket (used when no bucket specified) default: my-bucket # Bucket configurations buckets: my-bucket: endpoint: https://abc123.r2.cloudflarestorage.com access_key_id: your_access_key secret_access_key: your_secret_key bucket_name: my-bucket public_url: https://files.example.com # Optional: custom domain region: auto # For R2, use "auto" # Additional buckets personal: endpoint: https://xyz789.r2.cloudflarestorage.com access_key_id: ... secret_access_key: ... bucket_name: personal-files region: auto
Cloudflare R2 Setup
- Go to Cloudflare Dashboard → R2
- Create a bucket
- Go to R2 API Tokens:
https://dash.cloudflare.com/<ACCOUNT_ID>/r2/api-tokens - Create a new API token
- Important: Apply to specific bucket (select your bucket)
- Permissions: Object Read & Write
- Copy the Access Key ID and Secret Access Key
- Use endpoint format:
https://<account_id>.r2.cloudflarestorage.com - Set
region: auto
AWS S3 Setup
aws-bucket: endpoint: https://s3.us-east-1.amazonaws.com access_key_id: ... secret_access_key: ... bucket_name: my-aws-bucket region: us-east-1
Usage
Upload a file
r2-upload /path/to/file.pdf # Returns: https://files.example.com/abc123/file.pdf?signature=...
Upload with custom path
r2-upload /path/to/file.pdf --key uploads/2026/file.pdf
Upload to specific bucket
r2-upload /path/to/file.pdf --bucket personal
Custom expiration (default: 5 minutes)
r2-upload /path/to/file.pdf --expires 24h r2-upload /path/to/file.pdf --expires 1d r2-upload /path/to/file.pdf --expires 300 # seconds
Public URL (no signature)
r2-upload /path/to/file.pdf --public
Video Download and Upload
Download videos from YouTube, Vimeo, Bilibili, Xiaohongshu (小红书), and 100+ other platforms:
# YouTube video_download_upload "https://www.youtube.com/watch?v=dQw4w9WgXcQ" # Xiaohongshu (小红书) share link video_download_upload "http://xhslink.com/o/9y5ucJlQUJE" # Bilibili video_download_upload "https://www.bilibili.com/video/BV1xx411c7mD" # Download specific quality video_download_upload "URL" --stream "best" # Audio only video_download_upload "URL" --audio-only # Upload to specific bucket video_download_upload "URL" --bucket my-videos # Custom expiration video_download_upload "URL" --expires 1h
Video Options:
(required): Video URL to downloadurl
: Target bucket (uses default if not specified)bucket
: URL expiration time (default: 5m)expires
: Video quality/format selector (e.g., "best", "137", "248")stream
: Download audio only instead of videoaudio_only
: Cookie string for authenticated downloadscookie
: Custom S3 key path (default: auto-generated with video title)key
Prerequisites for video download:
Install lux:
# macOS brew install lux # Linux go install github.com/iawia002/lux@latest
Tools
- Upload file and get presigned URLr2_upload
- List files in bucketr2_list
- Delete a filer2_delete
- Generate presigned URL for existing filer2_generate_url
- Download video using lux and upload to R2/S3video_download_upload
Environment Variables
- Path to config file (default:R2_UPLOAD_CONFIG
)~/.r2-upload.yml
- Override default bucketR2_DEFAULT_BUCKET
- Default expiration in seconds (default: 300 = 5 minutes)R2_DEFAULT_EXPIRES
Notes
- Uploaded files are stored with their original filename unless
is specified--key - Automatic UUID prefix added to prevent collisions (e.g.,
)abc123/file.pdf - Content-Type automatically detected from file extension
- Presigned URLs expire after the configured duration