Compare commits

..

13 Commits

Author SHA1 Message Date
Alexander Whitestone
49296d538e feat: nightly pipeline scheduler — auto-start when inference available (#624)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 36s
PR Checklist / pr-checklist (pull_request) Failing after 6m56s
Smoke Test / smoke (pull_request) Failing after 34s
Validate Config / YAML Lint (pull_request) Failing after 21s
Validate Config / JSON Validate (pull_request) Successful in 9s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m40s
Validate Config / Shell Script Lint (pull_request) Failing after 48s
Validate Config / Cron Syntax Check (pull_request) Successful in 18s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 20s
Validate Config / Playbook Schema Validation (pull_request) Successful in 38s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
Scheduler that auto-starts batch pipelines when inference is available.

Features:
- Checks inference provider availability (local Ollama, RunPod, OpenRouter)
- Priority ordering: playground > training > knowledge > adversary > genome
- Dependency rules (e.g., knowledge_mine waits for training_factory)
- Daily token budget (5M default, configurable)
- Peak-hour pausing (8am-10pm = interactive mode, no pipelines)
- State persistence via ~/.hermes/pipeline_state.json
- One pipeline per cycle to avoid overload

Usage:
  python3 pipeline/nightly_scheduler.py --status
  python3 pipeline/nightly_scheduler.py --check      # dry-run
  python3 pipeline/nightly_scheduler.py              # live

Cron: */30 22-5 * * * pipeline/nightly_scheduler.py

Closes #624
2026-04-15 08:14:00 -04:00
817785d763 Merge pull request 'feat: training data augmentation — paraphrase and translate pairs (#695)' (#732) from fix/695 into main 2026-04-15 11:56:28 +00:00
Alexander Whitestone
3603030235 feat: training data augmentation — paraphrase and translate pairs (#695)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 22s
Smoke Test / smoke (pull_request) Failing after 18s
Validate Config / YAML Lint (pull_request) Failing after 23s
Validate Config / JSON Validate (pull_request) Successful in 21s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m54s
Validate Config / Shell Script Lint (pull_request) Failing after 54s
Validate Config / Cron Syntax Check (pull_request) Successful in 16s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 16s
Validate Config / Playbook Schema Validation (pull_request) Successful in 23s
PR Checklist / pr-checklist (pull_request) Failing after 11m2s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
augment_pairs.py: generates paraphrases and translations for any
JSONL training file.

Features:
- Auto-detects text field (rich, terse, text, content, lyric_line, etc.)
- N paraphrases per entry (template-based, or LLM with --llm-endpoint)
- Translations to ES, FR, DE (template dictionary, or LLM)
- Outputs augmented JSONL alongside originals
- Marks each augmented entry with _augmentation, _original, _language

Usage:
  python3 augment_pairs.py --input data.jsonl
  python3 augment_pairs.py --input data.jsonl --paraphrases 5 --langs es,fr
  python3 augment_pairs.py --input data.jsonl --llm-endpoint http://localhost:11434/v1

Closes #695
2026-04-15 07:51:38 -04:00
35a191f7b1 Merge PR #725: feat: Provider health monitor with auto-switch (#509) 2026-04-15 06:10:45 +00:00
e987e1b870 Merge PR #726: feat: Pre-flight provider check for session launch (#508) 2026-04-15 06:10:41 +00:00
19278513b4 Merge PR #727: feat: Three.js-specific glitch detection patterns (#543) 2026-04-15 06:10:38 +00:00
1088bf8983 test: add Three.js pattern tests and update assertions (#543)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 28s
Smoke Test / smoke (pull_request) Failing after 23s
Validate Config / YAML Lint (pull_request) Failing after 21s
Validate Config / JSON Validate (pull_request) Successful in 21s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m23s
Validate Config / Shell Script Lint (pull_request) Failing after 50s
Validate Config / Cron Syntax Check (pull_request) Successful in 11s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 26s
Validate Config / Playbook Schema Validation (pull_request) Successful in 32s
PR Checklist / pr-checklist (pull_request) Failing after 11m13s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
- Added TestThreeJsPatterns class with 14 tests
- Tests cover: pattern existence, severity inference, vision prompt
- Updated pattern count assertion (14+ patterns now)
- Updated demo test (6 glitches: 4 original + 2 Three.js)
2026-04-15 05:37:17 +00:00
94f0a132d4 feat: add get_threejs_patterns() filter function (#543) 2026-04-15 05:34:17 +00:00
279356bed6 feat: add --threejs flag and Three.js-aware severity inference (#543)
- Added --threejs flag for focused Three.js pattern scanning
- Updated _infer_severity with shader_failure, texture_placeholder,
  uv_mapping_error, frustum_culling, shadow_map_artifact categories
- Added Three.js demo detections (shader failure, shadow map)
- Bumped detector version to 0.2.0
2026-04-15 05:34:16 +00:00
511ff863c2 feat: add Three.js-specific glitch detection patterns (#543)
Adds 6 new Three.js-specific glitch categories and patterns:
- SHADER_FAILURE: Solid black materials from shader compilation errors
- TEXTURE_PLACEHOLDER: 1x1 white pixel stretched surfaces
- UV_MAPPING_ERROR: BufferGeometry UV coordinate errors
- FRUSTUM_CULLING: Objects popping at screen edges
- SHADOW_MAP_ARTIFACT: Pixelated/blocky shadow maps
- BLOOM_OVERFLOW: Excessive post-processing bloom bleed

Closes #543
2026-04-15 05:32:25 +00:00
b6e3a647b0 feat: add pre-flight provider check script (#508)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 29s
PR Checklist / pr-checklist (pull_request) Failing after 7m23s
Smoke Test / smoke (pull_request) Failing after 20s
Validate Config / YAML Lint (pull_request) Failing after 14s
Validate Config / JSON Validate (pull_request) Successful in 15s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m1s
Validate Config / Shell Script Lint (pull_request) Failing after 46s
Validate Config / Cron Syntax Check (pull_request) Successful in 9s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 10s
Validate Config / Playbook Schema Validation (pull_request) Successful in 28s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
- Checks OpenRouter balance via /api/v1/auth/key
- Tests Nous and Anthropic API keys
- Verifies Ollama is running
- Pre-flight check before session launch
- Returns exit code for automation

Closes #508
2026-04-15 03:55:04 +00:00
e14158676d feat: add provider health monitor script (#509)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 44s
Smoke Test / smoke (pull_request) Failing after 36s
Validate Config / YAML Lint (pull_request) Failing after 21s
Validate Config / JSON Validate (pull_request) Successful in 28s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 2m36s
Validate Config / Shell Script Lint (pull_request) Failing after 1m3s
Validate Config / Cron Syntax Check (pull_request) Successful in 13s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 12s
PR Checklist / pr-checklist (pull_request) Failing after 6m15s
Validate Config / Playbook Schema Validation (pull_request) Successful in 28s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
- Tests all configured providers
- Maintains health map in tmux-state.json
- Auto-switches profiles to working providers
- Supports --daemon and --status modes

Closes #509
2026-04-15 03:48:37 +00:00
26e39d8949 feat: add autonomous cron supervisor job (#513)
- Runs every 7 minutes
- Checks dev and timmy sessions
- Loads tmux-supervisor skill
- Telegram only on actionable events
- Silent when all agents busy
2026-04-15 03:33:43 +00:00
16 changed files with 1459 additions and 809 deletions

View File

@@ -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")

View File

@@ -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)...")

View 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()

View 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()

View File

@@ -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
View 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()

View File

@@ -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()

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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."}}

View File

@@ -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
View 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()