Ig (Daniel Radcliffe) and Merrin (Juno Temple) have been in love since childhood.
Merrin is found dead on the night she rejected Ig's marriage proposal and broke up with him. The whole town suspects Ig is the killer.
Ig grows horns and people reveal their darkest thoughts to him everywhere he goes. He attempts to find Merrins real killer. It turns out to be Lee (Max Minghella), Ig's lawyer and best friend. He was secretly in love with Merrin and thought she broke up with Ig to be with him. When she said no, he raped her and beat her with a rock.
It turns out the reason she broke up with Ig is she was too in love with him to let him watch her die of cancer like her mother. Ig turns full devil to confront Lee, the two kill each other in a fight. Lee is ripped apart by snakes and Ig turns to ash, but reunites with Merrin in paradise.