# Parámetro `use` avanzado

El parámetro `use` ofrece opciones avanzadas que mejoran tu control sobre cómo se procesan las entradas. Estas funciones son especialmente útiles en situaciones complejas, como cuando los Steps necesitan combinar entradas o seguir secuencias de procesamiento específicas.

## Agrupación de Steps

Algunos Robots pueden reunir los resultados de varios Steps en una sola invocación. Por ejemplo, [🤖/file/compress](/docs/robots/file-compress.md) normalmente crearía un archivo comprimido por cada archivo que se le pase. Sin embargo, si estableces `bundle_steps` en `true`, creará un archivo comprimido que contendrá todos los archivos resultantes de cada Step que le proporciones.

Para habilitar la agrupación, proporciona al parámetro `use` un objeto como el siguiente:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"use": {
  "steps": [
    ":original",
    "encoded",
    "resized"
  ],
  "bundle_steps": true
}

```

###### Nota

El parámetro `bundle_steps` es esencial para[🤖/video/adaptive](/docs/robots/video-adaptive.md). Sin él, generarás un archivo de lista de reproducción maestra por cada calidad de visualización.

## Agrupación por archivo original

El parámetro `group_by_original` organiza los archivos de salida según el archivo de entrada del que provienen, por lo que resulta esencial en flujos de trabajo donde quieres asegurarte de que las salidas se agrupen con el archivo de entrada que las produjo, por ejemplo, al usar [🤖/file/compress](/docs/robots/file-compress.md) Robot. En este caso, quizá quieras crear un archivo comprimido independiente por cada archivo subido o importado, en lugar de crear uno que contenga todas las subidas originales (o uno por cada archivo resultante).

**Ejemplo:**

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"compress": {
  "use": {
    "steps": ["thumbnails"],
    "bundle_steps": true,
    "group_by_original": true
  },
  "robot": "/file/compress"
}

```

Esta configuración indica que el Step `compress` debe considerar la salida delStep `thumbnails`, agregar estas salidas por archivo original y, luego, comprimirlas según corresponda.

## Campos

Puedes filtrar y seleccionar archivos específicos según los nombres de sus campos mediante la opción `fields`. Cuando se especifica este arreglo, el Step correspondiente solo se ejecutará para los archivos enviados mediante uno de los nombres de campo indicados.

Los nombres de campo deben coincidir con los nombres asignados a los campos de entrada de archivos en tu formulario HTML, según se definen en el atributo `name` de la etiqueta de entrada de archivos. Cuando usas un SDK de backend, corresponde a `myFieldName1`en, por ejemplo: `$transloadit->addFile('myFieldName1', './chameleon.jpg')`.

**Ejemplo:**

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"use": {
  "steps": [":original"],
  "fields": ["myFieldName1"]
}

```

Este parámetro está establecido en `true` de forma predeterminada, lo que significa que se aceptan todos los campos.

## Uso de `as`

A veces, los Robots reciben varias entradas. Por ejemplo,[🤖/video/merge](/docs/robots/video-merge.md) puede crear una presentación a partir de audio e imágenes. Puedes asignar distintos Steps a las entradas correspondientes especificando el tipo de archivo con el que se debe tratar elStep.

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"use": {
  "steps": [
    { "name": "audio_encoded", "as": "audio" },
    { "name": "images_resized", "as": "image" }
  ]
}

```

### Orden de los Steps

A veces, el orden es importante. Por ejemplo, con nuestra familia de Robots de concatenación, quizá quieras especificar el orden exacto en el que se concatenarán tus archivos multimedia. En estos casos, puedes agregar un índice al final del tipo de archivo, comenzando desde 1. También puedes, opcionalmente, filtrar por el nombre del campo multipart. Como en este ejemplo, donde todos los archivos provienen de la misma fuente (subidas de usuarios finales), pero tienen nombres de `<input>` diferentes:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"use": {
  "steps": [
    { "name": ":original", "fields": "myFirstVideo", "as": "video_1" },
    { "name": ":original", "fields": "mySecondVideo", "as": "video_2" },
    { "name": ":original", "fields": "myThirdVideo", "as": "video_3" }
  ]
}

```

Cuando no sea evidente dónde colocar el archivo, puedes usar Assembly Variables para especificarlo. Por ejemplo, quizá quieras pasar un archivo de texto a[🤖/image/resize](/docs/robots/image-resize.md) para incrustar el texto en una imagen. Pero, si estás incrustando varias marcas de agua en la imagen, ¿cómo señalas el archivo de texto que quieres usar? Puedes especificarlo mediante `${use.text_1}` para indicar el primer archivo de texto que se pasó.

**Ejemplo:**

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"watermarked": {
  "robot": "/image/resize",
  "use": {
    "steps": [
      { "name": "resized", "as": "base" },
      { "name": "transcribed", "as": "text" }
    ]
  },
  "text": [
    {
      "text": "Hi there",
      "valign": "top",
      "align": "left"
    },
    {
      "text": "From the 'transcribed' Step: ${use.text_1}",
      "valign": "bottom",
      "align": "right",
      "x_offset": 16,
      "y_offset": -10
    }
  ]
}

```

### Proporcionar la marca de agua mediante un Assembly Step

También puedes pasar tanto el archivo de imagen base como la imagen de la marca de agua a un Assembly Stepmediante el parámetro `use`, lo que permite que ambos formen parte de la subida o usar los resultados de otros Assembly Steps como entrada para tu[🤖/image/resize](/docs/robots/image-resize.md) Step.

Para que esto funcione, solo necesitas usar la sintaxis `as`:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"my_image_step": {
  "robot": "/image/resize",
  "use": {
    "steps": [
      { "name": ":original", "as": "base" },
      { "name": "watermark_step", "as": "watermark" }
    ]
  }
}

```

Aquí, la salida de un Step `watermark_step` se usa como marca de agua, mientras que la imagen base se obtiene de los archivos subidos.

Si usas varios campos de entrada de archivos, puedes indicar a Transloadit qué campo proporciona la imagen base y cuál proporciona la marca de agua. Supongamos que tienes dos campos de entrada de archivos llamados `the_image` y`the_watermark`. Estas Assembly Instructions harán que funcione mediante la condición `fields`:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_8SSvgBPgkTYoAwcCv4gwMbTsCWEg)

```json
"my_image_step": {
  "robot": "/image/resize",
  "use": {
    "steps": [
      { "name": ":original", "fields": "the_image", "as": "base" },
      { "name": ":original", "fields": "the_watermark", "as": "watermark" }
    ]
  }
}

```

Ten en cuenta que el parámetro `watermark_url` del Robot seguirá funcionando.
