Diffusers documentation
Stable Audio 3
Stable Audio 3
Stable Audio 3 (SA3) adalah model teks-ke-audio dari Stability AI yang menghasilkan audio stereo berkualitas tinggi pada 44,1 kHz. Model ini menggunakan rectified-flow DiT yang dikondisikan oleh dua sinyal:
- Teks — dikodekan oleh encoder T5Gemma yang dibekukan dan disuntikkan melalui cross-attention.
- Durasi — float (detik) yang disematkan oleh StableAudio3DurationEmbedder dan digunakan sebagai vektor kondisioning global untuk normalisasi lapisan adaptif.
Audio didekodekan oleh autoencoder SAME (Semantically-Aligned Music Encoder), AutoencoderSAME.
Kedua checkpoint menggunakan FlowMatchEulerDiscreteScheduler dengan jadwal sigma log-SNR-uniform, yang hanya berbeda pada stochastic_sampling dan jumlah langkah default:
| Checkpoint | diffusion_objective | stochastic_sampling | num_inference_steps |
|---|---|---|---|
stable-audio-3-medium-base | rectified_flow | False (Euler deterministik) | 100 (tidak di-distilasi) |
stable-audio-3-medium (distilled) | rf_denoiser | True (re-noise ping-pong) | 8 (distilasi selama 8 langkah) |
Konfigurasi scheduler yang benar sudah tertanam di setiap checkpoint yang dikonversi, sehingga num_inference_steps secara default akan mengambil nilai yang tepat jika Anda tidak menyetelnya. Hanya berikan parameter ini jika Anda ingin menimpa nilai tersebut.
Codebase asli: Stability-AI/stable-audio-3.
Mengonversi checkpoint asli
Checkpoint Stability AI tidak dipublikasikan dalam format diffusers, jadi konversikan secara lokal. Skrip ini mengunduh model_config.json dari checkpoint dan memilih scheduler berdasarkan diffusion_objective-nya:
python scripts/convert_stable_audio_3_to_diffusers.py \ --checkpoint_path stabilityai/stable-audio-3-medium-base \ --text_encoder_repo google/t5gemma-b-b-ul2 \ --output_dir /tmp/sa3-diffusers-euler \ --dtype float32
stable-audio-3-medium-baseadalah repo bergerbang. Jalankanhf auth logindengan akun yang memiliki akses sebelum melakukan konversi, jika tidak unduhan akan gagal dengan 401.
Contoh penggunaan
Muat checkpoint yang telah dikonversi dari direktori output lokalnya (instal soundfile dengan pip install soundfile):
import torch
import soundfile as sf
from diffusers import StableAudio3Pipeline
pipe = StableAudio3Pipeline.from_pretrained("/tmp/sa3-diffusers-euler", torch_dtype=torch.float32)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(0)
audio = pipe(
"A gentle piano melody with soft strings in a concert hall",
duration=10.0, # seconds; latent length is computed automatically
generator=generator,
).audios
sf.write("sa3_output.wav", audio[0].T.cpu().float().numpy(), samplerate=44100)Pipeline juga terdaftar dengan AutoPipelineForText2Audio, yang secara otomatis menyelesaikan checkpoint menjadi StableAudio3Pipeline:
from diffusers import AutoPipelineForText2Audio
pipe = AutoPipelineForText2Audio.from_pretrained("/tmp/sa3-diffusers-euler", torch_dtype=torch.float32)Contoh menggunakan jalur lokal karena
stabilityai/stable-audio-3-mediumdanstable-audio-3-medium-basebelum dipublikasikan dalam format diffusers (memuat dengan repo id mengembalikan 404). Setelah dipublikasikan, repo id dapat digunakan sebagai pengganti jalur lokal.
Tips
- Gunakan
torch.float32pada CPU atau MPS (Apple Silicon) —torch.float16pada MPS menghasilkan noise. - Model terdistilasi (
stable-audio-3-medium) adalah adversarially distilled — guidance sudah tertanam ke dalam bobot. Biarkanguidance_scale=1.0(default) dan jangan lewatkannegative_promptuntuk checkpoint tersebut; keduanya hanya berguna untuk checkpointstable-audio-3-medium-baseyang tidak terdistilasi. silence_padding_duration(default0.0) menambahkan ruang hening di akhir urutan latent. Biarkan tetap0.0kecuali model dilatih untuk memasking padding tersebut — jika tidak, frame tambahan akan menguras energi output dan hasilnya menjadi lebih pelan.- Setel
num_waveforms_per_prompt > 1untuk menghasilkan beberapa klip per prompt.
StableAudio3Pipeline
kelas diffusers.StableAudio3Pipeline
< source >( vae: AutoencoderSAMEtext_encoder: T5GemmaEncoderModeltokenizer: GemmaTokenizerduration_embedder: StableAudio3DurationEmbeddertransformer: StableAudio3DiTModelscheduler: FlowMatchEulerDiscreteScheduler )
Parameter
- vae ([AutoencoderSAME]) — Autoencoder SAME yang digunakan untuk mengodekan dan mendekodekan latens audio.
- text_encoder ([~transformers.T5GemmaEncoderModel]) —
T5Gemma text encoder yang dibekukan (
google/t5gemma-b-b-ul2). - tokenizer ([~transformers.GemmaTokenizerFast]) — Tokenizer untuk text encoder.
- duration_embedder ([StableAudio3DurationEmbedder]) —
Memetakan
durationdalam detik ke vektor kondisioning global untuk AdaLN di setiap blok DiT. - transformer ([StableAudio3DiTModel]) — DiT prediksi kecepatan rectified-flow.
- scheduler ([FlowMatchEulerDiscreteScheduler]) — Scheduler untuk loop denoising iteratif. Checkpoint SA3 Medium produksi (distilled) menggunakan stochastic_sampling=True untuk tepat 8 langkah ping-pong; checkpoint base non-distilled menggunakan stochastic_sampling=False untuk ~100 langkah Euler deterministik.
Pipeline untuk generasi teks-ke-audio menggunakan Stable Audio 3.
SA3 menggunakan DiT rectified-flow yang telah didistil dengan sampling ping-pong. Panduan bebas-klasifikator (guidance_scale / negative_prompt) tidak diperlukan untuk checkpoint yang telah didistil (biarkan guidance_scale=1.0, nilai default), tetapi bermakna untuk checkpoint stable-audio-3-medium-base yang tidak didistil.
Model ini mewarisi dari [DiffusionPipeline]. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline.
__call__
< source >( prompt: typing.Union[str, typing.List[str], NoneType] = Noneduration: float = 10.0num_inference_steps: typing.Optional[int] = Nonelogsnr_min: float = -6.2logsnr_max: float = 2.0silence_padding_duration: float = 0.0guidance_scale: float = 1.0negative_prompt: typing.Union[str, typing.List[str], NoneType] = Nonenum_waveforms_per_prompt: int = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_encoder_attention_mask: typing.Optional[torch.LongTensor] = Nonereturn_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], dict]] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']output_type: str = 'pt' ) → [~pipelines.AudioPipelineOutput] or tuple
Parameter
- prompt (str atau list[str], opsional) —
Prompt teks. Lewati tokenisasi dan enkoding dengan meneruskan
prompt_embedssebagai gantinya. - duration (float, defaultnya 10.0) — Durasi output yang diminta dalam detik.
- num_inference_steps (int, opsional) —
Jumlah langkah denoising. Ketika
None(default), jumlah langkah dipilih dari konfigurasi stochastic_sampling scheduler: 8 ketika True (checkpoint bergaya ping-pong yang telah didistilasi) dan 100 ketika False (checkpoint dasar yang tidak didistilasi). Sampaikan nilai eksplisit untuk menimpa. - logsnr_min (float, default -6.2) — Nilai log-SNR minimum untuk jadwal noise — memetakan ke awal jadwal dengan noise tinggi.
- logsnr_max (float, default 2.0) — Nilai log-SNR maksimum untuk jadwal noise — memetakan ke ujung ber-noise rendah dari jadwal.
- silence_padding_duration (float, default 0.0) — Detik tambahan konteks laten yang dihasilkan melampaui konten target, memberikan ruang bagi model di batas; output akan dipangkas kembali ke duration. Default 0.0 (nonaktif). Tingkatkan hanya jika model dilatih/distil untuk memasking padding ini — jika tidak, frame tambahan akan menguras energi output.
- guidance_scale (float, default 1.0) —
Skala panduan bebas klasifikator.
1.0menonaktifkan panduan (nilai default, dan satu-satunya nilai yang masuk akal untuk checkpoint SA3 Medium yang telah didistilasi, karena CFG-nya sudah tertanam dalam bobot). Nilai> 1.0bermakna untuk checkpointstable-audio-3-medium-baseyang tidak didistilasi; nilai yang lebih tinggi mengikuti prompt dengan lebih ketat dengan mengorbankan keragaman. - negative_prompt (str atau list[str], opsional) —
Prompt yang menggambarkan apa yang harus dihindari saat
guidance_scale > 1.0. Nilainya secara default adalah string kosong (tanpa kondisi) ketikaguidance_scale > 1.0dan baik parameter ini maupun negative_prompt_embeds tidak diberikan. Diabaikan ketikaguidance_scale <= 1.0. - num_waveforms_per_prompt (int, defaultnya 1) — Jumlah waveform yang akan dihasilkan per prompt.
- generator (torch.Generator atau list[torch.Generator], opsional) — Untuk generasi deterministik dan re-noise yang dapat direproduksi dalam loop ping-pong.
- latents (torch.Tensor, opsional) —
Latents awal yang telah dibuat sebelumnya. Jika
None, tensor Gaussian baru akan diambil. - prompt_embeds (torch.Tensor, opsional) —
Embedding teks yang sudah dihitung sebelumnya
(batch, seq_len, 768). - encoder_attention_mask (torch.LongTensor, opsional) — Mask boolean untuk embedding yang sudah dihitung sebelumnya.
- negative_prompt_embeds (torch.Tensor, opsional) — Embedding teks negatif yang sudah dihitung sebelumnya, sebagai alternatif dari negative_prompt.
- negative_encoder_attention_mask (torch.LongTensor, opsional) — Mask boolean untuk embedding negatif yang sudah dihitung sebelumnya.
- return_dict (bool, defaultnya True) — Mengembalikan AudioPipelineOutput atau tuple biasa.
- callback_on_step_end (Callable, opsional) — Dipanggil di akhir setiap langkah denoising dengan (self, step_idx, timestep, callback_kwargs), di mana callback_kwargs berisi tensor yang tercantum dalam callback_on_step_end_tensor_inputs. Harus mengembalikan dict dengan tensor (yang mungkin telah dimodifikasi) untuk digunakan di sisa loop.
- callback_on_step_end_tensor_inputs (list[str], defaultnya [“latents”]) — Tensor yang diteruskan ke callback_on_step_end. Harus berupa subset dari self._callback_tensor_inputs.
- output_type (str, defaultnya
"pt") —"pt"untuk tensor PyTorch,"np"untuk array NumPy, atau"latent"untuk melewati decoding dan mengembalikan latents mentah.
Mengembalikan
[~pipelines.AudioPipelineOutput] atau tuple
.audios adalah tensor / array dengan bentuk (batch * num_waveforms_per_prompt, audio_channels, samples).
Generate audio dari prompt teks.
Contoh:
>>> import torch
>>> import soundfile as sf
>>> from diffusers import StableAudio3Pipeline
>>> pipe = StableAudio3Pipeline.from_pretrained("stabilityai/stable-audio-3-medium", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> audio = pipe(
... "A gentle piano melody with soft strings in a concert hall",
... duration=10.0,
... generator=generator,
... ).audios
>>> sf.write("output.wav", audio[0].T.cpu().float().numpy(), samplerate=pipe.vae.config.sampling_rate)encode_duration
< source >( duration: floatdevice: devicenum_waveforms_per_prompt: intbatch_size: int )
Tanamkan nilai durasi ke dalam vektor kondisi global.
encode_prompt
< source >( prompt: typing.Union[str, typing.List[str], NoneType]device: devicenum_waveforms_per_prompt: intprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = None )
Parameter
- prompt — Prompt teks atau daftar prompt. Diabaikan saat
prompt_embedsdisediakan. - device — Perangkat target.
- num_waveforms_per_prompt — Berapa banyak waveform output yang akan dihasilkan per prompt; tensor conditioning akan di-tile sesuai dengan itu.
- prompt_embeds — Embedding teks yang sudah dihitung sebelumnya
(batch, seq_len, hidden_size). - encoder_attention_mask — Mask Boolean
(batch, seq_len)untuk embedding yang sudah dihitung sebelumnya;1= token asli,0= pad.
Enkode prompt teks menjadi tensor kondisioning cross-attention.
prepare_cross_attention
< source >( prompt_embeds: Tensorencoder_attention_mask: Tensorglobal_hidden_states: Tensor )
Bangun konteks cross-attention dengan menambahkan durasi embedding sebagai token tambahan.
SA3 merutekan conditioner seconds_total ke keduanya, yaitu input global (AdaLN) dan konteks cross-attention
(cross_attention_cond_ids = ["prompt", "seconds_total"]). Embedding durasi digabungkan setelah token teks, dan attention mask diperluas dengan satu entri valid.
StableAudio3InpaintPipeline
kelas diffusers.StableAudio3InpaintPipeline
< source >( vae: AutoencoderSAMEtext_encoder: T5GemmaEncoderModeltokenizer: GemmaTokenizerduration_embedder: StableAudio3DurationEmbeddertransformer: StableAudio3DiTModelscheduler: FlowMatchEulerDiscreteScheduler )
Parameter
- vae ([AutoencoderSAME]) — Autoencoder SAME yang digunakan untuk mengodekan dan mendekodekan latens audio.
- text_encoder ([~transformers.T5GemmaEncoderModel]) —
T5Gemma text encoder yang dibekukan (
google/t5gemma-b-b-ul2). - tokenizer ([~transformers.GemmaTokenizerFast]) — Tokenizer untuk text encoder.
- duration_embedder ([StableAudio3DurationEmbedder]) —
Memetakan
durationdalam detik ke vektor kondisioning global untuk AdaLN di setiap blok DiT. - transformer ([StableAudio3DiTModel]) — DiT prediksi kecepatan rectified-flow.
- scheduler ([FlowMatchEulerDiscreteScheduler]) — Scheduler untuk loop denoising iteratif. Checkpoint SA3 Medium produksi (distilled) menggunakan stochastic_sampling=True untuk tepat 8 langkah ping-pong; checkpoint base non-distilled menggunakan stochastic_sampling=False untuk ~100 langkah Euler deterministik.
Pipeline inpainting audio untuk Stable Audio 3.
Berbagi logika teks-ke-audio dengan [StableAudio3Pipeline] (dijaga sinkron melalui # Copied from). Ketika audio dan mask disediakan, mengodekan audio referensi dengan encoder SAME yang dibekukan dan menyuntikkan masked_latent ∥ mask sebagai kondisioning aditif lokal ke setiap blok DiT melalui jalur local_add_cond transformer
(to_local_embed).
Ekstensi tanda panggil (lihat __call__):
audio (torch.Tensor dengan bentuk (batch, channels, samples)):
Gelombang audio referensi pada vae.config.sampling_rate Hz.
mask (torch.Tensor dengan bentuk (batch, 1, latent_length)):
Mask biner per-frame di ruang laten. 1 = pertahankan audio asli; 0 = wilayah yang akan di-inpaint.
__call__
< source >( prompt: typing.Union[str, typing.List[str], NoneType] = Noneduration: float = 10.0audio: typing.Optional[torch.Tensor] = Nonemask: typing.Optional[torch.Tensor] = Nonemask_start_seconds: typing.Union[float, typing.List[float], NoneType] = Nonemask_end_seconds: typing.Union[float, typing.List[float], NoneType] = Nonenum_inference_steps: typing.Optional[int] = Nonelogsnr_min: float = -6.2logsnr_max: float = 2.0silence_padding_duration: float = 0.0num_waveforms_per_prompt: int = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonereturn_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], dict]] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']output_type: str = 'pt' )
Parameter
- prompt (str atau list[str], opsional) — Prompt teks.
- duration (float, defaultnya 10.0) — Durasi output dalam detik. Seharusnya sesuai dengan audio referensi.
- audio (torch.Tensor, optional) —
Gelombang referensi
(batch, channels, samples)padavae.config.sampling_rateHz. Diperlukan untuk inpainting. - mask (torch.Tensor, optional) —
Mask ruang laten per-frame
(batch, 1, L)dengan 0 = area inpaint, 1 = pertahankan. Salah satu darimaskataumask_start_seconds/mask_end_secondsharus disediakan. - mask_start_seconds (float atau list[float], opsional) — Waktu mulai (dalam detik) dari area inpaint.
- mask_end_seconds (float atau list[float], opsional) —
Waktu akhir dari region inpaint (harus berpasangan dengan
mask_start_seconds). - num_inference_steps (int, opsional) —
Jumlah langkah denoising. Ketika
None(default), jumlah langkah dipilih dari konfigurasi stochastic_sampling scheduler, sesuai dengan [StableAudio3Pipeline]. - logsnr_min (float, default -6.2) — Nilai log-SNR minimum untuk jadwal noise — memetakan ke awal jadwal dengan noise tinggi.
- logsnr_max (float, default 2.0) — Nilai log-SNR maksimum untuk jadwal noise — memetakan ke ujung ber-noise rendah dari jadwal.
- silence_padding_duration (float, default 0.0) — Ruang cadangan laten tambahan setelah konten target.
- num_waveforms_per_prompt (int, defaultnya 1) — Bentuk gelombang per prompt.
- generator — RNG untuk reproduktibilitas.
- latents — Noise awal yang sudah dibuat sebelumnya (
None→ ambil sampel baru). - prompt_embeds — Embedding teks yang sudah dihitung sebelumnya.
- encoder_attention_mask — Mask untuk embedding yang sudah dihitung sebelumnya.
- return_dict (bool, defaultnya True) — Kembalikan AudioPipelineOutput atau tuple.
- callback_on_step_end (Callable, opsional) — Dipanggil di akhir setiap langkah denoising dengan (self, step_idx, timestep, callback_kwargs). Harus mengembalikan dict dengan tensor (yang mungkin telah dimodifikasi) untuk digunakan di sisa loop.
- callback_on_step_end_tensor_inputs (list[str], defaultnya [“latents”]) — Tensor yang diteruskan ke callback_on_step_end. Harus berupa subset dari self._callback_tensor_inputs.
- output_type (str, defaultnya
"pt") —"pt"/"np"/"latent".
Generate audio inpainted yang dikondisikan pada prompt teks dan referensi.
Contoh:
>>> import torch
>>> import soundfile as sf
>>> import torchaudio
>>> from diffusers import StableAudio3InpaintPipeline
>>> pipe = StableAudio3InpaintPipeline.from_pretrained(
... "stabilityai/stable-audio-3-medium", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> audio, sr = torchaudio.load("reference.wav")
>>> audio = torchaudio.functional.resample(audio, sr, pipe.vae.config.sampling_rate).unsqueeze(0).to("cuda")
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> audio = pipe(
... "A gentle piano melody with soft strings in a concert hall",
... duration=10.0,
... audio=audio,
... mask_start_seconds=4.0,
... mask_end_seconds=6.0,
... generator=generator,
... ).audios
>>> sf.write("output.wav", audio[0].T.cpu().float().numpy(), samplerate=pipe.vae.config.sampling_rate)encode_duration
< source >( duration: floatdevice: devicenum_waveforms_per_prompt: intbatch_size: int )
Tanamkan nilai durasi ke dalam vektor kondisi global.
encode_prompt
< source >( prompt: typing.Union[str, typing.List[str], NoneType]device: devicenum_waveforms_per_prompt: intprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = None )
Parameter
- prompt — Prompt teks atau daftar prompt. Diabaikan saat
prompt_embedsdisediakan. - device — Perangkat target.
- num_waveforms_per_prompt — Berapa banyak waveform output yang akan dihasilkan per prompt; tensor conditioning akan di-tile sesuai dengan itu.
- prompt_embeds — Embedding teks yang sudah dihitung sebelumnya
(batch, seq_len, hidden_size). - encoder_attention_mask — Mask Boolean
(batch, seq_len)untuk embedding yang sudah dihitung sebelumnya;1= token asli,0= pad.
Enkode prompt teks menjadi tensor kondisioning cross-attention.
prepare_cross_attention
< source >( prompt_embeds: Tensorencoder_attention_mask: Tensorglobal_hidden_states: Tensor )
Bangun konteks cross-attention dengan menambahkan durasi embedding sebagai token tambahan.
SA3 merutekan conditioner seconds_total ke keduanya, yaitu input global (AdaLN) dan konteks cross-attention
(cross_attention_cond_ids = ["prompt", "seconds_total"]). Embedding durasi digabungkan setelah token teks, dan attention mask diperluas dengan satu entri valid.
StableAudio3AudioToAudioPipeline
Membuat variasi dari klip audio referensi: seluruh referensi diberi noise hingga init_noise_level dan kemudian dinoise dari titik tersebut, berbeda dengan kondisioning aditif lokal per-frame pada StableAudio3InpaintPipeline yang mempertahankan frame tertentu secara persis.
kelas diffusers.StableAudio3AudioToAudioPipeline
< source >( vae: AutoencoderSAMEtext_encoder: T5GemmaEncoderModeltokenizer: GemmaTokenizerduration_embedder: StableAudio3DurationEmbeddertransformer: StableAudio3DiTModelscheduler: FlowMatchEulerDiscreteScheduler )
Parameter
- vae ([AutoencoderSAME]) — Autoencoder SAME yang digunakan untuk mengodekan dan mendekodekan latens audio.
- text_encoder ([~transformers.T5GemmaEncoderModel]) —
T5Gemma text encoder yang dibekukan (
google/t5gemma-b-b-ul2). - tokenizer ([~transformers.GemmaTokenizerFast]) — Tokenizer untuk text encoder.
- duration_embedder ([StableAudio3DurationEmbedder]) —
Memetakan
durationdalam detik ke vektor kondisioning global untuk AdaLN di setiap blok DiT. - transformer ([StableAudio3DiTModel]) — DiT prediksi kecepatan rectified-flow.
- scheduler ([FlowMatchEulerDiscreteScheduler]) — Scheduler untuk loop denoising iteratif. Checkpoint SA3 Medium produksi (distilled) menggunakan stochastic_sampling=True untuk tepat 8 langkah ping-pong; checkpoint base non-distilled menggunakan stochastic_sampling=False untuk ~100 langkah Euler deterministik.
Pipeline variasi audio-ke-audio untuk Stable Audio 3.
Berbagi logika teks-ke-audio dengan [StableAudio3Pipeline] (dijaga sinkron melalui # Copied from). Mengenkod audio referensi dengan encoder SAME yang dibekukan, mencampurnya dengan noise baru sesuai init_noise_level, dan melakukan denoising dari titik tersebut — seluruh sinyal di-noise/denoise secara global, berbeda dengan kondisioning aditif lokal per-frame pada [StableAudio3InpaintPipeline].
Ekstensi tanda panggil (lihat __call__):
audio (torch.Tensor dengan bentuk (batch, channels, samples)):
Gelombang audio referensi pada vae.config.sampling_rate Hz.
init_noise_level (float):
Seberapa banyak noise yang dicampurkan ke referensi sebelum denoising. 1.0 = noise penuh (setara dengan
text-to-audio); nilai yang lebih rendah mempertahankan lebih banyak dari referensi.
__call__
< source >( prompt: typing.Union[str, typing.List[str], NoneType] = Noneduration: float = 10.0audio: typing.Optional[torch.Tensor] = Noneinit_noise_level: float = 1.0num_inference_steps: typing.Optional[int] = Nonelogsnr_min: float = -6.2logsnr_max: float = 2.0silence_padding_duration: float = 0.0num_waveforms_per_prompt: int = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonereturn_dict: bool = Truecallback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], dict]] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']output_type: str = 'pt' )
Parameter
- prompt (str atau list[str], opsional) — Prompt teks.
- duration (float, defaultnya 10.0) — Durasi output dalam detik. Seharusnya sesuai dengan audio referensi.
- audio (torch.Tensor, optional) —
Gelombang referensi
(batch, channels, samples)padavae.config.sampling_rateHz. Wajib diisi. - init_noise_level (float, default 1.0) —
Tingkat noise (dalam
(0, 1]) yang dicampurkan ke referensi sebelum denoising:x_start = (1 - init_noise_level) * reference_latents + init_noise_level * noise.1.0membuang referensi sepenuhnya (setara dengan [StableAudio3Pipeline]); nilai yang lebih rendah mempertahankan semakin banyak struktur referensi sambil tetap menjalankan jumlah langkah penuh. - num_inference_steps (int, opsional) —
Jumlah langkah denoising. Ketika
None(default), jumlah langkah dipilih dari konfigurasi stochastic_sampling scheduler, sesuai dengan [StableAudio3Pipeline]. - logsnr_min (float, default -6.2) — Nilai log-SNR minimum untuk jadwal noise — memetakan ke awal jadwal dengan noise tinggi.
- logsnr_max (float, default 2.0) — Nilai log-SNR maksimum untuk jadwal noise — memetakan ke ujung ber-noise rendah dari jadwal.
- silence_padding_duration (float, default 0.0) — Ruang cadangan laten tambahan setelah konten target.
- num_waveforms_per_prompt (int, defaultnya 1) — Bentuk gelombang per prompt.
- generator — RNG untuk reproduktibilitas.
- latents — Noise awal yang sudah dibuat sebelumnya (
None→ ambil sampel baru). - prompt_embeds — Embedding teks yang sudah dihitung sebelumnya.
- encoder_attention_mask — Mask untuk embedding yang sudah dihitung sebelumnya.
- return_dict (bool, defaultnya True) — Kembalikan AudioPipelineOutput atau tuple.
- callback_on_step_end (Callable, opsional) — Dipanggil di akhir setiap langkah denoising dengan (self, step_idx, timestep, callback_kwargs). Harus mengembalikan dict dengan tensor (yang mungkin telah dimodifikasi) untuk digunakan di sisa loop.
- callback_on_step_end_tensor_inputs (list[str], defaultnya [“latents”]) — Tensor yang diteruskan ke callback_on_step_end. Harus berupa subset dari self._callback_tensor_inputs.
- output_type (str, defaultnya
"pt") —"pt"/"np"/"latent".
Buat variasi audio yang dikondisikan pada prompt teks dan waveform referensi.
Contoh:
>>> import torch
>>> import soundfile as sf
>>> import torchaudio
>>> from diffusers import StableAudio3AudioToAudioPipeline
>>> pipe = StableAudio3AudioToAudioPipeline.from_pretrained(
... "stabilityai/stable-audio-3-medium", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> audio, sr = torchaudio.load("reference.wav")
>>> audio = torchaudio.functional.resample(audio, sr, pipe.vae.config.sampling_rate).unsqueeze(0).to("cuda")
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> audio = pipe(
... "A gentle piano melody with soft strings in a concert hall",
... duration=10.0,
... audio=audio,
... init_noise_level=0.6,
... generator=generator,
... ).audios
>>> sf.write("output.wav", audio[0].T.cpu().float().numpy(), samplerate=pipe.vae.config.sampling_rate)encode_duration
< source >( duration: floatdevice: devicenum_waveforms_per_prompt: intbatch_size: int )
Tanamkan nilai durasi ke dalam vektor kondisi global.
encode_prompt
< source >( prompt: typing.Union[str, typing.List[str], NoneType]device: devicenum_waveforms_per_prompt: intprompt_embeds: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = None )
Parameter
- prompt — Prompt teks atau daftar prompt. Diabaikan saat
prompt_embedsdisediakan. - device — Perangkat target.
- num_waveforms_per_prompt — Berapa banyak waveform output yang akan dihasilkan per prompt; tensor conditioning akan di-tile sesuai dengan itu.
- prompt_embeds — Embedding teks yang sudah dihitung sebelumnya
(batch, seq_len, hidden_size). - encoder_attention_mask — Mask Boolean
(batch, seq_len)untuk embedding yang sudah dihitung sebelumnya;1= token asli,0= pad.
Enkode prompt teks menjadi tensor kondisioning cross-attention.
prepare_cross_attention
< source >( prompt_embeds: Tensorencoder_attention_mask: Tensorglobal_hidden_states: Tensor )
Bangun konteks cross-attention dengan menambahkan durasi embedding sebagai token tambahan.
SA3 merutekan conditioner seconds_total ke keduanya, yaitu input global (AdaLN) dan konteks cross-attention
(cross_attention_cond_ids = ["prompt", "seconds_total"]). Embedding durasi digabungkan setelah token teks, dan attention mask diperluas dengan satu entri valid.
StableAudio3DurationEmbedder
kelas diffusers.StableAudio3DurationEmbedder
< source >( output_dim: int = 768fourier_dim: int = 256min_val: float = 0.0max_val: float = 384.0min_freq: float = 0.5max_freq: float = 10000.0 )
Parameter
- output_dim (int, defaultnya 768) —
Dimensi dari output embedding. Harus cocok dengan
global_cond_dimdari DiT. - fourier_dim (int, defaultnya 256) — Dimensi fitur Fourier internal (harus genap).
- min_val (float, defaultnya 0.0) — Nilai durasi minimum untuk clamping normalisasi.
- max_val (float, defaultnya 384.0) —
Nilai durasi maksimum untuk clamping normalisasi. Nilai di atas ambang ini akan di-clamp. 384 detik adalah batas atas produksi SA3 Medium untuk conditioner
seconds_total. - min_freq (float, defaultnya 0.5) — Frekuensi minimum untuk basis Fourier eksponensial.
- max_freq (float, defaultnya 10000.0) — Frekuensi maksimum untuk basis Fourier eksponensial.
Menanamkan nilai durasi (dalam detik) ke dalam vektor kondisioning global untuk Stable Audio 3 DiT (digunakan sebagai input AdaLN global_hidden_states).
Mereplikasi NumberConditioner(fourier_features_type="expo") dari implementasi referensi SA3.
forward
< source >( seconds: Tensor )