Skip to content

Repository files navigation

Klipt

A lightweight, fast Windows desktop app for turning game clips (primarily NVIDIA ShadowPlay recordings) into something shareable — trim a moment losslessly, or compress / crop / convert it when you need a smaller file or a different format. Built to replace ClipChamp and beat LosslessCut on design.

  • Lossless first — the default Trim is an FFmpeg stream-copy (-c copy): near-instant, zero quality loss, output lands next to the source as <name>_trim.mp4 and never overwrites the original.
  • Lightweight — Tauri + Svelte. A small native shell, not a Chromium bundle.
  • GPU-aware — re-encodes use NVIDIA NVENC when available, with an automatic libx264 CPU fallback.

Features

Export modes

  • Trim (lossless) — stream-copy the selected Region, no re-encode.
  • Compress — re-encode to a target file size (MB, two-pass) or a quality preset (480p / 720p / 1080p / source). NVENC GPU encode with libx264 fallback, and a live progress bar streamed from FFmpeg.
  • Crop — drag a rectangle over the preview to keep just that area of the frame (re-encodes via the Compress path; crop is applied before scaling).
  • GIF / WebP — animated export of the Region: palette-optimised GIF or true-colour animated WebP, with configurable fps and width.
  • Audio only — extract the Region's audio as M4A (AAC stream-copy, lossless and instant for ShadowPlay sources) or MP3 (re-encoded via libmp3lame).
  • Keep-or-drop the audio track on any video export.

Timeline & playback

  • Drag across the timeline to select the Region; in / out handles for fine-tuning; slide the whole Region without resizing it; A resets to the whole clip.
  • Reopening a clip in the same session restores its last Region.
  • Loop playback, scoped to the Region or the whole clip.
  • Frame-stepping with a frame readout.
  • Audio waveform overlay and a filmstrip you can hover-scrub for precise cuts.
  • Preview volume control (does not affect exported audio).

Library

  • Recent-clips grid from your watched folder, virtualised so it stays fast on large libraries.
  • Search, sort by date / name / size (with direction toggle), and filter by game and by date range.
  • Card hover-preview scrubbing.
  • Right-click a card to Reveal in folder, Rename, or Delete.
  • Delete moves the original to the Recycle Bin with a one-click Undo to restore it.

Settings & quality-of-life

  • Configurable output location and a naming-scheme template (tokens: {name}, {stem}, {action}, {ext}, {n}), plus a theme accent.
  • Remembers your last export settings across sessions.
  • Keyboard shortcuts in the editor:
    • Enter export · Esc back · Space play/pause
    • I / O set in / out · A select whole clip · J / K / L shuttle rewind / pause / forward
    • (or , .) step one frame

Design & decisions

Develop

Prerequisites: Node, Rust (stable-x86_64-pc-windows-msvc) + VS C++ Build Tools, and LLVM (for libclang, used by bindgen to bind the in-process libav decode path — install with winget install LLVM.LLVM; the default C:\Program Files\LLVM is picked up automatically). FFmpeg is NOT required on PATH — the scripts below download the pinned builds automatically.

npm install
powershell -ExecutionPolicy Bypass -File scripts/fetch-ffmpeg.ps1   # pinned slim GPL ffmpeg.exe sidecar (~97 MB)
powershell -ExecutionPolicy Bypass -File scripts/fetch-libav.ps1    # pinned LGPL shared libav* for the filmstrip (~90 MB)
npm run tauri dev

On Linux, use the shell counterparts (plus the usual Tauri v2 system packages — webkit2gtk 4.1, gtk3, etc. — and clang/libclang for bindgen; export LIBCLANG_PATH="$(llvm-config --libdir)" before building):

npm install
bash scripts/fetch-ffmpeg.sh   # pinned static GPL ffmpeg sidecar (BtbN linux64)
bash scripts/fetch-libav.sh    # pinned LGPL shared libav* for the filmstrip
npm run tauri dev

Both FFmpeg payloads are gitignored because they are large, and both are SHA256-verified before staging:

  • Sidecar (src-tauri/binaries/klipt-ffmpeg-<triple>[.exe]) — a pinned GPL build (Gyan.dev essentials 8.1.1 on Windows, BtbN 8.1.2 static on Linux; h264_nvenc, libx264, aac). Does the Trim / Compress / GIF / audio work and the filmstrip GPU/CPU fallback.
  • libav (src-tauri/vendor/ffmpeg + src-tauri/libav) — a pinned BtbN LGPL shared build (ffmpeg 8.1.2, decode-only). vendor/ffmpeg is FFMPEG_DIR (headers + link libs) for the build; libav/*.dll / libav/*.so.* are the runtime libraries, copied next to the binaries by build.rs and bundled beside the installed app. Used only for the fast in-process filmstrip decode (open once, seek-decode the ~24 sampled keyframes).

No system FFmpeg install is needed.

Build

npm run tauri build

Releasing

npm run set-version -- 0.4.1          # bumps tauri.conf.json, package.json, Cargo.toml, Cargo.lock
git commit -am "chore: bump version to 0.4.1"
git push origin main
git tag -a v0.4.1 -m "Klipt 0.4.1" && git push origin v0.4.1

The tag push triggers .github/workflows/release.yml, which builds the Windows installer (.msi + NSIS .exe) on GitHub's runner and attaches it to a draft release. Review it on the Releases page and click Publish.

About

Windows game-clip editor: lossless FFmpeg trim, NVENC two-pass size-targeted compression. Rust + Tauri + Svelte

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages