Generate a GIF of a chess game from a PGN with optional:
Analysis bar
Analysis chart
Numerical Annotation Glyphs (NAGs)
Move and check arrows
PGN module to add engine evaluations and calculate ACPL
Details on breaking changes in the 1.0.0 release
This release brings new features such as headers with player names, taken pieces and clocks, and Numeric Annotation Glyphs (NAGs).
The module was also restructured for easier usage and extensibility. Code using version 0.2.0 and earlier will not work with version 1.0.0 - minor changes will be required to get back up and running again.
Please see the examples and documentation for details.
import chess
import chess.engine
import chess.pgn
import io
from gifpgn import CreateGifFromPGN, PieceTheme, BoardThemes
from gifpgn.utils import PGN
pgn_string = ...
game = chess.pgn.read_game(io.StringIO(pgn_string))
if not PGN(game).has_analysis():
with chess.engine.SimpleEngine.popen_uci("/path/to/stockfish") as engine:
game = PGN(game).add_analysis(engine, chess.engine.Limit(depth=18))
g = CreateGifFromPGN(game)
g.piece_theme = PieceTheme.ALPHA
g.square_colors = BoardThemes.BLUE
g.enable_arrows()
g.add_headers(height=20)
g.add_analysis_bar()
g.add_analysis_graph()
g.enable_nags()
gif = g.generate("test_gif.gif")
import chess.pgn
import io
from from gifpgn import CreateGifFromPGN, PieceTheme, BoardThemes
pgn_string = ...
game = chess.pgn.read_game(io.StringIO(pgn_string))
g = CreateGifFromPGN(game)
g.board_size = 240
g.piece_theme = PieceTheme.CASES
g.square_colors = BoardThemes.GREEN
g.generate("test_small_gif.gif")
Alpha Blue |
![]() |
Cases Green |
![]() |
Maya Brown |
![]() |
Regular Purple |
![]() |
Install with pip:
pip install gifpgn