synthda-demo / src /streamlit_app.py
evelynsaltt's picture
temporary fix for recordingz
2f8531e verified
raw
history blame
3.52 kB
import streamlit as st
import os
VIDEO_FOLDER = "./src/synthda_falling_realreal/"
# Page layout settings
st.set_page_config(layout="wide", initial_sidebar_state="collapsed")
# Custom styles for centering and reducing video size
st.markdown("""
<style>
html, body, [class*="css"] {
padding: 0;
margin: 0;
font-size: 14px;
}
.block-container {
padding-top: 1rem;
padding-bottom: 0rem;
}
.video-wrapper {
display: flex;
justify-content: center;
}
video {
width: 100%;
max-width: 300px; /* Shrink video */
height: auto;
border-radius: 6px;
}
.video-caption {
text-align: center;
font-weight: bold;
margin-bottom: 0.2rem;
}
</style>
""", unsafe_allow_html=True)
# Title and description
st.markdown("""
<h2 style='text-align: center;'>Project SynthDa</h2>
<h4 style='text-align: center;'>SynthDa Interpolation Demo Viewer</h4>
<p style='text-align: center;'>
AutoSynthDa blends two input motion videos to <strong>generate kinematically coherent, synthetic action videos</strong>.<br>
Use the slider below to explore how the system interpolates motion from one video to another.<br>
<a href="https://github.com/nvidia/synthda" target="_blank">github.com/nvidia/synthda</a>
</p>
""", unsafe_allow_html=True)
# Slider
weight = st.slider("Interpolation Weight (0 = Left Video, 1 = Right Video)", 0.1, 0.9, 0.5, step=0.1)
# Interpolation status
if weight == 0.0:
interp_text = "Showing Input Video 1 (no interpolation)"
elif weight == 1.0:
interp_text = "Showing Input Video 2 (no interpolation)"
else:
w2 = round(1.0 - weight, 1)
interp_text = f"{weight:.1f} from Input 1 + {w2:.1f} from Input 2"
st.markdown(f"<p style='text-align:center;'><strong>{interp_text}</strong></p>", unsafe_allow_html=True)
# Video paths
filename_interp = f"videos_generated_{weight:.1f}.mp4"
video_interp = os.path.join(VIDEO_FOLDER, filename_interp)
video_input1 = os.path.join(VIDEO_FOLDER, "videos_generated_0.0.mp4")
video_input2 = os.path.join(VIDEO_FOLDER, "videos_generated_1.0.mp4")
# 3 videos in row
col1, col2, col3 = st.columns([1, 1, 1])
with col1:
st.markdown("<div class='video-caption'>Input Video 1</div>", unsafe_allow_html=True)
if os.path.exists(video_input1):
st.markdown(f"""
<div class='video-wrapper'>
<video controls>
<source src="{video_input1}" type="video/mp4">
</video>
</div>
""", unsafe_allow_html=True)
else:
st.error("Video 1 not found")
with col2:
st.markdown("<div class='video-caption'>Interpolated Video</div>", unsafe_allow_html=True)
if os.path.exists(video_interp):
st.markdown(f"""
<div class='video-wrapper'>
<video controls>
<source src="{video_interp}" type="video/mp4">
</video>
</div>
""", unsafe_allow_html=True)
else:
st.error("Interpolated video not found")
with col3:
st.markdown("<div class='video-caption'>Input Video 2</div>", unsafe_allow_html=True)
if os.path.exists(video_input2):
st.markdown(f"""
<div class='video-wrapper'>
<video controls>
<source src="{video_input2}" type="video/mp4">
</video>
</div>
""", unsafe_allow_html=True)
else:
st.error("Video 2 not found")