Video Formats and URL Sources Supported by watch.skill in bradautomates/claude-video
The watch skill accepts any HTTP or HTTPS URL processable by yt-dlp—including YouTube, Vimeo, and TikTok—and validates local files against a whitelist of eight video extensions including .mp4, .mkv, and .mov.
The watch skill in the bradautomates/claude-video repository provides flexible video input handling by supporting both remote URL downloads and local file processing. Understanding the specific video formats and URL sources compatible with this skill ensures smooth execution when analyzing video content. The input validation logic resides primarily in skills/watch/scripts/download.py, which distinguishes between network sources and local paths using distinct detection mechanisms.
URL Sources and Remote Video Support
HTTP and HTTPS URL Detection
The is_url() function in skills/watch/scripts/download.py determines whether an input string represents a remote resource by validating URL structure and scheme.
def is_url(source: str) -> bool:
if source.startswith("-"):
return False
parsed = urlparse(source)
return parsed.scheme in ("http", "https") and bool(parsed.netloc)
This implementation explicitly requires the scheme to be http or https and mandates a valid network location. Arguments beginning with a hyphen are excluded to avoid interpreting command-line flags as URLs.
yt-dlp Site Compatibility
Once identified as a URL, the skill delegates downloading to yt-dlp, a fork of youtube-dl that supports hundreds of streaming platforms. According to the bradautomates/claude-video source code, supported sites include YouTube, Vimeo, TikTok, Twitch, and Reddit. The setup.py file in the same directory verifies that yt-dlp is installed before execution begins.
Local Video Formats and File Validation
Accepted Video File Extensions
For local paths that fail the URL check, the skill verifies file extensions against the VIDEO_EXTS whitelist defined in skills/watch/scripts/download.py.
VIDEO_EXTS = {
".mp4", ".mkv", ".webm", ".mov",
".m4v", ".avi", ".flv", ".wmv"
}
Files ending with any of these eight extensions are accepted as valid video inputs for processing.
Advisory Validation Behavior
Files with extensions outside the VIDEO_EXTS set trigger a warning message but still proceed through the pipeline. This advisory check allows flexibility for edge cases while alerting users to potential compatibility issues. The orchestration logic in skills/watch/scripts/watch.py coordinates this validation flow before passing valid inputs to subsequent processing steps.
Practical Usage Examples
The following commands demonstrate supported input types for the download.py script:
Downloading from a YouTube URL with video and subtitles:
python -m skills.watch.scripts.download "https://www.youtube.com/watch?v=abc123" /tmp/watch-output
Downloading only the audio stream from Vimeo:
python -m skills.watch.scripts.download "https://vimeo.com/987654" /tmp/watch-output --audio-only
Using a local video file:
python -m skills.watch.scripts.download "/home/user/clips/lecture.mov" /tmp/watch-output
Handling an unsupported extension (generates a warning but proceeds):
python -m skills.watch.scripts.download "/home/user/video.unknown" /tmp/watch-output
# → prints: [watch] warning: .unknown is not a known video extension, proceeding anyway
Summary
- The
is_url()function inskills/watch/scripts/download.pyaccepts any HTTP or HTTPS URL with a valid network location - Remote downloads rely on yt-dlp, supporting hundreds of sites including YouTube, Vimeo, and TikTok
- Local files must match the
VIDEO_EXTSwhitelist: .mp4, .mkv, .webm, .mov, .m4v, .avi, .flv, or .wmv - Non-matching extensions generate warnings but do not block processing
- The
SKILL.mdfile defines the slash-command contract governing these inputs
Frequently Asked Questions
Does watch.skill support FTP or file:// URLs?
No. The is_url() function explicitly checks for only http and https schemes in the parsed URL. FTP, file:// protocols, or other schemes are treated as local file paths and validated against the video extension whitelist in download.py.
What happens if I provide a local file with an unsupported extension?
The skill emits a warning message indicating the extension is not recognized, then proceeds to process the file anyway. This advisory check allows flexibility while alerting users to potential compatibility issues before ffmpeg processing begins.
Can I download age-restricted or private videos from YouTube?
This depends on yt-dlp's capabilities and your configuration. The watch skill relies entirely on yt-dlp for URL processing, so any site or video accessible to yt-dlp—including those requiring authentication cookies or handling age restrictions—works with the skill according to yt-dlp's supported sites documentation.
Does the skill validate video codec compatibility or just file extensions?
The skill only validates file extensions against the VIDEO_EXTS set defined in download.py. It does not inspect container formats, codecs, or video integrity—those validations occur downstream during processing by ffmpeg or other tools referenced in setup.py.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →