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 in skills/watch/scripts/download.py accepts 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_EXTS whitelist: .mp4, .mkv, .webm, .mov, .m4v, .avi, .flv, or .wmv
  • Non-matching extensions generate warnings but do not block processing
  • The SKILL.md file 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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →