Skip to content

Repository files navigation

ClipForge: turn long videos into viral clips on your desktop

The open-source Opus Clip alternative that runs on your desktop.

clipforge site  ·  download  ·  faq

Turn podcasts, webinars, streams and interviews into ready-to-post vertical clips.
AI-picked moments, virality scores, animated captions, auto zoom and speaker-aware reframing.

Latest release CI status Total downloads MIT license Platforms PRs welcome


Why ClipForge instead of Opus Clip?

Opus Clip is great, but it costs a subscription, runs in the cloud, and uploads your footage. ClipForge does the same job as a free desktop app. You bring an OpenAI API key and pay cents per video instead of dollars per month.

ClipForge Opus Clip (and similar SaaS)
Price Free and open source (MIT). Pay only OpenAI API cents Monthly subscription
Your footage Stays on your machine. Only audio, transcripts and a few frames go to the API Uploaded to their cloud
Processing minutes Unlimited Capped per plan
Watermark Your own logo, or none Removed on paid tiers
Models Your choice (GPT-5 series, or the budget legacy option) Theirs
Extensible Fork it, script it, PR it Closed

Typical cost: ~$0.36/hour of video for Whisper transcription plus a few cents of LLM analysis with the default gpt-5.4-mini.

What it looks like

AI-found clips ranked by virality score Clip editor with live preview, caption styles and branding watermark

Choosing between finding viral clips and captioning the whole video, with output shape, speaker tracking and auto zoom options

Pick a mode at setup: let the AI find clips, or caption the whole video end to end.

Features

Two ways to work

  • Find viral clips. The AI reads the transcript, cuts the best moments out and scores them, and you pick from the results.
  • Caption the whole video. No clip finding: give it a 16:9 video and it comes back as one vertical, captioned edit you can trim, restyle and export. Optionally tracks the speaker across the whole video and adds auto zoom. Both modes work on the same project, and the transcript is shared between them.

Finding the clips

  • Import anything. Local files (MP4/MOV/MKV/WEBM and more) or paste a URL from YouTube, Vimeo, TikTok, Twitch, or any site yt-dlp supports. Private or SSO-protected videos (like enterprise Vimeo) work by borrowing the login from your browser. No server integration needed.
  • Whisper transcription with word-level timestamps. Long videos are chunked automatically and checkpointed, so retries and re-generations never pay for transcription twice.
  • Viral moment detection backed by research. An LLM picks self-contained hook, build, payoff micro-stories (not clips that trail off mid-setup). You can steer it with your own prompt if you want, like "find the funniest exchanges". A second AI pass reviews every clip ending and extends it to the beat that actually completes the thought.
  • Two-pass virality scoring (0-99). A text rubric based on Berger and Milkman's What Makes Online Content Viral? (JMR 2012), plus measured vocal energy, combined with a vision pass from Kayal et al. (ACL 2025) that scores sampled frames for scroll-stopping potential.

Making them good

  • Auto zoom. Scene-aware punch-ins on the speaker's most energetic lines, jump zooms that cover cuts, and slow creep on static stretches. The kind of thing top short-form editors do to keep people watching.
  • Tighten cuts. Pauses and filler words ("um", "uh") get removed automatically. Captions, B-roll, zoom and the face track all remap to the shorter timeline.
  • Speaker-aware auto-reframe. On-device audio-visual active speaker detection (UltraFace face tracking + the LR-ASD model via ONNX Runtime, no cloud) checks every face's lip movement against the actual soundtrack, so the crop stays on the person talking — not whoever moves or gestures. The 9:16 crop cuts between speakers like a camera switch.
  • 12 caption styles plus your own fonts. Karaoke-style word highlighting burned in with libass. Upload any TTF/OTF and previews match exports exactly.
  • Your branding. Overlay your logo or watermark (corner, size, opacity) on the preview and every export.
  • AI B-roll. Say "Yoda" and a picture of Yoda pops over the video at that word. Uses Wikipedia and Openverse images, no extra API keys.
  • A real editor. Filmstrip trim with waveform and live playhead, click-to-seek transcript that doubles as a trim tool, aspect ratios (9:16 / 1:1 / 16:9), and a live preview that matches the export.

Shipping them

  • Export H.264/AAC MP4s with burned-in captions. Loudness-normalised to -14 LUFS, gentle audio tail fade, three quality tiers, NVIDIA NVENC GPU encoding with automatic CPU fallback. Optionally encode once to fit under a megabyte cap (Discord, email, WhatsApp).
  • AI post captions. One click writes a scroll-stopping TikTok/Reels/Shorts caption (hook-first line, one engagement driver, niche hashtags). Copy it and jump straight to TikTok Studio upload.
  • In-app updates. Packaged builds download and install updates themselves. Source checkouts update with one click (pull, rebuild, relaunch).

Quick start

git clone https://github.com/JeremySNR/clip-forge.git
cd clip-forge
npm install
npm run dev        # development with hot reload
npm run package    # distributable build (dmg / nsis / AppImage)

Publishing a release (for maintainers)

Most people should just download the app from the releases page — there's no need to run anything from source. To cut a new release, bump the version and push a tag; the Release workflow builds the macOS .dmg, Windows installer and Linux AppImage and publishes them, along with the update manifests the in-app updater reads:

npm version patch        # or minor / major — bumps package.json and creates the tag
git push --follow-tags   # pushes the commit and the vX.Y.Z tag

Windows packages can also be listed on winget after a one-off first submit.

Once a user has installed any build, later releases install themselves automatically. The macOS app is not code-signed yet, so on first launch the user right-clicks the app and chooses Open to get past Gatekeeper (a one-time step). Signing + notarization removes that prompt and is what enables fully silent macOS auto-updates — add an Apple Developer ID certificate and wire the signing secrets into the workflow when you're ready.

You need Node.js 20+ and an OpenAI API key. Enter it in the app and it gets stored encrypted with Electron safeStorage. FFmpeg is bundled, so there is nothing else to install. Prebuilt Linux AppImages are on the releases page. On Windows, winget install JeremySNR.ClipForge will work once the winget package is listed.

Everything except transcription and analysis runs locally. Rendering, face tracking, editing, zoom and export never leave your machine. Only extracted audio, transcripts and a few sampled frames go to the OpenAI API. Never the full video.

Architecture

src/
├── main/                  Electron main process
│   ├── pipeline/
│   │   ├── ffmpeg.ts      probe, audio chunk extraction, thumbnails
│   │   ├── openai.ts      minimal REST client (Whisper + structured chat)
│   │   ├── transcribe.ts  chunked transcription, timestamp stitching
│   │   ├── highlights.ts  LLM viral-moment detection, scoring, ending review
│   │   ├── faces.ts       auto-reframe orchestration + focus track building
│   │   ├── asd.ts         LR-ASD audio-visual active speaker detection
│   │   ├── facetracks.ts  per-person face tracking (IOU + interpolation)
│   │   ├── detect.ts      UltraFace face detection + scene-cut detection
│   │   ├── mfcc.ts        MFCC audio features for the ASD model
│   │   ├── energy.ts      per-segment vocal energy (arousal signal)
│   │   ├── ytdlp.ts       yt-dlp binary management + URL downloads
│   │   ├── broll.ts       LLM keyword tagging for B-roll inserts
│   │   ├── imagesearch.ts keyless Wikipedia/Openverse image search
│   │   ├── encoders.ts    NVENC detection/verification, GPU ffmpeg download
│   │   ├── captions.ts    ASS karaoke subtitle generation
│   │   ├── socialCaption.ts AI post-caption writer
│   │   └── render.ts      cut, reframe, auto zoom, watermark, burn-in
│   ├── updates.ts         GitHub release checks + self-update
│   ├── fonts.ts           custom caption fonts (sfnt parsing, merged fontsdir)
│   ├── ipc.ts             typed IPC handlers
│   ├── settings.ts        encrypted API key, models, branding
│   └── projects.ts        project persistence (userData/projects)
├── preload/               context-isolated typed bridge
├── shared/                types, caption styles/layout, tighten + zoom planners
└── renderer/              React UI (Tailwind, Zustand)

The live preview and the export share the same planning code in src/shared/ (caption layout, tighten cuts, zoom), so what you see is what gets rendered.

Tests

Unit tests, typecheck and lint run in CI on every push, alongside the offline pipeline test and a UI smoke test:

npm test               # vitest unit tests
npm run typecheck
npm run lint

Integration test scripts live in scripts/ (test-pipeline, test-e2e, test-quality, test-wholevideo, test-encoders, test-resilience, test-broll, test-youtube, test-asd, smoke-test.sh). See each file's header for what it covers. The e2e ones need OPENAI_API_KEY.

To measure clip quality on your own projects, scripts/eval-clips.ts reads every saved project and reports how many clips open mid-sentence, cut a sentence off, or trail into dead air, plus the length spread. Add --rerun (needs OPENAI_API_KEY, a few cents per project, no transcription cost) to re-run clip detection on the saved transcripts with the current prompts and compare, which is how to check a prompt change actually helps:

npx tsx --tsconfig tsconfig.node.json scripts/eval-clips.ts --verbose

The bundled active-speaker model (resources/models/lr-asd-*.onnx) is exported from the MIT-licensed LR-ASD weights with scripts/export-asd-onnx.py (requires Python with torch, onnx, onnxruntime, python_speech_features).

FAQ

Is it actually free? The app is free and MIT licensed, forever. You pay OpenAI directly for transcription and analysis, which works out at roughly $0.36 per hour of video. There is no subscription, no account, no processing-minute cap and no paid tier holding features back.

Do I need an OpenAI API key? For finding clips and captioning, yes, because that is what does the transcription and the analysis. Everything else runs locally without one: the editor, trimming, caption styling, auto zoom, speaker reframing, watermarks and export. If you already have a transcript from a previous run, you can keep editing and exporting offline.

Does my video get uploaded anywhere? No. Only extracted audio, the transcript and a handful of sampled frames go to the OpenAI API. The full video never leaves your machine, and rendering, face tracking, zoom and export are entirely local.

How is this different from Opus Clip's free tier? Free SaaS tiers cap your processing minutes and usually watermark the output. ClipForge has no cap because it runs on your hardware, and the only watermark is one you add yourself.

Do I need a GPU? No. ClipForge uses NVIDIA NVENC if it finds it and falls back to CPU encoding automatically. A GPU makes exports faster, nothing more. Speaker detection runs on-device through ONNX Runtime and is fine on CPU.

How long can my video be? There is no fixed limit. Audio is chunked and transcription is checkpointed to disk as it goes, so hour-plus recordings work and a failure part way through does not mean paying to transcribe it again.

Does it work in languages other than English? Transcription does. Set the language in Settings (it defaults to English, which is more reliable than auto-detect, since auto occasionally mislabels English as something else). Captions burn in whatever Whisper returns. Translating captions into another language is on the roadmap, not built yet.

Can it post to TikTok or YouTube for me? Not automatically. It writes the post caption and hands you the file, then you upload. Direct publishing needs an audited TikTok/YouTube app, which is on the roadmap and a good contribution if you fancy it.

Can I use the clips commercially? Yes. MIT licence, and the output is yours. Do check the rights on any source footage you did not create, and note that AI B-roll pulls from Wikipedia and Openverse, whose images carry their own licences.

macOS says the app cannot be opened. Why? The macOS builds are not code-signed yet, so Gatekeeper objects on first launch. Right-click the app and choose Open, which is a one-time step. Signing and notarisation are wanted; see CONTRIBUTING.md if you can help.

Which OpenAI models does it use? whisper-1 for transcription and gpt-5.4-mini for analysis by default. Both are configurable in Settings, including a cheaper legacy option.

Can I run it against a local or non-OpenAI model? Yes, if it speaks the OpenAI REST shape. Set the API base URL in Settings (or OPENAI_BASE_URL) to Azure OpenAI, OpenRouter, Groq, LM Studio, Ollama, or anything else with /v1/chat/completions. Transcription can point at a separate local Whisper server (faster-whisper, whisper.cpp’s compatible endpoint) — it must return word-level timestamps, because captions and tighten-cuts depend on them. Bundled in-process Whisper (no server at all) is still on the roadmap.

Roadmap

Each of these is an open issue, so the discussion and the detail live there. Contributions very welcome.

Looking for somewhere to start? The good first issues need no deep knowledge of the pipeline.

Contributing

Issues and PRs are welcome. The codebase is TypeScript end-to-end. npm test && npm run typecheck && npm run lint must pass. CI enforces all three plus an offline render test.

See CONTRIBUTING.md for setup (including how to explore the UI without an API key), how the code is laid out, and the handful of things that are easy to get wrong. Release history is in CHANGELOG.md. Security issues go through SECURITY.md rather than a public issue.

License

MIT

About

Open-source Opus Clip alternative. Turn long videos into vertical clips with AI-picked moments, virality scoring, animated captions, auto zoom and speaker-aware reframing. Free desktop app for macOS, Windows and Linux.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

13 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages