This release moves mjlab onto MuJoCo and MuJoCo Warp 3.10, gives procedural terrain generation a broad pass for determinism and visual consistency, and corrects a longstanding staleness bug in motion tracking.
MuJoCo 3.10
mjlab now depends on mujoco and mujoco-warp 3.10, both pinned from PyPI. The py.mujoco.org nightly index and the mujoco-warp git pin are gone, so dependency resolution no longer breaks when nightly wheels are garbage collected. SimulationCfg.ls_parallel is deprecated and now ignored, following the removal of parallel linesearch upstream.
Terrain generation
Curriculum difficulty is now deterministic across rows and reaches its configured endpoints, making terrain curricula reproducible. Heightfields color by absolute height on a fixed diverging palette, so scenes read consistently across terrain types and low-amplitude noise no longer renders as high-contrast clutter. A family of difficulty-0 edge cases that produced empty borders, NaN colors, or outright compile failures is resolved, and HfRandomUniformTerrainCfg can now scale its noise with difficulty for curriculum training.
Actuation and domain randomization
A new BuiltinDcMotorActuator wraps MuJoCo's native <dcmotor> with voltage, position, and velocity input modes, back-EMF, and optional thermal, LuGre, cogging, and inductance extensions. Material randomization gains dr.mat_emission, dr.mat_specular, dr.mat_shininess, and dr.mat_texrepeat for RGB rendering. Per-axis randomization events that target the same model field now compose instead of silently overwriting one another.
Motion tracking
Motion tracking no longer re-anchors to a stale robot pose after a mid-episode resample. MotionCommand now refreshes simulation state before computing relative body poses, so observations and rewards reflect the post-teleport robot.
Quality of life
MetricsTermCfg supports reduce="max" for reporting episode peaks such as peak power or contact force. Headless Linux hosts no longer crash on train --video, play, and demo from an unset MUJOCO_GL, GPU selection handles MIG UUIDs, and the bundled MuJoCo type stubs are regenerated and kept in sync by CI.
Full changelog: v1.4.0...v1.5.0