UE4 - Niagara - Generate initial particle position from texture mask

I am starting on figuring this out and was interested in guidance if anyone has any. I want to read from a texture and get positions based on the values of the red channel.

My thought was on emitter spawn caching a list of valid pixels or world positions based on those pixels and reusing those per particle but I don’t really know how Niagara handles that best. Would i need a custom HLSL node to loop through all pixels? My assumption is a module in emitter spawn would be run one time so a loop may not be horrible?

Is there perhaps something i am missing that is more built in?