Bark is a transformer-based text-to-audio model from Suno. You give it text, and it generates highly realistic, multilingual speech — plus things most speech models can't do: laughter, sighs, singing, music, sound effects, and background noise. It runs entirely on your own machine using pretrained model checkpoints that download automatically the first time you use them.
This guide shows you how to install Bark, generate your first audio, steer the voice and emotion of the output, work in 13 languages, and solve the problems people hit most often.
Note
Bark is a fully generative text-to-audio model, not a conventional text-to-speech engine. It converts text directly to audio with no intermediate phoneme step, so it can take creative liberties and occasionally deviate from your prompt. This is by design — see Why does the output differ from my prompt?.
1. Quick Start
Generate your first audio clip in three steps.
Step 1 — Install Bark
pip install git+https://github.com/suno-ai/bark.git
Caution
Do NOT run
pip install bark. That installs a completely different, unrelated package that is not maintained by Suno. Always install from the GitHub URL above (or from a clone — see Installation).
Step 2 — Generate audio in Python
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
# Download and load all models (first run only — downloads several GB)
preload_models()
# Generate audio from text
text_prompt = "Hello, my name is Suno. And, uh — and I like pizza. [laughs]"
audio_array = generate_audio(text_prompt)
# Save the result to disk
write_wav("bark_generation.wav", SAMPLE_RATE, audio_array)
Done! bark_generation.wav written at 24 kHz.
Step 3 — Or generate from the command line
python -m bark --text "Hello, my name is Suno." --output_filename "example.wav"
Done! Output audio file is saved at: './example.wav'
Important
The first call to
preload_models()(or the first CLI run) downloads the model checkpoints from Hugging Face into~/.cache/suno/bark_v0. This is a one-time download of several gigabytes. Subsequent runs load from cache and start almost immediately.
Tip
All audio Bark produces is a NumPy array sampled at 24 kHz. Always use the exported
SAMPLE_RATEconstant (24000) when saving or playing audio so the pitch and speed are correct.
2. Installation
Requirements
| Requirement | Detail |
|---|---|
| Python | 3.8 or newer |
| PyTorch | 2.0+ recommended (tested with CUDA 11.7 and CUDA 12.0) |
| Hardware | Runs on CPU or GPU. GPU strongly recommended for speed. |
| Disk | Several GB free for model checkpoints in ~/.cache/suno/bark_v0 |
| VRAM (GPU) | ~12 GB full models · ~8 GB small models · down to ~2 GB with offloading |
Bark's core dependencies (torch, transformers, encodec, huggingface-hub, scipy, numpy, funcy, tqdm, tokenizers) are installed automatically.
Installation methods
pip + Git (recommended)
pip install git+https://github.com/suno-ai/bark.git
Clone and install
git clone https://github.com/suno-ai/bark
cd bark && pip install .
Hugging Face Transformers
Bark is also available inside the 🤗 Transformers library (v4.31.0+) with a different API:
pip install git+https://github.com/huggingface/transformers.git
See Using Bark through Hugging Face Transformers.
Warning
The package name on PyPI (
suno-bark) is not the same asbark. Installing the plainbarkpackage will pull in unrelated code. Use the Git install or a local clone.
Verify the installation
import bark
from bark import generate_audio, preload_models, SAMPLE_RATE
print("Bark imported OK — sample rate:", SAMPLE_RATE)
Bark imported OK — sample rate: 24000
3. Generating Audio
The single function you will use most is generate_audio().
from bark import generate_audio, SAMPLE_RATE
from scipy.io.wavfile import write as write_wav
audio_array = generate_audio("It was a dark and stormy night.")
write_wav("story.wav", SAMPLE_RATE, audio_array)
generate_audio() parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
text |
str |
(required) | The text to turn into audio. |
history_prompt |
str or dict |
None |
A voice preset name, a path to a .npz prompt file, or a full-generation dict. Controls the voice. See Choosing a Voice. |
text_temp |
float |
0.7 |
Temperature for the text→semantic stage. Higher (toward 1.0) = more diverse/expressive; lower (toward 0.0) = more conservative/stable. |
waveform_temp |
float |
0.7 |
Temperature for the audio waveform stage. Same trade-off as text_temp. |
silent |
bool |
False |
Disable the progress bar. |
output_full |
bool |
False |
If True, also return the full generation dict (reusable as a history_prompt). |
Tip
Lower the temperatures (e.g.
text_temp=0.5,waveform_temp=0.5) when you want steadier, more predictable narration. Raise them toward1.0for more expressive, varied delivery.
Returning the full generation
Set output_full=True to receive both the generation data and the audio. The first element can be saved and reused as a voice prompt for consistency across clips (see Long-Form Audio).
full_generation, audio_array = generate_audio(
"I will narrate the next several chapters.",
output_full=True,
)
Note
By default
generate_audioworks best with about 13 seconds of spoken text per call. For longer content, chain calls — see Long-Form and Consistent Voices.
4. Command-Line Interface
Bark ships a small CLI invoked with python -m bark. It wraps generate_audio() and writes a .wav file.
python -m bark --text "Welcome to the show." --output_filename "intro.wav" --output_dir "./clips"
Done! Output audio file is saved at: './clips/intro.wav'
CLI options
| Option | Type | Default | Description |
|---|---|---|---|
--text |
str |
— | Text to be turned into audio. |
--output_filename |
str |
bark_generation.wav |
Output audio file name. |
--output_dir |
str |
. |
Directory to save the output (created if missing). |
--history_prompt |
str |
None |
Voice choice — a preset name or a path to a .npz file. |
--text_temp |
float |
0.7 |
Generation temperature (1.0 more diverse, 0.0 more conservative). |
--waveform_temp |
float |
0.7 |
Generation temperature (1.0 more diverse, 0.0 more conservative). |
--silent |
bool |
False |
Disable the progress bar. |
--output_full |
bool |
False |
Return the full generation to be used as a history prompt. |
Example: CLI with a voice preset
python -m bark \
--text "I have a silky smooth voice." \
--history_prompt "v2/en_speaker_1" \
--output_filename "smooth.wav"
Warning
The
--silentand--output_fullflags use Python'stype=boolparsing, which treats any non-empty value asTrue. That means--silent Falseactually enables silent mode, because the string"False"is truthy. To leave these flags off, simply omit them. Pass--silent True(or--silent anything) to turn the flag on.
5. Choosing a Voice (Voice Presets)
By default Bark picks a voice that fits your text, and it can pick a different one each run. To get a consistent, known voice, pass a voice preset via history_prompt.
audio_array = generate_audio(
"Today I will tell you about the exercise regimen of the common sloth.",
history_prompt="v2/en_speaker_1",
)
Available presets
Bark bundles 100+ speaker presets. Preset names follow these patterns:
| Preset pattern | Example | Notes |
|---|---|---|
{lang}_speaker_{0–9} |
en_speaker_3 |
10 speakers per language, original set. |
v2/{lang}_speaker_{0–9} |
v2/en_speaker_6 |
Recommended. v2 prompts follow text with a more consistent voice. |
announcer |
announcer |
A special "announcer" voice. |
{lang} is one of the 13 supported language codes (en, de, es, fr, hi, it, ja, ko, pl, pt, ru, tr, zh). The bundled presets live in bark/assets/prompts/ (originals) and bark/assets/prompts/v2/ (v2).
Tip
Prefer the
v2/presets — they are better engineered to follow your text with a consistent voice. For example, usev2/en_speaker_6rather thanen_speaker_6.
Note
Bark matches the tone, pitch, emotion, and prosody of a preset, and tries to preserve music and ambient characteristics. It does not currently support custom voice cloning from your own recordings.
Using your own saved prompt
A history_prompt can also be a path to a .npz file you previously saved (see Long-Form and Consistent Voices):
audio_array = generate_audio("Continuing the story...", history_prompt="my_voice.npz")
6. Long-Form and Consistent Voices
A single generate_audio call targets ~13 seconds of audio. To produce longer content with a stable voice, generate the first segment with output_full=True, save that generation as a prompt, and feed it back into the next segment.
from bark import generate_audio, save_as_prompt, SAMPLE_RATE
from scipy.io.wavfile import write as write_wav
import numpy as np
sentences = [
"Chapter one. The morning began quietly.",
"By noon, everything had changed.",
"And so the adventure truly began.",
]
# Generate the first segment and capture its full generation
full_generation, first_audio = generate_audio(sentences[0], output_full=True)
# Reuse that generation as the voice prompt for the remaining segments
pieces = [first_audio]
for line in sentences[1:]:
audio = generate_audio(line, history_prompt=full_generation)
pieces.append(audio)
# Concatenate and save
combined = np.concatenate(pieces)
write_wav("long_form.wav", SAMPLE_RATE, combined)
Saving a voice for later
Use save_as_prompt() to persist a full generation to a .npz file you can reuse across sessions:
from bark import save_as_prompt
full_generation, audio = generate_audio("My narrator voice.", output_full=True)
save_as_prompt("narrator.npz", full_generation)
# Later, in another script:
audio2 = generate_audio("Picking up where we left off.", history_prompt="narrator.npz")
Important
save_as_prompt()requires the file path to end in.npzand the generation to contain the keyssemantic_prompt,coarse_prompt, andfine_prompt— exactly the dict you get fromoutput_full=True. Passing anything else raises an assertion error.
Tip
Worked examples of long-form generation, voice consistency, and running on CPU live in the repository's
notebooks/folder:long_form_generation.ipynb,use_small_models_on_cpu.ipynb, andmemory_profiling_bark.ipynb.
7. Expressive Audio: Sounds, Music, and Emphasis
Because Bark generates audio rather than reading text literally, you can embed special cues directly in your text to produce nonverbal sounds, singing, and emphasis.
Nonverbal and special tokens
| Cue | Effect |
|---|---|
[laughter], [laughs] |
Laughter |
[sighs] |
A sigh |
[music] |
Musical sound |
[gasps] |
A gasp |
[clears throat] |
Throat-clearing |
— or ... |
Hesitations / pauses |
♪ |
Wraps song lyrics so Bark sings them |
CAPITALIZATION |
Emphasis on a word |
[MAN] / [WOMAN] |
Bias toward a male / female speaker |
# Speech with nonverbal sounds
generate_audio("I can't believe it [laughs] — that's incredible!")
# Singing
generate_audio("♪ In the jungle, the mighty jungle, the lion barks tonight ♪")
# Emphasis and a hesitation
generate_audio("This is REALLY important... so listen carefully.")
Note
This list is not exhaustive — Bark can produce many nonverbal sounds, and new working patterns are discovered regularly. The community shares effective prompts in the project's Discord
#audio-promptschannel.
Generating music
Bark doesn't strictly distinguish speech from music. To nudge it toward singing, wrap lyrics in music notes (♪). Results vary — Bark may still choose to speak lyrics rather than sing them.
Tip
For dedicated text-to-music generation, Bark is not the right tool. Suno's music models live on the Suno web app, separate from this repository.
8. Foreign Languages
Bark automatically detects the language from your input text — you don't specify it explicitly.
# Korean — detected automatically
generate_audio("추석은 내가 가장 좋아하는 명절이다.")
# German
generate_audio("Der Dreißigjährige Krieg war ein verheerender Konflikt.")
Supported languages
| Language | Code | Language | Code |
|---|---|---|---|
| English | en |
Italian | it |
| German | de |
Japanese | ja |
| Spanish | es |
Korean | ko |
| French | fr |
Polish | pl |
| Hindi | hi |
Portuguese | pt |
| Russian | ru |
Turkish | tr |
| Chinese (simplified) | zh |
Note
English quality is best at the moment; other languages continue to improve. Because language is auto-detected, you can deliberately mix a non-English voice preset with English text to get an accented English voice — for example, a German history prompt with English text usually yields English audio with a German accent.
Tip
To pin the accent/voice for a given language, combine auto-detection with a matching
v2/{lang}_speaker_{n}preset, e.g.history_prompt="v2/de_speaker_3"for German.
9. Running on Limited Hardware
Bark runs on modest GPUs and even CPU-only machines if you enable the right options. These are controlled by environment variables, set before importing Bark.
| Environment variable | Default | Effect |
|---|---|---|
SUNO_USE_SMALL_MODELS |
False |
Use smaller model versions — fits ~8 GB VRAM, slightly lower quality, faster. |
SUNO_OFFLOAD_CPU |
False |
Keep models on CPU and move them to GPU only when needed — large VRAM savings. |
SUNO_ENABLE_MPS |
False |
Enable Apple Silicon (MPS) GPU acceleration on Macs. |
Low-VRAM recipe (down to ~2 GB)
import os
os.environ["SUNO_OFFLOAD_CPU"] = "True"
os.environ["SUNO_USE_SMALL_MODELS"] = "True"
from bark import generate_audio, preload_models, SAMPLE_RATE
preload_models()
audio_array = generate_audio("Running on a small GPU.")
Important
Set these environment variables before the
from bark import ...line. They are read when thebark.generationmodule is first imported; setting them afterward has no effect within the same process.
Tip
On Apple Silicon, set
SUNO_ENABLE_MPS=True. Note that the EnCodec audio codec step does not support MPS and automatically falls back to CPU — this is expected.
Warning
If no GPU is detected, Bark prints
No GPU being used. Careful, inference might be very slow!and runs on CPU. CPU inference works but can be many times slower than GPU.
10. Using Bark Through Hugging Face Transformers
Bark is also integrated into the 🤗 Transformers library (v4.31.0+), which offers a different, model-object-style API.
from transformers import AutoProcessor, BarkModel
processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark")
voice_preset = "v2/en_speaker_6"
inputs = processor("Hello, my dog is cute", voice_preset=voice_preset)
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()
Save the result with the model's own sample rate:
import scipy
sample_rate = model.generation_config.sample_rate
scipy.io.wavfile.write("bark_out.wav", rate=sample_rate, data=audio_array)
Note
The Transformers integration is a separate code path from this repository's
barkpackage. Use whichever fits your stack. For full details, see the Bark page in the Transformers docs.
11. Troubleshooting
Error: history prompt not found
- Cause: You passed a
history_promptpreset name that isn't one of the bundled presets (e.g. a typo, or a name outside the{lang}_speaker_{0–9}/v2/.../announcerset). - Solution: Use a valid preset name (see Choosing a Voice), or pass a path to a real
.npzfile. - Prevention: Stick to the documented preset patterns; remember preset names are case-sensitive and use the
v2/prefix for v2 voices.
Error: history prompt format unrecognized
- Cause: The
history_promptvalue was neither a.npzpath, a known preset name, nor a valid generation dict. - Solution: Pass a string ending in
.npz, a preset name, or the dict returned bygenerate_audio(..., output_full=True). - Prevention: Reuse the exact
full_generationdict fromoutput_full=True, or save it withsave_as_prompt()and pass that file path.
Error: extra keys found: {...} / missing keys: {...}
- Cause: A model checkpoint doesn't match the expected model architecture (corrupt, partial, or wrong-version download).
- Solution: Force a fresh download by clearing the cache directory
~/.cache/suno/bark_v0(or callpreload_models(force_reload=True)), then retry. - Prevention: Let the first run complete its download fully before interrupting.
Warning: warning, text too long, lopping of last X%
- Cause: Your text exceeds the model's ~256-token text window for a single call, so the end is truncated.
- Solution: Split long text into shorter segments and chain them — see Long-Form and Consistent Voices.
- Prevention: Keep each
generate_audiocall to roughly one or two sentences (~13 seconds of speech).
Problem: Checkpoint fails to load on newer PyTorch (weights-only error)
- Cause: PyTorch 2.6+ changed
torch.loadto default toweights_only=True, which can reject Bark's checkpoint format. Reported in issues #656 and #626. - Solution: Use a PyTorch version known to work with Bark (2.0–2.5), or apply the workaround discussed in the linked issues.
- Prevention: Pin your
torchversion in your environment when relying on Bark's bundled loader.
Problem: Where are models downloaded, and how do I change it?
- Cause: Bark caches models under
~/.cache/suno/bark_v0, derived from the Hugging Face cache. Reported as a question in #341. - Solution: Set the standard Hugging Face cache environment variable (
HF_HOME) — orXDG_CACHE_HOME— before importing Bark to relocate downloads. See How do I change the model download location?. - Prevention: Set the cache location once in your environment so all runs share the same model files.
Problem: Audio sounds low-fidelity, like an old phone call
- Cause: Bark generates audio from scratch and is not constrained to studio-quality speech; outputs vary in fidelity.
- Solution: Try a different (or
v2/) voice preset, lower the temperatures for steadier output, and regenerate — results vary per run. - Prevention: Use
v2/presets and moderate temperatures for the most consistent quality.
Problem: Generation is extremely slow
- Cause: Running on CPU, or on a GPU without the optimizations.
- Solution: Use a CUDA-capable GPU, upgrade to a recent PyTorch (2.0+) for flash attention, and/or enable
SUNO_USE_SMALL_MODELS=True. - Prevention: Confirm a GPU is detected — if you see
No GPU being used, Bark is on CPU.
Problem: ModuleNotFoundError or dependency conflicts during install
- Cause: A broken Python build or conflicting
torch/torchvisionversions (e.g. issues #543, #292). - Solution: Install Bark in a fresh virtual environment and let it resolve its own dependency set.
- Prevention: Avoid mixing Bark into an environment with pinned, incompatible
torchversions.
12. Frequently Asked Questions
Q: How do I change where models are downloaded and cached?
Bark uses Hugging Face to download and store models, defaulting to ~/.cache/suno/bark_v0. Set the standard Hugging Face environment variable HF_HOME (or XDG_CACHE_HOME) before importing Bark to relocate the cache. See the Hugging Face environment variables docs.
Q: Why does the output differ from my prompt?
Bark is a GPT-style generative model. Like other generative models, it may take creative liberties, producing higher-variance output than traditional text-to-speech. Lower the temperatures (text_temp, waveform_temp) for steadier results.
Q: What voices are supported?
100+ speaker presets across the 13 supported languages, plus a special announcer voice. Bark can also generate unique random voices that fit your text. It does not currently support custom voice cloning.
Q: Why is output limited to about 13–14 seconds?
Bark's architecture and context window are optimized for generations of roughly this length. For longer audio, chain calls using a saved history prompt — see Long-Form and Consistent Voices.
Q: How much VRAM do I need?
The full models need about 12 GB of GPU memory to hold everything at once. Smaller cards — down to ~2 GB — work by combining SUNO_OFFLOAD_CPU=True and SUNO_USE_SMALL_MODELS=True.
Q: Can Bark generate music?
Bark can produce singing and musical sounds (wrap lyrics in ♪), but it is a text-to-audio model, not a dedicated music generator. For music, use Suno's music models on the web app.
Q: Can I use Bark commercially?
Yes. As of the 2023-05-01 update Bark is released under the MIT License, which permits commercial use. Pretrained checkpoints are provided for inference and commercial use.
Q: Does Bark do voice cloning?
No. Bark matches the tone, pitch, and prosody of a built-in preset, but it does not currently support cloning a voice from your own audio.
Q: How do I keep the same voice across multiple clips?
Generate the first clip with output_full=True, then pass the returned generation (or a .npz saved with save_as_prompt()) as the history_prompt for subsequent clips.
13. Quick Reference
Top-level API (from bark import ...)
| Symbol | Purpose |
|---|---|
generate_audio(text, ...) |
Generate a 24 kHz audio array from text. |
text_to_semantic(text, ...) |
First pipeline stage: text → semantic tokens. |
semantic_to_waveform(tokens, ...) |
Remaining stages: semantic tokens → audio array. |
save_as_prompt(filepath, full_generation) |
Save a generation dict to a reusable .npz prompt. |
preload_models(...) |
Download/load all models before generating. |
SAMPLE_RATE |
Output sample rate constant (24000). |
CLI
python -m bark --text "..." [--output_filename NAME] [--output_dir DIR] \
[--history_prompt PRESET_OR_PATH] [--text_temp 0.7] [--waveform_temp 0.7] \
[--silent] [--output_full]
Environment variables
| Variable | Default | Effect |
|---|---|---|
SUNO_USE_SMALL_MODELS |
False |
Use small models (~8 GB VRAM). |
SUNO_OFFLOAD_CPU |
False |
Offload models to CPU between use (low VRAM). |
SUNO_ENABLE_MPS |
False |
Enable Apple Silicon GPU. |
HF_HOME / XDG_CACHE_HOME |
— | Relocate the model cache. |
Text cues
[laughter] [laughs] [sighs] [music] [gasps] [clears throat] · — / ... pauses · ♪ lyrics ♪ · CAPS emphasis · [MAN] / [WOMAN] speaker bias
Key facts
| Fact | Value |
|---|---|
| Output sample rate | 24,000 Hz |
| Best per-call length | ~13 seconds |
| Supported languages | 13 (auto-detected) |
| Voice presets | 100+ (v2/ recommended) |
| License | MIT (commercial use allowed) |
| Model cache | ~/.cache/suno/bark_v0 |