Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import requests | |
| import streamlit.components.v1 as components | |
| from gtts import gTTS | |
| from gtts.lang import tts_langs | |
| from io import BytesIO | |
| import os | |
| # νμ΄μ§ μ€μ | |
| st.set_page_config(page_title="ViDraft", layout="wide") | |
| # μ¬μ΄λλ° νμ΄ν μ€μ | |
| st.sidebar.title("ViDraft") | |
| # λ©λ΄ λ° νμ λ©λ΄ μ μ | |
| menus = { | |
| "Home": [], | |
| "Free Stock": ["Template Video", "Search Video", "Search Image"], | |
| "Image": ["Face Swap", "Remove Background", "Compositing"], | |
| "Video": ["Generation", "Talking Face", "Remove Background", "Compositing"], | |
| "Sound": ["TTS(Voice)", "Video SFX", "Video Music","Image SFX", "Image Music"], | |
| "Scripts": [] | |
| } | |
| # μΈμ μν μ΄κΈ°ν | |
| if 'current_menu' not in st.session_state: | |
| st.session_state['current_menu'] = 'Home' | |
| if 'current_sub_menu' not in st.session_state: | |
| st.session_state['current_sub_menu'] = '' | |
| # λ©μΈ λ©λ΄ μ ν | |
| selected_menu = st.sidebar.selectbox("Menu", list(menus.keys()), key='main_menu') | |
| st.session_state['current_menu'] = selected_menu | |
| # νμ λ©λ΄ μ ν (ν΄λΉλλ κ²½μ°) | |
| if selected_menu in menus: | |
| selected_sub_menu = st.sidebar.selectbox("Sub Menu", [""] + menus[selected_menu], key=f'sub_menu_{selected_menu}') | |
| st.session_state['current_sub_menu'] = selected_sub_menu | |
| else: | |
| st.session_state['current_sub_menu'] = '' | |
| # 'Sound' λ©λ΄μ 'TTS(Voice)' μ ν μ | |
| if selected_menu == "Sound" and selected_sub_menu == "TTS(Voice)": | |
| st.header("Text-to-Speech") | |
| # ν μ€νΈ μ λ ₯ | |
| text = st.text_area("Enter text to synthesize", "Hello, welcome to ViDraft TTS service.") | |
| # μ§μλλ μΈμ΄ λͺ©λ‘μ λΆλ¬μ΅λλ€. | |
| languages_dict = tts_langs() | |
| # ISO 639-1 νμ€μ λ°λΌ λ κΈμ μ½λλ₯Ό κ°μ§ μΈμ΄λ§ νν°λ§ | |
| two_letter_languages = {code: lang for code, lang in languages_dict.items() if len(code) == 2} | |
| # μΈμ΄ μ νμ μν selectboxλ₯Ό μμ±ν©λλ€. | |
| selected_language_code = st.selectbox( | |
| "Choose Language", | |
| options=list(two_letter_languages.keys()), | |
| format_func=lambda x: f"{two_letter_languages[x]} ({x})", | |
| index=list(two_letter_languages.keys()).index('en') # 'en'μ κΈ°λ³Έ μΈμ΄λ‘ μ€μ | |
| ) | |
| # 'Synthesize' λ²νΌ | |
| if st.button("Synthesize"): | |
| if text: | |
| try: | |
| # μ νλ μΈμ΄λ‘ gTTS κ°μ²΄ μμ± | |
| tts = gTTS(text=text, lang=selected_language_code, slow=False) | |
| audio_file = BytesIO() | |
| tts.write_to_fp(audio_file) | |
| audio_file.seek(0) | |
| # μμ±λ μ€λμ€ νμΌμ μ¬μ | |
| st.audio(audio_file, format="audio/mp3") | |
| except Exception as e: | |
| st.error(f"Error: {e}") | |
| else: | |
| st.warning("Please enter some text to synthesize.") | |
| # Pexels API ν€ μ€μ | |
| PEXELS_API_KEY = "5woz23MGx1QrSY0WHFb0BRi29JvbXPu97Hg0xnklYgHUI8G0w23FKH62" | |
| def search_images(keyword, per_page=80): | |
| """μ΄λ―Έμ§ κ²μ ν¨μ""" | |
| url = f"https://api.pexels.com/v1/search?query={keyword}&per_page={per_page}" | |
| headers = {"Authorization": PEXELS_API_KEY} | |
| response = requests.get(url, headers=headers).json() | |
| images = [] | |
| if 'photos' in response: | |
| for photo in response['photos']: | |
| images.append(photo['src']['original']) | |
| return images | |
| def search_videos(keyword, per_page=80): | |
| """λΉλμ€ κ²μ ν¨μ""" | |
| url = f"https://api.pexels.com/videos/search?query={keyword}&per_page={per_page}" | |
| headers = {"Authorization": PEXELS_API_KEY} | |
| response = requests.get(url, headers=headers).json() | |
| videos = [] | |
| if 'videos' in response: | |
| for video in response['videos']: | |
| videos.append(video['video_files'][0]['link']) | |
| return videos | |
| # 'Search Image' μ ν μ | |
| if selected_menu == "Free Stock" and st.session_state['current_sub_menu'] == "Search Image": | |
| keyword = st.text_input("Enter a keyword to search for images") | |
| if keyword: | |
| images = search_images(keyword) | |
| cols = st.columns(3) # 3μ΄λ‘ μ΄λ―Έμ§ νμ | |
| for idx, img in enumerate(images): | |
| with cols[idx % 3]: | |
| st.image(img) | |
| # 'Search Video' μ ν μ | |
| if selected_menu == "Free Stock" and st.session_state['current_sub_menu'] == "Search Video": | |
| keyword = st.text_input("Enter a keyword to search for videos") | |
| if keyword: | |
| videos = search_videos(keyword) | |
| cols = st.columns(3) # 3μ΄λ‘ λΉλμ€ νμ | |
| for idx, video in enumerate(videos): | |
| with cols[idx % 3]: | |
| st.video(video) | |
| # 'Image' λ©λ΄μμ 'Remove Background' μ ν μ | |
| if selected_menu == "Image" and st.session_state['current_sub_menu'] == "Remove Background": | |
| st.header("Remove Background") | |
| # iframeμ μ¬μ©νμ¬ μΈλΆ URL μλ² λ | |
| components.iframe("https://arxivgpt-vidnuki.hf.space", width=None, height=768, scrolling=True) | |
| # 'Image' λ©λ΄μμ 'Compositing' μ ν μ | |
| if selected_menu == "Image" and st.session_state['current_sub_menu'] == "Compositing": | |
| st.header("Compositing") | |
| # iframeμ μ¬μ©νμ¬ μΈλΆ URL μλ² λ | |
| components.iframe("https://arxivgpt-vidistudio.hf.space", width=None, height=1800, scrolling=True) | |
| # 'Image' λ©λ΄μμ 'Face Swap' μ ν μ | |
| if selected_menu == "Image" and st.session_state['current_sub_menu'] == "Face Swap": | |
| st.header("Face Swap") | |
| # iframeμ μ¬μ©νμ¬ μΈλΆ URL μλ² λ | |
| components.iframe("https://arxivgpt-vidifs.hf.space", width=None, height=1800, scrolling=True) | |
| # 'video' λ©λ΄μμ 'Compositing' μ ν μ | |
| if selected_menu == "Video" and st.session_state['current_sub_menu'] == "Compositing": | |
| st.header("Compositing") | |
| # iframeμ μ¬μ©νμ¬ μΈλΆ URL μλ² λ | |
| components.iframe("https://arxivgpt-vidvstudio.hf.space", width=None, height=1800, scrolling=True) | |
| # 'video' λ©λ΄μμ 'Compositing' μ ν μ | |
| if selected_menu == "Video" and st.session_state['current_sub_menu'] == "Remove Background": | |
| st.header("Remove Background") | |
| # iframeμ μ¬μ©νμ¬ μΈλΆ URL μλ² λ | |
| components.iframe("https://arxivgpt-vidvback.hf.space", width=None, height=1800, scrolling=True) | |
| # 'Home' νμ΄μ§ νμ | |
| if selected_menu == "Home": | |
| st.image("banner2.jpg", use_column_width=True) | |
| st.header("Welcome to ViDraft") | |
| st.header("'Create Contents, ViDraft Value-UP'") | |
| # νμ λ©μμ§ λ° μλΉμ€ μ€λͺ | |
| welcome_text = """ | |
| Welcome to our dynamic platform, where creativity meets technology across a vast spectrum of multimedia services. Our service offers an extensive array of options for every multimedia need: | |
| - **Home**: Start your journey here with us, where innovation meets functionality. | |
| - **Free Stock**: Dive into our rich collection of template videos, search for the perfect video or image to complement your project. | |
| - **Image**: Explore our advanced image services including AI-powered generation, facial recognition, inpainting, background removal, and our comprehensive image studio. | |
| - **Video**: Unleash your creativity with video generation, talking face animations, background removal, and access to our state-of-the-art video studio. | |
| - **Sound**: Enhance your projects with video sound effects (SFX), curated video music, text-to-speech (TTS) services, image SFX, and image music integration. | |
| - **Scripts**: Access a wide range of scripting tools and resources to bring your stories to life. | |
| Join us to transform your creative ideas into reality with cutting-edge technology designed for creators, by creators. | |
| -Contact: [email protected] / Powered by ArXivGPT, Huggingface, Gradio, Streamlit | |
| """ | |
| st.write(welcome_text) | |
| # μ΄λ―Έμ§λ€μ ν μ€μ 3μ₯μ© λ°°μΉ | |
| image_files = [ | |
| "ViDraft-Video-Templet.png", | |
| "ViDraft-Video-search.png", | |
| "ViDraft-Image-search.png", | |
| "ViDraft-TTS.png", | |
| "ViDraft-image-remove background.png", | |
| "ViDraft-video-remove-back.png", | |
| "ViDraft-video-comp.png", | |
| "ViDraft-image-comp.png" | |
| ] | |
| image_texts = [ | |
| "Video Template(OpenAI SORA)", | |
| "Free Stock: Video Search", | |
| "Free Stock: Image Search", | |
| "Multilingual Text to Speech(TTS)", | |
| "Remove image background", | |
| "Remove Video background", | |
| "Video Compositing", | |
| "Image Compositing" | |
| ] | |
| for i in range(0, len(image_files), 3): | |
| cols = st.columns(3) | |
| for idx, col in enumerate(cols): | |
| if i + idx < len(image_files): | |
| col.image(image_files[i + idx], use_column_width=True) | |
| col.markdown(f"<div style='text-align: center; font-weight: bold; font-size: 20px;'>{image_texts[i + idx]}</div>", unsafe_allow_html=True) | |
| elif selected_menu == "Free Stock": | |
| # 'Free Stock' λ©λ΄ μ ν μ μ²λ¦¬ λ‘μ§ | |
| if st.session_state['current_sub_menu'] == "Template Video": | |
| st.header("Template Videos") | |
| st.write("Explore a variety of video templates crafted with the innovative technology of OpenAI SORA. Dive into an immersive experience with samples generated by the cutting-edge AI, showcasing the potential to transform your creative ideas into captivating visual stories.") | |
| # λΉλμ€ νμΌ κ²½λ‘ μ€μ λ° λΉλμ€ νμ λ‘μ§ | |
| video_files = ["ex1.mp4", "ex2.mp4", "ex3.mp4", "ex4.mp4", "ex5.mp4", "ex6.mp4", "ex7.mp4", "ex8.mp4", "ex9.mp4", "ex10.mp4", "ex11.mp4", "ex12.mp4", "ex13.mp4", "ex14.mp4", "ex15.mp4", "ex16.mp4", "ex17.mp4", "ex18.mp4"] | |
| # κ°€λ¬λ¦¬ ννλ‘ λΉλμ€ νμ | |
| cols = st.columns(2) # 2κ°μ μ΄λ‘ λκ² λ°°μΉ | |
| for index, video_file in enumerate(video_files): | |
| with cols[index % 2]: | |
| st.video(video_file) | |
| # 'Video' λ©λ΄ μ ν μ μ²λ¦¬ λ‘μ§ | |
| elif selected_menu == "Video": | |
| if st.session_state['current_sub_menu'] == "Generation": | |
| st.header("Video Generation") | |
| st.write("Create videos with our generation tools.") | |
| elif st.session_state['current_sub_menu'] == "Talking Face": | |
| st.header("Talking Face Videos") | |
| st.write("Generate talking face videos from images.") | |
| # 'Sound' λ©λ΄ μ ν μ μ²λ¦¬ λ‘μ§ | |
| elif selected_menu == "Sound": | |
| if st.session_state['current_sub_menu'] == "Video SFX": | |
| st.header("Video Sound Effects") | |
| st.write("Enhance your videos with sound effects.") | |
| elif st.session_state['current_sub_menu'] == "Video Music": | |
| st.header("Video Music") | |
| st.write("Find the perfect music for your video content.") | |
| elif st.session_state['current_sub_menu'] == "Image SFX": | |
| st.header("Image Sound Effects") | |
| st.write("Add sound effects to your images.") | |
| elif st.session_state['current_sub_menu'] == "Image Music": | |
| st.header("Image Music") | |
| st.write("Associate music tracks with your images.") | |
| # 'Scripts' λ©λ΄ μ ν μ μ²λ¦¬ λ‘μ§ | |
| elif selected_menu == "Scripts": | |
| st.header("Scripts") | |
| st.write("Script writing tools and resources.") |