chatbot / gradio /media.py
siddharth24m's picture
Upload 3001 files
69ba728 verified
"""
Media Registry for Gradio Demos
This module provides a centralized way to access media files.
Usage:
from gradio.media import get_image, get_video, get_audio, get_model3d, get_file
# Get specific media files
cheetah_img = get_image("cheetah1.jpg")
world_video = get_video("world.mp4")
cantina_audio = get_audio("cantina.wav")
bunny_model = get_model3d("Bunny.obj")
titanic_data = get_file("titanic.csv")
# Get random media of a type
random_img = get_image()
random_video = get_video()
random_audio = get_audio()
"""
import random
from pathlib import Path
from typing import Optional
MEDIA_ROOT = Path(__file__).parent / "media_assets"
MEDIA_PATHS = [
MEDIA_ROOT / "images",
MEDIA_ROOT / "videos",
MEDIA_ROOT / "audio",
MEDIA_ROOT / "models3d",
MEDIA_ROOT / "data",
]
def _get_media_path(media_type: str, filename: Optional[str] = None) -> str:
"""
Internal function to get the path to a media file.
Args:
media_type: Type of media (images, videos, audio, models3d, data)
filename: Optional filename of the media file. If None, returns a random file.
Returns:
Absolute path to the media file
Raises:
ValueError: If media_type is invalid
FileNotFoundError: If the media file doesn't exist
"""
media_dir = MEDIA_ROOT / media_type
if not media_dir.exists():
raise ValueError(f"Media directory not found: {media_dir}")
if filename is None:
# Get a random file from the directory
media_files = list(media_dir.glob("*"))
if not media_files:
raise ValueError(f"No media files found in {media_dir}")
file_path = random.choice(media_files)
else:
if filename.startswith(("http://", "https://")):
return filename
file_path = media_dir / filename
if not file_path.exists():
raise FileNotFoundError(f"Media file not found: {file_path}")
return str(file_path.absolute())
def get_image(filename: Optional[str] = None) -> str:
"""
Get path to an image file.
Args:
filename: Filename of the image (e.g., "tower.jpg"). If None, returns a random image.
Returns:
Absolute path to the image file
Examples:
>>> get_image("tower.jpg") # Get specific image
>>> get_image() # Get random image
"""
return _get_media_path("images", filename)
def get_video(filename: Optional[str] = None) -> str:
"""
Get path to a video file.
Args:
filename: Filename of the video (e.g., "world.mp4"). If None, returns a random video.
Returns:
Absolute path to the video file
Examples:
>>> get_video("world.mp4") # Get specific video
>>> get_video() # Get random video
"""
return _get_media_path("videos", filename)
def get_audio(filename: Optional[str] = None) -> str:
"""
Get path to an audio file.
Args:
filename: Filename of the audio (e.g., "cantina.wav"). If None, returns a random audio file.
Returns:
Absolute path to the audio file
Examples:
>>> get_audio("cantina.wav") # Get specific audio
>>> get_audio() # Get random audio
"""
return _get_media_path("audio", filename)
def get_model3d(filename: Optional[str] = None) -> str:
"""
Get path to a 3D model file.
Args:
filename: Filename of the 3D model (e.g., "Duck.glb"). If None, returns a random model.
Returns:
Absolute path to the 3D model file
Examples:
>>> get_model3d("Duck.glb") # Get specific model
>>> get_model3d() # Get random 3D model
"""
return _get_media_path("models3d", filename)
def get_file(filename: Optional[str] = None) -> str:
"""
Get path to a data file (CSV, JSON, text, etc.).
Args:
filename: Filename of the data file (e.g., "titanic.csv"). If None, returns a random file.
Returns:
Absolute path to the data file
Examples:
>>> get_file("titanic.csv") # Get specific file
>>> get_file() # Get random data file
"""
return _get_media_path("data", filename)