Explorando el parámetro 'output_meta' en Transloadit
Si alguna vez has consultado la documentación de los Robots
/upload/handle y
/image/resize, es posible que hayas visto el parámetro
output_meta. Puede que además te hayas preguntado qué hace exactamente. Al fin y
al cabo, a diferencia de la mayoría de los demás parámetros, su uso quizás no quede claro de
inmediato solo por el nombre :)
Así que, ¡por qué no dedicar un momento a explicar cómo funciona este parámetro y por qué se creó!
El parámetro output_meta
La idea detrás del parámetro output_meta es dar a nuestros clientes la posibilidad
de recopilar ciertos metadatos sobre sus archivos. Suena bien tenerlo activado todo el tiempo,
¿verdad? Pues bien, calcularlos también exige mucha más potencia de CPU. Así que, para mantener esas
Assemblies siempre rápidas, creamos un parámetro para la
recopilación de algunos metadatos y lo dejamos desactivado de forma predeterminada.
Puedes definir el parámetro output_meta en los Steps de nuestros Robots para
elegir si quieres metadatos adicionales por cada resultado de encoding. Si bien esto da a nuestros
usuarios el lujo del control fino y la granularidad, también generó un problema: ¿cómo lo activas
para los archivos subidos? Admitimos subidas de archivos desde 2008, pero siempre han sido un caso
algo peculiar, porque las subidas solían ser los únicos archivos que no eran resultado de nuestros
Robots.
Así que, tras la introducción del control detallado mediante el parámetro
output_meta, el siguiente paso lógico fue encapsular la gestión de subidas en un
Robot propio y lanzar el Robot
/upload/handle junto con el nuevo parámetro.
Ahora ya no hay excepciones y el comportamiento se puede modificar en cada Step para cada
archivo.

¿Cómo funciona?
El parámetro output_meta puede seleccionar metadatos opcionales mediante un
objeto de propiedades booleanas, un array de nombres de propiedades o un booleano. Este ejemplo usa
has_transparency; otras propiedades admitidas incluyen
dominant_colors y blurhash. Si has_transparency
se establece en true, analiza la imagen y te indica si tiene partes
transparentes. Dado que calcular has_transparency puede tardar mucho en ciertos
archivos, lo excluimos del conjunto de resultados de forma predeterminada. Al fin y al cabo, no
queremos que nuestros clientes paguen un sobreprecio en tiempo de ejecución si esta propiedad ni
siquiera les interesa.
Si sí quieres saber, por ejemplo, si tus archivos subidos tienen áreas transparentes, puedes
establecer "output_meta": { "has_transparency": true } en el Robot
/upload/handle, tras lo cual encontrarás
meta.has_transparency definido en los archivos resultantes.
Veamos cómo construir una Assembly que use este parámetro. ¡Te invitamos a seguir el ejemplo!
Creación de la Assembly
En esta sección, crearemos dos Assembly Instructions distintas, que nos mostrarán cómo se usa el parámetro tanto en el Robot /upload/handle como en el Robot /image/resize.
{
"steps": {
":original": {
"robot": "/upload/handle",
"output_meta": {
"has_transparency": true
}
}
}
}
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"resized": {
"use": [":original"],
"robot": "/image/resize",
"result": true,
"background": "white",
"flatten": false,
"height": 500,
"imagemagick_stack": "v2.0.3",
"resize_strategy": "pad",
"rotation": false,
"strip": true,
"trim_whitespace": true,
"width": 250,
"output_meta": {
"has_transparency": true
}
}
}
}
Aquí tenemos dos conjuntos distintos de Assembly Instructions. Uno usa solo el Robot /upload/handle y el otro usa el Robot /image/resize.
Observa que, en las Assembly Instructions que incluyen el
Robot /image/resize, la propiedad output_meta
no aparece en el Step :original, sino en el Step resized. Esto se debe a que, en estas
Assembly Instructions, comprobamos la transparencia cuando el archivo se redimensiona
y no cuando se sube.
Los resultados
Tras ejecutar cualquiera de los conjuntos de Assembly Instructions anteriores, podemos ver
en el resultado JSON del Robot /upload/handle que la propiedad meta
de la clave uploads tiene un campo llamado has_transparency, que está establecido en true. Esta
propiedad solo devuelve true si la imagen tiene partes transparentes.
De igual manera, en el resultado JSON que se devuelve para el Robot
/image/resize, la propiedad meta de la clave resized dentro de la sección results tiene un campo
llamado has_transparency, que está establecido en true.
Como puedes ver, ¡el parámetro output_meta puede resultar muy útil! También
estamos considerando permitirte desactivar otras claves de metadatos existentes para acelerar las
Assemblies. Por ejemplo, actualmente calculamos hashes MD5
para todos los archivos de forma predeterminada, aunque muchos casos de uso quizás no lo necesiten.
Así que, en cuanto tengamos más propiedades que se puedan especificar con este parámetro, ¡te lo
haremos saber sin falta! 💖
