Dynamic Evaluation

If placeholder variables like ${file.meta.width} aren't enough to implement your application logic, you can also use the full feature set of modern JavaScript to create dynamic Assembly instructions. These scripts will be executed on our infrastructure, and have access to all Assembly Variables. This includes a file's meta data that Transloadit automatically determines, basic information about the Assembly runtime, and fields that can be populated by you as a developer when creating the Assembly.

For example, you might want to resize images to adhere to the design principle of the Golden Ratio:

{
  "robot": "/image/resize",
  "height": "${file.meta.width / (1 + Math.sqrt(5))/2}",
  "resize_strategy": "crop"
}

Or you could want to transform the output file name to upper case when uploading to S3:

{
  "robot": "/s3/store",
  "path": "my-folder/${file.name.toUpperCase()}"
}

Everything inside ${...} will get evaluated, and you have all language features available, as long as your script doesn't perform any asynchronous operations.

Variable lookup

Dynamic evaluation is free of charges when it is a simple lookup, such as ${file.name} or ${file.meta.faces[0]}.

For more complex evaluations, such as ${Math.max(10, file.meta.width)}, there are charges. This is because we invoke 🤖/script/run to interpret JavaScript, making evaluations harder on our machines, and a few milliseconds slower, but with a full programming language at your disposal, also that much more powerful.