AMCS Style Generator
Creates a complete musical style specification that defines genre, tempo, key, mood, energy, instrumentation, and tags while enforcing blueprint constraints and resolving tag conflicts.
When to Use
Invoke this skill after PLAN generation to produce the style specification. This node runs in parallel with LYRICS and PRODUCER nodes and feeds into COMPOSE.
Input Contract
inputs:
- name: sds_style
type: amcs://schemas/style-1.0.json
required: true
description: Style entity from SDS containing user preferences
- name: plan
type: amcs://schemas/plan-1.0.json
required: true
description: Execution plan with section structure and targets
- name: blueprint
type: amcs://schemas/blueprint-1.0.json
required: true
description: Genre-specific rules, tempo ranges, and tag priorities
- name: seed
type: integer
required: true
description: Determinism seed (use seed+1 for this node)
Output Contract
outputs:
- name: style
type: amcs://schemas/style-1.0.json
description: |
Complete style spec with:
- genre_detail: primary, subgenres, fusions
- tempo_bpm: validated against blueprint ranges
- key: primary and modulations
- mood, energy, instrumentation, vocal_profile
- tags: conflict-free, high-weight tags from blueprint
- negative_tags: quality filters
Determinism Requirements
- Seed:
run_seed + 1 for any stochastic tag selection
- Temperature: 0.2 if LLM used for tag prioritization
- Top-p: 0.8
- Retrieval: None (blueprint is local)
- Hashing: Hash final style JSON for provenance
Constraints & Policies
- Tempo MUST fall within blueprint's
tempo_range for the primary genre
- Tags MUST NOT conflict per
taxonomies/tag_conflict_matrix.json
- Maximum 3 instrumentation tags to avoid dilution
- Maximum 1-2 tags per category (Era, Rhythm, Mix, Mood)
- Energy level MUST align with tempo: "anthemic" incompatible with <80 BPM
- Profanity filter applies to all text fields (mood descriptors, vocal profile)
- If
sds_style.tags conflicts with blueprint high-priority tags, blueprint wins
Implementation Guidance
Step 1: Validate and Normalize Genre
- Extract
sds_style.genre_detail.primary
- Load corresponding blueprint from
docs/hit_song_blueprint/AI/[genre]_blueprint.md
- If genre not found, fallback to
general_fingerprint.md
- Validate
subgenres and fusions are compatible per blueprint
- Store normalized genre in output
Step 2: Enforce Tempo Range
- Read blueprint
tempo_range (e.g., [100, 140] for Pop)
- If
sds_style.tempo_bpm is single value:
- Verify it falls within blueprint range
- If outside, clamp to nearest boundary and log warning
- If
sds_style.tempo_bpm is array [min, max]:
- Clamp to blueprint range:
[max(min, bp_min), min(max, bp_max)]
- Validate energy alignment:
- "anthemic" requires ≥100 BPM
- "low" requires ≤90 BPM
- Log warning if mismatch
Step 3: Select High-Weight Tags
- Load blueprint's recommended tags with weights
- Merge with
sds_style.tags
- For each category (Era, Rhythm, Mix, Mood, Instrumentation):
- Select top 1-2 tags by weight
- Ensure no conflicts using
tag_conflict_matrix.json
- If conflict detected, keep higher-weight tag and drop lower
- Total tag count should be ≤12 across all categories
Step 4: Resolve Tag Conflicts
- Load
taxonomies/tag_conflict_matrix.json
- For each tag pair in final tag list:
- Check matrix for conflicts
- If conflict exists, drop the tag with lower blueprint weight
- Log dropped tag and reason
- Common conflicts to check:
- "whisper" vs "anthemic"
- "dry mix" vs "lush reverb"
- "1970s" vs "2020s modern production"
Step 5: Validate Instrumentation
- Limit to ≤3 instruments from
sds_style.instrumentation
- Prioritize instruments mentioned in blueprint
- Remove generic instruments like "guitar" in favor of specific "acoustic guitar" or "electric guitar"
- Validate compatibility with genre (no "808s" in Classical)
Step 6: Finalize and Hash
- Assemble complete style JSON
- Validate against
amcs://schemas/style-1.0.json
- Apply profanity filter to
mood and vocal_profile text
- Compute SHA-256 hash of JSON
- Return style with hash metadata
Examples
Example 1: Christmas Pop
Input:
{
"sds_style": {
"genre_detail": {"primary": "Christmas Pop", "subgenres": ["Big Band Pop"], "fusions": ["Electro Swing"]},
"tempo_bpm": [116, 124],
"key": {"primary": "C major", "modulations": ["E major"]},
"mood": ["upbeat", "cheeky", "warm"],
"energy": "anthemic",
"instrumentation": ["brass", "upright bass", "handclaps", "sleigh bells"],
"vocal_profile": "male/female duet, crooner + bright pop",
"tags": ["Era:2010s", "Rhythm:four-on-the-floor", "Mix:modern-bright", "Genre:swing", "Instr:brass"]
},
"blueprint": {
"tempo_range": [100, 140],
"recommended_tags": [
{"tag": "Era:2010s", "weight": 0.9},
{"tag": "Mix:modern-bright", "weight": 0.85},
{"tag": "Rhythm:four-on-the-floor", "weight": 0.8}
]
},
"seed": 43
}
Output:
{
"genre_detail": {
"primary": "Christmas Pop",
"subgenres": ["Big Band Pop"],
"fusions": ["Electro Swing"]
},
"tempo_bpm": [116, 124],
"time_signature": "4/4",
"key": {"primary": "C major", "modulations": ["E major"]},
"mood": ["upbeat", "cheeky", "warm"],
"energy": "anthemic",
"instrumentation": ["brass", "upright bass", "sleigh bells"],
"vocal_profile": "male/female duet, crooner + bright pop",
"tags": [
"Era:2010s",
"Rhythm:four-on-the-floor",
"Mix:modern-bright",
"Instr:brass"
],
"negative_tags": ["muddy low-end"],
"_hash": "def456...",
"_dropped_tags": [{"tag": "handclaps", "reason": "exceeds 3 instrument limit"}]
}
Common Pitfalls
- Tempo Violations: Accepting tempo outside blueprint range breaks genre authenticity
- Tag Conflicts: Not checking conflict matrix produces contradictory prompts
- Over-Specification: Including >3 instruments dilutes production focus
- Energy Mismatch: "anthemic" at 60 BPM fails validation and sounds wrong
- Blueprint Ignore: Using user tags over blueprint high-priority tags reduces hit potential
- Hash Omission: Missing provenance hash breaks determinism tracking
1---2name: amcs-style-generator3description: Generate detailed style specification from SDS style entity and plan. Enforces blueprint tempo ranges, resolves tag conflicts using conflict matrix, and maximizes information density with minimal tags. Use when creating genre-specific musical identity including tempo, key, mood, instrumentation, and vocal profile.4---5
6# AMCS Style Generator
7
8Creates a complete musical style specification that defines genre, tempo, key, mood, energy, instrumentation, and tags while enforcing blueprint constraints and resolving tag conflicts.
9
10## When to Use
11
12Invoke this skill after PLAN generation to produce the style specification. This node runs in parallel with LYRICS and PRODUCER nodes and feeds into COMPOSE.
13
14## Input Contract
15
16```yaml
17inputs:
18 - name: sds_style
19 type: amcs://schemas/style-1.0.json
20 required: true
21 description: Style entity from SDS containing user preferences
22 - name: plan
23 type: amcs://schemas/plan-1.0.json
24 required: true
25 description: Execution plan with section structure and targets
26 - name: blueprint
27 type: amcs://schemas/blueprint-1.0.json
28 required: true
29 description: Genre-specific rules, tempo ranges, and tag priorities
30 - name: seed
31 type: integer
32 required: true
33 description: Determinism seed (use seed+1 for this node)
34```
35
36## Output Contract
37
38```yaml
39outputs:
40 - name: style
41 type: amcs://schemas/style-1.0.json
42 description: |
43 Complete style spec with:
44 - genre_detail: primary, subgenres, fusions
45 - tempo_bpm: validated against blueprint ranges
46 - key: primary and modulations
47 - mood, energy, instrumentation, vocal_profile
48 - tags: conflict-free, high-weight tags from blueprint
49 - negative_tags: quality filters
50```
51
52## Determinism Requirements
53
54- **Seed**: `run_seed + 1` for any stochastic tag selection
55- **Temperature**: 0.2 if LLM used for tag prioritization
56- **Top-p**: 0.8
57- **Retrieval**: None (blueprint is local)
58- **Hashing**: Hash final style JSON for provenance
59
60## Constraints & Policies
61
62- Tempo MUST fall within blueprint's `tempo_range` for the primary genre
63- Tags MUST NOT conflict per `taxonomies/tag_conflict_matrix.json`
64- Maximum 3 instrumentation tags to avoid dilution
65- Maximum 1-2 tags per category (Era, Rhythm, Mix, Mood)
66- Energy level MUST align with tempo: "anthemic" incompatible with <80 BPM
67- Profanity filter applies to all text fields (mood descriptors, vocal profile)
68- If `sds_style.tags` conflicts with blueprint high-priority tags, blueprint wins
69
70## Implementation Guidance
71
72### Step 1: Validate and Normalize Genre
73
741. Extract `sds_style.genre_detail.primary`
752. Load corresponding blueprint from `docs/hit_song_blueprint/AI/[genre]_blueprint.md`
763. If genre not found, fallback to `general_fingerprint.md`
774. Validate `subgenres` and `fusions` are compatible per blueprint
785. Store normalized genre in output
79
80### Step 2: Enforce Tempo Range
81
821. Read blueprint `tempo_range` (e.g., [100, 140] for Pop)
832. If `sds_style.tempo_bpm` is single value:
84 - Verify it falls within blueprint range
85 - If outside, clamp to nearest boundary and log warning
863. If `sds_style.tempo_bpm` is array [min, max]:
87 - Clamp to blueprint range: `[max(min, bp_min), min(max, bp_max)]`
884. Validate energy alignment:
89 - "anthemic" requires ≥100 BPM
90 - "low" requires ≤90 BPM
91 - Log warning if mismatch
92
93### Step 3: Select High-Weight Tags
94
951. Load blueprint's recommended tags with weights
962. Merge with `sds_style.tags`
973. For each category (Era, Rhythm, Mix, Mood, Instrumentation):
98 - Select top 1-2 tags by weight
99 - Ensure no conflicts using `tag_conflict_matrix.json`
100 - If conflict detected, keep higher-weight tag and drop lower
1014. Total tag count should be ≤12 across all categories
102
103### Step 4: Resolve Tag Conflicts
104
1051. Load `taxonomies/tag_conflict_matrix.json`
1062. For each tag pair in final tag list:
107 - Check matrix for conflicts
108 - If conflict exists, drop the tag with lower blueprint weight
109 - Log dropped tag and reason
1103. Common conflicts to check:
111 - "whisper" vs "anthemic"
112 - "dry mix" vs "lush reverb"
113 - "1970s" vs "2020s modern production"
114
115### Step 5: Validate Instrumentation
116
1171. Limit to ≤3 instruments from `sds_style.instrumentation`
1182. Prioritize instruments mentioned in blueprint
1193. Remove generic instruments like "guitar" in favor of specific "acoustic guitar" or "electric guitar"
1204. Validate compatibility with genre (no "808s" in Classical)
121
122### Step 6: Finalize and Hash
123
1241. Assemble complete style JSON
1252. Validate against `amcs://schemas/style-1.0.json`
1263. Apply profanity filter to `mood` and `vocal_profile` text
1274. Compute SHA-256 hash of JSON
1285. Return style with hash metadata
129
130## Examples
131
132### Example 1: Christmas Pop
133
134**Input**:
135```json
136{
137 "sds_style": {
138 "genre_detail": {"primary": "Christmas Pop", "subgenres": ["Big Band Pop"], "fusions": ["Electro Swing"]},
139 "tempo_bpm": [116, 124],
140 "key": {"primary": "C major", "modulations": ["E major"]},
141 "mood": ["upbeat", "cheeky", "warm"],
142 "energy": "anthemic",
143 "instrumentation": ["brass", "upright bass", "handclaps", "sleigh bells"],
144 "vocal_profile": "male/female duet, crooner + bright pop",
145 "tags": ["Era:2010s", "Rhythm:four-on-the-floor", "Mix:modern-bright", "Genre:swing", "Instr:brass"]
146 },
147 "blueprint": {
148 "tempo_range": [100, 140],
149 "recommended_tags": [
150 {"tag": "Era:2010s", "weight": 0.9},
151 {"tag": "Mix:modern-bright", "weight": 0.85},
152 {"tag": "Rhythm:four-on-the-floor", "weight": 0.8}
153 ]
154 },
155 "seed": 43
156}
157```
158
159**Output**:
160```json
161{
162 "genre_detail": {
163 "primary": "Christmas Pop",
164 "subgenres": ["Big Band Pop"],
165 "fusions": ["Electro Swing"]
166 },
167 "tempo_bpm": [116, 124],
168 "time_signature": "4/4",
169 "key": {"primary": "C major", "modulations": ["E major"]},
170 "mood": ["upbeat", "cheeky", "warm"],
171 "energy": "anthemic",
172 "instrumentation": ["brass", "upright bass", "sleigh bells"],
173 "vocal_profile": "male/female duet, crooner + bright pop",
174 "tags": [
175 "Era:2010s",
176 "Rhythm:four-on-the-floor",
177 "Mix:modern-bright",
178 "Instr:brass"
179 ],
180 "negative_tags": ["muddy low-end"],
181 "_hash": "def456...",
182 "_dropped_tags": [{"tag": "handclaps", "reason": "exceeds 3 instrument limit"}]
183}
184```
185
186## Common Pitfalls
187
1881. **Tempo Violations**: Accepting tempo outside blueprint range breaks genre authenticity
1892. **Tag Conflicts**: Not checking conflict matrix produces contradictory prompts
1903. **Over-Specification**: Including >3 instruments dilutes production focus
1914. **Energy Mismatch**: "anthemic" at 60 BPM fails validation and sounds wrong
1925. **Blueprint Ignore**: Using user tags over blueprint high-priority tags reduces hit potential
1936. **Hash Omission**: Missing provenance hash breaks determinism tracking