Run Configs¶
A run config serializes a RetargetingExperiment. Observation and adaptation
are separate typed blocks.
name = "basic"
robot = "synthetic_humanoid"
output = "basic.npz"
[observation]
kind = "motion_file"
path = "../tests/fixtures/minimal_motion.json"
format = "minimal"
[recipe]
kind = "role_mapping"
task_kind = "robot_only"
[recipe.link_roles]
Pelvis = "pelvis"
L_Toe = "left_foot"
R_Toe = "right_foot"
[observation] is deserialized into an ObservationRecipe. [recipe] is
deserialized into a RetargetingRecipe. Robot-role strings validate through the
robot's declared RobotRole enum.
Optimization Fields¶
Role-mapping recipes expose scene and optimization fields under [recipe]:
[recipe.mesh]
topology = "delaunay"
k_neighbors = 4
[recipe.solver]
backend = "auto"
max_iterations = 8
[[recipe.objectives]]
kind = "laplacian"
weight = 10.0
[[recipe.constraints]]
kind = "joint_limits"
Specialized recipes serialize their own public constructor fields:
[observation]
kind = "skateboarding"
vicon = "/data/vicon/demo"
gvhmr = "/data/gvhmr/demo"
video_fps = 59.942
timeline_selection = "human_pose"
crop_policy = "overlap"
[recipe]
kind = "skateboarding"
output_fps = 30
timeline_selection = "uniform" requires a uniform_fps value in the same
observation block. These fields construct the same TimelineSelection and
CropPolicy values used by the Python recipe.
No config section implements a hidden synchronization or preparation workflow.
Providers And Paths¶
Robot providers are unchanged:
robot = "g1"
robot_provider = "asset_store"
[robot_options]
store = "../.retarget_assets"
Relative source, asset, output, and import paths resolve against the config file. CLI overrides can replace motion-file paths, output, run name, robot, or progress settings.
Validate a config without running optimization:
uv run python -c "
from retarget.cli.config import RetargetingRunConfig
cfg = RetargetingRunConfig.load('examples/basic/run_config.toml')
print(cfg.build_experiment().build_problem().name)
"