Curso
BytePlus acaba de lanzar su último modelo de generación de imágenes, Seedream 4.5. Como brazo tecnológico empresarial de ByteDance, la compañía lleva capacidades de IA avanzadas a negocios de todo el mundo, apoyándose en la innovación detrás de plataformas como TikTok.
En este artículo, te enseño a usar Seedream 4.5 con Python integrándolo a través de su API para generar imágenes de forma programática.
Te recomiendo el curso Generative AI Concepts como una gran introducción a la tecnología detrás de modelos de generación de imágenes como Seedream. Si también te interesan otros modelos, echa un vistazo a nuestra guía sobre Nano Banana 2 de Google.
Qué es Seedream 4.5
Seedream 4.5 es la última iteración del modelo de generación de imágenes con IA de BytePlus.
Esta versión mejora la consistencia del sujeto, afina los detalles de texto pequeño y perfecciona la mezcla entre varias imágenes. También entiende mejor las instrucciones, mejora el razonamiento espacial y ofrece inferencia lógica más avanzada.
El modelo puede producir imágenes 4K de alta calidad, una mejora muy bienvenida, ya que muchos competidores tienen dificultades con resoluciones altas. Además, compite en precio: las generaciones cuestan solo 4 centavos por imagen.
No te pierdas también nuestro artículo sobre el nuevo modelo de generación de vídeo de ByteDance, Seedance 2.0.
Configuración de la API de Seedream 4.5
Sin más preámbulos, vamos a empezar con la API de Seedream 4.5.
Creación de una clave de API
Para usar Seedream 4.5 con Python vía su API, primero necesitamos crear una clave de API.
-
Ve a su web oficial, haz clic en el botón Get API en la esquina inferior derecha e inicia sesión.
-
Una vez dentro, verás un botón Access API en la esquina superior derecha. Haz clic y crea la clave de API. Para crearla es necesario verificar el número de teléfono y añadir la información de facturación. No es una suscripción, así que no se te cobrará mensualmente: solo pagarás por las solicitudes a la API.
-
Crea un archivo llamado
.enven la misma carpeta donde escribimos el código Python y copia la clave con el siguiente formato:
ARK_API_KEY=<paste_key_here>
Antes de poder usar el modelo, asegúrate también de activarlo en la consola ModelArk de BytePlus. Esto se hace por separado de la clave de API. Para activarlo:
-
Navega a Model activation en la barra lateral izquierda.
-
En el centro, elige Media como categoría del modelo.
-
Haz clic en Activate a la derecha, en la fila del modelo
ByteDance-Seedream-4.5. -
Confirma en la ventana emergente.
Instalación de dependencias en Python
Para interactuar con la API de Seedream 4.5, instalamos unos cuantos paquetes de Python:
-
byteplussdkarkruntime: el paquete oficial de Python que permite hacer solicitudes a la API de Seedream 4.5, parte del SDK de Python de BytePlus. -
Algunos paquetes de ayuda para cargar la clave de API desde el archivo
.env, hacer solicitudes HTTP asíncronas y validar la configuración.
Instalamos estos paquetes con el comando:
pip install byteplus-python-sdk-v2 python-dotenv httpx requests typing_extensions pydantic
Generar imágenes con Seedream 4.5
Empecemos por aprender a generar una imagen a partir de un prompt de texto. Si has leído otros tutoriales de APIs de IA en Python, como los de GPT-Image-1 o Grok Imagine, seguramente ya te suene el flujo típico:
-
Importar los paquetes.
-
Cargar la clave de API desde el archivo
.env. -
Crear un cliente usando el paquete oficial de la API.
-
Enviar la solicitud a la API.
Seedream 4.5 funciona exactamente igual. Aquí tienes un script de ejemplo para generar una imagen.
# 1. Importa los paquetes necesarios
from dotenv import load_dotenv
from byteplussdkarkruntime import Ark
import os
# 2. Carga la clave de API
load_dotenv()
# 3. Crea el cliente
client = Ark(
base_url="https://ark.ap-southeast.bytepluses.com/api/v3",
api_key=os.getenv("ARK_API_KEY"),
)
# 4. Envía la solicitud a la API
prompt = """
Photorealistic anthropomorphic animals hanging out in a coffee shop with no humans.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
watermark=False,
)
image_url = imagesResponse.data[0].url
print(image_url)
En este ejemplo concreto, el prompt que usamos fue:
Photorealistic anthropomorphic animals hanging out in a coffee shop with no humans.
Esto es lo que generó el modelo:

Descargar la imagen generada
El script anterior mostrará la URL de la imagen generada en la terminal. No es lo más cómodo. Una alternativa mejor es crear una función que descargue la imagen generada a nuestra carpeta local.
import requests
from urllib.parse import urlparse
import os
def download_image(url):
try:
response = requests.get(url, stream=True)
response.raise_for_status()
parsed_url = urlparse(url)
filename = os.path.basename(parsed_url.path)
if not filename:
filename = "downloaded_image"
with open(filename, "wb") as f:
for chunk in response.iter_content(1024):
f.write(chunk)
print(f"Image saved to: {filename}")
except Exception as e:
print(f"Error downloading image: {e}")
Te recomiendo crear un nuevo script llamado utils.py y colocar ahí esta función. Luego, en el script que genera la imagen, añadimos el siguiente código para descargarla:
import utils
utils.download_image(image_url)
Especificar el tamaño de la imagen
Los ejemplos anteriores usaron los parámetros por defecto de Seedream 4.5, salvo watermark, que configuramos en False para ocultarlo.
Seedream 4.5 ofrece dos formas de indicar las dimensiones de la imagen de salida mediante el parámetro size.
La primera es especificar la resolución de la imagen generada estableciendo size a "2K" o "4K" y describir la relación de aspecto, forma o propósito en el prompt en lenguaje natural, dejando que el modelo determine el ancho y alto. El valor por defecto es "2K".
Aquí tienes un ejemplo:
prompt = """
Portait Instagram image to be used to promote travel to Tokyo, Japan.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
size="4K",
watermark=False,
)
Como alternativa, podemos indicar el tamaño en píxeles con una cadena como "3750x1250", pero hay dos reglas que debemos cumplir:
- Los píxeles totales (ancho × alto) deben estar entre 3,6 millones y 16,7 millones.
- La relación de aspecto (ancho ÷ alto) debe estar entre 1/16 y 16.
Si solo se cumple una de las reglas, el tamaño no es válido. Para evitar tener que hacer estos cálculos, te recomiendo usar el método de resolución anterior o alguno de los siguientes tamaños válidos:

Generación por lotes
Seedream 4.5 incluye un modo de generación por lotes que se puede usar para crear un conjunto de imágenes temáticamente relacionadas. Esto puede ser útil, por ejemplo, para generar un storyboard o visuales centrados en un mismo sujeto.
Para generar un lote de imágenes, debemos proporcionar los parámetros sequential_image_generation y sequential_image_generation_options en la solicitud a la API. Aquí tienes un ejemplo para generar 4 imágenes:
from byteplussdkarkruntime.types.images.images import SequentialImageGenerationOptions
prompt = """
Generate a series of four visually coherent and stylistically consistent images illustrating these stages of a human life: Child, Adolescent, Adult, and Elderly. Make sure it's the same person in the four images.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
size="2K",
sequential_image_generation="auto",
sequential_image_generation_options=SequentialImageGenerationOptions(max_images=4),
response_format="url",
watermark=False
)
Cuando usamos la generación por lotes, recibimos un formato de respuesta distinto que contiene todas las imágenes. Podemos iterar sobre ellas y descargarlas así:
# Itera por todos los datos de imágenes
for image in imagesResponse.data:
utils.download_image(image.url)
Probé esto con el siguiente prompt:
Generate a series of four visually coherent and stylistically consistent images illustrating these stages of a human life: Child, Adolescent, Adult, and Elderly. Make sure it's the same person in the four images.
Sin embargo, por alguna razón, la cuarta imagen siempre rompía la consistencia y salía como una mujer (lo intenté varias veces).

Para generar un número diferente de imágenes, basta con cambiar el valor de max_images en la solicitud a la API. Puede ser cualquier entero entre 1 y 15 (ambos inclusive). Por ejemplo, para generar 6 imágenes, haríamos:
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
size="2K",
sequential_image_generation="auto",
sequential_image_generation_options=SequentialImageGenerationOptions(max_images=6),
response_format="url",
watermark=False
)
Generación de texto
Probemos la capacidad de Seedream 4.5 para generar texto. En las pruebas, quise ver si podía generar una imagen con una demostración matemática sin especificar explícitamente el texto que quería. Esto también pone a prueba su comprensión del contexto.
Este es el prompt que usé:
Generate an image of a math professor standing in front of a blackboard. On the blackboard, there is a written proof that the square root of 2 is irrational.
Aquí está el resultado:

Quedé bastante satisfecho con el resultado. No solo la demostración era correcta, sino que el modelo manejó sin problema una gran cantidad de texto.
Editar imágenes con Seedream 4.5
En esta sección, aprendemos a editar imágenes. La forma más sencilla de editar con Seedream 4.5 es proporcionar la URL de la imagen mediante el parámetro image y describir los cambios en el prompt.
Aquí tienes un ejemplo completo de script:
from dotenv import load_dotenv
from byteplussdkarkruntime import Ark
import os
import utils
load_dotenv()
client = Ark(
base_url="https://ark.ap-southeast.bytepluses.com/api/v3",
api_key=os.getenv('ARK_API_KEY'),
)
image = "https://images.pexels.com/photos/34408249/pexels-photo-34408249.jpeg"
prompt = """
Make in snowy.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
image=image,
response_format="url",
watermark=False,
size="1664x2496"
)
image_url = imagesResponse.data[0].url
utils.download_image(image_url)
En este ejemplo, usé una foto pública en Pexels de Michael Fischer y usé Seedream 4.5 para hacerla nevada.
Esto es lo que obtuve:

Ten en cuenta que en el ejemplo anterior indicamos explícitamente el tamaño de salida, "1664x2496", para mantener la relación de aspecto de la imagen de entrada. A diferencia de la mayoría de modelos de imagen con IA, Seedream 4.5 no genera automáticamente una imagen con las mismas dimensiones que la original. Cuando omití el parámetro size, la salida fue cuadrada.
Editar imágenes locales
Usar una URL es la forma más fácil de proporcionar una imagen a Seedream 4.5. Sin embargo, es engorroso si la imagen no está alojada en algún sitio.
La API de Seedream también permite usar fácilmente una imagen local. Para ello, debemos cargarla como una imagen en base64. Aquí tienes una función para hacerlo:
import mimetypes
import base64
def load_image_as_base64(file_path):
mime_type, _ = mimetypes.guess_type(file_path)
if mime_type is None or not mime_type.startswith("image/"):
raise ValueError("File is not a recognized image type")
with open(file_path, "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
return f"data:{mime_type};base64,{encoded}"
Te recomiendo añadirla al archivo utils.py que contiene la función para descargar imágenes, así podrás usarla fácilmente en tu script principal.
Supón que tenemos una imagen local en la misma carpeta llamada motard.jpeg. Así la cargamos y editamos:
image = utils.load_image_as_base64("motard.jpeg")
prompt = """
Remove the sunglasses and add a helmet.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
image=image,
response_format="url",
watermark=False
)

Edición con múltiples imágenes de entrada
Seedream 4.5 admite varias imágenes de entrada. Se pueden usar para generar una imagen nueva combinando estilos y elementos visuales de esas imágenes.
Proporcionar varias imágenes en una solicitud a la API es tan sencillo como enviar una lista con las imágenes. Aquí tienes un ejemplo que combina la imagen de una persona y la de un conjunto de ropa para obtener a esa persona con ese atuendo:
image1 = utils.load_image_as_base64("woman.jpeg")
image2 = utils.load_image_as_base64("outfit.jpeg")
prompt = """
Make the woman from image 1 wear the outfit in image 2.
"""
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
image=[image1, image2],
response_format="url",
watermark=False,
)

Este ejemplo muestra que Seedream 4.5 es bastante bueno preservando rostros; la persona de la imagen final se parece mucho a la original. En esto otros modelos suelen flojear.
Edición con múltiples imágenes de salida
La funcionalidad de lotes que vimos arriba también funciona para la edición de imágenes, donde el número total de imágenes (entradas + salidas) no puede superar 15. Es muy útil, por ejemplo, para generar varias imágenes a partir de un visual.
Para ello, basta con combinar el parámetro image con los parámetros de generación por lotes que aprendimos. Aquí va un ejemplo de solicitud:
prompt = """
Use the given logo to create a visual design system for an outdoor hiking brand,
including backpack, hat, and shoes.
"""
image = utils.load_image_as_base64("logo.jpeg")
imagesResponse = client.images.generate(
model="seedream-4-5-251128",
prompt=prompt,
size="2K",
image=image,
sequential_image_generation="auto",
sequential_image_generation_options=SequentialImageGenerationOptions(max_images=3),
response_format="url",
watermark=False
)
Enmascarado
Algunos modelos de generación de imágenes con IA admiten enmascarado permitiendo aportar una máscara en blanco y negro para indicar qué zonas de la imagen se quieren editar. Sin embargo, Seedream 4.5 no admite parámetros de enmascarado de forma nativa.
Aun así, lo probé enviando la máscara como imagen de entrada y especificando lo que quería en el prompt para ver si lo entendía y podía emular el resultado:

Funcionó en este ejemplo, pero al no ser una función integrada del modelo, no es muy fiable. Por ejemplo, al intentar lo mismo para añadir un perro, no funcionó.
Buenas prácticas con Seedream 4.5
Como hemos visto, Seedream 4.5 ofrece buen rendimiento y algunas funciones interesantes. Para sacarle el máximo partido, ten en cuenta estas buenas prácticas.
Pautas básicas de prompting
Para obtener mejores resultados con Seedream 4.5, responde a qué quieres, para qué lo quieres y con qué estilo, manteniéndolo breve:
- Describe sujeto, acción y entorno en lenguaje claro.
- Especifica el propósito/caso de uso (logo, póster, storyboard, UI, etc.).
- Controla el estilo con palabras clave precisas o una imagen de referencia.
- Prefiere prompts concisos y precisos frente a listas largas de adjetivos.
- Pon entre comillas dobles el texto que deba aparecer en la imagen.
Pautas para la edición de imágenes
Al editar imágenes, indica exactamente qué cambios haces y qué debe permanecer sin cambios. Usa estas cuatro palabras para especificar acciones:
- Añadir
- Eliminar
- Sustituir
- Modificar
Si la escena es compleja, usar señales visuales (flechas, cajas, garabatos) para marcar regiones puede ayudar al modelo.
Cuando uses una imagen de referencia para preservar identidad, estilo o características de producto, especifica siempre:
- Objetivo de referencia: qué extraer/conservar (p. ej., diseño de personaje, material, estilo).
- Escena generada: dónde/cómo usarlo (disposición, escenario, realismo, tamaño, posición).
Pautas para lotes
Al usar múltiples imágenes de entrada, asigna roles con claridad:
- ¿Cuál aporta el sujeto, cuál el outfit/estilo/fondo?
- Refiérete a las imágenes como imagen 1, imagen 2, etc.
Aunque el modelo tiene parámetros para indicar cuántas imágenes queremos generar, es mejor reforzarlo también en el prompt:
- Pide “una serie”, “un conjunto” o indica el número exacto de imágenes.
- Úsalo para storyboards, cómics, sets de marca consistentes, packs de emojis, etc.
Conclusión
Seedream 4.5 se percibe como un generador de imágenes maduro y listo para producción que está a la altura de modelos de primer nivel como Nano Banana, ofreciendo una fidelidad comparable, buena obediencia a instrucciones y coherencia entre imágenes, manteniéndose además rentable.
Lo que más me llamó la atención es lo accesible que resulta la API en la práctica: el mismo endpoint de generación cubre creación simple, ediciones (por URL o base64), mezclas multiimagen y lotes secuenciales, y activamos cada modo ajustando un pequeño conjunto de parámetros claros.
Dicho esto, no diría que aporte innovaciones rompedoras: es una ejecución excelente de la ya familiar caja de herramientas de generación de imágenes más que un salto conceptual.
Para seguir aprendiendo
Si quieres mantener el impulso tras este recorrido, refuerza los fundamentos que hacen que los proyectos con Seedream 4.5 fluyan en producción.
Empieza con el curso Introduction to APIs in Python para dominar solicitudes autenticadas y manejo de errores, y complétalo con Image Processing in Python para gestionar redimensionado, composición y conversiones de formato en tus pipelines.
Si buscas una vía más formal hacia el ML aplicado y su tooling, el itinerario profesional AI Engineer lo une todo con flujos de trabajo para desplegar funciones de IA fiables y escalables.
Seedream 4.5: preguntas frecuentes
¿Cómo se compara Seedream 4.5 con Nano Banana?
Aunque Seedream 4.5 puede competir con la versión original de Nano Banana en coste y calidad de imagen, la nueva versión, Nano Banana 2, da a Google cierta ventaja frente a Seedream 4.5
Aun así, Seedream 4.5 destaca por su alta consistencia en lotes y salidas 4K fotorrealistas. Nano Banana brilla en razonamiento espacial rápido y edición local precisa.
¿Seedream 4.5 puede generar imágenes en alta resolución?
Sí, Seedream 4.5 puede generar imágenes en 4K.
¿Cuánto cuesta generar una imagen?
Tanto las imágenes 2K como las 4K cuestan 0,04 $ por generación a través de la API BytePlus ArkRuntime.
¿Necesito una suscripción para usar Seedream 4.5?
No. Podemos usar Seedream 4.5 mediante la API BytePlus ArkRuntime y pagar solo por las imágenes que generemos.
¿Es posible generar imágenes sin marca de agua?
Sí, configurando el parámetro watermark en False.


