this is because, instead of images/media being decoded and encoded per operation, only on the last `photu write` call, until then it is only creating a JSON plan, which is also checked for bad args. no need to touch a pixel until you know all the operations that will be taking place!
author here, i built this so resize/crop/write could just be normal shell pipes, running as one libvips pass instead of bouncing images between processes.