"""Render servo STL alone from 4 side views + top to locate the cable connector.
Usage: render_servo.py <servo.stl> <out.png>
"""
import sys
import mujoco
import numpy as np
from PIL import Image

servo, out = sys.argv[1], sys.argv[2]
xml = f"""<mujoco>
  <compiler meshdir="." />
  <asset><mesh name="servo" file="{servo}" scale="0.001 0.001 0.001"/></asset>
  <worldbody>
    <light pos="0 0 0.5"/><light pos="0.3 0 0.1"/>
    <geom type="mesh" mesh="servo" rgba="0.55 0.55 0.6 1"/>
  </worldbody>
</mujoco>"""
m = mujoco.MjModel.from_xml_string(xml)
d = mujoco.MjData(m)
mujoco.mj_forward(m, d)
ims = []
# (azimuth, elevation, label)  — 4 sides + top-down
for az, el in [(0, 3), (90, 3), (180, 3), (270, 3), (90, -88)]:
    cam = mujoco.MjvCamera()
    cam.lookat[:] = (-0.013, -0.009, 0.0)
    cam.distance = 0.105
    cam.azimuth = az
    cam.elevation = el
    with mujoco.Renderer(m, 420, 420) as r:
        r.update_scene(d, cam)
        ims.append(r.render())
Image.fromarray(np.concatenate(ims, 1)).save(out)
print("rendered", out, "views az=0,90,180,270,top")
