Project Kasparov started out as a long-running desire to work on a chess related application.

I found the Algorithms, Typography and Literature surrounding Chess fascinating. I am not very good at playing chess though. I was stuck with the failure of deploying canvasbot, My Genetic Algorithm Art bot at this time.

I decided to create a PGN to MP4 converter. PGN or Portable Game Notation is the standard file format for recording chess matches/games. A sample looks like so:

[Event "F/S Return Match"] [Site "Belgrade, Serbia JUG"] [Date "1992.11.04"] [Round "29"] [White "Fischer, Robert J."] [Black "Spassky, Boris V."] [Result "1/2-1/2"]

  1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 {This opening is called the Ruy Lopez.}
  2. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7
  3. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4 22. Bxc4 Nb6
  4. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5
  5. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2

I needed a way to parse these PGN files to something I can work with. Fortunately, I found this excellent PGN parser by Renato de Pontes Pereira. Also, I didn’t need to use Images/Vectors for rendering Chess board and pieces. Instead, I used CHEQ_TT.TTF, the Awesome Chess font. I could create cool Images like this!


The PGN Parser output a series of roughly something like this


This is called a FEN or Forsyth–Edwards Notation. The purpose of FEN is to provide all the necessary information to restart a game from a particular position.

A FEN is easily parsable. I Just needed to convert FEN to whatever glyph CHEQ_TT.TTF used. By trial and error, I created a mapping. An image of the current board position was rendered using PIL

Using some FFMPEG magic, I was able to create an MP4 file.

I still found these videos illegible, as it’s hard to keep track of the last move. So, As seen in the final version of @chssbot each move is actually 3 frames (look carefully).

  1. Highlight the “from” cell and “to” cell of the next move in color.
  2. The actual move + Highlights.
  3. No Highlights.

these three frames were played back at 3 X framerate. I found that the legibility of moves increased so much.

The highlighted color is randomly generated to avoid boredom 😊@chssbot has been publishing a new game every 4h from Nov 2016.

EDIT: As of 2018 June 27, @chssbot has 76 followers, and enjoys regular retweets and discussions :)