evelynsaltt commited on
Commit
56132ca
·
verified ·
1 Parent(s): 2f8531e

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +42 -76
src/streamlit_app.py CHANGED
@@ -1,110 +1,76 @@
1
  import streamlit as st
2
  import os
3
 
 
4
  VIDEO_FOLDER = "./src/synthda_falling_realreal/"
5
 
6
- # Page layout settings
7
- st.set_page_config(layout="wide", initial_sidebar_state="collapsed")
8
 
9
- # Custom styles for centering and reducing video size
10
  st.markdown("""
11
- <style>
12
- html, body, [class*="css"] {
13
- padding: 0;
14
- margin: 0;
15
- font-size: 14px;
16
- }
17
- .block-container {
18
- padding-top: 1rem;
19
- padding-bottom: 0rem;
20
- }
21
- .video-wrapper {
22
- display: flex;
23
- justify-content: center;
24
- }
25
- video {
26
- width: 100%;
27
- max-width: 300px; /* Shrink video */
28
- height: auto;
29
- border-radius: 6px;
30
- }
31
- .video-caption {
32
- text-align: center;
33
- font-weight: bold;
34
- margin-bottom: 0.2rem;
35
- }
36
- </style>
37
  """, unsafe_allow_html=True)
38
 
39
- # Title and description
40
- st.markdown("""
41
- <h2 style='text-align: center;'>Project SynthDa</h2>
42
- <h4 style='text-align: center;'>SynthDa Interpolation Demo Viewer</h4>
43
- <p style='text-align: center;'>
44
- AutoSynthDa blends two input motion videos to <strong>generate kinematically coherent, synthetic action videos</strong>.<br>
45
- Use the slider below to explore how the system interpolates motion from one video to another.<br>
46
- <a href="https://github.com/nvidia/synthda" target="_blank">github.com/nvidia/synthda</a>
47
- </p>
48
- """, unsafe_allow_html=True)
49
 
50
- # Slider
51
- weight = st.slider("Interpolation Weight (0 = Left Video, 1 = Right Video)", 0.1, 0.9, 0.5, step=0.1)
52
 
53
- # Interpolation status
54
  if weight == 0.0:
55
  interp_text = "Showing Input Video 1 (no interpolation)"
56
  elif weight == 1.0:
57
  interp_text = "Showing Input Video 2 (no interpolation)"
58
  else:
59
  w2 = round(1.0 - weight, 1)
60
- interp_text = f"{weight:.1f} from Input 1 + {w2:.1f} from Input 2"
61
 
62
- st.markdown(f"<p style='text-align:center;'><strong>{interp_text}</strong></p>", unsafe_allow_html=True)
63
 
64
- # Video paths
65
  filename_interp = f"videos_generated_{weight:.1f}.mp4"
 
 
 
66
  video_interp = os.path.join(VIDEO_FOLDER, filename_interp)
67
- video_input1 = os.path.join(VIDEO_FOLDER, "videos_generated_0.0.mp4")
68
- video_input2 = os.path.join(VIDEO_FOLDER, "videos_generated_1.0.mp4")
 
 
 
 
69
 
70
- # 3 videos in row
71
- col1, col2, col3 = st.columns([1, 1, 1])
72
 
73
  with col1:
74
- st.markdown("<div class='video-caption'>Input Video 1</div>", unsafe_allow_html=True)
75
- if os.path.exists(video_input1):
76
- st.markdown(f"""
77
- <div class='video-wrapper'>
78
- <video controls>
79
- <source src="{video_input1}" type="video/mp4">
80
- </video>
81
- </div>
82
- """, unsafe_allow_html=True)
83
  else:
84
  st.error("Video 1 not found")
85
 
86
  with col2:
87
- st.markdown("<div class='video-caption'>Interpolated Video</div>", unsafe_allow_html=True)
88
- if os.path.exists(video_interp):
89
- st.markdown(f"""
90
- <div class='video-wrapper'>
91
- <video controls>
92
- <source src="{video_interp}" type="video/mp4">
93
- </video>
94
- </div>
95
- """, unsafe_allow_html=True)
96
  else:
97
  st.error("Interpolated video not found")
98
 
99
  with col3:
100
- st.markdown("<div class='video-caption'>Input Video 2</div>", unsafe_allow_html=True)
101
- if os.path.exists(video_input2):
102
- st.markdown(f"""
103
- <div class='video-wrapper'>
104
- <video controls>
105
- <source src="{video_input2}" type="video/mp4">
106
- </video>
107
- </div>
108
- """, unsafe_allow_html=True)
109
  else:
110
  st.error("Video 2 not found")
 
1
  import streamlit as st
2
  import os
3
 
4
+ # Video directory
5
  VIDEO_FOLDER = "./src/synthda_falling_realreal/"
6
 
7
+ # Set page layout
8
+ st.set_page_config(layout="wide")
9
 
10
+ # Title and description (centered)
11
  st.markdown("""
12
+ <h1 style="text-align: center;">Project SynthDa</h1>
13
+ <h3 style="text-align: center;">SynthDa Interpolation Demo Viewer</h3>
14
+ <p style="text-align: center;">
15
+ AutoSynthDa blends two input motion videos to <strong>generate kinematically coherent, synthetic action videos</strong>.<br>
16
+ Use the slider below to explore how the system interpolates motion from one video to another.<br>
17
+ Source: <a href="https://github.com/nvidia/synthda" target="_blank">github.com/nvidia/synthda</a>
18
+ </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  """, unsafe_allow_html=True)
20
 
21
+ # Slider instruction (centered)
22
+ st.markdown(
23
+ '<p style="text-align: center;"><strong>Use the slider to control the interpolation between Input Video 1 (left) and Input Video 2 (right).</strong></p>',
24
+ unsafe_allow_html=True
25
+ )
 
 
 
 
 
26
 
27
+ # Slider (starts at 0.5)
28
+ weight = st.slider("Interpolation Weight", 0.1, 0.9, 0.5, step=0.1)
29
 
30
+ # Interpolation explanation (centered)
31
  if weight == 0.0:
32
  interp_text = "Showing Input Video 1 (no interpolation)"
33
  elif weight == 1.0:
34
  interp_text = "Showing Input Video 2 (no interpolation)"
35
  else:
36
  w2 = round(1.0 - weight, 1)
37
+ interp_text = f"Generated motion: {weight:.1f} from Input Video 1 + {w2:.1f} from Input Video 2"
38
 
39
+ st.markdown(f'<p style="text-align: center; color: #444;"><strong>{interp_text}</strong></p>', unsafe_allow_html=True)
40
 
41
+ # Filepaths
42
  filename_interp = f"videos_generated_{weight:.1f}.mp4"
43
+ filename_input1 = "videos_generated_0.0.mp4"
44
+ filename_input2 = "videos_generated_1.0.mp4"
45
+
46
  video_interp = os.path.join(VIDEO_FOLDER, filename_interp)
47
+ video_input1 = os.path.join(VIDEO_FOLDER, filename_input1)
48
+ video_input2 = os.path.join(VIDEO_FOLDER, filename_input2)
49
+
50
+ exists_interp = os.path.exists(video_interp)
51
+ exists_1 = os.path.exists(video_input1)
52
+ exists_2 = os.path.exists(video_input2)
53
 
54
+ # Layout: 3 columns for video display
55
+ col1, col2, col3 = st.columns(3)
56
 
57
  with col1:
58
+ st.markdown("<div style='text-align: center; font-weight: bold;'>Input Video 1</div>", unsafe_allow_html=True)
59
+ if exists_1:
60
+ st.video(video_input1)
 
 
 
 
 
 
61
  else:
62
  st.error("Video 1 not found")
63
 
64
  with col2:
65
+ st.markdown("<div style='text-align: center; font-weight: bold;'>Interpolated Video</div>", unsafe_allow_html=True)
66
+ if exists_interp:
67
+ st.video(video_interp)
 
 
 
 
 
 
68
  else:
69
  st.error("Interpolated video not found")
70
 
71
  with col3:
72
+ st.markdown("<div style='text-align: center; font-weight: bold;'>Input Video 2</div>", unsafe_allow_html=True)
73
+ if exists_2:
74
+ st.video(video_input2)
 
 
 
 
 
 
75
  else:
76
  st.error("Video 2 not found")