# Open TTS Leaderboard stage-1 image for Scylla's Band (spybyscript/scyllasband). # The eval scripts are injected at job time (open-tts-leaderboard/scyllasband/run_eval.py); this image only # holds the runtime and the model. GPU: ONNX Runtime with CUDA on the WebGPU bundle. CPU: the LiteRT bundle. FROM nvidia/cuda:12.9.0-runtime-ubuntu24.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ python3-pip \ git \ libsndfile1 \ && rm -rf /var/lib/apt/lists/* RUN ln -sf /usr/bin/python3 /usr/bin/python ENV PIP_BREAK_SYSTEM_PACKAGES=1 WORKDIR /app # The runtime at a pinned commit. The `cuda` extra is onnxruntime-gpu with its CUDA and cuDNN pip libraries; # LiteRT (ai-edge-litert) comes with the package. `datasets<4.0` decodes the eval sets without torchcodec. ARG SCYLLASBAND_COMMIT=57271a01f793ec0ed0baa1fd47eb2383518b9e79 RUN pip install --no-cache-dir \ "scyllasband[cuda] @ git+https://github.com/lowkeytea/scyllasband@${SCYLLASBAND_COMMIT}" \ soundfile "datasets<4.0" tqdm # Both bundles of the runtime's pinned release, validated on download, baked in so jobs start without fetching. RUN python -m scyllasband download --flavor webgpu --models-dir /app/models --yes \ && python -m scyllasband download --flavor litert --models-dir /app/models --yes # Build-time smoke test on the CPU (the build has no GPU): load the LiteRT bundle and speak one line. RUN python -c "from scyllasband import ScyllasBandRuntime, SynthesisRequest; \ rt = ScyllasBandRuntime.from_bundle('/app/models/litert'); \ r = rt.synthesize(SynthesisRequest(text='Build check.', voice_id='tuesday', seed=1)); \ print('ok', r.audio.size / r.sample_rate, 's')" ENTRYPOINT ["bash"] # Keep-alive CMD so the Space runtime stays healthy; `docker run` overrides it. EXPOSE 7860 CMD ["-c", "python3 -m http.server 7860"]