# Assembly Instructions

Sehen wir uns dieses Beispiel an, umAssembly Instructions kennenzulernen:

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

```json
{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "imported_watermark": {
      "robot": "/http/import",
      "url": "https://transloadit.com/assets/images/face.jpg"
    },
    "resized": {
      "robot": "/image/resize",
      "use": {
        "steps": [
          { "name": ":original", "as": "base" },
          { "name": "imported_watermark", "as": "watermark" }
        ]
      },
      "width": 400,
      "height": 400,
      "watermark_position": "center",
      "watermark_size": "30%"
    },
    "exported": {
      "robot": "/s3/store",
      "use": [":original", "resized"],
      "credentials": "my_cloud_storage_credentials",
      "path": "/my_images/${file.id}/${file.url_name}"
    }
  }
}

```

Das Beispiel zeigt vier Steps: `:original`,`imported_watermark`, `resized` und `exported`. Sie können IhreSteps beliebig benennen. Die einzige Ausnahme ist`:original`: Dieser Step verweist auf hochgeladene Dateien und muss den Robot[🤖/upload/handle](/docs/robots/upload-handle.md) verwenden.

Beachten Sie, dass sowohl `:original` als auch `imported_watermark` alsSteps über den Parameter `use` als Eingabe für denStep `resized` verwendet werden. Hier nutzen wirStep-Bündelung über die "as"-Syntax, um mehrere Dateien gleichzeitig an denStep `resized` zu übergeben – eine als Basisbild und eine als Wasserzeichen, das über das Basisbild gelegt wird. Verschiedene Robots bieten unterschiedliche Möglichkeiten für die "as"-Syntax, wodurch sich besonders leistungsstarke Workflows ergeben.

Der Step `exported` verwendet anschließend einfach die meisten anderenSteps als Eingabe und speichert sie einzeln auf S3 – ohneStep-Bündelung. Die verwendeten Variablen `${file.id}` und `${file.url_name}` stehen allen Steps zur Verfügung und ermöglichen eindeutige Dateinamen für jede Datei.

So können wir hochgeladene Dateien verarbeiten, mit einem Wasserzeichen versehen und sowohl das hochgeladene Bild als auch die skalierte Version mit Wasserzeichen nach S3 exportieren.

Nicht alle Steps benötigen Eingaben. UnserStep `imported_watermark` stellt beispielsweise die erste Eingabe bereit, indem er sie herunterlädt. Daher lassen wir hier `use` weg. Weitere Beispiele fürRobots, die keine Eingabedateien benötigen, sind[🤖/html/convert](/docs/robots/html-convert.md), der einen Screenshot einer Website aufnehmen und so die erste Datei erstellen kann, sowie[🤖/upload/handle](/docs/robots/upload-handle.md), der seine Dateien von den Besuchern Ihrer App statt von einem anderen Step erhält.

Mit einer einfachen Änderung könnten wir diese App vollständig dynamisch gestalten. Ersetzen Sie dazu die statische URL imStep `imported_watermark` durch eine dynamische URL aus einem Feld Ihrer App. Dazu müssen wir lediglich den Parameter `"url"` in unseremTemplate in `"${fields.watermark_url}"` ändern und dieses Eingabefeld anschließend in unserem HTML-Webformular oder über ein zusätzliches POST-Feld in unserer Anfrage bereitstellen. So wird das Wasserzeichen vollständig dynamisch.

## Step-Parameter

Wie Sie sehen, wird jeder Step als Objekt mit einigen Eigenschaften oder Parametern definiert. Die meisten davon sind tatsächlichRobot Parameters. Sie geben beispielsweise die`width` eines Bildes nach der Größenänderung vor. Alle sind in der jeweiligen[Robot-Dokumentation](/docs/robots.md) beschrieben. Es gibt jedoch auch 5 Parameter, die direkt die Engine der Assembly steuern. Sie legen fest, welcheRobots aufgerufen und wie sie miteinander verbunden werden:

* ### `use`

`string | Array<string> | Array<object> | object`\
Gibt an, welche Steps als Eingabe verwendet werden sollen.

* Sie können beliebige Namen für Steps wählen, außer `":original"` (reserviert für von Transloadit verarbeitete Benutzer-Uploads)
* Sie können mehrere Steps mithilfe von Arrays als Eingabe angeben:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

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

* Sie können Eingabe-Steps außerdem mit `as` kennzeichnen, um Robots die semantische Funktion zu übermitteln:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```json
{  
  "use": [  
    {  
      "name": ":original",  
      "as": "image"  
    },  
    {  
      "name": ":original",  
      "as": "mask"  
    }  
  ]  
}  
```

###### Tip

Das ist wahrscheinlich alles, was Sie über `use` wissen müssen. Sie können sich jedoch auch die [erweiterten Anwendungsfälle](/docs/topics/use-parameter.md) ansehen.

* ### `robot` — **erforderlich**

`string`\
Gibt an, welcher Robot die an diesen Step übergebenen Dateien verarbeiten soll.\
Unter [alle Robots](/docs/robots.md) finden Sie die verfügbaren Robots mit ihren jeweiligen Parametern, beispielsweise`width`zum Steuern der Größenänderung eines Bildes. Die vollständige Parameterliste für jeden Robot finden Sie in der Robot-Dokumentation.

* ### `result`

`boolean`(Standard: `false`)\
Ob die Ergebnisse von diesem Step im Assembly Status JSON enthalten sein sollen

* ### `force_accept`

`boolean`(Standard: `false`)\
Erzwingt, dass ein Robot einen Dateityp akzeptiert, den er sonst ignorieren würde.\
Standardmäßig ignorieren Robots Dateien, deren Typ sie nicht kennen.[🤖/video/encode](/docs/robots/video-encode.md) ignoriert beispielsweise problemlos Eingabebilder.\
Wenn Sie den Parameter `force_accept` auf `true` setzen, können Sie erzwingen, dass Robots alle übergebenen Dateien akzeptieren. Dies führt in der Regel zu Fehlern und sollte nur zur Fehlersuche oder zur Behandlung von Grenzfällen verwendet werden.

* ### `ignore_errors`

`boolean | Array<meta | execute>`(Standard: `[]`)\
Ignoriert Fehler während bestimmter Verarbeitungsphasen.\
Wenn Sie diesen Wert auf `["meta"]` setzen, ignoriert der Robot Fehler bei der Metadatenextraktion.\
Wenn Sie diesen Wert auf `["execute"]` setzen, ignoriert der Robot Fehler während der Hauptausführungsphase.\
Das Setzen auf `true` entspricht `["meta", "execute"]` und bewirkt, dass Fehler in beiden Phasen ignoriert werden.

Praktische Hinweise und mögliche Wertekombinationen einschließlich importspezifischen Verhaltens finden Sie unter[Der Parameter ignore\_errors](/docs/topics/ignore-errors.md).

## Ausführungsreihenfolge

Um Assemblies zu beschleunigen, werdenSteps ausgeführt, sobald die als Eingabe dienendenSteps Dateien ausgeben. Das bedeutet, dass viele Vorgänge parallel verarbeitet werden. Angenommen, Sie möchten beispielsweise ein hochgeladenes Video codieren und zugleich Thumbnails daraus extrahieren:

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

```json
{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "encoded": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "web/mp4/1080p"
    },
    "thumbed": {
      "use": ":original",
      "robot": "/video/thumbs",
      "count": 4
    },
    "exported": {
      "use": ["encoded", "thumbed"],
      "robot": "/s3/store",
      "credentials": "YOUR_S3_CREDENTIALS"
    }
  }
}

```

Die Steps `encoded` und `thumbed` werden parallel ausgeführt, sobald der erste Datei-Upload abgeschlossen ist. DerStep `exported` wird für jede Datei ausgelöst, die von`encoded` und `thumbed` stammt. Wahrscheinlich erreichen die Thumbnails Ihren S3-Bucket vor dem für das iPad optimierten Video, obwohl die Thumbnails später definiert wurden. Daher spielt die Reihenfolge derSteps keine wesentliche Rolle. Der Parameter `use`definiert die Eingabe für jeden Step und bestimmt damit letztlich, wie unsere Steps miteinander verkettet werden.

## Filtern, um Steps bedingt auszuführen

Mit [🤖/file/filter](/docs/robots/file-filter.md) können SieSteps anhand der Eigenschaften einer Datei ausführen. So können SieAssembly Instructions erstellen, die sowohl Video- als auch Audio-Uploads verarbeiten, zu kleine Dateien ablehnen oder einen Effekt nur auf Bilder mit transparenten Bereichen anwenden. Diese und weitere Möglichkeiten werden auch in der Dokumentation zu diesemRobot beschrieben.

## Assembly Variables

Informationen zu Assembly Variables wie `${file.id}`, `${assembly.id}`, `${fields.*}` und weiteren finden Sie auf der eigenen Seite [Assembly Variables](/de/docs/topics/assembly-variables.md).
