Hey it's me again, and here's my take on the window randomization.
I just made a very simple geo node tree that write a random factor for each face of the mesh.
And then, in the shader, we can plug this factor into a Less Than node, so we basically get a threshold where 0 means all lights off, and 1, all lights on.
This threshold value would be a good candidate for more randomization (for example using a remaped Object Info random input) or could also be written to a vertex color, for more manual control per object.
We then just have to multiply the Less Than output with the strength of the emission, wich can be written in a vertex color, before applying the rest of the HSV randomization moves, as shown in the course.
To fine tune the randomization, we can expose the noise scale and add an exposed vector offset to the noise coordinates so we can really tune it as wanted per object. I also added an empty as coordinates offset, so each object will get the same noise origin, and thus a different output.
The only down side of this method I can think of is that each window have to be a single face, because the random factor is written per face.
Anyway, I never thought I could build such solutions all by myself. I'm very happy right now.
Happy blending guys.