Compare commits
13 Commits
fix/688-sc
...
fix/624
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49296d538e | ||
| 817785d763 | |||
|
|
3603030235 | ||
| 35a191f7b1 | |||
| e987e1b870 | |||
| 19278513b4 | |||
| 1088bf8983 | |||
| 94f0a132d4 | |||
| 279356bed6 | |||
| 511ff863c2 | |||
| b6e3a647b0 | |||
| e14158676d | |||
| 26e39d8949 |
@@ -31,6 +31,14 @@ class GlitchCategory(Enum):
|
||||
WATER_REFLECTION = "water_reflection"
|
||||
SKYBOX_SEAM = "skybox_seam"
|
||||
|
||||
# Three.js-specific categories (ref: timmy-config#543)
|
||||
SHADER_FAILURE = "shader_failure"
|
||||
TEXTURE_PLACEHOLDER = "texture_placeholder"
|
||||
UV_MAPPING_ERROR = "uv_mapping_error"
|
||||
FRUSTUM_CULLING = "frustum_culling"
|
||||
SHADOW_MAP_ARTIFACT = "shadow_map_artifact"
|
||||
BLOOM_OVERFLOW = "bloom_overflow"
|
||||
|
||||
|
||||
@dataclass
|
||||
class GlitchPattern:
|
||||
@@ -241,6 +249,123 @@ MATRIX_GLITCH_PATTERNS: list[GlitchPattern] = [
|
||||
],
|
||||
confidence_threshold=0.45,
|
||||
),
|
||||
|
||||
# --- Three.js-Specific Glitch Patterns (ref: timmy-config#543) ---
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.SHADER_FAILURE,
|
||||
name="Shader Compilation Failure",
|
||||
description="Three.js shader failed to compile, rendering the material as solid black. "
|
||||
"Common when custom ShaderMaterial has syntax errors or missing uniforms.",
|
||||
severity=GlitchSeverity.CRITICAL,
|
||||
detection_prompts=[
|
||||
"Look for objects or surfaces rendered as pure black (#000000) that should have visible textures or materials.",
|
||||
"Identify geometry that appears completely dark while surrounding objects are normally lit.",
|
||||
"Check for objects where the material seems to 'absorb all light' — flat black with no shading gradient.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"solid black object with no shading",
|
||||
"geometry rendered as silhouette",
|
||||
"material appears to absorb light entirely",
|
||||
"black patch inconsistent with scene lighting",
|
||||
],
|
||||
confidence_threshold=0.7,
|
||||
),
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.TEXTURE_PLACEHOLDER,
|
||||
name="Three.js Texture Not Loaded",
|
||||
description="Three.js failed to load the texture asset, rendering a 1x1 white pixel "
|
||||
"stretched across the entire surface. Distinguished from missing-texture by "
|
||||
"the uniform white/grey appearance rather than magenta.",
|
||||
severity=GlitchSeverity.CRITICAL,
|
||||
detection_prompts=[
|
||||
"Look for surfaces that are uniformly white or light grey with no texture detail, even on large geometry.",
|
||||
"Identify objects where the texture appears as a single solid color stretched across complex UVs.",
|
||||
"Check for surfaces that look 'blank' or 'unloaded' — flat white/grey where detail should exist.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"uniform white or light grey surface",
|
||||
"no texture detail on large geometry",
|
||||
"stretched single-color appearance",
|
||||
"1x1 pixel placeholder stretched to fill UV space",
|
||||
],
|
||||
confidence_threshold=0.65,
|
||||
),
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.UV_MAPPING_ERROR,
|
||||
name="BufferGeometry UV Mapping Error",
|
||||
description="Three.js BufferGeometry has incorrect UV coordinates, causing textures to "
|
||||
"appear stretched, compressed, or mapped to the wrong faces.",
|
||||
severity=GlitchSeverity.HIGH,
|
||||
detection_prompts=[
|
||||
"Look for textures that appear dramatically stretched in one direction on specific faces.",
|
||||
"Identify surfaces where the texture pattern is distorted but other nearby surfaces look correct.",
|
||||
"Check for faces where the texture seems 'smeared' or mapped with incorrect aspect ratio.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"texture stretching on specific faces",
|
||||
"distorted pattern on geometry",
|
||||
"smeared texture appearance",
|
||||
"aspect ratio mismatch between texture and surface",
|
||||
],
|
||||
confidence_threshold=0.6,
|
||||
),
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.FRUSTUM_CULLING,
|
||||
name="Frustum Culling Artifact",
|
||||
description="Three.js frustum culling incorrectly marks objects as outside the camera "
|
||||
"frustum, causing them to pop in/out of existence at screen edges.",
|
||||
severity=GlitchSeverity.MEDIUM,
|
||||
detection_prompts=[
|
||||
"Look for objects that are partially visible at the edge of the frame — half-rendered or cut off unnaturally.",
|
||||
"Identify geometry that seems to 'pop' into existence as the view angle changes.",
|
||||
"Check screen edges for objects that appear suddenly rather than smoothly entering the viewport.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"half-visible object at screen edge",
|
||||
"object popping into frame",
|
||||
"abrupt appearance of geometry",
|
||||
"bounding box visible but mesh missing",
|
||||
],
|
||||
confidence_threshold=0.55,
|
||||
),
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.SHADOW_MAP_ARTIFACT,
|
||||
name="Shadow Map Resolution Artifact",
|
||||
description="Three.js shadow map has insufficient resolution, causing pixelated, "
|
||||
"blocky shadows with visible texel edges instead of smooth shadow gradients.",
|
||||
severity=GlitchSeverity.MEDIUM,
|
||||
detection_prompts=[
|
||||
"Look for shadows with visible blocky or pixelated edges instead of smooth gradients.",
|
||||
"Identify shadow maps where individual texels (texture pixels) are clearly visible.",
|
||||
"Check for shadows that appear as jagged stair-stepped patterns rather than soft edges.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"blocky shadow edges",
|
||||
"visible texel grid in shadows",
|
||||
"stair-stepped shadow boundary",
|
||||
"pixelated shadow gradient",
|
||||
],
|
||||
confidence_threshold=0.55,
|
||||
),
|
||||
GlitchPattern(
|
||||
category=GlitchCategory.BLOOM_OVERFLOW,
|
||||
name="Post-Processing Bloom Overflow",
|
||||
description="Three.js UnrealBloomPass or similar post-processing bloom effect is too "
|
||||
"intense, causing bright areas to bleed glow into surrounding geometry.",
|
||||
severity=GlitchSeverity.LOW,
|
||||
detection_prompts=[
|
||||
"Look for bright areas that have an unusually large, soft glow bleeding into adjacent surfaces.",
|
||||
"Identify scenes where light sources appear to have a 'halo' that extends beyond physical plausibility.",
|
||||
"Check for bright objects whose glow color bleeds onto nearby unrelated geometry.",
|
||||
],
|
||||
visual_indicators=[
|
||||
"excessive glow bleeding from bright surfaces",
|
||||
"halo around light sources",
|
||||
"bloom color tinting adjacent geometry",
|
||||
"glow bleeding beyond object boundaries",
|
||||
],
|
||||
confidence_threshold=0.5,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@@ -289,6 +414,23 @@ def build_vision_prompt(patterns: list[GlitchPattern] | None = None) -> str:
|
||||
)
|
||||
|
||||
|
||||
|
||||
# Three.js-specific category set for filtering (ref: timmy-config#543)
|
||||
THREEJS_CATEGORIES = {
|
||||
GlitchCategory.SHADER_FAILURE,
|
||||
GlitchCategory.TEXTURE_PLACEHOLDER,
|
||||
GlitchCategory.UV_MAPPING_ERROR,
|
||||
GlitchCategory.FRUSTUM_CULLING,
|
||||
GlitchCategory.SHADOW_MAP_ARTIFACT,
|
||||
GlitchCategory.BLOOM_OVERFLOW,
|
||||
}
|
||||
|
||||
|
||||
def get_threejs_patterns() -> list[GlitchPattern]:
|
||||
"""Return only Three.js-specific glitch patterns."""
|
||||
return [p for p in MATRIX_GLITCH_PATTERNS if p.category in THREEJS_CATEGORIES]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import json
|
||||
print(f"Loaded {len(MATRIX_GLITCH_PATTERNS)} glitch patterns:\n")
|
||||
|
||||
@@ -9,7 +9,7 @@ Usage:
|
||||
python matrix_glitch_detector.py <url> [--angles 4] [--output report.json]
|
||||
python matrix_glitch_detector.py --demo # Run with synthetic test data
|
||||
|
||||
Ref: timmy-config#491
|
||||
Ref: timmy-config#491, timmy-config#543
|
||||
"""
|
||||
|
||||
import argparse
|
||||
@@ -33,6 +33,7 @@ from glitch_patterns import (
|
||||
MATRIX_GLITCH_PATTERNS,
|
||||
build_vision_prompt,
|
||||
get_patterns_by_severity,
|
||||
get_threejs_patterns,
|
||||
)
|
||||
|
||||
|
||||
@@ -345,14 +346,17 @@ def _parse_vision_response(
|
||||
|
||||
def _infer_severity(category: str, confidence: float) -> str:
|
||||
"""Infer severity from category and confidence when not provided."""
|
||||
critical_cats = {"missing_textures", "clipping"}
|
||||
high_cats = {"floating_assets", "broken_normals"}
|
||||
critical_cats = {"missing_textures", "clipping", "shader_failure", "texture_placeholder"}
|
||||
high_cats = {"floating_assets", "broken_normals", "uv_mapping_error"}
|
||||
medium_cats = {"frustum_culling", "shadow_map_artifact"}
|
||||
|
||||
cat_lower = category.lower()
|
||||
if any(c in cat_lower for c in critical_cats):
|
||||
return "critical" if confidence > 0.7 else "high"
|
||||
if any(c in cat_lower for c in high_cats):
|
||||
return "high" if confidence > 0.7 else "medium"
|
||||
if any(c in cat_lower for c in medium_cats):
|
||||
return "medium" if confidence > 0.6 else "low"
|
||||
return "medium" if confidence > 0.6 else "low"
|
||||
|
||||
|
||||
@@ -389,9 +393,9 @@ def build_report(
|
||||
),
|
||||
},
|
||||
metadata={
|
||||
"detector_version": "0.1.0",
|
||||
"detector_version": "0.2.0",
|
||||
"pattern_count": len(MATRIX_GLITCH_PATTERNS),
|
||||
"reference": "timmy-config#491",
|
||||
"reference": "timmy-config#491, timmy-config#543",
|
||||
},
|
||||
)
|
||||
|
||||
@@ -460,6 +464,30 @@ def run_demo(output_path: Optional[Path] = None) -> ScanResult:
|
||||
screenshot_index=3,
|
||||
screenshot_angle="left",
|
||||
),
|
||||
DetectedGlitch(
|
||||
id=str(uuid.uuid4())[:8],
|
||||
category="shader_failure",
|
||||
name="Black Material on Portal Frame",
|
||||
description="Portal frame rendered as solid black — shader compilation failed (missing uniform u_time)",
|
||||
severity="critical",
|
||||
confidence=0.91,
|
||||
location_x=45.0,
|
||||
location_y=30.0,
|
||||
screenshot_index=0,
|
||||
screenshot_angle="front",
|
||||
),
|
||||
DetectedGlitch(
|
||||
id=str(uuid.uuid4())[:8],
|
||||
category="shadow_map_artifact",
|
||||
name="Pixelated Character Shadow",
|
||||
description="Character shadow shows visible texel grid — shadow map resolution too low (512x512)",
|
||||
severity="medium",
|
||||
confidence=0.78,
|
||||
location_x=52.0,
|
||||
location_y=75.0,
|
||||
screenshot_index=1,
|
||||
screenshot_angle="right",
|
||||
),
|
||||
]
|
||||
|
||||
print(f"[*] Detected {len(demo_glitches)} glitches")
|
||||
@@ -496,6 +524,11 @@ Examples:
|
||||
help="Minimum severity to include in report",
|
||||
)
|
||||
parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output")
|
||||
parser.add_argument(
|
||||
"--threejs",
|
||||
action="store_true",
|
||||
help="Focus on Three.js-specific glitch patterns only (shader, texture, UV, culling, shadow, bloom)",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -525,9 +558,13 @@ Examples:
|
||||
screenshots = capture_screenshots(args.url, angles, screenshots_dir)
|
||||
print(f"[*] Captured {len(screenshots)} screenshots")
|
||||
|
||||
# Filter patterns by severity
|
||||
# Filter patterns by severity and type
|
||||
min_sev = GlitchSeverity(args.min_severity)
|
||||
patterns = get_patterns_by_severity(min_sev)
|
||||
if args.threejs:
|
||||
threejs_patterns = get_threejs_patterns()
|
||||
patterns = [p for p in patterns if p in threejs_patterns]
|
||||
print(f"[*] Three.js-focused mode: {len(patterns)} patterns")
|
||||
|
||||
# Analyze with vision AI
|
||||
print(f"[*] Analyzing with vision AI ({len(patterns)} patterns)...")
|
||||
|
||||
271
bin/preflight-provider-check.py
Normal file
271
bin/preflight-provider-check.py
Normal file
@@ -0,0 +1,271 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Pre-Flight Provider Check Script
|
||||
Issue #508: [Robustness] Credential drain detection — provider health checks
|
||||
|
||||
Pre-flight check before session launch: verifies provider credentials and balance.
|
||||
|
||||
Usage:
|
||||
python3 preflight-provider-check.py # Check all providers
|
||||
python3 preflight-provider-check.py --launch # Check and return exit code
|
||||
python3 preflight-provider-check.py --balance # Check OpenRouter balance
|
||||
"""
|
||||
|
||||
import os, sys, json, yaml, urllib.request
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
# Configuration
|
||||
HERMES_HOME = Path(os.environ.get("HERMES_HOME", Path.home() / ".hermes"))
|
||||
LOG_DIR = Path.home() / ".local" / "timmy" / "fleet-health"
|
||||
LOG_FILE = LOG_DIR / "preflight-check.log"
|
||||
|
||||
def log(msg):
|
||||
"""Log message to file and optionally console."""
|
||||
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
||||
log_entry = "[" + timestamp + "] " + msg
|
||||
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
with open(LOG_FILE, "a") as f:
|
||||
f.write(log_entry + "\n")
|
||||
|
||||
if "--quiet" not in sys.argv:
|
||||
print(log_entry)
|
||||
|
||||
def get_provider_api_key(provider):
|
||||
"""Get API key for a provider from .env or environment."""
|
||||
env_file = HERMES_HOME / ".env"
|
||||
if env_file.exists():
|
||||
with open(env_file) as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line.startswith(provider.upper() + "_API_KEY="):
|
||||
return line.split("=", 1)[1].strip().strip("'\"")
|
||||
|
||||
return os.environ.get(provider.upper() + "_API_KEY")
|
||||
|
||||
def check_openrouter_balance(api_key):
|
||||
"""Check OpenRouter balance via /api/v1/auth/key."""
|
||||
if not api_key:
|
||||
return False, "No API key", 0
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
"https://openrouter.ai/api/v1/auth/key",
|
||||
headers={"Authorization": "Bearer " + api_key}
|
||||
)
|
||||
resp = urllib.request.urlopen(req, timeout=10)
|
||||
data = json.loads(resp.read())
|
||||
|
||||
# Check for credits
|
||||
credits = data.get("data", {}).get("limit", 0)
|
||||
usage = data.get("data", {}).get("usage", 0)
|
||||
remaining = credits - usage if credits else None
|
||||
|
||||
if remaining is not None and remaining <= 0:
|
||||
return False, "No credits remaining", 0
|
||||
elif remaining is not None:
|
||||
return True, "Credits available", remaining
|
||||
else:
|
||||
return True, "Unlimited or unknown balance", None
|
||||
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 401:
|
||||
return False, "Invalid API key", 0
|
||||
else:
|
||||
return False, "HTTP " + str(e.code), 0
|
||||
except Exception as e:
|
||||
return False, str(e)[:100], 0
|
||||
|
||||
def check_nous_key(api_key):
|
||||
"""Check Nous API key with minimal test call."""
|
||||
if not api_key:
|
||||
return False, "No API key"
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
"https://inference.nousresearch.com/v1/models",
|
||||
headers={"Authorization": "Bearer " + api_key}
|
||||
)
|
||||
resp = urllib.request.urlopen(req, timeout=10)
|
||||
|
||||
if resp.status == 200:
|
||||
return True, "Valid key"
|
||||
else:
|
||||
return False, "HTTP " + str(resp.status)
|
||||
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 401:
|
||||
return False, "Invalid API key"
|
||||
elif e.code == 403:
|
||||
return False, "Forbidden"
|
||||
else:
|
||||
return False, "HTTP " + str(e.code)
|
||||
except Exception as e:
|
||||
return False, str(e)[:100]
|
||||
|
||||
def check_anthropic_key(api_key):
|
||||
"""Check Anthropic API key with minimal test call."""
|
||||
if not api_key:
|
||||
return False, "No API key"
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
"https://api.anthropic.com/v1/models",
|
||||
headers={
|
||||
"x-api-key": api_key,
|
||||
"anthropic-version": "2023-06-01"
|
||||
}
|
||||
)
|
||||
resp = urllib.request.urlopen(req, timeout=10)
|
||||
|
||||
if resp.status == 200:
|
||||
return True, "Valid key"
|
||||
else:
|
||||
return False, "HTTP " + str(resp.status)
|
||||
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 401:
|
||||
return False, "Invalid API key"
|
||||
elif e.code == 403:
|
||||
return False, "Forbidden"
|
||||
else:
|
||||
return False, "HTTP " + str(e.code)
|
||||
except Exception as e:
|
||||
return False, str(e)[:100]
|
||||
|
||||
def check_ollama():
|
||||
"""Check if Ollama is running."""
|
||||
try:
|
||||
req = urllib.request.Request("http://localhost:11434/api/tags")
|
||||
resp = urllib.request.urlopen(req, timeout=5)
|
||||
|
||||
if resp.status == 200:
|
||||
data = json.loads(resp.read())
|
||||
models = data.get("models", [])
|
||||
return True, str(len(models)) + " models loaded"
|
||||
else:
|
||||
return False, "HTTP " + str(resp.status)
|
||||
|
||||
except Exception as e:
|
||||
return False, str(e)[:100]
|
||||
|
||||
def get_configured_provider():
|
||||
"""Get the configured provider from global config."""
|
||||
config_file = HERMES_HOME / "config.yaml"
|
||||
if not config_file.exists():
|
||||
return None
|
||||
|
||||
try:
|
||||
with open(config_file) as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
model_config = config.get("model", {})
|
||||
if isinstance(model_config, dict):
|
||||
return model_config.get("provider")
|
||||
except:
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
def run_preflight_check():
|
||||
"""Run pre-flight check on all providers."""
|
||||
log("=== Pre-Flight Provider Check ===")
|
||||
|
||||
results = {}
|
||||
|
||||
# Check OpenRouter
|
||||
or_key = get_provider_api_key("openrouter")
|
||||
or_ok, or_msg, or_balance = check_openrouter_balance(or_key)
|
||||
results["openrouter"] = {"healthy": or_ok, "message": or_msg, "balance": or_balance}
|
||||
|
||||
# Check Nous
|
||||
nous_key = get_provider_api_key("nous")
|
||||
nous_ok, nous_msg = check_nous_key(nous_key)
|
||||
results["nous"] = {"healthy": nous_ok, "message": nous_msg}
|
||||
|
||||
# Check Anthropic
|
||||
anthropic_key = get_provider_api_key("anthropic")
|
||||
anthropic_ok, anthropic_msg = check_anthropic_key(anthropic_key)
|
||||
results["anthropic"] = {"healthy": anthropic_ok, "message": anthropic_msg}
|
||||
|
||||
# Check Ollama
|
||||
ollama_ok, ollama_msg = check_ollama()
|
||||
results["ollama"] = {"healthy": ollama_ok, "message": ollama_msg}
|
||||
|
||||
# Get configured provider
|
||||
configured = get_configured_provider()
|
||||
|
||||
# Summary
|
||||
healthy_count = sum(1 for r in results.values() if r["healthy"])
|
||||
total_count = len(results)
|
||||
|
||||
log("Results: " + str(healthy_count) + "/" + str(total_count) + " providers healthy")
|
||||
|
||||
for provider, result in results.items():
|
||||
status = "HEALTHY" if result["healthy"] else "UNHEALTHY"
|
||||
extra = ""
|
||||
if provider == "openrouter" and result.get("balance") is not None:
|
||||
extra = " (balance: " + str(result["balance"]) + ")"
|
||||
|
||||
log(" " + provider + ": " + status + " - " + result["message"] + extra)
|
||||
|
||||
if configured:
|
||||
log("Configured provider: " + configured)
|
||||
if configured in results and not results[configured]["healthy"]:
|
||||
log("WARNING: Configured provider " + configured + " is UNHEALTHY!")
|
||||
|
||||
return results, configured
|
||||
|
||||
def check_launch_readiness():
|
||||
"""Check if we're ready to launch sessions."""
|
||||
results, configured = run_preflight_check()
|
||||
|
||||
# Check if configured provider is healthy
|
||||
if configured and configured in results:
|
||||
if not results[configured]["healthy"]:
|
||||
log("LAUNCH BLOCKED: Configured provider " + configured + " is unhealthy")
|
||||
return False, configured + " is unhealthy"
|
||||
|
||||
# Check if at least one provider is healthy
|
||||
healthy_providers = [p for p, r in results.items() if r["healthy"]]
|
||||
if not healthy_providers:
|
||||
log("LAUNCH BLOCKED: No healthy providers available")
|
||||
return False, "No healthy providers"
|
||||
|
||||
log("LAUNCH READY: " + str(len(healthy_providers)) + " healthy providers available")
|
||||
return True, "Ready"
|
||||
|
||||
def show_balance():
|
||||
"""Show OpenRouter balance."""
|
||||
api_key = get_provider_api_key("openrouter")
|
||||
if not api_key:
|
||||
print("No OpenRouter API key found")
|
||||
return
|
||||
|
||||
ok, msg, balance = check_openrouter_balance(api_key)
|
||||
|
||||
if ok:
|
||||
if balance is not None:
|
||||
print("OpenRouter balance: " + str(balance) + " credits")
|
||||
else:
|
||||
print("OpenRouter: " + msg)
|
||||
else:
|
||||
print("OpenRouter: " + msg)
|
||||
|
||||
def main():
|
||||
if "--balance" in sys.argv:
|
||||
show_balance()
|
||||
elif "--launch" in sys.argv:
|
||||
ready, message = check_launch_readiness()
|
||||
if ready:
|
||||
print("READY")
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("BLOCKED: " + message)
|
||||
sys.exit(1)
|
||||
else:
|
||||
run_preflight_check()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
411
bin/provider-health-monitor.py
Normal file
411
bin/provider-health-monitor.py
Normal file
@@ -0,0 +1,411 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Provider Health Monitor Script
|
||||
Issue #509: [Robustness] Provider-aware profile config — auto-switch on failure
|
||||
|
||||
Monitors provider health and automatically switches profiles to working providers.
|
||||
|
||||
Usage:
|
||||
python3 provider-health-monitor.py # Run once
|
||||
python3 provider-health-monitor.py --daemon # Run continuously
|
||||
python3 provider-health-monitor.py --status # Show provider health
|
||||
"""
|
||||
|
||||
import os, sys, json, yaml, urllib.request, time
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
# Configuration
|
||||
HERMES_HOME = Path(os.environ.get("HERMES_HOME", Path.home() / ".hermes"))
|
||||
PROFILES_DIR = HERMES_HOME / "profiles"
|
||||
LOG_DIR = Path.home() / ".local" / "timmy" / "fleet-health"
|
||||
STATE_FILE = LOG_DIR / "tmux-state.json"
|
||||
LOG_FILE = LOG_DIR / "provider-health.log"
|
||||
|
||||
# Provider test endpoints
|
||||
PROVIDER_TESTS = {
|
||||
"openrouter": {
|
||||
"url": "https://openrouter.ai/api/v1/models",
|
||||
"method": "GET",
|
||||
"headers": lambda api_key: {"Authorization": "Bearer " + api_key},
|
||||
"timeout": 10
|
||||
},
|
||||
"anthropic": {
|
||||
"url": "https://api.anthropic.com/v1/models",
|
||||
"method": "GET",
|
||||
"headers": lambda api_key: {"x-api-key": api_key, "anthropic-version": "2023-06-01"},
|
||||
"timeout": 10
|
||||
},
|
||||
"nous": {
|
||||
"url": "https://inference.nousresearch.com/v1/models",
|
||||
"method": "GET",
|
||||
"headers": lambda api_key: {"Authorization": "Bearer " + api_key},
|
||||
"timeout": 10
|
||||
},
|
||||
"kimi-coding": {
|
||||
"url": "https://api.kimi.com/coding/v1/models",
|
||||
"method": "GET",
|
||||
"headers": lambda api_key: {"x-api-key": api_key, "x-api-provider": "kimi-coding"},
|
||||
"timeout": 10
|
||||
},
|
||||
"ollama": {
|
||||
"url": "http://localhost:11434/api/tags",
|
||||
"method": "GET",
|
||||
"headers": lambda api_key: {},
|
||||
"timeout": 5
|
||||
}
|
||||
}
|
||||
|
||||
def log(msg):
|
||||
"""Log message to file and optionally console."""
|
||||
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
|
||||
log_entry = "[" + timestamp + "] " + msg
|
||||
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
with open(LOG_FILE, "a") as f:
|
||||
f.write(log_entry + "\n")
|
||||
|
||||
if "--quiet" not in sys.argv:
|
||||
print(log_entry)
|
||||
|
||||
def get_provider_api_key(provider):
|
||||
"""Get API key for a provider from .env or environment."""
|
||||
env_file = HERMES_HOME / ".env"
|
||||
if env_file.exists():
|
||||
with open(env_file) as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line.startswith(provider.upper() + "_API_KEY="):
|
||||
return line.split("=", 1)[1].strip().strip("'\"")
|
||||
|
||||
return os.environ.get(provider.upper() + "_API_KEY")
|
||||
|
||||
def test_provider(provider, api_key=None):
|
||||
"""Test if a provider is healthy."""
|
||||
config = PROVIDER_TESTS.get(provider)
|
||||
if not config:
|
||||
return False, "Unknown provider: " + provider
|
||||
|
||||
headers = config["headers"](api_key or "")
|
||||
|
||||
try:
|
||||
req = urllib.request.Request(
|
||||
config["url"],
|
||||
headers=headers,
|
||||
method=config["method"]
|
||||
)
|
||||
resp = urllib.request.urlopen(req, timeout=config["timeout"])
|
||||
|
||||
if resp.status == 200:
|
||||
return True, "Healthy"
|
||||
else:
|
||||
return False, "HTTP " + str(resp.status)
|
||||
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 401:
|
||||
return False, "Unauthorized (401)"
|
||||
elif e.code == 403:
|
||||
return False, "Forbidden (403)"
|
||||
elif e.code == 429:
|
||||
return True, "Rate limited but accessible"
|
||||
else:
|
||||
return False, "HTTP " + str(e.code)
|
||||
except Exception as e:
|
||||
return False, str(e)[:100]
|
||||
|
||||
def get_all_providers():
|
||||
"""Get all providers from profiles and global config."""
|
||||
providers = set()
|
||||
|
||||
# Global config
|
||||
global_config = HERMES_HOME / "config.yaml"
|
||||
if global_config.exists():
|
||||
try:
|
||||
with open(global_config) as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
# Primary model provider
|
||||
model_config = config.get("model", {})
|
||||
if isinstance(model_config, dict):
|
||||
provider = model_config.get("provider", "")
|
||||
if provider:
|
||||
providers.add(provider)
|
||||
|
||||
# Auxiliary providers
|
||||
auxiliary = config.get("auxiliary", {})
|
||||
for aux_config in auxiliary.values():
|
||||
if isinstance(aux_config, dict):
|
||||
provider = aux_config.get("provider", "")
|
||||
if provider and provider != "auto":
|
||||
providers.add(provider)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Profile configs
|
||||
if PROFILES_DIR.exists():
|
||||
for profile_dir in PROFILES_DIR.iterdir():
|
||||
if profile_dir.is_dir():
|
||||
config_file = profile_dir / "config.yaml"
|
||||
if config_file.exists():
|
||||
try:
|
||||
with open(config_file) as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
model_config = config.get("model", {})
|
||||
if isinstance(model_config, dict):
|
||||
provider = model_config.get("provider", "")
|
||||
if provider:
|
||||
providers.add(provider)
|
||||
|
||||
auxiliary = config.get("auxiliary", {})
|
||||
for aux_config in auxiliary.values():
|
||||
if isinstance(aux_config, dict):
|
||||
provider = aux_config.get("provider", "")
|
||||
if provider and provider != "auto":
|
||||
providers.add(provider)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Add common providers even if not configured
|
||||
providers.update(["openrouter", "nous", "ollama"])
|
||||
|
||||
return list(providers)
|
||||
|
||||
def build_health_map():
|
||||
"""Build a health map of all providers."""
|
||||
providers = get_all_providers()
|
||||
health_map = {}
|
||||
|
||||
log("Testing " + str(len(providers)) + " providers...")
|
||||
|
||||
for provider in providers:
|
||||
api_key = get_provider_api_key(provider)
|
||||
healthy, message = test_provider(provider, api_key)
|
||||
|
||||
health_map[provider] = {
|
||||
"healthy": healthy,
|
||||
"message": message,
|
||||
"last_test": datetime.now(timezone.utc).isoformat(),
|
||||
"api_key_present": bool(api_key)
|
||||
}
|
||||
|
||||
status = "HEALTHY" if healthy else "UNHEALTHY"
|
||||
log(" " + provider + ": " + status + " - " + message)
|
||||
|
||||
return health_map
|
||||
|
||||
def get_fallback_providers(health_map):
|
||||
"""Get list of healthy providers in priority order."""
|
||||
# Priority order: nous, openrouter, ollama, others
|
||||
priority_order = ["nous", "openrouter", "ollama", "anthropic", "kimi-coding"]
|
||||
|
||||
healthy = []
|
||||
for provider in priority_order:
|
||||
if provider in health_map and health_map[provider]["healthy"]:
|
||||
healthy.append(provider)
|
||||
|
||||
# Add any other healthy providers not in priority list
|
||||
for provider, info in health_map.items():
|
||||
if info["healthy"] and provider not in healthy:
|
||||
healthy.append(provider)
|
||||
|
||||
return healthy
|
||||
|
||||
def update_profile_config(profile_name, new_provider):
|
||||
"""Update a profile's config to use a new provider."""
|
||||
config_file = PROFILES_DIR / profile_name / "config.yaml"
|
||||
|
||||
if not config_file.exists():
|
||||
return False, "Config file not found"
|
||||
|
||||
try:
|
||||
with open(config_file) as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
# Update model provider
|
||||
if "model" not in config:
|
||||
config["model"] = {}
|
||||
|
||||
old_provider = config["model"].get("provider", "unknown")
|
||||
config["model"]["provider"] = new_provider
|
||||
|
||||
# Update auxiliary providers if they were using the old provider
|
||||
auxiliary = config.get("auxiliary", {})
|
||||
for aux_name, aux_config in auxiliary.items():
|
||||
if isinstance(aux_config, dict) and aux_config.get("provider") == old_provider:
|
||||
aux_config["provider"] = new_provider
|
||||
|
||||
# Write back
|
||||
with open(config_file, "w") as f:
|
||||
yaml.dump(config, f, default_flow_style=False)
|
||||
|
||||
log("Updated " + profile_name + ": " + old_provider + " -> " + new_provider)
|
||||
return True, "Updated"
|
||||
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
def check_profiles(health_map):
|
||||
"""Check all profiles and update unhealthy providers."""
|
||||
if not PROFILES_DIR.exists():
|
||||
return
|
||||
|
||||
fallback_providers = get_fallback_providers(health_map)
|
||||
if not fallback_providers:
|
||||
log("CRITICAL: No healthy providers available!")
|
||||
return
|
||||
|
||||
updated_profiles = []
|
||||
|
||||
for profile_dir in PROFILES_DIR.iterdir():
|
||||
if not profile_dir.is_dir():
|
||||
continue
|
||||
|
||||
profile_name = profile_dir.name
|
||||
config_file = profile_dir / "config.yaml"
|
||||
|
||||
if not config_file.exists():
|
||||
continue
|
||||
|
||||
try:
|
||||
with open(config_file) as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
model_config = config.get("model", {})
|
||||
if not isinstance(model_config, dict):
|
||||
continue
|
||||
|
||||
current_provider = model_config.get("provider", "")
|
||||
if not current_provider:
|
||||
continue
|
||||
|
||||
# Check if current provider is healthy
|
||||
if current_provider in health_map and health_map[current_provider]["healthy"]:
|
||||
continue # Provider is healthy, no action needed
|
||||
|
||||
# Find best fallback
|
||||
best_fallback = None
|
||||
for provider in fallback_providers:
|
||||
if provider != current_provider:
|
||||
best_fallback = provider
|
||||
break
|
||||
|
||||
if not best_fallback:
|
||||
log("No fallback for " + profile_name + " (current: " + current_provider + ")")
|
||||
continue
|
||||
|
||||
# Update profile
|
||||
success, message = update_profile_config(profile_name, best_fallback)
|
||||
if success:
|
||||
updated_profiles.append({
|
||||
"profile": profile_name,
|
||||
"old_provider": current_provider,
|
||||
"new_provider": best_fallback
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
log("Error processing " + profile_name + ": " + str(e))
|
||||
|
||||
return updated_profiles
|
||||
|
||||
def load_state():
|
||||
"""Load state from tmux-state.json."""
|
||||
if STATE_FILE.exists():
|
||||
try:
|
||||
with open(STATE_FILE) as f:
|
||||
return json.load(f)
|
||||
except:
|
||||
pass
|
||||
return {}
|
||||
|
||||
def save_state(state):
|
||||
"""Save state to tmux-state.json."""
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(STATE_FILE, "w") as f:
|
||||
json.dump(state, f, indent=2)
|
||||
|
||||
def run_once():
|
||||
"""Run provider health check once."""
|
||||
log("=== Provider Health Check ===")
|
||||
|
||||
state = load_state()
|
||||
|
||||
# Build health map
|
||||
health_map = build_health_map()
|
||||
|
||||
# Check profiles and update if needed
|
||||
updated_profiles = check_profiles(health_map)
|
||||
|
||||
# Update state
|
||||
state["provider_health"] = health_map
|
||||
state["last_provider_check"] = datetime.now(timezone.utc).isoformat()
|
||||
|
||||
if updated_profiles:
|
||||
state["last_profile_updates"] = updated_profiles
|
||||
|
||||
save_state(state)
|
||||
|
||||
# Summary
|
||||
healthy_count = sum(1 for p in health_map.values() if p["healthy"])
|
||||
total_count = len(health_map)
|
||||
|
||||
log("Health: " + str(healthy_count) + "/" + str(total_count) + " providers healthy")
|
||||
|
||||
if updated_profiles:
|
||||
log("Updated " + str(len(updated_profiles)) + " profiles:")
|
||||
for update in updated_profiles:
|
||||
log(" " + update["profile"] + ": " + update["old_provider"] + " -> " + update["new_provider"])
|
||||
|
||||
def show_status():
|
||||
"""Show provider health status."""
|
||||
state = load_state()
|
||||
health_map = state.get("provider_health", {})
|
||||
|
||||
if not health_map:
|
||||
print("No provider health data available. Run without --status first.")
|
||||
return
|
||||
|
||||
print("Provider Health (last updated: " + str(state.get("last_provider_check", "unknown")) + ")")
|
||||
print("=" * 80)
|
||||
|
||||
for provider, info in sorted(health_map.items()):
|
||||
status = "HEALTHY" if info["healthy"] else "UNHEALTHY"
|
||||
message = info.get("message", "")
|
||||
api_key = "yes" if info.get("api_key_present") else "no"
|
||||
|
||||
print(provider.ljust(20) + " " + status.ljust(10) + " API key: " + api_key + " - " + message)
|
||||
|
||||
# Show recent updates
|
||||
updates = state.get("last_profile_updates", [])
|
||||
if updates:
|
||||
print()
|
||||
print("Recent Profile Updates:")
|
||||
for update in updates:
|
||||
print(" " + update["profile"] + ": " + update["old_provider"] + " -> " + update["new_provider"])
|
||||
|
||||
def daemon_mode():
|
||||
"""Run continuously."""
|
||||
log("Starting provider health daemon (check every 300s)")
|
||||
|
||||
while True:
|
||||
try:
|
||||
run_once()
|
||||
time.sleep(300) # Check every 5 minutes
|
||||
except KeyboardInterrupt:
|
||||
log("Daemon stopped by user")
|
||||
break
|
||||
except Exception as e:
|
||||
log("Error: " + str(e))
|
||||
time.sleep(60)
|
||||
|
||||
def main():
|
||||
if "--status" in sys.argv:
|
||||
show_status()
|
||||
elif "--daemon" in sys.argv:
|
||||
daemon_mode()
|
||||
else:
|
||||
run_once()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -196,7 +196,37 @@
|
||||
"paused_reason": null,
|
||||
"skills": [],
|
||||
"skill": null
|
||||
},
|
||||
{
|
||||
"id": "tmux-supervisor-513",
|
||||
"name": "Autonomous Cron Supervisor",
|
||||
"prompt": "Load the tmux-supervisor skill and execute the monitoring protocol.\n\nCheck both `dev` and `timmy` tmux sessions for idle panes. Only send Telegram notifications on actionable events (idle, overflow, failure). Be silent when all agents are working.\n\nSteps:\n1. List all tmux sessions (skip 'Alexander')\n2. For each session, list windows and panes\n3. Capture each pane and classify state (idle vs active)\n4. For idle panes: read context, craft context-aware prompt\n5. Send /queue prompts to idle panes\n6. Verify prompts landed\n7. Only notify via Telegram if:\n - A pane was prompted (idle detected)\n - A pane shows context overflow (>80%)\n - A pane is stuck or crashed\n8. If all panes are active: respond with [SILENT]",
|
||||
"schedule": {
|
||||
"kind": "interval",
|
||||
"minutes": 7,
|
||||
"display": "every 7m"
|
||||
},
|
||||
"schedule_display": "every 7m",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 0
|
||||
},
|
||||
"enabled": true,
|
||||
"created_at": "2026-04-15T03:00:00.000000+00:00",
|
||||
"next_run_at": null,
|
||||
"last_run_at": null,
|
||||
"last_status": null,
|
||||
"last_error": null,
|
||||
"deliver": "telegram",
|
||||
"origin": null,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"skills": [
|
||||
"tmux-supervisor"
|
||||
],
|
||||
"skill": "tmux-supervisor"
|
||||
}
|
||||
],
|
||||
"updated_at": "2026-04-13T02:00:00+00:00"
|
||||
}
|
||||
}
|
||||
331
pipeline/nightly_scheduler.py
Executable file
331
pipeline/nightly_scheduler.py
Executable file
@@ -0,0 +1,331 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
nightly_scheduler.py — Nightly Pipeline Scheduler
|
||||
|
||||
Auto-starts batch pipelines when inference is available, respecting
|
||||
priority ordering, token budgets, and peak-hour pausing.
|
||||
|
||||
Usage:
|
||||
python3 nightly_scheduler.py # run scheduler
|
||||
python3 nightly_scheduler.py --check # dry-run: show what would start
|
||||
python3 nightly_scheduler.py --status # show pipeline status
|
||||
python3 nightly_scheduler.py --reset # reset daily budget
|
||||
|
||||
Crontab:
|
||||
# Run every 30 minutes during off-peak hours (10pm-6am)
|
||||
*/30 22-5 * * * cd /path/to/timmy-config && python3 pipeline/nightly_scheduler.py >> ~/.hermes/pipeline-logs/nightly.log 2>&1
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
# --- Config ---
|
||||
STATE_FILE = Path.home() / ".hermes" / "pipeline_state.json"
|
||||
LOG_DIR = Path.home() / ".hermes" / "pipeline-logs"
|
||||
DAILY_TOKEN_BUDGET = 5_000_000 # 5M tokens per day
|
||||
PEAK_HOURS = list(range(8, 22)) # 8am-10pm = peak interactive usage
|
||||
CHECK_INTERVAL = 1800 # 30 minutes
|
||||
|
||||
INFERENCE_ENDPOINTS = [
|
||||
{"name": "local_ollama", "url": "http://localhost:11434/v1/models", "type": "local"},
|
||||
{"name": "runpod", "url": "https://8lfr3j47a5r3gn-11434.proxy.runpod.net/v1/models", "type": "gpu"},
|
||||
{"name": "openrouter", "url": "https://openrouter.ai/api/v1/models", "type": "cloud"},
|
||||
]
|
||||
|
||||
# Pipeline priority order (highest first)
|
||||
PIPELINE_PRIORITY = [
|
||||
{"name": "playground_factory", "script": "pipeline/playground_factory.py", "priority": 1},
|
||||
{"name": "training_factory", "script": "pipeline/training_factory.py", "priority": 2},
|
||||
{"name": "knowledge_mine", "script": "pipeline/knowledge_mine.py", "priority": 3},
|
||||
{"name": "adversary", "script": "pipeline/adversary_runner.py", "priority": 4},
|
||||
{"name": "codebase_genome", "script": "pipeline/codebase_genome.py", "priority": 5},
|
||||
]
|
||||
|
||||
# Dependency rules: some pipelines only start after others are running
|
||||
DEPENDENCY_RULES = {
|
||||
"playground_factory": [], # no deps, start immediately
|
||||
"training_factory": [], # no deps, start in parallel
|
||||
"knowledge_mine": ["training_factory"], # start after training is running
|
||||
"adversary": ["knowledge_mine"], # start after knowledge is halfway
|
||||
"codebase_genome": [], # continuous, one repo per night
|
||||
}
|
||||
|
||||
|
||||
def load_state():
|
||||
"""Load pipeline state from disk."""
|
||||
if STATE_FILE.exists():
|
||||
with open(STATE_FILE) as f:
|
||||
return json.load(f)
|
||||
return {
|
||||
"last_run": None,
|
||||
"daily_tokens_used": 0,
|
||||
"budget_reset_date": None,
|
||||
"pipelines": {},
|
||||
"active_sessions": [],
|
||||
}
|
||||
|
||||
|
||||
def save_state(state):
|
||||
"""Save pipeline state to disk."""
|
||||
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(STATE_FILE, "w") as f:
|
||||
json.dump(state, f, indent=2)
|
||||
|
||||
|
||||
def check_provider(endpoint):
|
||||
"""Check if an inference provider is available."""
|
||||
try:
|
||||
req = urllib.request.Request(endpoint["url"], headers={"Authorization": "Bearer ollama"})
|
||||
with urllib.request.urlopen(req, timeout=10) as resp:
|
||||
return resp.status == 200
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def get_available_providers():
|
||||
"""Check all inference endpoints and return available ones."""
|
||||
available = []
|
||||
for ep in INFERENCE_ENDPOINTS:
|
||||
if check_provider(ep):
|
||||
available.append(ep["name"])
|
||||
return available
|
||||
|
||||
|
||||
def is_peak_hours():
|
||||
"""Check if current time is during peak interactive usage."""
|
||||
now = datetime.now()
|
||||
return now.hour in PEAK_HOURS
|
||||
|
||||
|
||||
def check_token_budget(state):
|
||||
"""Check if daily token budget allows starting new work."""
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
if state.get("budget_reset_date") != today:
|
||||
# New day, reset budget
|
||||
state["daily_tokens_used"] = 0
|
||||
state["budget_reset_date"] = today
|
||||
save_state(state)
|
||||
return state["daily_tokens_used"] < DAILY_TOKEN_BUDGET
|
||||
|
||||
|
||||
def get_pipeline_status(state, pipeline_name):
|
||||
"""Get the status of a specific pipeline."""
|
||||
return state.get("pipelines", {}).get(pipeline_name, {
|
||||
"status": "not_started",
|
||||
"last_run": None,
|
||||
"last_success": None,
|
||||
"progress": 0,
|
||||
})
|
||||
|
||||
|
||||
def check_dependencies(state, pipeline_name):
|
||||
"""Check if pipeline dependencies are satisfied."""
|
||||
deps = DEPENDENCY_RULES.get(pipeline_name, [])
|
||||
for dep in deps:
|
||||
dep_status = get_pipeline_status(state, dep)
|
||||
if dep_status["status"] not in ("running", "completed"):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def start_pipeline(pipeline, state, dry_run=False):
|
||||
"""Start a pipeline process."""
|
||||
name = pipeline["name"]
|
||||
script = pipeline["script"]
|
||||
|
||||
log(f"Starting pipeline: {name}")
|
||||
|
||||
if dry_run:
|
||||
log(f" DRY RUN — would run: python3 {script}")
|
||||
return True
|
||||
|
||||
# Check if script exists
|
||||
script_path = Path(script)
|
||||
if not script_path.exists():
|
||||
log(f" Script not found: {script_path}")
|
||||
# Update state anyway so we track the attempt
|
||||
state["pipelines"][name] = {
|
||||
"status": "script_missing",
|
||||
"last_run": datetime.now(timezone.utc).isoformat(),
|
||||
"progress": 0,
|
||||
}
|
||||
save_state(state)
|
||||
return False
|
||||
|
||||
# Run the pipeline script
|
||||
import subprocess
|
||||
log_dir = LOG_DIR / name
|
||||
log_dir.mkdir(parents=True, exist_ok=True)
|
||||
log_file = log_dir / f"{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
|
||||
|
||||
try:
|
||||
proc = subprocess.Popen(
|
||||
["python3", str(script_path)],
|
||||
stdout=open(log_file, "w"),
|
||||
stderr=subprocess.STDOUT,
|
||||
cwd=str(Path(script).parent.parent),
|
||||
)
|
||||
|
||||
state["pipelines"][name] = {
|
||||
"status": "running",
|
||||
"pid": proc.pid,
|
||||
"last_run": datetime.now(timezone.utc).isoformat(),
|
||||
"log_file": str(log_file),
|
||||
"progress": 0,
|
||||
}
|
||||
save_state(state)
|
||||
log(f" Started PID {proc.pid}, log: {log_file}")
|
||||
return True
|
||||
except Exception as e:
|
||||
log(f" Failed to start: {e}")
|
||||
state["pipelines"][name] = {
|
||||
"status": "failed",
|
||||
"last_run": datetime.now(timezone.utc).isoformat(),
|
||||
"error": str(e),
|
||||
}
|
||||
save_state(state)
|
||||
return False
|
||||
|
||||
|
||||
def check_running_pipelines(state):
|
||||
"""Check status of running pipelines and update state."""
|
||||
import subprocess
|
||||
for name, info in state.get("pipelines", {}).items():
|
||||
if info.get("status") == "running":
|
||||
pid = info.get("pid")
|
||||
if pid:
|
||||
try:
|
||||
os.kill(pid, 0) # Check if process exists
|
||||
except ProcessLookupError:
|
||||
# Process finished
|
||||
info["status"] = "completed"
|
||||
info["completed_at"] = datetime.now(timezone.utc).isoformat()
|
||||
log(f"Pipeline {name} completed (PID {pid} exited)")
|
||||
save_state(state)
|
||||
|
||||
|
||||
def run_scheduler(dry_run=False, check_only=False):
|
||||
"""Main scheduler loop."""
|
||||
state = load_state()
|
||||
|
||||
log("=" * 50)
|
||||
log(f"Pipeline Scheduler — {datetime.now().isoformat()}")
|
||||
log(f"Mode: {'CHECK' if check_only else 'DRY RUN' if dry_run else 'LIVE'}")
|
||||
|
||||
# Check peak hours
|
||||
if is_peak_hours():
|
||||
log("Peak hours detected. Pausing pipeline starts.")
|
||||
log("Pipelines will resume at 10pm.")
|
||||
return
|
||||
|
||||
# Check token budget
|
||||
if not check_token_budget(state):
|
||||
log(f"Daily token budget exhausted ({state['daily_tokens_used']}/{DAILY_TOKEN_BUDGET})")
|
||||
return
|
||||
log(f"Token budget: {state['daily_tokens_used']}/{DAILY_TOKEN_BUDGET}")
|
||||
|
||||
# Check providers
|
||||
providers = get_available_providers()
|
||||
if not providers:
|
||||
log("No inference providers available. Skipping.")
|
||||
return
|
||||
log(f"Available providers: {', '.join(providers)}")
|
||||
|
||||
# Check running pipelines
|
||||
check_running_pipelines(state)
|
||||
|
||||
# Find next pipeline to start
|
||||
started = 0
|
||||
for pipeline in sorted(PIPELINE_PRIORITY, key=lambda p: p["priority"]):
|
||||
name = pipeline["name"]
|
||||
status = get_pipeline_status(state, name)
|
||||
|
||||
# Skip if already running or completed
|
||||
if status["status"] in ("running", "completed"):
|
||||
log(f" {name}: {status['status']} (skipping)")
|
||||
continue
|
||||
|
||||
# Check dependencies
|
||||
if not check_dependencies(state, name):
|
||||
deps = DEPENDENCY_RULES.get(name, [])
|
||||
log(f" {name}: waiting for dependencies: {deps}")
|
||||
continue
|
||||
|
||||
# Start the pipeline
|
||||
if check_only:
|
||||
log(f" {name}: READY to start (priority {pipeline['priority']})")
|
||||
else:
|
||||
if start_pipeline(pipeline, state, dry_run):
|
||||
started += 1
|
||||
# Only start one pipeline per run to avoid overload
|
||||
if started >= 1:
|
||||
log("Started 1 pipeline. Will check again next cycle.")
|
||||
break
|
||||
|
||||
if started == 0 and not check_only:
|
||||
log("No pipelines to start. All are running, completed, or blocked.")
|
||||
|
||||
log("=" * 50)
|
||||
|
||||
|
||||
def show_status():
|
||||
"""Show current pipeline status."""
|
||||
state = load_state()
|
||||
print(f"\nPipeline Status — {datetime.now().strftime('%Y-%m-%d %H:%M')}")
|
||||
print(f"Token budget: {state.get('daily_tokens_used', 0)}/{DAILY_TOKEN_BUDGET}")
|
||||
print(f"Last run: {state.get('last_run', 'never')}")
|
||||
print()
|
||||
|
||||
for pipeline in sorted(PIPELINE_PRIORITY, key=lambda p: p["priority"]):
|
||||
name = pipeline["name"]
|
||||
status = get_pipeline_status(state, name)
|
||||
st = status["status"]
|
||||
icon = {"running": "●", "completed": "✓", "failed": "✗", "not_started": "○", "script_missing": "?"}.get(st, "?")
|
||||
print(f" {icon} {name:25} {st:15} last={(status.get('last_run') or 'never')[:19]}")
|
||||
|
||||
|
||||
def reset_budget():
|
||||
"""Reset daily token budget."""
|
||||
state = load_state()
|
||||
state["daily_tokens_used"] = 0
|
||||
state["budget_reset_date"] = datetime.now().strftime("%Y-%m-%d")
|
||||
save_state(state)
|
||||
print("Budget reset.")
|
||||
|
||||
|
||||
def log(msg):
|
||||
"""Log to stdout and file."""
|
||||
timestamp = datetime.now().strftime("%H:%M:%S")
|
||||
line = f"[{timestamp}] {msg}"
|
||||
print(line)
|
||||
LOG_DIR.mkdir(parents=True, exist_ok=True)
|
||||
log_file = LOG_DIR / "nightly.log"
|
||||
with open(log_file, "a") as f:
|
||||
f.write(line + "\n")
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description="Nightly Pipeline Scheduler")
|
||||
parser.add_argument("--check", action="store_true", help="Dry-run: show what would start")
|
||||
parser.add_argument("--status", action="store_true", help="Show pipeline status")
|
||||
parser.add_argument("--reset", action="store_true", help="Reset daily token budget")
|
||||
parser.add_argument("--dry-run", action="store_true", help="Dry-run mode")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.status:
|
||||
show_status()
|
||||
elif args.reset:
|
||||
reset_budget()
|
||||
else:
|
||||
run_scheduler(dry_run=args.dry_run or args.check, check_only=args.check)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -19,9 +19,11 @@ from glitch_patterns import (
|
||||
GlitchPattern,
|
||||
GlitchSeverity,
|
||||
MATRIX_GLITCH_PATTERNS,
|
||||
THREEJS_CATEGORIES,
|
||||
build_vision_prompt,
|
||||
get_pattern_by_category,
|
||||
get_patterns_by_severity,
|
||||
get_threejs_patterns,
|
||||
)
|
||||
|
||||
from matrix_glitch_detector import (
|
||||
@@ -40,7 +42,7 @@ class TestGlitchPatterns(unittest.TestCase):
|
||||
|
||||
def test_pattern_count(self):
|
||||
"""Verify we have a reasonable number of defined patterns."""
|
||||
self.assertGreaterEqual(len(MATRIX_GLITCH_PATTERNS), 8)
|
||||
self.assertGreaterEqual(len(MATRIX_GLITCH_PATTERNS), 14) # 10 generic + 6 Three.js
|
||||
|
||||
def test_all_patterns_have_required_fields(self):
|
||||
"""Every pattern must have category, name, description, severity, prompts."""
|
||||
@@ -88,6 +90,9 @@ class TestGlitchPatterns(unittest.TestCase):
|
||||
self.assertIn("Floating Object", prompt)
|
||||
self.assertIn("Z-Fighting", prompt)
|
||||
self.assertIn("Missing", prompt)
|
||||
# Three.js patterns should be included
|
||||
self.assertIn("Shader Compilation Failure", prompt)
|
||||
self.assertIn("Bloom Overflow", prompt)
|
||||
|
||||
def test_build_vision_prompt_subset(self):
|
||||
"""Vision prompt with subset should only include specified patterns."""
|
||||
@@ -248,7 +253,7 @@ class TestGlitchDetector(unittest.TestCase):
|
||||
|
||||
try:
|
||||
report = run_demo(output_path)
|
||||
self.assertEqual(len(report.glitches), 4)
|
||||
self.assertEqual(len(report.glitches), 6) # 4 original + 2 Three.js
|
||||
self.assertGreater(report.summary["total_glitches"], 0)
|
||||
self.assertTrue(output_path.exists())
|
||||
|
||||
@@ -260,6 +265,93 @@ class TestGlitchDetector(unittest.TestCase):
|
||||
output_path.unlink(missing_ok=True)
|
||||
|
||||
|
||||
class TestThreeJsPatterns(unittest.TestCase):
|
||||
"""Tests for Three.js-specific glitch patterns (timmy-config#543)."""
|
||||
|
||||
def test_get_threejs_patterns_returns_only_threejs(self):
|
||||
"""get_threejs_patterns() should return only Three.js categories."""
|
||||
patterns = get_threejs_patterns()
|
||||
self.assertEqual(len(patterns), 6)
|
||||
for p in patterns:
|
||||
self.assertIn(p.category, THREEJS_CATEGORIES)
|
||||
|
||||
def test_threejs_patterns_have_required_fields(self):
|
||||
"""All Three.js patterns must have valid fields."""
|
||||
for p in get_threejs_patterns():
|
||||
self.assertIsInstance(p.category, GlitchCategory)
|
||||
self.assertTrue(p.name)
|
||||
self.assertTrue(p.description)
|
||||
self.assertIsInstance(p.severity, GlitchSeverity)
|
||||
self.assertGreater(len(p.detection_prompts), 0)
|
||||
self.assertGreater(len(p.visual_indicators), 0)
|
||||
|
||||
def test_shader_failure_is_critical(self):
|
||||
"""Shader compilation failure should be CRITICAL severity."""
|
||||
p = get_pattern_by_category(GlitchCategory.SHADER_FAILURE)
|
||||
self.assertIsNotNone(p)
|
||||
self.assertEqual(p.severity, GlitchSeverity.CRITICAL)
|
||||
|
||||
def test_texture_placeholder_is_critical(self):
|
||||
"""Texture placeholder (1x1 white) should be CRITICAL severity."""
|
||||
p = get_pattern_by_category(GlitchCategory.TEXTURE_PLACEHOLDER)
|
||||
self.assertIsNotNone(p)
|
||||
self.assertEqual(p.severity, GlitchSeverity.CRITICAL)
|
||||
|
||||
def test_infer_severity_shader_failure(self):
|
||||
"""Shader failure should infer critical/high."""
|
||||
self.assertEqual(_infer_severity("shader_failure", 0.8), "critical")
|
||||
self.assertEqual(_infer_severity("shader_failure", 0.5), "high")
|
||||
|
||||
def test_infer_severity_texture_placeholder(self):
|
||||
"""Texture placeholder should infer critical/high."""
|
||||
self.assertEqual(_infer_severity("texture_placeholder", 0.8), "critical")
|
||||
self.assertEqual(_infer_severity("texture_placeholder", 0.5), "high")
|
||||
|
||||
def test_infer_severity_uv_mapping(self):
|
||||
"""UV mapping error should infer high/medium."""
|
||||
self.assertEqual(_infer_severity("uv_mapping_error", 0.8), "high")
|
||||
self.assertEqual(_infer_severity("uv_mapping_error", 0.5), "medium")
|
||||
|
||||
def test_infer_severity_frustum_culling(self):
|
||||
"""Frustum culling should infer medium/low."""
|
||||
self.assertEqual(_infer_severity("frustum_culling", 0.7), "medium")
|
||||
self.assertEqual(_infer_severity("frustum_culling", 0.4), "low")
|
||||
|
||||
def test_infer_severity_shadow_map(self):
|
||||
"""Shadow map artifact should infer medium/low."""
|
||||
self.assertEqual(_infer_severity("shadow_map_artifact", 0.7), "medium")
|
||||
self.assertEqual(_infer_severity("shadow_map_artifact", 0.4), "low")
|
||||
|
||||
def test_infer_severity_bloom_overflow(self):
|
||||
"""Bloom overflow should infer medium/low (default path)."""
|
||||
self.assertEqual(_infer_severity("bloom_overflow", 0.7), "medium")
|
||||
self.assertEqual(_infer_severity("bloom_overflow", 0.4), "low")
|
||||
|
||||
def test_threejs_patterns_in_vision_prompt(self):
|
||||
"""Three.js patterns should appear in the composite vision prompt."""
|
||||
prompt = build_vision_prompt()
|
||||
self.assertIn("shader_failure", prompt)
|
||||
self.assertIn("texture_placeholder", prompt)
|
||||
self.assertIn("uv_mapping_error", prompt)
|
||||
self.assertIn("frustum_culling", prompt)
|
||||
self.assertIn("shadow_map_artifact", prompt)
|
||||
self.assertIn("bloom_overflow", prompt)
|
||||
|
||||
def test_threejs_subset_prompt(self):
|
||||
"""Building prompt from Three.js-only patterns should work."""
|
||||
threejs = get_threejs_patterns()
|
||||
prompt = build_vision_prompt(threejs)
|
||||
self.assertIn("Shader Compilation Failure", prompt)
|
||||
self.assertNotIn("Floating Object", prompt) # generic, not Three.js
|
||||
|
||||
def test_report_metadata_version(self):
|
||||
"""Report metadata should reference both issues."""
|
||||
report = run_demo()
|
||||
self.assertEqual(report.metadata["detector_version"], "0.2.0")
|
||||
self.assertIn("543", report.metadata["reference"])
|
||||
|
||||
|
||||
|
||||
class TestIntegration(unittest.TestCase):
|
||||
"""Integration-level tests."""
|
||||
|
||||
@@ -276,6 +368,13 @@ class TestIntegration(unittest.TestCase):
|
||||
expected = {"floating_assets", "z_fighting", "missing_textures", "clipping", "broken_normals"}
|
||||
self.assertTrue(expected.issubset(category_values))
|
||||
|
||||
def test_patterns_cover_threejs_themes(self):
|
||||
"""Patterns should cover Three.js-specific glitch themes (#543)."""
|
||||
category_values = {p.category.value for p in MATRIX_GLITCH_PATTERNS}
|
||||
threejs_expected = {"shader_failure", "texture_placeholder", "uv_mapping_error",
|
||||
"frustum_culling", "shadow_map_artifact", "bloom_overflow"}
|
||||
self.assertTrue(threejs_expected.issubset(category_values))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Overture in D", "artist": "Orchestra Solemn", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Cathedral", "artist": "The Ensemble", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Nocturne", "artist": "Elena Frost", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Symphony of Stone", "artist": "Maestro Voss", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Adagio", "artist": "The Philharmonic", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Minuet", "artist": "Lady Harpsichord", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Requiem", "artist": "The Choir Eternal", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Capriccio", "artist": "Virtuoso Nine", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Elegy", "artist": "String Collective", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Overture crashing through the gilded hall", "scene": {"mood": "majestic", "colors": ["#f5f5dc", "#8b7355", "#d4af37"], "composition": "symmetrical nave", "camera": "steady tripod", "description": "A gilded concert hall, symmetrical. Chandeliers cast warm light on rows of empty seats."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Cathedral organ filling every stone", "scene": {"mood": "solemn", "colors": ["#e8dcc8", "#5c4033", "#c0392b"], "composition": "center aisle leading", "camera": "slow crane up", "description": "A cathedral interior: stone columns reach to vaulted ceilings. Light streams through stained glass."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Nocturne drifting through the empty hallways", "scene": {"mood": "triumphant", "colors": ["#f0ead6", "#4a3728", "#2980b9"], "composition": "balcony overlook", "camera": "wide establishing", "description": "A grand piano in an empty ballroom. Moonlight through tall windows creates silver rectangles."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Symphony of stone carved by sound alone", "scene": {"mood": "melancholic", "colors": ["#faf0e6", "#654321", "#b8860b"], "composition": "instrument cluster", "camera": "close-up strings", "description": "A building carved from sound: pillars are stacked notes, arches are sustained chords."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Adagio descending like a slow prayer", "scene": {"mood": "ethereal", "colors": ["#fffef2", "#8b7d6b", "#483d8b"], "composition": "cathedral arch", "camera": "panoramic sweep", "description": "A single violinist on a vast empty stage. One spotlight. The rest is darkness."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Minuet of candlelight and powdered wigs", "scene": {"mood": "grand", "colors": ["#f5f0e1", "#556b2f", "#daa520"], "composition": "sheet music detail", "camera": "tunnel zoom", "description": "A harpsichord in a candlelit room. Powdered wigs and silk gowns blur in the background."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Requiem echoing through the vaulted ceiling", "scene": {"mood": "tender", "colors": ["#e6e2d3", "#3c3c3c", "#800020"], "composition": "conductor POV", "camera": "elegant dolly", "description": "A choir stands in a vaulted nave. Their voices are visible as golden light rising."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Capriccio leaping from key to key", "scene": {"mood": "dramatic", "colors": ["#fffbf0", "#704214", "#c17817"], "composition": "string section grid", "camera": "static symmetric", "description": "A pianist's hands leap across the keys. Each note leaves a colored trail in the air."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Elegy whispered by a solo cello", "scene": {"mood": "serene", "colors": ["#f8f4e8", "#696969", "#4682b4"], "composition": "ceiling dome up", "camera": "golden light", "description": "A solo cello leans against a chair in an empty concert hall. Dust motes in the light."}}
|
||||
{"song": "Finale", "artist": "The Grand Orchestra", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Finale triumphant, every instrument ablaze", "scene": {"mood": "transcendent", "colors": ["#fdfcf5", "#8b4513", "#ffd700"], "composition": "gallery view", "camera": "reverent wide", "description": "The full orchestra seen from the balcony. Every instrument ablaze. The conductor levitates."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Dirt Road Hymnal", "artist": "Clay Walker Jr.", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Front Porch Light", "artist": "Loretta Stone", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Gravel & Grace", "artist": "The Holler Boys", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Sweet Magnolia", "artist": "Daisy Mae", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Pickup Sunset", "artist": "Billy Ray Dust", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Honky Tonk Angel", "artist": "Patsy Blue", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Pine & Stars", "artist": "Mountain Folk", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Tailgate Serenade", "artist": "Jake & The Outlaws", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Prairie Wind", "artist": "Sarah Jo", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Dirt road hymnal sung under open sky", "scene": {"mood": "nostalgic", "colors": ["#deb887", "#8b4513", "#87ceeb"], "composition": "wide horizon", "camera": "golden hour wide", "description": "A dirt road stretches to the horizon under a vast sky. Fence posts line both sides."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Front porch light guiding me back home", "scene": {"mood": "free-spirited", "colors": ["#f4a460", "#2f4f4f", "#ffd700"], "composition": "dirt road perspective", "camera": "steady landscape", "description": "A wooden porch with a single light on. A rocking chair sways in an invisible breeze."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Gravel crunching under boots and grace", "scene": {"mood": "heartbroken", "colors": ["#d2691e", "#556b2f", "#faf0e6"], "composition": "porch frame", "camera": "aerial drone", "description": "Boots on gravel. A figure walks toward a farmhouse lit by the last light of day."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Sweet magnolia blooming by the fence", "scene": {"mood": "hopeful", "colors": ["#cd853f", "#800020", "#f0e68c"], "composition": "barn silhouette", "camera": "tracking horse", "description": "Magnolia blossoms frame a weathered white fence. Butterflies in the warm air."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Pickup bed facing the setting sun", "scene": {"mood": "rowdy", "colors": ["#daa520", "#654321", "#87ceeb"], "composition": "field panorama", "camera": "sunset silhouette", "description": "A pickup truck tailgate facing the sunset. Empty fields stretch to the horizon."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Honky tonk angel two-stepping on the floor", "scene": {"mood": "peaceful", "colors": ["#b8860b", "#2e8b57", "#fffacd"], "composition": "pickup truck detail", "camera": "dusty tracking", "description": "A honky-tonk interior: checkered floor, neon beer signs, a couple mid-twirl."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Pine trees standing tall against the stars", "scene": {"mood": "yearning", "colors": ["#d2b48c", "#006400", "#4682b4"], "composition": "sunset gradient", "camera": "gentle pan", "description": "Pine trees silhouetted against a star-filled sky. A campfire glows below."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Tailgate down, guitar singing to the field", "scene": {"mood": "joyful", "colors": ["#c19a6b", "#8b0000", "#e0ffff"], "composition": "fence line leading", "camera": "tripod static", "description": "A tailgate down, guitar case open. A figure plays to an audience of fireflies."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Prairie wind carrying the old songs home", "scene": {"mood": "wistful", "colors": ["#e8c39e", "#4a3728", "#add8e6"], "composition": "water tower center", "camera": "slow zoom out", "description": "Tallgrass prairie bending in the wind. A water tower stands in the distance."}}
|
||||
{"song": "Barn Dance", "artist": "The Copper Creek Band", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Barn dance rhythm shaking the floorboards", "scene": {"mood": "defiant", "colors": ["#f5deb3", "#6b3a2a", "#98d8c8"], "composition": "crossroads split", "camera": "handheld walk", "description": "A barn interior: string lights, hay bales, dancers spinning. Fiddle music visible in motion lines."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Synthetic Dawn", "artist": "Pixel Wave", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Neon Cathedral", "artist": "Grid Runner", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Pulse Width", "artist": "Modular Mind", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Digital Rain", "artist": "Codec Dreams", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Frequency Drift", "artist": "Analog Ghost", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Binary Sunset", "artist": "Bit Crusher", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Waveform City", "artist": "Oscillate", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Data Stream", "artist": "Sub Processor", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Phase Lock", "artist": "Trigger Happy", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Synthetic waves crash on digital shores", "scene": {"mood": "euphoric", "colors": ["#00ffff", "#ff00ff", "#000033"], "composition": "geometric grid", "camera": "long exposure pan", "description": "A wireframe ocean stretches to the horizon. Polygons rise and fall like digital waves."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Neon cathedral rising from the code", "scene": {"mood": "hypnotic", "colors": ["#0f0020", "#39ff14", "#00bfff"], "composition": "waveform pattern", "camera": "rapid cuts", "description": "A cathedral made entirely of neon tubes pulses in synchronization. Geometric perfection."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Pulse width modulating through the void", "scene": {"mood": "transcendent", "colors": ["#120458", "#ff00aa", "#00ff88"], "composition": "particle field", "camera": "smooth glide", "description": "The void. Oscillating waveforms paint concentric circles in cyan and magenta."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Digital rain falling pixel by pixel", "scene": {"mood": "mechanical", "colors": ["#000020", "#00e5ff", "#ff1744"], "composition": "symmetric mandala", "camera": "zoom warp", "description": "Rain made of glowing falling pixels against a black background. Binary code drifts."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Frequency drifting between two worlds", "scene": {"mood": "crystalline", "colors": ["#0a001a", "#bf00ff", "#00ffea"], "composition": "radial pulse", "camera": "static grid", "description": "Two translucent worlds overlaid \u2014 one analog grain, one digital grid \u2014 at the edge of contact."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Binary sunset on the edge of the grid", "scene": {"mood": "futuristic", "colors": ["#05001a", "#ff6ec7", "#7b68ee"], "composition": "layered planes", "camera": "rotational sweep", "description": "A sun made of ones and zeros sets behind a grid landscape. Everything is numbered."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Waveforms painting cities in the dark", "scene": {"mood": "dystopian", "colors": ["#000033", "#00ff00", "#ff00ff"], "composition": "fractal zoom", "camera": "pulsing frame", "description": "City skylines rendered as audio waveforms. Buildings pulse with amplitude."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Data streaming through fiber optic veins", "scene": {"mood": "blissful", "colors": ["#1a0030", "#ff9500", "#00d4ff"], "composition": "circuit trace", "camera": "infinite scroll", "description": "Fiber optic cables stretch like veins through a translucent silicon body. Data glows within."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Phase locked to the rhythm of machines", "scene": {"mood": "frantic", "colors": ["#000000", "#00ffff", "#ff0066"], "composition": "tunnel perspective", "camera": "depth pulse", "description": "Two oscillators locked in phase, their waveforms spiraling together in perfect sync."}}
|
||||
{"song": "Recursive Loop", "artist": "Stack Overflow", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Recursive loops spinning without end", "scene": {"mood": "zen", "colors": ["#0d0221", "#ff00aa", "#66ff00"], "composition": "holographic stack", "camera": "strobe sync", "description": "An infinite loop: a corridor that turns back on itself, each segment slightly more abstract."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Block Party", "artist": "DJ Cipher", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Midnight Cipher", "artist": "Lyrical Ghost", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Crown Heights", "artist": "Queen Nyx", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Bassline Theory", "artist": "Sub Frequency", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Old School", "artist": "The Architect", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Neon Hustle", "artist": "Glow Wire", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Underground Kings", "artist": "Cipher Collective", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Gold Chains", "artist": "Lux Fontaine", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Concrete jungle where the dreams are made", "scene": {"mood": "gritty", "colors": ["#1a1a2e", "#e94560", "#f5a623"], "composition": "low angle grid", "camera": "low angle wide", "description": "A cracked sidewalk stretches toward a neon bodega sign. Speaker stacks flank the scene. Gritty texture overlays everything."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Bass drops hard, speakers shaking the frame", "scene": {"mood": "triumphant", "colors": ["#0d0d0d", "#c4a35a", "#8b0000"], "composition": "diagonal split", "camera": "tracking shot", "description": "The bass frequencies ripple visual distortion across a brick wall. Stage lights strobe red and gold."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Mic check, one two, letting the truth through", "scene": {"mood": "defiant", "colors": ["#2d1b69", "#ff6b35", "#ffd700"], "composition": "street perspective", "camera": "steady handheld", "description": "A lone figure stands center frame, mic in hand, silhouette against a sodium-vapor streetlight."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Streetlights flicker, shadows start to dance", "scene": {"mood": "reflective", "colors": ["#16213e", "#0f3460", "#e94560"], "composition": "cage framing", "camera": "dutch tilt", "description": "Shadows dance on a chain-link fence. A boombox sits on a concrete stoop, casting long shadows."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crown heavy but I wear it with grace", "scene": {"mood": "electric", "colors": ["#0a0a0a", "#ff4444", "#ffcc00"], "composition": "radial burst", "camera": "bird's eye grid", "description": "A crown floats above a figure kneeling on cracked asphalt. Gold leaf peels from broken columns."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Underground kings never bow to the stage", "scene": {"mood": "raw", "colors": ["#1b1b2f", "#e43f5a", "#162447"], "composition": "collage overlay", "camera": "dolly push", "description": "An underground tunnel lit by a single fluorescent tube. Figures gathered in a circle."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Gold chains catching light from the neon sign", "scene": {"mood": "confident", "colors": ["#2c003e", "#ff2e63", "#252a34"], "composition": "panoramic stretch", "camera": "crane sweep", "description": "Gold chains catching light from a neon sign reading 'OPEN 24 HRS'. Reflections multiply."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Cipher spinning, words cutting like a blade", "scene": {"mood": "melancholy", "colors": ["#0f0e17", "#ff8906", "#f25f4c"], "composition": "close-up cluster", "camera": "static front", "description": "A spiral staircase descends into darkness. Each step holds a word carved into concrete."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Block party vibes, the whole city came out", "scene": {"mood": "fierce", "colors": ["#1a1a1a", "#d4af37", "#8b0000"], "composition": "depth tunnel", "camera": "orbit slow", "description": "The block lit up: folding tables, DJ booth, kids dancing. Fire hydrant spraying mist."}}
|
||||
{"song": "Streetlight Sermon", "artist": "Preacher Man", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Preaching from the corner where the real ones stay", "scene": {"mood": "introspective", "colors": ["#111111", "#00d4ff", "#ff0080"], "composition": "asymmetric balance", "camera": "snap zoom", "description": "A figure on a milk crate, arms raised. The crowd below is a sea of shadows and light."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Blue Smoke", "artist": "Miles Shadow", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Rain on 52nd", "artist": "The Quartet", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Chiaroscuro", "artist": "Nina Noir", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Whiskey & Ivory", "artist": "Duke Gray", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Last Call", "artist": "The Night Owls", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Satin Steps", "artist": "Billie Dusk", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Cool Breeze", "artist": "Sidney Smooth", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "After Midnight", "artist": "The Velvet Keys", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Autumn Leaves", "artist": "Cole Autumn", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Blue smoke curling through the spotlight beam", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c4a35a", "#4a4a4a"], "composition": "stage spotlight", "camera": "low stage angle", "description": "A single spotlight cuts through blue cigarette smoke. A saxophone gleams in the beam."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Rain tapping rhythms on the club window", "scene": {"mood": "cool", "colors": ["#0d1117", "#8b949e", "#c9362c"], "composition": "smoke layers", "camera": "smoky soft focus", "description": "Rain streaks down a window, through which a club interior glows warmly."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Chiaroscuro playing on the ivory keys", "scene": {"mood": "brooding", "colors": ["#1c1c1c", "#d4af37", "#483d8b"], "composition": "instrument focus", "camera": "slow rack focus", "description": "A figure at a piano, half in light, half in shadow. The keys are ivory and obsidian."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Whiskey neat, piano talking to itself", "scene": {"mood": "improvisational", "colors": ["#0a0a1a", "#b8860b", "#696969"], "composition": "audience blur", "camera": "ambient light", "description": "A whiskey glass catches light from a dim lamp. In the background, a piano waits."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Last call approaching, sax still going strong", "scene": {"mood": "mellow", "colors": ["#151520", "#c0c0c0", "#8b0000"], "composition": "table top-down", "camera": "close-up hands", "description": "The bar is almost empty. A saxophonist plays to the last few listeners. Closing time."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Satin steps gliding across the stage floor", "scene": {"mood": "noir", "colors": ["#111118", "#daa520", "#2f4f4f"], "composition": "bar counter leading", "camera": "steady medium", "description": "A figure in satin shoes crosses a dark stage. The spotlight follows their feet."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Cool breeze through the alley behind the club", "scene": {"mood": "suave", "colors": ["#0d0d1a", "#a0a0a0", "#4b0082"], "composition": "stage wings view", "camera": "moody low-key", "description": "An alley behind a jazz club. A cool breeze moves discarded sheet music across the ground."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "After midnight, the real music begins", "scene": {"mood": "wistful", "colors": ["#1a1520", "#ffd700", "#36454f"], "composition": "silhouette trio", "camera": "cigarette haze", "description": "Past midnight: the club glows like an ember. The band plays to an audience of ghosts."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Autumn leaves falling in six-eight time", "scene": {"mood": "intense", "colors": ["#101015", "#cd853f", "#556b2f"], "composition": "rain-streaked window", "camera": "warm tungsten", "description": "Dead leaves drift across a rain-slicked sidewalk. A jazz poster peels from a brick wall."}}
|
||||
{"song": "Smoke Signals", "artist": "The Indigo Club", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Smoke signals rising from the bass line", "scene": {"mood": "reflective", "colors": ["#0f0f14", "#b8860b", "#6a5acd"], "composition": "neon reflection", "camera": "grainy film", "description": "From the bass player's perspective: the audience is a blur, the smoke rises."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Fuego y Flor", "artist": "Mariposa", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Noche de Rumba", "artist": "El Sonero", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Corazon Valiente", "artist": "Esperanza", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Bailando Bajo La Luna", "artist": "Los Hermanos", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Sabor a Ti", "artist": "Carolina Luna", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Quimbara", "artist": "La Reina", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Vivir Mi Vida", "artist": "Sol Radiante", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "La Vida Es Un Carnaval", "artist": "Marisol", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "B\u00e9same Mucho", "artist": "Diego Fuego", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Fuego y flor dancing in the street", "scene": {"mood": "passionate", "colors": ["#ff4500", "#ffd700", "#1a0a00"], "composition": "dance pair center", "camera": "dancing follow", "description": "A street festival: fire dancers spin, flowers rain from balconies. The crowd moves as one."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Noche de rumba, congas driving the night", "scene": {"mood": "celebratory", "colors": ["#ff6347", "#ff8c00", "#2d1b00"], "composition": "festival street wide", "camera": "warm saturate", "description": "A club interior: congas line the stage, the crowd sways. Neon lights paint the walls."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Corazon valiente beating like a drum", "scene": {"mood": "joyful", "colors": ["#dc143c", "#ffa500", "#1a0505"], "composition": "instrument circle", "camera": "wide festive", "description": "A figure stands in a doorway, hand over heart. Behind, a courtyard filled with music."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Bailando bajo la luna, bodies in motion", "scene": {"mood": "sultry", "colors": ["#ff1493", "#ffff00", "#0a0a1a"], "composition": "confetti shower", "camera": "close-up passion", "description": "Under the moon, couples spin across a plaza. Lanterns float above. The band plays on."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Sabor a ti lingering on my lips", "scene": {"mood": "vibrant", "colors": ["#ff69b4", "#ff8c00", "#2b1010"], "composition": "partner spin capture", "camera": "tracking swirl", "description": "A close-up of intertwined fingers. Background: a balcony overlooking a moonlit garden."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Quimbara spinning through the candlelight", "scene": {"mood": "romantic", "colors": ["#e60000", "#ffd700", "#1a0000"], "composition": "crowd wave", "camera": "crowd immersion", "description": "Candlelight flickers across a dance floor. A figure spins, dress catching the air."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Vivir mi vida, every beat a celebration", "scene": {"mood": "festive", "colors": ["#ff0066", "#ffcc00", "#0d0d1a"], "composition": "stage fire framing", "camera": "fire light", "description": "The street is the stage. Everyone dances. Confetti and streamers fill every frame."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "La vida es un carnaval, never stop dancing", "scene": {"mood": "fiery", "colors": ["#ff3300", "#ff9900", "#1a0a00"], "composition": "balcony overlook", "camera": "steadi-cam weave", "description": "A carnival floats through the streets. Every face is smiling. Music everywhere."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "B\u00e9same mucho under the bougainvillea", "scene": {"mood": "playful", "colors": ["#cc0033", "#ffdd00", "#110505"], "composition": "drum circle top-down", "camera": "slow motion spin", "description": "Bougainvillea cascades over a white wall. Two figures share a kiss in the doorway."}}
|
||||
{"song": "Cielito Lindo", "artist": "Las Estrellas", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Cielito lindo singing up to the stars", "scene": {"mood": "nostalgic", "colors": ["#ff2200", "#ffaa00", "#0a0500"], "composition": "procession leading", "camera": "vibrant pop", "description": "Stars fill the sky above an open-air plaza. A chorus sings with arms raised."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Iron Furnace", "artist": "Anvil Storm", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Berserker", "artist": "The Horde", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Abyssal Throne", "artist": "Void Emperor", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Ragnarok", "artist": "Norsefire", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Crimson Tide", "artist": "Blood Chalice", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Forge of Gods", "artist": "Titan Wrath", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Necropolis", "artist": "Crypt Keeper", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Wrath Eternal", "artist": "The Fallen", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Doomsday Engine", "artist": "Chaos Grid", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Iron furnace roaring in the underground", "scene": {"mood": "savage", "colors": ["#1a0000", "#ff0000", "#4a0000"], "composition": "chaotic layering", "camera": "rapid cuts", "description": "A furnace of molten iron. Sparks fly in all directions. Dark figures stand silhouetted."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Berserker charging through the frozen north", "scene": {"mood": "apocalyptic", "colors": ["#0d0000", "#ff4500", "#2d0000"], "composition": "explosion radial", "camera": "shaky cam", "description": "A warrior charges across a frozen field. The sky splits with lightning."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Abyssal throne rising from volcanic glass", "scene": {"mood": "relentless", "colors": ["#0a0a0a", "#dc143c", "#4b0082"], "composition": "fortress silhouette", "camera": "extreme close-up", "description": "A volcanic throne made of obsidian. A figure sits, crowned in magma."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Ragnarok shaking the roots of the world", "scene": {"mood": "dark", "colors": ["#1c0000", "#ff2400", "#3d0000"], "composition": "chain link grid", "camera": "low angle power", "description": "The world tree splits apart. Fire rains from above. The ground cracks."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Crimson tide washing over the battlefield", "scene": {"mood": "furious", "colors": ["#000000", "#8b0000", "#ff6347"], "composition": "volcanic split", "camera": "speed ramp", "description": "A battlefield drowning in red. Waves of crimson crash against iron shields."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Forge of gods hammering the sky apart", "scene": {"mood": "monolithic", "colors": ["#0f0505", "#ff1a1a", "#4d0000"], "composition": "pyre cluster", "camera": "flash cuts", "description": "A massive forge in the sky. Gods hammer at the clouds. Sparks become stars."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Necropolis sprawling under a dead sun", "scene": {"mood": "primal", "colors": ["#050000", "#cc0000", "#1a1a1a"], "composition": "weapon spread", "camera": "smash zoom", "description": "A dead city of stone towers under a sun that gives no warmth. Silence."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Wrath eternal burning through the ages", "scene": {"mood": "brutal", "colors": ["#100000", "#ff3300", "#2a0a0a"], "composition": "colosseum wide", "camera": "aerial chaos", "description": "Eternal fire burning in a pit. Chains stretch from the darkness, pulled taut."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Doomsday engine grinding worlds to dust", "scene": {"mood": "epic", "colors": ["#080000", "#e60000", "#330000"], "composition": "avalanche descent", "camera": "tracking run", "description": "A machine the size of a mountain, grinding slowly. Gears made of bone."}}
|
||||
{"song": "Hellgate", "artist": "Inferno Legion", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Hellgate opening beneath a blood-red moon", "scene": {"mood": "chaotic", "colors": ["#0d0000", "#ff0033", "#1a001a"], "composition": "fracture pattern", "camera": "impact freeze", "description": "A gate of iron and bone opens. Beyond it, a landscape of ash and embers."}}
|
||||
@@ -1,100 +0,0 @@
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Velvet Hours", "artist": "Sienna Cole", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Candlelight", "artist": "The Midnight Sun", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Slow Burn", "artist": "Amara Devine", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Silk & Smoke", "artist": "Jasper Blue", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Moonlit", "artist": "Celeste Waters", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Warm Embrace", "artist": "Solomon Grey", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Midnight Rain", "artist": "Ivory Keys", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Golden Hour", "artist": "Soleil", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "After Hours", "artist": "Marcus Bell", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Velvet hours melting into candlelight", "scene": {"mood": "sensual", "colors": ["#2c1810", "#c9a87c", "#8b4513"], "composition": "centered portrait", "camera": "shallow depth", "description": "A room draped in velvet. Candles on every surface. Warm amber light fills the frame."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Your silhouette framed by the window glow", "scene": {"mood": "tender", "colors": ["#1a0f0a", "#d4a574", "#ff6b6b"], "composition": "soft vignette", "camera": "slow dolly", "description": "A silhouette in a window frame. Behind, city lights blur into bokeh. Warm tones dominate."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Slow burn igniting between two hearts", "scene": {"mood": "bittersweet", "colors": ["#2d1f1a", "#e8c39e", "#b8860b"], "composition": "duo framing", "camera": "close portrait", "description": "Two figures inches apart. The space between them glows with a warm, slow-burning light."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Silk and smoke weaving through the room", "scene": {"mood": "intimate", "colors": ["#1c1410", "#daa520", "#800020"], "composition": "curtain reveal", "camera": "soft focus", "description": "Silk curtains billowing. Smoke curling from an incense stick. A figure reclining on satin."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Moonlit whispers on the edge of sleep", "scene": {"mood": "warm", "colors": ["#2a1810", "#f0d9b5", "#cd853f"], "composition": "mirror reflection", "camera": "steady tripod", "description": "Moonlight pouring through sheer curtains onto an empty bed. Everything in silver and gold."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Warm embrace where the world fades away", "scene": {"mood": "longing", "colors": ["#180d08", "#deb887", "#a0522d"], "composition": "candle cluster", "camera": "gentle orbit", "description": "Two figures in a tight embrace, framed by a doorway. Warm light from within."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Midnight rain tapping on the rooftop slow", "scene": {"mood": "dreamy", "colors": ["#201510", "#f5deb3", "#d2691e"], "composition": "silhouette pair", "camera": "fade dissolve", "description": "Rain streaks down a window pane. Inside, a figure sits at a piano, lit by a single lamp."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Golden hour painting everything in honey", "scene": {"mood": "soulful", "colors": ["#1a1008", "#ffe4b5", "#b22222"], "composition": "intimate close-up", "camera": "warm filter", "description": "Everything washed in honey gold. A figure on a balcony overlooking a sun-drenched city."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "After hours, just your voice and mine", "scene": {"mood": "passionate", "colors": ["#251812", "#e6be8a", "#8b0000"], "composition": "bedroom wide", "camera": "golden hour", "description": "After midnight: a dim apartment, vinyl spinning on a turntable. Two glasses on a table."}}
|
||||
{"song": "Whisper", "artist": "Luna Shade", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Whisper soft enough to feel the words", "scene": {"mood": "serene", "colors": ["#1e120c", "#f4e1c1", "#cc5500"], "composition": "window light", "camera": "low light", "description": "A close-up of lips about to speak. The background dissolves into soft, warm bokeh."}}
|
||||
129
training/scripts/augment_pairs.py
Executable file
129
training/scripts/augment_pairs.py
Executable file
@@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
augment_pairs.py — Training data augmentation: paraphrase and translate.
|
||||
|
||||
Usage:
|
||||
python3 augment_pairs.py --input data.jsonl
|
||||
python3 augment_pairs.py --input data.jsonl --paraphrases 3 --langs es,fr,de
|
||||
python3 augment_pairs.py --input data.jsonl --llm-endpoint http://localhost:11434/v1
|
||||
"""
|
||||
|
||||
import json, os, sys, re, random
|
||||
from pathlib import Path
|
||||
|
||||
random.seed(42)
|
||||
|
||||
PARAPHRASE_TRANSFORMS = [
|
||||
lambda s: re.sub(r"(\w+), (\w+)", r"\2, \1", s, count=1),
|
||||
lambda s: f"A beautifully rendered scene: {s[0].lower()}{s[1:]}" if len(s) > 10 else s,
|
||||
lambda s: s.replace("A ", "The ").replace("An ", "The ") if s.startswith(("A ", "An ")) else f"Here, {s[0].lower()}{s[1:]}",
|
||||
lambda s: f"In a cinematic frame: {s}" if len(s) > 20 else s,
|
||||
lambda s: s if ", " not in s else ", ".join(s.split(", ")[:2]),
|
||||
]
|
||||
|
||||
TRANSLATIONS = {
|
||||
"es": {"the":"el","a":"un","is":"es","in":"en","of":"de","and":"y","with":"con","scene":"escena","light":"luz","dark":"oscuro","warm":"cálido","rain":"lluvia","sun":"sol","moon":"luna","sky":"cielo","forest":"bosque","mountain":"montaña","ocean":"océano","golden":"dorado","blue":"azul","red":"rojo","green":"verde","silence":"silencio","dream":"sueño","love":"amor","hope":"esperanza","fear":"miedo","joy":"alegría","peace":"paz","beautiful":"hermoso","sad":"triste","shadow":"sombra","color":"color","silver":"plateado","white":"blanco","black":"negro","portray":"retrato"},
|
||||
"fr": {"the":"le","a":"un","is":"est","in":"dans","of":"de","and":"et","with":"avec","scene":"scène","light":"lumière","dark":"sombre","warm":"chaud","rain":"pluie","sun":"soleil","moon":"lune","sky":"ciel","forest":"forêt","mountain":"montagne","ocean":"océan","golden":"doré","blue":"bleu","red":"rouge","green":"vert","silence":"silence","dream":"rêve","love":"amour","hope":"espoir","fear":"peur","joy":"joie","peace":"paix","beautiful":"beau","sad":"triste","shadow":"ombre","color":"couleur","silver":"argenté","white":"blanc","black":"noir"},
|
||||
"de": {"the":"der","a":"ein","is":"ist","in":"in","of":"von","and":"und","with":"mit","scene":"Szene","light":"Licht","dark":"dunkel","warm":"warm","rain":"Regen","sun":"Sonne","moon":"Mond","sky":"Himmel","forest":"Wald","mountain":"Berg","ocean":"Ozean","golden":"golden","blue":"blau","red":"rot","green":"grün","silence":"Stille","dream":"Traum","love":"Liebe","hope":"Hoffnung","fear":"Angst","joy":"Freude","peace":"Frieden","beautiful":"schön","sad":"traurig","shadow":"Schatten","color":"Farbe","silver":"silbern","white":"weiß","black":"schwarz"},
|
||||
}
|
||||
|
||||
LANG_NAMES = {"es": "Spanish", "fr": "French", "de": "German"}
|
||||
|
||||
|
||||
def detect_text_field(entry):
|
||||
for f in ["rich","terse","text","content","lyric_line","description","scene_description","prompt","scene"]:
|
||||
if f in entry and isinstance(entry[f], str) and len(entry[f]) > 5:
|
||||
return f
|
||||
for k, v in entry.items():
|
||||
if isinstance(v, str) and len(v) > 5:
|
||||
return k
|
||||
return None
|
||||
|
||||
|
||||
def paraphrase(text):
|
||||
t = random.choice(PARAPHRASE_TRANSFORMS)(text)
|
||||
if t == text:
|
||||
t = text.replace(" and ", " & ").replace(" with ", " alongside ")
|
||||
if t == text:
|
||||
t = f"In this scene: {text[0].lower()}{text[1:]}" if text[0].isupper() else text
|
||||
return t
|
||||
|
||||
|
||||
def translate(text, lang):
|
||||
d = TRANSLATIONS.get(lang, {})
|
||||
words = text.split()
|
||||
out = []
|
||||
for w in words:
|
||||
lo = w.lower().strip(".,;:!?")
|
||||
suf = w[len(w.rstrip(".,;:!?")):]
|
||||
if lo in d:
|
||||
out.append(d[lo] + suf)
|
||||
else:
|
||||
out.append(w)
|
||||
return " ".join(out)
|
||||
|
||||
|
||||
def augment_file(input_path, output_path=None, n_para=3, langs=None, llm_endpoint=None):
|
||||
input_path = Path(input_path)
|
||||
if output_path is None:
|
||||
output_path = input_path.parent / f"{input_path.stem}_augmented{input_path.suffix}"
|
||||
|
||||
entries = [json.loads(l) for l in open(input_path) if l.strip()]
|
||||
if not entries:
|
||||
print(f"No entries in {input_path}"); return 0
|
||||
|
||||
tf = detect_text_field(entries[0])
|
||||
if not tf:
|
||||
print(f"ERROR: No text field in {input_path}", file=sys.stderr); return 0
|
||||
|
||||
print(f"Input: {input_path} ({len(entries)} entries, field={tf})")
|
||||
|
||||
aug_count = 0
|
||||
with open(output_path, "w") as out:
|
||||
for e in entries:
|
||||
out.write(json.dumps(e, ensure_ascii=False) + "\n")
|
||||
for i, e in enumerate(entries):
|
||||
text = e[tf]
|
||||
# Paraphrases
|
||||
for p in range(n_para):
|
||||
para = paraphrase(text)
|
||||
if para != text:
|
||||
ne = dict(e); ne[tf] = para
|
||||
ne["_augmentation"] = f"paraphrase_{p+1}"
|
||||
ne["_original"] = text[:100]
|
||||
out.write(json.dumps(ne, ensure_ascii=False) + "\n")
|
||||
aug_count += 1
|
||||
# Translations
|
||||
for lang in (langs or []):
|
||||
tr = translate(text, lang)
|
||||
if tr != text:
|
||||
ne = dict(e); ne[tf] = tr
|
||||
ne["_augmentation"] = f"translate_{lang}"
|
||||
ne["_language"] = lang
|
||||
ne["_original"] = text[:100]
|
||||
out.write(json.dumps(ne, ensure_ascii=False) + "\n")
|
||||
aug_count += 1
|
||||
if (i+1) % 100 == 0:
|
||||
print(f" {i+1}/{len(entries)} done ({aug_count} augmented)")
|
||||
|
||||
total = len(entries) + aug_count
|
||||
print(f"Done: {len(entries)} originals + {aug_count} augmented = {total}")
|
||||
print(f"Output: {output_path}")
|
||||
return aug_count
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--input", required=True)
|
||||
p.add_argument("--output", default=None)
|
||||
p.add_argument("--paraphrases", type=int, default=3)
|
||||
p.add_argument("--langs", default="es,fr,de")
|
||||
p.add_argument("--llm-endpoint", default=None)
|
||||
args = p.parse_args()
|
||||
langs = [l.strip() for l in args.langs.split(",") if l.strip()] if args.langs else []
|
||||
augment_file(args.input, args.output, args.paraphrases, langs, args.llm_endpoint)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user