# transforms.api.Pipeline ## *class* transforms.api.Pipeline {#transforms.api.Pipeline} An object for grouping a collection of [`Transform`](../api-transform/index.md#transforms.api.Transform) objects. ### add\_transforms(\*transforms) {#transforms.api.Pipeline.add\_transforms} Register the given [`Transform`](../api-transform/index.md#transforms.api.Transform) objects to the pipeline instance. * **Parameters:** **\*transforms** ([*Transform*](../api-transform/index.md#transforms.api.Transform)) – The transforms to register. * **Raises:** * **ValueError** – If multiple [`Transform`](../api-transform/index.md#transforms.api.Transform) objects write to the same [`Output`](../api-output/index.md#transforms.api.Output) alias. * **ValueError** – If multiple [`Transform`](../api-transform/index.md#transforms.api.Transform) objects have the same compute function reference. ### discover\_transforms(\*modules) {#transforms.api.Pipeline.discover\_transforms} Recursively find and import modules, registering every module-level transform. This method recursively finds and imports modules starting at the given module’s `__path__`. Each module found is imported and any attribute that is an instance of [`Transform`](../api-transform/index.md#transforms.api.Transform) as constructed by the transforms decorators will be registered to the pipeline. ```python >>> import myproject >>> p = Pipeline() >>> p.discover_transforms(myproject) ``` * **Parameters:** **\*modules** (*module*) – The modules to start searching from. :::callout{theme="success"} Each module found is imported. Try to avoid executing code at the module-level. ::: ### *property* transforms {#transforms.api.Pipeline.transforms} The list of transforms registered to the pipeline. * **Type:** List\[[Transform](../api-transform/index.md#transforms.api.Transform)]