Feature request: Start offset, Playhead position, Start Frame, End Frame
your work is awesome!
Using some hex comparers and editors I discovered where exactly in cdta composition start offset, playhead current frame, composition start frame and composition end frame are stored.

Skipping some bytes after cdta header, there is something stored there with lot's of empty space until Width and Height (pos: 2D0, at [0A, 0B, 0C, 0D]), probably reserved for large values, since all this stored as Frame * 2. I have no idea why it is stored as a multiply of 2, but that's how it is.
So, if it possible, could you please implement this fields for compositions? This would really help me with reading AEP files completely separately from AE.
Also, modifying corresponding values results in a modification of composition, which shown here: YouTube
I'm glad this utility has been useful for you! It's interesting how these values are multiplied by 2. Good discovery. I've found that some other values (namely framerate) are stored as a quotient of two numbers: dividend and divisor to yield the final value. Maybe this is similar? (framerate calculation: https://github.com/boltframe/aftereffects-aep-parser/blob/c31f4f220444b19bd51d7b3a3246a82141150f9e/item.go#L157)
I suspect that these new values you've discovered can be easily inserted into the following structure at the proper offsets: https://github.com/boltframe/aftereffects-aep-parser/blob/c31f4f220444b19bd51d7b3a3246a82141150f9e/item.go#L136 The Unknown## fields are just padding at the moment, so these new fields would have to be inserted somewhere in between.
I'm a bit occupied with work at the moment, but I would like to get to these edits at some point soon. If you're feeling brave, and want to try and make these additions yourself, I'd be more than happy to review your Pull Request!
Also, regarding writing back to an AEP file, I'll have to do more research, but I believe this is against Adobe's terms of service.
@rioam2 I modified Item and CDTA struct a bit, and even though, it turned to be a bit ugly:

It still works like magic:

But I think there could be a problem with parsing, if composition has large frame count. I used uint16 instead of uint32, because it will grab additional zero bytes at the end (fields OffsetX_1). Is there any way to overcome this issue?
Also, for the time being, I disabled layers' parsing, so #2 won't happens