# Task Spec The sequence of object-centric subtasks and other important data generation settings for each data generation run are communicated to MimicGen through the TaskSpec object (`configs/task_spec.py`). The TaskSpec object is instantiated from the MimicGen task config (`config.task.task_spec`) using the `TaskSpec.from_json` method.

Note

See [this section](https://mimicgen.github.io/docs/tutorials/datagen_custom.html#step-2-implement-task-specific-config) of the Data Generation for Custom Environments tutorial for an example of how to implement a task config for a new task.
We describe components of the TaskSpec object in more detail below. The TaskSpec is essentially list of dictionaries with each dictionary corresponding to exactly one subtask. The method below highlights the important settings that the TaskSpec object holds for each task: ```python def add_subtask( self, object_ref, subtask_term_signal, subtask_term_offset_range=None, selection_strategy="random", selection_strategy_kwargs=None, action_noise=0., num_interpolation_steps=5, num_fixed_steps=0, apply_noise_during_interpolation=False, ): """ Add subtask to this task spec. Args: object_ref (str): each subtask involves manipulation with respect to a single object frame. This string should specify the object for this subtask. The name should be consistent with the "datagen_info" from the environment interface and dataset. subtask_term_signal (str or None): the "datagen_info" from the environment and dataset includes binary indicators for each subtask of the task at each timestep. This key should correspond to the key in "datagen_info" that should be used to infer when this subtask is finished (e.g. on a 0 to 1 edge of the binary indicator). Should provide None for the final subtask. subtask_term_offset_range (2-tuple): if provided, specifies time offsets to be used during data generation when splitting a trajectory into subtask segments. On each data generation attempt, an offset is sampled and added to the boundary defined by @subtask_term_signal. selection_strategy (str): specifies how the source subtask segment should be selected during data generation from the set of source human demos selection_strategy_kwargs (dict or None): optional keyword arguments for the selection strategy function used action_noise (float): amount of action noise to apply during this subtask num_interpolation_steps (int): number of interpolation steps to bridge previous subtask segment to this one num_fixed_steps (int): number of additional steps (with constant target pose of beginning of this subtask segment) to add to give the robot time to reach the pose needed to carry out this subtask segment apply_noise_during_interpolation (bool): if True, apply action noise during interpolation phase leading up to this subtask, as well as during the execution of this subtask """ ``` - The `object_ref` for each subtask determines the reference object frame for the motion in that subtask. The name here should be consistent with the `get_object_poses` method of the relevant task-specific [Environment Interface](https://mimicgen.github.io/docs/modules/env_interfaces.html)) object. - The `subtask_term_signal` and `subtask_term_offset_range` settings determine how subtask segments for this subtask is parsed from the source demonstrations -- see the [Subtask Termination Signals](https://mimicgen.github.io/docs/tutorials/subtask_termination_signals.html) page for more information. - The `selection_strategy` and `selection_strategy_kwargs` determine the [SelectionStrategy](https://mimicgen.github.io/docs/modules/datagen.html#selection-strategy) class used to select a source subtask segment at the start of each subtask during data generation. See Appendix N.3 in the MimicGen paper for more details. - The `action_noise` setting determines the magnitude of action noise added when executing actions during data generation. See Appendix N.4 of the MimicGen paper for more details. - The `num_interpolation_steps` and `num_fixed_steps` settings determines the number of interpolation waypoints in the interpolation segment that bridges this subtask segment and the previous subtask segment during data generation. See Appendix N.2 of the MimicGen paper for more details.