Rohit Sharma completed his first Test double hundred and Ajinkya Rahane added a century of his own as India moved into complete control of the third Test in Ranchi.
Starting day two on 224-3, India piled on the runs to declare on 497-9 and then reduced South Africa to 9-2 before bad light prematurely halted Sunday's action.
Rohit rapidly progressed his overnight total of 117 and reached a double century for the first time in the longest form of the game, having previously done so three times in ODIs.
His total had reached 212 from 255 deliveries when he finally fell to Kagiso Rabada, while Rahane moved from 83 to complete his 11th Test hundred with an innings of 115.
Bad light meant only five overs of South Africa's reply were possible, but that was enough for India to put the tourists in complete disarray after openers Dean Elgar (0) and Quinton de Kock (4) were removed.
Captain Faf du Plessis (1 not out) and Zubayr Hamza (0no) will return to the crease on Monday with their side right up against it in their efforts to avoid a 3-0 series whitewash.
The fourth-wicket partnership between Rohit and Rahane had reached 267 before Rahane finally fell shortly before lunch, caught behind after some sharp turn earned George Linde his first Test wicket, the debutant then going on to claim figures of 4-133.
Rohit smashed 28 fours along with six maximums, one of which got him to his double ton after he went into lunch tantalisingly close on 199. His brilliant effort came to an end when he was caught at fine leg when trying to take on Rabada (3-85).
Ravindra Jadeja scored 51 and Umesh Yadav whacked five sixes in an explosive 31 from just 10 balls as useful partnerships right down the India order ensured the hosts were just shy of 500 before Virat Kohli opted to declare.
Mohammed Shami dismissed Elgar for a duck with only the second ball of the innings in a dreadful start for the Proteas.
De Kock followed in the next over when he was unable to cope with a short ball from Yadav, wicketkeeper Wriddhiman Saha claiming his second catch as India piled on the pressure.