Installation
pip install lumaai
Authentication
- Get a key from https://lumalabs.ai/dream-machine/api/keys
- Pass it to client sdk by either
- setting
LUMAAI_API_KEY
- or passing
auth_token
to the client
- setting
Setting up client
Using LUMAAI_API_KEY
env variable
from lumaai import LumaAI
client = LumaAI()
Using auth_token parameter
import os
from lumaai import LumaAI
client = LumaAI(
auth_token=os.environ.get("LUMAAI_API_KEY"),
)
How do I get the video for a generation?
- Right now the only supported way is via polling
- The create endpoint returns an id which is an UUID V4
- You can use it to poll for updates (you can see the video at
generation.assets.video
)
Async library
Import and use AsyncLumaai
import os
from lumaai import AsyncLumaAI
client = AsyncLumaAI(
auth_token=os.environ.get("LUMAAI_API_KEY"),
)
For all the functions add await (eg. below)
generation = await client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
)
Text to Video
generation = client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
)
Downloading a video
import requests
url = 'https://example.com/video.mp4'
response = requests.get(url, stream=True)
file_name = 'video.mp4'
with open('video.mp4', 'wb') as file:
file.write(response.content)
print(f"File downloaded as {file_name}")
With loop, aspect ratio
generation = client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
loop=True,
aspect_ratio="3:4"
)
Image to Video
Image URL
You should upload and use your own cdn image urls, currently this is the only way to pass an image
With start frame
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
keyframes={
"frame0": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/7e4fe07f-1dfd-4921-bc97-4bcf5adea39a/video_0_thumb.jpg"
}
}
)
With start frame, loop, aspect ratio
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
aspect_ratio="4:3",
loop=True,
keyframes={
"frame0": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/7e4fe07f-1dfd-4921-bc97-4bcf5adea39a/video_0_thumb.jpg"
}
}
)
With ending frame
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
keyframes={
"frame1": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/7e4fe07f-1dfd-4921-bc97-4bcf5adea39a/video_0_thumb.jpg"
}
}
)
With start and end keyframes
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
keyframes={
"frame0": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/7e4fe07f-1dfd-4921-bc97-4bcf5adea39a/video_0_thumb.jpg"
},
"frame1": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/12d17326-a7b6-4538-b9b7-4a2e146d4488/video_0_thumb.jpg"
}
}
)
Extend Video
Extend video
Extend is currently supported only for generated videos. Please make sure the generation is in
completed
state before passing it
generation = client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
keyframes={
"frame0": {
"type": "generation",
"id": "d1968551-6113-4b46-b567-09210c2e79b0"
}
}
)
Reverse extend video
Generate video leading up to the provided video.
Extend is currently supported only for generated videos. Please make sure the generation is in
completed
state before passing it
generation = client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
keyframes={
"frame1": {
"type": "generation",
"id": "d1968551-6113-4b46-b567-09210c2e79b0"
}
}
)
Extend a video with an end-frame
Extend is currently supported only for generated videos. Please make sure the generation is in
completed
state before passing it
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
keyframes={
"frame0": {
"type": "generation",
"id": "d1968551-6113-4b46-b567-09210c2e79b0"
},
"frame1": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/12d17326-a7b6-4538-b9b7-4a2e146d4488/video_0_thumb.jpg"
}
}
)
Reverse extend a video with a start-frame
Extend is currently supported only for generated videos. Please make sure the generation is in
completed
state before passing it
generation = client.generations.create(
prompt="Low-angle shot of a majestic tiger prowling through a snowy landscape, leaving paw prints on the white blanket",
keyframes={
"frame0": {
"type": "image",
"url": "https://storage.cdn-luma.com/dream_machine/12d17326-a7b6-4538-b9b7-4a2e146d4488/video_0_thumb.jpg"
},
"frame1": {
"type": "generation",
"id": "d1968551-6113-4b46-b567-09210c2e79b0"
}
}
)
Interpolate between 2 videos
Interpolate is currently supported only for generated videos. Please make sure the generation is in
completed
state before passing it
generation = client.generations.create(
prompt="A teddy bear in sunglasses playing electric guitar and dancing",
keyframes={
"frame1": {
"type": "generation",
"id": "d312d37a-7ff4-49f2-94f8-218f3fe2a4bd"
},
"frame1": {
"type": "generation",
"id": "d1968551-6113-4b46-b567-09210c2e79b0"
}
}
)
Generations
Get generation with id
generation = client.generations.get(id="d1968551-6113-4b46-b567-09210c2e79b0")
List all generations
generation = client.generations.list(limit=100, offset=0)
Delete generation
generation = client.generations.delete(id="d1968551-6113-4b46-b567-09210c2e79b0")
Camera Motions
How to use camera motion
Just add the camera motion value as part of prompt itself
Get all supported camera motions
supported_camera_motions = client.generations.camera_motion.list()
Updated 2 days ago