Nice puzzle game!
I was wondering about the algorithm you used to generate levels. Did you use a shortest path finding algo the like Dijkstra's algorithm to find the path with desired length (with random neighbour selection)? And once the path is found, then I guess you can set the pipe style to fit with the path direction and randomize the pipe rotation?