Watch
mathiaschu/watch
Watch a video from YouTube, Instagram, X/Twitter, Vimeo, TikTok or any of ~1800 yt-dlp sites (or a local path).
Processes videos to identify engaging moments, generate transcripts, and create highlight clips with artistic titles and custom cover images.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install linzzzzzz/openclip video-clip-extractor --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.trae/skills/video-clip-extractor .claude/skills/video-clip-extractor && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .claude/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install linzzzzzz/openclip video-clip-extractor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.trae/skills/video-clip-extractor .agents/skills/video-clip-extractor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .agents/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install linzzzzzz/openclip video-clip-extractor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.trae/skills/video-clip-extractor .cursor/skills/video-clip-extractor && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .cursor/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/linzzzzzz/openclip.git --path .trae/skills/video-clip-extractor--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install linzzzzzz/openclip video-clip-extractor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.trae/skills/video-clip-extractor .gemini/skills/video-clip-extractor && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .gemini/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install linzzzzzz/openclip video-clip-extractorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .github/skills && cp -r skills-src/.trae/skills/video-clip-extractor .github/skills/video-clip-extractor && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .github/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add linzzzzzz/openclip --skill video-clip-extractor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install linzzzzzz/openclip video-clip-extractor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/linzzzzzz/openclip.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.trae/skills/video-clip-extractor .opencode/skills/video-clip-extractor && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "video-clip-extractor" agent skill from https://github.com/linzzzzzz/openclip/tree/main/.trae/skills/video-clip-extractor into .opencode/skills/video-clip-extractor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "video-clip-extractor", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
video-clip-extractorProcesses videos to identify engaging moments, generate transcripts, and create highlight clips with artistic titles and custom cover images.
Video Clip Extractor is an agent skill from linzzzzzz/openclip. Processes videos to identify engaging moments, generate transcripts, and create highlight clips with artistic titles and custom cover images. Use when user needs to: extract highlights from long videos or livestreams, clip or cut best moments from videos, cut video highlights, process Bilibili/YouTube URLs or local video files, generate transcripts via Whisper, analyze content for engaging moments, create short-form clips with styled titles and covers, adjust cover text position and colors, find and export…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Video production, Transcription and Speech recognition and synthesis. It works with Bilibili, YouTube and FFmpeg. The repository describes itself as: OpenClip - AI-powered highlight extraction for long videos (AI 驱动的长视频精彩时刻提取工具). The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0289627. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(uv run python video_orchestrator.py*)Bash(git clone*)Bash(git -C*openclip*)Bash(cd ~/.local/share/openclip*)AskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvbrewgitaptpipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
ffmpeg.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
QWEN_API_KEYOPENROUTER_API_KEYGLM_API_KEYMINIMAX_API_KEYHUGGINGFACE_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Video Clip Extractor loads about 2.8k tokens when it runs. Until then it costs about 178 tokens; SKILL.md has 1,056 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
- Ubuntu: `sudo apt install ffmpeg`| `--browser <browser>` | `firefox` | Browser for cookies: `chrome`, `firefox`, `edge`, `safari` |fmpeg: `brew install ffmpeg` (macOS) or `sudo apt install ffmpeg` (Ubuntu) |Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from linzzzzzz/openclip at commit 0289627, republished under its MIT licence (© linzzzzzz). 1,056 words, ~2,762 tokens.
.claude/skills/video-clip-extractor/SKILL.md (or your agent's skills folder).Run the video orchestrator to process videos and extract engaging highlights.
--user-intent. If unclear, ask: "Any specific topic or moments to focus on? (e.g. 'funny moments', 'key arguments')"video_orchestrator.py exist in the current directory? If yes, run directly. Otherwise use the global install at ~/.local/share/openclip.Before running, determine the execution context:
video_orchestrator.py exists in the current directory, skip setup and run directly.~/.local/share/openclip does not exist, run these steps:Prerequisites: git and uv must be installed.
brew install uv · Linux/Windows: pip install uvgit clone https://github.com/linzzzzzz/openclip.git ~/.local/share/openclip
cd ~/.local/share/openclip && uv syncTo update openclip later:
git -C ~/.local/share/openclip pull && cd ~/.local/share/openclip && uv syncIf inside the openclip repo (current directory contains video_orchestrator.py):
uv run python video_orchestrator.py [options] <source>If running globally (from any other directory):
cd ~/.local/share/openclip && uv run python video_orchestrator.py -o "$OLDPWD/processed_videos" [options] <source>$OLDPWD captures the user's original directory so clips are saved there, not inside the openclip install.
Where <source> is a video URL (Bilibili/YouTube) or local file path (MP4, WebM, AVI, MOV, MKV).
For local files with existing subtitles, place the .srt file in the same directory with the same filename (e.g. video.mp4 → video.srt).
references/, prompts/) resolve correctlyffmpeg must be installed (required for all clip generation):brew install ffmpegsudo apt install ffmpeg--burn-subtitles: needs ffmpeg with libass (see README for details)QWEN_API_KEY (default provider: qwen), orOPENROUTER_API_KEY (if --llm-provider openrouter), orGLM_API_KEY (if --llm-provider glm), orMINIMAX_API_KEY (if --llm-provider minimax)--speaker-references: run uv sync --extra speakers and set HUGGINGFACE_TOKEN| Argument | Description |
|---|---|
source | Video URL or local file path |
| Flag | Default | Description |
|---|---|---|
-o, --output <dir> | processed_videos | Output directory |
--max-clips <n> | 5 | Maximum number of highlight clips |
--browser <browser> | firefox | Browser for cookies: chrome, firefox, edge, safari |
--title-style <style> | fire_flame | Title style: gradient_3d, neon_glow, metallic_gold, rainbow_3d, crystal_ice, fire_flame, metallic_silver, glowing_plasma, stone_carved, glass_transparent |
--title-font-size <size> | medium | Font size preset for artistic titles. Options: small(30px), medium(40px), large(50px), xlarge(60px) |
--cover-text-location <loc> | center | Cover text position: top, upper_middle, bottom, center |
--cover-fill-color <color> | yellow | Cover text fill color: yellow, red, white, cyan, green, orange, pink, purple, gold, silver |
--cover-outline-color <color> | black | Cover text outline color: yellow, red, white, cyan, green, orange, pink, purple, gold, silver, black |
--language <lang> | zh | Output language: zh (Chinese), en (English) |
--llm-provider <provider> | qwen | LLM provider: qwen, openrouter, glm, minimax |
--user-intent <text> | — | Free-text focus description (e.g. "moments about AI risks"). Steers LLM clip selection toward this topic |
--subtitle-translation <lang> | — | Translate subtitles to this language before burning (e.g. "Simplified Chinese"). Requires --burn-subtitles and QWEN_API_KEY |
--speaker-references <dir> | — | Directory of reference WAV files (one per speaker, filename = speaker name) for speaker diarization. Requires uv sync --extra speakers and HUGGINGFACE_TOKEN |
-f, --filename <template> | — | yt-dlp template: %(title)s, %(uploader)s, %(id)s, etc. |
| Flag | Description |
|---|---|
--force-whisper | Ignore platform subtitles, use Whisper |
--skip-download | Use existing downloaded video |
--skip-transcript | Skip transcript generation, use existing transcript file |
--skip-analysis | Skip analysis, use existing analysis file for clip generation |
--use-background | Include background info (streamer names/nicknames) in analysis prompts |
--skip-clips | Skip clip generation |
--add-titles | Add artistic titles to clips (disabled by default) |
--skip-cover | Skip cover image generation |
--burn-subtitles | Burn SRT subtitles into video. Output goes to clips_post_processed/. Requires ffmpeg with libass |
-v, --verbose | Enable verbose logging |
--debug | Export full prompts sent to LLM (saved to debug_prompts/) |
-f)Uses yt-dlp template syntax. Common variables: %(title)s, %(uploader)s, %(upload_date)s, %(id)s, %(ext)s, %(duration)s.
Example: -f "%(upload_date)s_%(title)s.%(ext)s"
Set the appropriate API key for the chosen --llm-provider:
QWEN_API_KEY — for --llm-provider qwenOPENROUTER_API_KEY — for --llm-provider openrouterGLM_API_KEY — for --llm-provider glmMINIMAX_API_KEY — for --llm-provider minimaxThe orchestrator runs this pipeline automatically:
--force-whisper overrides--user-intent steers selection--title-styleUse --skip-clips, --skip-cover to skip specific steps. Use --add-titles to enable artistic titles. Use --skip-download and --skip-analysis to resume from intermediate results.
After a successful run, report results like this:
✅ Processing complete — 5 clips generated
📁 processed_videos/video_name/clips/
clip_01.mp4 [00:12:34 – 00:15:20] "Title of the moment"
clip_02.mp4 [00:28:45 – 00:31:10] "Another highlight"
clip_03.mp4 [00:45:00 – 00:47:30] "Key discussion point"
...
Cover images: clips/*.jpgprocessed_videos/{video_name}/
├── downloads/ # Original video, subtitles, and metadata (URL sources)
├── local_videos/ # Copied video and subtitles (local file sources)
├── splits/ # Split parts and AI analysis results
├── clips/ # Generated highlight clips + cover images
└── clips_post_processed/ # Post-processed clips when using --add-titles and/or --burn-subtitlesWhisper model — Default base works for clear audio. Use small for background noise, multiple speakers, or accents. Use turbo for speed + accuracy. Use large/medium only when transcript quality is critical.
--force-whisper — Use when platform subtitles are auto-generated (often inaccurate), when "no engaging moments found" occurs (better transcripts improve analysis), or for non-native language content where platform captions are unreliable.
--use-background — Use for content featuring recurring personalities (streamers, hosts) where nicknames and community references matter. Reads from prompts/background/background.md.
Multi-part analysis — Videos that get split are analyzed per-segment, then aggregated to the top 5 engaging moments across all segments.
--user-intent — Steers LLM clip selection at both the per-segment and cross-segment aggregation stages. Useful when you want to find clips about a specific topic (e.g. "AI safety predictions", "funny moments").
--burn-subtitles — Hardcodes the SRT subtitle into the video frame. Use when you want subtitles always visible (e.g. for social media). Combine with --subtitle-translation to add a translated subtitle track below the original.
--speaker-references — Enables speaker diarization for interviews/podcasts. Provide a directory of 10–30 second clean WAV clips (one per speaker), named after the speaker (e.g. references/Host.wav).
| Error | Fix |
|---|---|
| "ffmpeg not found" / clip generation fails silently | Install ffmpeg: brew install ffmpeg (macOS) or sudo apt install ffmpeg (Ubuntu) |
| "No API key provided" | Set QWEN_API_KEY, OPENROUTER_API_KEY, GLM_API_KEY, or MINIMAX_API_KEY env var |
| "Video download failed" | Check network/URL; try different --browser; or use local file |
| "Transcript generation failed" | Try --force-whisper or check audio quality |
| "No engaging moments found" | Try --force-whisper for better transcript accuracy |
| "Clip generation failed" | Ensure analysis completed; check for existing analysis file |
© linzzzzzz, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .trae/skills/video-clip-extractor of linzzzzzz/openclip.
Open the folder on GitHubat commit 0289627
Video Clip Extractor next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Video Clip Extractor this skilllinzzzzzz/openclip | 569 | — | ~2.8k | Automated safety check: Warn | MIT | |
| Watchmathiaschu/watch | 142 | — | ~4k | Automated safety check: Warn | MIT | |
| Watch Videocoreyhaines31/makerskills | 851 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Lecture To Notesysyecust/lecture-to-notes | 273 | — | ~14k | Automated safety check: Notes | Custom licence | |
| Video Transcribewendy7756/AI-Video-Transcriber | 3.3k | — | ~937 | Automated safety check: Notes | Apache-2.0 | |
| Ffmpeg Skillkajisho5/ffmpeg-skill | 1.9k | — | ~7.4k | Automated safety check: Pass | MIT |
mathiaschu/watch
Watch a video from YouTube, Instagram, X/Twitter, Vimeo, TikTok or any of ~1800 yt-dlp sites (or a local path).
coreyhaines31/makerskills
When you want to extract content from a video — YouTube, Loom, Vimeo, Riverside, Zoom recording, local MP4, X/IG video, anything yt-dlp supports.
ysyecust/lecture-to-notes
A skill your agent uses when users provide YouTube, Bilibili, or X/Twitter lecture URLs and want reader-first Chinese LaTeX/PDF notes with source-faithful claims, fluent authored prose, and verified…
wendy7756/AI-Video-Transcriber
Transcribe and summarize a video or podcast from a URL (YouTube, TikTok, Bilibili, Apple Podcasts, SoundCloud, 30+ platforms) or from a local media/.txt file.
kajisho5/ffmpeg-skill
Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text…
HUANGCHIHHUNGLeo/claude-real-video
Watch a video for the user. An agent skill from HUANGCHIHHUNGLeo/claude-real-video.
Categories
Processes videos to identify engaging moments, generate transcripts, and create highlight clips with artistic titles and custom cover images. Video Clip Extractor is an agent skill from linzzzzzz/openclip. Processes videos to identify engaging moments, generate transcripts, and create highlight clips with artistic titles and custom cover images.
Video Clip Extractor fits situations like: user needs to: extract highlights from long videos; cut best moments from videos; cut video highlights; process Bilibili/YouTube URLs.
Run `npx skills add linzzzzzz/openclip --skill video-clip-extractor -a claude-code`. Or copy the skill folder (.trae/skills/video-clip-extractor in linzzzzzz/openclip) into .claude/skills/video-clip-extractor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add linzzzzzz/openclip --skill video-clip-extractor -a codex`. Or copy the skill folder (.trae/skills/video-clip-extractor in linzzzzzz/openclip) into .agents/skills/video-clip-extractor in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add linzzzzzz/openclip --skill video-clip-extractor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/video-clip-extractor, .gemini/skills/video-clip-extractor, .github/skills/video-clip-extractor and .opencode/skills/video-clip-extractor in your project.
Going by SKILL.md and its folder, Video Clip Extractor needs the command-line tools its instructions call (uv, brew, git, apt and pip) and credentials named QWEN_API_KEY, OPENROUTER_API_KEY, GLM_API_KEY and MINIMAX_API_KEY. Our summary lists: Python 3; A credential in QWEN_API_KEY; A credential in OPENROUTER_API_KEY. Its frontmatter pre-approves these tools: Bash(uv run python video_orchestrator.py*), Bash(git clone*), Bash(git -C*openclip*), Bash(cd ~/.local/share/openclip*), AskUserQuestion.
SKILL.md names 1 domain. As links in the text: ffmpeg.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.
Video Clip Extractor is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Video Clip Extractor: Watch (mathiaschu/watch, 142 stars), Watch Video (coreyhaines31/makerskills, 851 stars), Lecture To Notes (ysyecust/lecture-to-notes, 273 stars) and Video Transcribe (wendy7756/AI-Video-Transcriber, 3.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
linzzzzzz (a GitHub user) maintains it in linzzzzzz/openclip, which has 569 GitHub stars. The repository was last updated on August 24, 2026.
Source: linzzzzzz/openclip on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.