Tear through a massive video library in minutes. No cloud. No account. Just you, your files, and a keyboard.
You've got a folder full of videos: dashcam clips, drone footage, years of random stuff you never sorted. Opening each one in VLC is not a workflow. Video Cull is.
Point it at a folder. It scans everything, generates thumbnail strips, and gives you a keyboard-driven interface to decide what stays and what goes. When thumbnails aren't enough, hit play and scrub through it right there. Mark, rate, favorite, move on, repeat.
When you're done, one command sends everything marked for deletion to the Recycle Bin when possible. Nothing is permanently gone unless you confirm it.
| Landing | Grid |
|---|---|
| Review Mode |
|---|
Grab the latest installer from the Releases page.
Installs for the current user, no admin rights needed. On first launch Windows may show a SmartScreen prompt since the app isn't code-signed yet; click "Run anyway" to proceed.
Every video gets a strip of thumbnails pulled from different points in the file. You know what you're looking at without opening anything.
- Adjustable card size (
Ctrl++/Ctrl+-) - Group by subfolder with per-folder counts and sizes
- Filter by status, rating, favorites, compatibility, file size, and duration
- Sort by name, size, duration, date, rating, resolution, or FPS
- Codec, resolution, FPS, favorite, rating, and compatibility badges
- Batch selection with Keep, Delete, Skip, Reset, Clear, and Regenerate Thumbnails actions
- Per-folder Review button to scope review mode to one folder
- Drag and drop folder opening, multi-directory sessions
- Recent directories with timestamps, stale-entry auto-cleanup
- Privacy screen toggle (
Shift+Esc)
Fullscreen, one at a time, keyboard first.
- Thumbnail strip with dynamic aspect ratio
- In-app player with scrubbing, playback speed, bookmarks, and global mute
- Ratings and favorites directly on the current video
- Review summary with pending counts and delete totals
- Next-undecided navigation for skipping videos you've already handled
- External player handoff for files the built-in player should not play
- Undo any decision before you commit the final delete
- Configurable frame count: 1, 2, 4, 6, or 9 thumbnails per video (default: 6)
- Intro skip: first frame offset by a configurable delay to avoid black fades (default: 3s)
- Parallel processing: RAM and CPU-aware auto-detect, or set manually up to 32 processes
- Cached: already-processed videos are skipped on rescan when their thumbnail set is complete
- Hardware acceleration: optional GPU decoding (beta)
Progress lives in SQLite databases under the configured cache location.
- Three location modes: Centralised (default), Per-drive, Distributed (
.videocullnext to your files) - Old flat-root DBs and legacy
.video-cull-cache.jsonfiles are migrated automatically on first scan - Status, ratings, favorites, bookmarks, metadata, and thumbnails survive rescans
- Cache and thumbnail files for deleted videos are cleaned up with the delete action
Generate an HTML report from Settings or the app menu, scoped to all videos or filtered results, grouped by folder with separate Keep/Delete/Pending/Skipped sections.
| Shortcut | Action |
|---|---|
Ctrl + O |
Open directory |
F5 |
Rescan |
Ctrl + Z |
Undo |
Ctrl + Backspace |
Send marked videos to Recycle Bin |
Ctrl + Shift + R |
Clear thumbnail cache |
Ctrl + E |
Reveal in Explorer |
Ctrl + + / Ctrl + - |
Zoom cards |
F11 |
Toggle fullscreen |
? |
Keyboard shortcuts reference |
Shift + Esc |
Toggle privacy screen |
| Shortcut | Action |
|---|---|
K |
Keep |
D |
Mark for deletion |
S |
Skip |
Z |
Undo |
Space |
Play / pause |
Left / Right |
Previous / next video, or scrub 5s while playing |
Tab |
Next undecided video |
Enter |
Play in-app |
Ctrl + Enter |
Open in external player |
B |
Drop bookmark |
[ / ] |
Playback speed down / up |
Esc |
Stop / exit review |
Review shortcuts are customizable in Settings.
| Setting | Options | Default |
|---|---|---|
| Cache location | Centralised / Per-drive / Distributed | Centralised |
| Thumbnails per video | 1, 2, 4, 6, 9 | 6 |
| Default card scale | 0.5x - 2.0x | 1.0x |
| Default sort | Name / Size / Date / Duration / Rating / Resolution / FPS | Name |
| Group by folder | On / Off | On |
| Parallel FFmpeg processes | Auto (RAM + CPU aware) / 1 / 2 / 3 / 4 / 6 / 8 / 12 / 16 / 24 / 32 | Auto |
| Limit each FFmpeg process to 1 CPU thread | On / Off | On |
| Intro skip delay | 0 - 60 seconds | 3s |
| Hardware acceleration | On / Off | On |
| Auto updates | On / Off | On |
| Feature toggles | Ratings, favorites, codec badges, compatibility checks, global mute, next-undecided | On |
| Keybindings | Any key or combination | K / D / S / Z / Space |
Video Cull generates thumbnails and metadata with FFmpeg, so it can inspect many common video formats.
The built-in player is intended for compatible web-playable media such as .mp4, .webm, .mov, .mkv, .m4v, and .ogv when the underlying codecs are supported. Legacy or unsupported formats such as .avi, .wmv, .asf, .flv, .ts, .mts, and .mpeg open in your default system player instead.
Requires Node.js 20+. FFmpeg and FFprobe are bundled.
git clone https://github.com/stippie-dot/VideoCull.git
cd VideoCull
npm install
npm run dev| Command | Description |
|---|---|
npm run dev |
Vite + Electron with hot reload |
npm run build |
Renderer-only production build |
npm run check:ipc |
Validate preload/type IPC contract coverage |
npm run cleanup:cache |
Clean old cache/thumb clutter from earlier builds |
npm run package |
Full build + Windows installer (NSIS) |
npm run rebuild |
Rebuild native modules against Electron |
Electron - React - Video.js - FFmpeg - better-sqlite3 - Zustand - TypeScript - Vite