| name | nebulavault-media-downloader |
| description | NebulaVault distributed media orchestration platform for downloading, archiving, and organizing streams from HLS, DASH, HTTP, and RSS sources with CLI and Web UI. |
| triggers | ["download videos from streaming platforms","archive media content with NebulaVault","setup media downloader CLI","download HLS or DASH streams","create personal media library","automate video content downloads","configure NebulaVault for streaming content","batch download videos from URLs"] |
NebulaVault Media Downloader
Skill by ara.so — Devtools Skills collection.
NebulaVault is a distributed content orchestration platform for downloading, archiving, and organizing digital media from various streaming sources. It supports multiple protocols (HLS/m3u8, DASH/mpd, HTTP/HTTPS, RSS feeds) and provides both a command-line interface and a responsive Web UI for managing downloads.
Installation
Prerequisites
Ensure you have the following installed:
- Node.js 18+ or Deno runtime
ffmpeg for post-processing (transcoding, thumbnail generation)
- SQLite (bundled with most installations)
Quick Install
wget https://github.com/Ronish17/redbull-archive-cli/releases/latest/download/nebulavault-linux-x64.tar.gz
tar -xzf nebulavault-linux-x64.tar.gz -C ~/nebulavault
cd ~/nebulavault
./nebulavault init
./nebulavault --version
Alternative: Build from Source
git clone https://github.com/Ronish17/redbull-archive-cli.git
cd redbull-archive-cli
npm install
npm run build
Configuration
Initial Setup
Run the initialization wizard to set up default directories and profiles:
./nebulavault init
This creates a config/settings.json file with default parameters.
Manual Configuration
Edit config/settings.json:
{
"storage": {
"basePath": "/home/user/media",
"maxDiskUsage": "500GB",
"autoCleanup": true
},
"network": {
"maxConcurrentDownloads": 3,
"retryAttempts": 5,
"chunkSize": "5MB",
"rateLimitMbps": 50
},
"quality": {
"preferredResolution": "1080p",
"preferredCodec": "h264",
"autoSelectBest": true
},
"server": {
"webUIPort": 5600,
"enableSSL": false,
"apiKey": "${NEBULAVAULT_API_KEY}"
}
}
Environment Variables
export NEBULAVAULT_API_KEY="your-secure-api-key"
export NEBULAVAULT_STORAGE="/mnt/external/media"
export FFMPEG_PATH="/usr/local/bin/ffmpeg"
export NEBULAVAULT_DEBUG=true
CLI Usage
Basic Download Commands
./nebulavault download "https://example.com/video.m3u8"
./nebulavault download "https://example.com/video.m3u8" --output "my-video.mp4"
./nebulavault download "https://example.com/video.m3u8" --dir "/home/user/videos"
./nebulavault download "https://example.com/video.m3u8" --quality 720p
./nebulavault download "https://example.com/video.m3u8" --subtitles --lang en,es
Batch Downloads
./nebulavault batch --file urls.txt
RSS/Feed Monitoring
./nebulavault feed add "https://example.com/podcast.rss" --name "My Podcast"
./nebulavault feed list
./nebulavault feed update --all
./nebulavault feed remove "My Podcast"
Queue Management
./nebulavault queue list
./nebulavault queue pause <download-id>
./nebulavault queue resume <download-id>
./nebulavault queue cancel <download-id>
./nebulavault queue clear
Library Management
./nebulavault library search "documentary"
./nebulavault library list --sort date
./nebulavault library info <item-id>
./nebulavault library delete <item-id>
./nebulavault library export --format json --output library.json
Service Management
./nebulavault service start
./nebulavault service stop
./nebulavault service status
./nebulavault service logs --tail 50
Web UI
Starting the Web Interface
./nebulavault serve
./nebulavault serve --port 8080
./nebulavault serve --ssl --cert /path/to/cert.pem --key /path/to/key.pem
Access the Web UI at http://localhost:5600
API Endpoints
The Web UI exposes a REST API for programmatic access:
curl -H "Authorization: Bearer ${NEBULAVAULT_API_KEY}" \
http://localhost:5600/api/downloads
curl -X POST -H "Authorization: Bearer ${NEBULAVAULT_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/video.m3u8", "quality": "1080p"}' \
http://localhost:5600/api/downloads
curl -H "Authorization: Bearer ${NEBULAVAULT_API_KEY}" \
http://localhost:5600/api/library
Advanced Usage
Quality Profiles
Create custom quality profiles in config/profiles.json:
{
"profiles": {
"mobile": {
"resolution": "480p",
"codec": "h264",
"audioBitrate": "96k",
"videoBitrate": "800k"
},
"standard": {
"resolution": "720p",
"codec": "h264",
"audioBitrate": "128k",
"videoBitrate": "2500k"
},
"premium": {
"resolution": "1080p",
"codec": "h265",
"audioBitrate": "256k",
"videoBitrate": "5000k"
}
}
}
Use profiles in commands:
./nebulavault download "https://example.com/video.m3u8" --profile premium
Post-Processing Scripts
Configure automatic post-processing in config/settings.json:
{
"postProcessing": {
"enabled": true,
"scripts": [
{
"name": "thumbnail",
"command": "ffmpeg -i {input} -ss 00:00:05 -vframes 1 {output}.jpg"
},
{
"name": "transcode",
"command": "ffmpeg -i {input} -c:v libx265 -preset medium {output}_h265.mp4"
}
]
}
}
Plugin System
NebulaVault supports plugins for custom extractors:
module.exports = {
name: 'custom-extractor',
version: '1.0.0',
canHandle(url) {
return url.includes('custom-site.com');
},
async extract(url) {
return {
streamUrl: 'https://cdn.custom-site.com/video.m3u8',
title: 'Video Title',
description: 'Description',
duration: 3600,
thumbnail: 'https://cdn.custom-site.com/thumb.jpg'
};
}
};
Load plugins:
./nebulavault plugin install ./plugins/custom-extractor.js
./nebulavault plugin list
Common Patterns
Archiving a Video Series
mkdir -p ~/media/documentary-series
for i in {1..10}; do
./nebulavault download "https://example.com/series/episode${i}.m3u8" \
--output "episode-$(printf '%02d' $i).mp4" \
--dir ~/media/documentary-series \
--quality 1080p \
--subtitles
done
Automated Daily Downloads
Create a cron job for automated downloads:
crontab -e
0 2 * * * /home/user/nebulavault/nebulavault feed update --all >> /var/log/nebulavault.log 2>&1
Bandwidth-Limited Downloads
./nebulavault download "https://example.com/video.m3u8" --rate-limit 5M
./nebulavault download "https://example.com/video.m3u8" --schedule "02:00"
Resume Interrupted Downloads
./nebulavault queue resume --all
./nebulavault verify ~/media/incomplete-video.mp4
Troubleshooting
Download Fails with "Stream Not Accessible"
curl -I "https://example.com/video.m3u8"
./nebulavault download "https://example.com/video.m3u8" \
--header "User-Agent: Mozilla/5.0" \
--header "Referer: https://example.com"
FFmpeg Not Found
sudo apt install ffmpeg
brew install ffmpeg
export FFMPEG_PATH="/usr/local/bin/ffmpeg"
./nebulavault download "https://example.com/video.m3u8"
Disk Space Issues
df -h ~/media
{
"storage": {
"autoCleanup": true,
"minFreeSpace": "50GB"
}
}
./nebulavault library cleanup --older-than 30d
Slow Download Speeds
./nebulavault download "https://example.com/video.m3u8" --connections 8
./nebulavault download "https://example.com/video.m3u8" --chunk-size 10M
{
"network": {
"maxConcurrentDownloads": 5,
"chunkSize": "10MB"
}
}
Corrupt or Incomplete Downloads
./nebulavault verify ~/media/video.mp4
./nebulavault download "https://example.com/video.m3u8" \
--verify-segments \
--retry 10
Web UI Not Accessible
./nebulavault service status
netstat -tuln | grep 5600
./nebulavault serve --port 5600 --verbose
sudo ufw allow 5600/tcp
HLS Key Decryption Errors
./nebulavault download "https://example.com/encrypted.m3u8" \
--key-url "https://example.com/keys/" \
--verbose
./nebulavault download "https://example.com/encrypted.m3u8" \
--cookies cookies.txt
Best Practices
- Always verify URLs before batch downloads to avoid wasting bandwidth
- Use quality profiles for consistent output across downloads
- Enable automatic checksums to ensure file integrity
- Monitor disk space when archiving large collections
- Respect rate limits to avoid being blocked by content providers
- Use environment variables for sensitive configuration (API keys, tokens)
- Keep logs for debugging and audit trails
- Regular backups of the library database and configuration files
Legal and Ethical Considerations
NebulaVault is designed for lawful content acquisition only. Ensure you have the legal right to download and store any content. The tool does not bypass DRM, circumvent paywalls, or enable unauthorized access. It is intended for:
- Public domain content
- Creative Commons licensed media
- Content you own or have permission to archive
- Freely accessible educational resources
- Open-access scientific broadcasts
Always comply with the terms of service of content providers and respect copyright laws in your jurisdiction.