ES
BIBLIOTECA SEEDANCE / 04
BytePlus · ModelArkSeedance 2.0 y 2.5

Biblioteca privada de personajes.

De tus referencias a una escena: crea grupos, prepara personajes y genera vídeo.

Guía de CloudCLI incorporada y revisada en español, con ejemplos propios y comparación técnica.
Fuentes consultadas el 27 de septiembre de 2026.

Comparación: CloudCLI y BytePlus

Coinciden en el flujo de trabajo y en las diez operaciones de la biblioteca. La revisión distingue diferencias de presentación, aclaraciones del servicio y ajustes de los ejemplos.

AspectoGuía de CloudCLIResultado de la revisión
Idioma y repeticiónHay bloques en inglés intercalados y repetidos.Se conserva una única explicación en español por tema.
Capacidad de la bibliotecaPide activar derechos avanzados; no explica la cuota compartida.BytePlus indica que la capacidad se comparte con retratos reales.
Foto del rostroRecomienda iluminación clara y ausencia de oclusiones.BytePlus concreta: rostro frontal neutro, hombros visibles y cara ocupando aproximadamente dos tercios.
Procesamiento y paginaciónYa incluye estados, NextToken y LastInferenceTime.Coinciden. Se reorganizan; no se presentan como funciones ausentes.
Modelo de los ejemplosLos ejemplos fijan Seedance 2.0.BytePlus también utiliza 2.0 en ejemplos. Aquí el modelo se configura, sin atribuir esos identificadores a 2.5.
Código cURLEl bloque separa comandos y pierde comillas necesarias.Se ofrece un ejemplo nuevo con cabeceras entre comillas y cuerpo JSON en un archivo.
Imágenes de referenciaUna captura de IAM queda mezclada con cinco referencias creativas.La captura pasa a Permisos. Las cinco referencias conservan su propio orden.
PermisosLa política propuesta usa ark:*Asset* sobre todos los recursos.Incluye operaciones de eliminación. Se explica su alcance antes de mostrar el ejemplo.
Tipos de datosUsa AIGC y los tipos de archivo en apartados distintos.Se distinguen GroupType (clase de grupo) y AssetType (Image, Video o Audio).

La comparación se refiere a las páginas enlazadas, consultadas en la misma fecha. Los bloques de código de esta versión son ejemplos propios.

Tu biblioteca de personajes virtuales

Guarda referencias privadas para reutilizar personajes en Seedance 2.0 y 2.5. Cada archivo tiene un identificador y pertenece a un grupo.

El acceso completo requiere los derechos de creación avanzada. La capacidad se comparte con la biblioteca de retratos reales. Los personajes virtuales deben ser propios, respetar derechos de terceros y no reproducir la identidad de personas reales.

  1. 01Crea un grupo
  2. 02Añade referencias
  3. 03Comprueba el estado
  4. 04Genera tu escena

Biblioteca privada de retratos virtuales · documento original ↗

Ver el esquema de la guía de referencia
Esquema original: activar derechos, crear grupo, subir recurso, consultar estado y generar vídeo.
Esquema original: activar derechos, crear grupo, subir recurso, consultar estado y generar vídeo.

El gráfico conserva los nombres de la interfaz original. Los pasos están explicados en español en esta página.

Grupos, recursos e identificadores

Grupo de recursos

Reúne las referencias de un personaje. Guarda su identificador como GroupId.

Recurso

Es un archivo concreto. Su Id identifica la imagen, el vídeo o el audio.

Referencia del prompt

«Imagen 1» describe su posición en la solicitud, no el nombre guardado en la biblioteca.

GroupType: AIGC corresponde al grupo de personajes virtuales. No equivale a AssetType, que indica el formato de recurso.

Ejemplo de organización: el grupo «Luna» contiene «rostro frontal», «vestuario azul» y «voz tranquila». Cada archivo conserva un identificador diferente.

Preparar las referencias visuales

Referencia de cuerpo entero: vista frontal, encuadre vertical y figura completa.
Referencia de cuerpo entero: vista frontal, encuadre vertical y figura completa.
Referencia del rostro: vista frontal neutra, hombros visibles y cara ocupando cerca de dos tercios del encuadre.
Referencia del rostro: vista frontal neutra, hombros visibles y cara ocupando cerca de dos tercios del encuadre.

Utiliza versiones coherentes del mismo personaje. Nombra cada archivo por su función para distinguir fácilmente apariencia, vestuario y voz.

Recomendaciones de retratos de BytePlus ↗

Empezar desde la consola

En Model Playground, abre Mis recursos → Retrato virtual → Gestionar recursos. Crea un grupo y sube sus archivos. La plataforma los revisa antes de permitir su uso.

Una organización útil: un grupo por personaje y nombres que distingan la vista, el vestuario y la versión. Por ejemplo, «Luna / frontal / chaqueta azul / v2».

Abrir Model Playground ↗

Consola: Mis recursos → Retrato virtual → Gestionar recursos.
Consola: Mis recursos → Retrato virtual → Gestionar recursos.

En la interfaz original, estas opciones aparecen como My assets, Virtual Portrait y Manage assets.

Archivos admitidos

RecursoFormatoLímites por archivo
ImagenJPEG, PNG, WebP, TIFF, GIF, HEIC/HEIFMenos de 30 MB; 300 < ancho y alto < 6000 px; 0,4 < ancho/alto < 2,5.
VídeoMP4, MOV2–30 s; hasta 200 MB; 24–60 fps; 480p–4K. Ancho y alto: 300–6000 px; proporción: 0,4–2,5; píxeles totales: 407.696–8.295.044.
AudioWAV, MP32–30 s; hasta 15 MB.

La API recibe una URL accesible, no Base64. Comprueba también los límites de entrada del modelo elegido.

Formatos y parámetros de CreateAsset ↗

Crear el grupo y añadir recursos

Operación · POSTUso
CreateAssetGroupCrear grupo
CreateAssetSubir un recurso
ListAssetGroupsBuscar grupos
ListAssetsBuscar recursos
GetAssetConsultar un recurso
GetAssetGroupConsultar un grupo
UpdateAssetGroupCambiar nombre o descripción del grupo
UpdateAssetCambiar nombre del recurso
DeleteAssetEliminar un recurso
DeleteAssetGroupEliminar un grupo y su contenido

CreateAssetGroup utiliza autenticación AK/SK. Antes del primer grupo, BytePlus pide completar la autorización en su consola. Name admite 64 caracteres y Description, 300. Para personajes virtuales, usa GroupType: AIGC.

Indica ProjectName en todas las operaciones si no utilizas el proyecto default. Conserva el Id devuelto: identifica al grupo.

Ejemplo propio: cuerpo de CreateAssetGroup

{
  "Name": "Luna — temporada 1",
  "Description": "Referencias del personaje virtual Luna",
  "GroupType": "AIGC",
  "ProjectName": "default"
}

Crear un grupo · CreateAssetGroup ↗

En CreateAsset, envía GroupId, URL y AssetType: Image, Video o Audio. El nombre sirve para localizar el archivo; no describe al personaje al modelo. La carga es asíncrona y puede tardar, especialmente con vídeo.

Ejemplo propio: cuerpo de CreateAsset

{
  "GroupId": "REEMPLAZA_POR_EL_ID_DEL_GRUPO",
  "URL": "https://tu-dominio.example/luna-frontal.png",
  "Name": "Luna frontal v2",
  "AssetType": "Image",
  "ProjectName": "default"
}

Son cuerpos de solicitud, no peticiones listas para ejecutar. Sustituye los valores de ejemplo y envíalos con el SDK de BytePlus, que firma las llamadas AK/SK. Mantén las credenciales en tu servidor.

Moderation.Strategy admite Default y Skip. El segundo omite parte del prefiltrado, no todas las comprobaciones. Los ejemplos de esta guía conservan la revisión predeterminada.

Esperar a que el recurso esté listo

Consulta GetAsset con el Id del recurso y su ProjectName. La respuesta distingue tres estados:

Processing

En procesamiento. Espera y vuelve a consultar.

Active

Listo para usar como referencia.

Failed

Ha fallado. Revisa Error.Code y Error.Message.

La URL de acceso que devuelve esta consulta caduca a las 12 horas. LastInferenceTime indica la última solicitud de generación que utilizó el recurso; su actualización puede tardar 1–2 minutos. Que el campo no aparezca no demuestra que nunca se haya usado: solo recoge invocaciones posteriores al 24 de julio de 2026.

Lógica de consulta

# Pseudocódigo: adapta consultar_recurso a tu SDK.
limite = ahora() + 600
while ahora() < limite:
    recurso = consultar_recurso(id_recurso, proyecto)
    if recurso["Status"] == "Active":
        return id_recurso
    if recurso["Status"] == "Failed":
        raise Error(recurso.get("Error"))
    esperar(5)
raise Error("El recurso sigue procesándose; consulta de nuevo más tarde")

Consultar estado y errores · GetAsset ↗

Usar el personaje en un vídeo

Introduce asset://ID_DEL_RECURSO en el campo de URL de la referencia. En el texto del prompt, identifica los recursos por tipo y posición: «Imagen 1», «Vídeo 1» o «Audio 1». La numeración se cuenta por separado dentro de cada tipo. No escribas el Asset ID como nombre del personaje.

La generación utiliza la clave de la API de ModelArk. Los recursos se envían en content, junto con sus roles, y la creación devuelve una tarea que debes consultar hasta que termine.

Ejemplo propio de prompt

La Imagen 1 define el rostro de Luna y la Imagen 2, su vestuario. Luna entra en un taller iluminado por la luz de la mañana, deja una pequeña caja sobre la mesa y mira a cámara. Plano medio, acercamiento lento y movimiento natural. Dice en español: «Hoy vamos a construir algo diferente». Mantén la apariencia de ambas referencias. Sonido ambiente de taller y voz clara, sin música.

Ejemplo propio de contenido de la solicitud

{
  "model": "REEMPLAZA_POR_TU_MODELO_O_ENDPOINT",
  "content": [
    {"type": "text", "text": "El personaje de la Imagen 1 saluda a cámara y dice: Hola, soy Luna."},
    {
      "type": "image_url",
      "image_url": {"url": "asset://REEMPLAZA_POR_EL_ID_ACTIVO"},
      "role": "reference_image"
    }
  ],
  "generate_audio": true,
  "duration": 5,
  "ratio": "16:9",
  "watermark": true
}

Sustituye ambos identificadores y usa un endpoint del mismo proyecto que el recurso. El ejemplo es una plantilla editable; esta web no ejecuta generaciones ni solicita claves.

Uso de referencias de personajes en la generación ↗

Ejemplo completo en Python: generar y consultar
import os
import time
from arkruntime import Ark

# Instala el SDK con: pip install arkruntime
# Define ARK_API_KEY, ARK_MODEL_ID y ARK_ASSET_ID en tu entorno.
# ARK_ASSET_ID debe contener el ID de un recurso en estado Active.
cliente = Ark(
    base_url="https://ark.ap-southeast.bytepluses.com/api/v3",
    api_key=os.environ["ARK_API_KEY"],
)
recurso_id = os.environ["ARK_ASSET_ID"]
tarea = cliente.content_generation.tasks.create(
    model=os.environ["ARK_MODEL_ID"],
    content=[
        {"type": "text", "text": "Plano medio horizontal del personaje de la Imagen 1. Saluda a cámara y dice en español: Hola, soy Luna. Luz suave y fondo de taller."},
        {"type": "image_url", "role": "reference_image",
         "image_url": {"url": f"asset://{recurso_id}"}},
    ],
    duration=5,
    ratio="16:9",
    generate_audio=True,
    watermark=True,
)
print("Tarea creada:", tarea.id)
limite = time.monotonic() + 600
while time.monotonic() < limite:
    resultado = cliente.content_generation.tasks.get(task_id=tarea.id)
    if resultado.status == "succeeded":
        print("Vídeo terminado:", resultado.content)
        break
    if resultado.status == "failed":
        raise RuntimeError(f"La generación ha fallado: {resultado.error}")
    print("Estado:", resultado.status)
    time.sleep(10)
else:
    raise TimeoutError(f"La tarea sigue pendiente. Conserva su ID: {tarea.id}")
Ejemplo cURL: enviar la solicitud

Guarda el JSON anterior como solicitud-personaje.json, sustituye modelo y recurso, y configura ARK_API_KEY. La petición devuelve el identificador de la tarea.

curl --fail-with-body --request POST \
  "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
  --header "Authorization: Bearer ${ARK_API_KEY}" \
  --header "Content-Type: application/json" \
  --data-binary @solicitud-personaje.json

Ejemplo con cinco imágenes y una voz

Estas son las cinco referencias visuales de la guía. La voz es una referencia de audio independiente y conserva su propia numeración.

Imagen 1 · Personaje A
Imagen 1 · Personaje A
Imagen 2 · Vestuario
Imagen 2 · Vestuario
Imagen 3 · Personaje B
Imagen 3 · Personaje B
Imagen 4 · Entorno
Imagen 4 · Entorno
Imagen 5 · Rótulo
Imagen 5 · Rótulo
Imagen 1: personaje A. Imagen 2: vestuario del personaje B. Imagen 3: personaje B. Imagen 4: calle y ambiente de lluvia. Imagen 5: rótulo de cierre. Audio 1: referencia de voz del personaje A. Crea una escena breve: A espera bajo un portal; B llega con la prenda de la Imagen 2. A abre un paraguas y dice en español «Llegas justo a tiempo», tomando como referencia la voz del Audio 1. Ambos se alejan por la calle de la Imagen 4. Mantén los rostros de las Imágenes 1 y 3 y termina con el rótulo de la Imagen 5. Sonido de lluvia, conversación clara y cámara a la altura de los ojos.

Prompt propio para explicar la asignación. Las imágenes proceden de la guía enlazada; los identificadores reales deben obtenerse desde tu biblioteca.

Buscar recursos y recorrer resultados

ListAssets permite combinar filtros de grupo, nombre y estado. Para personajes virtuales, utiliza Filter.GroupType: AIGC. Con Statuses: ["Active"] recuperas referencias listas para usar.

Para paginar, comienza con MaxResults y sin NextToken. Si la respuesta incluye un token, envíalo sin modificar en la siguiente petición. Termina cuando deje de aparecer. Mantén los mismos filtros, proyecto y orden. No combines este método con PageNumber y PageSize.

{
  "Filter": {"GroupType": "AIGC", "Statuses": ["Active"], "Name": "Luna"},
  "MaxResults": 20,
  "SortBy": "CreateTime",
  "SortOrder": "Desc",
  "ProjectName": "default"
}

Buscar referencias · ListAssets ↗

Para localizar grupos, usa ListAssetGroups. Puedes filtrar por nombre o identificadores y aplicar paginación con NextToken. Cada token corresponde a una API, cuenta y proyecto concretos: no lo reutilices en otra consulta distinta.

Buscar grupos · ListAssetGroups ↗

Ejemplo en Go: crear y consultar

Un único programa permite ejecutar los cinco pasos de creación y consulta de la guía. Guarda el cuerpo JSON de cada operación en un archivo distinto. Configura las claves AK/SK mediante las variables de entorno indicadas en el código.

Ver programa en Go
package main

import (
    "encoding/json"
    "fmt"
    "os"

    "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus"
    "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/credentials"
    "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/session"
    "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/universal"
)

func ejecutar() error {
    ak, sk := os.Getenv("BYTEPLUS_ACCESS_KEY"), os.Getenv("BYTEPLUS_SECRET_KEY")
    if ak == "" || sk == "" {
        return fmt.Errorf("configura BYTEPLUS_ACCESS_KEY y BYTEPLUS_SECRET_KEY")
    }
    if len(os.Args) != 3 {
        return fmt.Errorf("uso: go run . ACCION cuerpo.json")
    }
    // Este ejemplo se limita a creación y consulta.
    permitidas := map[string]bool{
        "CreateAssetGroup": true, "CreateAsset": true,
        "GetAsset": true, "ListAssets": true, "ListAssetGroups": true,
    }
    accion := os.Args[1]
    if !permitidas[accion] {
        return fmt.Errorf("acción no incluida en este ejemplo: %s", accion)
    }
    contenido, err := os.ReadFile(os.Args[2])
    if err != nil { return err }
    var cuerpo map[string]any
    if err = json.Unmarshal(contenido, &cuerpo); err != nil { return err }

    configuracion := byteplus.NewConfig().
        WithRegion("ap-southeast-1").
        WithCredentials(credentials.NewStaticCredentials(ak, sk, ""))
    sesion, err := session.NewSession(configuracion)
    if err != nil { return err }
    resultado, err := universal.New(sesion).DoCall(universal.RequestUniversal{
        ServiceName: "ark", Action: accion, Version: "2024-01-01",
        HttpMethod: universal.POST, ContentType: universal.ApplicationJSON,
    }, &cuerpo)
    if err != nil { return err }
    salida, err := json.MarshalIndent(resultado, "", "  ")
    if err != nil { return err }
    fmt.Println(string(salida))
    return nil
}

func main() {
    if err := ejecutar(); err != nil {
        fmt.Fprintln(os.Stderr, "La solicitud ha fallado:", err)
        os.Exit(1)
    }
}

Preparación

# En una carpeta nueva para el ejemplo:
go mod init ejemplo-personajes
go get github.com/byteplus-sdk/byteplus-go-sdk-v2
# Guarda el programa anterior como main.go.
# Configura las variables BYTEPLUS_ACCESS_KEY y BYTEPLUS_SECRET_KEY.
go run . CreateAssetGroup grupo.json

Después, reutiliza el programa con CreateAsset, GetAsset, ListAssets o ListAssetGroups. Cada llamada requiere el cuerpo correspondiente.

Cuerpo de GetAsset

{
  "Id": "REEMPLAZA_POR_EL_ID_DEL_RECURSO",
  "ProjectName": "default"
}

Cuerpo de ListAssetGroups

{
  "Filter": {
    "GroupType": "AIGC",
    "Name": "Luna"
  },
  "MaxResults": 20,
  "SortBy": "CreateTime",
  "SortOrder": "Desc",
  "ProjectName": "default"
}

Autenticación y creación de grupos ↗

Consulta de recursos ↗

Consulta de grupos ↗

Consultar, actualizar y eliminar

OperaciónPara qué sirve
GetAssetGroupConsultar nombre, descripción, tipo, proyecto y fechas de un grupo mediante su Id.
UpdateAssetCambiar el nombre de un recurso: Id, Name y ProjectName.
UpdateAssetGroupCambiar el nombre o la descripción del grupo: Id, Name, Description y ProjectName.
DeleteAssetEliminar definitivamente un recurso. Deja de estar disponible para generar vídeos.
DeleteAssetGroupEliminar definitivamente el grupo y todos sus recursos. Los grupos grandes pueden tardar más.

Antes de limpiar una biblioteca, relaciona los identificadores con tus escenas y proyectos. Conserva los archivos originales y comprueba qué referencias siguen utilizándose.

Permisos IAM

La guía incluye una política de administración de recursos. Es un ejemplo amplio: permite las acciones cuyo nombre coincide con ark:*Asset*, incluidas las de eliminación, sobre todos los recursos.

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ark:*Asset*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

En IAM, crea una política, asígnala al usuario o grupo correspondiente y limita el proyecto cuando proceda. Para tareas de consulta, utiliza una política que conceda únicamente las operaciones necesarias.

Captura original de creación de una política IAM. Está separada de las referencias del personaje.
Captura original de creación de una política IAM. Está separada de las referencias del personaje.

Gestión de permisos en la documentación original ↗

Límites de solicitudes

Por cuenta: GetAsset, 100 solicitudes/s; DeleteAssetGroup, 5/s; creación de grupos, listados, consultas de grupos y actualizaciones, 10/s; DeleteAsset, 10/s. La cuota de CreateAsset depende de los derechos contratados.

Distribuye las consultas en el tiempo y aplica espera entre reintentos. Subir un recurso y generar un vídeo son operaciones distintas: espera a que la referencia esté preparada antes de enviar la escena.

Cuotas de la biblioteca privada ↗

Resolver los problemas habituales

Si no encuentras un recurso o la generación no puede utilizarlo, comprueba que biblioteca y endpoint pertenezcan al mismo proyecto. Los permisos se administran mediante IAM.

Comprobación rápida

  • Identificador correcto: distingue el grupo del archivo concreto.
  • Estado listo: espera a que termine el procesamiento.
  • Referencia correcta: revisa su posición en la lista y la mención del prompt.
  • Proyecto correcto: utiliza el mismo valor en cada paso.
  • Permisos correctos: asigna solo las operaciones que necesite cada usuario.

Para diagnosticar un fallo, guarda la operación, el identificador de solicitud y el mensaje de error. Evita incluir claves secretas en los registros.