Believe it or not, with something so common, it’s actually really difficult to sort big PGN databases. ChessBase does it, but to get your PGN in there you have to convert it to CBH or 2CBH, and that takes maybe half an hour per million games. Maybe not quite that much. And then you sort, and then export to PGN. If you were doing so with a 10M game database, it would take at least a couple hours.

Scid vs PC will do it, but their limit is 5 GB for a PGN, so that cuts out half of the big projects.

Scid will do it, but only if you right click over the games list and select to Copy — Export all the games to PGN. If you go in through the regular menu system, it won’t honor the way you’ve sorted the games. It will use the original sort.

So, believe it or not, this is the only thing you can do.

That being said, if you’re ever in a total pinch, and need to sort any PGN up to maybe 5 GB without the use of anything other than a text editor, there is a way.

Notepad++ will allow you to open files up to its memory limit, and for most purposes that maxes out around 6 or 7 GB (on my system).

All you have to do is to replace the newlines inside the individual games with double tildes (~~). Those never appear in any PGN, ever. So it works.

Before you begin the long process, though, you have to make sure that your movelists are each one line. This is easy to do with pgn-extract and the -w9999 argument, or in Scid vs. PC via the regular export to PGN feature. Or you can get a script that does it. But the following process only works if every movelist is just one line long.

The main thing is to not have double tildes between games. So it has to be a bit selective. First you have to deal with the blank line between the movelist and the headers. You do so with the regular expression pair:

\]$\r\n\r\n^1.
\]~~~~1.

The first line is the search text, the second is the replace text. This says look for a right square bracket, then look to see if it’s at the end of the line, then drop two newlines, and look for a one and a dot.

The replace text says, if you find that, turn it into a right square bracket, then two tildes, then a one and a dot.

Now you can do the bigger operation. You can connect everything. You do this with:

\]$\r\n^\[
\]~~\[

As you might guess, the search text is looking for a right square bracket at the end of a line, then one newline, then a left square bracket. Keep in mind that the movelist is already taken care of. So all we’re doing is connecting the rest of the lines in every game.

Now every game is one line, with a blank line in-between. Just run a third reg exp to remove these:

\r\n\r\n
\r\n

Simple as pie. This says look for two consecutive newlines and replace them with just one. (The r stands for “carriage return” and the n stands for “line feed”. This is a newline in Windows. In Mac it’s just \r and in Linux it’s just \n. Of course that holds for all these regular expressions.)

Now if you aren’t sorting by Event (which is probably the first header) then you need to make the one you want to sort by the first header in the games. So you have to move it to the front. Let’s say you want to sort by Date.

^(.*?)\[Date "(.*?)"\]~~
~~\[Date "\2"\]~~\1

This one says to look at the beginning of every line, then remember what it saw up until it found what it was looking for. Then, when finding it, to remember what was in the quotation marks. Then to move that to the front, and put everything else behind it.

Then, with whatever text editor you’re able to do this in, you have to sort the lines up or down as you like, bringing everything into order. Now that the games are sorted, they’re all one line, and the wrong header is at the front. First, to put the header back, just repeat the previous process but instead of the text Date you would use the text Event. At that point you just replace all double tildes with newlines. Like so:

~~
\r\n

So it’s complicated, and yet it requires nothing other than a text editor.

Chess analysis GUI for UCI engines, with extra features for Leela (Lc0) in particular.

  • Translations for various languages. Mostly machine translations.
  • Suggestions and fixes welcome… as a pull request is strongly preferred.
  • Also ask for other languages if you like.
  • See the file src/modules/translations.js

https://github.com/rooklift/nibbler/releases/download/v2.5.0/nibbler-2.5.0-linux.zip
https://github.com/rooklift/nibbler/releases/download/v2.5.0/nibbler-2.5.0-windows.zip
https://github.com/rooklift/nibbler/archive/refs/tags/v2.5.0.zip

This is a Windows executable compiled from a Python script, which gathers information on a particular GitHub repository, listing in separate files all the commits, the official releases, and the workflow artifacts, with direct URLs to the binaries.

Since one repository owner can have more than one relevant repository, it’s important to specify both. So at runtime you need at least two arguments: the name of the repo owner, and the name of the repo. You can also specify asc or desc to indicate whether the list should start at the beginning or go backwards from the end. The default is ascending.

Usage

GitHubRepoInfoFetcher.exe [-h] [-v] [-ver] -ro REPO_OWNER -re REPO {asc,desc}

Fetch GitHub repository commit, release, and workflow artifact information.

Options

-h, –help • show this help message and exit
-v, –verbose • Enable verbose output.
-ver, –version • Display script version.
-ro REPO_OWNER, –repo-owner REPO_OWNER • Owner of the GitHub repository.
-re REPO, –repo REPO • Name of the GitHub repository.

Example in PowerShell

.\GitHubRepoInfoFetcher.exe -v -ro official-stockfish -re Stockfish asc

https://www.mediafire.com/file_premium/z429baynz6aocta/GitHubRepoInfoFetcher.zip/file

This is a Python file which has been converted to EXE — along with the original Python script, if you’re not on Windows — which takes as its only argument a path to a PGN. If not specified, it will prompt you for it during runtime. This program provides information on a PGN — namely the number of players, the number of games, the number of events, and the highest and lowest Elo. It will also prompt you to ask whether or not you want a text file list of players, and if you want a text file list of sites/events.

https://www.mediafire.com/file/g9snnwefprj8btp/PGN-Info.zip/file

Author(s): Colin Jenkins (GBR)
Release Date: 2025-01-06
Language(s): JavaScript
Repo Owner: op12no2
Repo URL: https://github.com/op12no2/lozza

Lozza was primarily created for use in browsers, but can also be used with traditional chess UIs via Node.js and on pretty-much any platform (see below). Note however that Lozza is relatively slow compared to compiled engines of a similar design, which also makes her relatively weak.


This is a Lozza 4 re-release.

The original Lozza 4 release caused problems for some users. For those that ran it successfully, results (e.g. CCRL Blitz) can stand because no peformative changes have been made. However, please replace with this re-release anyway; thanks.

Please use a recent version of Node if possible (they are always improving performance). The latest stable version is 22.

https://nodejs.org

Changes

Train generation 3 net.
Use ADJACENT, not DIST.
Simplify QS and don’t go into QS if in check.
Scale eval by 1.9. Scale UCI cp by 1.9.
Add perspective (currently unused).
Use the Mersene Twister from cwtch for randoms.
Move futility alpha test to move loop.
Use hash move in QS.
Optmise deferral of accumulator update a bit more.
Fix some web stuff. Add improving indicator (failed to get it to gain so far).
Prune QS with quickSee(). Only count nodes that iterate moves.
Put eval in TT before search.
Optimise castling a bit.
Simplify search recursion.
Allow successive NMP and beta pruning.
Bigger net 768x128x1 srelu.
Make sure all UE updates (e.g. castling) are a single accumulator loops.
Defer UE to after legal check (doh!) and don’t check pre-determined legal moves.
Minor tweaks for datagen + net command.

https://github.com/op12no2/lozza/releases/download/4/lozza4.zip
https://github.com/op12no2/lozza/archive/refs/tags/4.zip

Release Date: 2025-01-01
Repo Owner: rubenkku
Repo URL: https://github.com/rubenkku/PGN-Book-Creator

Changes in this release:

  • Fixed a bug where some moves were not being saved correctly in the BIN book.
  • Fixed an issue with pawn promotions: now, when promoting a pawn, a menu opens allowing you to choose the promotion piece.
  • Improved the speed of pasting a PGN game.
  • Fixed an issue when importing all moves “to current position” in the BIN editor.
  • Resolved a bug where multiple “add move” windows could be opened simultaneously, now only one window can open at a time.
  • Enhanced the UCI protocol by using “startpos” instead of “fen” for sending the position.

https://github.com/rubenkku/PGN-Book-Creator/releases/download/3.1/PGN.Book.Creator.3.1.exe
https://github.com/rubenkku/PGN-Book-Creator/archive/refs/tags/3.1.zip

https://www.mediafire.com/file/g5wy1ycjcdz9i6u/LichessDownloader.zip/file

This script will prompt you for beginning and end year/month, then download everything you ask for, extract each one, and filter each one in pgn-extract according to certain criteria that can be changed.

This is what the file pgn-extract-command.txt looks like:

pgn-extract.exe {input} -t tags.txt -R roster.txt --xroster --minmoves 10 --maxmoves 150 --fixresulttags --fixtagstrings --nosetuptags -e --checkmate --plycount --evaluation -D -w9999 -o {output}

Anything from -t to -w can be changed. For instance, if you want to change the minimum and maximum moves — or to take one or both parameters out, here’s the place to do it. If you want to take out the requirement that a game end in checkmate, just take out the –checkmate option. The –evaluation option is what creates those evaluations for each move. The -w9999 is what makes each movelist one line. -D checks for doubles, -e specifies that you want ECO information and opening names. (Which is what eco.pgn is for.) If you want to change the contents of tags.txt, you’d either be changing the minimum Elo for either white or black, or the minimum time control — or taking any of those requirements out. The roster.txt file is a list of tag names, one per line, that define the order those tags go in. Specifying –xroster means that it will remove any tags *not* in the roster, as well as put them in the same order.

Because this script needs pgn-extract.exe to run, it’s necessary to keep the binary and all of its dependent files in the same directory as the script.

https://www.mediafire.com/file/hey6lzegqzzc76z/FilterPGNByElo.zip/file

This is a C program written by ChatGPT o1, at my direction. To be clear, I know nothing about coding, especially in a low-level language. The form that the command takes is:

FilterPGNByElo.exe <input_path> <output_path> <minimum_elo>

For example:

FilterPGNByElo.exe lichess_db_standard_rated_2016-11.pgn lichess-2016-11.pgn 2300

It should be run in the same directory as the executable, at least for the command to take the form above. If you wanted, you could have each path be a full path. If there are any spaces in the path, you should surround it with double quotes.

It should be noted that because this is written in C and optimized for speed, it runs bizarrely fast. It finishes a gigabyte in about two seconds. It should also be noted that for the same reasons, it’s just going to do it, and not check to make sure there’s enough room. So if you are filtering a very large PGN, make sure you have enough space and resources.

https://www.mediafire.com/file/1cxivp3pir0kpcf/PGN2GIF.zip/file

If you simply double-click on the file, it should prompt you for a few things, like the PGN or the path to a directory, for games to convert, the time it takes per move, the color of the board, and… I guess that’s all. Point is, all you need to bring is the path to your PGN(s). It should do the rest. Here is a raw PGN that I’m using as a source in this case:

[Event "Casual game"]
[Site "London ENG"]
[Date "1851.06.21"]
[EventDate "?"]
[Round "?"]
[Result "1-0"]
[White "Adolf Anderssen"]
[Black "Lionel Adalbert Bagration Felix Kieseritzky"]
[ECO "C33"]
[WhiteElo "?"]
[BlackElo "?"]
[Source "La Régence, v3 n7, July 1851, pp221-222"]
[SourceNote "ends 19.Ke2"]
[Source2 "The Chess Player, vol.i no.1, 1851.07.19, p.2"]
[PlyCount "45"]

1.e4 e5 2.f4 exf4 3.Bc4 Qh4+ 4.Kf1 b5 5.Bxb5 Nf6 6.Nf3 Qh6
7.d3 Nh5 8.Nh4 Qg5 9.Nf5 c6 10.g4 Nf6 11.Rg1 cxb5 12.h4 Qg6
13.h5 Qg5 14.Qf3 Ng8 15.Bxf4 Qf6 16.Nc3 Bc5 17.Nd5 Qxb2 18.Bd6
Bxg1 {It is from this move that Black's defeat stems. Wilhelm
Steinitz suggested in 1879 that a better move would be
18... Qxa1+; likely moves to follow are 19. Ke2 Qb2 20. Kd2
Bxg1.} 19. e5 Qxa1+ 20. Ke2 Na6 21.Nxg7+ Kd8 22.Qf6+ Nxf6
23.Be7# 1-0

And here is a GIF produced with this program in green at 1s per move:

Here is that game in blue at 2s per move:

Author(s): Paolo Iommarini (ITA)
Release Date: 2024-12-29
Language(s): C#
Repo Owner: sakya
Repo URL: https://github.com/sakya/corechess

CoreChess is an open source chess GUI for chess engines.

  • Human vs Engine mode
  • Human vs Human mode.
  • Engine vs Engine mode.

Supported engines

Upgraded avalonia to v11.2.3

https://github.com/sakya/corechess/releases/download/0.18.4.0/CoreChess_setup_0.18.4.0.exe
https://github.com/sakya/corechess/archive/refs/tags/0.18.4.0.zip

Created from the combined CCRL that I have on this site. That means the engine ratings are from that list — though it was designed to adhere closely to the actual CCRL. One feature of that list is that all the extraneous information is removed from the engine names. Meaning if an engine is listed as, say, “Stockfish 15 avx2 4CPU” or something like that, it was first changed to “Stockfish 15” before the rating list was made. As a consequence, all the engine names here are also just the plain engine name and the version number/name. So you’d have to make those changes first to whatever PGN you were adding ratings to.

Just load this into Scid via Options — Resources…, or into Scid vs. PC via Options — Load Spellcheck File. It then works like a normal SSP ratings file.

https://www.mediafire.com/file_premium/8e42fx5tqor44c9/engines.ssp/file