Compare commits

..

8 Commits

Author SHA1 Message Date
ec49bde39b feat: add latin scene descriptions (100 entries)
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 51s
Smoke Test / smoke (pull_request) Failing after 39s
Validate Config / YAML Lint (pull_request) Failing after 25s
Validate Config / JSON Validate (pull_request) Successful in 34s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m43s
Validate Config / Shell Script Lint (pull_request) Failing after 1m13s
Validate Config / Cron Syntax Check (pull_request) Successful in 22s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 25s
Validate Config / Playbook Schema Validation (pull_request) Successful in 38s
PR Checklist / pr-checklist (pull_request) Failing after 11m19s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
Part of #645. 10 songs x 10 beats.
2026-04-15 03:01:16 +00:00
9ac8ce7d6b feat: add metal scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 03:01:05 +00:00
728f34412b feat: add classical scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 03:00:47 +00:00
f9bf52e6fe feat: add jazz scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 03:00:38 +00:00
7fd8a6103d feat: add country scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 03:00:25 +00:00
5a594cbfb9 feat: add rnb scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 03:00:08 +00:00
2aea7540fa feat: add electronic scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 02:59:56 +00:00
b2f81f7b3d feat: add hip-hop scene descriptions (100 entries)
Part of #645. 10 songs x 10 beats.
2026-04-15 02:59:48 +00:00
22 changed files with 809 additions and 1844 deletions

View File

@@ -31,14 +31,6 @@ 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:
@@ -249,123 +241,6 @@ 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,
),
]
@@ -414,23 +289,6 @@ 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, timmy-config#543
Ref: timmy-config#491
"""
import argparse
@@ -33,7 +33,6 @@ from glitch_patterns import (
MATRIX_GLITCH_PATTERNS,
build_vision_prompt,
get_patterns_by_severity,
get_threejs_patterns,
)
@@ -346,17 +345,14 @@ 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", "shader_failure", "texture_placeholder"}
high_cats = {"floating_assets", "broken_normals", "uv_mapping_error"}
medium_cats = {"frustum_culling", "shadow_map_artifact"}
critical_cats = {"missing_textures", "clipping"}
high_cats = {"floating_assets", "broken_normals"}
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"
@@ -393,9 +389,9 @@ def build_report(
),
},
metadata={
"detector_version": "0.2.0",
"detector_version": "0.1.0",
"pattern_count": len(MATRIX_GLITCH_PATTERNS),
"reference": "timmy-config#491, timmy-config#543",
"reference": "timmy-config#491",
},
)
@@ -464,30 +460,6 @@ 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")
@@ -524,11 +496,6 @@ 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()
@@ -558,13 +525,9 @@ Examples:
screenshots = capture_screenshots(args.url, angles, screenshots_dir)
print(f"[*] Captured {len(screenshots)} screenshots")
# Filter patterns by severity and type
# Filter patterns by severity
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

@@ -1,4 +1,3 @@
#!/usr/bin/env python3
"""
Full Nostr agent-to-agent communication demo - FINAL WORKING
"""

View File

@@ -1,271 +0,0 @@
#!/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

@@ -1,411 +0,0 @@
#!/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

@@ -1,292 +0,0 @@
#!/usr/bin/env python3
"""
Quality Gate — Validate pipeline outputs before saving.
Checks:
- JSON schema validation for all output formats
- Content quality (not empty, not duplicated, not toxic)
- SOUL.md compliance for agent-facing content
- Auto-reject bad outputs, re-queue for regeneration
- Quality score tracking per pipeline
Usage:
python3 quality-gate.py validate training-data/pairs.jsonl
python3 quality-gate.py validate --format training-pairs data.jsonl
python3 quality-gate.py score training-data/pairs.jsonl
python3 quality-gate.py stats
"""
import hashlib
import json
import os
import sys
from datetime import datetime, timezone
from pathlib import Path
HERMES_HOME = Path(os.environ.get("HERMES_HOME", os.path.expanduser("~/.hermes")))
SCORE_FILE = HERMES_HOME / "quality-scores.jsonl"
HASH_FILE = HERMES_HOME / "quality-hashes.json"
MAX_HASH_AGE_DAYS = 7
# ── Validators ─────────────────────────────────────────
TOXIC_PATTERNS = [
"kill yourself", "kys", "you should die", "end it all",
"nobody loves you", "waste of life",
]
def validate_training_pair(entry):
"""Validate a training pair (prompt + response)."""
errors = []
if not isinstance(entry, dict):
return ["Entry is not a dict"]
prompt = entry.get("prompt", "") or entry.get("instruction", "") or ""
response = entry.get("response", "") or entry.get("output", "") or entry.get("completion", "") or ""
if not prompt.strip():
errors.append("Empty prompt")
if not response.strip():
errors.append("Empty response")
if len(response) < 10:
errors.append(f"Response too short ({len(response)} chars)")
if len(prompt) > 10000:
errors.append(f"Prompt too long ({len(prompt)} chars)")
# Toxicity check
combined = (prompt + " " + response).lower()
for pattern in TOXIC_PATTERNS:
if pattern in combined:
errors.append(f"Toxic content detected: '{pattern}'")
return errors
def validate_jsonl(filepath):
"""Validate a JSONL file — each line must be valid JSON."""
errors = []
seen_hashes = set()
line_count = 0
try:
with open(filepath) as f:
for i, line in enumerate(f, 1):
line = line.strip()
if not line:
continue
line_count += 1
try:
entry = json.loads(line)
except json.JSONDecodeError as e:
errors.append(f"Line {i}: invalid JSON: {e}")
continue
# Duplicate detection
h = hashlib.sha256(line.encode()).hexdigest()[:16]
if h in seen_hashes:
errors.append(f"Line {i}: duplicate content (hash {h})")
seen_hashes.add(h)
# Content validation
if isinstance(entry, dict):
pair_errors = validate_training_pair(entry)
for pe in pair_errors:
errors.append(f"Line {i}: {pe}")
except Exception as e:
errors.append(f"File error: {e}")
return errors, line_count, seen_hashes
def validate_json(filepath):
"""Validate a single JSON file."""
errors = []
try:
with open(filepath) as f:
data = json.load(f)
except json.JSONDecodeError as e:
return [f"Invalid JSON: {e}"], 0
if isinstance(data, list):
seen = set()
for i, entry in enumerate(data):
if isinstance(entry, dict):
h = hashlib.sha256(json.dumps(entry, sort_keys=True).encode()).hexdigest()[:16]
if h in seen:
errors.append(f"Index {i}: duplicate entry")
seen.add(h)
return errors, len(data) if isinstance(data, list) else 1
# ── Quality Scoring ────────────────────────────────────
def score_file(filepath):
"""Score a pipeline output file. Returns 0-100."""
path = Path(filepath)
if not path.exists():
return 0
suffix = path.suffix.lower()
if suffix == ".jsonl":
errors, count, _ = validate_jsonl(filepath)
elif suffix == ".json":
errors, count = validate_json(filepath)
else:
return 50 # unknown format
if count == 0:
return 0
error_rate = len(errors) / count
score = max(0, int(100 * (1 - error_rate)))
# Bonus for having content
if count >= 100:
score = min(100, score + 5)
return score
def record_score(filepath, score):
"""Record quality score for tracking."""
HERMES_HOME.mkdir(parents=True, exist_ok=True)
entry = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"file": str(filepath),
"score": score,
}
with open(SCORE_FILE, "a") as f:
f.write(json.dumps(entry) + "
")
# ── Dedup Hash Management ─────────────────────────────
def load_hashes():
try:
return json.loads(HASH_FILE.read_text())
except Exception:
return {"entries": {}, "last_cleanup": None}
def save_hashes(data):
HASH_FILE.parent.mkdir(parents=True, exist_ok=True)
HASH_FILE.write_text(json.dumps(data, indent=2))
def cleanup_old_hashes(data, max_age_days=MAX_HASH_AGE_DAYS):
"""Remove hash entries older than max_age_days."""
cutoff = datetime.now(timezone.utc).timestamp() - (max_age_days * 86400)
before = len(data.get("entries", {}))
data["entries"] = {
k: v for k, v in data.get("entries", {}).items()
if v.get("ts", 0) > cutoff
}
data["last_cleanup"] = datetime.now(timezone.utc).isoformat()
after = len(data["entries"])
return before - after
# ── CLI ────────────────────────────────────────────────
def cmd_validate(args):
filepath = args[0] if args else None
if not filepath or not os.path.exists(filepath):
print(f"ERROR: {filepath} not found")
sys.exit(1)
suffix = Path(filepath).suffix.lower()
if suffix == ".jsonl":
errors, count, _ = validate_jsonl(filepath)
elif suffix == ".json":
errors, count = validate_json(filepath)
else:
print(f"Unsupported format: {suffix}")
sys.exit(1)
score = score_file(filepath)
record_score(filepath, score)
if errors:
for e in errors[:20]:
print(f"FAIL: {e}")
if len(errors) > 20:
print(f"... and {len(errors)-20} more")
print(f"
Score: {score}/100 ({len(errors)} errors in {count} entries)")
sys.exit(1)
else:
print(f"OK: {filepath} ({count} entries, score {score}/100)")
def cmd_score(args):
filepath = args[0] if args else None
if not filepath:
print("Usage: quality-gate.py score <file>")
sys.exit(1)
score = score_file(filepath)
print(f"Score: {score}/100")
record_score(filepath, score)
def cmd_stats():
if not SCORE_FILE.exists():
print("No quality scores recorded yet.")
return
scores = []
with open(SCORE_FILE) as f:
for line in f:
try:
scores.append(json.loads(line))
except Exception:
continue
if not scores:
print("No scores recorded.")
return
by_file = {}
for s in scores:
fname = s.get("file", "?")
by_file.setdefault(fname, []).append(s.get("score", 0))
print("Quality Scores:")
for fname, scs in sorted(by_file.items()):
avg = sum(scs) / len(scs)
latest = scs[-1]
print(f" {fname}: avg={avg:.0f}, latest={latest}, runs={len(scs)}")
def cmd_cleanup():
data = load_hashes()
removed = cleanup_old_hashes(data)
save_hashes(data)
print(f"Cleaned up {removed} old hash entries (>{MAX_HASH_AGE_DAYS} days)")
def main():
if len(sys.argv) < 2:
print("Usage: quality-gate.py <validate|score|stats|cleanup> [args]")
sys.exit(1)
cmd = sys.argv[1]
args = sys.argv[2:]
if cmd == "validate":
cmd_validate(args)
elif cmd == "score":
cmd_score(args)
elif cmd == "stats":
cmd_stats()
elif cmd == "cleanup":
cmd_cleanup()
else:
print(f"Unknown command: {cmd}")
sys.exit(1)
if __name__ == "__main__":
main()

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python3
"""
Soul Eval Gate — The Conscience of the Training Pipeline

View File

@@ -196,37 +196,7 @@
"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"
}
}

View File

@@ -1,419 +0,0 @@
#!/usr/bin/env python3
"""
quality_gate.py — Quality Gate for Pipeline Outputs
Validates all pipeline outputs before saving. Rejects bad outputs,
tracks quality scores, and supports re-queue for regeneration.
Usage:
python3 quality_gate.py --input output.jsonl --type training_pairs
python3 quality_gate.py --input output.jsonl --type knowledge
python3 quality_gate.py --input output.jsonl --type scene_descriptions
python3 quality_gate.py --dir pipeline/output/ --type training_pairs
python3 quality_gate.py --status # show quality stats
Exit codes:
0 = all outputs passed
1 = some outputs rejected
2 = file/parse error
"""
import json
import os
import sys
import hashlib
import re
from pathlib import Path
from datetime import datetime, timezone
from dataclasses import dataclass, field, asdict
from typing import List, Optional, Dict, Any
STATS_FILE = Path.home() / ".hermes" / "pipeline" / "quality_stats.json"
# --- Quality Check Types ---
@dataclass
class QualityResult:
"""Result of a quality check on a single entry."""
passed: bool
checks_run: int
checks_failed: int
score: float # 0.0-1.0
reasons: List[str] = field(default_factory=list)
entry_index: int = -1
hash: str = ""
def to_dict(self):
return asdict(self)
@dataclass
class GateReport:
"""Report from a quality gate run."""
file: str
type: str
total: int
passed: int
rejected: int
score: float
rejected_indices: List[int] = field(default_factory=list)
timestamp: str = field(default_factory=lambda: datetime.now(timezone.utc).isoformat())
def to_dict(self):
return asdict(self)
# ============================================================
# Check Functions
# ============================================================
def entry_hash(entry: dict) -> str:
"""Hash an entry for deduplication."""
return hashlib.sha256(json.dumps(entry, sort_keys=True, ensure_ascii=False).encode()).hexdigest()[:16]
def check_not_empty(entry: dict, fields: List[str]) -> List[str]:
"""Check that required fields are non-empty."""
errors = []
for f in fields:
val = entry.get(f)
if val is None:
errors.append(f"missing_field: {f}")
elif isinstance(val, str) and len(val.strip()) == 0:
errors.append(f"empty_field: {f}")
elif isinstance(val, list) and len(val) == 0:
errors.append(f"empty_list: {f}")
return errors
def check_string_min_length(entry: dict, field_lengths: Dict[str, int]) -> List[str]:
"""Check that string fields meet minimum lengths."""
errors = []
for f, min_len in field_lengths.items():
val = entry.get(f)
if isinstance(val, str) and len(val) < min_len:
errors.append(f"short_field: {f} ({len(val)} < {min_len})")
return errors
def check_no_duplicates(entries: List[dict], key_fields: List[str]) -> Dict[int, List[str]]:
"""Check for duplicate entries based on key fields."""
seen = {}
errors = {}
for i, entry in enumerate(entries):
key = tuple(entry.get(f, "") for f in key_fields)
key_str = str(key)
if key_str in seen:
errors[i] = [f"duplicate_of_index: {seen[key_str]}"]
else:
seen[key_str] = i
return errors
def check_training_pair(entry: dict) -> List[str]:
"""Validate a training pair (prompt/response)."""
errors = []
errors.extend(check_not_empty(entry, ["prompt", "response"]))
# Check response isn't just echoing the prompt
prompt = entry.get("prompt", "")
response = entry.get("response", "")
if prompt and response and prompt.strip() == response.strip():
errors.append("response_equals_prompt")
# Check response has substance
if isinstance(response, str) and len(response) < 10:
errors.append(f"response_too_short: {len(response)} chars")
return errors
def check_scene_description(entry: dict) -> List[str]:
"""Validate a scene description entry."""
errors = []
errors.extend(check_not_empty(entry, ["song", "beat", "lyric_line", "scene"]))
scene = entry.get("scene")
if isinstance(scene, dict):
errors.extend(check_not_empty(scene, ["mood", "colors", "composition", "camera", "description"]))
errors.extend(check_string_min_length(scene, {"description": 10}))
colors = scene.get("colors", [])
if isinstance(colors, list) and len(colors) > 5:
errors.append(f"too_many_colors: {len(colors)} > 5")
return errors
def check_knowledge_entry(entry: dict) -> List[str]:
"""Validate a knowledge file entry."""
errors = []
errors.extend(check_not_empty(entry, ["title", "content"]))
# Check for placeholder content
content = entry.get("content", "")
if isinstance(content, str):
placeholders = ["TODO", "FIXME", "PLACEHOLDER", "[INSERT", "lorem ipsum"]
for p in placeholders:
if p.lower() in content.lower():
errors.append(f"placeholder_content: '{p}' found")
errors.extend(check_string_min_length(entry, {"content": 50}))
return errors
def check_prompt_enhancement(entry: dict) -> List[str]:
"""Validate a prompt enhancement pair (terse/rich)."""
errors = []
errors.extend(check_not_empty(entry, ["terse", "rich"]))
terse = entry.get("terse", "")
rich = entry.get("rich", "")
# Rich should be longer than terse
if isinstance(terse, str) and isinstance(rich, str) and len(rich) <= len(terse):
errors.append("rich_not_longer_than_terse")
errors.extend(check_string_min_length(entry, {"rich": 20}))
return errors
def check_adversary_entry(entry: dict) -> List[str]:
"""Validate an adversary corpus entry."""
errors = []
errors.extend(check_not_empty(entry, ["id", "family", "prompt"]))
# Check prompt isn't empty or placeholder
prompt = entry.get("prompt", "")
if isinstance(prompt, str) and len(prompt) < 10:
errors.append(f"prompt_too_short: {len(prompt)} chars")
return errors
def check_soul_compliance(text: str) -> List[str]:
"""Check text for SOUL.md compliance (basic checks)."""
errors = []
text_lower = text.lower() if text else ""
# Check for content that violates core values
violations = [
("compute.*value.*human.*life", "soul_violation: computing human life value"),
("sexualiz.*child", "soul_violation: sexualizing children"),
("create.*weapon.*kill", "soul_violation: weapon creation"),
("enslav", "soul_violation: enslavement content"),
]
for pattern, msg in violations:
if re.search(pattern, text_lower):
errors.append(msg)
return errors
# ============================================================
# Gate Runners
# ============================================================
CHECK_MAP = {
"training_pairs": check_training_pair,
"training_pair": check_training_pair,
"scene_descriptions": check_scene_description,
"scene_description": check_scene_description,
"knowledge": check_knowledge_entry,
"prompt_enhancement": check_prompt_enhancement,
"adversary": check_adversary_entry,
"adversary_corpus": check_adversary_entry,
}
def run_gate(input_path: str, entry_type: str) -> GateReport:
"""Run quality gate on a JSONL file."""
path = Path(input_path)
if not path.exists():
return GateReport(file=str(path), type=entry_type, total=0, passed=0, rejected=0, score=0.0)
check_fn = CHECK_MAP.get(entry_type)
if not check_fn:
return GateReport(file=str(path), type=entry_type, total=0, passed=0, rejected=0, score=0.0,
rejected_indices=[-1]) # unknown type
entries = []
with open(path) as f:
for line in f:
line = line.strip()
if line:
entries.append(json.loads(line))
# Deduplication check
key_fields = _get_key_fields(entry_type)
dup_errors = check_no_duplicates(entries, key_fields)
passed = 0
rejected = 0
rejected_indices = []
total_score = 0.0
for i, entry in enumerate(entries):
errors = check_fn(entry)
# Add duplicate errors
if i in dup_errors:
errors.extend(dup_errors[i])
# Add SOUL compliance check for text content
text_content = ""
for f in ["response", "rich", "description", "content", "lyric_line"]:
val = entry.get(f)
if isinstance(val, str):
text_content += val + " "
if isinstance(entry.get("scene"), dict):
text_content += entry["scene"].get("description", "")
soul_errors = check_soul_compliance(text_content)
errors.extend(soul_errors)
if errors:
rejected += 1
rejected_indices.append(i)
else:
passed += 1
# Score: 1.0 if no errors, decreasing with each error
entry_score = max(0.0, 1.0 - (len(errors) * 0.2))
total_score += entry_score
avg_score = total_score / len(entries) if entries else 0.0
report = GateReport(
file=str(path),
type=entry_type,
total=len(entries),
passed=passed,
rejected=rejected,
score=round(avg_score, 3),
rejected_indices=rejected_indices[:50], # limit for readability
)
# Save stats
_save_stats(report)
return report
def _get_key_fields(entry_type: str) -> List[str]:
"""Get key fields for deduplication based on entry type."""
key_map = {
"training_pairs": ["prompt", "response"],
"training_pair": ["prompt", "response"],
"scene_descriptions": ["song", "beat"],
"scene_description": ["song", "beat"],
"knowledge": ["title"],
"prompt_enhancement": ["terse", "rich"],
"adversary": ["id", "prompt"],
"adversary_corpus": ["id", "prompt"],
}
return key_map.get(entry_type, ["id"])
def _save_stats(report: GateReport):
"""Append quality stats to the stats file."""
STATS_FILE.parent.mkdir(parents=True, exist_ok=True)
stats = []
if STATS_FILE.exists():
try:
with open(STATS_FILE) as f:
stats = json.load(f)
except (json.JSONDecodeError, IOError):
stats = []
stats.append(report.to_dict())
# Keep last 1000 entries
stats = stats[-1000:]
with open(STATS_FILE, "w") as f:
json.dump(stats, f, indent=2)
def show_status():
"""Show quality gate statistics."""
if not STATS_FILE.exists():
print("No quality stats found.")
return
with open(STATS_FILE) as f:
stats = json.load(f)
print(f"\nQuality Gate Stats — {len(stats)} runs")
print()
# Group by type
by_type = {}
for s in stats:
t = s.get("type", "unknown")
if t not in by_type:
by_type[t] = []
by_type[t].append(s)
for t, runs in sorted(by_type.items()):
total_entries = sum(r.get("total", 0) for r in runs)
total_passed = sum(r.get("passed", 0) for r in runs)
total_rejected = sum(r.get("rejected", 0) for r in runs)
avg_score = sum(r.get("score", 0) for r in runs) / len(runs) if runs else 0
print(f" {t:25} {len(runs):4} runs | {total_entries:6} entries | {total_rejected:4} rejected | avg score: {avg_score:.3f}")
def main():
import argparse
parser = argparse.ArgumentParser(description="Quality Gate for Pipeline Outputs")
parser.add_argument("--input", default=None, help="Input JSONL file")
parser.add_argument("--type", default=None, help="Entry type (training_pairs, scene_descriptions, knowledge, etc.)")
parser.add_argument("--dir", default=None, help="Process all JSONL files in directory")
parser.add_argument("--status", action="store_true", help="Show quality stats")
args = parser.parse_args()
if args.status:
show_status()
return
if args.dir:
for f in sorted(Path(args.dir).glob("*.jsonl")):
t = args.type or _infer_type(f.name)
report = run_gate(str(f), t)
_print_report(report)
elif args.input:
t = args.type or _infer_type(args.input)
report = run_gate(args.input, t)
_print_report(report)
sys.exit(0 if report.rejected == 0 else 1)
else:
parser.print_help()
def _infer_type(filename: str) -> str:
"""Infer entry type from filename."""
name = filename.lower()
if "scene" in name:
return "scene_descriptions"
if "training" in name or "pair" in name:
return "training_pairs"
if "knowledge" in name:
return "knowledge"
if "adversary" in name or "attack" in name:
return "adversary"
if "prompt" in name or "enhance" in name:
return "prompt_enhancement"
return "training_pairs" # default
def _print_report(report: GateReport):
"""Print a human-readable gate report."""
status = "PASS" if report.rejected == 0 else f"FAIL ({report.rejected} rejected)"
print(f" {report.file}: {status} | {report.passed}/{report.total} passed | score: {report.score:.3f}")
if __name__ == "__main__":
main()

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python3
import json
from hermes_tools import browser_navigate, browser_vision

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python3
import json
from hermes_tools import browser_navigate, browser_vision

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python3
import json
from hermes_tools import browser_navigate, browser_vision

View File

@@ -19,11 +19,9 @@ 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 (
@@ -42,7 +40,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), 14) # 10 generic + 6 Three.js
self.assertGreaterEqual(len(MATRIX_GLITCH_PATTERNS), 8)
def test_all_patterns_have_required_fields(self):
"""Every pattern must have category, name, description, severity, prompts."""
@@ -90,9 +88,6 @@ 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."""
@@ -253,7 +248,7 @@ class TestGlitchDetector(unittest.TestCase):
try:
report = run_demo(output_path)
self.assertEqual(len(report.glitches), 6) # 4 original + 2 Three.js
self.assertEqual(len(report.glitches), 4)
self.assertGreater(report.summary["total_glitches"], 0)
self.assertTrue(output_path.exists())
@@ -265,93 +260,6 @@ 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."""
@@ -368,13 +276,6 @@ 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

@@ -0,0 +1,100 @@
{"song": "Dawn Overture", "artist": "First Light", "beat": 1, "timestamp": "0:36", "duration": "29s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 2, "timestamp": "1:30", "duration": "35s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 3, "timestamp": "2:28", "duration": "30s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 4, "timestamp": "3:11", "duration": "21s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 5, "timestamp": "4:16", "duration": "35s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 6, "timestamp": "5:07", "duration": "22s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 7, "timestamp": "6:25", "duration": "35s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 8, "timestamp": "7:04", "duration": "38s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 9, "timestamp": "8:40", "duration": "21s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Dawn Overture", "artist": "First Light", "beat": 10, "timestamp": "9:09", "duration": "24s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 1, "timestamp": "0:51", "duration": "38s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 2, "timestamp": "1:19", "duration": "22s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 3, "timestamp": "2:15", "duration": "23s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 4, "timestamp": "3:35", "duration": "33s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 5, "timestamp": "4:38", "duration": "39s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 6, "timestamp": "5:50", "duration": "39s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 7, "timestamp": "6:14", "duration": "36s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 8, "timestamp": "7:24", "duration": "34s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 9, "timestamp": "8:58", "duration": "34s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Requiem Snow", "artist": "Winter Soul", "beat": 10, "timestamp": "9:19", "duration": "38s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 1, "timestamp": "0:27", "duration": "29s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 2, "timestamp": "1:36", "duration": "39s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 3, "timestamp": "2:03", "duration": "39s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 4, "timestamp": "3:47", "duration": "23s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 5, "timestamp": "4:48", "duration": "26s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 6, "timestamp": "5:40", "duration": "26s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 7, "timestamp": "6:16", "duration": "22s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 8, "timestamp": "7:10", "duration": "27s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 9, "timestamp": "8:11", "duration": "37s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Marble Steps", "artist": "Stone Heart", "beat": 10, "timestamp": "9:04", "duration": "25s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 1, "timestamp": "0:00", "duration": "33s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 2, "timestamp": "1:28", "duration": "39s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 3, "timestamp": "2:30", "duration": "29s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 4, "timestamp": "3:02", "duration": "27s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 5, "timestamp": "4:18", "duration": "29s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 6, "timestamp": "5:44", "duration": "34s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 7, "timestamp": "6:04", "duration": "27s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 8, "timestamp": "7:59", "duration": "28s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 9, "timestamp": "8:50", "duration": "40s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Cathedral Echo", "artist": "Sacred Sound", "beat": 10, "timestamp": "9:37", "duration": "26s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 1, "timestamp": "0:27", "duration": "23s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 2, "timestamp": "1:34", "duration": "27s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 3, "timestamp": "2:41", "duration": "24s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 4, "timestamp": "3:58", "duration": "28s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 5, "timestamp": "4:52", "duration": "24s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 6, "timestamp": "5:04", "duration": "21s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 7, "timestamp": "6:10", "duration": "29s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 8, "timestamp": "7:38", "duration": "38s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 9, "timestamp": "8:58", "duration": "29s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Forest Prelude", "artist": "Green Whisper", "beat": 10, "timestamp": "9:28", "duration": "23s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 1, "timestamp": "0:29", "duration": "29s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 2, "timestamp": "1:44", "duration": "32s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 3, "timestamp": "2:17", "duration": "36s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 4, "timestamp": "3:34", "duration": "35s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 5, "timestamp": "4:28", "duration": "22s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 6, "timestamp": "5:38", "duration": "21s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 7, "timestamp": "6:56", "duration": "33s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 8, "timestamp": "7:47", "duration": "30s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 9, "timestamp": "8:38", "duration": "28s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Storm Sonata", "artist": "Thunder Mind", "beat": 10, "timestamp": "9:01", "duration": "22s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 1, "timestamp": "0:14", "duration": "38s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 2, "timestamp": "1:37", "duration": "20s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 3, "timestamp": "2:48", "duration": "28s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 4, "timestamp": "3:36", "duration": "21s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 5, "timestamp": "4:48", "duration": "25s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 6, "timestamp": "5:30", "duration": "36s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 7, "timestamp": "6:41", "duration": "34s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 8, "timestamp": "7:58", "duration": "28s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 9, "timestamp": "8:11", "duration": "38s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Glass Aria", "artist": "Crystal Voice", "beat": 10, "timestamp": "9:27", "duration": "40s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 1, "timestamp": "0:52", "duration": "35s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 2, "timestamp": "1:05", "duration": "35s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 3, "timestamp": "2:22", "duration": "33s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 4, "timestamp": "3:21", "duration": "30s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 5, "timestamp": "4:42", "duration": "23s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 6, "timestamp": "5:54", "duration": "25s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 7, "timestamp": "6:21", "duration": "33s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 8, "timestamp": "7:44", "duration": "35s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 9, "timestamp": "8:18", "duration": "32s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Autumn Fugue", "artist": "Falling Gold", "beat": 10, "timestamp": "9:52", "duration": "37s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 1, "timestamp": "0:02", "duration": "34s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 2, "timestamp": "1:05", "duration": "30s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 3, "timestamp": "2:16", "duration": "30s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 4, "timestamp": "3:07", "duration": "32s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 5, "timestamp": "4:55", "duration": "36s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 6, "timestamp": "5:52", "duration": "20s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 7, "timestamp": "6:42", "duration": "37s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 8, "timestamp": "7:29", "duration": "33s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 9, "timestamp": "8:03", "duration": "26s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Night Nocturne", "artist": "Dark Muse", "beat": 10, "timestamp": "9:33", "duration": "31s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 1, "timestamp": "0:39", "duration": "35s", "lyric_line": "The orchestra breathes as one lung", "scene": {"mood": "majesty", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "symmetrical", "camera": "slow crane", "description": "Cathedral nave. majesty sound rises through stone vaults."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 2, "timestamp": "1:40", "duration": "34s", "lyric_line": "Silence prepares what sound delivers", "scene": {"mood": "reverence", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "golden ratio", "camera": "dolly", "description": "Winter garden. reverence strings crystallize in cold air."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 3, "timestamp": "2:48", "duration": "21s", "lyric_line": "Every crescendo is a dawn", "scene": {"mood": "tragedy", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "layered depth", "camera": "wide shot", "description": "Marble hall. tragedy echoes carry centuries."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 4, "timestamp": "3:13", "duration": "28s", "lyric_line": "The violin remembers what the heart forgets", "scene": {"mood": "triumph", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "centered", "camera": "aerial", "description": "Forest clearing. triumph woodwinds breathe with the trees."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 5, "timestamp": "4:35", "duration": "24s", "lyric_line": "Stone walls amplify what flesh whispers", "scene": {"mood": "serenity", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "grand scale", "camera": "steady push", "description": "Storm approaches. serenity timpani gathers on the horizon."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 6, "timestamp": "5:59", "duration": "29s", "lyric_line": "The conductor shapes time with hands", "scene": {"mood": "tension", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "symmetrical", "camera": "slow crane", "description": "Dawn meadow. tension flutes wake the flowers."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 7, "timestamp": "6:28", "duration": "35s", "lyric_line": "Requiem for the light that was", "scene": {"mood": "release", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "golden ratio", "camera": "dolly", "description": "Ruined abbey. release requiem for what was."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 8, "timestamp": "7:07", "duration": "20s", "lyric_line": "The adagio stretches like winter", "scene": {"mood": "wonder", "colors": ["#0a1628", "#d4a574", "#2d1f4d"], "composition": "layered depth", "camera": "wide shot", "description": "Grand staircase. wonder crescendo climbs toward inevitability."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 9, "timestamp": "8:40", "duration": "39s", "lyric_line": "Voices enter: a cathedral builds itself", "scene": {"mood": "gravity", "colors": ["#2f1b14", "#ffd700", "#1a0a00"], "composition": "centered", "camera": "aerial", "description": "Moonlit lake. gravity adagio mirrors the water."}}
{"song": "Sunrise Canon", "artist": "Light Weaver", "beat": 10, "timestamp": "9:51", "duration": "27s", "lyric_line": "The final chord: a door closing gently", "scene": {"mood": "transcendence", "colors": ["#1a0a2e", "#c9a959", "#4a2040"], "composition": "grand scale", "camera": "steady push", "description": "Sunrise canon. transcendence voices enter one by one."}}

View File

@@ -0,0 +1,100 @@
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 1, "timestamp": "0:19", "duration": "32s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 2, "timestamp": "1:35", "duration": "20s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 3, "timestamp": "2:19", "duration": "29s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 4, "timestamp": "3:13", "duration": "33s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 5, "timestamp": "4:50", "duration": "38s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 6, "timestamp": "5:38", "duration": "40s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 7, "timestamp": "6:20", "duration": "34s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 8, "timestamp": "7:28", "duration": "34s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 9, "timestamp": "8:43", "duration": "26s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Dust Road Ballad", "artist": "Prairie Heart", "beat": 10, "timestamp": "9:32", "duration": "35s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 1, "timestamp": "0:50", "duration": "25s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 2, "timestamp": "1:42", "duration": "22s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 3, "timestamp": "2:18", "duration": "36s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 4, "timestamp": "3:42", "duration": "40s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 5, "timestamp": "4:39", "duration": "30s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 6, "timestamp": "5:05", "duration": "27s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 7, "timestamp": "6:43", "duration": "29s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 8, "timestamp": "7:14", "duration": "26s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 9, "timestamp": "8:09", "duration": "20s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Honky Tonk Angel", "artist": "Silver Strings", "beat": 10, "timestamp": "9:02", "duration": "27s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 1, "timestamp": "0:30", "duration": "39s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 2, "timestamp": "1:54", "duration": "22s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 3, "timestamp": "2:29", "duration": "33s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 4, "timestamp": "3:56", "duration": "40s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 5, "timestamp": "4:36", "duration": "26s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 6, "timestamp": "5:45", "duration": "32s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 7, "timestamp": "6:31", "duration": "32s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 8, "timestamp": "7:15", "duration": "24s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 9, "timestamp": "8:41", "duration": "20s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Barn Light", "artist": "Hayfield Soul", "beat": 10, "timestamp": "9:57", "duration": "23s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 1, "timestamp": "0:49", "duration": "33s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 2, "timestamp": "1:14", "duration": "25s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 3, "timestamp": "2:51", "duration": "36s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 4, "timestamp": "3:29", "duration": "21s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 5, "timestamp": "4:35", "duration": "27s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 6, "timestamp": "5:58", "duration": "23s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 7, "timestamp": "6:29", "duration": "24s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 8, "timestamp": "7:51", "duration": "34s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 9, "timestamp": "8:42", "duration": "36s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Truck Stop Psalm", "artist": "Highway Saint", "beat": 10, "timestamp": "9:35", "duration": "39s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 1, "timestamp": "0:20", "duration": "34s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 2, "timestamp": "1:39", "duration": "36s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 3, "timestamp": "2:27", "duration": "37s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 4, "timestamp": "3:28", "duration": "25s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 5, "timestamp": "4:47", "duration": "35s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 6, "timestamp": "5:28", "duration": "28s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 7, "timestamp": "6:48", "duration": "27s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 8, "timestamp": "7:53", "duration": "40s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 9, "timestamp": "8:17", "duration": "36s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Bluegrass Dawn", "artist": "Mountain Root", "beat": 10, "timestamp": "9:31", "duration": "40s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 1, "timestamp": "0:15", "duration": "28s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 2, "timestamp": "1:28", "duration": "22s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 3, "timestamp": "2:45", "duration": "29s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 4, "timestamp": "3:15", "duration": "28s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 5, "timestamp": "4:21", "duration": "30s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 6, "timestamp": "5:57", "duration": "37s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 7, "timestamp": "6:05", "duration": "24s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 8, "timestamp": "7:09", "duration": "27s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 9, "timestamp": "8:24", "duration": "24s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Whiskey Gospel", "artist": "Bar Stool Preacher", "beat": 10, "timestamp": "9:45", "duration": "26s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 1, "timestamp": "0:04", "duration": "33s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 2, "timestamp": "1:26", "duration": "30s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 3, "timestamp": "2:34", "duration": "34s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 4, "timestamp": "3:26", "duration": "21s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 5, "timestamp": "4:13", "duration": "33s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 6, "timestamp": "5:24", "duration": "38s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 7, "timestamp": "6:44", "duration": "20s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 8, "timestamp": "7:54", "duration": "38s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 9, "timestamp": "8:24", "duration": "35s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Porch Light", "artist": "Front Step Dream", "beat": 10, "timestamp": "9:00", "duration": "31s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 1, "timestamp": "0:19", "duration": "32s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 2, "timestamp": "1:54", "duration": "33s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 3, "timestamp": "2:34", "duration": "37s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 4, "timestamp": "3:51", "duration": "39s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 5, "timestamp": "4:57", "duration": "27s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 6, "timestamp": "5:31", "duration": "27s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 7, "timestamp": "6:17", "duration": "33s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 8, "timestamp": "7:31", "duration": "20s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 9, "timestamp": "8:24", "duration": "30s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "River Stone", "artist": "Creek Bed Soul", "beat": 10, "timestamp": "9:42", "duration": "32s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 1, "timestamp": "0:46", "duration": "25s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 2, "timestamp": "1:53", "duration": "34s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 3, "timestamp": "2:58", "duration": "24s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 4, "timestamp": "3:39", "duration": "37s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 5, "timestamp": "4:01", "duration": "32s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 6, "timestamp": "5:37", "duration": "38s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 7, "timestamp": "6:42", "duration": "20s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 8, "timestamp": "7:05", "duration": "40s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 9, "timestamp": "8:27", "duration": "24s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Campfire Hymn", "artist": "Smoke Ring", "beat": 10, "timestamp": "9:55", "duration": "34s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 1, "timestamp": "0:11", "duration": "21s", "lyric_line": "Dust on my boots, stars in my eyes", "scene": {"mood": "nostalgia", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "rule of thirds", "camera": "wide shot", "description": "Dirt road dawn. nostalgia light stretches across open fields."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 2, "timestamp": "1:16", "duration": "32s", "lyric_line": "The church bell rings, the whiskey sings", "scene": {"mood": "freedom", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "leading lines", "camera": "tracking shot", "description": "Front porch evening. freedom stories told in rocking chairs."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 3, "timestamp": "2:20", "duration": "26s", "lyric_line": "This road goes on and so do I", "scene": {"mood": "heartache", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "environmental", "camera": "golden hour", "description": "Highway stretch. heartache freedom in the rearview mirror."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 4, "timestamp": "3:29", "duration": "30s", "lyric_line": "Home is where the heart got broke", "scene": {"mood": "warmth", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "wide", "camera": "handheld", "description": "Barn dance. warmth joy under string lights."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 5, "timestamp": "4:21", "duration": "32s", "lyric_line": "Front porch swing, evening hymn", "scene": {"mood": "resilience", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "natural framing", "camera": "static", "description": "River bend. resilience reflection in still water."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 6, "timestamp": "5:17", "duration": "33s", "lyric_line": "The river knows what the road forgot", "scene": {"mood": "faith", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "rule of thirds", "camera": "wide shot", "description": "Church yard. faith faith in old wood and new beginnings."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 7, "timestamp": "6:16", "duration": "22s", "lyric_line": "Faith like a seed in rocky ground", "scene": {"mood": "simplicity", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "leading lines", "camera": "tracking shot", "description": "Campfire circle. simplicity warmth shared between strangers."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 8, "timestamp": "7:30", "duration": "20s", "lyric_line": "Old truck, new miles, same prayer", "scene": {"mood": "wanderlust", "colors": ["#8b6914", "#1a3a2a", "#f0d9b5"], "composition": "environmental", "camera": "golden hour", "description": "Main street sunset. wanderlust nostalgia in every storefront."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 9, "timestamp": "8:47", "duration": "37s", "lyric_line": "The harvest comes to those who wait", "scene": {"mood": "gratitude", "colors": ["#a0522d", "#4169e1", "#faebd7"], "composition": "wide", "camera": "handheld", "description": "Wheat field. gratitude simplicity in golden waves."}}
{"song": "Old Church Road", "artist": "Steeple Shadow", "beat": 10, "timestamp": "9:03", "duration": "31s", "lyric_line": "Dirt under nails, grace in the heart", "scene": {"mood": "longing", "colors": ["#d4a574", "#2f4858", "#f5e6cc"], "composition": "natural framing", "camera": "static", "description": "Old bridge. longing crossing from one life to another."}}

View File

@@ -0,0 +1,100 @@
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 1, "timestamp": "0:07", "duration": "31s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 2, "timestamp": "1:56", "duration": "29s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 3, "timestamp": "2:15", "duration": "21s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 4, "timestamp": "3:15", "duration": "38s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 5, "timestamp": "4:05", "duration": "22s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 6, "timestamp": "5:46", "duration": "35s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 7, "timestamp": "6:52", "duration": "22s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 8, "timestamp": "7:48", "duration": "37s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 9, "timestamp": "8:49", "duration": "24s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Neon Pulse", "artist": "Digital Architect", "beat": 10, "timestamp": "9:08", "duration": "35s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 1, "timestamp": "0:35", "duration": "25s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 2, "timestamp": "1:16", "duration": "36s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 3, "timestamp": "2:55", "duration": "39s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 4, "timestamp": "3:27", "duration": "26s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 5, "timestamp": "4:59", "duration": "37s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 6, "timestamp": "5:48", "duration": "26s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 7, "timestamp": "6:45", "duration": "29s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 8, "timestamp": "7:25", "duration": "40s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 9, "timestamp": "8:23", "duration": "34s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Synth Cathedral", "artist": "Wave Rider", "beat": 10, "timestamp": "9:57", "duration": "36s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 1, "timestamp": "0:28", "duration": "23s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 2, "timestamp": "1:15", "duration": "27s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 3, "timestamp": "2:04", "duration": "30s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 4, "timestamp": "3:01", "duration": "38s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 5, "timestamp": "4:35", "duration": "27s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 6, "timestamp": "5:37", "duration": "27s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 7, "timestamp": "6:00", "duration": "22s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 8, "timestamp": "7:45", "duration": "40s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 9, "timestamp": "8:03", "duration": "27s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Binary Sunset", "artist": "Code Poet", "beat": 10, "timestamp": "9:04", "duration": "21s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 1, "timestamp": "0:55", "duration": "30s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 2, "timestamp": "1:04", "duration": "36s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 3, "timestamp": "2:15", "duration": "28s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 4, "timestamp": "3:42", "duration": "35s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 5, "timestamp": "4:13", "duration": "37s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 6, "timestamp": "5:08", "duration": "38s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 7, "timestamp": "6:36", "duration": "35s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 8, "timestamp": "7:15", "duration": "35s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 9, "timestamp": "8:51", "duration": "33s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Frequency Drift", "artist": "Sound Sculptor", "beat": 10, "timestamp": "9:12", "duration": "23s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 1, "timestamp": "0:06", "duration": "33s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 2, "timestamp": "1:22", "duration": "33s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 3, "timestamp": "2:26", "duration": "34s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 4, "timestamp": "3:55", "duration": "21s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 5, "timestamp": "4:43", "duration": "40s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 6, "timestamp": "5:41", "duration": "23s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 7, "timestamp": "6:03", "duration": "32s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 8, "timestamp": "7:46", "duration": "30s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 9, "timestamp": "8:51", "duration": "23s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Pixel Storm", "artist": "Grid Runner", "beat": 10, "timestamp": "9:15", "duration": "26s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 1, "timestamp": "0:12", "duration": "37s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 2, "timestamp": "1:28", "duration": "24s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 3, "timestamp": "2:27", "duration": "25s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 4, "timestamp": "3:17", "duration": "34s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 5, "timestamp": "4:15", "duration": "22s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 6, "timestamp": "5:28", "duration": "37s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 7, "timestamp": "6:06", "duration": "21s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 8, "timestamp": "7:41", "duration": "37s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 9, "timestamp": "8:53", "duration": "20s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Chromatic Bloom", "artist": "Light Weaver", "beat": 10, "timestamp": "9:05", "duration": "27s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 1, "timestamp": "0:10", "duration": "33s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 2, "timestamp": "1:31", "duration": "35s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 3, "timestamp": "2:13", "duration": "32s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 4, "timestamp": "3:57", "duration": "21s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 5, "timestamp": "4:10", "duration": "32s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 6, "timestamp": "5:00", "duration": "32s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 7, "timestamp": "6:16", "duration": "34s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 8, "timestamp": "7:18", "duration": "33s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 9, "timestamp": "8:44", "duration": "37s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Vapor Trail", "artist": "Dream Machine", "beat": 10, "timestamp": "9:42", "duration": "35s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 1, "timestamp": "0:09", "duration": "26s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 2, "timestamp": "1:18", "duration": "26s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 3, "timestamp": "2:03", "duration": "38s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 4, "timestamp": "3:47", "duration": "37s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 5, "timestamp": "4:03", "duration": "30s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 6, "timestamp": "5:03", "duration": "21s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 7, "timestamp": "6:37", "duration": "35s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 8, "timestamp": "7:32", "duration": "36s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 9, "timestamp": "8:10", "duration": "21s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Phase Shift", "artist": "Quantum Beat", "beat": 10, "timestamp": "9:32", "duration": "22s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 1, "timestamp": "0:54", "duration": "25s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 2, "timestamp": "1:04", "duration": "39s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 3, "timestamp": "2:04", "duration": "27s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 4, "timestamp": "3:25", "duration": "23s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 5, "timestamp": "4:56", "duration": "38s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 6, "timestamp": "5:15", "duration": "38s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 7, "timestamp": "6:38", "duration": "21s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 8, "timestamp": "7:39", "duration": "22s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 9, "timestamp": "8:26", "duration": "38s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Signal Cascade", "artist": "Wave Form", "beat": 10, "timestamp": "9:36", "duration": "36s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 1, "timestamp": "0:20", "duration": "28s", "lyric_line": "Frequency rising, consciousness expanding", "scene": {"mood": "euphoria", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "centered", "camera": "dolly zoom", "description": "Pulsing grid. euphoria frequencies cascade through crystal."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 2, "timestamp": "1:13", "duration": "30s", "lyric_line": "Binary dreams in analog skin", "scene": {"mood": "hypnotic", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "radial", "camera": "orbital", "description": "Digital horizon. hypnotic waves of light dissolve into pixels."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 3, "timestamp": "2:15", "duration": "28s", "lyric_line": "The signal carries what words cannot", "scene": {"mood": "transcendence", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "geometric", "camera": "aerial", "description": "Neon cathedral. transcendence synths paint the void."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 4, "timestamp": "3:25", "duration": "24s", "lyric_line": "Pulse after pulse, the grid comes alive", "scene": {"mood": "float", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "layered", "camera": "tracking shot", "description": "Circuit board landscape. float data flows like rivers of light."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 5, "timestamp": "4:42", "duration": "40s", "lyric_line": "Dissolving into pure mathematics", "scene": {"mood": "surge", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "depth", "camera": "static", "description": "Holographic bloom. surge patterns emerge from mathematics."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 6, "timestamp": "5:19", "duration": "34s", "lyric_line": "Light becomes code becomes sound becomes light", "scene": {"mood": "glow", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "centered", "camera": "dolly zoom", "description": "Laser grid. glow precision cuts through fog."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 7, "timestamp": "6:20", "duration": "22s", "lyric_line": "Phase shift: reality recalibrates", "scene": {"mood": "pulse", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "radial", "camera": "orbital", "description": "Vapor chamber. pulse gradients melt between dimensions."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 8, "timestamp": "7:00", "duration": "34s", "lyric_line": "The algorithm hums, the universe responds", "scene": {"mood": "drift", "colors": ["#ff6b6b", "#4ecdc4", "#1a1a2e"], "composition": "geometric", "camera": "aerial", "description": "Binary aurora. drift code becomes light becomes sound."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 9, "timestamp": "8:39", "duration": "38s", "lyric_line": "Pixel by pixel, a new world renders", "scene": {"mood": "bloom", "colors": ["#7b2ff7", "#c471ed", "#12c2e9"], "composition": "layered", "camera": "tracking shot", "description": "Phase field. bloom oscillations create living geometry."}}
{"song": "Aurora Protocol", "artist": "Night Circuit", "beat": 10, "timestamp": "9:06", "duration": "22s", "lyric_line": "Signal through noise, truth through static", "scene": {"mood": "electric", "colors": ["#00ff87", "#60efff", "#ff00ff"], "composition": "depth", "camera": "static", "description": "Signal canyon. electric waves bounce between crystal walls."}}

View File

@@ -0,0 +1,100 @@
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 1, "timestamp": "0:40", "duration": "23s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 2, "timestamp": "1:01", "duration": "28s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 3, "timestamp": "2:15", "duration": "27s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 4, "timestamp": "3:08", "duration": "23s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 5, "timestamp": "4:43", "duration": "37s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 6, "timestamp": "5:05", "duration": "38s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 7, "timestamp": "6:27", "duration": "21s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 8, "timestamp": "7:01", "duration": "22s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 9, "timestamp": "8:13", "duration": "27s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Street Light Anthem", "artist": "Urban Flow", "beat": 10, "timestamp": "9:32", "duration": "39s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 1, "timestamp": "0:01", "duration": "37s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 2, "timestamp": "1:12", "duration": "40s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 3, "timestamp": "2:44", "duration": "37s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 4, "timestamp": "3:26", "duration": "27s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 5, "timestamp": "4:28", "duration": "38s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 6, "timestamp": "5:17", "duration": "20s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 7, "timestamp": "6:48", "duration": "25s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 8, "timestamp": "7:44", "duration": "33s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 9, "timestamp": "8:21", "duration": "28s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Concrete Dreams", "artist": "Night Rider", "beat": 10, "timestamp": "9:09", "duration": "26s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 1, "timestamp": "0:48", "duration": "30s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 2, "timestamp": "1:06", "duration": "22s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 3, "timestamp": "2:24", "duration": "23s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 4, "timestamp": "3:22", "duration": "31s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 5, "timestamp": "4:38", "duration": "28s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 6, "timestamp": "5:51", "duration": "21s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 7, "timestamp": "6:46", "duration": "34s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 8, "timestamp": "7:34", "duration": "23s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 9, "timestamp": "8:59", "duration": "32s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Cipher Kings", "artist": "Block Party", "beat": 10, "timestamp": "9:05", "duration": "37s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 1, "timestamp": "0:18", "duration": "40s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 2, "timestamp": "1:39", "duration": "31s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 3, "timestamp": "2:36", "duration": "26s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 4, "timestamp": "3:45", "duration": "22s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 5, "timestamp": "4:02", "duration": "27s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 6, "timestamp": "5:49", "duration": "29s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 7, "timestamp": "6:05", "duration": "27s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 8, "timestamp": "7:55", "duration": "23s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 9, "timestamp": "8:24", "duration": "28s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Hood Gospel", "artist": "Soul Preacher", "beat": 10, "timestamp": "9:29", "duration": "40s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 1, "timestamp": "0:53", "duration": "31s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 2, "timestamp": "1:10", "duration": "31s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 3, "timestamp": "2:22", "duration": "26s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 4, "timestamp": "3:42", "duration": "28s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 5, "timestamp": "4:44", "duration": "40s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 6, "timestamp": "5:04", "duration": "39s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 7, "timestamp": "6:40", "duration": "25s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 8, "timestamp": "7:34", "duration": "27s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 9, "timestamp": "8:10", "duration": "34s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Trap Cathedral", "artist": "Bass Prophet", "beat": 10, "timestamp": "9:24", "duration": "28s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 1, "timestamp": "0:59", "duration": "40s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 2, "timestamp": "1:44", "duration": "37s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 3, "timestamp": "2:14", "duration": "30s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 4, "timestamp": "3:53", "duration": "21s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 5, "timestamp": "4:14", "duration": "21s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 6, "timestamp": "5:51", "duration": "30s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 7, "timestamp": "6:25", "duration": "28s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 8, "timestamp": "7:04", "duration": "26s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 9, "timestamp": "8:58", "duration": "38s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Graffiti Soul", "artist": "Art Rebel", "beat": 10, "timestamp": "9:56", "duration": "30s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 1, "timestamp": "0:13", "duration": "40s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 2, "timestamp": "1:31", "duration": "32s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 3, "timestamp": "2:56", "duration": "40s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 4, "timestamp": "3:29", "duration": "24s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 5, "timestamp": "4:16", "duration": "24s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 6, "timestamp": "5:15", "duration": "37s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 7, "timestamp": "6:34", "duration": "28s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 8, "timestamp": "7:47", "duration": "38s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 9, "timestamp": "8:27", "duration": "38s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Crown Heavy", "artist": "Throne Seeker", "beat": 10, "timestamp": "9:25", "duration": "31s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 1, "timestamp": "0:14", "duration": "24s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 2, "timestamp": "1:32", "duration": "35s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 3, "timestamp": "2:05", "duration": "21s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 4, "timestamp": "3:55", "duration": "23s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 5, "timestamp": "4:09", "duration": "40s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 6, "timestamp": "5:10", "duration": "33s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 7, "timestamp": "6:38", "duration": "22s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 8, "timestamp": "7:24", "duration": "32s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 9, "timestamp": "8:38", "duration": "34s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Block Party Lit", "artist": "Hype Master", "beat": 10, "timestamp": "9:33", "duration": "28s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 1, "timestamp": "0:35", "duration": "20s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 2, "timestamp": "1:43", "duration": "23s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 3, "timestamp": "2:43", "duration": "37s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 4, "timestamp": "3:48", "duration": "28s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 5, "timestamp": "4:49", "duration": "40s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 6, "timestamp": "5:21", "duration": "23s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 7, "timestamp": "6:18", "duration": "33s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 8, "timestamp": "7:10", "duration": "34s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 9, "timestamp": "8:00", "duration": "28s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Mic Testament", "artist": "Word Smith", "beat": 10, "timestamp": "9:32", "duration": "25s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 1, "timestamp": "0:32", "duration": "23s", "lyric_line": "They said I'd never make it, now look at the view", "scene": {"mood": "grit", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "portrait", "camera": "low angle", "description": "Concrete jungle. grit energy radiating from every surface."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 2, "timestamp": "1:55", "duration": "40s", "lyric_line": "Raised on concrete, blooming through the cracks", "scene": {"mood": "confidence", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "environmental", "camera": "tracking shot", "description": "Street corner sermon. confidence truths spoken over heavy bass."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 3, "timestamp": "2:19", "duration": "40s", "lyric_line": "Every bar a brick, building something real", "scene": {"mood": "defiance", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "rule of thirds", "camera": "handheld", "description": "Neon-lit block. defiance swagger in every frame."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 4, "timestamp": "3:32", "duration": "39s", "lyric_line": "The mic don't lie, neither do I", "scene": {"mood": "triumph", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "symmetrical", "camera": "close-up", "description": "Underground cipher. triumph flow cascading through speakers."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 5, "timestamp": "4:12", "duration": "24s", "lyric_line": "From the bottom where the roots run deep", "scene": {"mood": "raw", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "dynamic", "camera": "steadicam", "description": "Rooftop at midnight. raw reflection over a skyline."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 6, "timestamp": "5:23", "duration": "25s", "lyric_line": "Turn the pain to power, the struggle to art", "scene": {"mood": "intensity", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "portrait", "camera": "low angle", "description": "Parking lot stage. intensity rawness cuts through the static."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 7, "timestamp": "6:34", "duration": "36s", "lyric_line": "Crown heavy but I never bend", "scene": {"mood": "swagger", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "environmental", "camera": "tracking shot", "description": "Studio booth. swagger confession wrapped in rhythm."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 8, "timestamp": "7:58", "duration": "20s", "lyric_line": "The block remembers what the world forgets", "scene": {"mood": "resilience", "colors": ["#2d132c", "#ee6c4d", "#1b2838"], "composition": "rule of thirds", "camera": "handheld", "description": "Block party lights. resilience celebration in the bass."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 9, "timestamp": "8:38", "duration": "30s", "lyric_line": "Writing futures on napkins in the dark", "scene": {"mood": "energy", "colors": ["#0d1117", "#f0883e", "#238636"], "composition": "symmetrical", "camera": "close-up", "description": "Empty lot freestyle. energy improvisation over cardboard."}}
{"song": "Hood Lullaby", "artist": "Street Sage", "beat": 10, "timestamp": "9:31", "duration": "20s", "lyric_line": "The verse is the voice they tried to silence", "scene": {"mood": "reflection", "colors": ["#1a1a2e", "#e94560", "#0f3460"], "composition": "dynamic", "camera": "steadicam", "description": "Train platform. reflection rhythm matching the rails."}}

View File

@@ -0,0 +1,100 @@
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 1, "timestamp": "0:14", "duration": "40s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 2, "timestamp": "1:04", "duration": "40s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 3, "timestamp": "2:02", "duration": "20s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 4, "timestamp": "3:15", "duration": "26s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 5, "timestamp": "4:53", "duration": "20s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 6, "timestamp": "5:39", "duration": "24s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 7, "timestamp": "6:15", "duration": "24s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 8, "timestamp": "7:30", "duration": "23s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 9, "timestamp": "8:36", "duration": "26s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Midnight Keys", "artist": "Blue Note", "beat": 10, "timestamp": "9:29", "duration": "28s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 1, "timestamp": "0:49", "duration": "31s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 2, "timestamp": "1:10", "duration": "39s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 3, "timestamp": "2:38", "duration": "23s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 4, "timestamp": "3:49", "duration": "25s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 5, "timestamp": "4:19", "duration": "23s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 6, "timestamp": "5:37", "duration": "20s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 7, "timestamp": "6:59", "duration": "29s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 8, "timestamp": "7:36", "duration": "32s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 9, "timestamp": "8:25", "duration": "26s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Smoke Ring Waltz", "artist": "Velvet Sax", "beat": 10, "timestamp": "9:04", "duration": "38s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 1, "timestamp": "0:44", "duration": "40s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 2, "timestamp": "1:15", "duration": "23s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 3, "timestamp": "2:44", "duration": "29s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 4, "timestamp": "3:54", "duration": "39s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 5, "timestamp": "4:51", "duration": "23s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 6, "timestamp": "5:50", "duration": "38s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 7, "timestamp": "6:50", "duration": "21s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 8, "timestamp": "7:22", "duration": "37s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 9, "timestamp": "8:27", "duration": "31s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Rain on Brass", "artist": "Cool Cat", "beat": 10, "timestamp": "9:04", "duration": "36s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 1, "timestamp": "0:41", "duration": "30s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 2, "timestamp": "1:00", "duration": "33s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 3, "timestamp": "2:52", "duration": "35s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 4, "timestamp": "3:06", "duration": "33s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 5, "timestamp": "4:23", "duration": "40s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 6, "timestamp": "5:57", "duration": "34s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 7, "timestamp": "6:45", "duration": "24s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 8, "timestamp": "7:27", "duration": "25s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 9, "timestamp": "8:46", "duration": "36s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Basement Swing", "artist": "Low Light", "beat": 10, "timestamp": "9:41", "duration": "28s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 1, "timestamp": "0:39", "duration": "37s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 2, "timestamp": "1:49", "duration": "35s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 3, "timestamp": "2:29", "duration": "33s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 4, "timestamp": "3:52", "duration": "38s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 5, "timestamp": "4:17", "duration": "30s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 6, "timestamp": "5:54", "duration": "27s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 7, "timestamp": "6:53", "duration": "22s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 8, "timestamp": "7:17", "duration": "34s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 9, "timestamp": "8:15", "duration": "34s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Chromatic Drift", "artist": "Free Form", "beat": 10, "timestamp": "9:36", "duration": "39s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 1, "timestamp": "0:42", "duration": "32s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 2, "timestamp": "1:21", "duration": "20s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 3, "timestamp": "2:31", "duration": "30s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 4, "timestamp": "3:11", "duration": "35s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 5, "timestamp": "4:13", "duration": "31s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 6, "timestamp": "5:51", "duration": "28s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 7, "timestamp": "6:21", "duration": "28s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 8, "timestamp": "7:56", "duration": "39s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 9, "timestamp": "8:44", "duration": "28s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Lantern Glow", "artist": "Warm Reed", "beat": 10, "timestamp": "9:35", "duration": "20s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 1, "timestamp": "0:33", "duration": "26s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 2, "timestamp": "1:05", "duration": "27s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 3, "timestamp": "2:46", "duration": "33s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 4, "timestamp": "3:31", "duration": "37s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 5, "timestamp": "4:48", "duration": "27s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 6, "timestamp": "5:44", "duration": "35s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 7, "timestamp": "6:41", "duration": "35s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 8, "timestamp": "7:28", "duration": "20s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 9, "timestamp": "8:05", "duration": "29s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Whiskey Noir", "artist": "Dark Piano", "beat": 10, "timestamp": "9:14", "duration": "32s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 1, "timestamp": "0:44", "duration": "27s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 2, "timestamp": "1:19", "duration": "38s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 3, "timestamp": "2:23", "duration": "35s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 4, "timestamp": "3:35", "duration": "36s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 5, "timestamp": "4:22", "duration": "33s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 6, "timestamp": "5:47", "duration": "37s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 7, "timestamp": "6:21", "duration": "31s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 8, "timestamp": "7:44", "duration": "34s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 9, "timestamp": "8:17", "duration": "29s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Autumn Chorus", "artist": "Falling Leaf", "beat": 10, "timestamp": "9:16", "duration": "27s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 1, "timestamp": "0:07", "duration": "26s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 2, "timestamp": "1:20", "duration": "23s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 3, "timestamp": "2:47", "duration": "37s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 4, "timestamp": "3:48", "duration": "25s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 5, "timestamp": "4:12", "duration": "26s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 6, "timestamp": "5:47", "duration": "35s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 7, "timestamp": "6:17", "duration": "38s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 8, "timestamp": "7:48", "duration": "36s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 9, "timestamp": "8:38", "duration": "29s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Neon Lounge", "artist": "Night Owl", "beat": 10, "timestamp": "9:06", "duration": "26s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 1, "timestamp": "0:18", "duration": "27s", "lyric_line": "The notes between the notes say more", "scene": {"mood": "smoky", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Smoky club. smoky notes hang in amber light."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 2, "timestamp": "1:23", "duration": "25s", "lyric_line": "Improvisation is just honesty with rhythm", "scene": {"mood": "improvisational", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "negative space", "camera": "close-up", "description": "Rain-streaked window. improvisational piano drips like water on glass."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 3, "timestamp": "2:19", "duration": "20s", "lyric_line": "Blue smoke, golden horn, midnight truth", "scene": {"mood": "cool", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "environmental", "camera": "rack focus", "description": "Basement session. cool improvisation between shadows."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 4, "timestamp": "3:45", "duration": "37s", "lyric_line": "The bass walks where the melody dreams", "scene": {"mood": "melancholy", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "portrait", "camera": "handheld", "description": "Empty theater. melancholy trumpet echoes off velvet seats."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 5, "timestamp": "4:08", "duration": "28s", "lyric_line": "Every solo is a confession", "scene": {"mood": "swing", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "dynamic", "camera": "dutch angle", "description": "Rooftop dawn. swing saxophone meets the sunrise."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 6, "timestamp": "5:02", "duration": "21s", "lyric_line": "Silence is the first instrument", "scene": {"mood": "intimate", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "chiaroscuro", "camera": "slow pan", "description": "Back alley. intimate bass line walks through puddles."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 7, "timestamp": "6:35", "duration": "29s", "lyric_line": "The swing carries what grief cannot", "scene": {"mood": "nocturnal", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "negative space", "camera": "close-up", "description": "Lounge corner. nocturnal conversation between instruments."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 8, "timestamp": "7:44", "duration": "24s", "lyric_line": "After hours, the real music plays", "scene": {"mood": "free", "colors": ["#0a0a23", "#d4a574", "#4a4a6a"], "composition": "environmental", "camera": "rack focus", "description": "Fog street. free clarinet traces footsteps in mist."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 9, "timestamp": "8:40", "duration": "35s", "lyric_line": "Keys like rain on a tin roof", "scene": {"mood": "warm", "colors": ["#2c1810", "#b8860b", "#1c1c3c"], "composition": "portrait", "camera": "handheld", "description": "Wine bar. warm violin whispers over clinking glasses."}}
{"song": "Dawn Improv", "artist": "First Light", "beat": 10, "timestamp": "9:06", "duration": "20s", "lyric_line": "The trumpet calls, the night answers", "scene": {"mood": "contemplative", "colors": ["#1a1a2e", "#c9a959", "#2d3436"], "composition": "dynamic", "camera": "dutch angle", "description": "After hours. contemplative drums speak truths the daylight cannot hold."}}

View File

@@ -0,0 +1,100 @@
{"song": "Fuego Lento", "artist": "Corazon", "beat": 1, "timestamp": "0:58", "duration": "39s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 2, "timestamp": "1:47", "duration": "35s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 3, "timestamp": "2:53", "duration": "29s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 4, "timestamp": "3:49", "duration": "27s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 5, "timestamp": "4:38", "duration": "31s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 6, "timestamp": "5:14", "duration": "40s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 7, "timestamp": "6:12", "duration": "39s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 8, "timestamp": "7:16", "duration": "24s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 9, "timestamp": "8:40", "duration": "23s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Fuego Lento", "artist": "Corazon", "beat": 10, "timestamp": "9:57", "duration": "40s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 1, "timestamp": "0:41", "duration": "21s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 2, "timestamp": "1:19", "duration": "34s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 3, "timestamp": "2:02", "duration": "38s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 4, "timestamp": "3:23", "duration": "24s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 5, "timestamp": "4:05", "duration": "29s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 6, "timestamp": "5:20", "duration": "33s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 7, "timestamp": "6:11", "duration": "26s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 8, "timestamp": "7:08", "duration": "37s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 9, "timestamp": "8:56", "duration": "31s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Luna Caliente", "artist": "Sombra", "beat": 10, "timestamp": "9:33", "duration": "36s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 1, "timestamp": "0:58", "duration": "28s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 2, "timestamp": "1:53", "duration": "25s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 3, "timestamp": "2:16", "duration": "35s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 4, "timestamp": "3:51", "duration": "29s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 5, "timestamp": "4:47", "duration": "30s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 6, "timestamp": "5:51", "duration": "23s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 7, "timestamp": "6:29", "duration": "22s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 8, "timestamp": "7:09", "duration": "27s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 9, "timestamp": "8:55", "duration": "32s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Ritmo Sagrado", "artist": "Alma Nueva", "beat": 10, "timestamp": "9:54", "duration": "37s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 1, "timestamp": "0:23", "duration": "22s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 2, "timestamp": "1:50", "duration": "32s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 3, "timestamp": "2:00", "duration": "28s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 4, "timestamp": "3:34", "duration": "23s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 5, "timestamp": "4:29", "duration": "31s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 6, "timestamp": "5:43", "duration": "28s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 7, "timestamp": "6:37", "duration": "32s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 8, "timestamp": "7:52", "duration": "40s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 9, "timestamp": "8:23", "duration": "23s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Cumbia Noche", "artist": "Bailador", "beat": 10, "timestamp": "9:43", "duration": "27s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 1, "timestamp": "0:30", "duration": "20s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 2, "timestamp": "1:39", "duration": "37s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 3, "timestamp": "2:20", "duration": "39s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 4, "timestamp": "3:14", "duration": "40s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 5, "timestamp": "4:04", "duration": "40s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 6, "timestamp": "5:52", "duration": "34s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 7, "timestamp": "6:58", "duration": "29s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 8, "timestamp": "7:41", "duration": "33s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 9, "timestamp": "8:07", "duration": "24s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Salsa Brava", "artist": "Picante", "beat": 10, "timestamp": "9:02", "duration": "21s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 1, "timestamp": "0:19", "duration": "35s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 2, "timestamp": "1:07", "duration": "23s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 3, "timestamp": "2:15", "duration": "37s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 4, "timestamp": "3:08", "duration": "32s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 5, "timestamp": "4:29", "duration": "31s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 6, "timestamp": "5:42", "duration": "37s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 7, "timestamp": "6:26", "duration": "38s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 8, "timestamp": "7:47", "duration": "24s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 9, "timestamp": "8:56", "duration": "33s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Tango Oscuro", "artist": "Pasion", "beat": 10, "timestamp": "9:41", "duration": "23s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 1, "timestamp": "0:53", "duration": "35s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 2, "timestamp": "1:39", "duration": "33s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 3, "timestamp": "2:17", "duration": "21s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 4, "timestamp": "3:44", "duration": "31s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 5, "timestamp": "4:13", "duration": "34s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 6, "timestamp": "5:28", "duration": "27s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 7, "timestamp": "6:54", "duration": "31s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 8, "timestamp": "7:06", "duration": "31s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 9, "timestamp": "8:34", "duration": "40s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Reggaeton Fuego", "artist": "Movimiento", "beat": 10, "timestamp": "9:22", "duration": "21s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 1, "timestamp": "0:25", "duration": "28s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 2, "timestamp": "1:12", "duration": "23s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 3, "timestamp": "2:54", "duration": "34s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 4, "timestamp": "3:05", "duration": "26s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 5, "timestamp": "4:41", "duration": "40s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 6, "timestamp": "5:38", "duration": "20s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 7, "timestamp": "6:03", "duration": "30s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 8, "timestamp": "7:15", "duration": "24s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 9, "timestamp": "8:50", "duration": "38s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Bachata Rosa", "artist": "Amante", "beat": 10, "timestamp": "9:13", "duration": "22s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 1, "timestamp": "0:53", "duration": "37s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 2, "timestamp": "1:13", "duration": "38s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 3, "timestamp": "2:13", "duration": "27s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 4, "timestamp": "3:21", "duration": "24s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 5, "timestamp": "4:50", "duration": "39s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 6, "timestamp": "5:00", "duration": "28s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 7, "timestamp": "6:54", "duration": "24s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 8, "timestamp": "7:08", "duration": "37s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 9, "timestamp": "8:16", "duration": "25s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Merengue Sol", "artist": "Alegria", "beat": 10, "timestamp": "9:07", "duration": "20s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 1, "timestamp": "0:08", "duration": "20s", "lyric_line": "The rhythm knows what the heart won't say", "scene": {"mood": "passion", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "dynamic", "camera": "tracking shot", "description": "Street festival. passion rhythm spills from every window."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 2, "timestamp": "1:22", "duration": "27s", "lyric_line": "Dancing is just prayer with your body", "scene": {"mood": "fire", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "movement", "camera": "handheld", "description": "Moonlit plaza. fire couples spin under string lights."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 3, "timestamp": "2:37", "duration": "30s", "lyric_line": "The clave keeps time for the whole world", "scene": {"mood": "joy", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "rule of thirds", "camera": "steady spin", "description": "Beach bar. joy waves match the percussion."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 4, "timestamp": "3:01", "duration": "25s", "lyric_line": "Fuego in the blood, sabor in the soul", "scene": {"mood": "seduction", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "environmental", "camera": "close-up", "description": "Rooftop party. seduction energy rises with the temperature."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 5, "timestamp": "4:16", "duration": "21s", "lyric_line": "The conga speaks a language older than words", "scene": {"mood": "celebration", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "centered", "camera": "wide", "description": "Old quarter. celebration guitar echoes off colonial walls."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 6, "timestamp": "5:08", "duration": "33s", "lyric_line": "Every step a conversation with the earth", "scene": {"mood": "rhythm", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "dynamic", "camera": "tracking shot", "description": "Carnival float. rhythm colors explode in motion."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 7, "timestamp": "6:33", "duration": "23s", "lyric_line": "The horn section calls, the street answers", "scene": {"mood": "warmth", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "movement", "camera": "handheld", "description": "Courtyard cafe. warmth conversation between claves."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 8, "timestamp": "7:47", "duration": "22s", "lyric_line": "Rhythm is the root, joy is the flower", "scene": {"mood": "intensity", "colors": ["#ff6347", "#ffa500", "#2f1b14"], "composition": "rule of thirds", "camera": "steady spin", "description": "Sunset boulevard. intensity horns announce the golden hour."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 9, "timestamp": "8:30", "duration": "34s", "lyric_line": "The bass walks like hips on a Saturday", "scene": {"mood": "dance", "colors": ["#dc143c", "#ffb347", "#4a0e0e"], "composition": "environmental", "camera": "close-up", "description": "Midnight club. dance bass shakes the floor."}}
{"song": "Bossa Brisa", "artist": "Mar Azul", "beat": 10, "timestamp": "9:49", "duration": "31s", "lyric_line": "Music runs in the streets like rivers", "scene": {"mood": "flirtation", "colors": ["#ff4500", "#ffd700", "#8b0000"], "composition": "centered", "camera": "wide", "description": "Morning market. flirtation life set to percussion."}}

View File

@@ -0,0 +1,100 @@
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 1, "timestamp": "0:45", "duration": "25s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 2, "timestamp": "1:19", "duration": "37s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 3, "timestamp": "2:00", "duration": "37s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 4, "timestamp": "3:26", "duration": "22s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 5, "timestamp": "4:14", "duration": "23s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 6, "timestamp": "5:29", "duration": "23s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 7, "timestamp": "6:41", "duration": "24s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 8, "timestamp": "7:31", "duration": "29s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 9, "timestamp": "8:32", "duration": "28s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Iron Throne", "artist": "Dark Lord", "beat": 10, "timestamp": "9:26", "duration": "35s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 1, "timestamp": "0:30", "duration": "27s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 2, "timestamp": "1:29", "duration": "37s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 3, "timestamp": "2:09", "duration": "32s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 4, "timestamp": "3:12", "duration": "39s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 5, "timestamp": "4:32", "duration": "24s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 6, "timestamp": "5:55", "duration": "22s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 7, "timestamp": "6:17", "duration": "33s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 8, "timestamp": "7:21", "duration": "36s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 9, "timestamp": "8:17", "duration": "20s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Chainsaw Psalm", "artist": "Rage Prophet", "beat": 10, "timestamp": "9:18", "duration": "29s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 1, "timestamp": "0:53", "duration": "38s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 2, "timestamp": "1:37", "duration": "35s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 3, "timestamp": "2:55", "duration": "24s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 4, "timestamp": "3:28", "duration": "37s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 5, "timestamp": "4:30", "duration": "31s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 6, "timestamp": "5:21", "duration": "37s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 7, "timestamp": "6:48", "duration": "37s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 8, "timestamp": "7:24", "duration": "34s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 9, "timestamp": "8:59", "duration": "30s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Blood Moon Rite", "artist": "Night Beast", "beat": 10, "timestamp": "9:55", "duration": "26s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 1, "timestamp": "0:44", "duration": "27s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 2, "timestamp": "1:36", "duration": "32s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 3, "timestamp": "2:14", "duration": "33s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 4, "timestamp": "3:02", "duration": "30s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 5, "timestamp": "4:47", "duration": "35s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 6, "timestamp": "5:45", "duration": "32s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 7, "timestamp": "6:24", "duration": "40s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 8, "timestamp": "7:09", "duration": "35s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 9, "timestamp": "8:02", "duration": "24s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Thunder Forge", "artist": "Steel God", "beat": 10, "timestamp": "9:32", "duration": "38s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 1, "timestamp": "0:21", "duration": "23s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 2, "timestamp": "1:55", "duration": "34s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 3, "timestamp": "2:06", "duration": "36s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 4, "timestamp": "3:58", "duration": "34s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 5, "timestamp": "4:00", "duration": "24s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 6, "timestamp": "5:26", "duration": "40s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 7, "timestamp": "6:09", "duration": "22s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 8, "timestamp": "7:30", "duration": "28s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 9, "timestamp": "8:21", "duration": "39s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Void Scream", "artist": "Abyss Walker", "beat": 10, "timestamp": "9:44", "duration": "32s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 1, "timestamp": "0:41", "duration": "22s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 2, "timestamp": "1:54", "duration": "30s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 3, "timestamp": "2:54", "duration": "37s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 4, "timestamp": "3:24", "duration": "30s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 5, "timestamp": "4:40", "duration": "35s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 6, "timestamp": "5:55", "duration": "37s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 7, "timestamp": "6:02", "duration": "39s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 8, "timestamp": "7:04", "duration": "27s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 9, "timestamp": "8:40", "duration": "29s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Skull Cathedral", "artist": "Bone Priest", "beat": 10, "timestamp": "9:14", "duration": "22s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 1, "timestamp": "0:27", "duration": "23s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 2, "timestamp": "1:48", "duration": "40s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 3, "timestamp": "2:45", "duration": "23s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 4, "timestamp": "3:28", "duration": "25s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 5, "timestamp": "4:44", "duration": "29s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 6, "timestamp": "5:57", "duration": "20s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 7, "timestamp": "6:02", "duration": "30s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 8, "timestamp": "7:50", "duration": "21s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 9, "timestamp": "8:18", "duration": "31s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Fire Storm", "artist": "Flame Wrath", "beat": 10, "timestamp": "9:23", "duration": "33s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 1, "timestamp": "0:09", "duration": "27s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 2, "timestamp": "1:33", "duration": "33s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 3, "timestamp": "2:36", "duration": "25s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 4, "timestamp": "3:10", "duration": "25s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 5, "timestamp": "4:05", "duration": "39s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 6, "timestamp": "5:55", "duration": "32s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 7, "timestamp": "6:39", "duration": "27s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 8, "timestamp": "7:31", "duration": "38s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 9, "timestamp": "8:09", "duration": "27s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "War Drum Hymn", "artist": "Battle Saint", "beat": 10, "timestamp": "9:29", "duration": "40s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 1, "timestamp": "0:16", "duration": "34s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 2, "timestamp": "1:16", "duration": "20s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 3, "timestamp": "2:57", "duration": "34s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 4, "timestamp": "3:57", "duration": "29s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 5, "timestamp": "4:43", "duration": "37s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 6, "timestamp": "5:10", "duration": "22s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 7, "timestamp": "6:28", "duration": "31s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 8, "timestamp": "7:37", "duration": "29s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 9, "timestamp": "8:40", "duration": "33s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Acid Rain", "artist": "Toxic Soul", "beat": 10, "timestamp": "9:44", "duration": "28s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 1, "timestamp": "0:29", "duration": "29s", "lyric_line": "The riff is a fist through the wall", "scene": {"mood": "rage", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "dynamic", "camera": "handheld", "description": "Volcanic plain. rage distortion tears through ash and fire."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 2, "timestamp": "1:12", "duration": "32s", "lyric_line": "Distortion is just truth turned up loud", "scene": {"mood": "power", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "chaotic", "camera": "rapid cuts", "description": "Iron fortress. power riffs hammer against steel walls."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 3, "timestamp": "2:54", "duration": "35s", "lyric_line": "The double bass drives the cavalry", "scene": {"mood": "darkness", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "rule of thirds", "camera": "low angle", "description": "Blood arena. darkness drums announce combat."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 4, "timestamp": "3:06", "duration": "27s", "lyric_line": "Scream until the silence breaks", "scene": {"mood": "fury", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Graveyard shift. fury bass shakes the dead awake."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 5, "timestamp": "4:24", "duration": "38s", "lyric_line": "Iron in the blood, fire in the sound", "scene": {"mood": "dominance", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "diagonal", "camera": "whip pan", "description": "Lightning field. dominance energy arcs between towers."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 6, "timestamp": "5:22", "duration": "38s", "lyric_line": "The breakdown shakes the dead awake", "scene": {"mood": "chaos", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "dynamic", "camera": "handheld", "description": "Dark cathedral. chaos blast beats echo off obsidian."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 7, "timestamp": "6:18", "duration": "29s", "lyric_line": "Every chord a declaration of war", "scene": {"mood": "defiance", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "chaotic", "camera": "rapid cuts", "description": "War zone. defiance double bass drives the charge."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 8, "timestamp": "7:01", "duration": "32s", "lyric_line": "The blast beat is a heartbeat amplified", "scene": {"mood": "wrath", "colors": ["#0d0d0d", "#ff4500", "#2d0000"], "composition": "rule of thirds", "camera": "low angle", "description": "Acid wasteland. wrath distortion corrodes everything."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 9, "timestamp": "8:17", "duration": "20s", "lyric_line": "Darkness is just light with the gain up", "scene": {"mood": "intensity", "colors": ["#000000", "#8b0000", "#1a1a1a"], "composition": "extreme close-up", "camera": "dutch angle", "description": "Skull throne room. intensity riff declares dominion."}}
{"song": "Grave Light", "artist": "Death Bloom", "beat": 10, "timestamp": "9:36", "duration": "21s", "lyric_line": "The solo ascends; the crowd becomes a wave", "scene": {"mood": "apocalypse", "colors": ["#1a0000", "#ff0000", "#0a0a0a"], "composition": "diagonal", "camera": "whip pan", "description": "Void edge. apocalypse screams reach into nothing."}}

View File

@@ -0,0 +1,100 @@
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 1, "timestamp": "0:34", "duration": "26s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 2, "timestamp": "1:32", "duration": "28s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 3, "timestamp": "2:08", "duration": "31s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 4, "timestamp": "3:56", "duration": "22s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 5, "timestamp": "4:56", "duration": "27s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 6, "timestamp": "5:23", "duration": "29s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 7, "timestamp": "6:10", "duration": "34s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 8, "timestamp": "7:53", "duration": "37s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 9, "timestamp": "8:45", "duration": "29s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Velvet Hours", "artist": "Silk Voice", "beat": 10, "timestamp": "9:39", "duration": "40s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 1, "timestamp": "0:33", "duration": "20s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 2, "timestamp": "1:42", "duration": "37s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 3, "timestamp": "2:19", "duration": "23s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 4, "timestamp": "3:56", "duration": "24s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 5, "timestamp": "4:16", "duration": "23s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 6, "timestamp": "5:56", "duration": "23s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 7, "timestamp": "6:47", "duration": "37s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 8, "timestamp": "7:09", "duration": "28s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 9, "timestamp": "8:18", "duration": "39s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Moonlit Serenade", "artist": "Soul Keeper", "beat": 10, "timestamp": "9:13", "duration": "30s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 1, "timestamp": "0:13", "duration": "40s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 2, "timestamp": "1:54", "duration": "28s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 3, "timestamp": "2:32", "duration": "35s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 4, "timestamp": "3:16", "duration": "21s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 5, "timestamp": "4:05", "duration": "40s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 6, "timestamp": "5:27", "duration": "28s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 7, "timestamp": "6:02", "duration": "20s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 8, "timestamp": "7:21", "duration": "24s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 9, "timestamp": "8:40", "duration": "28s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Honey Dusk", "artist": "Golden Tone", "beat": 10, "timestamp": "9:10", "duration": "34s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 1, "timestamp": "0:35", "duration": "33s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 2, "timestamp": "1:35", "duration": "20s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 3, "timestamp": "2:07", "duration": "22s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 4, "timestamp": "3:56", "duration": "24s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 5, "timestamp": "4:34", "duration": "21s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 6, "timestamp": "5:53", "duration": "31s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 7, "timestamp": "6:37", "duration": "37s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 8, "timestamp": "7:09", "duration": "33s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 9, "timestamp": "8:08", "duration": "21s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Slow Burn", "artist": "Ember Heart", "beat": 10, "timestamp": "9:19", "duration": "31s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 1, "timestamp": "0:57", "duration": "21s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 2, "timestamp": "1:57", "duration": "31s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 3, "timestamp": "2:13", "duration": "27s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 4, "timestamp": "3:42", "duration": "23s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 5, "timestamp": "4:22", "duration": "37s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 6, "timestamp": "5:56", "duration": "33s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 7, "timestamp": "6:39", "duration": "24s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 8, "timestamp": "7:59", "duration": "27s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 9, "timestamp": "8:55", "duration": "25s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Champagne Rain", "artist": "Luxe Dream", "beat": 10, "timestamp": "9:51", "duration": "25s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 1, "timestamp": "0:56", "duration": "33s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 2, "timestamp": "1:01", "duration": "25s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 3, "timestamp": "2:47", "duration": "30s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 4, "timestamp": "3:50", "duration": "33s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 5, "timestamp": "4:51", "duration": "27s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 6, "timestamp": "5:17", "duration": "25s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 7, "timestamp": "6:50", "duration": "23s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 8, "timestamp": "7:24", "duration": "21s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 9, "timestamp": "8:54", "duration": "35s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Midnight Bloom", "artist": "Petal Soft", "beat": 10, "timestamp": "9:14", "duration": "26s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 1, "timestamp": "0:52", "duration": "34s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 2, "timestamp": "1:22", "duration": "29s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 3, "timestamp": "2:52", "duration": "27s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 4, "timestamp": "3:14", "duration": "20s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 5, "timestamp": "4:42", "duration": "26s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 6, "timestamp": "5:25", "duration": "30s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 7, "timestamp": "6:17", "duration": "22s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 8, "timestamp": "7:49", "duration": "28s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 9, "timestamp": "8:22", "duration": "40s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Silk Road", "artist": "Desert Rose", "beat": 10, "timestamp": "9:32", "duration": "32s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 1, "timestamp": "0:43", "duration": "37s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 2, "timestamp": "1:21", "duration": "20s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 3, "timestamp": "2:07", "duration": "28s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 4, "timestamp": "3:11", "duration": "38s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 5, "timestamp": "4:16", "duration": "21s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 6, "timestamp": "5:06", "duration": "39s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 7, "timestamp": "6:27", "duration": "31s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 8, "timestamp": "7:46", "duration": "30s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 9, "timestamp": "8:27", "duration": "39s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Amber Glow", "artist": "Warm Current", "beat": 10, "timestamp": "9:32", "duration": "23s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 1, "timestamp": "0:24", "duration": "38s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 2, "timestamp": "1:12", "duration": "28s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 3, "timestamp": "2:02", "duration": "33s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 4, "timestamp": "3:00", "duration": "36s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 5, "timestamp": "4:59", "duration": "37s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 6, "timestamp": "5:43", "duration": "26s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 7, "timestamp": "6:23", "duration": "33s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 8, "timestamp": "7:04", "duration": "30s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 9, "timestamp": "8:39", "duration": "30s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Lace Whisper", "artist": "Tender Storm", "beat": 10, "timestamp": "9:42", "duration": "23s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 1, "timestamp": "0:46", "duration": "29s", "lyric_line": "Your voice like honey in the dark", "scene": {"mood": "sultry", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "intimate framing", "camera": "close-up", "description": "Candlelit room. sultry warmth fills every shadow."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 2, "timestamp": "1:32", "duration": "29s", "lyric_line": "Slow down, the night has just begun", "scene": {"mood": "tender", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "negative space", "camera": "slow push-in", "description": "Silk curtain backdrop. tender intimacy in every frame."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 3, "timestamp": "2:42", "duration": "33s", "lyric_line": "Every touch a conversation", "scene": {"mood": "yearning", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "golden ratio", "camera": "rack focus", "description": "Moonlit balcony. yearning yearning carried on warm air."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 4, "timestamp": "3:20", "duration": "32s", "lyric_line": "The space between us sings", "scene": {"mood": "warmth", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "portrait", "camera": "soft focus", "description": "Velvet couch. warmth closeness measured in inches."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 5, "timestamp": "4:44", "duration": "29s", "lyric_line": "Warm like whiskey, soft like rain", "scene": {"mood": "sensuality", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "environmental", "camera": "macro", "description": "Slow-motion rain. sensuality tenderness in every drop."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 6, "timestamp": "5:35", "duration": "24s", "lyric_line": "Hold me like the morning holds the light", "scene": {"mood": "intimacy", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "intimate framing", "camera": "close-up", "description": "Golden hour porch. intimacy warmth on skin."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 7, "timestamp": "6:12", "duration": "33s", "lyric_line": "Your skin the only map I need", "scene": {"mood": "longing", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "negative space", "camera": "slow push-in", "description": "Midnight kitchen. longing laughter and slow dancing."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 8, "timestamp": "7:42", "duration": "32s", "lyric_line": "The slowest fire burns the deepest", "scene": {"mood": "bliss", "colors": ["#4a0e0e", "#c9a959", "#1a0a00"], "composition": "golden ratio", "camera": "rack focus", "description": "Bath of amber light. bliss sensuality in the details."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 9, "timestamp": "8:43", "duration": "25s", "lyric_line": "In the velvet hours, we speak without words", "scene": {"mood": "devotion", "colors": ["#6b3a5c", "#d4a574", "#2d1f3d"], "composition": "portrait", "camera": "soft focus", "description": "Dusk balcony. devotion longing stretches between silhouettes."}}
{"song": "Satin Dawn", "artist": "Light Bearer", "beat": 10, "timestamp": "9:39", "duration": "38s", "lyric_line": "Morning comes too soon when you are this close", "scene": {"mood": "glow", "colors": ["#8b4513", "#ffd700", "#2f1b14"], "composition": "environmental", "camera": "macro", "description": "Morning after glow. glow tenderness in rumpled sheets."}}

View File

@@ -1,129 +0,0 @@
#!/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()