Saltar a la navegación

Inicio rápido de plantillas

Ejecuta desde tu propio código una plantilla creada en ElevenCreative Flows.

En este tutorial ejecutarás una plantilla pública desde un script de Python o TypeScript. La plantilla transforma una foto informal tomada con el móvil de una prenda de ropa en una imagen de producto limpia, y el script guarda el resultado junto a ella. El tutorial dura unos cinco minutos, y la ejecución en sí tarda menos de un minuto.

Foto de móvil e imagen de producto

Izquierda: la foto que envías. Derecha: la imagen de producto que recibes.

Una plantilla es un Flujo de ElevenCreative publicado: una cadena de modelos que recibe un conjunto fijo de entradas y genera un conjunto fijo de salidas. La que ejecutarás, Phone Photo to Packshot, recibe una imagen y devuelve una imagen. Su autor ya ha elegido los modelos y los prompts, así que tu código solo pasa la foto.

Para ejecutar una plantilla necesitas un plan Pro o superior.

Configuración

1

Crea una clave de API

Crea una clave de API aquí, en el panel, que usarás para acceder a la API de forma segura.

Guarda la clave como un secreto gestionado y pásala a los SDK como variable de entorno mediante un archivo .env, o directamente en la configuración de tu aplicación, según prefieras.

.env
ELEVENLABS_API_KEY=<your_api_key_here>

Concede a la clave el permiso Imagen y vídeo.

2

Instala el SDK

También usaremos la biblioteca dotenv para cargar nuestra clave de API desde una variable de entorno.

pip install elevenlabs
pip install python-dotenv
3

Consigue una foto

Descarga la foto de ejemplo en la carpeta donde crearás tu script:

curl -o garment.jpg https://storage.googleapis.com/eleven-public-cdn/documentation_assets/templates/garment.jpg

Encuentra el código de la plantilla

Abre Phone Photo to Packshot en la app de ElevenLabs y selecciona la pestaña API. Todas las plantillas tienen una, con el código para ejecutarlas en cURL, Python y TypeScript.

Pestaña API de la plantilla

La pestaña API en la página de la plantilla, mostrando el fragmento de Python.

La pestaña muestra tres pasos: obtener una clave de API, elegir cómo obtener el resultado y ejecutar la plantilla. En Elige cómo obtener el resultado, está seleccionado Esperar al resultado de forma predeterminada. El código del tercer paso se abre en cURL; selecciona Python o TypeScript, y el paso pasará a ser Ejecutar y esperar al resultado. Su fragmento inicia una ejecución, espera a que termine e imprime cada salida. Pasa un valor en inputs por cada entrada de la plantilla, usando como clave el id de la entrada, y lee cada resultado de outputs mediante el id de la salida. Esta plantilla tiene una entrada, garment_photo, y una salida, packshot. Estos dos id son los únicos nombres que necesita tu código.

Ejecuta la plantilla

Crea packshot.py o packshot.mts. Es el fragmento de la pestaña API con estos cambios:

  • La clave de API se carga desde tu archivo .env.
  • La foto se pasa como base64 en lugar de YOUR_ASSET_ID, el ID de un archivo ya subido a ElevenLabs.
  • El script imprime una línea mientras la ejecución está en curso y guarda la imagen de producto en packshot.jpg en lugar de imprimir su URL.
import base64
import os
import urllib.request
from dotenv import load_dotenv
from elevenlabs import ElevenLabs, TemplateInputReference_InlineBase64
load_dotenv()
client = ElevenLabs(api_key=os.environ["ELEVENLABS_API_KEY"])
with open("garment.jpg", "rb") as f:
photo = base64.b64encode(f.read()).decode()
print("Running the template, this takes up to a minute...")
# Starts a run and waits for it to finish, checking back as often as the API
# asks. In production, receive the result by webhook instead.
run = client.flows.templates.runs.create_and_wait(
template_id="Yz4DETxRv4uXyIo5PnEy",
# Pins the version this tutorial was written against.
version_id="Kqs4nRrpndEjQ54BhbwE",
inputs={
"garment_photo": TemplateInputReference_InlineBase64(
content_base_64=photo,
mime_type="image/jpeg",
),
},
)
packshot = run.outputs["packshot"]
# Checking `type` tells your editor this output is an image, which has a content_url.
if packshot.type == "image" and packshot.status == "completed" and packshot.content_url:
urllib.request.urlretrieve(packshot.content_url, "packshot.jpg")
print("Saved packshot.jpg")
else:
print("The run failed:", packshot.failure_reason)

create_and_wait (createAndWait en TypeScript) inicia la ejecución y, después, la consulta en el intervalo que sugiere la API hasta que todas las salidas hayan terminado. Una ejecución que falla se devuelve, no genera una excepción, por lo que el script comprueba el status de la salida antes de leerla. version_id fija la versión de la plantilla con la que se escribió este tutorial, para que una edición posterior de la plantilla no pueda romper el script.

Ejecuta el script. Una ejecución de esta plantilla usa unos 1020 créditos, lo mismo que al ejecutarla en la app.

python packshot.py

Tras entre 30 segundos y un minuto, el script imprime:

Running the template, this takes up to a minute...
Saved packshot.jpg

Abre packshot.jpg. La prenda de la foto ahora está sobre un maniquí con un fondo de estudio liso; la cama y la iluminación han desaparecido.

create_and_wait es para scripts y para probar plantillas. En producción, recibe las ejecuciones terminadas mediante un webhook, para que tu aplicación no mantenga una solicitud abierta mientras una ejecución está en curso. Ejecuta la plantilla de tu equipo te muestra cómo hacerlo.

Ejecútala con tu propia foto

Haz una foto con el móvil de cualquier prenda de ropa. No tiene que ser una buena foto: sirve una camiseta sobre la cama o una chaqueta en una silla. Guárdala como un JPEG sobre garment.jpg y vuelve a ejecutar el script.

Obtendrás una imagen de producto de tu prenda con el mismo aspecto de estudio, porque cada ejecución de una plantilla pasa por los mismos modelos y ajustes. Los detalles pueden variar de una ejecución a otra, incluso con la misma foto.

Lo que has aprendido

  • Una plantilla recibe entradas con nombre y genera salidas con nombre, y su pestaña API muestra el código para ejecutarla.
  • flows.templates.runs.create_and_wait inicia una ejecución con un valor por cada id de entrada y devuelve el resultado cuando termina. Lees cada salida por su id y compruebas su status.
  • En producción, un webhook entrega cada ejecución terminada, de modo que nada tiene que esperarla.

Siguientes pasos