| from pydantic import BaseModel, Field, validator |
| from typing import List, Dict |
|
|
|
|
|
|
| transitions = [ |
| "WaveRight_transparent.webm", |
| "WaveLeft_transparent.webm", |
| "WaveBlue_transparent.webm", |
| "Wave_transparent.webm", |
| "Swirl_transparent.webm", |
| "Snow_transparent.webm", |
| "Likes_transparent.webm", |
| "Lightning_transparent.webm", |
| "Happy_transparent.webm", |
| "Fire_transparent.webm", |
| "CurlingWave_transparent.webm", |
| "Cloud_transparent.webm", |
| ] |
|
|
|
|
| class Asset(BaseModel): |
| type: str |
| sequence: List[Dict] |
|
|
| @validator("sequence") |
| def check_duration(cls, sequence): |
| for item in sequence: |
| start = item.get("start", 0) |
| end = item.get("end", 0) |
| duration = (end - start) * 30 |
| if duration <= 1: |
| raise ValueError("Asset duration must be greater than 1 frame.") |
| return sequence |
|
|
|
|
| class Link(BaseModel): |
| file_name: str |
| link: str |
|
|
|
|
| class Remotion(BaseModel): |
| links: List[Link] = [] |
| assets: List[Asset] = [] |
| constants: Dict[str, int] = {"duration": 3840, "height": 1920, "width": 1080} |
| scenes: int |
| total_duration: int |
|
|
| def generate_image_links(self): |
| for i in range(self.scenes): |
| image_file_name = f"image_{i}.png" |
| image_link = f"https://image.lexica.art/full_webp/{i}.png" |
| self.links.append(Link(file_name=image_file_name, link=image_link)) |
|
|
|
|
| def concatenate_wav_files(input): |
| |
| output = None |
| output_params = None |
| output_file = '' |
| try: |
| |
| output = wave.open(output_file, "wb") |
|
|
| |
| for input_file in input_files: |
| with wave.open(input_file, "rb") as input_wav: |
| |
| if output_params is None: |
| output_params = input_wav.getparams() |
| output.setparams(output_params) |
| |
| else: |
| if input_wav.getparams() != output_params: |
| raise ValueError( |
| "Input file parameters do not match output file parameters." |
| ) |
|
|
| |
| output.writeframes(input_wav.readframes(input_wav.getnframes())) |
| finally: |
| |
| if output is not None: |
| output.close() |
|
|
|
|
| |
| |
| |
| |
|
|