# Video Formats and URL Sources Supported by watch.skill in bradautomates/claude-video

> Discover video formats and URL sources supported by watch.skill in bradautomates/claude-video. Supports HTTP/HTTPS URLs via yt-dlp and local files like mp4, mkv, and mov.

- Repository: [bradautomates/claude-video](https://github.com/bradautomates/claude-video)
- Tags: api-reference
- Published: 2026-08-06

---

**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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/skills/watch/scripts/download.py) determines whether an input string represents a remote resource by validating URL structure and scheme.

```python
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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/skills/watch/scripts/download.py).

```python
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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/download.py) script:

Downloading from a YouTube URL with video and subtitles:

```bash
python -m skills.watch.scripts.download "https://www.youtube.com/watch?v=abc123" /tmp/watch-output

```

Downloading only the audio stream from Vimeo:

```bash
python -m skills.watch.scripts.download "https://vimeo.com/987654" /tmp/watch-output --audio-only

```

Using a local video file:

```bash
python -m skills.watch.scripts.download "/home/user/clips/lecture.mov" /tmp/watch-output

```

Handling an unsupported extension (generates a warning but proceeds):

```bash
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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/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`](https://github.com/bradautomates/claude-video/blob/main/setup.py).