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.mp4and 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.
- 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.
- Drag across the timeline to select the Region; in / out handles for fine-tuning;
slide the whole Region without resizing it;
Aresets 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).
- 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.
- 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:
Enterexport ·Escback ·Spaceplay/pauseI/Oset in / out ·Aselect whole clip ·J/K/Lshuttle rewind / pause / forward←→(or,.) step one frame
- Glossary:
CONTEXT.md - Architecture decisions:
docs/adr/
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 devOn 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 devBoth 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/ffmpegisFFMPEG_DIR(headers + link libs) for the build;libav/*.dll/libav/*.so.*are the runtime libraries, copied next to the binaries bybuild.rsand 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.
npm run tauri buildnpm 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.1The 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.