Kohli recorded his seventh double century before he declared India's first innings on 601 for five in Pune.
His 225-run fifth-wicket stand with Ravindra Jadeja, who made 91, shattered South Africa's bowlers after the hosts elected to bat first.
The tourists were precariously placed at 36 for three at stumps with paceman Umesh Yadav claiming the two openers.
Yadav trapped Aiden Markram lbw without scoring and then bowled Dean Elgar for six.
Mohammed Shami sent back Temba Bavuma caught behind for eight as South Africa slipped for 33 for three.
Theunis de Bruyn on 22 and fast bowler Anrich Nortje, on two, were batting at the close with South Africa needing another 366 runs to avoid a follow-on.
"We were thinking of 500-plus, not 600 but the manner in which Virat and Jadeja batted made it look very easy. It was not a 600 wicket," said vice-captain Ajinkya Rahane.
"I think the fast bowlers still have good assistance if you can bowl in the right areas. But the ball is turning too," he added.
Kohli took the day's honours with a marathon innings that extended India's domination after they resumed on 273 for three.
Playing his 50th Test as captain, Kohli surpassed Bradman's total and then swept spinner Senuran Muthusamy for two to reach 200 and get the stadium crowd to its feet.
The benchmark puts him in the top 50 Test run-scorers led by Indian icon Sachin Tendulkar with 15,921 runs in 200 matches.
Muthuswamy had Kohli caught at slip on 208 with his left-arm spin but TV replays showed he had overstepped the bowling line and the delivery was a no-ball.
Kohli and Jadeja attacked the opposition bowlers with a string of fours and sixes.
Kohli smashed Muthusamy for a boundary to go past his previous-best Test score of 243. He ended the day unconquered with 33 fours and two sixes.
Jadeja hit eight fours and two sixes in his 104-ball blitz.
The skipper started the day on 63, surviving hostile fast bowling from Kagiso Rabada and Vernon Philander.
He brought up his hundred before lunch with a delightful straight drive for a boundary off Philander.
He put on 178 with overnight partner Rahane, who made 58 before becoming spinner Keshav Maharaj's 100th Test victim and the only Indian wicket to fall on the day.
"We enjoy each others company," Rahane, who was involved in his 10th century stand with Kohli, said. "It was important to communicate well and that's what we did."
Maharaj went off the field with an injured shoulder and the team management were waiting to see had bad it was.
India had already been boosted by opener Mayank Agarwal's second successive hundred on Thursday.
A series victory for India, who won the first of the three Tests on Sunday, will see them beat the record of 10 straight home series wins they share with Australia.