# LongCat-AudioDiT

LongCat-AudioDiT adalah model difusi teks-ke-audio dari Meituan LongCat. Integrasi diffusers mengungkap antarmuka [DiffusionPipeline](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline) standar untuk generasi audio yang dikondisikan oleh teks.

Pipeline ini diadaptasi dari implementasi referensi LongCat-AudioDiT: https://github.com/meituan-longcat/LongCat-AudioDiT

Pipeline ini mendukung pemuatan dari direktori lokal atau repositori Hugging Face Hub dalam format diffusers (mengandung subfolder `text_encoder/`, `transformer/`, `vae/`, `tokenizer/`, dan `scheduler/`).

## Penggunaan

```py
import soundfile as sf
import torch
from diffusers import LongCatAudioDiTPipeline

pipeline = LongCatAudioDiTPipeline.from_pretrained(
    "ruixiangma/LongCat-AudioDiT-1B-Diffusers",
    dtype=torch.float16,
)
pipeline = pipeline.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A calm ocean wave ambience with soft wind in the background."
audio = pipeline(
    prompt,
    audio_duration_s=5.0,
    num_inference_steps=16,
    guidance_scale=4.0,
    generator=torch.Generator("cuda").manual_seed(42),
).audios[0, 0]

sf.write("longcat.wav", audio, pipeline.sample_rate)
```

## Tips

- `audio_duration_s` adalah cara paling langsung untuk mengontrol durasi output.
- Gunakan `generator=torch.Generator("cuda").manual_seed(42)` untuk membuat proses generasi dapat direproduksi.
- Bentuk output adalah `(batch, channels, samples)` - gunakan `.audios[0, 0]` untuk mendapatkan satu sampel audio.
- Pipeline menghasilkan audio mono (1 kanal). Jika Anda membutuhkan stereo, Anda dapat menduplikasi kanal: `audio.unsqueeze(0).repeat(1, 2, 1)`.

## LongCatAudioDiTPipeline[[diffusers.LongCatAudioDiTPipeline]]

#### diffusers.LongCatAudioDiTPipeline[[diffusers.LongCatAudioDiTPipeline]]

```python
diffusers.LongCatAudioDiTPipeline(vae: LongCatAudioDiTVae, text_encoder: UMT5EncoderModel, tokenizer: PreTrainedTokenizerBase, transformer: LongCatAudioDiTTransformer, scheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | None = None)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/longcat_audio_dit/pipeline_longcat_audio_dit.py#L99)

#### __call__[[diffusers.LongCatAudioDiTPipeline.__call__]]

```python
__call__(prompt: str | list[str], negative_prompt: str | list[str] | None = None, audio_duration_s: float | None = None, latents: typing.Optional[torch.Tensor] = None, num_inference_steps: int = 16, guidance_scale: float = 4.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str = 'np', return_dict: bool = True, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'])
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/longcat_audio_dit/pipeline_longcat_audio_dit.py#L219)

**Parameter:**

prompt (`str` atau `list[str]`) : Prompt atau prompt-prompt yang memandu generasi audio.

negative_prompt (`str` atau `list[str]`, *opsional*) : Prompt negatif untuk classifier-free guidance.

audio_duration_s (`float`, *opsional*) : Durasi audio target dalam detik. Diabaikan saat `latents` disediakan.

latents (`torch.Tensor`, *opsional*) : Laten berisik yang telah dibuat sebelumnya dengan bentuk `(batch_size, duration, latent_dim)`.

num_inference_steps (`int`, defaultnya 16) : Jumlah langkah denoising.

guidance_scale (`float`, default 4.0) : Skala panduan untuk panduan bebas klasifikator.

generator (`torch.Generator` atau `list[torch.Generator]`, *opsional*) : Generator acak.

output_type (`str`, defaultnya `"np"`) : Format output: `"np"`, `"pt"`, atau `"latent"`.

return_dict (`bool`, defaultnya `True`) : Apakah akan mengembalikan `AudioPipelineOutput`.

callback_on_step_end (`Callable`, *opsional*) : Fungsi yang dipanggil di akhir setiap langkah denoising dengan pipeline, indeks langkah, timestep, dan input tensor yang ditentukan oleh `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, defaultnya `["latents"]`) : Input Tensor yang diteruskan ke `callback_on_step_end`.

**Mengembalikan:** [AudioPipelineOutput](/docs/diffusers/main/id/api/pipelines/audioldm2#diffusers.AudioPipelineOutput) atau `tuple`

[AudioPipelineOutput](/docs/diffusers/main/id/api/pipelines/audioldm2#diffusers.AudioPipelineOutput) jika `return_dict` bernilai True, selain itu berupa `tuple`. Saat mengembalikan tuple, elemen pertama adalah waveform audio yang dihasilkan.

Fungsi yang dipanggil saat memanggil pipeline untuk generasi.

Contoh:
```py
>>> import soundfile as sf
>>> import torch
>>> from diffusers import LongCatAudioDiTPipeline

>>> pipe = LongCatAudioDiTPipeline.from_pretrained("ruixiangma/LongCat-AudioDiT-1B-Diffusers")
>>> pipe.to("cuda")

>>> prompt = "A calm ocean wave ambience with soft wind in the background."
>>> audio = pipe(
...     prompt,
...     audio_duration_s=5.0,
...     num_inference_steps=20,
...     guidance_scale=4.0,
...     generator=torch.Generator("cuda").manual_seed(42),
... ).audios[0, 0]
>>> sf.write("output.wav", audio, pipe.sample_rate)
```

#### from_pretrained[[diffusers.LongCatAudioDiTPipeline.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike, **kwargs)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L638)

**Parameter:**

pretrained_model_name_or_path (`str` atau `os.PathLike`, *opsional*) : Bisa berupa: - String, *repo id* (misalnya `CompVis/ldm-text2im-large-256`) dari pipeline pretrained yang dihosting di Hub. - Path ke *direktori* (misalnya `./my_pipeline_directory/`) yang berisi bobot pipeline yang disimpan menggunakan [save_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.save_pretrained).

dtype (`torch.dtype` atau `dict[str, Union[str, torch.dtype]]`, *opsional*) : Menimpa `torch.dtype` bawaan dan memuat model dengan dtype lain. Untuk memuat submodel dengan dtype yang berbeda, berikan `dict` (misalnya `{'transformer': torch.bfloat16, 'vae': torch.float16}`). Atur dtype bawaan untuk komponen yang tidak ditentukan dengan `default` (misalnya `{'transformer': torch.bfloat16, 'default': torch.float16}`). Jika suatu komponen tidak ditentukan dan tidak ada default yang disetel, `torch.float32` akan digunakan.

custom_pipeline (`str`, *opsional*) : > [!WARNING] > 🧪 Ini adalah fitur eksperimental dan dapat berubah di masa depan.  Dapat berupa:  - String, *repo id* (misalnya `hf-internal-testing/diffusers-dummy-pipeline`) dari pipeline kustom yang dihosting di Hub. Repositori harus berisi file bernama pipeline.py yang mendefinisikan pipeline kustom. - String, *nama file* dari pipeline komunitas yang dihosting di GitHub di bawah [Community](https://github.com/huggingface/diffusers/tree/main/examples/community). Nama file yang valid harus cocok dengan nama file dan bukan skrip pipeline (`clip_guided_stable_diffusion` alih-alih `clip_guided_stable_diffusion.py`). Pipeline komunitas selalu dimuat dari cabang main saat ini di GitHub. - Path ke direktori (`./my_pipeline_directory/`) yang berisi pipeline kustom. Direktori harus berisi file bernama `pipeline.py` yang mendefinisikan pipeline kustom.  Untuk informasi lebih lanjut tentang cara memuat dan membuat pipeline kustom, silakan lihat [Memuat dan Menambahkan Pipeline Kustom](https://huggingface.co/docs/diffusers/using-diffusers/custom_pipeline_overview)

force_download (`bool`, *opsional*, defaultnya `False`) : Apakah akan memaksa (mengunduh ulang) bobot model dan file konfigurasi, menimpa versi yang di-cache jika ada.

cache_dir (`Union[str, os.PathLike]`, *opsional*) : Path ke direktori tempat konfigurasi model pretrained yang diunduh di-cache jika cache standar tidak digunakan.

proxies (`Dict[str, str]`, *opsional*) : Kamus server proxy yang akan digunakan berdasarkan protokol atau endpoint, misalnya, `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. Proxy digunakan pada setiap permintaan.

output_loading_info(`bool`, *opsional*, default `False`) : Apakah akan mengembalikan kamus yang berisi kunci yang hilang, kunci yang tidak terduga, dan pesan kesalahan.

local_files_only (`bool`, *opsional*, defaultnya `False`) : Apakah hanya memuat bobot model dan file konfigurasi lokal atau tidak. Jika diatur ke `True`, model tidak akan diunduh dari Hub.

token (`str` atau *bool*, *opsional*) : Token yang digunakan sebagai otorisasi bearer HTTP untuk file jarak jauh. Jika `True`, token yang dihasilkan dari `diffusers-cli login` (disimpan di `~/.huggingface`) akan digunakan.

revision (`str`, *opsional*, defaultnya `"main"`) : Versi model spesifik yang akan digunakan. Bisa berupa nama branch, nama tag, id commit, atau identifikasi apa pun yang diizinkan oleh Git.

custom_revision (`str`, *opsional*) : Versi model spesifik yang akan digunakan. Ini bisa berupa nama branch, nama tag, atau commit id yang serupa dengan `revision` saat memuat pipeline kustom dari Hub. Secara default menggunakan versi 🤗 Diffusers stabil terbaru.

mirror (`str`, *opsional*) : Sumber cermin untuk menyelesaikan masalah aksesibilitas jika Anda mengunduh model di Tiongkok. Kami tidak menjamin ketepatan waktu atau keamanan sumber, dan Anda harus merujuk ke situs cermin untuk informasi lebih lanjut.

device_map (`str`, *opsional*) : Strategi yang menentukan bagaimana komponen-komponen berbeda dari sebuah pipeline harus ditempatkan pada perangkat yang tersedia. Saat ini, hanya `device_map` "balanced" yang didukung. Lihat [ini](https://huggingface.co/docs/diffusers/main/en/tutorials/inference_with_big_models#device-placement) untuk mengetahui lebih lanjut.

max_memory (`Dict`, *opsional*) : Kamus pengidentifikasi perangkat untuk memori maksimum. Akan secara default menggunakan memori maksimum yang tersedia untuk setiap GPU dan RAM CPU yang tersedia jika tidak disetel.

offload_folder (`str` atau `os.PathLike`, *opsional*) : Path untuk offload weights jika device_map berisi nilai `"disk"`.

offload_state_dict (`bool`, *opsional*) : Jika `True`, secara sementara memindahkan state dict CPU ke hard drive untuk menghindari kehabisan RAM CPU jika bobot state dict CPU + shard terbesar dari checkpoint tidak muat. Bawaan adalah `True` jika ada disk offload.

low_cpu_mem_usage (`bool`, *opsional*, defaultnya `True` jika versi torch >= 1.9.0 selain itu `False`) : Mempercepat pemuatan model dengan hanya memuat bobot pretrained dan tidak menginisialisasi bobot. Ini juga berusaha untuk tidak menggunakan lebih dari 1x ukuran model di memori CPU (termasuk memori puncak) saat memuat model. Hanya didukung untuk PyTorch >= 1.9.0. Jika Anda menggunakan versi PyTorch yang lebih lama, mengatur argumen ini ke `True` akan memicu error.

use_safetensors (`bool`, *opsional*, defaultnya `None`) : Jika diatur ke `None`, bobot safetensors akan diunduh jika tersedia **dan** jika pustaka safetensors terpasang. Jika diatur ke `True`, model dipaksa dimuat dari bobot safetensors. Jika diatur ke `False`, bobot safetensors tidak dimuat.

use_onnx (`bool`, *opsional*, defaultnya `None`) : Jika diatur ke `True`, bobot ONNX akan selalu diunduh jika ada. Jika diatur ke `False`, bobot ONOX tidak akan pernah diunduh. Secara default, `use_onnx` mengikuti atribut kelas `_is_onnx` yang bernilai `False` untuk pipeline non-ONNX dan `True` untuk pipeline ONNX. Bobot ONNX mencakup kedua file yang berakhiran `.onnx` dan `.pb`.

kwargs (sisa kamus argumen kata kunci, *opsional*) : Dapat digunakan untuk menimpa variabel yang dapat dimuat dan disimpan (komponen pipeline dari kelas pipeline tertentu). Komponen yang ditimpa tersebut diteruskan langsung ke metode `__init__` pipeline. Lihat contoh di bawah untuk informasi lebih lanjut.

variant (`str`, *opsional*) : Muat bobot dari nama file varian yang ditentukan seperti `"fp16"` atau `"ema"`.

disable_mmap ('bool', *opsional*, default 'False') : Apakah akan menonaktifkan mmap saat memuat model Safetensors. Opsi ini dapat memberikan performa yang lebih baik ketika model berada di network mount atau hard drive, yang mungkin tidak menangani sifat seeky dari mmap dengan baik.

Instansiasi pipeline difusi PyTorch dari bobot pipeline yang telah dilatih sebelumnya.

Pipeline diatur dalam mode evaluasi (`model.eval()`) secara default.

Jika Anda menerima pesan kesalahan di bawah ini, Anda perlu melakukan penyesuaian bobot untuk tugas turunan Anda:

```
Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
```

> [!TIP] > Untuk menggunakan model privat atau [gated](https://huggingface.co/docs/hub/models-gated#gated-models), masuk
dengan `hf > auth login`.

Contoh:

```py
>>> from diffusers import DiffusionPipeline

>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

>>> # Download pipeline that requires an authorization token
>>> # For more information on access tokens, please refer to this section
>>> # of the documentation](https://huggingface.co/docs/hub/security-tokens)
>>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

>>> # Use a different scheduler
>>> from diffusers import LMSDiscreteScheduler

>>> scheduler = LMSDiscreteScheduler.from_config(pipeline.scheduler.config)
>>> pipeline.scheduler = scheduler
```

