from media_download import * from transcription import * import asyncio import uvicorn from fastapi import FastAPI, Request, Depends app = FastAPI() output_folder = 'Output' # Create a context variable to store the contexts for each user users_context = dict() @app.get("/get_media_info") async def get_media_info(request: Request, url: str): # Getting User's IP user_ip = request.client.host # Getting User's Youtube Downloader youtube_downloader = YoutubeDownloader(url, output_folder) # Getting Youtube Media Info media_info = youtube_downloader.get_media_info() # Storing Info in the context for this user's session users_context[user_ip] = dict() users_context[user_ip]['downloader'] = youtube_downloader # users_context[user_ip]['media_info'] = media_info users_context[user_ip]['url'] = url return media_info @app.get("/download_media") async def download_media(request: Request, media_type: str, media_format: str, media_quality: str): # Getting User's IP user_ip = request.client.host # Downloading Media for User media_path = users_context[user_ip]['downloader'].download(media_type, media_format, media_quality) # Storing Media Info in the context for this user's session users_context[user_ip]['media_path'] = media_path users_context[user_ip]['media_type'] = media_type # Getting Status status = 1 if media_path else 0 return {"status": status} @app.get("/generate_transcript") async def generate_transcript(request: Request, subtitle_format: str = 'srt', word_level: bool = True): # Getting User's IP user_ip = request.client.host # Retrieving the media_path from the context for this user's session media_path = users_context[user_ip]['media_path'] # Checking if the media_type is Video, then extract it's audio media_type = users_context[user_ip]['media_type'] if media_type == 'video': media_path = users_context[user_ip]['downloader'].extract_audio(media_path) # Whisper based transcription stable_whisper_transcript = StableWhisper(media_path, output_folder, subtitle_format=subtitle_format, word_level=word_level) transcript = stable_whisper_transcript.generate_transcript() transcript_path = youtube_transcript.save_transcript() # Getting Status status = 1 if transcript else 0 return {"status": status, "transcript": transcript} if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=8000)