What free programs do exist to comment chess games? For Windows, Linux, and Mac.

I know that ChessBase and ChessOK Aquarium can do it. However, it is my understanding that they are not free.


3 Answers 3


Check Lucas Chess and Creatica.

Both are free and run locally on your machine.


I have a program called Chess Artist. It is written in python, open source and there is windows executable in case you don't like the python script.

You can access the help by sending the command help from command prompt.

PS F:\Github\chess-artist> ./chess_artist.exe --help

In that example, the chess_artist.exe is located in F:\Github\chess-artist, it is up to you where you put the exe file after you download it.


Read pgn and analyze games in it or analyze epd file or test engines with epd test suites

optional arguments:
  -h, --help            show this help message and exit
  -i INFILE, --infile INFILE
                        input pgn or EPD filename
  -o OUTFILE, --outfile OUTFILE
                        output filename
  -e ENGINEFILE, --enginefile ENGINEFILE
                        input engine filename
  --enginename ENGINENAME
                        input uci engine id name, if not specified engine id name will be used.
                        input engine options, like threads, hash and others example: --engineoptions "Hash value 128,
                        Threads value 1"
  --bookfile BOOKFILE   input book filename
  --eval {static,search}
                        eval can be static or search. static uses static evaluation of Stockfish
  --movetime MOVETIME   input analysis time per position in ms, (default=1000)
  --depth DEPTH         input analysis depth, (default=0)
  --movestart MOVESTART
                        input move number to start the analysis, this is used when analyzing games, (default=8)
  --moveend MOVEEND     input move number to end the analysis, this is used when analyzing games, (default=1000)
  --puzzle-score-margin PUZZLE_SCORE_MARGIN
                        if deep score less shallow score is this margin or more then save the position as puzzle,
                        (default=15 centipawn). If this is low more positions will be saved.
  --log                 Save log to chess_artist_log.txt
  --job {analyze,test,createpuzzle}
                        type of jobs to execute, can be analyze or test or createpuzzle. To create puzzle: --infile
                        games.pgn --job createpuzzle, To analyze pgn: --infile games.pgn --job analyze, To annotate
                        epd: --infile positions.epd --job analyze, To test engine with epd: --infile test.epd --job
  --wordycomment        There are more words in the move comments such as better is, planning, excellent is, Cool is
                        and others.
  --color COLOR         enter color of player to analyze, (default=None) can be white or black
  --player PLAYER       enter player name to analyze, (default=None). Player opponent moves are not analyzed. If you
                        use --player do not use --player-and-opp.
  --player-and-opp PLAYER_AND_OPP
                        enter player name to analyze. Player opponent moves are also analyzed, (default=None). If you
                        use --player-and-opp do not use --player.
  --loss                This is used to analyze games where a player lost his/her game. Example to analyze lost games
                        by Mangnus, use: chess_artist.exe --player "Carlsen, Magnus" --loss ... other options. To
                        analyze all games with non-draw results: chess_artist.exe --loss ... other options
  --draw                This is used to analyze games where a player has drawn his/her game. Example to analyze drawn
                        games by Mangnus, use: chess_artist.exe --player "Carlsen, Magnus" --draw ... other options.
                        To analyze all games with draw results: chess_artist.exe --draw ... other options
  --min-score-stop-analysis MIN_SCORE_STOP_ANALYSIS
                        enter a value in pawn unit to stop the engine analysis, (default=-3.0). If the score of the
                        game move is -3.0 or less chess_artist would no longer analyze the position to look for
                        alternative move.
  --max-score-stop-analysis MAX_SCORE_STOP_ANALYSIS
                        enter a value in pawn unit to stop the engine analysis, (default=3.0). If the score of the
                        game move is 3 or more chess_artist would no longer analyze the position to look for
                        alternative move.
  --game960             A flag to enable chess960 of a variant game which will be used for python-chess.


Let's analyze all the games of caruana where he lost from the current olympiad held in India.

  1. Download the latest olympiad games from weekinchess on the link below, be careful if you press it, it will download the file.


  1. Create a command line from the command prompt.

In --movetime 3000, the 3000 is in milliseconds in other words, the 3000 is just 3 seconds.

PS F:\Github\chess-artist> ./chess_artist.exe -i "olym22.pgn" -o "analysis_olym22.pgn" -e "stockfish_15_modern.exe" -n "Hash value 128" --eval search --movetime 3000 --movestart 12 --moveend 80 --job analyze --wordycomment --player "Caruana, Fabiano" --loss --min-score-stop-analysis -5 --max-score-stop-analysis 5

Example output

[Event "44th Olympiad 2022"]
[Site "Chennai IND"]
[Date "2022.08.06"]
[Round "8.2"]
[White "Caruana, Fabiano"]
[Black "Gukesh, D"]
[Result "0-1"]
[BlackElo "2684"]
[BlackFideId "46616543"]
[BlackTeam "India 2"]
[BlackTitle "GM"]
[Board "1"]
[ECO "B31"]
[EventDate "2022.07.29"]
[Opening "Sicilian"]
[Variation "Nimzovich-Rossolimo attack (with ...g6, without ...d6)"]
[WhiteElo "2783"]
[WhiteFideId "2020009"]
[WhiteTeam "United States of America"]
[WhiteTitle "GM"]
[Annotator "engine: Stockfish 15, program: Chess Artist v3.2.0"]

{Hash 128mb, Threads 1, analysis 3.0s per position, move score is in pawn unit,
positive is good for white and negative is good for black}
1. e4 c5 2. Nf3 Nc6 
3. Bb5 g6 4. O-O Bg7 
5. Bxc6 bxc6 6. Re1 Qc7 
7. h3 d6 8. e5 dxe5 
9. d3 c4 10. Nc3 cxd3 
11. cxd3 Nh6 12. Nxe5 {+0.54} Nf5 
13. Bf4 {+0.65} Qb7 14. Na4 {+0.67} (14. d4 O-O 15. g4 g5 16. gxf5 {+0.77}) f6 
15. Nf3 $5 {+1.01} O-O 16. d4 $2 {+0.70} ({Better is} 16. Nc5 Qxb2 17. Qa4 Qb5 18. Qa3 {+1.36}) g5 
17. Bh2 $2 {+0.39} ({Superior is} 17. Nc5 {+1.06}) h5 18. Re4 $2 {+0.38} ({Preferable is} 18. Nc5 {+0.94}) Qd7 
19. Qc2 {+0.49} ({More useful is} 19. Qd3 Rf7 20. Rd1 Bf8 21. Qe2 {+0.75}) Rf7 20. Rae1 {+0.51} (20. Rd1 Bf8 21. Qe2 Rg7 22. Nd2 {+0.53}) Bf8 
21. Qe2 $1 {+0.39} (21. Rd1 Rg7 22. Nd2 g4 23. hxg4 {+0.37}) Qd5 22. Nc3 {+0.48, with a better king safety} Qd7 
23. Qc4 $2 {+0.00} ({Superior is} 23. Rd1 a5 24. Na4 Qa7 25. Nc5 {+0.54}) Qb7 24. b4 $6 {-0.16} ({Worthier is} 24. Na4 Qb5 25. Qc2 Ng7 26. g4 {+0.47}) e6 
25. Rb1 $5 {+0.12} Qd7 26. Rbe1 {-0.15} ({More useful is} 26. a4 {+0.32}) Qb7 
27. Rb1 {-0.18} Qd7 28. a3 $2 {-0.76} ({Brilliant is} 28. a4 a5 29. bxa5 Ba6 30. Qxe6 {+0.51}) a5 
29. Na4 $2 {-0.84} ({More valuable is} 29. bxa5 Rxa5 30. a4 Ba6 31. Qxe6 {-0.64}) Qd8 30. bxa5 $5 {-0.75} Rxa5 
31. Nc5 $4 {-2.15} ({Brilliant is} 31. Qc2 {-0.47}) Qd5 32. Qe2 {-2.11} Rxa3 
33. Rd1 {-3.08} ({More valuable is} 33. Qe1 {-2.42}) Rfa7 34. g4 {-5.15} hxg4 
35. hxg4 {-4.58} Nh6 36. Bg3 {-5.13} e5 
37. Nxe5 {-5.77} fxe5 38. Rxe5 {-5.81} Bxg4 
39. Qd2 {-6.72} Qf3 40. Rxg5+ {-8.37} Rg7 
41. Re1 {-10.42} Bh3 42. Bd6 {-14.62} Bxd6 
43. Rxg7+ {-17.75} Kxg7 44. Qg5+ {-319.77} Kh7 
45. Ne4 {-319.89} Qxe4 {WhiteBlunder=1, WhiteBad=6} 0-1

It can comment on king safety, piece mobility and passed pawn evaluation with the use of eval command from stockfish, depending on the position. It also has threat comments, like intending to play ... and followed by ...

At the end it will comment on the number of blunder (??) and mistake (?) each player has made.

Example screenshot from HCE gui after loading the analyzed games.

enter image description here

The comments preferable is, more valuable is are due to the flag --wordycomment in the command line.

You may save the command line to a batch file to easily rerun the program.


./chess_artist.exe -i "olym22.pgn" -o "analysis_olym22.pgn" -e "stockfish_15_modern.exe" -n "Hash value 128" --eval search --movetime 3000 --movestart 12 --moveend 80 --job analyze --wordycomment --player "Caruana, Fabiano" --loss --min-score-stop-analysis -5 --max-score-stop-analysis 5

If you have other features to include in this command line tool, you may post it in github, I might implement it.


  1. Do not use --depth n option, just use --movetime m.

  2. If you re-run the analysis command and maintain the same output file specified from -o option, games that are already analyzed will not be analyzed again.

  3. This program does not support analyzing games in parallel. But if you want to do so, just split your input games. For example you have 4-cores and want to use 2 cores, split your input pgn file into 2 and run each pgn file in chess_artist. Be sure they have different output filenames specified from the -o option.

  4. To download all files in the chess-artist repo in github, open your powershell on windows 10 and send the command below.

git clone https://github.com/fsmosca/chess-artist.git


PS F:\Tmp> git clone https://github.com/fsmosca/chess-artist.git
Cloning into 'chess-artist'...
remote: Enumerating objects: 1135, done.
remote: Counting objects: 100% (153/153), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 1135 (delta 84), reused 134 (delta 67), pack-reused 982
Receiving objects: 100% (1135/1135), 45.46 MiB | 2.42 MiB/s, done.
Resolving deltas: 100% (594/594), done.
PS F:\Tmp> cd chess-artist
PS F:\Tmp\chess-artist> ls

    Directory: F:\Tmp\chess-artist

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022-08-08     12:01                Book
d-----        2022-08-08     12:01                Engine
d-----        2022-08-08     12:01                EPD
d-----        2022-08-08     12:01                PGN
-a----        2022-08-08     12:01            435 .gitignore
-a----        2022-08-08     12:01            441 analyze_atomic_game.bat
-a----        2022-08-08     12:01            339 analyze_chess_game.bat
-a----        2022-08-08     12:01         125661 chess_artist.py
-a----        2022-08-08     12:01           1495 create_puzzle.bat
-a----        2022-08-08     12:01          35815 LICENSE
-a----        2022-08-08     12:01           8686 README.md
-a----        2022-08-08     12:01             35 requirements.txt

There is no exe file here, get it at release page.

  • has anyone built a GUI for this Seems pretty promising Dec 10, 2022 at 12:21
  • can word comments be translated can databases be accessed and extract relevant data from can egtb be accessed without engine analysis Dec 10, 2022 at 12:24
  • 1
    Translation is possible. Database support is not implemented yet, started but is not finished yet. I am working on SQlite. EGTB access is possible.
    – ferdy
    Dec 11, 2022 at 2:43
  • 1
    I plan to add a streamlit web app interface.
    – ferdy
    Dec 11, 2022 at 6:50
  • 1
    Progress will be seen in github repo.
    – ferdy
    Dec 11, 2022 at 7:42

I recommend Scid. Even some forks of scid such as ChessDB are popular. If your intention is to comment games, work with chess databases, and so on (rather than engine evaluation, play aginst engines, etc.), you can still use scid or use one of its alternatives such as chessDB, chessX or scidb .

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.