Alright I finally understand what is happening in Spriter sfml version. So basically you have bone_refs and sprite objects. the bones control the images. in order to make it relative to each other you need to calculate all the bones first. When those are caculated you add those values to the sprite object. this will get a sprite position, scale, rotation basically and those values needs to be calculated again to get the right matrix.
--> So basically get the rotation in radians, then rotate and scale it (that is what sfml also does). Multiply the calculated sprite position with the rotation matrix to get the right position. Once that is done make a translation matrix and a scale matrix (scale matrix needed in my case because I am dealing with normalized positions, texcoords in OpenGL). Then multiply in this order to get the model matrix and send that to the gpu.
auto rot = glm::rotate(Matrix4(1.0f), angle, Vector3(0.0f, 0.0f, 1.0f));
rot = glm::scale(rot, Vector3(m_scale, 1.0f));
auto pos = rot * Vector4(-m_origin.x, -m_origin.y, 0.0f, 1.0f);
pos += Vector4(m_position, 0.0f, 1.0f);
auto trans = glm::translate(Matrix4(1.0f), { pos.x, pos.y, pos.z });
auto scale = glm::scale(Matrix4(1.0f), glm::vec3(dimensions, 1.0f));
model = trans * rot * scale;
result
https://gyazo.com/02580b6038c30ec31e47c7a0daa37cc2