Lyria RealTime: scale=E_FLAT_MAJOR_C_MINOR has no effect (output bit-identical to SCALE_UNSPECIFIED )

Model:

models/lyria-realtime-exp

over the Live Music API (

api_version=“v1alpha”

) SDK:

google-genai

2.26.0, Python 3.12, macOS Date observed: 2026-10-01

Summary

In

LiveMusicGenerationConfig

, setting

scale=Scale.E_FLAT_MAJOR_C_MINOR

produces PCM output that is byte-for-byte identical to

scale=Scale.SCALE_UNSPECIFIED

, with the same prompt, seed and other settings. The other 11 scale values all change the output and pull its pitch content into their sets.

Steps to reproduce

Open two sessions with the same weighted prompt and the same config (

bpm=120

,

density=0.35

,

brightness=0.45

,

guidance=4.0

,

seed=7

). The only difference is

scale

:

E_FLAT_MAJOR_C_MINOR

in one,

SCALE_UNSPECIFIED

in the other.

play()

, collect 32 s of PCM from each, and compare SHA-256 hashes.

repro_lyria_eflat.py

does exactly this, and adds an

A_MAJOR_G_FLAT_MINOR

control that does change the output (in our run:

def7978f079db355

).

Expected

The

E_FLAT_MAJOR_C_MINOR

take differs from the unspecified take, and its pitch content stays within Eb F G Ab Bb C D.

Actual

The two takes are identical, in 5 of 5 same-prompt, same-seed pairs:

Prompt Seed SHA-256 (first 16), E_FLAT_MAJOR_C_MINOR SHA-256 (first 16), SCALE_UNSPECIFIED
dark, orchestral 20261001 861fded2e524131d 861fded2e524131d
dark, orchestral 7 da4347e4b65299ea da4347e4b65299ea
dark, orchestral 42 1e9cb76d67f52259 1e9cb76d67f52259
bright, major-key 20261001 a00d5f2da2f543a0 a00d5f2da2f543a0
short string prompt ( repro_lyria_eflat.py ) 7 53461a4a9cfc3eb2 53461a4a9cfc3eb2

In the bright-prompt pair, the unspecified take is closest to Bb major and contains A naturals, which an Eb major / C minor constraint would remove. So the value is not just coinciding with the model’s own pick.

The other values work

Bright prompt, seed 20261001, one 32 s take per value. The table gives the share of chroma energy inside each value’s own 7 notes, against the unspecified take’s share inside those same notes:

Value Changed output? In own set Unspecified, same set
C_MAJOR_A_MINOR yes 82.7% 60.0%
D_FLAT_MAJOR_B_FLAT_MINOR yes 81.0% 68.3%
D_MAJOR_B_MINOR yes 82.8% 40.8%
E_FLAT_MAJOR_C_MINOR no (identical) 76.4% 76.4%
E_MAJOR_D_FLAT_MINOR yes 79.2% 32.5%
F_MAJOR_D_MINOR yes 80.2% 76.2%
G_FLAT_MAJOR_E_FLAT_MINOR yes 82.6% 51.8%
G_MAJOR_E_MINOR yes 82.0% 56.7%
A_FLAT_MAJOR_F_MINOR yes 76.2% 73.2%
A_MAJOR_G_FLAT_MINOR yes 80.8% 36.1%
B_FLAT_MAJOR_G_MINOR yes 77.2% 77.6%
B_MAJOR_A_FLAT_MINOR yes 81.1% 50.4%

The SDK serialises the value correctly. The config JSON contains

“scale”: “E_FLAT_MAJOR_C_MINOR”

.

Impact

Nothing can be pinned to the Eb major / C minor pitch set, which also covers F Dorian, G Phrygian, Ab Lydian, Bb Mixolydian and D Locrian. The only workaround is to transpose.