Massive opinionated opinion ahead: I like libraries that don't invent new types but just build around established ones. I think it's great that it uses numpy arrays and doesn't venture to (essentially) wrap an array of some kind and reinvent the wheel.
Something I would miss as a user is interoperability. There should be ways to read from/export to numpy arrays, pytables, PIL, OpenCV, ImageMagick, basically all the mentioned and widespread libraries so far.<p>(Edit: There is in fact: <a href="https://github.prideout.net/snowy/reference.html#load" rel="nofollow">https://github.prideout.net/snowy/reference.html#load</a> , haven't noticed, very good!)
Under Alpha Composition<p><pre><code> icon = snowy.load('snowflake.png')
icon = snow.resize(snowflake, height=100)
sunset[:100,200:300] = snowy.compose(sunset[:100,200:300], icon)
snowy.show(sunset)
</code></pre>
Pretty sure you meant to say on line 2 `icon = snowy.resize(icon, height=100)`
Well done! Some commenters have compared this to ImageMagick. I would equate this to comparing love2d [1] to SDL. If you want a user-friendly API for quick image manipulation, use Snowy. If Snowy doesn't give you the level of control you need, use something like ImageMagick or vips.<p>I could see myself using this in the future.<p>[1] <a href="https://love2d.org/" rel="nofollow">https://love2d.org/</a>
Would you mind defining a primary use case for this as opposed to PIL, ImageMagick or OpenCV? For the purposes of saving a description with the website.