Oh, nice, the code!

Seeing int used for serialization makes me antsy. Looks like you expect explicitly int32_t there.

Now that I can see how you're doing the different drawing, I wonder if the hour and minute stuff lines up with the circle even before it gets to the rendering step. Sounds like a fun question to ask via Jupyter…