Geralt and Ciri arrive at the home of an old friend, who is hiding a secret about the curse that has transformed him into a beast. Meanwhile Yennefer finds herself a captive of Fringilla, who has set out for the northern kingdom of Cintra.
In search of a safe hold, Geralt brings Ciri home to the Witcher city of Kaer Morhen. Yennefer falls into the hands of the Elves, who are looking for their own safe haven to rebuild amidst an ongoing conflict with the humans.
Yennefer is reunited with Tissaia and her sister mages, while Francesca Findabair and the Elves make a new alliance. Ciri begins her combat training, attempting to pass a brutal gauntlet in order to prove her mettle to the Witchers.
Kaer Morhen welcomes the mage Triss, who Geralt has invited to help guide Ciri. Yennefer and her new companion go underground to try and escape from Redania with help from an Elven smuggler, and the king's spymaster begins to plot the conquest of Cintra.
Geralt turns to Istredd to help investigate the monoliths and a new subspecies of monsters coming from them, while Ciri agrees to help Vesemir. When Jaskier is tortured for information about Geralt, Yennefer must find a way to rescue him without her magic.
Geralt and Ciri travel a dangerous path to visit the Temple of Melitele, where they enjoy an unexpected reunion. Elsewhere a mage attacks Vesemir inside Kaer Morhen, and the Elves face an uncertain future.
Yennefer attempts to bring Ciri to her original home in Cintra, though she harbors a secret motive. Fringilla tries to hold Nilfgaard's alliance with the Elves together, and Geralt turns to the bard Jaskier for help.
Ciri is possessed by a powerful demon with a vendetta against the Witchers, turning her new friends against her. While Geralt tries to protect his young protégé, Ciri herself awakens in a dream of her old life at home.