
Recortes en lote con un script que escribí
Cuatrocientas fotos de producto necesitaban fondo transparente. Qué resolvió la API pública de Picverce AI de noche y dónde hubo que proteger el script.
MarketingUna tienda de artículos para el hogar tenía cuatrocientas fotos de producto y un marketplace nuevo que quería todas las imágenes sobre blanco liso.
Hacerlo a mano es aproximadamente un día de clics. Es también justo el tipo de encargo que no debería hacerse a mano.
Por qué esto era buen trabajo para la API
Tres cosas lo hacían adecuado, y merece la pena nombrarlas porque muchos encargos no lo son.
El trabajo era idéntico para cada archivo. Misma herramienta, misma opción, cuatrocientas veces.
Nadie necesitaba mirar los resultados uno a uno según llegaban. Una tirada nocturna valía.
Y el caso de fallo era barato. Una foto que volviera mal se podía relanzar o hacer a mano después.
Los encargos donde una persona tiene que juzgar cada resultado son el caso contrario. Automatizarlos solo mueve los clics a un sitio menos cómodo.
La herramienta era la misma que usa el sitio. Eliminador de Fondo IA se comporta igual a través de la API, así que pude probar los ajustes a mano en diez fotos antes de escribir nada.
Esa prueba importó. Me dijo que unos cuantos productos tenían tapas de cristal, y el cristal es el único borde que un recorte de verdad no puede sostener.
El resto del comportamiento de bordes coincidió con lo que esperaba de los recortes del Eliminador de Fondo IA, así que saqué los doce artículos de cristal del lote y los dejé para una persona.
El script, en cuatro piezas
Acabó teniendo menos de cien líneas, y la mayoría eran gestión de errores en lugar de trabajo ingenioso.
- Recorrer la carpeta y montar la lista de archivos que aún necesitan recorte.
- Crear un trabajo por archivo con un valor de idempotencia derivado del nombre.
- Consultar cada trabajo hasta que termine, con un techo para que nada gire eternamente.
- Escribir el resultado junto al original y anotar el nombre como hecho.
Nada de esto era ingenioso. Todas las llamadas que hace están descritas en la documentación de la API pública, y el script entero es una creación, una consulta y una escritura.
El valor de idempotencia es la parte que no me volvería a saltar. Derivarlo del nombre del archivo permitía reiniciar una tirada caída sin pagar dos veces por nada.
Lo probé a propósito matando el script a mitad y arrancándolo otra vez. Los trabajos ya creados volvieron como repeticiones y no como trabajo nuevo.
Esa prueba llevó dos minutos y es la razón por la que confié en la tirada nocturna. Un script de lote que no has interrumpido a propósito es un script cuyo comportamiento no conoces.
El nombre del archivo servía como origen del valor porque ya era único en esa carpeta. Un UUID guardado junto al registro funciona igual de bien.
Dónde hubo que protegerlo
La primera versión corría demasiado rápido y gastó su límite en un minuto.
Cada respuesta lleva la situación del límite en sus cabeceras, así que la solución fue leerlas en lugar de adivinar un valor de espera.
Cuando el resto disponible bajaba, el script esperaba hasta el momento de reinicio. Eso convirtió una ráfaga de rechazos en una tirada constante.
La segunda protección fue el techo del bucle de consulta. Sin él, un trabajo atascado habría frenado todo el lote detrás.
La tercera fue simplemente anotar qué archivos estaban terminados. Cuatrocientos trabajos son suficientes como para no querer fiarte de la memoria.
Bastó con un archivo de texto con los nombres hechos. Sobrevivió a dos reinicios y no necesitó base de datos.
Los resultados se escribieron junto a los originales con el mismo nombre base, lo que convirtió la revisión de la mañana en desplazarse por una carpeta.
También guardé los fallos en su propia lista en lugar de borrarlos. Nueve nombres son una cola de reintento corta de mirar.
Lo que costó y lo que ahorró
Trescientos ochenta y ocho recortes a 2 créditos cada uno son 776 créditos, que caben dentro de la asignación mensual del plan intermedio.
Los trabajos fallidos se devuelven enteros, así que los nueve que fallaron en la primera pasada no costaron nada y salieron bien al reintentarlos.
La tirada tardó unas cuatro horas sin vigilancia durante la noche, y buena parte fue el script esperando educadamente su propio límite.
Frente a un día de trabajo manual, ese es todo el argumento. La vendedora revisó una muestra de cuarenta por la mañana y aceptó el lote.
Los doce artículos de cristal le llevaron unos veinte minutos a mano, que es mucho mejor uso de veinte minutos que cuatrocientos clics idénticos.
Todo quedó también en el historial, lo que significó que la vendedora podía mirar un resultado sin que yo le enviara archivos.
Si el lote volviera a llegar cada mes, el siguiente paso sería lanzarlo desde su propio sistema en lugar de desde mi portátil.
Prueba a mano, automatiza la parte idéntica, protege el bucle y lleva registro de lo hecho. Ese es el patrón de cualquier lote parecido.


