Kyle Kingsbury, the son of a famous anchorman, has it all: good looks, money and decent grades from one of New York City's best prep schools. But when he is nominated for prince of the homecoming dance, things start to get weird. Kendra, a student in his class, stands up and denounces the whole idea of voting for the homecoming court based on beauty alone. Kyle defends the process, saying that the students could vote for anyone they wanted. Besides, as his father has pointed out — ugly, fat people like her don't have to stay that way. They can lose weight and get plastic surgery. Kendra calls him beastly and warns him that he'd better never lose his good looks because he's so ugly on the inside that he'd never be able to do what it takes to get them back.
Kendra's words haunt Kyle, and he decides to get even with her for spoiling his day by asking her to the dance. His idea is to meet her there and humiliate her by showing up with his real date, Sloane — one of the prettiest girls in school. His evening doesn't go as planned. His maid buys the wrong corsage for Sloane's outfit, and she refuses to wear it. Kyle winds up giving it to the plain girl checking tickets at the dance. When Kendra arrives, Kyle and Sloane try to humiliate her in front of the other students. But Kendra doesn't fall apart as Kyle had hoped. Instead she says she wished he hadn't made her decision so easy.
When he asks her what she means, she answers cryptically that he'll soon find out. He finds her waiting in his bedroom later that night. Thinking she might be there to hurt him, he tries to apologize for his behavior. She refuses to listen to his insincere pleas. Instead, she reveals that she is a witch, and he is cursed to be a beast until he can win the love of a girl and love her in return. He has to do this within two years or remain a beast forever. The proof of her love will be the kiss she gives him, even in his hideous new form. The curse takes away his beauty and leaves him as a hairy monster with fangs and claws.
Kyle's father spares no expense to try and find a cure for his son's transfiguration, but the experts can do nothing. Eventually, his father buys Kyle a townhome in Brooklyn. Kyle hides from view with only Magda — his maid — and Will — his blind tutor — for company. The witch also leaves him a magic mirror. Kyle can use it to observe other people. For a time, he amuses himself by looking through his yearbook and watching the other students' lives. One girl in particular, Linda, intrigues him. She is the girl Kyle gave the corsage to at the dance, and she lives in the slums with her drug addicted father.
Will convinces Kyle to help him plant a rose garden in the enclosed back yard. Soon Kyle develops a love for the beautiful but fragile flowers. But even the flowers can't stop depression from overtaking Kyle. He insists on changing his name to Adrian, meaning "dark one." Magda fears that he is giving up on life, but Adrian argues that he is just accepting his future. Even the witch, whom he can talk with in the mirror, seems surprised at his attitude. She's even more intrigued when he asks if she can help Will see again and help Magda travel to be with her family. Kendra reveals she can only help Adrian's friends if he can reverse the spell.
That night, Adrian catches a thief in his greenhouse. The man begs for mercy, but Adrian turns down his promises of money and drugs. Then the man offers to bring his 16-year-old daughter to the house and exchange her for his freedom.
Adrian discovers the man's daughter is Linda. Adrian threatens the man with arrest if he doesn't follow through on his promise by showing the thief the magic mirror, which reveals his address.
Will, Magda and Adrian prepare the third floor suite for Linda's arrival, painting it in bright colors and filling it with beautiful furniture and books. When Linda arrives, however, she's not interested in anything Adrian has to say. Convinced by Will that she is not going to be physically hurt, she still can't forgive Adrian for taking away the life she knew and keeping her a prisoner in his house. Adrian realizes that, unlike the friends he used to have, Linda can't be bought by material things, and it makes him desire her friendship even more.
Taking Will's advice, Adrian is patient with her, and the two slowly become friends. Before long, Adrian falls in love with her, and she, in turn, begins to look past his ugliness to see the kind boy underneath. He starts to think that perhaps he should let Linda go, even though it means staying a beast forever. Magda convinces him to take Linda up to his father's secluded mountain lodge. In that way, they would still be together, but Linda would be able to enjoy the outdoors. The two draw closer still, building snowmen and sledding together.
One night Adrian asks if Linda would be happy living with him forever. She tells him yes, if only she could be sure her father was well. Adrian brings out his magic mirror. They see her father, strung out and sick in an alley. Adrian convinces Linda to go home and take care of him. She promises to visit when Adrian returns to the city in the spring, but as the months go by, he loses hope.
On the second anniversary of the curse Adrian asks the mirror to let him see Linda. She cries out to Adrian for help as a stranger drags her into a boarded-up building. He tries to find her, but when he takes the subway, people scream and beat him. They think he is a wild animal. At last he escapes from the mob and finds Linda. A man with a gun threatens her. Adrian lunges for the man and is shot. Linda wants to get help, but Adrian doesn't want to die alone. She tells him that she tried to find his house, but her father wouldn't give her the address. She's been searching for him for weeks.
Midnight passes and although he believes the time to break the curse has past, he asks Linda to kiss him before he dies. When she does, it triggers his transformation back into a healed Kyle Kingsbury. Because the curse has been lifted, Will receives his sight. Kyle and Linda race to see if Magda's family has arrived only to discover that the maid was really Kendra, the witch. She wishes the teenagers good luck before turning into a crow and flying away with a flock of birds. Kyle and Linda return to the prep school for their senior year. Will is now their English teacher there.