File size: 10,851 Bytes
cead143
1a8a86c
4862dc2
 
60d5502
4862dc2
671d7a3
28cb32b
 
 
 
 
 
 
 
 
 
2f686d1
8eb8148
 
6272ab8
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
8eb8148
4862dc2
 
 
 
e8f12b0
4862dc2
b758ac3
8eb8148
 
 
b758ac3
8eb8148
2d944d1
 
 
 
 
 
 
 
 
 
5dc634f
2d944d1
 
 
8eb8148
edfc9c4
c187d44
cb97e6c
c1f64d0
7c574ed
573089b
d444a94
 
 
 
 
 
 
 
 
 
 
 
e26b941
6e59df6
82676c7
d444a94
 
82676c7
 
 
 
 
 
eccd417
cbf3203
1ea3e92
 
82676c7
5eebf86
82676c7
e26b941
 
 
 
cbf3203
1ea3e92
 
 
82676c7
5eebf86
 
 
 
 
 
 
 
 
d444a94
edfc9c4
d80d56f
edfc9c4
 
0cc46fe
edfc9c4
 
 
 
 
 
 
4aefbe4
edfc9c4
d80d56f
edfc9c4
 
 
 
 
 
 
2d944d1
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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
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": ["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)
     


# '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: arxivgpt@gmail.com  / Powered by ArXivGPT, Huggingface, Gradio, Streamlit
    """    
    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",
        "ViDraft-image-remove background.png",
        "ViDraft-video-remove-back.png",
        "ViDraft-video-comp.png"      
    ]
    
    image_texts = [
        "Video Template(OpenAI SORA)",
        "Free Stock: Video Search",
        "Free Stock: Image Search",
        "Multilingual Text to Speech(TTS)",
        "Remove image background",
        "Image Compositing",
        "Remove Video background",
        "Video Compositing"        
    ]

 # 이미지듀을 ν•œ 쀄에 4μž₯μ”© 배치
    for i in range(0, len(image_files), 4):
        cols = st.columns(4)  # 4개의 μ—΄ 생성
        for col, img_file, img_text in zip(cols, image_files[i:i+4], image_texts[i:i+4]):
            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)


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