I abandoned the collections to m3u approach a few months after I posted. Over time, it was too much effort to keep everything in sync. I don't have that code because it morphed into the system I setup afterward. I decided I wanted each user to have their own server and I wanted all channels grouped in a specific order. Where I have Pluto (and the endless channels), I wanted the user machine to only have the channels from each source that anyone in the house would watch. (turns out that's about 160 channels across all sources). Each user can administer and remove or favorites their own channels in the web admin. Each user creates their own collections if they want.
I have a "primary" channels server setup and all it does is act a the TVE tuner for my setup. It's barely configured except for the TVE source. All of the channels servers are in docker containers. Pluto, FrndlyTV and Fubo are as well.
The common element across all user channels dvrs are the m3u files that define all of the sources. They only contain possible channels and the channels are numbered with a particular schema.
The software is now a set of python functions that take a lot of the work out of the process. It's a commitment. Quick and dirty version can be done in an hour if you understand python and some basics. sqlite3 database is used and it is how I manage data post collecting the data to build out m3u files. A high quality set of m3u builds is more in the 6 hours. The number of "duplicates"/duplicates is often not obvious due to naming inconsistencies between sources. Once the data is normalize, it's all very easy. A little different the the original but you're welcome to it.