I programmed a replayer of chess moves from Portable Game Notation, such as Milman v Fang, 2005, with FlaskChess for the server and python-chess for the logic (thanks to Python library to process Portable Game Notation in chess). I use it to replay games and to visualize openings. Although it's working, alternative game lines (or tree branches) are awkward and I wonder if I am reinventing the wheel.
I'm looking for an existing chess replayer that can take strings in Portable Game Notation such as
1. e4 c6 for the Caro-Kann, display them visually, and nicely represent alternative branches.
Does it already exist?