Upload 4 files
Browse files- Dockerfile +18 -0
- app.py +256 -0
- prompts.json +164 -0
- requirements.txt +2 -0
Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use Python 3.9
|
| 2 |
+
FROM python:3.9
|
| 3 |
+
|
| 4 |
+
# Set working directory
|
| 5 |
+
WORKDIR /code
|
| 6 |
+
|
| 7 |
+
# Copy requirements and install
|
| 8 |
+
COPY ./requirements.txt /code/requirements.txt
|
| 9 |
+
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
| 10 |
+
|
| 11 |
+
# Copy all files (videos, py, json) to the container
|
| 12 |
+
COPY . .
|
| 13 |
+
|
| 14 |
+
# Make sure folder permissions are correct
|
| 15 |
+
RUN chmod -R 777 /code
|
| 16 |
+
|
| 17 |
+
# Run the app using Gunicorn on port 7860 (Hugging Face default)
|
| 18 |
+
CMD ["gunicorn", "-b", "0.0.0.0:7860", "app:app"]
|
app.py
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import os
|
| 3 |
+
import re
|
| 4 |
+
from flask import Flask, render_template_string, send_from_directory
|
| 5 |
+
|
| 6 |
+
# --- CONFIGURATION ---
|
| 7 |
+
|
| 8 |
+
# Make sure these match your actual folder names exactly!
|
| 9 |
+
FOLDERS = {
|
| 10 |
+
'baseline': 'baseline',
|
| 11 |
+
'teacache': 'teacache',
|
| 12 |
+
'magcache': 'magcache',
|
| 13 |
+
'ours': 'ours'
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
PROMPT_FILE = 'prompts.json'
|
| 17 |
+
|
| 18 |
+
# --- LOGIC ---
|
| 19 |
+
|
| 20 |
+
app = Flask(__name__)
|
| 21 |
+
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
| 22 |
+
|
| 23 |
+
def get_prompts():
|
| 24 |
+
path = os.path.join(BASE_DIR, PROMPT_FILE)
|
| 25 |
+
if not os.path.exists(path):
|
| 26 |
+
return []
|
| 27 |
+
|
| 28 |
+
with open(path, 'r', encoding='utf-8') as f:
|
| 29 |
+
try:
|
| 30 |
+
content = json.load(f)
|
| 31 |
+
if isinstance(content, list): return content
|
| 32 |
+
except:
|
| 33 |
+
f.seek(0)
|
| 34 |
+
lines = [line.strip() for line in f if line.strip()]
|
| 35 |
+
return lines
|
| 36 |
+
|
| 37 |
+
def find_file_by_id(folder, video_id):
|
| 38 |
+
dir_path = os.path.join(BASE_DIR, folder)
|
| 39 |
+
if not os.path.exists(dir_path): return None
|
| 40 |
+
|
| 41 |
+
for fname in os.listdir(dir_path):
|
| 42 |
+
if fname.startswith(video_id) and fname.lower().endswith('.mp4'):
|
| 43 |
+
return fname
|
| 44 |
+
return None
|
| 45 |
+
|
| 46 |
+
def build_tasks():
|
| 47 |
+
tasks = []
|
| 48 |
+
prompts = get_prompts()
|
| 49 |
+
|
| 50 |
+
baseline_path = os.path.join(BASE_DIR, FOLDERS['baseline'])
|
| 51 |
+
if not os.path.exists(baseline_path):
|
| 52 |
+
print("Baseline folder missing!")
|
| 53 |
+
return []
|
| 54 |
+
|
| 55 |
+
baseline_files = sorted([f for f in os.listdir(baseline_path) if f.lower().endswith('.mp4')])
|
| 56 |
+
id_regex = re.compile(r'^(\d{4})')
|
| 57 |
+
|
| 58 |
+
for i, b_file in enumerate(baseline_files):
|
| 59 |
+
match = id_regex.match(b_file)
|
| 60 |
+
if not match: continue
|
| 61 |
+
|
| 62 |
+
vid_id = match.group(1)
|
| 63 |
+
prompt_text = prompts[i] if i < len(prompts) else "(No prompt)"
|
| 64 |
+
|
| 65 |
+
tea_file = find_file_by_id(FOLDERS['teacache'], vid_id)
|
| 66 |
+
mag_file = find_file_by_id(FOLDERS['magcache'], vid_id)
|
| 67 |
+
our_file = find_file_by_id(FOLDERS['ours'], vid_id)
|
| 68 |
+
|
| 69 |
+
tasks.append({
|
| 70 |
+
"index": i + 1,
|
| 71 |
+
"id": vid_id,
|
| 72 |
+
"prompt": prompt_text,
|
| 73 |
+
"baseline": f"videos/{FOLDERS['baseline']}/{b_file}",
|
| 74 |
+
"teacache": f"videos/{FOLDERS['teacache']}/{tea_file}" if tea_file else "",
|
| 75 |
+
"magcache": f"videos/{FOLDERS['magcache']}/{mag_file}" if mag_file else "",
|
| 76 |
+
"ours": f"videos/{FOLDERS['ours']}/{our_file}" if our_file else ""
|
| 77 |
+
})
|
| 78 |
+
|
| 79 |
+
print(f"Loaded {len(tasks)} videos.")
|
| 80 |
+
return tasks
|
| 81 |
+
|
| 82 |
+
TASKS = build_tasks()
|
| 83 |
+
|
| 84 |
+
# --- HTML TEMPLATE ---
|
| 85 |
+
|
| 86 |
+
HTML = """
|
| 87 |
+
<!DOCTYPE html>
|
| 88 |
+
<html lang="en">
|
| 89 |
+
<head>
|
| 90 |
+
<meta charset="UTF-8">
|
| 91 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 92 |
+
<title>2x2 Visualizer</title>
|
| 93 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 94 |
+
<style>
|
| 95 |
+
body { background-color: #0f172a; color: #e2e8f0; font-family: sans-serif; }
|
| 96 |
+
|
| 97 |
+
/* Darker theme to make videos pop */
|
| 98 |
+
.video-box {
|
| 99 |
+
background: #1e293b;
|
| 100 |
+
padding: 0.5rem;
|
| 101 |
+
border-radius: 0.5rem;
|
| 102 |
+
height: 100%;
|
| 103 |
+
display: flex;
|
| 104 |
+
flex-direction: column;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
video {
|
| 108 |
+
width: 100%;
|
| 109 |
+
height: auto;
|
| 110 |
+
border-radius: 0.25rem;
|
| 111 |
+
background: #000;
|
| 112 |
+
flex-grow: 1;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
.label {
|
| 116 |
+
text-align: center;
|
| 117 |
+
font-weight: bold;
|
| 118 |
+
font-size: 1rem;
|
| 119 |
+
margin-bottom: 0.5rem;
|
| 120 |
+
color: #94a3b8;
|
| 121 |
+
text-transform: uppercase;
|
| 122 |
+
letter-spacing: 0.05em;
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
/* Highlight 'Ours' */
|
| 126 |
+
.highlight { border: 2px solid #3b82f6; background: #1e3a8a; }
|
| 127 |
+
.highlight .label { color: #60a5fa; }
|
| 128 |
+
|
| 129 |
+
.prompt-box {
|
| 130 |
+
background: #1e293b;
|
| 131 |
+
border-bottom: 1px solid #334155;
|
| 132 |
+
padding: 1rem;
|
| 133 |
+
position: sticky;
|
| 134 |
+
top: 0;
|
| 135 |
+
z-index: 50;
|
| 136 |
+
}
|
| 137 |
+
</style>
|
| 138 |
+
</head>
|
| 139 |
+
<body class="h-screen flex flex-col overflow-hidden">
|
| 140 |
+
|
| 141 |
+
<div class="prompt-box flex flex-col md:flex-row gap-4 items-center flex-none shadow-lg">
|
| 142 |
+
<div class="flex-none w-full md:w-48 space-y-2">
|
| 143 |
+
<div class="flex justify-between items-center text-xs text-gray-400 font-mono">
|
| 144 |
+
<span>ID: <span id="vid-id" class="text-white">--</span></span>
|
| 145 |
+
<span><span id="idx" class="text-white">0</span> / <span id="total">0</span></span>
|
| 146 |
+
</div>
|
| 147 |
+
<div class="flex gap-2">
|
| 148 |
+
<button onclick="move(-1)" class="flex-1 bg-gray-700 hover:bg-gray-600 text-white py-2 rounded font-bold text-sm transition">Prev</button>
|
| 149 |
+
<button onclick="move(1)" class="flex-1 bg-blue-600 hover:bg-blue-500 text-white py-2 rounded font-bold text-sm transition">Next</button>
|
| 150 |
+
</div>
|
| 151 |
+
</div>
|
| 152 |
+
|
| 153 |
+
<div class="flex-grow overflow-y-auto max-h-20 w-full">
|
| 154 |
+
<p id="prompt-text" class="text-sm md:text-lg text-gray-200 leading-snug font-light">Loading...</p>
|
| 155 |
+
</div>
|
| 156 |
+
</div>
|
| 157 |
+
|
| 158 |
+
<div class="flex-grow overflow-y-auto p-4">
|
| 159 |
+
<div class="w-full h-full max-w-[1920px] mx-auto">
|
| 160 |
+
|
| 161 |
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 h-full">
|
| 162 |
+
|
| 163 |
+
<div class="video-box">
|
| 164 |
+
<div class="label">Baseline</div>
|
| 165 |
+
<video id="v-baseline" controls loop muted playsinline></video>
|
| 166 |
+
</div>
|
| 167 |
+
|
| 168 |
+
<div class="video-box">
|
| 169 |
+
<div class="label">TeaCache</div>
|
| 170 |
+
<video id="v-teacache" controls loop muted playsinline></video>
|
| 171 |
+
</div>
|
| 172 |
+
|
| 173 |
+
<div class="video-box">
|
| 174 |
+
<div class="label">MagCache</div>
|
| 175 |
+
<video id="v-magcache" controls loop muted playsinline></video>
|
| 176 |
+
</div>
|
| 177 |
+
|
| 178 |
+
<div class="video-box highlight">
|
| 179 |
+
<div class="label">Ours</div>
|
| 180 |
+
<video id="v-ours" controls loop muted playsinline></video>
|
| 181 |
+
</div>
|
| 182 |
+
|
| 183 |
+
</div>
|
| 184 |
+
</div>
|
| 185 |
+
</div>
|
| 186 |
+
|
| 187 |
+
<script>
|
| 188 |
+
const tasks = {{ tasks_json | safe }};
|
| 189 |
+
let current = 0;
|
| 190 |
+
|
| 191 |
+
const els = {
|
| 192 |
+
prompt: document.getElementById('prompt-text'),
|
| 193 |
+
id: document.getElementById('vid-id'),
|
| 194 |
+
idx: document.getElementById('idx'),
|
| 195 |
+
total: document.getElementById('total'),
|
| 196 |
+
v1: document.getElementById('v-baseline'),
|
| 197 |
+
v2: document.getElementById('v-teacache'),
|
| 198 |
+
v3: document.getElementById('v-magcache'),
|
| 199 |
+
v4: document.getElementById('v-ours')
|
| 200 |
+
};
|
| 201 |
+
|
| 202 |
+
els.total.innerText = tasks.length;
|
| 203 |
+
|
| 204 |
+
function loadTask(index) {
|
| 205 |
+
if (tasks.length === 0) return;
|
| 206 |
+
|
| 207 |
+
if (index < 0) index = tasks.length - 1;
|
| 208 |
+
if (index >= tasks.length) index = 0;
|
| 209 |
+
current = index;
|
| 210 |
+
|
| 211 |
+
const t = tasks[current];
|
| 212 |
+
|
| 213 |
+
els.prompt.innerText = t.prompt;
|
| 214 |
+
els.id.innerText = t.id;
|
| 215 |
+
els.idx.innerText = t.index;
|
| 216 |
+
|
| 217 |
+
els.v1.src = t.baseline;
|
| 218 |
+
els.v2.src = t.teacache;
|
| 219 |
+
els.v3.src = t.magcache;
|
| 220 |
+
els.v4.src = t.ours;
|
| 221 |
+
|
| 222 |
+
[els.v1, els.v2, els.v3, els.v4].forEach(v => {
|
| 223 |
+
if(v.src) {
|
| 224 |
+
v.currentTime = 0;
|
| 225 |
+
v.play().catch(e => {});
|
| 226 |
+
}
|
| 227 |
+
});
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
function move(dir) { loadTask(current + dir); }
|
| 231 |
+
|
| 232 |
+
document.addEventListener('keydown', e => {
|
| 233 |
+
if (e.key === "ArrowLeft") move(-1);
|
| 234 |
+
if (e.key === "ArrowRight") move(1);
|
| 235 |
+
});
|
| 236 |
+
|
| 237 |
+
if (tasks.length > 0) loadTask(0);
|
| 238 |
+
else els.prompt.innerText = "No tasks found. Check console.";
|
| 239 |
+
</script>
|
| 240 |
+
</body>
|
| 241 |
+
</html>
|
| 242 |
+
"""
|
| 243 |
+
|
| 244 |
+
@app.route('/')
|
| 245 |
+
def home():
|
| 246 |
+
return render_template_string(HTML, tasks_json=json.dumps(TASKS))
|
| 247 |
+
|
| 248 |
+
@app.route('/videos/<folder>/<path:filename>')
|
| 249 |
+
def serve_file(folder, filename):
|
| 250 |
+
if folder in FOLDERS:
|
| 251 |
+
return send_from_directory(os.path.join(BASE_DIR, FOLDERS[folder]), filename)
|
| 252 |
+
return "Error", 404
|
| 253 |
+
|
| 254 |
+
if __name__ == '__main__':
|
| 255 |
+
print("Starting server...")
|
| 256 |
+
app.run(port=5001, debug=True)
|
prompts.json
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
A car driving in a highway and passing a cross road.
|
| 2 |
+
A young girl with extraordinary musical talent has never been able to produce a sound. On the first day, she hears an old man playing ancient tunes in the market, feeling her soul deeply moved. The next day, the old man gives her a silver flute and tells her that it will allow her to express the voice deep within her. On the third day, she sits by a stream playing the flute, and the notes flow like water, causing the flowers around her to bloom. On the fourth day, she feels a strange power as her music seems to change people’s emotions, calming them down. On the fifth day, when she plays the final tune, she herself emits a sound, realizing that she has always sung with her soul, and the notes were her true language.
|
| 3 |
+
Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.
|
| 4 |
+
Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside.
|
| 5 |
+
A cat walks on the grass, realistic style.
|
| 6 |
+
A cat wearing sunglasses.
|
| 7 |
+
A dog playing with a blue ball in the park.
|
| 8 |
+
A cat walks on the grass, realistic style.
|
| 9 |
+
Woman during a sunset on a rooftop, Silhouette of a woman standing on top of a city, while raising her arms to the air, with the sunset sun just ahead.
|
| 10 |
+
Rancher smoking at sunset, Person wearing a cowboy hat and denim jacket sits on a wooden fence smoking a cigarette, silhouetted in front of the sun.
|
| 11 |
+
Woman in an infinity pool at sunset, Cinemagraph of the silhouette of a woman standing and palm trees and umbrellas in an infinity pool at sunset.
|
| 12 |
+
Aerial landscape around a highway at sunset, Slow overflight over a long straight road with cars, which crosses an immense forest with abundant trees and vegetation, in a view of the sunset in the distant mountains.
|
| 13 |
+
two cats playing with each other on a stage, cartoon style.
|
| 14 |
+
two dogs playing with each other on a stage, cartoon style.
|
| 15 |
+
A street photographer rapidly adjusts their camera settings to capture a fleeting moment of joy in a passing crowd.
|
| 16 |
+
An intense argument between two people escalating quickly, involving sharp gestures and shifting body language.
|
| 17 |
+
A professional dancer executes a gravity-defying leap followed by a perfectly controlled landing.
|
| 18 |
+
A close-up of a human face transitioning from deep sleep to sudden, wide-eyed terror.
|
| 19 |
+
A person meticulously attempts to tie a complex, tangled knot under high-pressure conditions.
|
| 20 |
+
A chef rapidly chops vegetables with incredible speed and precision, using a large, sharp knife.
|
| 21 |
+
A continuous shot of a person running a full marathon, showing their gradual exhaustion and determination.
|
| 22 |
+
A mother and child playing catch, with the child misjudging the throw and stumbling in the grass.
|
| 23 |
+
A detailed shot of a musician's fingers flawlessly playing a complex piece on a piano keyboard.
|
| 24 |
+
A mime performing a detailed pantomime of struggling against a strong, invisible wind.
|
| 25 |
+
A sudden reaction: a group of friends laughing uncontrollably after hearing a surprising joke.
|
| 26 |
+
A person struggling to lift a heavy box, showing the strain and wobble in their muscles.
|
| 27 |
+
A highly skilled surgeon performing a delicate procedure with steady, focused hand movements.
|
| 28 |
+
A person attempting to juggle five objects, with one object occasionally slipping and being recovered mid-air.
|
| 29 |
+
An emotional embrace between two long-lost friends, involving rapid changes in facial expression.
|
| 30 |
+
A bartender fluidly mixing and pouring multiple cocktails simultaneously with flair.
|
| 31 |
+
A person is startled by a noise in a dark room, spinning around quickly, light flashing across their face.
|
| 32 |
+
A crowd of fans erupts in cheers and synchronized celebration after a winning goal in a stadium.
|
| 33 |
+
A close-up of a human artist rapidly sketching a detailed portrait with charcoal and quick strokes.
|
| 34 |
+
A person performing a backflip off a high diving board, twisting and entering the water cleanly.
|
| 35 |
+
A rapid sequence of a human learning a new physical skill, moving from awkward attempts to mastery.
|
| 36 |
+
A person experiencing extreme cold, shivering violently and rubbing their hands together for warmth.
|
| 37 |
+
A tense moment where a poker player slowly reveals their cards, showing subtle tells and anxiety.
|
| 38 |
+
A detailed shot of a professional archer drawing, holding, and releasing an arrow with flawless form.
|
| 39 |
+
A group of children having a wild pillow fight, with feathers flying and chaotic movement.
|
| 40 |
+
A person desperately trying to open a jammed door, pulling and twisting the handle with force.
|
| 41 |
+
A slow-motion sequence of a runner crossing the finish line, pushing their body to the absolute limit.
|
| 42 |
+
An elderly person gently struggling to button a small coat button with arthritic hands.
|
| 43 |
+
A close-up of a human eye shedding a single, perfect tear that slowly rolls down the cheek.
|
| 44 |
+
A person receiving a shocking piece of news, going through denial, anger, and finally acceptance.
|
| 45 |
+
A martial artist performing a complex, fast-paced Kata with powerful strikes and quick stances.
|
| 46 |
+
A human quickly assembling a complicated piece of flat-pack furniture, showing moments of confusion and clarity.
|
| 47 |
+
A sequence of a person giving CPR, demonstrating realistic pressure and rhythm.
|
| 48 |
+
A crowd performing a wave at a stadium, with individual participants moving up and down seamlessly.
|
| 49 |
+
A person falling gracefully and catching themselves just before hitting the ground.
|
| 50 |
+
A detailed shot of a tattoo artist's needle moving rapidly and precisely across the skin.
|
| 51 |
+
A theatrical scene where a human whispers a secret to another, who instantly reacts with gasping shock.
|
| 52 |
+
A group of hikers crossing a difficult, unstable rope bridge high above a canyon.
|
| 53 |
+
A street magician manipulating a deck of cards with blindingly fast shuffles and flourishes.
|
| 54 |
+
A close-up of a person biting into a very sour lemon, showing the puckered reaction.
|
| 55 |
+
A person trying to hold back laughter during a formal, serious meeting, subtly shaking.
|
| 56 |
+
A choreographed fight scene where two characters exchange rapid, block-and-strike movements.
|
| 57 |
+
A person climbing a vertical rock face, searching for handholds and securing their position.
|
| 58 |
+
A waiter carrying a massive, unstable stack of plates across a crowded room without dropping any.
|
| 59 |
+
A detailed shot of a person quickly reading a complex document, their eyes rapidly scanning lines of text.
|
| 60 |
+
A person playing a virtual reality game, their body reacting realistically to unseen digital events.
|
| 61 |
+
A rapid transition of a person's hairstyle being cut and styled into a completely new look.
|
| 62 |
+
A human interacting with a complex hologram, swiping and manipulating 3D data in the air.
|
| 63 |
+
A person attempting to extinguish a small fire with a blanket, showing panicked but effective movements.
|
| 64 |
+
A group of dancers performing a synchronized routine in perfect, fluid harmony.
|
| 65 |
+
A pedestrian suddenly steps into a crosswalk, and an autonomous vehicle smoothly brakes to a halt.
|
| 66 |
+
A delivery robot navigates a crowded city sidewalk, skillfully avoiding multiple human pedestrians.
|
| 67 |
+
A human driver in a traditional car attempts to merge into heavy traffic while an autonomous car maintains its lane.
|
| 68 |
+
An autonomous shuttle picks up and drops off passengers at a busy airport terminal, interacting with luggage carts.
|
| 69 |
+
A child chases a ball into the street, and both a human-driven car and an autonomous car react simultaneously.
|
| 70 |
+
A human cyclist swerves to avoid a pothole, causing an autonomous vehicle behind them to adjust its path.
|
| 71 |
+
A driverless car performs parallel parking on a bustling street, watched by curious onlookers.
|
| 72 |
+
A human flags down an autonomous taxi, which then pulls over and waits for them to enter.
|
| 73 |
+
A sudden torrential downpour begins, affecting visibility for both human and autonomous vehicles on a highway.
|
| 74 |
+
An autonomous vehicle navigates a construction zone, carefully avoiding workers and moving machinery.
|
| 75 |
+
A human street performer is juggling fire at an intersection, and an autonomous car slows down to pass.
|
| 76 |
+
A car with a human driver aggressively cuts off an autonomous vehicle, which calmly maintains its distance.
|
| 77 |
+
A group of friends interacts with the touchscreen interface inside a futuristic autonomous car while it drives.
|
| 78 |
+
An autonomous delivery drone descends to drop off a package to a person waiting on their doorstep.
|
| 79 |
+
A human driver gives a thumbs-up to an autonomous car that successfully yielded for them at an intersection.
|
| 80 |
+
A dense fog rolls in, challenging the sensors of an autonomous truck as it pulls a heavy load.
|
| 81 |
+
An autonomous vehicle assists a human in changing a flat tire on the side of a busy road.
|
| 82 |
+
A driverless car drops off a passenger at a drive-through restaurant, and the human collects their order.
|
| 83 |
+
A human-driven motorcycle weaves through traffic, and an autonomous car adjusts its speed and spacing.
|
| 84 |
+
A person riding an electric scooter quickly crosses in front of an autonomous vehicle.
|
| 85 |
+
A snowstorm hits, covering the road in ice and snow, and autonomous vehicles continue to navigate cautiously.
|
| 86 |
+
An autonomous bus picks up a group of elderly passengers, carefully deploying a ramp for accessibility.
|
| 87 |
+
A human jogger overtakes a slow-moving autonomous cleaning robot on a park pathway.
|
| 88 |
+
A human passenger falls asleep in a fully autonomous car, which continues to drive safely through varying conditions.
|
| 89 |
+
An autonomous vehicle encounters a fallen tree blocking the road and automatically reroutes.
|
| 90 |
+
A police officer directs traffic at a busy intersection, and both human and autonomous cars follow their signals.
|
| 91 |
+
A human driver reacts with frustration to a perceived error by an autonomous vehicle.
|
| 92 |
+
An autonomous street sweeper navigates a city street, cleaning around parked cars and pedestrians.
|
| 93 |
+
A group of tourists takes selfies with an autonomous shuttle passing by a famous landmark.
|
| 94 |
+
A human driver changes lanes without signaling, and an autonomous car reacts with a slight swerve.
|
| 95 |
+
An autonomous farming tractor cultivates a field while a farmer watches from the side.
|
| 96 |
+
A sudden gust of wind blows debris onto the road, and an autonomous car swerves to avoid it.
|
| 97 |
+
A human family is having a picnic in a park, and an autonomous delivery drone flies overhead.
|
| 98 |
+
An autonomous valet parking system parks a car in a multi-story garage without human intervention.
|
| 99 |
+
A human crossing guard stops traffic, allowing children to cross, while an autonomous car waits patiently.
|
| 100 |
+
A low-light scenario where streetlights flicker, and autonomous vehicles rely on advanced sensors.
|
| 101 |
+
A human on a bicycle signals a turn, and an autonomous car accurately predicts their movement.
|
| 102 |
+
A high-speed chase where an autonomous police vehicle pursues a human-driven getaway car.
|
| 103 |
+
An autonomous vehicle detects a sick person on the sidewalk and pulls over to offer assistance.
|
| 104 |
+
A human driver accidentally veers into the lane of an autonomous car, which safely avoids a collision.
|
| 105 |
+
An autonomous robot dog walks alongside a human owner in a bustling urban environment.
|
| 106 |
+
A sudden tire blowout on a human-driven car, and a nearby autonomous vehicle provides assistance.
|
| 107 |
+
A human mechanic performs diagnostics on an autonomous vehicle, interacting with its internal systems.
|
| 108 |
+
An autonomous vehicle drives through a tunnel where GPS signals are lost, relying on other sensors.
|
| 109 |
+
A human-operated forklift loads cargo onto an autonomous truck in a busy warehouse.
|
| 110 |
+
A street vendor sets up their stall, causing an autonomous vehicle to slightly alter its route.
|
| 111 |
+
A human waves to an autonomous car as it passes, acknowledging its presence.
|
| 112 |
+
An autonomous vehicle detects an animal running into the road and brakes safely.
|
| 113 |
+
A human tests the emergency override system of an autonomous car during a simulated critical event.
|
| 114 |
+
An autonomous snowplow clears a road during a heavy snowfall, navigating around parked cars and pedestrians.
|
| 115 |
+
A grand, ornate chandelier slowly detaches from the ceiling, swinging precariously before crashing dramatically onto a polished marble floor.
|
| 116 |
+
A dense forest undergoes a rapid seasonal change from vibrant autumn colors to a stark, snow-covered winter landscape.
|
| 117 |
+
A futuristic city skyline is suddenly engulfed by a rapidly expanding swarm of bioluminescent drones, forming shifting patterns.
|
| 118 |
+
A historical battlefield comes to life with hundreds of soldiers engaged in close-quarters combat, dust and smoke filling the air.
|
| 119 |
+
A delicate sandcastle on a beach is slowly eroded by the incoming tide, its intricate details dissolving into the waves.
|
| 120 |
+
A complex Rube Goldberg machine activates, with each elaborate step triggering the next in a fluid, continuous motion.
|
| 121 |
+
An ancient stone statue slowly cracks and crumbles, revealing a vibrant, glowing energy source within.
|
| 122 |
+
A powerful tornado tears through a suburban neighborhood, lifting houses and debris into the churning vortex.
|
| 123 |
+
A detailed underwater scene where a school of fish swims in perfect synchronicity, reacting to a passing shark.
|
| 124 |
+
A barren desert landscape is rapidly transformed by a sudden, intense flash flood, carving new channels.
|
| 125 |
+
A crowded train station experiences a sudden blackout, plunging commuters into darkness before emergency lights flicker on.
|
| 126 |
+
A magician performs a levitation trick, with a human subject slowly rising into the air, defying gravity.
|
| 127 |
+
A controlled demolition of a large building, showing the structure collapsing inwards with realistic dust and debris.
|
| 128 |
+
A magnificent fireworks display illuminates a night sky over a tranquil lake, with vibrant reflections on the water.
|
| 129 |
+
A detailed diorama of a miniature town is brought to life, with tiny cars moving and minuscule people walking.
|
| 130 |
+
A calm ocean surface is suddenly disturbed by a massive whale breaching and splashing back down.
|
| 131 |
+
A close-up of a complex clockwork mechanism where all gears, springs, and levers are in precise, constant motion.
|
| 132 |
+
A person walking through a field of tall grass, which sways realistically with each step and passing breeze.
|
| 133 |
+
A vibrant coral reef ecosystem where various fish, anemones, and other marine life interact in a dynamic dance.
|
| 134 |
+
A sudden volcanic eruption spews molten lava and ash into the sky, flowing down the mountain.
|
| 135 |
+
A high-speed pursuit through narrow city streets, with vehicles swerving, near-misses, and dynamic camera angles.
|
| 136 |
+
A detailed model ship in a bottle is hit by a sudden, miniature storm, with tiny waves rocking the vessel.
|
| 137 |
+
A time-lapse of a massive ice glacier calving, with huge chunks of ice breaking off and falling into the sea.
|
| 138 |
+
A grand theatrical stage where props and backdrops shift and transform seamlessly between acts.
|
| 139 |
+
A group of parkour athletes navigates a complex urban environment, leaping and climbing with incredible agility.
|
| 140 |
+
A close-up of a delicate spiderweb catching dew drops, which then shimmer and slide down the strands.
|
| 141 |
+
A massive swarm of locusts descends upon a field of crops, devouring everything in its path.
|
| 142 |
+
A slow-motion shot of colorful paint being mixed and swirled together, creating intricate, ephemeral patterns.
|
| 143 |
+
A futuristic factory floor where robotic arms assemble complex machinery with precision and speed.
|
| 144 |
+
A serene garden pond suddenly comes alive with a multitude of frogs leaping and birds splashing.
|
| 145 |
+
A detailed shot of a human hand manipulating a complex puzzle cube at high speed.
|
| 146 |
+
A powerful waterfall with mist rising, and a lone figure standing at its base, seemingly unfazed.
|
| 147 |
+
A crowded marketplace where vendors are selling goods and people are haggling, creating a bustling atmosphere.
|
| 148 |
+
A close-up of a bonfire, with flames dancing, sparks flying, and logs slowly crumbling into embers.
|
| 149 |
+
A medieval siege where a battering ram repeatedly strikes a castle gate, causing splinters and cracks.
|
| 150 |
+
A rapid change in weather from bright sunshine to a dark, stormy sky with lightning flashes.
|
| 151 |
+
A group of acrobats performing a complex routine, with fluid movements and intricate formations.
|
| 152 |
+
A detailed shot of water droplets rolling off a hydrophobic surface, coalescing and moving independently.
|
| 153 |
+
A subterranean cave system with glowing crystals and underground rivers, constantly shifting and revealing new paths.
|
| 154 |
+
A flock of pigeons suddenly takes flight from a city square, scattering in all directions.
|
| 155 |
+
A large crowd at a music concert reacting dynamically to the rhythm of the performance.
|
| 156 |
+
A close-up of a flower blooming in fast-motion, its petals unfurling in exquisite detail.
|
| 157 |
+
A rapid transition from an arid desert to a lush, green oasis appearing as if by magic.
|
| 158 |
+
A group of children playing an intense game of tag in a park, weaving between trees and playground equipment.
|
| 159 |
+
A detailed interior of a spaceship during a sudden emergency, with alarms blaring and systems flickering.
|
| 160 |
+
A close-up of a waterfall where individual water molecules can be seen cascading over rocks.
|
| 161 |
+
A detailed shot of a blacksmith hammering glowing hot metal, with sparks flying and steam rising.
|
| 162 |
+
A slow-motion explosion of a colorful piñata, releasing candy and confetti into the air.
|
| 163 |
+
A serene forest clearing where a deer grazes peacefully, but its ears constantly twitch, alert to danger.
|
| 164 |
+
A massive school of fish forms intricate, dynamic shapes in the ocean, resembling a living sculpture.
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
flask
|
| 2 |
+
gunicorn
|