File size: 2,725 Bytes
5978ae3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st

def main():
    st.set_page_config(page_title="VidTune: Where Videos Find Their Melody", layout="centered")

    # Title and Description
    st.title("VidTune: Where Videos Find Their Melody")
    st.write("VidTune is a web application that allows users to upload videos and generate melodies matching the mood of the video.")
    
    # Main Page (Page 1)
    if 'page' not in st.session_state:
        st.session_state.page = 'main'
    
    if st.session_state.page == 'main':
        st.header("Video to Music")
        uploaded_video = st.file_uploader("Upload Video", type=["mp4"])
        if uploaded_video is not None:
            st.session_state.uploaded_video = uploaded_video
            st.session_state.page = 'video_to_music'
        
        if st.session_state.page == 'main':
            st.header("Prompt to Music")
            prompt = st.text_area("Prompt")
            if st.button("Generate"):
                st.session_state.prompt = prompt
                st.session_state.page = 'prompt_to_music'
    
    # Page 2a (If the user uploads a video)
    if st.session_state.page == 'video_to_music':
        st.sidebar.title("Settings")
        device = st.sidebar.selectbox("Select Device", ["GPU", "CPU"], index=0)
        num_samples = st.sidebar.slider("Number of samples", 1, 10, 3)
        
        st.video(st.session_state.uploaded_video)
        
        st.text_area("Video Description", "This is a fixed video description", disabled=True)
        st.text_area("Music Description")
        
        if st.button("Generate Music"):
            st.session_state.page = 'result'
            st.session_state.device = device
            st.session_state.num_samples = num_samples
    
    # Page 2b (If user selects "Prompt to Music" in Page 1)
    if st.session_state.page == 'prompt_to_music':
        st.sidebar.title("Settings")
        device = st.sidebar.selectbox("Select Device", ["GPU", "CPU"], index=0)
        num_samples = st.sidebar.slider("Number of samples", 1, 10, 3)
        
        if st.button("Generate Music"):
            st.session_state.page = 'result'
            st.session_state.device = device
            st.session_state.num_samples = num_samples
    
    # Page 3 (Results Page)
    if st.session_state.page == 'result':
        st.header("Generated Music")
        for i in range(st.session_state.num_samples):
            st.write(f"Music Sample {i+1}")
            st.audio(f"Generated Music {i+1}.mp3", format='audio/mp3')
            st.download_button(f"Download Music {i+1}", f"Generated Music {i+1}.mp3")
        
        if st.button("Start Over"):
            st.session_state.page = 'main'

if __name__ == "__main__":
    main()