Естественная петля ИИ-видео требует, чтобы конец продолжался в начале: положение, направление движения, свет и звук должны совпадать. Двух одинаковых поз недостаточно. Начните с небольшого жеста, который сам возвращается, создайте короткий план и выберите стык в редакторе. Если действие не может естественно вернуться, создайте обратное движение вторым клипом, смешайте стык или намеренно используйте воспроизведение вперёд и назад.
Seedance 2.5 image-to-video — хорошая отправная точка: планы от 4 до 30 секунд, 480p, 720p или 1080p и необязательный конечный кадр. Переключателя петли нет, поэтому стык нужно сделать самостоятельно.
Создайте жест, который может вернуться
Подготовьте референс 16:9 вымышленной взрослой женщины в полностью закрывающем тело бордовом платье у балконных перил. Покажите оба плеча, оставьте пространство вокруг волос и неподвижный городской фон. Начальная поза должна быть расслабленной. Избегайте действий, меняющих состояние сцены: опустошения чашки, снятия одежды, появления кого-то в кадре.
Скопируйте этот промпт движения:
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.
Попробуйте в Playground
- Откройте Seedance 2.5 image to video с уже заполненным промптом. Оставайтесь на вкладке Playground, в режиме Form; для запуска войдите в аккаунт с пополненным балансом.
- Добавьте референс балкона в Input image и тот же файл в Closing frame.
- Установите Duration на 6, Resolution на 480p для первого просмотра (720p для окончательного варианта), оставьте Aspect ratio на Auto, выключите Generate audio и включите Return last frame в Advanced parameters.
- Проверьте оценку цены, запустите и оцените стык, как описано ниже.
Те же настройки под названиями полей:
| Настройка | Начальное значение | Зачем |
|---|---|---|
image_url | Ваш утверждённый референс | Становится первым кадром |
last_image_url | Тот же референс | Просит похожий конечный кадр, но не гарантирует согласованное движение |
duration_seconds | 6 | Время на поворот и возвращение |
resolution | 720p | $0,2773 в секунду |
aspect_ratio | adaptive | Единственное допустимое значение; обрежьте входное изображение заранее |
generate_audio | false | Звук включён по умолчанию; добавьте атмосферу отдельно |
return_last_frame | true | Даёт последний кадр для метода двух клипов ниже |
Шесть секунд при 720p стоят $1,6638. Сделайте предпросмотр при 480p, 6 s ($0,7404), чтобы проверить движение перед запуском в 720p. Длинные планы сильнее дрейфуют, поэтому делайте единицу петли короткой и повторяйте её, вместо генерации 30 секунд.
Запуск из кода
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 --waitНастройка, загрузка локальных файлов и результаты описаны в документации CLI.
Или поручите запуск Agent. Передайте помощнику CLI выше, сервер MCP (он вызывает spicyapi_task_create) или Skill (npx skills add spicyapi-ai/spicy-skill). CLI и MCP показывают цену и спрашивают перед платным запуском.

Иллюстрация, не кадр Seedance: предложенное движение с поворотом и возвращением.
Если она поворачивается и не возвращается, упростите действие до лёгкого наклона головы, вместо добавления инструкций. Если всё изображение приближается к зрителю, уберите кинематографические формулировки о камере и используйте референс с явными неподвижными ориентирами, например углами перил. Одинаковые первый и последний кадры лишь поощряют ту же композицию; волосы, рукава и руки между ними всё равно могут закончить в другом месте.
Если один клип не возвращается: создайте обратный путь
Одинаковые начальное и конечное изображения — обычный совет, но середина плана всё равно может отклоняться. Более управляемый путь — два клипа:
- Создайте клип A из референса с включённым
return_last_frame. - Используйте последний кадр, возвращённый A, как
image_url, а исходный референс какlast_image_url, чтобы создать клип B, описав обратное движение, например: "Continuing from this frame, she turns her head and eyes back to the opening position, then holds still. Same camera, same lighting, no cut." - Соедините A и B. Последний кадр A — первый кадр B, поэтому удалите первый кадр 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.mp4Вы оплачиваете два клипа (2 x $1,6638 = $3,3276 при 6 s, 720p) и проверяете оба стыка (A с B и конец B с началом A, как описано ниже), но оба клипа привязаны к исходному референсу в точке петли.
Ищите стык по движению, а не только по позам
Разместите две копии кандидата подряд в редакторе и посмотрите границу на обычной скорости. Затем пройдите покадрово примерно пять кадров с каждой стороны, следя за ориентиром, например внешним краем плеча. Продолжает ли он двигаться в совместимом направлении?
Даже две одинаковые позиции плеча вызывают рывок, если первая копия заканчивает движением влево, а вторая начинает вправо на полной скорости. Для возвращающегося жеста выбирайте стык у спокойной точки разворота, где движение замедляется. Для непрерывного движения, например вращающегося предмета, сопоставляйте и положение, и направление.
Используйте угол фона, чтобы отличить движение камеры от жеста. Если перила и лицо меняют масштаб одновременно, обрезка по времени не уберёт наезд камеры. Если на стыке меняются лишь веки, перенесите обрезку подальше от моргания. Если у платья меняется вырез, выберите неповреждённый фрагмент или сгенерируйте заново; наплыв смешивает два разных костюма.

Иллюстрация, не кадр Seedance: похожие позы могут скрывать несовместимое движение.
Экспортируйте только выбранный диапазон. Пример сохраняет секунды с 1 до 5; замените их своими границами:
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.mp4Вторая команда лишь создаёт файл проверки из трёх циклов. -an удаляет звук; добавляйте его после утверждения изображения. Кнопка Repeat или Loop проигрывателя лишь запускает воспроизведение заново и не скрывает заметный стык, поэтому используйте loop.mp4 как повторяемую единицу.
Смешайте стык, если осталось небольшое расхождение
Короткий перекрёстный наплыв может смягчить небольшую разницу яркости или позы. Он не восстановит исчезнувший объект и не предотвратит двойную экспозицию лица. Команда ниже смешивает последние 0,5 секунды клипа длиной 6 секунд при 24 fps с его первыми 0,5 секунды, чтобы последний кадр петли переходил прямо в первый. Результат длится 5,5 секунды:
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.mp4Для другой длины D и перекрытия X используйте trim=start=D-X:end=D для конца, trim=start=0:end=X для начала и trim=start=X:end=D-X для середины, с duration=X в xfade. Впишите вычисленные числа в команду. Начните с перекрытия от 8 до 12 кадров. Если глаза превращаются в две пары или пальцы оставляют прозрачные следы, сократите перекрытие или откажитесь от смешивания.

Иллюстрация, не кадр Seedance: несовмещённое смешивание удваивает черты лица.
Смешивание подходит для почти неподвижного портрета. Для большого поворота головы, перекрывающихся рук или движения камеры это плохой выбор. Если проблема в небольшой смене экспозиции, выровняйте оба конца перед смешиванием; если меняется геометрия, вернитесь к выбору исходника.
Сделайте намеренный бумеранг, если обратное движение уместно
Петля вперёд-назад подходит для мягкого наклона головы. Не используйте её для речи, ходьбы вперёд, падающих волос, наливания воды или руки, кладущей предмет: обратная причинность заметна.
Команда берёт первые пять секунд при 24 fps, проигрывает кадры от 0 до 119 вперёд, затем от 118 до 1 назад, удаляя дублированные крайние кадры, которые иначе создали бы краткую паузу:
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.mp4Исходнику нужно не менее пяти секунд видео; выход содержит 238 кадров, около 9.9 секунды. Выбирайте исходник, который медленно движется у крайних точек, иначе смена направления всё ещё выглядит резкой. Фильтр reverse буферизует всё, что обрабатывает, поэтому сначала обрежьте короткий фрагмент (документация фильтров FFmpeg).
Добавляйте звук после готовности изображения
Для беззвучного предпросмотра профиля оставьте петлю без звука. Для атмосферы положите отдельный фон помещения или города под несколько циклов, сделайте наплыв между концами атмосферы независимо от изображения и послушайте переход повтора в наушниках. Чтобы сделать фон втрое длиннее с плавными стыками, соедините наплывом копии одного файла атмосферы (каждый стык сокращает результат на одну секунду):
ffmpeg -i bed.wav -i bed.wav -i bed.wav -filter_complex "[0][1]acrossfade=d=1[x];[x][2]acrossfade=d=1" bed3.wavНе воспроизводите речь в обратном порядке и не привязывайте отдельное заметное звуковое событие к каждому повтору, если это не задумано.
Перед передачей проверьте файл из трёх циклов в размере показа: сброс камеры, скачок одежды, двойное лицо или щелчок звука. Если портрет стабилен, но одна деталь фона не зацикливается, альтернатива — синемаграф с маской: сохраните утверждённый неподвижный портрет и анимируйте лишь отдельную область занавески или света. Это композитинг вокруг статичного человека, а не бесшовное сгенерированное исполнение.






