Un bucle natural de vídeo con IA necesita que el final continúe en el principio: posición, dirección del movimiento, iluminación y sonido. Igualar dos poses no basta. Empieza con un gesto pequeño que vuelva por sí solo, genera un plano corto y elige la unión en un editor. Si la acción no puede volver de forma natural, genera el regreso como segundo clip, funde la unión o acepta un efecto deliberado de avance y retroceso.
Seedance 2.5 image-to-video es un buen punto de partida: planos de 4 a 30 segundos, 480p, 720p o 1080p y un fotograma final opcional. No tiene interruptor de bucle, así que resolver la unión es tarea tuya.
Genera un gesto que pueda volver
Prepara una referencia 16:9 de una mujer adulta ficticia con un vestido burdeos que la cubra por completo, junto a la barandilla de un balcón. Muestra ambos hombros, deja espacio alrededor del pelo y mantén inmóvil el fondo de la ciudad. Usa una pose inicial relajada. Evita acciones que cambien el estado de la escena: vaciar una taza, quitarse una prenda o entrar en el encuadre.
Copia este prompt de movimiento:
One continuous six-second medium portrait of this fictional adult woman on the balcony. She slowly turns her gaze from the city toward the viewer, holds a soft smile briefly, then returns her head and eyes to the opening position. Her hands stay where they are. The camera stays at the same position and scale. Stable dusk illumination, a still background, very slight hair movement. No cut, no zoom, no new objects, no dialogue.
Pruébalo en el Playground
- Abre Seedance 2.5 image to video con este prompt ya rellenado. Permanece en la pestaña Playground, en la vista Form; inicia sesión con una cuenta con saldo para ejecutarlo.
- Añade la referencia del balcón en Input image y el mismo archivo en Closing frame.
- Configura Duration en 6 y Resolution en 480p para la primera prueba (720p para la versión que conservarás), deja Aspect ratio en Auto, desactiva Generate audio y, en Advanced parameters, activa Return last frame.
- Revisa el precio estimado, ejecuta la tarea y evalúa la unión como se describe abajo.
Los mismos controles con sus nombres de campo:
| Control | Valor inicial | Motivo |
|---|---|---|
image_url | Tu referencia aprobada | Se convierte en el primer fotograma |
last_image_url | La misma referencia | Pide una imagen final similar; no garantiza un movimiento que encaje |
duration_seconds | 6 | Espacio para el giro y el regreso |
resolution | 720p | $0,2773 por segundo |
aspect_ratio | adaptive | El único valor admitido; recorta la entrada antes |
generate_audio | false | El audio está activado por defecto; añade ambiente por separado |
return_last_frame | true | Entrega el último fotograma para el método de dos clips de abajo |
Seis segundos a 720p cuestan $1,6638. Haz una vista previa a 480p, 6 s ($0,7404), para comprobar el movimiento antes de generar a 720p. Los planos más largos presentan más deriva; mantén corta la unidad del bucle y repítela en vez de generar 30 segundos.
Ejecútalo desde código
cat > input.json <<'J'
{
"prompt": "One continuous six-second medium portrait of this fictional adult woman on the balcony. She slowly turns her gaze from the city toward the viewer, holds a soft smile briefly, then returns her head and eyes to the opening position. Her hands stay where they are. The camera stays at the same position and scale. Stable dusk illumination, a still background, very slight hair movement. No cut, no zoom, no new objects, no dialogue.",
"image_url": "<your reference image URL>",
"last_image_url": "<the same reference image URL>",
"duration_seconds": 6,
"resolution": "720p",
"aspect_ratio": "adaptive",
"generate_audio": false,
"return_last_frame": true
}
J
spicyapi tasks create --model bytedance/seedance-2.5/image-to-video --input-file input.json --waitLa configuración, la carga de archivos locales y los resultados se explican en la documentación de la CLI.
O deja que un Agent lo ejecute. Dale a tu asistente la CLI anterior, el servidor MCP (llama a spicyapi_task_create) o el Skill (npx skills add spicyapi-ai/spicy-skill). La CLI y MCP muestran el precio y preguntan antes de una ejecución de pago.

Ilustración, no un fotograma de Seedance: una propuesta de giro y regreso.
Si gira y no vuelve, simplifica la acción a una pequeña inclinación de cabeza en vez de añadir instrucciones. Si toda la imagen avanza hacia el espectador, elimina el lenguaje cinematográfico sobre la cámara y usa una referencia con anclajes fijos claros, como las esquinas de la barandilla. Unas imágenes inicial y final idénticas solo favorecen la misma composición; el pelo, las mangas y las manos pueden acabar en otro lugar.
Si un solo clip no vuelve: genera el regreso
Usar imágenes inicial y final idénticas es el consejo habitual, pero el tramo intermedio aún puede desviarse. Una opción más controlable es usar dos clips:
- Genera el clip A a partir de tu referencia con
return_last_frameactivado. - Usa el último fotograma devuelto por A como
image_urly la referencia original comolast_image_urlpara generar el clip B, describiendo el regreso, por ejemplo: "Continuing from this frame, she turns her head and eyes back to the opening position, then holds still. Same camera, same lighting, no cut." - Une A y B. El último fotograma de A es el primero de B, así que elimina el primer fotograma de B:
ffmpeg -i A.mp4 -i B.mp4 -filter_complex "[1:v]trim=start_frame=1,setpts=PTS-STARTPTS[b];[0:v][b]concat=n=2:v=1:a=0" -an AB.mp4Pagas dos clips (2 x $1,6638 = $3,3276 a 6 s, 720p) y debes comprobar ambas uniones (de A a B y del final de B al inicio de A, como se explica abajo), pero ambos clips quedan anclados a la referencia original en el punto del bucle.
Encuentra la unión observando el movimiento, no solo las poses
Coloca dos copias del candidato seguidas en tu editor y mira el límite a velocidad normal. Después avanza fotograma a fotograma unos cinco a cada lado, siguiendo una referencia como el extremo del hombro. ¿Sigue moviéndose en una dirección compatible?
Dos posiciones de hombro idénticas aún producen un salto si la primera copia termina moviéndose a la izquierda y la segunda empieza hacia la derecha a toda velocidad. Para un gesto que regresa, elige la unión cerca del punto de retorno relajado, donde el movimiento se ralentiza. Para un movimiento continuo, como un objeto que gira, iguala también posición y dirección.
Usa una esquina del fondo para distinguir un movimiento de cámara de un gesto. Si la barandilla y el rostro cambian de escala a la vez, recortar el tiempo no elimina ese avance de cámara. Si solo cambian los párpados en la unión, aleja el corte del parpadeo. Si cambia el escote del vestido, elige una sección intacta o vuelve a generar; un fundido mezcla dos vestuarios distintos.

Ilustración, no un fotograma de Seedance: poses similares pueden ocultar movimientos incompatibles.
Exporta solo el intervalo elegido. Este ejemplo conserva los segundos 1 a 5; sustitúyelos por tus límites:
ffmpeg -i input.mp4 \
-vf "trim=start=1:end=5,setpts=PTS-STARTPTS" \
-an -c:v libx264 -crf 18 -pix_fmt yuv420p loop.mp4
ffmpeg -stream_loop 2 -i loop.mp4 -c copy review-three-cycles.mp4El segundo comando solo crea un archivo de revisión de tres ciclos. -an elimina el audio; añade sonido cuando apruebes la imagen. El control Repeat o Loop de un reproductor solo reinicia la reproducción y no oculta una unión visible, así que utiliza loop.mp4 como unidad repetida.
Funde la unión si queda una pequeña diferencia
Un fundido cruzado corto puede suavizar una pequeña diferencia de brillo o pose. No puede recuperar un objeto desaparecido ni evitar una doble exposición del rostro. El comando siguiente funde los últimos 0,5 segundos de un clip de 6 segundos a 24 fps con sus primeros 0,5 segundos, para que el último fotograma del bucle continúe directamente en el primero. El resultado dura 5,5 segundos:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]split=3[a][b][c];\
[a]trim=start=5.5:end=6,setpts=PTS-STARTPTS[tail];\
[b]trim=start=0:end=0.5,setpts=PTS-STARTPTS[head];\
[c]trim=start=0.5:end=5.5,setpts=PTS-STARTPTS[mid];\
[tail][head]xfade=transition=fade:duration=0.5:offset=0[xf];\
[xf][mid]concat=n=2:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -an -c:v libx264 -crf 18 blended-loop.mp4Para otra duración D y solapamiento X, usa trim=start=D-X:end=D para el final, trim=start=0:end=X para el inicio y trim=start=X:end=D-X para el centro, con duration=X en xfade. Escribe los números calculados en el comando. Empieza con 8 a 12 fotogramas de solapamiento. Si los ojos se duplican o los dedos dejan estelas transparentes, acorta el solapamiento o abandona el fundido.

Ilustración, no un fotograma de Seedance: un fundido desalineado duplica los rasgos faciales.
El fundido funciona para un retrato casi inmóvil. Es una mala opción para un giro de cabeza amplio, manos superpuestas o movimiento de cámara. Si el problema es un pequeño cambio de exposición, iguala ambos extremos antes de fundir; si cambia la geometría, vuelve a seleccionar el material fuente.
Crea un bumerán deliberado cuando la inversión encaje
Un bucle de avance y retroceso funciona para una inclinación suave de cabeza. No lo uses para hablar, caminar hacia delante, pelo que cae, verter agua o una mano que deja un objeto: la causalidad invertida se nota.
El comando toma los primeros cinco segundos a 24 fps, reproduce los fotogramas 0 a 119 hacia delante y luego 118 a 1 hacia atrás, eliminando los fotogramas extremos duplicados que crearían una pausa breve:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]fps=24,trim=start_frame=0:end_frame=120,setpts=PTS-STARTPTS,split[f][r];[r]reverse,trim=start_frame=1:end_frame=119,setpts=PTS-STARTPTS[back];[f][back]concat=n=2:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -an -c:v libx264 -crf 18 boomerang.mp4La fuente debe tener al menos cinco segundos de vídeo; la salida tiene 238 fotogramas, unos 9.9 segundos. Elige una fuente que se mueva despacio en sus extremos o el cambio de dirección seguirá siendo brusco. El filtro reverse almacena todo lo que procesa, así que recorta primero un tramo corto (documentación de filtros de FFmpeg).
Añade sonido cuando la imagen funcione
Para una vista previa silenciosa de perfil, mantén el bucle sin sonido. Para el ambiente, coloca una pista separada de sonido de sala o ciudad bajo varios ciclos, funde sus extremos independientemente de la imagen y escucha la repetición con auriculares. Para crear una pista tres veces más larga con uniones suaves, funde copias de un archivo de ambiente (cada unión acorta el resultado un segundo):
ffmpeg -i bed.wav -i bed.wav -i bed.wav -filter_complex "[0][1]acrossfade=d=1[x];[x][2]acrossfade=d=1" bed3.wavNo inviertas el habla ni asocies un evento sonoro distintivo a cada repetición salvo que sea intencionado.
Antes de entregar, revisa el archivo de tres ciclos a su tamaño de visualización para detectar reinicios de cámara, saltos de ropa, rostro duplicado o clics de audio. Si el retrato es estable pero un detalle del fondo no forma un bucle, una cinemagrafía con máscara es la alternativa: conserva un retrato fijo aprobado y anima solo una zona separada de cortina o luz. Es composición alrededor de un sujeto estático, no una actuación generada sin uniones visibles.






