Перейти до основного вмісту
З поширенням застосування ШІ, різноманітні програми на базі ШІ поступово стають звичними. ШІ все більше проникає в усі сфери життя людей. А галузі, пов’язані з ШІ, також стають дедалі різноманітнішими, починаючи з письма, медицини та освіти, і закінчуючи сьогоднішніми відео. Luma — це професійна платформа для генерації високоякісних відео, де користувачам потрібно лише завантажити матеріали, і на основі різних стилів та ефектів автоматично генеруються високоякісні відео. Цей генератор відео на базі ШІ розроблений командою з відомих технологічних компаній, мета якої — дозволити кожному легко створювати чудові відео без складних інструментів редагування. Однак Luma офіційно не надає API, AceDataCloud пропонує набір API Luma, який імітує інтеграцію з офіційним Suno, що дозволяє швидко та зручно генерувати бажані відео.

Заявка та використання

Щоб використовувати Luma Videos API, спочатку перейдіть на сторінку Luma Videos Generation API і натисніть кнопку «Acquire», щоб отримати необхідні для запиту облікові дані: Якщо ви ще не увійшли в систему або не зареєстровані, вас автоматично перенаправлять на сторінку входу, запрошуючи вас зареєструватися та увійти. Після входу або реєстрації ви автоматично повернетеся на цю сторінку. При першій заявці буде надано безкоштовний ліміт, який дозволяє безкоштовно використовувати цей API.

Основне використання

Щоб згенерувати відео, ви можете ввести будь-який текст, наприклад, якщо я хочу згенерувати відео про астронавтів, які переміщуються між космосом і вулканом, я можу ввести Astronauts shuttle from space to volcano, як показано на малюнку:

Згенерований код виглядає так:

Основні параметри запиту:
  • prompt: підказка для генерації відео.
  • aspect_ratio: співвідношення сторін відео, за замовчуванням 16:9.
  • end_image_url: необов’язковий, вказує на кінцевий кадр.
  • enhancement: необов’язковий, перемикач покращення чіткості.
  • loop: чи генерувати циклічне відео, за замовчуванням false.
  • timeout: необов’язковий, кількість секунд до тайм-ауту.
  • callback_url: адреса асинхронного зворотного виклику.
Ви можете натиснути кнопку «Try», щоб безпосередньо протестувати API, почекайте 1-2 хвилини, результат буде таким:
{
  "success": true,
  "task_id": "e4018a99-1522-4f24-9330-62c2a9b50b59",
  "video_id": "155838f8-7f1e-44d8-b387-192f3b4b509d",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://storage.cdn-luma.com/dream_machine/af94e7ca-da35-4b5f-a636-2d7254184d0d/watermarked_video0585de3737db946e5a0ac895384ecd180.mp4",
  "video_height": 752,
  "video_width": 1360,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/e4018a99-1522-4f24-9330-62c2a9b50b59.jpg",
  "thumbnail_width": 1360,
  "thumbnail_height": 752
}
Ми можемо побачити, що отримали цю інформацію про відео, включаючи ID відео, посилання на відео, обкладинку відео тощо. Опис полів:
  • success: чи була генерація успішною, якщо так, то true, інакше false
  • task_id: унікальний ID завдання генерації відео
  • video_id: унікальний ID відео, створеного в результаті завдання
  • prompt: ключові слова завдання генерації відео
  • video_url: посилання на результат відео завдання генерації
  • video_height: висота зображення обкладинки згенерованого відео
  • video_width: ширина зображення обкладинки згенерованого відео
  • state: статус завдання генерації відео, якщо завдання завершено, то completed.
  • thumbnail_url: посилання на зображення обкладинки згенерованого відео
  • thumbnail_width: ширина зображення обкладинки згенерованого відео
  • thumbnail_height: висота зображення обкладинки згенерованого відео

Налаштування початкових та кінцевих кадрів

Якщо ви хочете згенерувати відео, використовуючи налаштовані початкові та кінцеві кадри, ви можете ввести посилання на зображення початкового та кінцевого кадрів: У цьому випадку поле start_image_url може приймати наступне зображення як початковий кадр відео: Початковий кадр Далі ми повинні налаштувати генерацію відео на основі початкового та кінцевого кадрів, ключових слів, і можемо вказати такі параметри:
  • action: дія завдання генерації відео, зазвичай це звичайна генерація generate та розширена генерація extend, за замовчуванням generate.
  • start_image_url: вказує на початковий кадр відео.
  • end_image_url: вказує на кінцевий кадр відео.
  • prompt: ключові слова для генерації відео.
Приклад заповнення виглядає так:

Після заповнення автоматично згенерувався код:

Відповідний код:
import requests

url = "https://api.acedata.cloud/luma/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "start_image_url": "https://cdn.acedata.cloud/r9vsv9.png",
    "action": "generate",
    "prompt": "Astronauts shuttle from space to volcano"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Отриманий результат виглядає так:
{
  "success": true,
  "task_id": "12a18694-fd4b-47e7-9c50-34f30862cff6",
  "video_id": "0105c090-03a5-425a-8026-523341cd575b",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
Остаточний результат подібний до попереднього, згенероване відео має початковий кадр, що містить передане зображення, звичайно, також можна передати посилання на зображення початкового та кінцевого кадрів для генерації відео, просто потрібно додати ще одне зображення для кінцевого кадру, інформація про яке виглядає так: Кінцевий кадр Приклад заповнення виглядає так:

В результаті отримаємо наступний результат:
{
  "success": true,
  "task_id": "d1cb723a-e554-4775-94a4-bb6ae8c7ea67",
  "video_id": "6bebd0d2-f793-472e-9326-38528a9273bb",
  "prompt": "Астронавти переміщуються з космосу до вулкана",
  "video_url": "https://platform.cdn.acedata.cloud/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "завершено",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
Результат подібний до вищезгаданого, згенероване відео одночасно містить зображення першого та останнього кадрів, що також завершило налаштування першого та останнього кадрів для генерації відео.

Розширення відео

Якщо ви хочете продовжити генерацію відео, ви можете встановити параметр action на extend, а також ввести ID або посилання на відео, ID та посилання на відео можна отримати відповідно до основного використання, як показано на малюнку нижче:

Тут можна побачити, що ID відео:
"video_id": "0105c090-03a5-425a-8026-523341cd575b",
"video_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4"
Зверніть увагу, що тут у відео video_id та video_url є ID та посилання на згенероване відео, якщо ви не знаєте, як згенерувати відео, ви можете звернутися до основного використання, щоб згенерувати відео.
Щоб продовжити генерацію відео, необхідно завантажити посилання на відео або ID відео, нижче показано, як використовувати ID відео для розширення, далі ми повинні заповнити ключові слова для налаштування генерації відео, можна вказати такі дані:
  • action: на цей раз дія розширення відео, тут має бути extend.
  • prompt: ключові слова, які потрібно розширити для відео.
  • video_url: посилання на відео, яке потрібно розширити.
  • video_id: унікальний ID відео, яке потрібно розширити.
  • end_image_url: посилання на зображення останнього кадру для розширення, необов’язковий параметр.
Приклад заповнення нижче:

Після заповнення автоматично згенерувався код нижче:

Відповідний код Python:
import requests

url = "https://api.acedata.cloud/luma/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "action": "extend",
    "video_id": "0105c090-03a5-425a-8026-523341cd575b",
    "prompt": "Астронавти переміщуються з космосу до вулкана"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Натиснувши “Запустити”, можна побачити результат, як показано нижче:
{
  "success": true,
  "task_id": "c6e529d1-a06d-4c12-91b2-c855135131c3",
  "video_id": "36908c49-c2bb-4a11-bd5a-b8512b004818",
  "prompt": "Астронавти переміщуються з космосу до вулкана",
  "video_url": "https://platform.cdn.acedata.cloud/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "завершено",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
Можна побачити, що це відео було розширено на основі відео, яке потрібно розширити, результат збігається з вищезгаданим, що також реалізує функцію продовження генерації пісні. Звичайно, ми також можемо вказати посилання на відео для розширення, заповнивши таку інформацію:

Після запуску отримали наступний результат:
{
  "success": true,
  "task_id": "1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca",
  "video_id": "f0187dc2-339f-4a08-a435-c3a3341f620a",
  "prompt": "Астронавти переміщуються з космосу до вулкана",
  "video_url": "https://platform.cdn.acedata.cloud/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "завершено",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
З результату видно, що за допомогою посилання на відео також можна реалізувати функцію розширення відео. Наостанок, ми також можемо вказати зображення останнього кадру для розширення відео, нижче наведена інформація про зображення останнього кадру: Останній кадр Далі на основі вищезгаданого додаємо інформацію про зображення останнього кадру, конкретно це виглядає так:

Натиснувши “Запустити”, отримали таку інформацію:
{
  "success": true,
  "task_id": "b816b2b4-c345-4673-9e19-83e91f91b643",
  "video_id": "c5400053-63e6-4206-8082-31cf9dd1e7ed",
  "prompt": "Астронавти переміщуються з космосу до вулкана",
  "video_url": "https://platform.cdn.acedata.cloud/luma/b816b2b4-c345-4673-9e19-83e91f91b643.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "завершено",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/b816b2b4-c345-4673-9e19-83e91f91b643.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
Можна побачити, що на основі розширеного відео з вищезгаданого, також можна вказати зображення останнього кадру для розширення.

Асинхронний зворотний виклик

Оскільки час генерації відео Luma відносно довгий, приблизно 1-2 хвилини, якщо API довго не відповідає, HTTP запит буде постійно підтримувати з’єднання, що призводить до додаткових витрат системних ресурсів, тому цей API також надає підтримку асинхронного зворотного виклику. Загальний процес такий: коли клієнт ініціює запит, він додатково вказує поле callback_url. Після того, як клієнт ініціює API запит, API відразу повертає результат, що містить інформацію про поле task_id, яке представляє поточний ID завдання. Коли завдання завершено, результат генерації музики буде надіслано на вказаний клієнтом callback_url у форматі POST JSON, де також буде включено поле task_id, таким чином результати завдання можна буде пов’язати за ID. Далі ми розглянемо приклад, щоб зрозуміти, як саме це працює. По-перше, Webhook зворотний виклик — це сервіс, який може приймати HTTP запити, розробники повинні замінити його на URL свого HTTP сервера. Для зручності демонстрації використаємо публічний сайт з прикладами Webhook https://webhook.site/, відкривши цей сайт, ви отримаєте Webhook URL, як показано на малюнку:

Скопіюйте цей URL, і ви зможете використовувати його як Webhook, приклад тут: https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13. Далі ми можемо налаштувати поле callback_url на вказаний Webhook URL, а також заповнити prompt, як показано на малюнку:

Натиснувши “Запустити”, ви відразу отримаєте результат, як показано нижче:
{
  "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6"
}
Через деякий час ми можемо спостерігати результати генерації пісні на https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13, як показано на малюнку: Зміст такий:
{
    "success": true,
    "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6",
    "video_id": "4d8013c3-5de0-41aa-966e-0b1a51d1c633",
    "prompt": "Астронавти переносяться з космосу до вулкана",
    "video_url": "https://platform.cdn.acedata.cloud/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.mp4",
    "video_height": 752,
    "video_width": 1360,
    "state": "completed",
    "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.jpg",
    "thumbnail_width": 1360,
    "thumbnail_height": 752
}
Можна побачити, що в результаті є поле task_id, інші поля схожі на наведені вище, за допомогою цього поля можна реалізувати зв’язок завдань.