Luma Ray 1.6 (Text-to-Video)
Overview
The Luma AI Dream Machine API allows developers to generate and extend AI-generated videos based on text prompts.
Setup your API Key
If you don’t have an API key for the AI/ML API yet, feel free to use our Quickstart guide.
How to Make a Call
API Schemas
Generate video
loop parameter controls if the generated video will be looped.
The text description of the scene, subject, or action to generate in the video.
The aspect ratio of the generated video.
Whether to loop the video
falseThe resolution of the output video, where the number refers to the short side in pixels.
The length of the output video in seconds.
Successfully generated video
async function main() {
const response = await fetch('https://api.aimlapi.com/v2/video/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer <YOUR_API_KEY>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"model": "luma/ray-1-6",
"prompt": "A menacing evil dragon appears in a distance above the tallest mountain, then rushes toward the camera with its jaws open, revealing massive fangs. We see it's coming."
}),
});
const data = await response.json();
console.log(JSON.stringify(data, null, 2));
}
main();Successfully generated video
{
"id": "60ac7c34-3224-4b14-8e7d-0aa0db708325",
"status": "completed",
"video": {
"url": "https://cdn.aimlapi.com/generations/hedgehog/1759866285599-0cdfb138-c03a-49d4-a601-4f6413e27b15.mp4",
"duration": 8
},
"duration": 8,
"error": null,
"meta": {
"usage": {
"tokens_used": 120000
}
}
}Fetch generation
After sending a request for video generation, this task is added to the queue. Based on the service's load, the generation can be completed in seconds or take a bit more.
Bearer key
No content
GET /v2/generate/video/luma-ai/generation?generation_id=text HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Example: Fetch Single Generation
For example, if you are waiting for video dreaming (when the video is popped from the queue and generation is in processing), then you can send the following request:
import requests
def main():
response = requests.get(
"https://api.aimlapi.com/v2/generate/video/luma-ai/generation",
params={
"generation_id": "755f9bbb-d99b-4880-992b-f05244ddba61",
"status": "dreaming"
},
headers={
"Authorization": "Bearer <YOUR_AIMLAPI_KEY>",
"Content-Type": "application/json",
},
)
response.raise_for_status()
data = response.json()
print("Generation:", data)
if __name__ == "__main__":
main()const main = async () => {
const url = new URL('https://api.aimlapi.com/v2/generate/video/luma-ai/generation');
url.searchParams.set('generation_id', '755f9bbb-d99b-4880-992b-f05244ddba61');
url.searchParams.set('state', 'dreaming');
const data = await fetch(url, {
method: 'GET',
headers: {
Authorization: 'Bearer <YOUR_AIMLAPI_KEY>',
'Content-Type': 'application/json',
},
}).then((res) => res.json());
console.log('Generation:', data);
};
main();
Fetch Multiple Generations
Instead of using the generation_id parameter, you will pass generation_ids, which can be an array of IDs. This parameter can also accept IDs separated by commas.
Bearer key
No content
GET /v2/generate/video/luma-ai/generations?generation_ids=123e4567-e89b-12d3-a456-426614174000 HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Example: Fetch Multiple Generations
import requests
def main():
response = requests.get(
"https://api.aimlapi.com/v2/generate/video/luma-ai/generations",
params={
"generation_ids[]": "755f9bbb-d99b-4880-992b-f05244ddba61",
"status": "streaming",
},
headers={
"Authorization": "Bearer <YOUR_AIMLAPI_KEY>",
"Content-Type": "application/json",
},
)
response.raise_for_status()
data = response.json()
print("Generation:", data)
if __name__ == "__main__":
main()const main = async () => {
const url = new URL('https://api.aimlapi.com/v2/generate/video/luma-ai/generations');
url.searchParams.set('generation_ids[]', '755f9bbb-d99b-4880-992b-f05244ddba61');
url.searchParams.set('state', 'dreaming');
const data = await fetch(url, {
method: 'GET',
headers: {
Authorization: 'Bearer <YOUR_AIMLAPI_KEY>',
'Content-Type': 'application/json',
},
}).then((res) => res.json());
console.log('Generation:', data);
};
main();
Example: Fetch Multiple Generations
import requests
def main():
url = "https://api.aimlapi.com/v2/generate/video/luma-ai/generation"
payload = {
"prompt": "Flying jellyfish",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": "Bearer <YOUR_AIMLAPI_KEY>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print("Generation:", response.json())
if __name__ == "__main__":
main()const main = async () => {
const response = await fetch('https://api.aimlapi.com/v2/generate/video/luma-ai/generation', {
method: 'POST',
headers: {
Authorization: 'Bearer <YOUR_AIMLAPI_KEY>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'A jellyfish in the ocean',
aspect_ratio: '19:9',
loop: false
}),
}).then((res) => res.json());
console.log('Generation:', response);
};
main();Extend video
You can extend a video using an existing video you generated before (using its generation ID) or by using an image (via URL). The extension can be done by appending to or prepending from the original content.
The keywords parameter controls the following extensions. It can include parameters for defining frames:
first frame (
frame0)last frame (
frame1)
For example, if you want to use an image as a reference for a frame:
{
"keyframes": {
"frame0": {
"type": "image",
"url": "https://example.com/image1.png"
}
}
}Or, in the case of using a previously generated video:
{
"keyframes": {
"frame1": {
"type": "generation",
"id": "0f3ea4aa-10e7-4dae-af0b-263ab4ac45f9"
}
}
}Bearer key
falseray-1-6Possible values: POST /v2/generate/video/luma-ai/generation HTTP/1.1
Host: api.aimlapi.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 350
{
"generation_type": "video",
"prompt": "text",
"aspect_ratio": "1:1",
"loop": false,
"keyframes": {
"frame0": {
"type": "generation",
"id": "123e4567-e89b-12d3-a456-426614174000"
},
"frame1": {
"type": "generation",
"id": "123e4567-e89b-12d3-a456-426614174000"
}
},
"callback_url": "https://example.com",
"model": "ray-1-6",
"resolution": null,
"duration": "text",
"concepts": "text"
}No content
Examples
Ensure you replace <YOUR_AIMLAPI_KEY> with your actual API key before running the code.
Extension with the Image
import requests
def main()
url = "https://api.aimlapi.com/v2/generate/video/luma-ai/generation"
headers = {
"Authorization": "Bearer <YOUR_AIMLAPI_KEY>",
"Content-Type": "application/json"
}
payload = {
"prompt": "Flying jellyfish",
"aspect_ratio": "16:9",
"keyframes": {
"frame0": {
"type": "image",
"url": "https://example.com/image1.png"
}
}
}
response = requests.post(url, json=payload, headers=headers)
print("Generation:", response.json())
if __name__ == "__main__":
main()const main = async () => {
const response = await fetch('https://api.aimlapi.com/v2/generate/video/luma-ai/generation', {
method: 'POST',
headers: {
Authorization: 'Bearer <YOUR_AIMLAPI_KEY>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'A jellyfish in the ocean',
aspect_ratio: '19:9',
keyframes: {
frame0: {
type: 'image',
url: 'https://example.com/image1.png',
},
},
}),
}).then((res) => res.json());
console.log('Generation:', response);
};
main();
Extension with the Generation
import requests
def main()
url = "https://api.aimlapi.com/v2/generate/video/luma-ai/generation"
headers = {
"Authorization": "Bearer <YOUR_AIMLAPI_KEY>",
"Content-Type": "application/json"
}
payload = {
"prompt": "Flying jellyfish",
"aspect_ratio": "16:9",
"keyframes": {
"frame0": {
"type": "generation",
"id": "0f3ea4aa-10e7-4dae-af0b-263ab4ac45f9"
}
}
}
response = requests.post(url, json=payload, headers=headers)
print("Generation:", response.json())
if __name__ == "__main__":
main()const main = async () => {
const response = await fetch('https://api.aimlapi.com/v2/generate/video/luma-ai/generation', {
method: 'POST',
headers: {
Authorization: 'Bearer <YOUR_AIMLAPI_KEY>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'A jellyfish in the ocean',
aspect_ratio: '19:9',
keyframes: {
frame0: {
type: 'generation',
id: '0f3ea4aa-10e7-4dae-af0b-263ab4ac45f9',
},
},
}),
}).then((res) => res.json());
console.log('Generation:', response);
};
main();
Last updated
Was this helpful?