# OpenClip turns a long video into AI-selected highlight clips with titles and covers

> OpenClip is a Python pipeline that takes a video URL or a local file and runs download, transcription, segmentation, AI analysis, clip generation, titles and covers as one flow, with a Streamlit web interface, a command line and an agent skill as three front ends. The analysis is done by an LLM you bring your own key for, and the transcription layer prefers platform subtitles before falling back to local ASR.

**linzzzzzz/openclip** — OpenClip - AI-powered highlight extraction for long videos (AI 驱动的长视频精彩时刻提取工具)

- Repository: https://github.com/linzzzzzz/openclip
- Website: https://discord.gg/SFJQQg9VmJ
- Stars: 575 · Forks: 73
- Language: Python
- License: MIT
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/linzzzzzz-openclip

## One pipeline, six stages, three front ends

OpenClip is a lightweight automated video processing pipeline for finding and extracting the most interesting parts of long videos, particularly talking head content and live stream replays. The description in the repository listing calls it AI powered highlight extraction for long videos.

The pipeline itself is described as a single flow: given a video URL or a local file, it performs download, transcription, segmentation, AI analysis, clip generation, and adding titles and covers, and outputs the best segments. The intended use is pulling highlights out of long streams or videos quickly.

What makes it interesting as a project is that the same pipeline is reachable three ways. There is a Streamlit web interface, an agent skill, and a command line interface, and the README states that all three are supported to meet different user needs. The agent side is the most unusual: OpenClip is listed on skills.sh and can be installed into any directory as an Agent Skill with npx skills add, and it ships built-in agent skills for Claude Code and TRAE so that a natural language request is enough to process a video.

The repository layout supports that structure. There is a core/ directory, an editor_frontend/ and an editor_runtime.py for the post-processing editor, job_manager.py for background task handling, a video_orchestrator.py, a prompts/ directory holding the prompt templates, and an editor for the clip editing step. The presence of a job manager and a Streamlit app is what makes concurrent processing of several videos possible.

## Selection is done by an LLM, so the provider is your choice

The AI analysis stage ranks candidate segments on content, interaction and entertainment value, and the --user-intent parameter lets you tell the model what you are looking for in natural language, so the filtering and ranking prefer what you asked about.

The provider list is broad and configurable. The README lists Qwen as the default with the qwen3.6-plus model, OpenRouter with stepfun/step-3.5-flash:free, GLM with glm-4.7, MiniMax with MiniMax-M2.7, and a custom_openai provider added later for pointing at a local or self hosted OpenAI compatible endpoint. The custom provider is the one that matters if you want to keep the video content on your own infrastructure, and the README lists LM Studio, vLLM, One API and New API as examples of compatible services.

The base URL is flexible. CUSTOM_OPENAI_BASE_URL can be the API root such as a path ending in /v1, or the full chat completions endpoint itself, and CUSTOM_OPENAI_API_KEY can be left empty if the compatible endpoint does not require bearer authentication.

The Streamlit sidebar can override the LLM model and the LLM base URL per provider, and the CLI equivalents are --llm-model and --llm-base-url. The README also notes that a background context option is available, for example the name of the person streaming, which gives the analysis more to work with.

## Transcription prefers platform subtitles and routes local ASR by language

The transcription layer is a two step design, and the first step is to avoid transcribing at all when the platform already did it.

The README states that transcription prefers platform subtitles, and that local ASR is routed automatically by language: English uses Whisper and Chinese prefers Paraformer. The Paraformer runtime is an optional extra that pulls in funasr, modelscope, soundfile, torch and torchaudio, and the project expects a helper checkout under third_party/funasr-paraformer unless you point PARAFORMER_PROJECT_DIR somewhere else. If the Paraformer dependency or the helper is unavailable, the pipeline falls back to Whisper automatically, so the extra is genuinely optional rather than load bearing.

The speaker identification feature is described as a preview version. It uses the --speaker-references option to label speakers with real names for interview, panel discussion and podcast style videos, and it needs a HuggingFace token plus acceptance of the pyannote model agreement. That last requirement is the kind of detail worth reading before you promise the feature to someone else.

The dependency list in pyproject.toml explains the rest of the stack: yt-dlp for downloading, openai-whisper for speech to text, moviepy for the editing, streamlit for the web interface, requests, fastapi and uvicorn for the API surface, and imageio-ffmpeg. The yt-dlp dependency is pinned to the git master branch rather than a release, which tells you the project tracks the downloader closely.

## Getting it running is a clone, a sync and a key

The install path is a Python project managed with uv, and the quick start is short.

```bash
git clone https://github.com/linzzzzzz/openclip.git
cd openclip
uv sync
```

The uv sync step pulls in Python 3.11 or newer if the system does not have it, plus yt-dlp, Whisper and the other Python dependencies including moviepy and streamlit. The project also requires ffmpeg on the machine for the video processing, and the README gives the install command for each platform, from brew on macOS to apt on Ubuntu to a download on Windows.

You also need a browser if you intend to use browser cookies for authenticated downloads, and the README notes that Deno or Node is optional but recommended for YouTube, since a JavaScript runtime improves YouTube download stability and OpenClip detects and uses it automatically.

Once the environment is ready, the web interface starts with:

```bash
uv run python -m streamlit run streamlit_app.py
```

And the optional extras are installed the same way, for example:

```bash
uv sync --extra paraformer
```

If you keep the Paraformer helper outside the repository, you point the project at it with:

```bash
export PARAFORMER_PROJECT_DIR=/path/to/funasr-paraformer
```

That last detail is the one to remember if you mirror the helper elsewhere: without the variable, the default is the checkout inside the repository.

## Post-processing is where the clip editor and subtitle burning live

The pipeline produces more than a cut, and the newer stages are the ones that turn a rough extraction into something publishable.

There is a Clip Editor post-processing step that lets you adjust the boundaries, the subtitles and the cover title of an individual clip, with support for re-rendering at a different speed. The README describes it as the feature added alongside a file upload entry point in Streamlit, background task retry, and the ability to cancel pending tasks after a restart.

Subtitle burning is optional and separate. The --burn-subtitles flag writes the SRT subtitles directly into the video, and the --subtitle-translation option burns bilingual subtitles, with the translation done by whichever LLM provider is currently selected. That requires an ffmpeg build with libass, and the README explains why the default install usually lacks it, with per platform instructions for a build that has it, including a note on Windows to download the full version.

There is also a duration preset system, so both the Streamlit interface and the command line can select a clip length range such as Auto for 30 seconds to 3 minutes, 30s-60s, 60s-90s, 90s-3m or 3m-5m. A --deep-optimize mode adds a further AI check and boundary correction after the candidate segments are gathered, which the README describes as improving segment boundary quality and the standalone-ness of each clip.

The boundary correction itself is on by default, according to the changelog entry for 2026-03-30, whose stated goal is to make the start and end of highlight clips feel more natural and reduce abrupt cuts.

## Cookies, retry and the honest limits of the tool

Several of the engineering decisions in OpenClip exist to work around the reality of scraping video platforms, and the README is reasonably candid about them.

Cookie handling is the clearest example. There is a Cookie guidance section, and the remote download tries three strategies in order: without cookies, then browser cookies, then a cookies file. The browser option needs a real browser on the machine, which is why Chrome, Firefox, Edge and Safari are listed as an optional requirement.

The other honest limitation is the upstream platform itself. The changelog entry for 2026-03-04 records that a mistaken attempt to reduce the GitHub size rewrote the Git history, and existing clones need to run git fetch origin and git reset --hard origin/main to resynchronise. That is a small thing and the author apologises for it, but it is a reminder that the repository is a personal project with a single maintainer.

The bigger structural limit is that the highlight selection needs a hosted language model. There is no offline mode for the interesting part of the pipeline, and the custom_openai provider only helps if you already run an OpenAI compatible model yourself. If your content cannot leave the machine, the transcription step still works locally with Whisper or Paraformer, but the selection step does not.

The alternative to a hosted model is a hand written highlight workflow, which is what a small editing team often does anyway with a spreadsheet of timestamps and a cutting tool. OpenClip wins when the volume of videos is high enough that manual selection is the bottleneck, and loses when quality per clip matters more than throughput, because the ranking is only as good as the model and the prompt.

On maintenance, the last push was on 2026-08-24 and the repository is not archived, and the releases show v0.4.9 on 2026-03-30, v0.5.0 on 2026-04-18 and v0.6.0 on 2026-04-27, so the cadence is frequent. The licence is MIT with a LICENSE file at the repository root, which is a permissive grant and a licensing note rather than legal advice. The project also keeps a Discord link as its homepage and publishes both an English and a Simplified Chinese README, and the repository carries .claude/, .cursor/ and .trae/ directories, which are the agent skill definitions for the three agent tools it targets.

## Conclusion

Adopt OpenClip if you regularly cut highlights out of long talks, streams or podcasts and want the selection step done by a language model rather than by hand, and if you are comfortable supplying an LLM API key. Do not adopt it as an offline tool, because the highlight selection depends on a hosted model, and note that the optional speaker identification extra pulls in WhisperX and requires a HuggingFace token and accepted model terms. Verify first which LLM provider you will use, since the model and base URL are configurable per provider, that ffmpeg is available on the machine, and that the transcription route works for your language before you rely on the pipeline for a batch of videos.

## FAQ

### What does OpenClip do with a video?

Given a video URL or a local file, OpenClip runs download, transcription, segmentation, AI analysis, clip generation and adding titles and covers, and outputs the best segments as separate clips with subtitle files, titles and cover images. It is aimed at long talking head videos and live stream replays.

### Which LLM providers does OpenClip support?

Qwen, OpenRouter, GLM, MiniMax and a custom_openai provider that lets you set the LLM model and LLM base URL for a local or self hosted OpenAI compatible endpoint. The Streamlit sidebar can override the model and base URL per provider, with the CLI equivalents being --llm-model and --llm-base-url.

### How does OpenClip transcribe the audio?

It prefers platform subtitles first. Local ASR is routed by language, with English using Whisper and Chinese preferring Paraformer, and the Paraformer path is an optional extra installed with uv sync --extra paraformer. If the Paraformer dependency or helper is unavailable, the pipeline falls back to Whisper automatically.

### How do I install and run OpenClip?

Clone the repository, cd into it and run uv sync, which also installs Python 3.11 or newer if needed, then set the API key for your chosen provider and start the web interface with uv run python -m streamlit run streamlit_app.py. You also need ffmpeg installed on the machine for the video processing.

### Can OpenClip burn subtitles into the exported clips?

Yes, with the --burn-subtitles flag, and the --subtitle-translation option can burn bilingual subtitles using the currently selected LLM provider. Both need an ffmpeg build with libass, which the default installs usually do not include.

## Sources

- [License: MIT](https://github.com/linzzzzzz/openclip/blob/main/LICENSE)
- [linzzzzzz/openclip on GitHub](https://github.com/linzzzzzz/openclip)
- [Project website](https://discord.gg/SFJQQg9VmJ)
- [README](https://github.com/linzzzzzz/openclip/blob/main/README.md)
- [Releases](https://github.com/linzzzzzz/openclip/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/linzzzzzz-openclip
