Turn 400 files called 2026-09-08 14-22-11.mkv into something you can actually browse.
Recorders name clips by timestamp. After a few months you have a folder of identical-looking files and no idea which one is the good round. clipsort reads the naming schemes used by OBS, NVIDIA ShadowPlay, Xbox Game Bar, AMD ReLive and Medal, works out the game and capture time, and files everything into:
Apex Legends\2026-09\Apex Legends - 2026-09-08 14-22-11.mp4
Valorant\2026-09\Valorant - 2026-09-07 09-15-30.mkv
Unsorted\2026-09\2026-09-08 14-22-11.mkv
Dry run by default. Nothing moves until you say -Apply. Everything is undoable.
.\clipsort.ps1 -Path 'D:\Recordings' # show the plan
.\clipsort.ps1 -Path 'D:\Recordings' -Apply # do it
.\clipsort.ps1 -Undo # put it all backMoving hundreds of irreplaceable clips is exactly the kind of thing you want to be able to take back.
- Dry run is the default. You have to explicitly pass
-Apply. - Every applied run writes a journal to
%LOCALAPPDATA%\clipsort\.-Undoreplays it in reverse and removes the folders it created. - It never overwrites. A name collision becomes
... (2).mp4. - It skips files that are still being written. If OBS is mid-recording, that file is locked and gets left exactly where it is — verified, not assumed.
- Files it cannot identify are never guessed at. They go to
Unsorted\with their capture date, keeping the original timestamp. -Copyleaves your originals completely untouched and builds a sorted copy elsewhere.
git clone https://github.com/appsmypass/clipsort
cd clipsort
.\clipsort.ps1 -Path 'D:\Recordings'With no -Path it uses your Videos folder. If Windows blocks the script:
powershell -ExecutionPolicy Bypass -File .\clipsort.ps1 -Path 'D:\Recordings'| Option | What it does |
|---|---|
-Path <dir> |
Folder of recordings. Defaults to your Videos folder |
-Dest <dir> |
Where to build the sorted tree. Defaults to -Path |
-Apply |
Actually move files. Without it, you only get the plan |
-Undo |
Reverse the most recent applied run |
-Copy |
Copy instead of move, leaving originals alone |
-Recurse |
Also scan subfolders |
-Flat |
Skip the YYYY-MM level — file straight into <Game>\ |
-MinSizeMB <n> |
Ignore files smaller than this. Default 1 |
-Unsorted <name> |
Folder name for unidentifiable clips. Default Unsorted |
-Extensions <list> |
File types to consider. Default mp4, mkv, mov, avi, flv, ts, m4v, webm |
-Journal <path> |
Undo a specific journal instead of the latest |
| Recorder | Example filename | Detected game |
|---|---|---|
| NVIDIA ShadowPlay | Apex Legends 2026.09.08 - 14.22.11.03.mp4 |
Apex Legends |
| OBS (default) | 2026-09-08 14-22-11.mkv |
unsorted, date kept |
| OBS (title prefix) | Valorant 2026-09-07 09-15-30.mkv |
Valorant |
| Xbox Game Bar | Halo Infinite 9_8_2026 2_22_11 PM.mp4 |
Halo Infinite |
| Medal / AMD ReLive | Rocket League - 2026 08 30 - 21 05 44.mp4 |
Rocket League |
| Generic timestamp | clip_20260715_101500.mp4 |
unsorted, date kept |
| Anything else | holiday footage.mp4 |
unsorted, falls back to file date |
Junk window titles that recorders emit — Desktop, Fullscreen, Untitled, Clip — are treated as "no game" rather than becoming folders. Trademark symbols and - DX12 / - Vulkan suffixes are stripped from game names.
clipsort v1.0.0
--------------------------------------------------
source D:\Recordings
mode DRY RUN - nothing will be touched
Plan (9 file(s))
--------------------------------------------------
Apex Legends (1 file(s), 1.5 MB)
Apex Legends 2026.09.08 - 14.22.11.03.mp4 -> Apex Legends\2026-09\Apex Legends - 2026-09-08 14-22-11.mp4
Halo Infinite (1 file(s), 1.5 MB)
Halo Infinite 9_8_2026 2_22_11 PM.mp4 -> Halo Infinite\2026-09\Halo Infinite - 2026-09-08 14-22-11.mp4
Unsorted (5 file(s), 7.5 MB)
2026-09-08 14-22-11.mkv -> Unsorted\2026-09\2026-09-08 14-22-11.mkv
holiday footage.mp4 -> Unsorted\2026-09\2026-09-08 16-57-45.mp4
Dry run
--------------------------------------------------
9 file(s) would be moved.
run again with -Apply to do it.
And when a recording is still in progress:
-- 2026-09-08 18-40-02.mkv - in use (still recording?), left alone
Done
--------------------------------------------------
moved 8
in use 1
- Windows 10 or 11
- Windows PowerShell 5.1 (ships with Windows — nothing to install) or PowerShell 7+
- No admin, no modules, no dependencies
Will it mangle my files?
Run it without -Apply first — that is the default and it prints every single move. If you dislike the result after applying, -Undo restores the exact original filenames.
I moved them to another drive with -Copy. Can I undo?
No, and that is deliberate — a copy leaves your originals untouched, so there is nothing to undo. Journals are only written for moves.
It put everything in Unsorted.
Your recorder is writing timestamp-only filenames. In OBS, set Settings → Advanced → Recording → Filename Formatting to something like %CCYY-%MM-%DD %hh-%mm-%ss prefixed with the scene name, or just enjoy the tidy date folders.
Can I run it on a schedule?
Yes — clipsort.ps1 -Path 'D:\Recordings' -Apply is safe to run repeatedly. Already-sorted files are detected and skipped.
- obs-4k60-recorder — record gameplay at native resolution and 60fps with hardware encoding
- gamemode — free your PC for gaming with one command, and put it all back with another
- vidkit — trim, compress and convert the clips once they're sorted
- diskscout — find what's actually eating your disk
MIT — see LICENSE.