Matvei Gridin had a goal and an assist, and Matt Coronato had two assists for the Flames (4-6-0), who have won four of five after opening the season with five straight losses. Devin Cooley made 28 saves to win his third straight start.
Andrew Copp scored for the Red Wings (4-4-3), whose six-game point streak (3-0-3) ended. John Gibson made 21 saves.
Farabee scored to put the Flames up 1-0 at 17:50 of the first period when he took a cross-ice pass from Adam Klapka and snapped a shot past Gibson’s glove.
Copp pulled the Red Wings into a 1-1 tie at 2:22 of the second period when he outbattled Flames defenseman Zayne Parekh to poke a loose puck at the top of the crease past Cooley.
Parekh scored a power-play goal to give the Flames a 2-1 lead at 8:38 when his shot from the point deflected off Gibson’s left pad and into the net.
The Flames extended their lead to 3-1 at 17:04 when Ryan Strome battled his way into the slot to swat a pass from Morgan Frost past Gibson.
Gridin one-timed a feed from Farabee past Gibson at 18:30 for Calgary’s second power-play goal of the period to make it 4-1.
The Flames went 2-for-2 on the power play and are 6-for-12 in their past four games.
The Red Wings, who went 0-for-2 on the power play, had won eight straight games against the Flames since Feb. 9, 2023, including four in a row at the Saddledome.