NOTE: This spoiler was submitted by Jeremy
Ignatius Perrish (Daniel Radcliffe) was always seen by the people in town as an outsider. None of that mattered to him, because he was in love with Merrin Williams (Juno Temple). They are laying beneath a tree in the woods kissing. She asks him if he's horny. He says he's getting there. Ig promises to love Merrin for the rest of his life. She just wants him to love her for the rest of hers.
Ig wakes up lying on the floor clutching a bottle of vodka. He groggily goes into the living room and puts on a David Bowie record to play "Heroes". He sees Merrin dancing for him. Outside his window is a news van and many angry protesters, holding signs that condemn Ig to hell. Merrin has been murdered, and everyone thinks he did it.
Ig calls his lawyer friend Lee Torneau (Max Minghella) for help. He then goes to his family's home for sanctuary from the press. Ig's brother Terry (Joe Anderson) wants to help Ig clear his name. Their father Derrick (James Remar) has sought a lawyer for Ig, but all the other lawyers want Ig to take a plea, while Lee knows he is innocent. Lee later comes over to join his friends. He tells Ig that any evidence found on Merrin's remains were burned in a forensics lab, thereby leaving Ig with nothing to prove his innocence. Ig vows to find the real killer and finish him off.
Ig goes to a bar where the bartender refuses to serve him because the other patrons are afraid of him. Glenna (Kelli Garner), an old friend of Ig's, takes pity on him and pours him a drink. She offers to go have a drink with him, but he wants to be alone.
A large gathering of townspeople come together for a vigil around the tree where Merrin's body was found. Her father Dale (David Morse) tearfully talks about his daughter and also accuses Ig of killing her. Ig watches from a treehouse above them. After everybody leaves, Ig stomps on a statue of the Virgin Mary and then pees all over the candles. Glenna catches him and tells him to calm down. Ig blames God for not caring about Merrin when she needed help.
The next morning, Ig awakens after sleeping with Glenna to two horns protruding from his head. He gets dressed and asks Glenna if she notices the horns. She does, but doesn't react beyond a laugh. She sees a box of doughnuts on the coffee table and asks Ig if she can eat all of them. He says yes, and she stuffs one in her mouth. It makes her stomach feel bad, and she washes it down with Diet Coke. Yet she still wants to eat the whole box because, as she casually tells Ig, she wants to get fat because everybody thinks she is trash and that nobody would sleep with her unless they were drunk like Ig was.
Ig goes to the doctor to get the horns checked out. A little girl is screaming in the waiting room while her mother sits and does nothing. The mother tells Ig that she wants to kick her daughter's ass, divorce her husband, and go have sex with her black golf instructor because she prefers "black cock". A disturbed Ig goes to the receptionist and gives back the form he had to fill out. The receptionist tells Ig that she just wants to tell the mother to shut her kid up. She asks Ig if he thinks it's okay and he says yes. The receptionist gets up and yells at the mother to take her "screeching pig" out. The mother angrily yells at the receptionist and goes up to her. Ig grabs her arm and gets a peek inside her mind. He sees the woman having sex with her golf instructor and dealing with the screaming daughter at home. The little girl also tells Ig that she hates her mother and wants to burn her in her bed with matches.
Ig sees the nurse. She is checking his blood pressure but is fixated on his horns. She tells him that she knows her boyfriend is seeing another girl. The doctor comes in and sees the horns but doesn't bother dealing with them and instead tells Ig that he wants to have sex with his daughter's friend, and then offers to snort oxycontin with Ig. Ig just tells him to saw the horns off. The doctor puts Ig under anesthesia and he passes out.
We see a flashback to when Ig was a child and he first saw Merrin in church. She shined the light reflecting off her cross necklace in Ig's direction. Derrick tells him it's morse code. After the service, he finds Merrin's necklace, broken.
Later on, Ig would hang out with Terry, Lee, Glenna, and another kid named Eric by the docks. They lit off cherry bombs and talked about Merrin, to whom Ig is attracted, which upset Glenna because none of the other boys seemed to really notice her. After lighting off a number of cherry bombs, Eric tells Ig he'll give him his last one if he rides down a log rail in a cart naked. Ig takes the challenge and rides off into the lake, hitting his head on a log. The logs come together, trapping him underneath. Lee jumps in and rescues Ig. Eric is forced to hand Ig the cherry bomb.
Lee fixes the cross necklace and gives it to Ig in exchange for the cherry bomb. Ig gives it back to Merrin and starts hanging out with her. Ig learns that Merrin's mother passed away from cancer. They go back to his house and listen to David Bowie. Terry runs in and tells Ig that the cherry bomb blew up in Lee's hand. They run to the hospital where the boy has lost two fingers. He does feel happy seeing Ig and Merrin together. Ig later confesses to Merrin that it was Lee who fixed the necklace, and he blames himself for what happened to him. Merrin assures him that she left the necklace for Ig to find. They have their first kiss.
Ig wakes up to see that the doctor left the saw in the horn to have sex with the nurse right next to him. Disgusted, Ig leaves, only to see in the mirror that the horns have grown.
Ig finds a priest and asks for his help. The priest coldly suggests that he can get a rope and hang Ig, or Ig can do the deed himself. The only person that doesn't notice the horns is Lee. This makes Ig think the horns don't work on good people.
Ig goes to his parents' home and hears the truth from both of them - his mother thinks she would be happier if he wasn't her son, and Derrick always thought Ig was a difficult child, and that he hates Ig for supposedly killing Merrin, because she was the only thing that he loved about Ig. He also reveals that he had someone burn the evidence in the forensics lab. Ig calls Lee about this, who says it's probably a blessing in disguise.
Ig goes to the bar but is harassed by a gaggle of reporters trying to get a hot scoop from him. Ig tells them to fight each other, and whoever wins gets to interview him. The reporters then get into an intense brawl while Ig walks into the bar. The bartender threatens to hit Ig, but Ig tells him he doesn't want to do that. The bartender admits he wants to burn the bar down and collect the insurance money. Ig demands anybody in the bar to tell him if they know anything about Merrin's murder. The other patrons just admit more sinful things, and one man takes his pants off and whips his penis out. Ig leaves as the bartender lights the place up, and he walks past the reporters, still fighting.
As Ig sits in his car to have a smoke, he notices a small box in the glove compartment. In another flashback, we see that Ig was telling Lee and Terry that he was planning to propose to Merrin that night at the diner, and that the guys would join them to celebrate. Ig later goes to the diner to meet with Merrin, who looks melancholic. She tells Ig that she is moving to Los Angeles, which he thinks is a good chance for a fresh start. However, Merrin says they should break up and see other people to know if he really wants to spend the rest of his life with her. He thinks she is already seeing someone else. She starts to leave, and Ig gets up and loudly argues with her until the manager tells him to leave. Ig leaves without a fight, just as Terry starts to come in. The next morning, Eric (Michael Adamthwaite), now a cop, finds Ig sleeping in his car and asks him when he last saw Merrin. The fact that Ig asked if something happened to her only fuels Eric's suspicions.
Ig returns to the diner to talk to the waitress, Veronica (Heather Graham), who has been feeding the police false information about Ig on the night Merrin was killed. Veronica told the cops that Ig dragged Merrin into his car and took her into the woods to kill her before having anal sex with her. All of this so that Veronica can be featured on the news as a key witness.
Ig goes to the jazz club where Terry plays with his band. Glenna approaches him and admits that she was always in love with Ig, which he did already know. After the performance, Terry meets Ig outside and admits that he was with Merrin after Ig left the diner. Ig attacks his brother and, as he touches him, sees into Terry's mind to that night. Terry drove Merrin away from the diner, but she ran away into the woods in the pouring rain. The next morning, Terry woke up in his car with a bloody rock in his hand. He ran into the woods to find Merrin dead. He wrapped the rock in his shirt and threw it in the lake to avoid being implicated. After this, Eric and his partner come in and cuff Ig. The two cops then make crude jokes about beating Ig while they jerk off.
The next day, Ig finds Lee in town wearing Merrin's cross necklace. Lee denies it at first but then says she gave it to him. Ig breaks down, thinking Lee was the one that Merrin was leaving him for.
Ig then goes to Dale's home to try and see if he knew if Merrin was seeing anybody or mentioned leaving him, only to have Dale point a shotgun at him, ordering him to get off his property.
Ig goes down an alley to forcibly remove the horns, to no avail. A group of snakes slither on over to him, but they do not harm him. They slither onto him, and he is okay with it.
Ig walks past Eric and his partner in their car. They threaten to arrest him, but Ig says they would be happier sucking each other off. The two admit they're gay and that they love each other, and they proceed to make out and have sex. Ig then gathers the snakes and finds Veronica in her car. The snakes make their way into the car and bite Veronica all over her face and body, scarring her and ensuring that she can't enjoy a life of fame.
Ig, wearing the snake around his neck, goes to find Terry doing a lot of drugs. Ig forces Terry to do an enormous amount to trip out and eventually torture him with the same feelings that Merrin felt the night she died. Terry experiences a horrible trip and collapses.
Down by the docks the next day, Ig meets up with Lee. Ig removes the cross necklace from him, and Lee can finally see Ig's horns. And then he admits that it was HE who really killed Merrin. Ig chokes Lee and sees his memories. Previously, Merrin suspected that Ig was going to propose, and she asked Lee if it's true. He said maybe. Merrin recently learned some things about herself and didn't want Ig to be involved with it, so she confided this to Lee. On the night that Ig left the diner, Lee followed Terry and Merrin until they stopped by the woods. Lee found Merrin in there and tried to kiss her, but she pulled back. He thought she left Ig for him, but Merrin says she loves Ig more than anything in the world. Angry, Lee struck Merrin and raped her before cracking her head with a rock. He then planted the bloody rock in Terry's hand and fled the scene. Ig grabs a pitchfork and tells Lee to go turn himself in, but Lee grabs a chain and whips Ig in the back repeatedly. He pushes him in his car and douses it with kerosene, then sets it on fire. Unable to get out, Ig drives the car into the lake. Lee later tells the police that Ig confessed to killing Merrin before killing himself.
Ig emerges from the lake, terribly burnt but alive. He returns to Dale's home. Dale now realizes that Ig really didn't kill Merrin. He invites Ig inside and gives him a key that Merrin wanted him to have. Ig hands Dale her necklace, but Dale lets him keep it. Ig puts it around his neck, and then his burns heal and the horns go away.
Ig brings the key to the treehouse and opens a box with a note inside from Merrin. It's written in morse code, and it says that Merrin knew she was dying of cancer like her mother, and after seeing how it affected her father, she didn't want Ig to know about it since he would have only wanted to marry her more, and she didn't want him to live with her suffering. She does vow to find him again someday in the same treehouse. Ig cries.
Ig visits Terry in the hospital, recovering from his drug episode. Ig is sorry for what he did, and he tells Terry that Lee is the real killer and that he's going after him.
Ig goes to Lee's house and asks him to join him for a walk. They go into the woods to the spot where Lee killed Merrin. Eric appears with a shotgun aimed at Lee, followed closely by Terry, who told Eric about Lee. Lee appears to go quietly, but he trips Eric and grabs the shotgun and shoots Terry in the leg. Ig grabs the pitchfork and tries to pull the shotgun out of Lee's hand, only to aim it directly in Eric's face and blow his head off. Ig and Lee struggle, when Ig then takes off the cross necklace. He suddenly grows wings that lift him in the air, and then they catch fire. His whole body is consumed by fire until he morphs into a demonic creature with bigger horns. Lee shoots at Ig, who bleeds lava, but he charges at Lee and impales him with his horn and throws him against a tree. The snakes then come by and wrap themselves around Lee, and one snake slithers through the impalement wound and into Lee's mouth, gagging him to death. Ig, now having avenged Merrin, falls and begins turning to stone. Terry rushes to his brother's side.
The film ends with the opening scene of Ig and Merrin under the tree, suggesting they have reunited in death.