I imagine that the "grain dur list" work like that ¿sequencily? first grain 50ms, second grain 100ms... and at the end start again
The grain duration list is being drawn from randomly at the moment, but you could go sequentially and loop by using a counter instead of [random], followed by a [%] object that takes the list length at its right inlet. If you need your duration list to be longer, you might want to switch to using a table to store the values.
Another thing you might want to think about is enveloping and overlapping the grains if you want to avoid clicks.
Good luck!