Duffy has signed a 2½-year contract. The fee has not been disclosed but is thought to be over £200,000, and could be a new club record.
The former Rangers trainee joins from Falkirk, whom he scored 36 goals for in a year and a half.
The 21-year-old will train for the first time tomorrow and could make his debut against Crystal Palace on Saturday.
This doesn't end Peter Taylor's business in the transfer market though, as he is looking to sign another forward to partner Duffy. He is also moving for a left-back after learning that Andy Dawson will be out for 10 weeks. City are reported to have had a £50,000 offer for Tranmere's Wales international defender Gareth Roberts turned down.