How to run MeloTTS on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install MeloTTS from the official myshell-ai/MeloTTS repository, run the CLI or the Python example in docs/install.md, and copy the wav off the instance before you destroy it, because destroying the instance deletes its disk.
Other speech pages: How to run Kokoro TTS on a cloud GPU, How to run XTTS-v2 on a cloud GPU, How to run Dia text-to-speech on a cloud GPU, and How to run Spark-TTS on a cloud GPU. Voice cloning that installs this repository as its V2 base speaker, and whose README prints no GPU GB figure, is How to run OpenVoice on a cloud GPU. The Spark-TTS README prints no GB figure. The Dia README’s RTX 4090 table prints ~4.4GB and ~7.9GB, and the Dia model card says around 10GB. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The tunnel for the WebUI is How to use SSH port forwarding on a cloud GPU.
The repository LICENSE file is the MIT License. Its copyright line is Copyright (c) 2024 MyShell.ai. The README says this library is under the MIT License. The GitHub license field on 2026-11-13 was MIT. melo/download_utils.py maps EN to myshell-ai/MeloTTS-English, FR to myshell-ai/MeloTTS-French, JP to myshell-ai/MeloTTS-Japanese, ES to myshell-ai/MeloTTS-Spanish, ZH to myshell-ai/MeloTTS-Chinese, and KR to myshell-ai/MeloTTS-Korean. The model API for each of those six repos on 2026-11-13 returned gated false, top-level license null, and cardData.license mit. Read the LICENSE file before you redistribute the program.
The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.
What the README and the install doc say about memory
The README and docs/install.md print no GPU GB figure. The README says the library is “Fast enough for CPU real-time inference.” The Python examples in docs/install.md comment “CPU is sufficient for real-time inference” and say you can set the device to cpu, cuda, cuda:0, or mps. device = 'auto' is the comment’s line for using a GPU when one is available. Those sentences are the files’. This page did not measure them and does not treat them as a GPU GB figure.
GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T07:04:10.079Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T07:04:10.751Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. There is no upstream GPU GB figure to match these values against. This page did not run MeloTTS and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no MeloTTS template.
| Catalog name | vram_gb |
|---|---|
| RTX 2080 | 8 |
| RTX 3080 | 10 |
| RTX 2080 Ti | 11 |
| RTX 3080 Ti | 12 |
| V100 16G | 16 |
| A30 | 24 |
| RTX 3090 | 24 |
| RTX 4090 | 24 |
| RTX 4090D | 24 |
| RTX 4080 SUPER 32G | 32 |
| RTX 5090 | 32 |
| RTX 5090D | 32 |
| V100 32G | 32 |
| A100 40G | 40 |
| A800 40G | 40 |
| A40 | 48 |
| RTX 4090 48G | 48 |
| RTX 4090D 48G | 48 |
| RTX A6000 | 48 |
| NVIDIA RTX PRO 5000 72G | 72 |
| RTX PRO 5000 72G | 72 |
| A100 80G | 80 |
| A800 80G | 80 |
| H800 | 80 |
| RTX 6000D | 83 |
| H20 96G | 96 |
| RTX PRO 6000 96G | 96 |
| RTX PRO 6000 Max-Q | 96 |
| H20-3e 141G | 141 |
Install
On Deploy, choose Raw GPU. docs/install.md says the repo is developed and tested on Ubuntu 20.04 and Python 3.9. The Linux block, copied:
git clone https://github.com/myshell-ai/MeloTTS.git
cd MeloTTS
pip install -e .
python -m unidic download
setup.py sets name to melotts and version to 0.1.2. The console scripts are melotts = melo.main:main, melo = melo.main:main, and melo-ui = melo.app:main. requirements.txt lists torch and torchaudio with no version pin and no CUDA index, and it pins transformers==4.27.4. The install and develop commands in setup.py also run python -m unidic download. The commits API for the default branch main listed 209145371cff8fc3bd60d7be902ea69cbdb7965a, committed 2024-12-24T19:17:13Z. That commit is also the README. docs/install.md was 0fc8fda70e376041f53b4aee40233159a4ead191, committed 2024-03-12T22:09:19Z. requirements.txt was 2374f4674b8b2760761d3cc167799691f21efe29, committed 2024-08-03T02:09:47Z. setup.py was af39760e235df2f79e9b011ecb26936369e36564, committed 2024-02-29T22:02:56Z. This page did not install the package.
The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. requirements.txt does not pin a torch build. This page did not install a wheel and did not re-test MeloTTS on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Languages, speakers, the CLI, and the Python API
The README language table lists English (American), English (British), English (Indian), English (Australian), English (Default), Spanish, French, Chinese (mix EN), Japanese, and Korean. It says the Chinese speaker supports mixed Chinese and English.
docs/install.md says the available speakers are EN-Default, EN-US, EN-BR, EN_INDIA EN-AU. That sentence does not put a comma between EN_INDIA and EN-AU. The CLI examples:
melo "Text to read" output.wav
melo "Text to read" output.wav --language EN
melo "Text to read" output.wav --language EN --speaker EN-US
melo "Text to read" output.wav --language EN --speaker EN-AU
melo "text-to-speech 领域近年来发展迅速" zh.wav -l ZH
melo file.txt out.wav --file
melo/main.py defaults --language to EN and --speaker to EN-Default. The language choices are EN, ES, FR, ZH, JP, and KR. The speaker choices are EN-Default, EN-US, EN-BR, EN_INDIA, and EN-AU. --speed defaults to 1.0. --file reads the text argument as a path. For a language other than EN, the script warns with the string You specified a speaker but the language is English. when --speaker is set, then uses speaker_ids[list(speaker_ids.keys())[0]]. tts_to_file writes output_path. The commits API listed melo/main.py at 88cf00a9cbc5d35b9500555928ec3237e6560b5b (2024-03-01T12:38:04Z). This page did not run the CLI.
docs/install.md English example sets device = 'auto', calls TTS(language='EN', device=device), and writes en-us.wav, en-br.wav, en-india.wav, en-au.wav, and en-default.wav through speaker_ids['EN-US'], speaker_ids['EN-BR'], speaker_ids['EN_INDIA'], speaker_ids['EN-AU'], and speaker_ids['EN-Default']. The Spanish, French, Chinese, Japanese, and Korean examples in that file set device = 'cpu' and write es.wav, fr.wav, zh.wav, jp.wav, and kr.wav with speaker keys ES, FR, ZH, JP, and KR. The comment on those blocks says cpu or cuda:0.
melo/api.py TTS.__init__ defaults use_hf to True and loads config and checkpoint through load_or_download_config and load_or_download_model. Those functions take the part of the language string before -, uppercase it, and look it up in LANG_TO_HF_REPO_ID. Passing EN selects myshell-ai/MeloTTS-English. The same dict also has EN_V2 set to myshell-ai/MeloTTS-English-v2 and EN_NEWEST set to myshell-ai/MeloTTS-English-v3. The install examples pass language='EN'. This page did not call EN_V2 or EN_NEWEST. For ZH, api.py sets self.language to ZH_MIX_EN. The same file also has URL constants this page does not print. The default path is the Hugging Face lookup.
config.json on each of the six language='EN'-style repos, read 2026-11-13, had these spk2id maps. Each file also has n_speakers set to 256. This page does not treat 256 as the number of speakers in the install doc.
Repo selected by language |
spk2id |
|---|---|
myshell-ai/MeloTTS-English |
EN-US 0, EN-BR 1, EN_INDIA 2, EN-AU 3, EN-Default 4 |
myshell-ai/MeloTTS-Spanish |
ES 0 |
myshell-ai/MeloTTS-French |
FR 0 |
myshell-ai/MeloTTS-Chinese |
ZH 1 |
myshell-ai/MeloTTS-Japanese |
JP 0 |
myshell-ai/MeloTTS-Korean |
KR 0 |
WebUI
The install doc’s UI commands, copied:
melo-ui
# Or: python melo/app.py
melo/app.py builds a TTS object for EN, ES, FR, ZH, JP, and KR. The language radio lists those six codes. The speaker dropdown starts from the English spk2id keys and defaults the value to EN-US. synthesize calls tts_to_file into a buffer with format='wav' and returns that buffer to the audio widget. It does not set a project wav path. main defaults --share to false, --host to None, and --port to None, and calls demo.queue(api_open=False).launch(show_api=False, share=share, server_name=host, server_port=port). This page does not pass --share. The commits API listed melo/app.py at 1b3646e2f3e7c52ff06d26e78ebe8459b0c77fda (2024-03-01T20:41:57Z). This page did not start the UI. Forward the local URL the process prints with how to use SSH port forwarding on a cloud GPU.
The install doc’s Docker run lines are docker build -t melotts . and docker run -it -p 8888:8888 melotts. The GPU line in that file is docker run --gpus all -it -p 8888:8888 melotts. The Dockerfile CMD is python ./melo/app.py --host 0.0.0.0 --port 8888. Its last RUN is python melo/init_downloads.py, and that file constructs TTS for EN, ES, FR, ZH, JP, and KR. The commits API listed the Dockerfile at f7380ed7ab79641fe342af73e410a7574e35c3c8 (2024-02-28T01:04:21Z) and melo/init_downloads.py at 5bcbf947463d8534fa55da1361fbb88060ec2016 (2024-02-27T21:57:32Z). This page did not build the image.
The README and docs/install.md do not link a ComfyUI install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. This page does not add a ComfyUI install.
When it fails
CUDA out of memory. The README and docs/install.md print no GPU GB cutoff and no low-memory flag. The documented device strings are cpu, cuda, cuda:0, mps, and auto. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.
“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the package on that card.
Empty text. melo/main.py raises ValueError with You entered empty text or the file you passed was empty. when the text is empty. With --file, a missing path raises FileNotFoundError.
Save the audio, then destroy
Copy output.wav, zh.wav, out.wav, or the output_path the Python example writes, before you destroy the instance. The WebUI returns wav audio to the widget and does not set a project path. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.
The pricing page FAQ states the billing rule in these words:
Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.
Frequently asked questions
How much VRAM does the MeloTTS README publish?
The MeloTTS README and docs/install.md do not print a GPU GB figure. The README says the library is fast enough for CPU real-time inference. The install doc comments that CPU is sufficient for real-time inference and that the device can be cpu, cuda, cuda:0, or mps. This page did not measure those sentences and does not mark a catalog vram_gb as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which languages and speakers do the install doc and the configs list?
The README table lists English American, British, Indian, Australian, and Default, plus Spanish, French, Chinese (mix EN), Japanese, and Korean. docs/install.md says the available speakers are EN-Default, EN-US, EN-BR, EN_INDIA, and EN-AU. melo/main.py language choices are EN, ES, FR, ZH, JP, and KR. Passing language EN selects myshell-ai/MeloTTS-English. That config’s spk2id keys are EN-US, EN-BR, EN_INDIA, EN-AU, and EN-Default. The Spanish, French, Japanese, and Korean configs map ES, FR, JP, and KR to 0. The Chinese config maps ZH to 1. Each of those config files also sets n_speakers to 256. This page does not treat 256 as the speaker list. The dict also names myshell-ai/MeloTTS-English-v2 and myshell-ai/MeloTTS-English-v3 under keys EN_V2 and EN_NEWEST. The install examples pass language EN and do not call those keys.
Where is the audio saved, and which command starts the WebUI?
The install doc CLI writes output.wav, zh.wav, or out.wav, which is the path you pass. The Python examples write en-us.wav, en-br.wav, en-india.wav, en-au.wav, en-default.wav, es.wav, fr.wav, zh.wav, jp.wav, and kr.wav. The WebUI command is melo-ui or python melo/app.py. melo/app.py returns a wav buffer to the audio widget and does not set a project path. It defaults --share to false, --host to None, and --port to None. The Dockerfile CMD is python ./melo/app.py --host 0.0.0.0 --port 8888. This page did not start the UI and does not pass --share.
Which license covers MeloTTS?
The LICENSE file is the MIT License. Its copyright line is Copyright © 2024 MyShell.ai. The grant includes the words free of charge. Those words are license text, not a CloudGPU price and not a storage allowance. The README says the library is under the MIT License. The GitHub license field on 2026-11-13 was MIT. The six language model cards this page read had cardData.license mit and gated false. Read the LICENSE file before you redistribute the program.
Sources (read 2026-11-13, Asia/Shanghai)
- MeloTTS README (language table, MIT sentence, links to
docs/install.md): https://github.com/myshell-ai/MeloTTS/blob/main/README.md commit209145371cff8fc3bd60d7be902ea69cbdb7965a. That commit is also repository HEAD, 2024-12-24T19:17:13Z docs/install.md(clone,pip install -e .,python -m unidic download, CLI examples, speaker list, Python examples,melo-ui, Docker-p 8888:8888): commit0fc8fda70e376041f53b4aee40233159a4ead191melo/main.py(language and speaker choices,--speed1.0,--file, warning string,tts_to_fileoutput_path): commit88cf00a9cbc5d35b9500555928ec3237e6560b5bmelo/app.py(--sharedefault false,--hostNone,--portNone, wav buffer): commit1b3646e2f3e7c52ff06d26e78ebe8459b0c77fdamelo/api.py(use_hf=True,ZH_MIX_EN): commit7ade7b740e091210145954a8f2e73be21a756d32melo/download_utils.py(LANG_TO_HF_REPO_ID, includingEN_V2andEN_NEWEST): commit144a0980fac43411153209cf08a1998e3c161e10. URL constants in that file are not printed heresetup.py(melotts0.1.2,meloandmelo-uiscripts): commitaf39760e235df2f79e9b011ecb26936369e36564requirements.txt(unpinnedtorch,transformers==4.27.4): commit2374f4674b8b2760761d3cc167799691f21efe29Dockerfile(CMDhost0.0.0.0port8888,python melo/init_downloads.py): commitf7380ed7ab79641fe342af73e410a7574e35c3c8melo/init_downloads.py(TTSforEN,ES,FR,ZH,JP,KR): commit5bcbf947463d8534fa55da1361fbb88060ec2016LICENSE(MIT,Copyright (c) 2024 MyShell.ai): commitdde723eb855435615566cac96da08b7d009afd5c. GitHub license field MIT- Model cards
myshell-ai/MeloTTS-English,MeloTTS-English-v2,MeloTTS-English-v3,MeloTTS-Spanish,MeloTTS-French,MeloTTS-Chinese,MeloTTS-Japanese, andMeloTTS-Korean(cardData.licensemit,gatedfalse).config.jsonspk2idandn_speakers256, read 2026-11-13 - ComfyUI examples top-level directories (no MeloTTS directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T07:04:10.079Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T07:04:10.751Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no MeloTTS template
Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.
Last updated: 2026-11-13 (Asia/Shanghai).