Debris was piled high at the site of Friday night's crash near Balasore, in the eastern state of Odisha, with compartments smashed and the blood-stained wreckage of some carriages flung far from the tracks.
"I saw bloodied scenes, mangled bodies and one man with a severed arm being desperately helped by his injured son," researcher Anubhav Das, 27, told AFP after surviving the crash.
India's Railway Minister said Sunday the cause and people responsible for the crash had been identified, pointing to an electronic signal system without giving further details.
"We have identified the cause of the accident and the people responsible for it," India's Railway Minister Ashwini Vaishnaw told news agency ANI, but said it was "not appropriate" to give details before a final investigation report.
Earlier reports cited railway officials as saying that a signalling error had sent the Coromandal Express running south from Kolkata to Chennai onto a side track.
It slammed into a freight train and the wreckage derailed an express running north from India's tech hub Bengaluru to Kolkata that was also passing the site.
Prime Minister Narendra Modi visited the crash site and injured passengers being treated in hospital and said "no one responsible" would be spared.
"I pray that we get out of this sad moment as soon as possible," he told state broadcaster Doordarshan.
A high school close to the crash site had been turned into a makeshift morgue, but officials said many of the bodies were so disfigured that many of the distraught families could only spot their loved ones by pieces of jewellery.
"There were bodies with only a torso, an entirely burnt face, disfigured skull and no other visible identity markers left," said Ranajit Nayak, the police officer in charge of releasing the bodies.
In sweltering heat, many of the bodies were being transferred to bigger centres and officials suggested some would only be identified by DNA testing.
'Death and grief'
Das said he was in the last carriage of one of the trains when he heard "screeching, horrifying sounds coming from a distance".
His coach stayed upright and he jumped out unhurt after it ground to a halt.
"I lost count of the bodies before leaving the site. Now I feel almost guilty," he said.
Bystanders rushed to help the victims even before emergency services arrived.
"There were severed arms, legs, and even some partially severed heads – while the unluckier ones died in pain, too much pain," said witness Hiranmay Rath.
Over the next few hours the 20-year-old saw "more death and grief" than he could have "ever imagined", he told AFP.
Authorities said every hospital between the crash site and the state capital Bhubaneswar, around 200 kilometres (125 miles) away, was receiving victims. Around 200 ambulances – and even buses – were deployed to transport them.
The rescue effort was declared over on Saturday evening after emergency personnel had combed the mangled wreckage for survivors and laid scores of bodies out under white sheets beside the tracks.
"All the dead bodies and injured passengers have been removed from the accident site," said an official from the Balasore emergency control room.
The death toll from the crash was revised down from 288 after it was found that some bodies had been counted twice, said Pradeep Jena, chief secretary of the eastern state of Odisha.
The tally was unlikely to rise, he told reporters. "Now the rescue operation is complete."
India has one of the world's largest rail networks and has seen several disasters over the years, the worst of them in 1981 when a train derailed while crossing a bridge in Bihar and plunged into the river below, killing between 800 and 1,000 people.
Friday's crash ranks as its third-worst, and the deadliest since 1995, when two express trains collided in Firozabad, near Agra, killing more than 300 people.
The disaster comes despite new investments and upgrades in technology that have significantly improved railway safety in recent years.
The railways ministry has announced an investigation.
Condolences have poured in from around the world.
Pope Francis said he was "deeply saddened" by the "immense loss of life" and offered prayers for the "many injured", while UN Secretary-General Antonio Guterres extended "his deep condolences to the families of the victims".
French President Emmanuel Macron sent his condolences to India's president and prime minister, saying in a tweet that his "thoughts are with the families of the victims".
My deepest condolences to President Murmu, Prime Minister Modi and the people of India after the tragic train accident in Odisha. France stands in solidarity with you. My thoughts are with the families of the victims.
— Emmanuel Macron (@EmmanuelMacron) June 3, 2023
US Secretary of State Antony Blinken offered "our heartfelt condolences to the families and loved ones of the victims" and praised the "heroic efforts of first responders and medical personnel".