mirror of
https://github.com/ParisNeo/lollms.git
synced 2024-12-19 04:37:54 +00:00
added lumalabs
This commit is contained in:
parent
a33efccd46
commit
dd1426906b
66
lollms/services/ttv/lumalabs/lollms_lumalabs.py
Normal file
66
lollms/services/ttv/lumalabs/lollms_lumalabs.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import requests
|
||||||
|
from typing import Optional, Dict
|
||||||
|
from lollms.ttv import LollmsTTV
|
||||||
|
|
||||||
|
class LumaLabsVideo(LollmsTTV):
|
||||||
|
def __init__(self, api_key: str):
|
||||||
|
self.api_key = api_key
|
||||||
|
self.base_url = "https://api.lumalabs.ai/dream-machine/v1/generations"
|
||||||
|
self.headers = {
|
||||||
|
"accept": "application/json",
|
||||||
|
"authorization": f"Bearer {self.api_key}",
|
||||||
|
"content-type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
def generate_video(self, prompt: str, aspect_ratio: str = "16:9",
|
||||||
|
loop: bool = False, num_frames: int = 60,
|
||||||
|
fps: int = 30, keyframes: Optional[Dict] = None)-> str:
|
||||||
|
payload = {
|
||||||
|
"prompt": prompt,
|
||||||
|
"aspect_ratio": aspect_ratio,
|
||||||
|
"loop": loop
|
||||||
|
}
|
||||||
|
|
||||||
|
if keyframes:
|
||||||
|
payload["keyframes"] = keyframes
|
||||||
|
|
||||||
|
response = requests.post(self.base_url, headers=self.headers, json=payload)
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
generation_data = response.json()
|
||||||
|
video_url = generation_data['assets']['video']
|
||||||
|
|
||||||
|
# Download the video
|
||||||
|
video_response = requests.get(video_url)
|
||||||
|
video_response.raise_for_status()
|
||||||
|
|
||||||
|
output_path = "output.mp4"
|
||||||
|
with open(output_path, 'wb') as f:
|
||||||
|
f.write(video_response.content)
|
||||||
|
|
||||||
|
return output_path
|
||||||
|
|
||||||
|
def extend_video(self, prompt: str, generation_id: str, reverse: bool = False) -> str:
|
||||||
|
keyframes = {
|
||||||
|
"frame0" if not reverse else "frame1": {
|
||||||
|
"type": "generation",
|
||||||
|
"id": generation_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return self.generate_video(prompt, keyframes=keyframes)
|
||||||
|
|
||||||
|
def image_to_video(self, prompt: str, image_url: str, is_end_frame: bool = False) -> str:
|
||||||
|
keyframes = {
|
||||||
|
"frame0" if not is_end_frame else "frame1": {
|
||||||
|
"type": "image",
|
||||||
|
"url": image_url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return self.generate_video(prompt, keyframes=keyframes)
|
||||||
|
|
||||||
|
# Usage example:
|
||||||
|
if __name__ == "__main__":
|
||||||
|
luma_video = LumaLabsVideo("your-api-key-here")
|
||||||
|
prompt = "A panda, dressed in a small, red jacket and a tiny hat, sits on a wooden stool in a serene bamboo forest. The panda's fluffy paws strum a miniature acoustic guitar, producing soft, melodic tunes."
|
||||||
|
output_video = luma_video.generate_video(prompt)
|
||||||
|
print(f"Video generated and saved to: {output_video}")
|
Loading…
Reference in New Issue
Block a user