anycoder-44130152 / index.html
Mudrock10's picture
Upload folder using huggingface_hub
19d0825 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Video Extrapolation for Wide FOV Content</title>
<!-- Font Awesome -->
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
<style>
:root {
--primary-color: #3b82f6;
--secondary-color: #1e40af;
--accent-color: #60a5fa;
--dark-color: #1f2937;
--light-color: #f3f4f6;
--text-color: #374151;
--success-color: #10b981;
--warning-color: #f59e0b;
--error-color: #ef4444;
--processing-color: #8b5cf6;
--background-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
sans-serif;
line-height: 1.6;
color: var(--text-color);
background: var(--background-gradient);
min-height: 100vh;
overflow-x: hidden;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
header {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
position: sticky;
top: 0;
z-index: 100;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 0;
}
.logo {
font-size: 1.5rem;
font-weight: bold;
color: var(--primary-color);
display: flex;
align-items: center;
gap: 0.5rem;
}
.logo-icon {
font-size: 1.8rem;
}
.built-with {
font-size: 0.9rem;
color: var(--text-color);
text-decoration: none;
transition: color 0.3s ease;
display: flex;
align-items: center;
gap: 0.5rem;
}
.built-with:hover {
color: var(--primary-color);
}
main {
padding: 2rem 0;
}
.section {
background: rgba(255, 255, 255, 0.95);
border-radius: 20px;
padding: 2.5rem;
margin-bottom: 2rem;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.8);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.section:hover {
transform: translateY(-2px);
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
}
.section-title {
font-size: 2.2rem;
margin-bottom: 1.5rem;
color: var(--dark-color);
position: relative;
display: inline-block;
font-weight: 700;
}
.section-title::after {
content: "";
position: absolute;
bottom: -8px;
left: 0;
width: 100%;
height: 4px;
background: var(--primary-color);
border-radius: 2px;
box-shadow: 0 4px 8px rgba(59, 130, 246, 0.3);
}
.info-card {
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.9) 0%,
rgba(255, 255, 255, 0.7) 100%);
border-left: 5px solid var(--primary-color);
padding: 1.5rem;
margin: 2rem 0;
border-radius: 0 12px 12px 0;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08);
position: relative;
overflow: hidden;
}
.info-card::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--primary-color);
animation: shimmer 3s infinite;
}
/* Upload Section */
.upload-section {
margin-bottom: 2.5rem;
}
.upload-container {
border: 3px dashed var(--accent-color);
border-radius: 16px;
padding: 3rem;
text-align: center;
transition: all 0.3s ease;
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.3) 0%,
rgba(255, 255, 255, 0.1) 100%);
position: relative;
overflow: hidden;
cursor: pointer;
}
.upload-container::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(102, 126, 234, 0.05) 0%,
rgba(118, 75, 162, 0.05) 100%);
z-index: 0;
}
.upload-container.dragover {
border-color: var(--primary-color);
background: linear-gradient(135deg,
rgba(255, 255, 255, 0.6) 0%,
rgba(255, 255, 255, 0.3) 100%);
transform: scale(1.02);
box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.25);
}
.upload-icon {
font-size: 4rem;
color: var(--primary-color);
margin-bottom: 1.5rem;
position: relative;
z-index: 1;
animation: float 3s ease-in-out infinite;
}
.upload-text {
font-size: 1.2rem;
color: var(--dark-color);
margin-bottom: 1.5rem;
position: relative;
z-index: 1;
}
.file-input-wrapper {
position: relative;
display: inline-block;
margin: 1.5rem 0;
z-index: 1;
}
.file-input {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
.file-input-label {
display: inline-flex;
align-items: center;
gap: 0.6rem;
padding: 1rem 2rem;
background: var(--primary-color);
color: white;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 600;
font-size: 1.1rem;
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.3);
position: relative;
overflow: hidden;
}
.file-input-label::before {
content: "";
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent,
rgba(255, 255, 255, 0.25),
transparent);
transition: left 0.5s;
}
.file-input-label:hover::before {
left: 100%;
}
.file-input-label:hover {
background: var(--secondary-color);
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(30, 64, 175, 0.4);
}
.upload-hint {
font-size: 0.9rem;
opacity: 0.8;
margin-top: 0.75rem;
}
.upload-error {
margin-top: 1rem;
color: var(--error-color);
font-size: 0.95rem;
display: none;
}
/* Video preview */
.video-preview {
margin-top: 2.5rem;
display: none;
animation: fadeIn 0.5s ease;
}
.video-preview.active {
display: block;
}
.video-container {
position: relative;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
background: var(--dark-color);
}
.video-container::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.3) 0%,
rgba(0, 0, 0, 0.1) 100%);
z-index: 1;
pointer-events: none;
}
video {
width: 100%;
max-height: 400px;
display: block;
position: relative;
z-index: 2;
border-radius: 12px;
background: black;
}
.video-overlay {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background: rgba(0, 0, 0, 0.3);
z-index: 3;
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
}
.video-container:hover .video-overlay {
opacity: 1;
}
.video-filename {
margin-top: 0.75rem;
font-size: 0.95rem;
color: var(--dark-color);
display: flex;
align-items: center;
gap: 0.5rem;
word-break: break-all;
}
.height-control {
display: flex;
align-items: center;
gap: 1.5rem;
margin-top: 1.5rem;
background: var(--light-color);
padding: 1rem 1.5rem;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
flex-wrap: wrap;
}
.height-slider {
flex: 1;
max-width: 300px;
height: 8px;
background: var(--light-color);
border-radius: 4px;
outline: none;
-webkit-appearance: none;
appearance: none;
}
.height-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
background: var(--primary-color);
border-radius: 50%;
cursor: pointer;
box-shadow: 0 2px 10px rgba(59, 130, 246, 0.3);
transition: all 0.3s ease;
}
.height-slider::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.5);
}
.height-value {
min-width: 70px;
text-align: center;
font-weight: bold;
color: var(--primary-color);
font-size: 1.05rem;
background: white;
padding: 0.5rem 1rem;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.video-controls {
margin-top: 1.5rem;
display: flex;
gap: 1.5rem;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
.control-btn {
padding: 1rem 2rem;
border: none;
border-radius: 12px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 0.75rem;
font-size: 1.05rem;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
position: relative;
overflow: hidden;
}
.control-btn::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.25);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
.control-btn:active::before {
width: 260px;
height: 260px;
}
.control-btn.primary {
background: var(--primary-color);
color: white;
box-shadow: 0 6px 20px rgba(59, 130, 246, 0.4);
}
.control-btn.primary:hover:not(:disabled) {
background: var(--secondary-color);
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(30, 64, 175, 0.5);
}
.control-btn.secondary {
background: var(--light-color);
color: var(--dark-color);
}
.control-btn.secondary:hover:not(:disabled) {
background: var(--accent-color);
color: white;
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(96, 165, 250, 0.4);
}
.control-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none !important;
}
/* Processing Status */
.processing-status {
margin-top: 2rem;
padding: 1.5rem;
background: linear-gradient(135deg, var(--light-color) 0%, white 100%);
border-radius: 16px;
display: none;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(0, 0, 0, 0.05);
}
.processing-status.active {
display: block;
animation: slideIn 0.5s ease;
}
.status-header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1.5rem;
}
.status-icon {
font-size: 1.5rem;
color: var(--processing-color);
animation: spin 2s linear infinite;
}
.status-text {
font-weight: 700;
color: var(--processing-color);
font-size: 1.15rem;
}
.status-steps {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 1rem;
}
.status-step {
padding: 1rem;
background: white;
border-radius: 12px;
display: flex;
flex-direction: column;
gap: 0.35rem;
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
border: 2px solid transparent;
font-size: 0.95rem;
}
.status-step-header {
display: flex;
align-items: center;
gap: 0.75rem;
}
.status-step-icon {
width: 30px;
height: 30px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
font-weight: 700;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
background: var(--light-color);
color: var(--dark-color);
}
.status-step-message {
opacity: 0.8;
}
.status-step.completed {
background: rgba(16, 185, 129, 0.08);
color: var(--success-color);
border-color: var(--success-color);
}
.status-step.completed .status-step-icon {
background: var(--success-color);
color: white;
}
.status-step.active {
background: rgba(139, 92, 246, 0.08);
color: var(--processing-color);
border-color: var(--processing-color);
font-weight: 600;
transform: scale(1.02);
}
.status-step.active .status-step-icon {
background: var(--processing-color);
color: white;
animation: pulse 1.5s infinite;
}
.status-step-progress {
font-size: 0.85rem;
color: var(--text-color);
opacity: 0.7;
}
/* Progress Bar */
.progress-container {
width: 100%;
background: var(--light-color);
border-radius: 12px;
height: 12px;
margin: 1.5rem 0;
overflow: hidden;
display: none;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
.progress-container.active {
display: block;
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg,
var(--processing-color) 0%,
var(--accent-color) 100%);
border-radius: 12px;
width: 0%;
transition: width 0.35s ease;
box-shadow: 0 0 10px rgba(139, 92, 246, 0.5);
}
.progress-label {
display: flex;
justify-content: space-between;
margin-top: 0.5rem;
font-size: 0.9rem;
color: var(--text-color);
opacity: 0.7;
}
/* Diagram (unchanged except for minor clean-up) */
.diagram-container {
margin: 3rem 0;
position: relative;
}
.diagram {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-template-rows: auto 1fr auto;
gap: 1.5rem;
align-items: center;
justify-items: center;
margin-bottom: 2.5rem;
perspective: 1000px;
}
.blend-section {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.blend-section:hover {
transform: translateY(-5px);
}
.blend-label {
background: var(--primary-color);
color: white;
padding: 0.75rem 2rem;
border-radius: 30px;
font-weight: 700;
margin-bottom: 1.5rem;
box-shadow: 0 6px 15px rgba(59, 130, 246, 0.3);
font-size: 1.1rem;
position: relative;
overflow: hidden;
}
.blend-label::after {
content: "";
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg,
transparent,
rgba(255, 255, 255, 0.25),
transparent);
transition: left 0.8s;
}
.blend-section:hover .blend-label::after {
left: 100%;
}
.frame-container {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
width: 100%;
}
.frame {
width: 100%;
height: 180px;
background: #2d3748;
border: 3px solid var(--accent-color);
border-radius: 12px;
position: relative;
overflow: hidden;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1rem;
text-align: center;
padding: 1rem;
}
.frame::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(135deg,
rgba(0, 0, 0, 0.25) 0%,
transparent 50%,
rgba(0, 0, 0, 0.25) 100%);
z-index: 1;
}
.frame-content {
position: relative;
z-index: 2;
font-weight: 500;
}
.target-frame {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
transform: scale(1.15) rotateY(5deg);
z-index: 20;
border: 3px solid var(--success-color);
grid-column: 2;
grid-row: 2;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
}
.top-blend {
grid-column: 2;
grid-row: 1;
}
.bottom-blend {
grid-column: 2;
grid-row: 3;
}
.left-blend {
grid-column: 1;
grid-row: 2;
}
.right-blend {
grid-column: 3;
grid-row: 2;
}
.blend-arrow {
display: flex;
align-items: center;
justify-content: center;
margin: 2rem 0;
gap: 1rem;
}
.arrow {
width: 50px;
height: 50px;
background: var(--primary-color);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
box-shadow: 0 6px 20px rgba(59, 130, 246, 0.4);
transition: all 0.3s ease;
}
.arrow:hover {
transform: scale(1.1);
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.6);
}
.output-frame {
width: 100%;
height: 250px;
background: #1a202c;
border: 4px solid var(--success-color);
border-radius: 16px;
position: relative;
overflow: hidden;
margin-top: 2.5rem;
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
display: none;
animation: slideUp 0.5s ease;
}
.output-frame.active {
display: block;
}
.output-content {
position: relative;
z-index: 2;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: white;
font-size: 1.2rem;
text-align: center;
padding: 1.5rem;
}
.output-badge {
background: var(--success-color);
color: white;
padding: 0.5rem 1.5rem;
border-radius: 20px;
font-weight: 600;
margin-bottom: 1rem;
box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);
animation: pulse 2s infinite;
}
/* Stats & Success */
.success-message {
display: none;
padding: 1.5rem;
background: linear-gradient(135deg,
rgba(16, 185, 129, 0.1) 0%,
rgba(16, 185, 129, 0.05) 100%);
border: 2px solid var(--success-color);
border-radius: 16px;
margin: 2rem 0;
text-align: center;
color: var(--success-color);
font-weight: 600;
font-size: 1.1rem;
box-shadow: 0 10px 30px rgba(16, 185, 129, 0.2);
animation: bounceIn 0.5s ease;
}
.success-message.active {
display: block;
}
.stats-display {
display: none;
justify-content: space-around;
margin: 2rem 0;
flex-wrap: wrap;
gap: 1.5rem;
}
.stats-display.active {
display: flex;
}
.stat-item {
background: white;
padding: 1.5rem;
border-radius: 12px;
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
text-align: center;
flex: 1;
min-width: 150px;
transition: transform 0.3s ease;
}
.stat-item:hover {
transform: translateY(-5px);
}
.stat-value {
font-size: 1.9rem;
font-weight: 700;
color: var(--primary-color);
margin-bottom: 0.4rem;
}
.stat-label {
color: var(--text-color);
opacity: 0.8;
font-size: 0.9rem;
}
/* Features (kept short) */
.features {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 1.75rem;
margin-top: 2rem;
}
.feature-card {
background: white;
border-radius: 16px;
padding: 1.75rem;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
border: 1px solid rgba(0, 0, 0, 0.05);
position: relative;
overflow: hidden;
}
.feature-card::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: var(--primary-color);
transform: scaleX(0);
transition: transform 0.3s ease;
}
.feature-card:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
}
.feature-card:hover::before {
transform: scaleX(1);
}
.feature-icon {
font-size: 2.3rem;
color: var(--primary-color);
margin-bottom: 1.3rem;
position: relative;
}
.feature-title {
font-size: 1.3rem;
margin-bottom: 0.7rem;
color: var(--dark-color);
font-weight: 700;
}
.feature-description {
color: var(--text-color);
opacity: 0.85;
line-height: 1.7;
font-size: 0.98rem;
}
footer {
background: rgba(255, 255, 255, 0.95);
padding: 2.5rem 0;
margin-top: 3rem;
text-align: center;
border-top: 1px solid rgba(0, 0, 0, 0.05);
}
.footer-content {
display: flex;
flex-direction: column;
gap: 1rem;
}
.footer-logo {
font-size: 1.1rem;
color: var(--text-color);
opacity: 0.8;
}
/* Animations & media queries */
@keyframes float {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideIn {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.08);
}
100% {
transform: scale(1);
}
}
@keyframes bounceIn {
0% {
opacity: 0;
transform: scale(0.3);
}
50% {
opacity: 1;
transform: scale(1.05);
}
70% {
transform: scale(0.9);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes shimmer {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@media (max-width: 768px) {
.section {
padding: 2rem 1.5rem;
}
.diagram {
grid-template-columns: 1fr;
grid-template-rows: auto auto auto auto auto;
}
.top-blend {
grid-column: 1;
grid-row: 1;
}
.left-blend {
grid-column: 1;
grid-row: 2;
}
.target-frame {
grid-column: 1;
grid-row: 3;
}
.right-blend {
grid-column: 1;
grid-row: 4;
}
.bottom-blend {
grid-column: 1;
grid-row: 5;
}
.video-controls {
flex-direction: column;
}
.height-slider {
max-width: 100%;
}
}
</style>
</head>
<body>
<header>
<div class="container header-content">
<div class="logo">
<i class="fas fa-video logo-icon"></i>
Video Extrapolation Framework
</div>
<a href="https://huggingface.co/spaces/akhaliq/anycoder" class="built-with" target="_blank">
<i class="fas fa-code"></i>
Built with anycoder
</a>
</div>
</header>
<main class="container">
<section class="section">
<h1 class="section-title">Wide FOV Video Extrapolation</h1>
<p class="info-card">
With the popularity of immersive display systems that fill the viewer's field of view (FOV) entirely, demand
for wide FOV content has increased. A video extrapolation technique based on reuse of existing videos is one of
the most efficient ways to produce wide FOV content.
</p>
<!-- Upload Section -->
<div class="upload-section">
<h2 class="section-title">Upload Video</h2>
<div class="upload-container" id="uploadZone">
<div class="upload-icon">
<i class="fas fa-cloud-upload-alt"></i>
</div>
<p class="upload-text">
Drag &amp; drop a video file here, or click to browse
</p>
<div class="file-input-wrapper">
<input type="file" id="videoFile" class="file-input" accept="video/*" />
<label for="videoFile" class="file-input-label">
<i class="fas fa-folder-open"></i>
<span>Select Video</span>
</label>
</div>
<p class="upload-hint">
Supported formats: MP4, WebM, Ogg, MOV (browser-supported only, max size: 100&nbsp;MB)
</p>
<div class="upload-error" id="uploadError"></div>
</div>
<!-- Preview -->
<div class="video-preview" id="videoPreview">
<div class="video-container">
<video id="previewVideo" controls playsinline>
Your browser does not support the video tag.
</video>
<div class="video-overlay">
<div style="text-align: center; color: white;">
<i class="fas fa-play-circle" style="font-size: 3rem; margin-bottom: 0.5rem;"></i>
<p>Hover to reveal overlay, use native controls to play</p>
</div>
</div>
</div>
<div class="video-filename" id="videoFilename" style="display:none;">
<i class="fas fa-file-video"></i>
<span></span>
</div>
<div class="height-control">
<label for="heightSlider">Preview Height</label>
<input type="range" id="heightSlider" class="height-slider" min="200" max="800" value="400" />
<span class="height-value" id="heightValue">400px</span>
</div>
<div class="video-controls">
<button class="control-btn primary" id="processBtn">
<i class="fas fa-play"></i>
<span>Process Video</span>
</button>
<button class="control-btn secondary" id="resetBtn">
<i class="fas fa-redo"></i>
<span>Reset</span>
</button>
</div>
</div>
</div>
<!-- Processing status -->
<div class="processing-status" id="processingStatus">
<div class="status-header">
<i class="fas fa-spinner status-icon"></i>
<span class="status-text" id="statusMainText">Processing Video...</span>
</div>
<div class="status-steps">
<div class="status-step active" id="step1">
<div class="status-step-header">
<div class="status-step-icon">1</div>
<div class="status-step-title">Initializing analysis</div>
</div>
<div class="status-step-message">Preparing frames and metadata.</div>
<div class="status-step-progress">0%</div>
</div>
<div class="status-step" id="step2">
<div class="status-step-header">
<div class="status-step-icon">2</div>
<div class="status-step-title">Extracting 3D scene points</div>
</div>
<div class="status-step-message">Estimating structure from motion.</div>
<div class="status-step-progress">0%</div>
</div>
<div class="status-step" id="step3">
<div class="status-step-header">
<div class="status-step-icon">3</div>
<div class="status-step-title">Matching viewpoints</div>
</div>
<div class="status-step-message">Aligning multiple camera poses.</div>
<div class="status-step-progress">0%</div>
</div>
<div class="status-step" id="step4">
<div class="status-step-header">
<div class="status-step-icon">4</div>
<div class="status-step-title">Applying blending algorithms</div>
</div>
<div class="status-step-message">Synthesizing extended views.</div>
<div class="status-step-progress">0%</div>
</div>
<div class="status-step" id="step5">
<div class="status-step-header">
<div class="status-step-icon">5</div>
<div class="status-step-title">Generating wide FOV output</div>
</div>
<div class="status-step-message">Final reconstruction and export.</div>
<div class="status-step-progress">0%</div>
</div>
</div>
</div>
<div class="progress-container" id="progressContainer">
<div class="progress-bar" id="progressBar"></div>
</div>
<div class="progress-label" id="progressLabel" style="display:none;">
<span id="progressPercentText">0%</span>
<span>100%</span>
</div>
<div class="success-message" id="successMessage">
<i class="fas fa-check-circle"></i>
<span>Video processing completed successfully. Wide FOV content simulated.</span>
</div>
<div class="stats-display" id="statsDisplay">
<div class="stat-item">
<div class="stat-value" id="frameCount">0</div>
<div class="stat-label">Estimated Frames</div>
</div>
<div class="stat-item">
<div class="stat-value" id="processingTime">0s</div>
<div class="stat-label">Processing Time</div>
</div>
<div class="stat-item">
<div class="stat-value" id="fovExtension"></div>
<div class="stat-label">FOV Extension</div>
</div>
</div>
<!-- Diagram & output -->
<div class="diagram-container">
<div class="diagram">
<div class="blend-section top-blend">
<div class="blend-label">Top Blending</div>
<div class="frame-container">
<div class="frame" id="topFrame1">
<div class="frame-content">Frame T1</div>
</div>
<div class="frame" id="topFrame2">
<div class="frame-content">Frame T2</div>
</div>
<div class="frame" id="topFrame3">
<div class="frame-content">Frame T3</div>
</div>
<div class="frame" id="topFrame4">
<div class="frame-content">Frame T4</div>
</div>
</div>
</div>
<div class="blend-section left-blend">
<div class="blend-label">Left Blending</div>
<div class="frame-container">
<div class="frame" id="leftFrame1">
<div class="frame-content">Frame L1</div>
</div>
<div class="frame" id="leftFrame2">
<div class="frame-content">Frame L2</div>
</div>
<div class="frame" id="leftFrame3">
<div class="frame-content">Frame L3</div>
</div>
<div class="frame" id="leftFrame4">
<div class="frame-content">Frame L4</div>
</div>
</div>
</div>
<div class="blend-section right-blend">
<div class="blend-label">Right Blending</div>
<div class="frame-container">
<div class="frame" id="rightFrame1">
<div class="frame-content">Frame R1</div>
</div>
<div class="frame" id="rightFrame2">
<div class="frame-content">Frame R2</div>
</div>
<div class="frame" id="rightFrame3">
<div class="frame-content">Frame R3</div>
</div>
<div class="frame" id="rightFrame4">
<div class="frame-content">Frame R4</div>
</div>
</div>
</div>
<div class="blend-section bottom-blend">
<div class="blend-label">Bottom Blending</div>
<div class="frame-container">
<div class="frame" id="bottomFrame1">
<div class="frame-content">Frame B1</div>
</div>
<div class="frame" id="bottomFrame2">
<div class="frame-content">Frame B2</div>
</div>
<div class="frame" id="bottomFrame3">
<div class="frame-content">Frame B3</div>
</div>
<div class="frame" id="bottomFrame4">
<div class="frame-content">Frame B4</div>
</div>
</div>
</div>
<div class="frame target-frame" id="targetFrame">
<div class="frame-content">Target Frame</div>
</div>
</div>
<div class="blend-arrow">
<div class="arrow"><i class="fas fa-arrow-down"></i></div>
<span style="margin: 0 1rem; font-weight: 700; font-size: 1.15rem;">Blend</span>
<div class="arrow"><i class="fas fa-arrow-down"></i></div>
</div>
<div class="output-frame" id="outputFrame">
<div class="output-content">
<div class="output-badge">COMPLETE</div>
O<sub>target</sub> – Extrapolated Wide FOV Output (Demo)
</div>
</div>
</div>
</section>
<!-- Features -->
<section class="section">
<h2 class="section-title">Key Features</h2>
<div class="features">
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-cube"></i>
</div>
<h3 class="feature-title">3D Scene Understanding</h3>
<p class="feature-description">
Utilizes three-dimensional scene points to match viewpoints between different frames, overcoming parallax
challenges with advanced computer vision algorithms.
</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-layer-group"></i>
</div>
<h3 class="feature-title">Multi-Frame Integration</h3>
<p class="feature-description">
Integrates information from all frames in the input video into each frame for comprehensive scene
understanding and seamless transitions.
</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-magic"></i>
</div>
<h3 class="feature-title">Advanced Blending</h3>
<p class="feature-description">
Intelligent blending algorithms create seamless extended views with natural transitions and realistic
perspective correction.
</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-tachometer