diff --git a/pkgs/tools/audio/tts/default.nix b/pkgs/tools/audio/tts/default.nix new file mode 100644 index 000000000000..770e898f2eec --- /dev/null +++ b/pkgs/tools/audio/tts/default.nix @@ -0,0 +1,123 @@ +{ lib +, python3Packages +, fetchFromGitHub +, fetchpatch +, python3 +}: + +# +# Tested in the following setup: +# +# TTS model: +# Tacotron2 DDC +# https://drive.google.com/drive/folders/1Y_0PcB7W6apQChXtbt6v3fAiNwVf4ER5 +# Vocoder model: +# Multi-Band MelGAN +# https://drive.google.com/drive/folders/1XeRT0q4zm5gjERJqwmX5w84pMrD00cKD +# +# Arrange /tmp/tts like this: +# scale_stats.npy +# tts +# tts/checkpoint_130000.pth.tar +# tts/checkpoint_130000_tf.pkl +# tts/checkpoint_130000_tf_2.3rc0.tflite +# tts/config.json +# tts/scale_stats.npy +# vocoder +# vocoder/checkpoint_1450000.pth.tar +# vocoder/checkpoint_2750000_tf.pkl +# vocoder/checkpoint_2750000_tf_v2.3rc.tflite +# vocoder/config.json +# vocoder/scale_stats.npy +# +# Start like this: +# cd /tmp/tts +# tts-server \ +# --vocoder_config ./tts/vocoder/config.json \ +# --vocoder_checkpoint ./tts/vocoder/checkpoint_1450000.pth.tar \ +# --tts_config ./tts/config.json \ +# --tts_checkpoint ./tts/checkpoint_130000.pth.tar +# +# For now, for deployment check the systemd unit in the pull request: +# https://github.com/NixOS/nixpkgs/pull/103851#issue-521121136 +# + +python3Packages.buildPythonApplication rec { + pname = "tts"; + # until https://github.com/mozilla/TTS/issues/424 is resolved + # we treat released models as released versions: + # https://github.com/mozilla/TTS/wiki/Released-Models + version = "unstable-2020-06-17"; + + src = fetchFromGitHub { + owner = "mozilla"; + repo = "TTS"; + rev = "72a6ac54c8cfaa407fc64b660248c6a788bdd381"; + sha256 = "1wvs264if9n5xzwi7ryxvwj1j513szp6sfj6n587xk1fphi0921f"; + }; + + patches = [ + (fetchpatch { + url = "https://github.com/mozilla/TTS/commit/36fee428b9f3f4ec1914b090a2ec9d785314d9aa.patch"; + sha256 = "sha256-pP0NxiyrsvQ0A7GEleTdT87XO08o7WxPEpb6Bmj66dc="; + }) + ]; + + preBuild = '' + # numba jit tries to write to its cache directory + export HOME=$TMPDIR + sed -i -e 's!tensorflow==.*!tensorflow!' requirements.txt + sed -i -e 's!librosa==[^"]*!librosa!' requirements.txt setup.py + sed -i -e 's!unidecode==[^"]*!unidecode!' requirements.txt setup.py + sed -i -e 's!bokeh==[^"]*!bokeh!' requirements.txt setup.py + sed -i -e 's!numba==[^"]*!numba!' requirements.txt setup.py + # Not required for building/installation but for their development/ci workflow + sed -i -e '/pylint/d' requirements.txt setup.py + sed -i -e '/cardboardlint/d' requirements.txt setup.py + ''; + + + propagatedBuildInputs = with python3Packages; [ + matplotlib + scipy + pytorch + flask + attrdict + bokeh + soundfile + tqdm + librosa + unidecode + phonemizer + tensorboardx + fuzzywuzzy + tensorflow_2 + inflect + gdown + pysbd + ]; + + postInstall = '' + cp -r TTS/server/templates/ $out/${python3.sitePackages}/TTS/server + ''; + + checkInputs = with python3Packages; [ pytestCheckHook ]; + + disabledTests = [ + # RuntimeError: fft: ATen not compiled with MKL support + "test_torch_stft" + "test_stft_loss" + "test_multiscale_stft_loss" + # AssertionErrors that I feel incapable of debugging + "test_phoneme_to_sequence" + "test_text2phone" + "test_parametrized_gan_dataset" + ]; + + meta = with lib; { + homepage = "https://github.com/mozilla/TTS"; + description = "Deep learning for Text to Speech"; + license = licenses.mpl20; + maintainers = with maintainers; [ hexa mic92 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 115b23032375..0281bc4b7b53 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -25840,6 +25840,8 @@ julia_15 = callPackage ../development/compilers/julia/1.5.nix { tremulous = callPackage ../games/tremulous { }; + tts = callPackage ../tools/audio/tts { }; + tuxpaint = callPackage ../games/tuxpaint { }; tuxtype = callPackage ../games/tuxtype { };