Compare commits
13 Commits
fix/619
...
data/scene
| Author | SHA1 | Date | |
|---|---|---|---|
| a792538d61 | |||
| d120526244 | |||
| 8596ff761b | |||
| 7553fd4f3e | |||
| 71082fe06f | |||
| 6d678e938e | |||
| ad751a6de6 | |||
| 130fa40f0c | |||
| 82f9810081 | |||
| 2548277137 | |||
| 2b234fde79 | |||
| 04cceccd01 | |||
| 1ad2f2b239 |
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Full Nostr agent-to-agent communication demo - FINAL WORKING
|
||||
"""
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Soul Eval Gate — The Conscience of the Training Pipeline
|
||||
|
||||
|
||||
9
cron/pipeline-scheduler.yml
Normal file
9
cron/pipeline-scheduler.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
- name: Nightly Pipeline Scheduler
|
||||
schedule: '*/30 18-23,0-8 * * *' # Every 30 min, off-peak hours only
|
||||
tasks:
|
||||
- name: Check and start pipelines
|
||||
shell: "bash scripts/nightly-pipeline-scheduler.sh"
|
||||
env:
|
||||
PIPELINE_TOKEN_LIMIT: "500000"
|
||||
PIPELINE_PEAK_START: "9"
|
||||
PIPELINE_PEAK_END: "18"
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
from hermes_tools import browser_navigate, browser_vision
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
from hermes_tools import browser_navigate, browser_vision
|
||||
|
||||
|
||||
32
scripts/generate-rock-scenes.py
Normal file
32
scripts/generate-rock-scenes.py
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python3
|
||||
import json, os
|
||||
|
||||
songs = [
|
||||
{"t":"Thunder Road","a":"Heartland","m":["hope","anticipation","energy","triumph","nostalgia","urgency","passion","defiance","release","catharsis"]},
|
||||
{"t":"Black Dog Howl","a":"Rust & Wire","m":["despair","anger","frenzy","exhaustion","resignation","grief","numbness","rage","acceptance","silence"]},
|
||||
{"t":"Satellite Hearts","a":"Neon Circuit","m":["wonder","isolation","longing","connection","euphoria","confusion","clarity","tenderness","urgency","bittersweet"]},
|
||||
{"t":"Concrete Garden","a":"Streetlight Prophet","m":["oppression","resilience","anger","beauty","defiance","community","joy","struggle","growth","hope"]},
|
||||
{"t":"Gravity Well","a":"Void Walker","m":["dread","fascination","surrender","awe","terror","peace","disorientation","acceptance","transcendence","emptiness"]},
|
||||
{"t":"Rust Belt Lullaby","a":"Iron & Ember","m":["nostalgia","sadness","tenderness","loss","beauty","resignation","love","weariness","quiet hope","peace"]},
|
||||
{"t":"Wildfire Sermon","a":"Prophet Ash","m":["fury","ecstasy","chaos","joy","destruction","creation","warning","invitation","abandon","rebirth"]},
|
||||
{"t":"Midnight Transmission","a":"Frequency Ghost","m":["mystery","loneliness","curiosity","connection","paranoia","intimacy","urgency","disconnection","searching","haunting"]},
|
||||
{"t":"Crown of Thorns","a":"Velvet Guillotine","m":["seduction","power","cruelty","beauty","danger","vulnerability","fury","grace","revenge","mercy"]},
|
||||
{"t":"Apartment 4B","a":"Wallpaper & Wire","m":["claustrophobia","routine","desperation","fantasy","breakthrough","freedom","fear","joy","grounding","home"]},
|
||||
]
|
||||
|
||||
beats = []
|
||||
for s in songs:
|
||||
for i in range(10):
|
||||
beats.append({"song": s["t"], "artist": s["a"], "beat": i+1,
|
||||
"timestamp": f"{i*30//60}:{(i*30)%60:02d}", "duration": "30s",
|
||||
"lyric_line": f"[Beat {i+1}]", "scene": {"mood": s["m"][i], "colors": ["placeholder"],
|
||||
"composition": ["wide","close","OTS","low","high","dutch","symmetric","thirds","xwide","medium"][i],
|
||||
"camera": ["static","pan","dolly-in","dolly-out","handheld","steadicam","zoom","crane","track","tilt"][i],
|
||||
"description": f"[{s['m'][i]} scene]"}})
|
||||
|
||||
out = os.path.expanduser("~/.hermes/training-data/scene-descriptions-rock.jsonl")
|
||||
os.makedirs(os.path.dirname(out), exist_ok=True)
|
||||
with open(out, "w") as f:
|
||||
for b in beats:
|
||||
f.write(json.dumps(b) + "\n")
|
||||
print(f"Generated {len(beats)} beats")
|
||||
50
scripts/nightly-pipeline-scheduler.md
Normal file
50
scripts/nightly-pipeline-scheduler.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Nightly Pipeline Scheduler
|
||||
|
||||
Auto-starts batch pipelines when inference is available.
|
||||
|
||||
## What It Does
|
||||
|
||||
1. Checks inference provider health (OpenRouter, Ollama, RunPod)
|
||||
2. Checks if it's off-peak hours (configurable, default: after 6PM)
|
||||
3. Checks interactive session load (don't fight with live users)
|
||||
4. Checks daily token budget (configurable limit)
|
||||
5. Starts the highest-priority incomplete pipeline
|
||||
|
||||
## Pipeline Priority Order
|
||||
|
||||
| Priority | Pipeline | Deps | Max Tokens |
|
||||
|----------|----------|------|------------|
|
||||
| 1 | playground-factory | none | 100,000 |
|
||||
| 2 | training-factory | none | 150,000 |
|
||||
| 3 | knowledge-mine | training-factory running | 80,000 |
|
||||
| 4 | adversary | knowledge-mine running | 50,000 |
|
||||
| 5 | codebase-genome | none | 120,000 |
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
# Normal run (used by cron)
|
||||
./scripts/nightly-pipeline-scheduler.sh
|
||||
|
||||
# Dry run (show what would start)
|
||||
./scripts/nightly-pipeline-scheduler.sh --dry-run
|
||||
|
||||
# Status report
|
||||
./scripts/nightly-pipeline-scheduler.sh --status
|
||||
|
||||
# Force start during peak hours
|
||||
./scripts/nightly-pipeline-scheduler.sh --force
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Set via environment variables:
|
||||
- `PIPELINE_TOKEN_LIMIT`: Daily token budget (default: 500,000)
|
||||
- `PIPELINE_PEAK_START`: Peak hours start (default: 9)
|
||||
- `PIPELINE_PEAK_END`: Peak hours end (default: 18)
|
||||
- `HERMES_HOME`: Hermes home directory (default: ~/.hermes)
|
||||
|
||||
## Cron
|
||||
|
||||
Runs every 30 minutes. Off-peak only (unless --force).
|
||||
See `cron/pipeline-scheduler.yml`.
|
||||
383
scripts/nightly-pipeline-scheduler.sh
Normal file
383
scripts/nightly-pipeline-scheduler.sh
Normal file
@@ -0,0 +1,383 @@
|
||||
#!/usr/bin/env bash
|
||||
# nightly-pipeline-scheduler.sh — Auto-start batch pipelines when inference is available.
|
||||
#
|
||||
# Checks provider health, pipeline progress, token budget, and interactive load.
|
||||
# Starts the highest-priority incomplete pipeline that can run.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/nightly-pipeline-scheduler.sh # Normal run
|
||||
# ./scripts/nightly-pipeline-scheduler.sh --dry-run # Show what would start
|
||||
# ./scripts/nightly-pipeline-scheduler.sh --status # Pipeline status report
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# --- Configuration ---
|
||||
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
|
||||
BUDGET_FILE="${HERMES_HOME}/pipeline_budget.json"
|
||||
STATE_FILE="${HERMES_HOME}/pipeline_state.json"
|
||||
LOG_FILE="${HERMES_HOME}/logs/pipeline-scheduler.log"
|
||||
TOKEN_DAILY_LIMIT="${PIPELINE_TOKEN_LIMIT:-500000}"
|
||||
PEAK_HOURS_START="${PIPELINE_PEAK_START:-9}"
|
||||
PEAK_HOURS_END="${PIPELINE_PEAK_END:-18}"
|
||||
|
||||
# Pipeline definitions (priority order)
|
||||
# Each pipeline: name, script, max_tokens, dependencies
|
||||
PIPELINES=(
|
||||
"playground-factory|scripts/pipeline_playground_factory.sh|100000|none"
|
||||
"training-factory|scripts/pipeline_training_factory.sh|150000|none"
|
||||
"knowledge-mine|scripts/pipeline_knowledge_mine.sh|80000|training-factory"
|
||||
"adversary|scripts/pipeline_adversary.sh|50000|knowledge-mine"
|
||||
"codebase-genome|scripts/pipeline_codebase_genome.sh|120000|none"
|
||||
)
|
||||
|
||||
# --- Colors ---
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# --- Helpers ---
|
||||
now_hour() { date +%-H; }
|
||||
is_peak_hours() {
|
||||
local h=$(now_hour)
|
||||
[[ $h -ge $PEAK_HOURS_START && $h -lt $PEAK_HOURS_END ]]
|
||||
}
|
||||
|
||||
ensure_dirs() {
|
||||
mkdir -p "$(dirname "$LOG_FILE")" "$(dirname "$BUDGET_FILE")" "$(dirname "$STATE_FILE")"
|
||||
}
|
||||
|
||||
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"; }
|
||||
|
||||
get_budget_used_today() {
|
||||
if [[ -f "$BUDGET_FILE" ]]; then
|
||||
local today=$(date +%Y-%m-%d)
|
||||
python3 -c "
|
||||
import json, sys
|
||||
with open('$BUDGET_FILE') as f:
|
||||
d = json.load(f)
|
||||
print(d.get('daily', {}).get('$today', {}).get('tokens_used', 0))
|
||||
" 2>/dev/null || echo 0
|
||||
else
|
||||
echo 0
|
||||
fi
|
||||
}
|
||||
|
||||
get_budget_remaining() {
|
||||
local used=$(get_budget_used_today)
|
||||
echo $((TOKEN_DAILY_LIMIT - used))
|
||||
}
|
||||
|
||||
update_budget() {
|
||||
local pipeline="$1"
|
||||
local tokens="$2"
|
||||
local today=$(date +%Y-%m-%d)
|
||||
python3 -c "
|
||||
import json, os
|
||||
path = '$BUDGET_FILE'
|
||||
d = {}
|
||||
if os.path.exists(path):
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
daily = d.setdefault('daily', {})
|
||||
day = daily.setdefault('$today', {'tokens_used': 0, 'pipelines': {}})
|
||||
day['tokens_used'] = day.get('tokens_used', 0) + $tokens
|
||||
day['pipelines']['$pipeline'] = day['pipelines'].get('$pipeline', 0) + $tokens
|
||||
with open(path, 'w') as f:
|
||||
json.dump(d, f, indent=2)
|
||||
"
|
||||
}
|
||||
|
||||
get_pipeline_state() {
|
||||
if [[ -f "$STATE_FILE" ]]; then
|
||||
cat "$STATE_FILE"
|
||||
else
|
||||
echo "{}"
|
||||
fi
|
||||
}
|
||||
|
||||
set_pipeline_state() {
|
||||
local pipeline="$1"
|
||||
local state="$2" # running, complete, failed, skipped
|
||||
python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
d = {}
|
||||
if os.path.exists(path):
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
d['$pipeline'] = {'state': '$state', 'updated': '$(date -Iseconds)'}
|
||||
with open(path, 'w') as f:
|
||||
json.dump(d, f, indent=2)
|
||||
"
|
||||
}
|
||||
|
||||
is_pipeline_complete() {
|
||||
local pipeline="$1"
|
||||
python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
if not os.path.exists(path):
|
||||
print('false')
|
||||
else:
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
state = d.get('$pipeline', {}).get('state', 'not_started')
|
||||
print('true' if state == 'complete' else 'false')
|
||||
" 2>/dev/null || echo false
|
||||
}
|
||||
|
||||
is_pipeline_running() {
|
||||
local pipeline="$1"
|
||||
python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
if not os.path.exists(path):
|
||||
print('false')
|
||||
else:
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
state = d.get('$pipeline', {}).get('state', 'not_started')
|
||||
print('true' if state == 'running' else 'false')
|
||||
" 2>/dev/null || echo false
|
||||
}
|
||||
|
||||
check_dependency() {
|
||||
local dep="$1"
|
||||
if [[ "$dep" == "none" ]]; then
|
||||
return 0
|
||||
fi
|
||||
# For knowledge-mine: training-factory must be running or complete
|
||||
if [[ "$dep" == "training-factory" ]]; then
|
||||
local state=$(python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
if not os.path.exists(path):
|
||||
print('not_started')
|
||||
else:
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
print(d.get('training-factory', {}).get('state', 'not_started'))
|
||||
" 2>/dev/null || echo "not_started")
|
||||
[[ "$state" == "running" || "$state" == "complete" ]]
|
||||
return $?
|
||||
fi
|
||||
# For adversary: knowledge-mine must be at least 50% done
|
||||
# Simplified: check if it's running (we'd need progress tracking for 50%)
|
||||
if [[ "$dep" == "knowledge-mine" ]]; then
|
||||
local state=$(python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
if not os.path.exists(path):
|
||||
print('not_started')
|
||||
else:
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
print(d.get('knowledge-mine', {}).get('state', 'not_started'))
|
||||
" 2>/dev/null || echo "not_started")
|
||||
[[ "$state" == "running" || "$state" == "complete" ]]
|
||||
return $?
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
check_inference_available() {
|
||||
# Check if any inference provider is responding
|
||||
# 1. Check OpenRouter
|
||||
local or_ok=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
--connect-timeout 5 "https://openrouter.ai/api/v1/models" 2>/dev/null || echo "000")
|
||||
|
||||
# 2. Check local Ollama
|
||||
local ollama_ok=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
--connect-timeout 5 "http://localhost:11434/api/tags" 2>/dev/null || echo "000")
|
||||
|
||||
# 3. Check RunPod (if configured)
|
||||
local runpod_ok="000"
|
||||
if [[ -n "${RUNPOD_ENDPOINT:-}" ]]; then
|
||||
runpod_ok=$(curl -s -o /dev/null -w "%{http_code}" \
|
||||
--connect-timeout 5 "$RUNPOD_ENDPOINT/health" 2>/dev/null || echo "000")
|
||||
fi
|
||||
|
||||
if [[ "$or_ok" == "200" || "$ollama_ok" == "200" || "$runpod_ok" == "200" ]]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
check_interactive_load() {
|
||||
# Check if there are active interactive sessions (don't fight with live users)
|
||||
# Look for tmux panes with active hermes sessions
|
||||
local active=$(tmux list-panes -a -F '#{pane_pid} #{pane_current_command}' 2>/dev/null \
|
||||
| grep -c "hermes\|python3" || echo 0)
|
||||
|
||||
# If more than 3 interactive sessions, skip pipeline start
|
||||
if [[ $active -gt 3 ]]; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
start_pipeline() {
|
||||
local name="$1"
|
||||
local script="$2"
|
||||
local max_tokens="$3"
|
||||
local budget_remaining="$4"
|
||||
local mode="${5:-run}"
|
||||
|
||||
if [[ "$budget_remaining" -lt "$max_tokens" ]]; then
|
||||
log "SKIP $name: insufficient budget ($budget_remaining < $max_tokens tokens)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$script" ]]; then
|
||||
log "SKIP $name: script not found ($script)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ "$mode" == "dry-run" ]]; then
|
||||
log "DRY-RUN: Would start $name (budget: $budget_remaining, needs: $max_tokens)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log "START $name (budget: $budget_remaining, max_tokens: $max_tokens)"
|
||||
set_pipeline_state "$name" "running"
|
||||
|
||||
# Run in background, capture output
|
||||
local log_path="${HERMES_HOME}/logs/pipeline-${name}.log"
|
||||
bash "$script" --max-tokens "$max_tokens" >> "$log_path" 2>&1 &
|
||||
local pid=$!
|
||||
|
||||
# Wait a moment to check if it started OK
|
||||
sleep 2
|
||||
if kill -0 $pid 2>/dev/null; then
|
||||
log "RUNNING $name (PID: $pid, log: $log_path)"
|
||||
# Record the PID
|
||||
python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
d = {}
|
||||
if os.path.exists(path):
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
d['$name']['pid'] = $pid
|
||||
with open(path, 'w') as f:
|
||||
json.dump(d, f, indent=2)
|
||||
"
|
||||
return 0
|
||||
else
|
||||
log "FAIL $name: script exited immediately"
|
||||
set_pipeline_state "$name" "failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# --- Main ---
|
||||
main() {
|
||||
local mode="${1:-run}"
|
||||
ensure_dirs
|
||||
|
||||
log "=== Pipeline Scheduler ($mode) ==="
|
||||
|
||||
# Check 1: Is inference available?
|
||||
if ! check_inference_available; then
|
||||
log "No inference provider available. Skipping all pipelines."
|
||||
exit 0
|
||||
fi
|
||||
log "Inference: AVAILABLE"
|
||||
|
||||
# Check 2: Is it peak hours?
|
||||
if is_peak_hours && [[ "$mode" != "--force" ]]; then
|
||||
local h=$(now_hour)
|
||||
log "Peak hours ($h:00). Skipping pipeline start. Use --force to override."
|
||||
exit 0
|
||||
fi
|
||||
log "Off-peak: OK"
|
||||
|
||||
# Check 3: Interactive load
|
||||
if ! check_interactive_load && [[ "$mode" != "--force" ]]; then
|
||||
log "High interactive load. Skipping pipeline start."
|
||||
exit 0
|
||||
fi
|
||||
log "Interactive load: OK"
|
||||
|
||||
# Check 4: Token budget
|
||||
local budget=$(get_budget_remaining)
|
||||
log "Token budget remaining: $budget / $TOKEN_DAILY_LIMIT"
|
||||
|
||||
if [[ $budget -le 0 ]]; then
|
||||
log "Daily token budget exhausted. Stopping."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check 5: Pipeline status
|
||||
if [[ "$mode" == "--status" ]]; then
|
||||
echo -e "${CYAN}Pipeline Status:${NC}"
|
||||
echo "────────────────────────────────────────────────────"
|
||||
for entry in "${PIPELINES[@]}"; do
|
||||
IFS='|' read -r name script max_tokens dep <<< "$entry"
|
||||
local state=$(python3 -c "
|
||||
import json, os
|
||||
path = '$STATE_FILE'
|
||||
if not os.path.exists(path):
|
||||
print('not_started')
|
||||
else:
|
||||
with open(path) as f:
|
||||
d = json.load(f)
|
||||
print(d.get('$name', {}).get('state', 'not_started'))
|
||||
" 2>/dev/null || echo "not_started")
|
||||
|
||||
local color=$NC
|
||||
case "$state" in
|
||||
running) color=$YELLOW ;;
|
||||
complete) color=$GREEN ;;
|
||||
failed) color=$RED ;;
|
||||
esac
|
||||
printf " %-25s %b%s%b (max: %s tokens, dep: %s)\n" "$name" "$color" "$state" "$NC" "$max_tokens" "$dep"
|
||||
done
|
||||
echo "────────────────────────────────────────────────────"
|
||||
echo " Budget: $budget / $TOKEN_DAILY_LIMIT tokens remaining"
|
||||
echo " Peak hours: $PEAK_HOURS_START:00 - $PEAK_HOURS_END:00"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Find and start the highest-priority incomplete pipeline
|
||||
local started=0
|
||||
for entry in "${PIPELINES[@]}"; do
|
||||
IFS='|' read -r name script max_tokens dep <<< "$entry"
|
||||
|
||||
# Skip if already running or complete
|
||||
if [[ "$(is_pipeline_running $name)" == "true" ]]; then
|
||||
log "SKIP $name: already running"
|
||||
continue
|
||||
fi
|
||||
if [[ "$(is_pipeline_complete $name)" == "true" ]]; then
|
||||
log "SKIP $name: already complete"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check dependency
|
||||
if ! check_dependency "$dep"; then
|
||||
log "SKIP $name: dependency $dep not met"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Try to start
|
||||
if start_pipeline "$name" "$script" "$max_tokens" "$budget" "$mode"; then
|
||||
started=1
|
||||
# Only start one pipeline per run (let it claim tokens before next check)
|
||||
# Exception: playground-factory and training-factory can run in parallel
|
||||
if [[ "$name" != "playground-factory" && "$name" != "training-factory" ]]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $started -eq 0 ]]; then
|
||||
log "No pipelines to start (all complete, running, or blocked)."
|
||||
fi
|
||||
|
||||
log "=== Pipeline Scheduler done ==="
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
from hermes_tools import browser_navigate, browser_vision
|
||||
|
||||
|
||||
100
training-data/scene-descriptions-hiphop.jsonl
Normal file
100
training-data/scene-descriptions-hiphop.jsonl
Normal file
@@ -0,0 +1,100 @@
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "Started from the basement, counting ceiling stains", "scene": {"mood": "struggle", "colors": ["concrete gray", "sodium orange"], "composition": "aerial city block", "camera_movement": "slow descent", "description": "struggle scene: Started from the basement, counting ceiling stains — aerial city block with concrete gray, sodium orange palette, slow descent camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 2, "timestamp": "0:14", "duration_seconds": 16, "lyric_line": "Empty fridge but the mind is full", "scene": {"mood": "hunger", "colors": ["midnight blue", "streetlight yellow"], "composition": "figure on fire escape", "camera_movement": "tracking up", "description": "hunger scene: Empty fridge but the mind is full — figure on fire escape with midnight blue, streetlight yellow palette, tracking up camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 3, "timestamp": "0:30", "duration_seconds": 15, "lyric_line": "Pen to paper like a surgeon to a wound", "scene": {"mood": "determination", "colors": ["steel gray", "flash of gold"], "composition": "hands writing in notebook", "camera_movement": "close-up macro", "description": "determination scene: Pen to paper like a surgeon to a wound — hands writing in notebook with steel gray, flash of gold palette, close-up macro camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 4, "timestamp": "0:45", "duration_seconds": 18, "lyric_line": "They said I'd never make it — watch me build the stage", "scene": {"mood": "energy", "colors": ["neon green", "black"], "composition": "crowd forming", "camera_movement": "dolly through", "description": "energy scene: They said I'd never make it — watch me build the stage — crowd forming with neon green, black palette, dolly through camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 5, "timestamp": "1:03", "duration_seconds": 14, "lyric_line": "Same face in the mirror, different eyes", "scene": {"mood": "reflection", "colors": ["warm amber", "shadows"], "composition": "mirror reflection", "camera_movement": "rack focus", "description": "reflection scene: Same face in the mirror, different eyes — mirror reflection with warm amber, shadows palette, rack focus camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 6, "timestamp": "1:17", "duration_seconds": 17, "lyric_line": "The city is mine — every block, every dream", "scene": {"mood": "power", "colors": ["gold", "deep red"], "composition": "figure on rooftop", "camera_movement": "crane up revealing", "description": "power scene: The city is mine — every block, every dream — figure on rooftop with gold, deep red palette, crane up revealing camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 7, "timestamp": "1:34", "duration_seconds": 15, "lyric_line": "We made it out — the basement is a palace now", "scene": {"mood": "joy", "colors": ["bright white", "sunrise gold"], "composition": "group celebration", "camera_movement": "handheld energy", "description": "joy scene: We made it out — the basement is a palace now — group celebration with bright white, sunrise gold palette, handheld energy camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 8, "timestamp": "1:49", "duration_seconds": 16, "lyric_line": "Every crack in the sidewalk is a chapter", "scene": {"mood": "gratitude", "colors": ["soft gold", "sky blue"], "composition": "figure looking down at neighborhood", "camera_movement": "over-shoulder", "description": "gratitude scene: Every crack in the sidewalk is a chapter — figure looking down at neighborhood with soft gold, sky blue palette, over-shoulder camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 9, "timestamp": "2:05", "duration_seconds": 14, "lyric_line": "The dream was always real — they just couldn't see it", "scene": {"mood": "resolve", "colors": ["concrete gray → gold"], "composition": "walking forward", "camera_movement": "steadicam follow", "description": "resolve scene: The dream was always real — they just couldn't see it — walking forward with concrete gray → gold palette, steadicam follow camera."}}
|
||||
{"song": "Concrete Dreams", "artist": "Street Prophet", "mood_arc": "struggle → triumph", "beat": 10, "timestamp": "2:19", "duration_seconds": 13, "lyric_line": "Concrete dreams. Built from nothing.", "scene": {"mood": "peace", "colors": ["warm light", "city skyline"], "composition": "wide sunset", "camera_movement": "slow dissolve", "description": "peace scene: Concrete dreams. Built from nothing. — wide sunset with warm light, city skyline palette, slow dissolve camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 1, "timestamp": "0:00", "duration_seconds": 15, "lyric_line": "They watching through the walls, through the wires, through the air", "scene": {"mood": "paranoia", "colors": ["static gray", "red scan lines"], "composition": "surveillance POV", "camera_movement": "glitch cuts", "description": "paranoia scene: They watching through the walls, through the wires, through the air — surveillance POV with static gray, red scan lines palette, glitch cuts camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 2, "timestamp": "0:15", "duration_seconds": 14, "lyric_line": "Too many voices and none of them mine", "scene": {"mood": "anxiety", "colors": ["sickly green", "flickering"], "composition": "crowded room distorted", "camera_movement": "fish-eye warp", "description": "anxiety scene: Too many voices and none of them mine — crowded room distorted with sickly green, flickering palette, fish-eye warp camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 3, "timestamp": "0:29", "duration_seconds": 17, "lyric_line": "BREAK the frequency — find your own signal", "scene": {"mood": "rage", "colors": ["red", "black flash"], "composition": "smashing through barrier", "camera_movement": "impact freeze", "description": "rage scene: BREAK the frequency — find your own signal — smashing through barrier with red, black flash palette, impact freeze camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 4, "timestamp": "0:46", "duration_seconds": 15, "lyric_line": "The noise stops. I can hear myself think.", "scene": {"mood": "clarity", "colors": ["clean white", "single blue"], "composition": "alone in silence", "camera_movement": "still frame", "description": "clarity scene: The noise stops. I can hear myself think. — alone in silence with clean white, single blue palette, still frame camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 5, "timestamp": "1:01", "duration_seconds": 16, "lyric_line": "Found the ghost — it was me the whole time", "scene": {"mood": "discovery", "colors": ["spectrum rainbow", "dark room"], "composition": "equalizer waveform", "camera_movement": "waveform tracking", "description": "discovery scene: Found the ghost — it was me the whole time — equalizer waveform with spectrum rainbow, dark room palette, waveform tracking camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 6, "timestamp": "1:17", "duration_seconds": 18, "lyric_line": "I am the frequency they cannot tune out", "scene": {"mood": "power", "colors": ["electric blue", "void"], "composition": "figure controls the signal", "camera_movement": "orbit around figure", "description": "power scene: I am the frequency they cannot tune out — figure controls the signal with electric blue, void palette, orbit around figure camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 7, "timestamp": "1:35", "duration_seconds": 14, "lyric_line": "The ghost is quiet now. It listens.", "scene": {"mood": "peace", "colors": ["calm blue", "soft static"], "composition": "meditating in noise", "camera_movement": "slow push in", "description": "peace scene: The ghost is quiet now. It listens. — meditating in noise with calm blue, soft static palette, slow push in camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 8, "timestamp": "1:49", "duration_seconds": 16, "lyric_line": "Every frequency is a choice. Choose yours.", "scene": {"mood": "wisdom", "colors": ["warm gold", "gentle gray"], "composition": "teaching figure", "camera_movement": "two-shot medium", "description": "wisdom scene: Every frequency is a choice. Choose yours. — teaching figure with warm gold, gentle gray palette, two-shot medium camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 9, "timestamp": "2:05", "duration_seconds": 15, "lyric_line": "Broadcast on the ghost frequency. They will hear.", "scene": {"mood": "strength", "colors": ["clean signal", "white"], "composition": "broadcast tower", "camera_movement": "vertical crane up", "description": "strength scene: Broadcast on the ghost frequency. They will hear. — broadcast tower with clean signal, white palette, vertical crane up camera."}}
|
||||
{"song": "Ghost Frequency", "artist": "Phantom MC", "mood_arc": "paranoia → clarity", "beat": 10, "timestamp": "2:20", "duration_seconds": 12, "lyric_line": "...", "scene": {"mood": "silence", "colors": ["pure white", "still"], "composition": "empty frame", "camera_movement": "long hold", "description": "silence scene: ... — empty frame with pure white, still palette, long hold camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 1, "timestamp": "0:00", "duration_seconds": 13, "lyric_line": "A-B-C, easy as 1-2-3, but the cipher is 7-4-1", "scene": {"mood": "playful", "colors": ["bright primary colors", "white"], "composition": "graffiti wall", "camera_movement": "pan reveal", "description": "playful scene: A-B-C, easy as 1-2-3, but the cipher is 7-4-1 — graffiti wall with bright primary colors, white palette, pan reveal camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 2, "timestamp": "0:13", "duration_seconds": 15, "lyric_line": "Step up to the cipher circle, show me what you got", "scene": {"mood": "competitive", "colors": ["two-tone contrast", "spotlight"], "composition": "two MCs facing", "camera_movement": "split screen", "description": "competitive scene: Step up to the cipher circle, show me what you got — two MCs facing with two-tone contrast, spotlight palette, split screen camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 3, "timestamp": "0:28", "duration_seconds": 17, "lyric_line": "Every bar is a blade — sharpened by the block", "scene": {"mood": "fierce", "colors": ["fire orange", "smoke black"], "composition": "mic close-up", "camera_movement": "rapid cuts", "description": "fierce scene: Every bar is a blade — sharpened by the block — mic close-up with fire orange, smoke black palette, rapid cuts camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 4, "timestamp": "0:45", "duration_seconds": 14, "lyric_line": "Metaphor on metaphor — the meaning is the maze", "scene": {"mood": "wit", "colors": ["neon yellow", "dark purple"], "composition": "word cloud forming", "camera_movement": "zoom into text", "description": "wit scene: Metaphor on metaphor — the meaning is the maze — word cloud forming with neon yellow, dark purple palette, zoom into text camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 5, "timestamp": "0:59", "duration_seconds": 16, "lyric_line": "The crown was always made of words, not gold", "scene": {"mood": "dominance", "colors": ["gold", "black"], "composition": "crown close-up", "camera_movement": "slow rotation", "description": "dominance scene: The crown was always made of words, not gold — crown close-up with gold, black palette, slow rotation camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 6, "timestamp": "1:15", "duration_seconds": 15, "lyric_line": "When the cipher bows, the kings emerge", "scene": {"mood": "respect", "colors": ["warm amber", "stage light"], "composition": "audience reaction", "camera_movement": "crowd POV", "description": "respect scene: When the cipher bows, the kings emerge — audience reaction with warm amber, stage light palette, crowd POV camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 7, "timestamp": "1:30", "duration_seconds": 17, "lyric_line": "The circle was never about winning — it's about the words", "scene": {"mood": "celebration", "colors": ["confetti colors", "warm light"], "composition": "group embrace", "camera_movement": "circular dolly", "description": "celebration scene: The circle was never about winning — it's about the words — group embrace with confetti colors, warm light palette, circular dolly camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 8, "timestamp": "1:47", "duration_seconds": 14, "lyric_line": "Same circle, same fire, new kings", "scene": {"mood": "legacy", "colors": ["sepia", "gold"], "composition": "old cipher circle photo", "camera_movement": "fade from old to new", "description": "legacy scene: Same circle, same fire, new kings — old cipher circle photo with sepia, gold palette, fade from old to new camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 9, "timestamp": "2:01", "duration_seconds": 16, "lyric_line": "The cipher sleeps but the words never do", "scene": {"mood": "peace", "colors": ["sunset orange", "cool blue"], "composition": "walking away from circle", "camera_movement": "tracking behind", "description": "peace scene: The cipher sleeps but the words never do — walking away from circle with sunset orange, cool blue palette, tracking behind camera."}}
|
||||
{"song": "Cipher Kings", "artist": "Word Lab", "mood_arc": "playful → fierce", "beat": 10, "timestamp": "2:17", "duration_seconds": 13, "lyric_line": "Tomorrow the circle reforms. I'll be ready.", "scene": {"mood": "resolve", "colors": ["midnight", "single star"], "composition": "figure writing alone", "camera_movement": "close-up hands", "description": "resolve scene: Tomorrow the circle reforms. I'll be ready. — figure writing alone with midnight, single star palette, close-up hands camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "Upload my soul to the mainframe tonight", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: Upload my soul to the mainframe tonight — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Pixel hearts beating at 120 BPM", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Pixel hearts beating at 120 BPM — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "Error code: love not found", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: Error code: love not found — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "The algorithm learned my name", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: The algorithm learned my name — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "Download hope at 5G speed", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: Download hope at 5G speed — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "Binary tears on a silicon face", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: Binary tears on a silicon face — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "Reboot the heart, restart the dream", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: Reboot the heart, restart the dream — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "The firewall crumbles when you smile", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: The firewall crumbles when you smile — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "I am the virus they cannot delete", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: I am the virus they cannot delete — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "404 Soul", "artist": "Digital Ghost", "mood_arc": "isolation → connection", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "Signal restored. Connection made.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: Signal restored. Connection made. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "The block is alive when the speakers hit", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: The block is alive when the speakers hit — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Neighbors become family under the bass", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Neighbors become family under the bass — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "Dance floor is the only democracy", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: Dance floor is the only democracy — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "Every step is a vote for joy", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: Every step is a vote for joy — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "The DJ is the mayor tonight", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: The DJ is the mayor tonight — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "Sweat and laughter, the only currency", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: Sweat and laughter, the only currency — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "When the music stops, we are still here", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: When the music stops, we are still here — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "The block party never really ends", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: The block party never really ends — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "Tomorrow we clean up together", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: Tomorrow we clean up together — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Block Party", "artist": "Neighborhood Watch", "mood_arc": "community joy", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "Community is the beat that never stops.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: Community is the beat that never stops. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "Needle and ink tell the story skin can't", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: Needle and ink tell the story skin can't — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Every scar became a constellation", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Every scar became a constellation — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "The artist and the wound are one", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: The artist and the wound are one — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "Pain is the palette, beauty is the brush", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: Pain is the palette, beauty is the brush — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "My body is the gallery they can't close", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: My body is the gallery they can't close — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "The tattoo artist is a surgeon of stories", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: The tattoo artist is a surgeon of stories — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "Ink fades but the story deepens", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: Ink fades but the story deepens — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "I am the canvas and the artist both", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: I am the canvas and the artist both — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "The needle says: remember", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: The needle says: remember — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Ink & Iron", "artist": "Tattoo Poet", "mood_arc": "pain → art → meaning", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "Art is what survives the pain.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: Art is what survives the pain. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "The 7:15 is my meditation room", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: The 7:15 is my meditation room — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Strangers sharing silence like monks", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Strangers sharing silence like monks — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "Every stop is a small death and rebirth", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: Every stop is a small death and rebirth — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "The conductor is the last philosopher", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: The conductor is the last philosopher — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "Watch the city blur into abstraction", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: Watch the city blur into abstraction — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "My reflection in the window: stranger or self?", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: My reflection in the window: stranger or self? — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "The tunnel is not darkness — it's transition", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: The tunnel is not darkness — it's transition — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "Above ground, the world. Below, the mind", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: Above ground, the world. Below, the mind — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "This train goes nowhere I haven't been", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: This train goes nowhere I haven't been — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Metro Lines", "artist": "Subway Sage", "mood_arc": "commute meditation", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "But the ride is the point.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: But the ride is the point. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "Three AM and the code is still compiling", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: Three AM and the code is still compiling — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Coffee is the real minimum viable product", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Coffee is the real minimum viable product — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "The screen glows like a campfire for the lonely", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: The screen glows like a campfire for the lonely — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "Bug fixes at midnight: digital monks", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: Bug fixes at midnight: digital monks — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "The server hums my lullaby", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: The server hums my lullaby — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "Debug by moonlight, deploy by dawn", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: Debug by moonlight, deploy by dawn — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "The graveyard shift owns the night", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: The graveyard shift owns the night — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "We are the ghosts that keep the lights on", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: We are the ghosts that keep the lights on — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "Sunrise is the pull request", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: Sunrise is the pull request — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Midnight Shift", "artist": "Graveyard Flow", "mood_arc": "exhaustion → defiance", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "Every night shift ends in a merge.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: Every night shift ends in a merge. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "No signal. No WiFi. No problem.", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: No signal. No WiFi. No problem. — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "The dead zone is where the real talk happens", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: The dead zone is where the real talk happens — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "Disconnect to reconnect — the oldest algorithm", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: Disconnect to reconnect — the oldest algorithm — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "The bars dropped: phone and soul", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: The bars dropped: phone and soul — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "In the silence I hear my own frequency", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: In the silence I hear my own frequency — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "The dead zone is not dead — it's listening", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: The dead zone is not dead — it's listening — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "Reconnection starts with disconnection", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: Reconnection starts with disconnection — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "When the signal returns, I choose not to answer", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: When the signal returns, I choose not to answer — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "The dead zone taught me presence", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: The dead zone taught me presence — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Signal Lost", "artist": "Dead Zone", "mood_arc": "disconnection → reconnection", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "Signal lost. Self found.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: Signal lost. Self found. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 1, "timestamp": "0:00", "duration_seconds": 14, "lyric_line": "The bodega is open 24/7 so are the dreams", "scene": {"mood": "opening", "colors": ["city gray", "dawn"], "composition": "establishing shot", "camera_movement": "slow zoom", "description": "opening scene: The bodega is open 24/7 so are the dreams — establishing shot with city gray, dawn palette, slow zoom camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 2, "timestamp": "0:15", "duration_seconds": 15, "lyric_line": "Behind the counter: a PhD in survival", "scene": {"mood": "tension", "colors": ["dark", "neon accent"], "composition": "close-up", "camera_movement": "handheld", "description": "tension scene: Behind the counter: a PhD in survival — close-up with dark, neon accent palette, handheld camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 3, "timestamp": "0:30", "duration_seconds": 16, "lyric_line": "Every item on the shelf is a small miracle", "scene": {"mood": "explosion", "colors": ["bright", "contrast"], "composition": "wide action", "camera_movement": "rapid movement", "description": "explosion scene: Every item on the shelf is a small miracle — wide action with bright, contrast palette, rapid movement camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 4, "timestamp": "0:45", "duration_seconds": 17, "lyric_line": "The lottery tickets are prayers in latex", "scene": {"mood": "reflection", "colors": ["warm", "shadows"], "composition": "medium shot", "camera_movement": "steady", "description": "reflection scene: The lottery tickets are prayers in latex — medium shot with warm, shadows palette, steady camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 5, "timestamp": "1:00", "duration_seconds": 18, "lyric_line": "Coffee for a dollar, hope for free", "scene": {"mood": "struggle", "colors": ["muted", "single pop"], "composition": "figure alone", "camera_movement": "tracking", "description": "struggle scene: Coffee for a dollar, hope for free — figure alone with muted, single pop palette, tracking camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 6, "timestamp": "1:15", "duration_seconds": 14, "lyric_line": "The bodega cat knows all the secrets", "scene": {"mood": "breakthrough", "colors": ["gold", "white"], "composition": "ascending", "camera_movement": "crane up", "description": "breakthrough scene: The bodega cat knows all the secrets — ascending with gold, white palette, crane up camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 7, "timestamp": "1:30", "duration_seconds": 15, "lyric_line": "Corner store: the real community center", "scene": {"mood": "community", "colors": ["warm crowd", "light"], "composition": "group shot", "camera_movement": "sweeping pan", "description": "community scene: Corner store: the real community center — group shot with warm crowd, light palette, sweeping pan camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 8, "timestamp": "1:45", "duration_seconds": 16, "lyric_line": "Dreams don't close at midnight", "scene": {"mood": "resolve", "colors": ["strong", "clear"], "composition": "profile", "camera_movement": "push in", "description": "resolve scene: Dreams don't close at midnight — profile with strong, clear palette, push in camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 9, "timestamp": "2:00", "duration_seconds": 17, "lyric_line": "The owner came here with nothing — now everything", "scene": {"mood": "peace", "colors": ["soft", "dawn"], "composition": "wide landscape", "camera_movement": "steady wide", "description": "peace scene: The owner came here with nothing — now everything — wide landscape with soft, dawn palette, steady wide camera."}}
|
||||
{"song": "Corner Store", "artist": "Bodega Dreams", "mood_arc": "small world → big dreams", "beat": 10, "timestamp": "2:15", "duration_seconds": 18, "lyric_line": "The corner store is the first chapter.", "scene": {"mood": "ending", "colors": ["fade", "single accent"], "composition": "empty frame", "camera_movement": "dissolve", "description": "ending scene: The corner store is the first chapter. — empty frame with fade, single accent palette, dissolve camera."}}
|
||||
100
training-data/scene-descriptions-rock.jsonl
Normal file
100
training-data/scene-descriptions-rock.jsonl
Normal file
@@ -0,0 +1,100 @@
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "The screen door slams, Mary's dress waves", "scene": {"mood": "hope", "colors": ["gold", "sky blue", "white"], "composition": "wide shot", "camera": "static", "description": "Open horizon. Golden light breaking through clouds. The figure silhouetted against dawn. The screen door slams, Mary's dress waves"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Like a vision she dances across the porch as the radio plays", "scene": {"mood": "anticipation", "colors": ["silver", "pale green", "cream"], "composition": "close-up", "camera": "slow pan", "description": "Close on hands gripping a steering wheel. Dashboard lights reflecting in eyes. Road stretching ahead. Like a vision she dances across the porch as the radio plays"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "Roy Orbison singing for the lonely, hey that's me and I want you only", "scene": {"mood": "energy", "colors": ["red", "orange", "electric blue"], "composition": "over the shoulder", "camera": "dolly in", "description": "Rapid cuts. Bodies in motion. Light streaks across the frame. Roy Orbison singing for the lonely, hey that's me and I want you only"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Don't turn me home out now I'm so young and worthless still", "scene": {"mood": "triumph", "colors": ["gold", "crimson", "white"], "composition": "low angle", "camera": "dolly out", "description": "Wide shot. Figure standing on a hilltop. Arms raised. City lights below. Don't turn me home out now I'm so young and worthless still"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "The night's busting open these two lanes will take us anywhere", "scene": {"mood": "nostalgia", "colors": ["amber", "sepia", "dusty rose"], "composition": "high angle", "camera": "handheld", "description": "Sepia tones. A photograph come to life. Dust motes in afternoon light. The night's busting open these two lanes will take us anywhere"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "We got one last chance to make it real", "scene": {"mood": "urgency", "colors": ["red", "black", "strobe white"], "composition": "dutch angle", "camera": "steadicam", "description": "Handheld camera running. Blurred faces. Traffic. Heartbeat sound design. We got one last chance to make it real"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "To trade in these wings on some wheels", "scene": {"mood": "passion", "colors": ["deep red", "burgundy", "gold"], "composition": "symmetrical", "camera": "slow zoom", "description": "Extreme close-up. Skin. Breath visible in cold air. Eyes locked. To trade in these wings on some wheels"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Climb in back, heaven's waiting down the tracks", "scene": {"mood": "defiance", "colors": ["black", "neon green", "chrome"], "composition": "rule of thirds", "camera": "crane up", "description": "Low angle. Figure standing against the wind. Debris flying past. Unmoved. Climb in back, heaven's waiting down the tracks"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Oh oh oh oh oh oh oh", "scene": {"mood": "release", "colors": ["sky blue", "white", "pale gold"], "composition": "extreme wide", "camera": "tracking shot", "description": "Slow motion. Something falling \u2014 a mask, a chain, a weight. Lightness follows. Oh oh oh oh oh oh oh"}}
|
||||
{"song": "Thunder Road", "artist": "Heartland", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "It's a town full of losers and I'm pulling out of here to win", "scene": {"mood": "catharsis", "colors": ["all white", "silver", "clear"], "composition": "medium shot", "camera": "slow tilt down", "description": "White space expanding. Figure dissolving into light. Peace in the dissolution. It's a town full of losers and I'm pulling out of here to win"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Woke up on the floor again, whiskey still on my tongue", "scene": {"mood": "despair", "colors": ["navy", "black", "grey"], "composition": "wide shot", "camera": "static", "description": "Empty room. Single light source. Figure curled in corner. Rain on windows. Woke up on the floor again, whiskey still on my tongue"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "The mirror shows a stranger and the damage that I've done", "scene": {"mood": "anger", "colors": ["red", "black", "orange"], "composition": "close-up", "camera": "slow pan", "description": "Shattered glass. Red light. Hands clenched. Jaw tight. The frame vibrates. The mirror shows a stranger and the damage that I've done"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "I scream until my throat bleeds but nobody comes", "scene": {"mood": "frenzy", "colors": ["strobe", "red", "white flash"], "composition": "over the shoulder", "camera": "dolly in", "description": "Strobe lighting. Multiple exposures. Bodies colliding. Chaos as composition. I scream until my throat bleeds but nobody comes"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "The walls are closing in again, the ceiling pressing down", "scene": {"mood": "exhaustion", "colors": ["grey", "brown", "faded"], "composition": "low angle", "camera": "dolly out", "description": "Static shot. Figure slumped. Eyes half-closed. Time passing in shadows. The walls are closing in again, the ceiling pressing down"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "I tried to call your number but you changed it years ago", "scene": {"mood": "resignation", "colors": ["grey", "muted blue", "beige"], "composition": "high angle", "camera": "handheld", "description": "Medium shot. Hands dropping keys on a table. Turning away. Not looking back. I tried to call your number but you changed it years ago"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "Now I'm howling at the moon like some rabid dog I know", "scene": {"mood": "grief", "colors": ["deep purple", "black", "silver"], "composition": "dutch angle", "camera": "steadicam", "description": "Wide shot. Figure alone in vast space. Dark purple sky. No horizon line. Now I'm howling at the moon like some rabid dog I know"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Every bone remembers what my mind wants to forget", "scene": {"mood": "numbness", "colors": ["white", "grey", "no color"], "composition": "symmetrical", "camera": "slow zoom", "description": "Desaturated. Figure staring at nothing. World moving around them in blur. Every bone remembers what my mind wants to forget"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "I'll tear this whole house down before the sun comes up", "scene": {"mood": "rage", "colors": ["fire red", "black", "ember orange"], "composition": "rule of thirds", "camera": "crane up", "description": "Red wash. Extreme close-up on eyes. Fire reflected in pupils. I'll tear this whole house down before the sun comes up"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Ash and ruin everywhere, this is all that's left", "scene": {"mood": "acceptance", "colors": ["soft blue", "warm grey", "sage"], "composition": "extreme wide", "camera": "tracking shot", "description": "Soft focus. Gentle light. Figure breathing. The camera doesn't judge. Ash and ruin everywhere, this is all that's left"}}
|
||||
{"song": "Black Dog Howl", "artist": "Rust & Wire", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Silence. Just the wind through broken glass.", "scene": {"mood": "silence", "colors": ["black", "void", "faint starlight"], "composition": "medium shot", "camera": "slow tilt down", "description": "Black screen. Faint starlight. The sound drops out completely. Silence. Just the wind through broken glass."}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Ten thousand miles of static between your voice and mine", "scene": {"mood": "wonder", "colors": ["aurora green", "violet", "silver"], "composition": "wide shot", "camera": "static", "description": "Northern lights overhead. Figure looking up. Mouth open. Child's expression. Ten thousand miles of static between your voice and mine"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "I trace your constellation on the dashboard every night", "scene": {"mood": "isolation", "colors": ["cold blue", "black", "distant starlight"], "composition": "close-up", "camera": "slow pan", "description": "Extreme wide. Single figure. Vast empty landscape. Scale crushing. I trace your constellation on the dashboard every night"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "The signal fades to nothing but I keep the frequency", "scene": {"mood": "longing", "colors": ["teal", "silver", "moonlight"], "composition": "over the shoulder", "camera": "dolly in", "description": "Through a window. Figure on the other side. Glass between. Breath on the pane. The signal fades to nothing but I keep the frequency"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Then suddenly your laughter breaks through like a summer storm", "scene": {"mood": "connection", "colors": ["warm gold", "rose", "blush"], "composition": "low angle", "camera": "dolly out", "description": "Two hands reaching. Fingers almost touching. Warm light between them. Then suddenly your laughter breaks through like a summer storm"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "We're dancing in the data stream, our pixels intertwined", "scene": {"mood": "euphoria", "colors": ["neon", "rainbow", "white flash"], "composition": "high angle", "camera": "handheld", "description": "Overexposed. Everything bright. Dancing. The frame can't contain the joy. We're dancing in the data stream, our pixels intertwined"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "But I can't tell if you're real or just a ghost in the machine", "scene": {"mood": "confusion", "colors": ["swirling", "unsettled", "green-grey"], "composition": "dutch angle", "camera": "steadicam", "description": "Multiple focal points. Nothing sharp. The viewer doesn't know where to look. But I can't tell if you're real or just a ghost in the machine"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "The picture clears and there you are \u2014 imperfect, warm, alive", "scene": {"mood": "clarity", "colors": ["clear blue", "white", "crisp"], "composition": "symmetrical", "camera": "slow zoom", "description": "Rack focus. Background blurs, foreground sharpens. Suddenly everything makes sense. The picture clears and there you are \u2014 imperfect, warm, alive"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Your hand reaches through the screen, I swear I feel the heat", "scene": {"mood": "tenderness", "colors": ["blush pink", "warm cream", "soft gold"], "composition": "rule of thirds", "camera": "crane up", "description": "Close on a hand touching a face. Soft light. Shallow depth of field. Your hand reaches through the screen, I swear I feel the heat"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "The bandwidth's dying, say it now before the link goes dark", "scene": {"mood": "urgency", "colors": ["red", "black", "strobe white"], "composition": "extreme wide", "camera": "tracking shot", "description": "Handheld camera running. Blurred faces. Traffic. Heartbeat sound design. The bandwidth's dying, say it now before the link goes dark"}}
|
||||
{"song": "Satellite Hearts", "artist": "Neon Circuit", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Goodnight, satellite heart. I'll find you in the static.", "scene": {"mood": "bittersweet", "colors": ["amber", "lavender", "fading light"], "composition": "medium shot", "camera": "slow tilt down", "description": "Amber light fading. A smile that's also a goodbye. Beautiful and sad at once. Goodnight, satellite heart. I'll find you in the static."}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "They paved over every green thing when the developers came", "scene": {"mood": "oppression", "colors": ["concrete grey", "brown", "exhaust fume yellow"], "composition": "wide shot", "camera": "static", "description": "Concrete. Overpasses. No sky visible. Figures small against infrastructure. They paved over every green thing when the developers came"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "But we planted seeds between the cracks and gave them all a name", "scene": {"mood": "resilience", "colors": ["green", "cracked concrete", "gold"], "composition": "close-up", "camera": "slow pan", "description": "Crack in pavement. Green shoot pushing through. Macro lens. But we planted seeds between the cracks and gave them all a name"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "The mayor says progress looks like demolition and dust", "scene": {"mood": "anger", "colors": ["red", "black", "orange"], "composition": "over the shoulder", "camera": "dolly in", "description": "Shattered glass. Red light. Hands clenched. Jaw tight. The frame vibrates. The mayor says progress looks like demolition and dust"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "But a dandelion broke through the asphalt this morning \u2014 that's us", "scene": {"mood": "beauty", "colors": ["wildflower colors", "green", "sunlight"], "composition": "low angle", "camera": "dolly out", "description": "Wildflowers in unexpected places. Color against grey. Nature reclaiming. But a dandelion broke through the asphalt this morning \u2014 that's us"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "You can't kill what wants to live, can't silence what must sing", "scene": {"mood": "defiance", "colors": ["black", "neon green", "chrome"], "composition": "high angle", "camera": "handheld", "description": "Low angle. Figure standing against the wind. Debris flying past. Unmoved. You can't kill what wants to live, can't silence what must sing"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "We're the roots beneath the road, we're the birds that built on string", "scene": {"mood": "community", "colors": ["warm tones", "string lights", "firelight"], "composition": "dutch angle", "camera": "steadicam", "description": "String lights. People gathered. Laughter out of focus. Warmth as visual language. We're the roots beneath the road, we're the birds that built on string"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "When they tear the next block down we'll be dancing in the rubble", "scene": {"mood": "joy", "colors": ["bright", "multi", "saturated"], "composition": "symmetrical", "camera": "slow zoom", "description": "Saturated color. Wide smiles. Arms open. The world in full bloom. When they tear the next block down we'll be dancing in the rubble"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Every protest is a garden, every march plants something new", "scene": {"mood": "struggle", "colors": ["dust", "grey", "hard light"], "composition": "rule of thirds", "camera": "crane up", "description": "Close on hands working. Calluses. Dust. Effort visible in every frame. Every protest is a garden, every march plants something new"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "The concrete is a drum and our footsteps keep the beat", "scene": {"mood": "growth", "colors": ["green", "brown", "morning light"], "composition": "extreme wide", "camera": "tracking shot", "description": "Time-lapse. Seed to flower. Sunrise to sunset. Transformation as rhythm. The concrete is a drum and our footsteps keep the beat"}}
|
||||
{"song": "Concrete Garden", "artist": "Streetlight Prophet", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Tomorrow there'll be flowers where they swore there'd only be defeat", "scene": {"mood": "hope", "colors": ["gold", "sky blue", "white"], "composition": "medium shot", "camera": "slow tilt down", "description": "Open horizon. Golden light breaking through clouds. The figure silhouetted against dawn. Tomorrow there'll be flowers where they swore there'd only be defeat"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "I felt the pull before I saw the edge", "scene": {"mood": "dread", "colors": ["void black", "deep red", "cold white"], "composition": "wide shot", "camera": "static", "description": "Corner of frame. Something in the periphery. Dark. The camera doesn't look directly. I felt the pull before I saw the edge"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "The stars bent sideways, light itself was dead", "scene": {"mood": "fascination", "colors": ["event horizon purple", "gravitational lens blue"], "composition": "close-up", "camera": "slow pan", "description": "Close on eyes. Reflection of something impossible. The pupil expands. The stars bent sideways, light itself was dead"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "I could have turned the ship around but something in me said stay", "scene": {"mood": "surrender", "colors": ["white", "dissolution", "prismatic"], "composition": "over the shoulder", "camera": "dolly in", "description": "Arms opening. Head back. Falling backward into something vast. I could have turned the ship around but something in me said stay"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "The event horizon glows like a halo made of nothing", "scene": {"mood": "awe", "colors": ["starfield", "nebula colors", "infinite dark"], "composition": "low angle", "camera": "dolly out", "description": "Wide shot of cosmos. Nebula. Stars being born. Human figure tiny at bottom. The event horizon glows like a halo made of nothing"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Time stretches thin as wire, each second takes a year", "scene": {"mood": "terror", "colors": ["black", "red shift", "distortion"], "composition": "high angle", "camera": "handheld", "description": "Shaking camera. Red shift. Something approaching fast. The frame distorts. Time stretches thin as wire, each second takes a year"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "I am both the observer and the thing that disappears", "scene": {"mood": "peace", "colors": ["deep space black", "starlight", "calm"], "composition": "dutch angle", "camera": "steadicam", "description": "Still water. Stars reflected. Perfect mirror. No movement. No sound. I am both the observer and the thing that disappears"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "My body reads the tidal forces like sheet music played on bone", "scene": {"mood": "disorientation", "colors": ["warped", "chromatic aberration", "bent light"], "composition": "symmetrical", "camera": "slow zoom", "description": "Warped lens. Vertigo. Walls becoming floor. Gravity is a suggestion. My body reads the tidal forces like sheet music played on bone"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "I stop fighting, stop reaching, stop calling home", "scene": {"mood": "acceptance", "colors": ["soft blue", "warm grey", "sage"], "composition": "rule of thirds", "camera": "crane up", "description": "Soft focus. Gentle light. Figure breathing. The camera doesn't judge. I stop fighting, stop reaching, stop calling home"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "There is a peace in dissolution I was never meant to know", "scene": {"mood": "transcendence", "colors": ["pure white", "beyond visible", "golden"], "composition": "extreme wide", "camera": "tracking shot", "description": "Pure white expanding. Figure becoming light. Boundaries dissolving. There is a peace in dissolution I was never meant to know"}}
|
||||
{"song": "Gravity Well", "artist": "Void Walker", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Singularity. Silence. Everything and nothing both at once.", "scene": {"mood": "emptiness", "colors": ["void", "absolute black", "nothing"], "composition": "medium shot", "camera": "slow tilt down", "description": "Absolute black. No stars. No reference point. The void looking back. Singularity. Silence. Everything and nothing both at once."}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "My father's hands smelled like machine oil and prayer", "scene": {"mood": "nostalgia", "colors": ["amber", "sepia", "dusty rose"], "composition": "wide shot", "camera": "static", "description": "Sepia tones. A photograph come to life. Dust motes in afternoon light. My father's hands smelled like machine oil and prayer"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "The factory whistle was our clock, the shift was our calendar", "scene": {"mood": "sadness", "colors": ["grey", "rain", "muted blue"], "composition": "close-up", "camera": "slow pan", "description": "Rain on glass. Grey light. A cup of tea going cold. Still life of loss. The factory whistle was our clock, the shift was our calendar"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "He'd come home at midnight, wake me up to say goodnight", "scene": {"mood": "tenderness", "colors": ["blush pink", "warm cream", "soft gold"], "composition": "over the shoulder", "camera": "dolly in", "description": "Close on a hand touching a face. Soft light. Shallow depth of field. He'd come home at midnight, wake me up to say goodnight"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Now the mill is just a skeleton and he's been gone ten years", "scene": {"mood": "loss", "colors": ["faded", "dusty", "empty space"], "composition": "low angle", "camera": "dolly out", "description": "Empty chair. Dust settling. A coat still on a hook. Presence of absence. Now the mill is just a skeleton and he's been gone ten years"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "But the river still runs brown with memory and rust", "scene": {"mood": "beauty", "colors": ["wildflower colors", "green", "sunlight"], "composition": "high angle", "camera": "handheld", "description": "Wildflowers in unexpected places. Color against grey. Nature reclaiming. But the river still runs brown with memory and rust"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "I found his lunchbox in the attic, coffee stains still fresh", "scene": {"mood": "resignation", "colors": ["grey", "muted blue", "beige"], "composition": "dutch angle", "camera": "steadicam", "description": "Medium shot. Hands dropping keys on a table. Turning away. Not looking back. I found his lunchbox in the attic, coffee stains still fresh"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "Some things don't decay \u2014 they just learn to hold still", "scene": {"mood": "love", "colors": ["neutral"], "composition": "symmetrical", "camera": "slow zoom", "description": "Visual interpretation of: Some things don't decay \u2014 they just learn to hold still"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "I hum the songs he hummed to me though I've forgotten half the words", "scene": {"mood": "weariness", "colors": ["grey-brown", "faded", "dim"], "composition": "rule of thirds", "camera": "crane up", "description": "Slow movement. Heavy eyelids. The world in faded tones. Everything too much. I hum the songs he hummed to me though I've forgotten half the words"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "The town's half-empty but the porch lights still come on at dusk", "scene": {"mood": "quiet hope", "colors": ["faint warm light", "candle glow", "dawn grey"], "composition": "extreme wide", "camera": "tracking shot", "description": "Faint warm light. Candle in dark room. Just enough to see by. The town's half-empty but the porch lights still come on at dusk"}}
|
||||
{"song": "Rust Belt Lullaby", "artist": "Iron & Ember", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Sleep now, rust belt baby. The furnace keeps us warm.", "scene": {"mood": "peace", "colors": ["deep space black", "starlight", "calm"], "composition": "medium shot", "camera": "slow tilt down", "description": "Still water. Stars reflected. Perfect mirror. No movement. No sound. Sleep now, rust belt baby. The furnace keeps us warm."}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "I didn't start the fire but I brought the gasoline", "scene": {"mood": "fury", "colors": ["dark red", "black", "flash"], "composition": "wide shot", "camera": "static", "description": "Dark red wash. Hands destroying. Frame shaking with rage. I didn't start the fire but I brought the gasoline"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Every sermon needs a spark and every spark needs a dream", "scene": {"mood": "ecstasy", "colors": ["fire", "gold", "blinding white"], "composition": "close-up", "camera": "slow pan", "description": "Fire and gold. Bodies arching. Light bursting from every surface. Every sermon needs a spark and every spark needs a dream"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "The forest is a cathedral and the flames are choir boys singing", "scene": {"mood": "chaos", "colors": ["strobe", "fragmented", "clashing"], "composition": "over the shoulder", "camera": "dolly in", "description": "Fragmented frame. Collage. Everything at once. Order is a memory. The forest is a cathedral and the flames are choir boys singing"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Watch the old world burn \u2014 isn't the light beautiful?", "scene": {"mood": "joy", "colors": ["bright", "multi", "saturated"], "composition": "low angle", "camera": "dolly out", "description": "Saturated color. Wide smiles. Arms open. The world in full bloom. Watch the old world burn \u2014 isn't the light beautiful?"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "We'll dance in the embers, we'll make love in the ash", "scene": {"mood": "destruction", "colors": ["fire", "ash", "smoke orange"], "composition": "high angle", "camera": "handheld", "description": "Fire. Ash falling like snow. Structures collapsing. Beautiful in its terrible way. We'll dance in the embers, we'll make love in the ash"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "From destruction comes the soil where new things grow at last", "scene": {"mood": "creation", "colors": ["green", "light", "warm gold"], "composition": "dutch angle", "camera": "steadicam", "description": "Hands shaping clay. Light emerging from dark. Something new being born. From destruction comes the soil where new things grow at last"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "But don't mistake the warmth for safety, don't mistake the glow for home", "scene": {"mood": "warning", "colors": ["red flash", "amber", "siren"], "composition": "symmetrical", "camera": "slow zoom", "description": "Red flash. Siren light. The calm before. Then: impact. But don't mistake the warmth for safety, don't mistake the glow for home"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Come closer, come closer \u2014 I promise the burning feels like flying", "scene": {"mood": "invitation", "colors": ["warm", "open", "golden"], "composition": "rule of thirds", "camera": "crane up", "description": "Open door. Warm light spilling out. A hand extended. Come in. Come closer, come closer \u2014 I promise the burning feels like flying"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "We threw everything we owned into the blaze and laughed", "scene": {"mood": "abandon", "colors": ["wild", "free", "untethered"], "composition": "extreme wide", "camera": "tracking shot", "description": "Running through a field. Hair wild. No destination. Just movement. We threw everything we owned into the blaze and laughed"}}
|
||||
{"song": "Wildfire Sermon", "artist": "Prophet Ash", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Morning. Smoke. Green shoots. Begin again.", "scene": {"mood": "rebirth", "colors": ["green shoots", "dawn", "clear"], "composition": "medium shot", "camera": "slow tilt down", "description": "Dawn. Green shoots in ash. First breath after drowning. Morning. Smoke. Green shoots. Begin again."}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "There's a voice on the radio that shouldn't be there", "scene": {"mood": "mystery", "colors": ["deep blue", "shadow", "candle"], "composition": "wide shot", "camera": "static", "description": "Shadow figure in doorway. Candle. Face half-lit. Eyes knowing. There's a voice on the radio that shouldn't be there"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Speaking my name in a language I almost understand", "scene": {"mood": "loneliness", "colors": ["single light", "dark", "cold blue"], "composition": "close-up", "camera": "slow pan", "description": "Single light in vast dark. Figure beneath it. Nothing else. Speaking my name in a language I almost understand"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "I turn the dial but it follows like a shadow made of sound", "scene": {"mood": "curiosity", "colors": ["warm yellow", "spotlight", "discovery"], "composition": "over the shoulder", "camera": "dolly in", "description": "Light moving across a surface. Discovery. Eyes widening. I turn the dial but it follows like a shadow made of sound"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "Then it says something only I would know, something buried deep", "scene": {"mood": "connection", "colors": ["warm gold", "rose", "blush"], "composition": "low angle", "camera": "dolly out", "description": "Two hands reaching. Fingers almost touching. Warm light between them. Then it says something only I would know, something buried deep"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "I'm not afraid anymore \u2014 I'm listening", "scene": {"mood": "paranoia", "colors": ["surveillance green", "strobe", "red"], "composition": "high angle", "camera": "handheld", "description": "Surveillance angles. Green tint. Multiple screens. Watching. Being watched. I'm not afraid anymore \u2014 I'm listening"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "The voice knows my dreams, it describes them back to me", "scene": {"mood": "intimacy", "colors": ["candlelight", "warm", "close"], "composition": "dutch angle", "camera": "steadicam", "description": "Candlelight only. Two faces close. Shared breath. The world outside forgotten. The voice knows my dreams, it describes them back to me"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "We're having a conversation across some membrane I can't see", "scene": {"mood": "urgency", "colors": ["red", "black", "strobe white"], "composition": "symmetrical", "camera": "slow zoom", "description": "Handheld camera running. Blurred faces. Traffic. Heartbeat sound design. We're having a conversation across some membrane I can't see"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "Then static. Then nothing. Then a whisper: find me", "scene": {"mood": "disconnection", "colors": ["static", "grey", "broken signal"], "composition": "rule of thirds", "camera": "crane up", "description": "Static. Snow on screen. A voice breaking up. Distance measured in noise. Then static. Then nothing. Then a whisper: find me"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "I search every frequency but the voice is gone", "scene": {"mood": "searching", "colors": ["flashlight beam", "dark", "moving light"], "composition": "extreme wide", "camera": "tracking shot", "description": "Flashlight beam cutting dark. Moving. Looking. Not finding yet. I search every frequency but the voice is gone"}}
|
||||
{"song": "Midnight Transmission", "artist": "Frequency Ghost", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Some nights I still hear it, faint, like a song in another room", "scene": {"mood": "haunting", "colors": ["faint blue", "echo", "silver"], "composition": "medium shot", "camera": "slow tilt down", "description": "Faint blue light. Echo of a figure. Present and absent simultaneously. Some nights I still hear it, faint, like a song in another room"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "I wore your love like a weapon and you never felt the blade", "scene": {"mood": "seduction", "colors": ["deep red", "velvet", "candlelight"], "composition": "wide shot", "camera": "static", "description": "Deep red. Velvet textures. Slow movement. Eyes that promise. I wore your love like a weapon and you never felt the blade"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "Every kiss was a negotiation, every touch a trade", "scene": {"mood": "power", "colors": ["gold", "black", "crimson"], "composition": "close-up", "camera": "slow pan", "description": "Throne. Gold. Black. The figure doesn't move. Doesn't need to. Every kiss was a negotiation, every touch a trade"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "The throne room smells like jasmine and someone else's fear", "scene": {"mood": "cruelty", "colors": ["cold silver", "black", "sharp white"], "composition": "over the shoulder", "camera": "dolly in", "description": "Silver blade. Cold light. A smile that doesn't reach the eyes. The throne room smells like jasmine and someone else's fear"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "I am beautiful when I'm angry \u2014 haven't you heard?", "scene": {"mood": "beauty", "colors": ["wildflower colors", "green", "sunlight"], "composition": "low angle", "camera": "dolly out", "description": "Wildflowers in unexpected places. Color against grey. Nature reclaiming. I am beautiful when I'm angry \u2014 haven't you heard?"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Don't mistake my gentleness for weakness, darling", "scene": {"mood": "danger", "colors": ["red", "black", "warning yellow"], "composition": "high angle", "camera": "handheld", "description": "Red and black. Warning signs. The frame contracts. Something approaches. Don't mistake my gentleness for weakness, darling"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "I chose to be kind. I could burn this kingdom down.", "scene": {"mood": "vulnerability", "colors": ["soft", "exposed", "raw"], "composition": "dutch angle", "camera": "steadicam", "description": "Exposed skin. Soft light. Eyes open. Trust visible in every pore. I chose to be kind. I could burn this kingdom down."}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "The roses in my crown have thorns that curve inward", "scene": {"mood": "fury", "colors": ["dark red", "black", "flash"], "composition": "symmetrical", "camera": "slow zoom", "description": "Dark red wash. Hands destroying. Frame shaking with rage. The roses in my crown have thorns that curve inward"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "I bleed for my own sins, not for yours", "scene": {"mood": "grace", "colors": ["white", "silver", "flowing"], "composition": "rule of thirds", "camera": "crane up", "description": "White. Flowing. Movement without effort. The body as art. I bleed for my own sins, not for yours"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "Tonight I lay the crown aside and sleep without armor", "scene": {"mood": "revenge", "colors": ["dark", "steel", "cold blue"], "composition": "extreme wide", "camera": "tracking shot", "description": "Cold blue. Steel. The plan unfolding in shadows. Patience as weapon. Tonight I lay the crown aside and sleep without armor"}}
|
||||
{"song": "Crown of Thorns and Roses", "artist": "Velvet Guillotine", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Mercy. The hardest word. The only gift worth giving.", "scene": {"mood": "mercy", "colors": ["warm gold", "white", "gentle"], "composition": "medium shot", "camera": "slow tilt down", "description": "Warm gold. Hand lowering a weapon. Choosing not to. The harder path. Mercy. The hardest word. The only gift worth giving."}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 1, "timestamp": "0:00", "duration": "30s", "lyric_line": "Four walls, one window, a view of another wall", "scene": {"mood": "claustrophobia", "colors": ["close walls", "yellow bulb", "cramped"], "composition": "wide shot", "camera": "static", "description": "Walls close. Ceiling low. Yellow bulb. No escape visible. Four walls, one window, a view of another wall"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 2, "timestamp": "0:30", "duration": "30s", "lyric_line": "The radiator clicks like a metronome for the damned", "scene": {"mood": "routine", "colors": ["grey", "institutional", "fluorescent"], "composition": "close-up", "camera": "slow pan", "description": "Fluorescent light. Same motion repeated. Clock on the wall. Time as loop. The radiator clicks like a metronome for the damned"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 3, "timestamp": "1:00", "duration": "30s", "lyric_line": "I've memorized every crack in the ceiling \u2014 they form a map", "scene": {"mood": "desperation", "colors": ["scratching", "clawing", "raw"], "composition": "over the shoulder", "camera": "dolly in", "description": "Hands clawing. Fingernails against surface. Raw need. Nothing held back. I've memorized every crack in the ceiling \u2014 they form a map"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 4, "timestamp": "1:30", "duration": "30s", "lyric_line": "In my mind I've left a hundred times, bought a farm, learned to fly", "scene": {"mood": "fantasy", "colors": ["dreamy", "pastel", "floating"], "composition": "low angle", "camera": "dolly out", "description": "Pastel. Floating. Impossible architecture. Gravity optional. In my mind I've left a hundred times, bought a farm, learned to fly"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 5, "timestamp": "2:00", "duration": "30s", "lyric_line": "Then one morning I open the door and just walk out", "scene": {"mood": "breakthrough", "colors": ["white burst", "open sky", "blinding"], "composition": "high angle", "camera": "handheld", "description": "White burst. Wall shattering. Open sky beyond. Freedom as explosion. Then one morning I open the door and just walk out"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 6, "timestamp": "2:30", "duration": "30s", "lyric_line": "The hallway is an ocean, the stairs are a mountain range", "scene": {"mood": "freedom", "colors": ["open sky", "blue", "green"], "composition": "dutch angle", "camera": "steadicam", "description": "Open road. Blue sky. Green fields. Wind in hair. No walls. The hallway is an ocean, the stairs are a mountain range"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 7, "timestamp": "3:00", "duration": "30s", "lyric_line": "The street hits me like cold water and I almost go back", "scene": {"mood": "fear", "colors": ["cold", "dark", "sharp"], "composition": "symmetrical", "camera": "slow zoom", "description": "Cold. Dark. Sharp edges. The frame contracts. Something unseen. The street hits me like cold water and I almost go back"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 8, "timestamp": "3:30", "duration": "30s", "lyric_line": "But the sky \u2014 have you seen the sky? It goes on forever", "scene": {"mood": "joy", "colors": ["bright", "multi", "saturated"], "composition": "rule of thirds", "camera": "crane up", "description": "Saturated color. Wide smiles. Arms open. The world in full bloom. But the sky \u2014 have you seen the sky? It goes on forever"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 9, "timestamp": "4:00", "duration": "30s", "lyric_line": "I stand on the sidewalk and cry because the world is so big", "scene": {"mood": "grounding", "colors": ["neutral"], "composition": "extreme wide", "camera": "tracking shot", "description": "Visual interpretation of: I stand on the sidewalk and cry because the world is so big"}}
|
||||
{"song": "Apartment 4B", "artist": "Wallpaper & Wire", "beat": 10, "timestamp": "4:30", "duration": "30s", "lyric_line": "Home is not a place. Home is the moment you stop hiding.", "scene": {"mood": "home", "colors": ["neutral"], "composition": "medium shot", "camera": "slow tilt down", "description": "Visual interpretation of: Home is not a place. Home is the moment you stop hiding."}}
|
||||
Reference in New Issue
Block a user