Hey, really nice work! A little thing you could fix, when we use the full image as a spritesheet, we have to crop it (1024x512 -> 1000x495). I report it in case of you haven't noticed (and if someone had a problem with it).
It is not always necessary. With some tools, this 'cropping' operation can be done directly into the tool. 'Thinking about TexturePacker that creates a JSON file with all the atlas information, and can be directly loaded (in Phaser JS for example)
But if you use Godot Engine for example, and AnimatedSprite Node, AFAIK the imported frame sizes must be a submultiple of the image dimensions and you are right Deakcor that input images MUST be resized proprerly before that.
Anyway this is a relevant detail you've noticed ;)