Skip to main content

create-score

Generate scene-specific music using ACE-Step 1.5 via Dockerized FastAPI. Supports reference audio for theme continuity across scenes. Integrates with Federated Taxonomy (HMT) for multi-hop graph traversal in /memory.

Source facts

Repository
grahama1970/agent-stack-public
Last source activity
September 24, 2026 at 15:51
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
20 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
create-score
description
Generate scene-specific music using ACE-Step 1.5 via Dockerized FastAPI. Supports reference audio for theme continuity across scenes. Integrates with Federated Taxonomy (HMT) for multi-hop graph traversal in /memory.
allowed-tools
["Bash","Read","Write"]
triggers
["create score","score scene","generate music","film score","ace step","scene music","soundtrack"]
metadata
{"short-description":"Scene music generation via ACE-Step (Docker + HMT)","author":"Horus","version":"0.1.0"}
provides
["create-score"]
composes
["create-cast","create-storyboard","create-sound-design","create-story","task-monitor","agentic-evals"]
disciplines
["content-creation","voice-audio"]
# create-score Generate scene-specific music for films using ACE-Step 1.5 via a Dockerized FastAPI service. Designed to be called per-scene by `/create-movie`. ## Philosophy Music scoring is the emotional backbone of film. This skill generates original music that matches scene context, using Federated Taxonomy (HMT) bridge attributes to ensure thematic coherence across scenes. ## Quick Start ```bash cd .pi/skills/create-score # Start the ACE-Step Docker service (persistent) ./run.sh up # Generate a scene score ./run.sh generate \ --prompt "cinematic tension, strings and low brass, building suspense" \ --duration-s 30 \ --seed 42 \ --out scene_01.wav # Generate with bridge hints (HMT-aware) ./run.sh generate \ --prompt "battle preparation" \ --bridges Resilience,Precision \ --episode Siege_of_Terra \ --duration-s 45 \ --out battle_prep.wav # Use reference audio for theme continuity ./run.sh generate \ --prompt "same theme, higher intensity" \ --reference-audio outputs/main_theme.wav \ --duration-s 30 \ --out scene_02.wav # Stop the service when done ./run.sh down ``` ## CLI Commands ### `up` - Start Docker Service ```bash ./run.sh up ``` Builds and starts the ACE-Step Docker service. Waits for health check before returning. ### `down` - Stop Docker Service ```bash ./run.sh down ``` Stops the ACE-Step Docker service. ### `generate` - Generate Scene Music ```bash ./run.sh generate [OPTIONS] ``` **Required:** | Option | Description | |--------|-------------| | `--prompt` | Text prompt describing desired music | | `--out` | Output file path | **Generation:** | Option | Default | Description | |--------|---------|-------------| | `--duration-s` | 30 | Duration in seconds (1-300) | | `--steps` | 27 | Inference steps (more = higher quality, slower) | | `--seed` | -1 | Seed for reproducibility (-1 = random) | | `--cfg-scale` | 4.0 | Guidance scale (higher = more prompt adherence) | | `--format` | wav | Output format: wav, mp3, flac | **HMT Integration:** | Option | Description | |--------|-------------| | `--bridges` | Comma-separated bridge attributes (Resilience,Corruption,etc.) | | `--episode` | Episode association for memory storage | | `--store-memory/--no-store-memory` | Store in /memory (default: true) | **Conditioning:** | Option | Description | |--------|-------------| | `--reference-audio` | Reference audio for style/theme continuity | | `--tags` | Comma-separated genre/style tags | | `--instrumental/--no-instrumental` | Instrumental only (default: true) | ## Python API For integration with `/create-movie`: ```python import sys sys.path.insert(0, ".pi/skills/create-score") from create_score import generate_scene_score from pathlib import Path result = generate_scene_score( prompt="battle preparation, epic strings, building tension", duration_s=30, output_path=Path("./outputs/battle_scene.wav"), bridges=["Resilience", "Precision"], episode="Siege_of_Terra", reference_audio=Path("./outputs/main_theme.wav"), seed=42, format="wav", store_memory=True, ) print(result["output_path"]) # Path to generated audio print(result["hmt"]) # Full HMT taxonomy print(result["episode_association"]) # Episode link ``` ### Return Value ```python { "output_path": Path("outputs/battle_scene.wav"), "prompt": "battle preparation, epic strings, triumphant, heroic", # augmented "seed": 42, "duration_s": 30.0, "hmt": { "bridge_attributes": ["Resilience", "Precision"], "collection_tags": { "domain": ["Orchestral_Epic"], "thematic_weight": ["Epic"], "function": ["Score"] }, "tactical_tags": ["Score", "Amplify"], "episodic_associations": ["Siege_of_Terra"], "confidence": 0.85 }, "episode_association": "Siege_of_Terra" } ``` ## HMT Integration This skill uses the Federated Taxonomy (HMT) to: 1. **Extract bridges from scene context** - Automatically detect thematic bridges from prompts 2. **Augment prompts** - Add bridge-appropriate musical keywords 3. **Tag output** - Generated scores include full HMT metadata 4. **Enable multi-hop retrieval** - Query scores by bridge, episode, or tactical use ### Bridge to Music Mapping | Bridge | Musical Keywords | |--------|------------------| | **Precision** | polyrhythmic, technical, algorithmic patterns, complex | | **Resilience** | triumphant, epic strings, powerful brass, heroic | | **Fragility** | delicate, acoustic, tender piano, breaking | | **Corruption** | industrial, distorted, harsh textures, oppressive | | **Loyalty** | ceremonial, choral, sacred tones, anthemic | | **Stealth** | ambient, drone, minimal, atmospheric pads | ### Episode Associations | Episode | Primary Bridge | Music Character | |---------|----------------|-----------------| | Siege_of_Terra | Resilience | Defiant, enduring | | Davin_Corruption | Corruption | Dark, oppressive | | Webway_Collapse | Fragility | Breaking, tragic | | Mournival_Oath | Loyalty | Ceremonial, solemn | | Iron_Cage | Precision | Calculated, relentless | ## Reference Audio Continuity For thematic coherence across scenes: ```bash # Scene 1: Establish main theme ./run.sh generate \ --prompt "heroic main theme, brass fanfare" \ --duration-s 30 \ --seed 42 \ --out main_theme.wav # Scene 2: Variation on theme ./run.sh generate \ --prompt "same theme, quieter, strings only" \ --reference-audio main_theme.wav \ --duration-s 20 \ --out scene_02.wav # Scene 3: Climactic return ./run.sh generate \ --prompt "theme returns, full orchestra, triumphant" \ --reference-audio main_theme.wav \ --duration-s 45 \ --out climax.wav ``` ## Hardware Requirements | Component | Minimum | Recommended | |-----------|---------|-------------| | GPU VRAM | 16GB | 24GB (A5000/RTX 4090) | | System RAM | 32GB | 64GB+ | | Disk | 50GB | 100GB (model cache) | ### VRAM Usage | Mode | VRAM | Quality | |------|------|---------| | FP8 | ~20GB | High | | FP4 | ~12GB | Good | | BF16 | ~40GB | Maximum (RunPod) | ## Task Monitor Integration All generation jobs are automatically tracked via `/task-monitor`: - **Registry**: Jobs register at `~/.pi/task-monitor/registry.json` - **State File**: Progress written to `create-score/score_task_state.json` - **API Push**: If `TASK_MONITOR_API` is set, pushes to HTTP API ### View Progress ```bash # Via task-monitor TUI cd .pi/skills/task-monitor uv run python monitor.py tui --filter create-score # Via API curl http://localhost:8765/tasks/create-score ``` ### Manual Tracking (Advanced) ```python from create_score import ScoreMonitor monitor = ScoreMonitor(prompt="battle theme", duration_s=30) monitor.start_job(job_id="abc123", seed=42) monitor.update_progress(state="generating", progress_pct=50) monitor.complete_job(output_path=Path("output.wav")) ``` ## Memory Integration Generated scores are automatically stored in `/memory` with scope `horus-filmmaking`: ```bash # Recall scores by bridge /memory recall --bridge Resilience --category music_score # Recall by episode /memory recall --episode Siege_of_Terra --category music_score # Multi-hop: Find lore documents linked to same bridges as a score /memory traverse --from music_score --via bridge --to lore ``` ## Docker Service ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `ACE_STEP_PORT` | 8015 | Service port | | `HF_TOKEN` | - | HuggingFace token (for gated models) | ### Health Check ```bash curl http://localhost:8015/healthz # {"ok": true} ``` ### Manual API Access ```bash # Submit generation curl -X POST http://localhost:8015/generate \ -F 'json={"prompt":"test","duration_s":10}' \ | jq .job_id # Poll status curl http://localhost:8015/jobs/{job_id} # Download output curl http://localhost:8015/outputs/{filename} -o output.wav ``` ## Dependencies - Docker with GPU support (NVIDIA Container Toolkit) - Python 3.11+ - uv (for dependency management) ## Related Skills | Skill | Relationship | |-------|--------------| | `/create-movie` | Calls create-score per-scene | | `/memory` | Stores scores with HMT taxonomy | | `/taxonomy` | Provides bridge extraction | | `/consume-music` | Searches existing music (not generated) | | `/discover-music` | Finds reference music for inspiration |
View on GitHub