That looks good! I also came across that pattern of manually handling the generator iterator https://observablehq.com/@observablehq/introduction-to-asynchronous-iteration
But if you want to avoid the Map and search for existing sprites, why not yield a group of Textures each iteration? Then you avoid yielding the existing textures all the time.
I’ve updated my fork with that idea
ps. this topic explains why Observable cell are not iterables Iterable protocol and observable