File size: 2,909 Bytes
4ba17b3
9c02460
4ba17b3
b0fe31d
2bb13f8
706f673
b0fe31d
3672275
b87aec8
706f673
641ce46
b87aec8
922bb51
b0fe31d
b87aec8
 
 
706f673
b0fe31d
b87aec8
 
 
 
 
e84fdcd
 
 
 
 
 
 
 
 
 
 
 
 
 
b87aec8
e84fdcd
b87aec8
 
4c72af5
3672275
 
 
b87aec8
4c72af5
3672275
 
2717354
b87aec8
3672275
 
 
 
b87aec8
b3a0c58
b87aec8
b3a0c58
b87aec8
b3a0c58
641ce46
b87aec8
 
 
922bb51
b87aec8
4c72af5
 
b0fe31d
 
 
 
 
 
 
3672275
b0fe31d
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import os

# Video directory
VIDEO_FOLDER = "./src/synthda_falling_realreal/"

# Set page layout
st.set_page_config(layout="wide")
st.title("AutoSynthDa Pose Interpolation Viewer")

st.markdown("""
### AutoSynthDa Interpolation Viewer

AutoSynthDa blends two input motion videos to **generate kinematically coherent, synthetic action videos**.  
Use the slider below to explore how the system interpolates motion from one video to another.  
Source: [github.com/nvidia/synthda](https://github.com/nvidia/synthda)
""")

# Slider instruction
st.markdown(
    '<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>',
    unsafe_allow_html=True
)

# Hide the orange filled track of the slider
st.markdown("""
    <style>
    /* Hide the filled track */
    .stSlider > div[data-baseweb="slider"] > div > div:nth-child(2) {
        background: transparent !important;
    }
    /* Optional: adjust track background to be subtle */
    .stSlider > div[data-baseweb="slider"] > div > div:first-child {
        background-color: #ccc !important;
    }
    </style>
""", unsafe_allow_html=True)

# Slider (starts at 0.5)
weight = st.slider("Interpolation Weight", 0.1, 0.9, 0.5, step=0.1)

# Filenames
filename_interp = f"videos_generated_{weight:.1f}.mp4"
filename_input1 = "videos_generated_0.0.mp4"
filename_input2 = "videos_generated_1.0.mp4"

# Full paths
video_interp = os.path.join(VIDEO_FOLDER, filename_interp)
video_input1 = os.path.join(VIDEO_FOLDER, filename_input1)
video_input2 = os.path.join(VIDEO_FOLDER, filename_input2)

# File checks
exists_interp = os.path.exists(video_interp)
exists_1 = os.path.exists(video_input1)
exists_2 = os.path.exists(video_input2)

# Interpolation status
if weight == 0.0:
    st.success("Showing Input Video 1 (no interpolation)")
elif weight == 1.0:
    st.success("Showing Input Video 2 (no interpolation)")
else:
    w2 = round(1.0 - weight, 1)
    st.info(
        f"Generated motion: {weight:.1f} from Input Video 1 + {w2:.1f} from Input Video 2"
    )

# Layout: 3 columns for videos
col1, col2, col3 = st.columns(3)

# Centered labels and video playback
with col1:
    st.markdown("<div style='text-align: center; font-weight: bold;'>Input Video 1</div>", unsafe_allow_html=True)
    if exists_1:
        st.video(video_input1)
    else:
        st.error("Video 1 not found")

with col2:
    st.markdown("<div style='text-align: center; font-weight: bold;'>Interpolated Video</div>", unsafe_allow_html=True)
    if exists_interp:
        st.video(video_interp)
    else:
        st.error("Interpolated video not found")

with col3:
    st.markdown("<div style='text-align: center; font-weight: bold;'>Input Video 2</div>", unsafe_allow_html=True)
    if exists_2:
        st.video(video_input2)
    else:
        st.error("Video 2 not found")