Spaces:
Runtime error
Runtime error
| import os | |
| import uuid | |
| from io import BytesIO | |
| import requests | |
| from PIL import Image | |
| from diffusers.utils.testing_utils import load_image | |
| from pydub import AudioSegment | |
| RESOURCES_DIR = "resources" | |
| PROMPT_TEMPLATES_DIR = "prompt-templates" | |
| GENERATED_RESOURCES_DIR = "output" | |
| def get_prompt_resource(prompt_name: str) -> str: | |
| return os.path.join(RESOURCES_DIR, PROMPT_TEMPLATES_DIR, prompt_name) | |
| def get_resource_url(resource_arg: str) -> str: | |
| if resource_arg.startswith("http"): | |
| return resource_arg | |
| else: | |
| return GENERATED_RESOURCES_DIR + resource_arg | |
| # Images | |
| def image_to_bytes(image: Image) -> bytes: | |
| image_byte = BytesIO() | |
| image.save(image_byte, format="png") | |
| image_data = image_byte.getvalue() | |
| return image_data | |
| def image_from_bytes(img_data: bytes) -> Image: | |
| return Image.open(BytesIO(img_data)) | |
| def encode_image(image_arg: str) -> bytes: | |
| image_url = get_resource_url(image_arg) | |
| image = load_image(image_url) | |
| img_data = image_to_bytes(image) | |
| return img_data | |
| def save_image(img: Image) -> str: | |
| name = str(uuid.uuid4())[:4] | |
| path = f"/images/{name}.png" | |
| img.save(GENERATED_RESOURCES_DIR + path) | |
| return path | |
| # Audios | |
| def load_audio(audio_path: str) -> AudioSegment: | |
| if audio_path.startswith("http://") or audio_path.startswith("https://"): | |
| audio_data = requests.get(audio_path).content | |
| audio = AudioSegment.from_file(BytesIO(audio_data)) | |
| elif os.path.isfile(audio_path): | |
| audio = AudioSegment.from_file(audio_path) | |
| else: | |
| raise ValueError( | |
| f"Incorrect path or url, URLs must start with `http://` or `https://`, and {audio_path} is not a valid path" | |
| ) | |
| return audio | |
| def audio_to_bytes(audio: AudioSegment) -> bytes: | |
| audio_byte = BytesIO() | |
| audio.export(audio_byte, format="flac") | |
| audio_data = audio_byte.getvalue() | |
| return audio_data | |
| def audio_from_bytes(audio_data: bytes) -> AudioSegment: | |
| return AudioSegment.from_file(BytesIO(audio_data)) | |
| def encode_audio(audio_arg: str) -> bytes: | |
| audio_url = get_resource_url(audio_arg) | |
| audio = load_audio(audio_url) | |
| audio_data = audio_to_bytes(audio) | |
| return audio_data | |
| def save_audio(audio: AudioSegment) -> str: | |
| name = str(uuid.uuid4())[:4] | |
| path = f"/audios/{name}.flac" | |
| with open(GENERATED_RESOURCES_DIR + path, "wb") as f: | |
| audio.export(f, format="flac") | |
| return path | |
| def prepend_resource_dir(s: str) -> str: | |
| """Prepend the resource dir to all resource paths in the string""" | |
| for resource_type in ["images", "audios", "videos"]: | |
| s = s.replace( | |
| f" /{resource_type}/", f" {GENERATED_RESOURCES_DIR}/{resource_type}/" | |
| ) | |
| return s | |
| def init_resource_dirs(): | |
| os.makedirs(GENERATED_RESOURCES_DIR + "/images", exist_ok=True) | |
| os.makedirs(GENERATED_RESOURCES_DIR + "/audios", exist_ok=True) | |
| os.makedirs(GENERATED_RESOURCES_DIR + "/videos", exist_ok=True) | |