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 commit 209145371cff8fc3bd60d7be902ea69cbdb7965a. 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): commit 0fc8fda70e376041f53b4aee40233159a4ead191
  • melo/main.py (language and speaker choices, --speed 1.0, --file, warning string, tts_to_file output_path): commit 88cf00a9cbc5d35b9500555928ec3237e6560b5b
  • melo/app.py (--share default false, --host None, --port None, wav buffer): commit 1b3646e2f3e7c52ff06d26e78ebe8459b0c77fda
  • melo/api.py (use_hf=True, ZH_MIX_EN): commit 7ade7b740e091210145954a8f2e73be21a756d32
  • melo/download_utils.py (LANG_TO_HF_REPO_ID, including EN_V2 and EN_NEWEST): commit 144a0980fac43411153209cf08a1998e3c161e10. URL constants in that file are not printed here
  • setup.py (melotts 0.1.2, melo and melo-ui scripts): commit af39760e235df2f79e9b011ecb26936369e36564
  • requirements.txt (unpinned torch, transformers==4.27.4): commit 2374f4674b8b2760761d3cc167799691f21efe29
  • Dockerfile (CMD host 0.0.0.0 port 8888, python melo/init_downloads.py): commit f7380ed7ab79641fe342af73e410a7574e35c3c8
  • melo/init_downloads.py (TTS for EN, ES, FR, ZH, JP, KR): commit 5bcbf947463d8534fa55da1361fbb88060ec2016
  • LICENSE (MIT, Copyright (c) 2024 MyShell.ai): commit dde723eb855435615566cac96da08b7d009afd5c. GitHub license field MIT
  • Model cards myshell-ai/MeloTTS-English, MeloTTS-English-v2, MeloTTS-English-v3, MeloTTS-Spanish, MeloTTS-French, MeloTTS-Chinese, MeloTTS-Japanese, and MeloTTS-Korean (cardData.license mit, gated false). config.json spk2id and n_speakers 256, 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_at 2026-11-13T07:04:10.079Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T07:04:10.751Z). GET /v1/public/compute-capabilities returned 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).