Kyle Kingsbury, rich, handsome and popular, plays a mean practical joke on an outcast girl in his class, who is really a witch named Kendra in disguise. The witch then curses him for his cruelty. He starts to turn into a beast; however, because he performed a small act of kindness shortly before his transformation when he gave an unwanted rose corsage to a girl working a ticket booth, she gives him two years to break the spell, or remain a beast forever.The only way he can turn back to normal is if he truly loves a girl and gets her to love him in return, proving the love with a kiss. Kendra later offers Kyle further aid by giving him a magic mirror that shows him whomever he wishes to see. He is locked in a mansion-like apartment by his shallow, image-obsessed father. His only company is his housekeeper, Magda, and, at his request, a blind tutor named Will. After a year of being in this state, and trying and failing to find love, Kyle changes his name to Adrian to reflect his feelings of being a completely different person from the conceited, materialistic boy he used to be. When a robber stumbles into his garden Adrian offers him a deal; he won't report the robber to the police if the robber brings Adrian his daughter, Lindy. She is Adrian's last chance to break the spell before his two years are up.
Adrian realizes that Lindy is the same girl to whom he gave the rose corsage. He fixes up a room for her, leaving roses and books for her to amuse herself with. When she arrives, she at first wants nothing to do with him as she feels he kidnapped her. As time passes, she slowly warms up to him and he finds himself falling in love with her. The two begin to have tutoring sessions together and during winter they go to a lodge. Shortly before the last year is up, Lindy wishes to see her father once more. Adrian lets her see him with the magic mirror and she finds that he has become sick through drug use. Adrian quickly lets her go to him and offers for her to return to the apartment in the spring if she desires, this time as a friend and not a prisoner. On the last day of the second year, Adrian looks for Lindy in the mirror and sees her being dragged into a building by a man. He rushes to her rescue and is shot in the process. As he lays dying, he asks Linda for a kiss. She kisses him, breaking the spell and turns him back to normal. He explains everything to Lindy and the two go back and live in the apartment together. Adrian had also made a deal with Kendra, and because of which, Will regains his sight and Magda is allowed to return to her family. Kendra reveals that she is Magda, punished to remain a servant forever because of her careless spellwork but she can now return home as well.