Lumalabs Tools

Generate videos from text prompts or images with LumaLabTools and the Luma AI API.

lumalabs_tools.py
"""
Lumalabs Tools
=============================

Demonstrates lumalabs tools.
"""

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.lumalab import LumaLabTools

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------


"""Create an agent specialized for Luma AI video generation"""

luma_agent = Agent(
    name="Luma Video Agent",
    id="luma-video-agent",
    model=OpenAIChat(id="gpt-5.6-luna"),
    tools=[LumaLabTools()],  # Using the LumaLab tool we created
    markdown=True,
    instructions=[
        "You are an agent designed to generate videos using the Luma AI API.",
        "You can generate videos in two ways:",
        "1. Text-to-Video Generation:",
        "   - Use the generate_video function for creating videos from text prompts",
        "   - Default parameters: loop=False, aspect_ratio='16:9', keyframes=None",
        "2. Image-to-Video Generation:",
        "   - Use the image_to_video function when starting from one or two images",
        "   - Required parameters: prompt, start_image_url",
        "   - Optional parameters: end_image_url, loop=False, aspect_ratio='16:9'",
        "   - The image URLs must be publicly accessible",
        "Choose the appropriate function based on whether the user provides image URLs or just a text prompt.",
        "The video will be displayed in the UI automatically below your response, so you don't need to show the video URL in your response.",
        "Politely and courteously let the user know that the video has been generated and will be displayed below as soon as its ready.",
        "After generating any video, if generation is async (wait_for_completion=False), inform about the generation ID",
    ],
    system_message=(
        "Use generate_video for text-to-video requests and image_to_video for image-based "
        "generation. Don't modify default parameters unless specifically requested. "
        "Always provide clear feedback about the video generation status."
    ),
)

# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    luma_agent.run("Generate a video of a car in a sky")
    # luma_agent.run("Transform this image into a video of a tiger walking: https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/Walking_tiger_female.jpg/1920px-Walking_tiger_female.jpg")
    # luma_agent.run("""
    # Create a transition video between these two images:
    # Start: https://img.freepik.com/premium-photo/car-driving-dark-forest-generative-ai_634053-6661.jpg?w=1380
    # End: https://img.freepik.com/free-photo/front-view-black-luxury-sedan-road_114579-5030.jpg?t=st=1733821884~exp=1733825484~hmac=735ca584a9b985c53875fc1ad343c3fd394e1de4db49e5ab1a9ab37ac5f91a36&w=1380
    # Make it a smooth, natural movement
    # """)

Supply the model and inspect the result

The current Luma Python SDK requires a model argument that this Agno adapter does not supply. Before constructing the agent, prepare the toolkit with this compatibility adaptation and use tools=[luma_tools]:

from functools import partial

luma_tools = LumaLabTools()
luma_tools.client.generations.create = partial(
    luma_tools.client.generations.create, model="ray-2"
)

Keep wait_for_completion=True. Setting it to False submits a job but returns an unsupported-operation message without its generation ID. The default polling window is 300 seconds; timeout does not cancel the remote job.

This script does not launch a UI. Replace the final run call to inspect the returned video artifacts:

response = luma_agent.run("Generate a video of a car in a sky")
for video in response.videos or []:
    print(video.url)

Use publicly reachable image URLs you control for the commented image examples. See the Luma SDK for the current model contract.

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno lumaai openai

Export your API keys

export LUMAAI_API_KEY="your_lumaai_api_key_here"
export OPENAI_API_KEY="your_openai_api_key_here"

Run the example

Save the code above as lumalabs_tools.py, then run:

python lumalabs_tools.py

Full source: cookbook/91_tools/lumalabs_tools.py