Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

clipsort

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 back

The safety bit

Moving 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\. -Undo replays 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.
  • -Copy leaves your originals completely untouched and builds a sorted copy elsewhere.

Quick start

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'

Commands

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

Recognised naming schemes

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.

Example

  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

Requirements

  • Windows 10 or 11
  • Windows PowerShell 5.1 (ships with Windows — nothing to install) or PowerShell 7+
  • No admin, no modules, no dependencies

FAQ

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.


See also

  • 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

License

MIT — see LICENSE.

About

Sort gameplay recordings into Game/YYYY-MM folders. Understands OBS, ShadowPlay, Xbox Game Bar, ReLive and Medal filenames. Dry run by default, fully undoable, and skips clips still being recorded.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages