Powerhouse teen Jena Irene, hard rocker Caleb Johnson and indie artist Alex Preston each sang three songs, the first one selected by Randy Jackson, the second one by the judges and the final one picked by their hometowns.
It was not an easy night for Johnson, who was forced to sing with a small vocal cord hemorrhage that a doctor compared to "a runner running with a badly bruised ankle."
And it affected his first two performances, "Never Tear Us Apart" and "Demons."
Though the judges admired Johnson's fortitude and emotion, they all noted his strained voice, with Harry Connick Jr. saying, "Our only real concern is that you don't hurt yourself tonight."
"I'm so feeling for you," said Keith Urban. "I had vocal surgery."
But Johnson found his big voice and nearly brought down the house with his hometown of Asheville, North Carolina's selection of "Dazed and Confused" that had Jennifer Lopez rocking and calling it "a true Idol moment."
"If there ever was a moment of miraculous healing, that was it," said Urban. "I want to throw stuff."
Preston started with the pop song "Pompeii," playing guitar and drums, which had Lopez calling him "a different Alex."
Although Connick felt it was "piecemeal," Urban saw "great stuff" in the performance.
Preston turned Rihanna's "Stay" into a soulful powerhouse that gave Lopez "goosies" and had her and Urban on their feet.
"It was beautiful, and it was all yours," said Lopez, while Urban stated, "You just owned that song."
For his final song, Preston's hometown of Mont Vernon, New Hampshire, picked "Story of My Life," which Connick called "another classic Alex performance" but Urban said was a "comedown" from "Stay."
Irene's "high-risk, high-reward" "Titanium" earned mixed praise from the judges, with Lopez calling it "shaky" and "stiff," while Urban said she inspired him, calling her a "stealth singer who has fun."
Irene redeemed herself with "Heart Attack" by Demi Lovato, who will perform on the finale, with Lopez saying, "That's my Jena," and Connick stating, "You always find a way to be original."
The fans in Farmington Hills, Michigan, chose "Creep" for their hometown girl's final song, and Irene ended the show at the piano with what Lopez called a "brilliant" performance.
"I feel like you're just going to be so hard to beat," said Lopez, while Urban said she was "exactly what American Idol is all about."
So who will sing in Season 13's finale? Tell us your picks in the comments below.
Results air Thursday (9 p.m. ET) on Fox.