🎨 hand-tuned skin home keys — 14 deliberate, distinct moods

Replace the auto-derived skin scale (which gave 3× C wholetone and a sparse
hirajoshi default) with a curated SKIN_HOME map — a considered {root,scale} per
cosmology, every pair unique so turning the wheel always changes the key.
Verified: 14/14 distinct. Default (chakra) is now warm C minor pentatonic.

chakra C min-pent · planes A lydian · tree D minor · lodge G major ·
ladder E phrygian · yggdrasil F# minor · lataif B dorian · wuxing F# pentatonic ·
tarot A minor · zodiac C mixolydian · futhark G dorian · wheelyear F major ·
artist C wholetone · bagua E min-pent. (Fallback to derived scale for any future skin.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-10 01:14:39 +10:00
parent 8dd551017a
commit c5997163b5

View File

@ -4305,8 +4305,28 @@
// Its home tonality (its first station's scale) becomes the global scale, so the
// sequencer AND the ambient data-melodies re-harmonise when you change cosmology.
let skinTunesWorld = true;
// Hand-tuned home key per Spirit — a deliberate, distinct mood for each cosmology
// (every {root,scale} pair is unique, so turning the wheel always changes the key).
const SKIN_HOME = {
chakra: { root: 0, name: "minor_pent" }, // C — warm, grounded, meditative
planes: { root: 9, name: "lydian" }, // A — airy, ascending (higher planes)
tree: { root: 2, name: "minor" }, // D — deep, solemn, mystical
lodge: { root: 7, name: "major" }, // G — noble, bright, geometric
ladder: { root: 4, name: "phrygian" }, // E — ancient, alchemical
yggdrasil: { root: 6, name: "minor" }, // F# — cold, epic, mythic
lataif: { root: 11, name: "dorian" }, // B — spiritual, warm-modal (Sufi)
wuxing: { root: 6, name: "pentatonic" }, // F# — the classic Chinese pentatonic
tarot: { root: 9, name: "minor" }, // A — mysterious, fateful
zodiac: { root: 0, name: "mixolydian" }, // C — cosmic, rolling, bright
futhark: { root: 7, name: "dorian" }, // G — old folk modal (runes)
wheelyear: { root: 5, name: "major" }, // F — pastoral, seasonal
artist: { root: 0, name: "wholetone" }, // C — pure colour, no tonic (Kandinsky)
bagua: { root: 4, name: "minor_pent" }, // E — Eastern pentatonic (I Ching)
};
function skinHomeScale() {
const st = activeSkin.stations && activeSkin.stations[0];
const h = SKIN_HOME[activeSkin.key];
if (h && SCALES[h.name]) return { root: h.root, name: h.name };
const st = activeSkin.stations && activeSkin.stations[0]; // fallback for any future skin
const sc = st && activeSkin.scaleOf(st.key);
if (sc && SCALES[sc.scale]) return { root: ((sc.root % 12) + 12) % 12, name: sc.scale };
return null;