File size: 10,331 Bytes
cead143
1a8a86c
4862dc2
 
60d5502
4862dc2
671d7a3
28cb32b
 
 
 
 
 
 
 
 
 
2f686d1
28cb32b
 
 
 
 
 
 
 
 
 
 
 
5888805
4862dc2
28cb32b
 
 
 
4862dc2
28cb32b
 
 
 
60d5502
f562484
 
 
 
 
 
 
 
 
 
bb92fc2
f562484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bb92fc2
c4ad0e3
 
1a8a86c
 
 
d89edc0
1a8a86c
d89edc0
1a8a86c
 
d89edc0
 
 
 
 
1a8a86c
d89edc0
1a8a86c
d89edc0
1a8a86c
 
d89edc0
 
 
 
 
1a8a86c
2f81155
1a8a86c
 
 
d89edc0
2f81155
 
 
 
1a8a86c
d89edc0
1a8a86c
 
 
d89edc0
2f81155
 
 
 
1a8a86c
4862dc2
 
 
 
 
 
edfc9c4
c187d44
82676c7
edfc9c4
d444a94
 
 
 
 
 
 
 
 
 
 
 
 
82676c7
d444a94
 
82676c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d444a94
edfc9c4
d80d56f
edfc9c4
 
0cc46fe
edfc9c4
 
 
 
 
 
 
4aefbe4
edfc9c4
d80d56f
edfc9c4
 
 
 
 
 
 
 
 
 
4862dc2
edfc9c4
 
 
 
d80d56f
edfc9c4
 
 
 
 
 
 
 
 
 
 
 
 
 
d80d56f
edfc9c4
 
 
 
 
 
 
 
 
 
 
 
 
 
d80d56f
edfc9c4
 
150cfea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
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": ["Generation", "Face ID", "Inpainting", "Remove Background", "Studio"],
    "Video": ["Generation", "Talking Face", "Remove Background", "Studio"],
    "Sound": ["Video SFX", "Video Music", "TTS(Voice)", "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://seawolf2357-gttstest.hf.space", width=None, height=600, scrolling=True)

# 'Home' νŽ˜μ΄μ§€ ν‘œμ‹œ
if selected_menu == "Home":
    st.image("banner.jpg", use_column_width=True)    
    st.header("Welcome to ViDraft")
    
    # ν™˜μ˜ λ©”μ‹œμ§€ 및 μ„œλΉ„μŠ€ μ„€λͺ…
    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.
    """    
    st.write(welcome_text)

    # 이미지듀을 ν•œ 쀄에 배치
    cols = st.columns(4)  # 4개의 μ—΄ 생성
    image_files = [
        "ViDraft-Video-Templet.png",
        "ViDraft-Video-search.png",
        "ViDraft-Image-search.png",
        "ViDraft-TTS.png"
    ]
    image_texts = [
        "Video Template",
        "Video Search",
        "Image Search",
        "TTS (Voice)"
    ]
    for col, img_file, img_text in zip(cols, image_files, image_texts):
        with col:
            st.image(img_file, use_column_width=True)
            st.caption(img_text)  # 파일λͺ…을 톡해 이미지 μ•„λž˜ ν…μŠ€νŠΈ 반영
            

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)


# 'Image' 메뉴 선택 μ‹œ 처리 둜직
elif selected_menu == "Image":
    if st.session_state['current_sub_menu'] == "Generation":
        st.header("Image Generation")
        st.write("Generate images using AI.")
    elif st.session_state['current_sub_menu'] == "Face ID":
        st.header("Face ID")
        st.write("Identify and analyze faces in images.")
    elif st.session_state['current_sub_menu'] == "Inpainting":
        st.header("Inpainting")
        st.write("Fill in missing parts of images.")

    elif st.session_state['current_sub_menu'] == "Studio":
        st.header("Image Studio")
        st.write("Access a suite of image editing tools.")

# '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.")
    elif st.session_state['current_sub_menu'] == "Remove Background":
        st.header("Video Background Removal")
        st.write("Remove backgrounds from your videos effortlessly.")
    elif st.session_state['current_sub_menu'] == "Studio":
        st.header("Video Studio")
        st.write("Explore our video editing studio for advanced editing.")

# '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.")