2026-10-10 07:44:33 UTC
840 MB
cpu
DEBIAN_FRONTENDnoninteractive
DECODER_CHECKPOINT_PATHcheckpoints/s2-pro/codec.pth
DECODER_CONFIG_NAMEmodded_dac_vq
GPG_KEY7169605F62C751356D054A26A821E680E5FA6305
GRADIO_SERVER_NAME0.0.0.0
GRADIO_SERVER_PORT7860
LANGC.UTF-8
LLAMA_CHECKPOINT_PATHcheckpoints/s2-pro
PATH/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONDONTWRITEBYTECODE1
PYTHONUNBUFFERED1
PYTHON_SHA256c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a
PYTHON_VERSION3.12.15
UV_EXTRAcpu
[#000] sha256:0f1057e9e642fd25f779db396724d1413a278ac86161f2f1e341bed43ed6beea - 2.94% (24.7 MB)
[#001] sha256:5c079aa6ca7ff40ebf4ef1237405063685f3039daa25caa4c1a0aa32a53d7693 - 0.11% (910 KB)
[#002] sha256:5ba2bdafda20396c5adb0c084a22df111e4ede38385b6fe77f011e88dac99ff6 - 1.32% (11.1 MB)
[#003] sha256:1c2f3d13f8adbd87b91032e033bd3878c3c6cdb50e1f1061ea118c9ad30aee00 - 0.0% (207 Bytes)
[#004] sha256:4845535d3c2120ecd250d26416eb1ab7c11f16d23f3c30e4bdb0acd5ed835841 - 3.35% (28.2 MB)
[#005] sha256:b49e4902227c992462c4755721e22fd2de812a0f8b03b2b1eabe871f888a62d0 - 30.74% (258 MB)
[#006] sha256:fc3e1efcffac9f9e57369230f13dc7c7662baa44a6e53896d427c0e2a3ec83f8 - 2.2% (18.4 MB)
[#007] sha256:ea1414d7fdecdd16f900010fe8334d388442c0fa465cad4e75eb5ccc6740d4a9 - 0.0% (3.35 KB)
[#008] sha256:3ef279101e758a6f63672d85a5c1682b89880479d717f5299e689f661f127d4b - 0.0% (119 Bytes)
[#009] sha256:2c1ce468d9f3d941396801f6e3afc8921466650dd05430fe644cd3537713d27f - 0.0% (16 Bytes)
[#010] sha256:ef56bab223a7bd4fd3984bc9c0010cdc39fec2c3b71ea6cfa55b0fa8161a8222 - 0.03% (267 KB)
[#011] sha256:eaabd0899072b1cb319728270180805d78356f17ceb8e434f1c7391b494d12d4 - 58.48% (491 MB)
[#012] sha256:e89b7e2d609ddd83c7fa9ec92bcac764ac988449a96530c3c4997e98b7f48634 - 0.79% (6.64 MB)
[#013] sha256:ee6db85356debc72cd8fe77952b99107207ee1bf6674f4153f62a3d5aa565326 - 0.04% (344 KB)
[#014] sha256:30d27635cee7dbb49a3b70fb5c9ace6834593a415c99b9a974875108ed21380b - 0.0% (789 Bytes)
[#015] sha256:682a1dca6827c024fd3bf022969ef673ba4f53bdcacdd9fc1485cd7bc9d0ee8b - 0.0% (434 Bytes)
# debian.sh --arch 'amd64' out/ 'trixie' '@1791158400'
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)ENV LANG=C.UTF-8
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)ENV PYTHON_VERSION=3.12.15
2026-10-06 01:55:57 UTC (buildkit.dockerfile.v0)ENV PYTHON_SHA256=c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a
2026-10-06 02:04:40 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev g++ gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
2026-10-06 02:04:40 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit
2026-10-06 02:04:40 UTC (buildkit.dockerfile.v0)CMD ["python3"]
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ENV UV_EXTRA=cpu
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux && rm -f /etc/apt/apt.conf.d/docker-clean && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && apt-get update && apt-get install -y --no-install-recommends git ca-certificates curl && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG UV_VERSION=0.8.15
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG PY_VER=3.12
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG BACKEND=cpu
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG USERNAME=fish
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG USER_UID=1000
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG USER_GID=1000
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG UV_VERSION=0.8.15
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG UV_EXTRA=cpu
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ENV BACKEND=cpu DEBIAN_FRONTEND=noninteractive PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
2026-10-10 07:32:42 UTC (buildkit.dockerfile.v0)ARG DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c set -eux && rm -f /etc/apt/apt.conf.d/docker-clean && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && apt-get update && apt-get install -y --no-install-recommends ${DEPENDENCIES} && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)COPY /uv /uvx /bin/ # buildkit
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c set -eux; if getent group ${USER_GID} >/dev/null 2>&1; then echo "Group ${USER_GID} already exists"; else groupadd -g ${USER_GID} ${USERNAME}; fi; if id -u ${USER_UID} >/dev/null 2>&1; then echo "User ${USER_UID} already exists, using existing user"; EXISTING_USER=$(id -un ${USER_UID}); mkdir -p /app /home/${EXISTING_USER}/.cache; chown -R ${USER_UID}:${USER_GID} /app /home/${EXISTING_USER}/.cache; else useradd -m -u ${USER_UID} -g ${USER_GID} ${USERNAME}; mkdir -p /app /home/${USERNAME}/.cache; chown -R ${USERNAME}:${USERNAME} /app /home/${USERNAME}/.cache; fi # buildkit
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c mkdir -p /app/references && chown -R ${USER_UID}:${USER_GID} /app/references && chmod 755 /app/references # buildkit
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)WORKDIR /app
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 pyproject.toml uv.lock README.md ./ # buildkit
2026-10-10 07:33:00 UTC (buildkit.dockerfile.v0)USER 1000:1000
2026-10-10 07:33:11 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c uv python pin ${PY_VER} && uv sync --extra ${UV_EXTRA} --frozen --no-install-project # buildkit
2026-10-10 07:44:32 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 . . # buildkit
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c uv sync --extra ${UV_EXTRA} --frozen # buildkit
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c printf '%s\n' '#!/bin/bash' 'set -euo pipefail' '' '# Set user info from build args' 'USER_UID='${USER_UID} 'USER_GID='${USER_GID} '' '# Logging function' 'log() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $*" >&2; }' '' '# Validate environment' 'validate_env() {' ' if [ ! -d "/app/checkpoints" ]; then' ' log "WARNING: /app/checkpoints directory not found. Please mount your checkpoints."' ' fi' ' if [ ! -d "/app/references" ]; then' ' log "WARNING: /app/references directory not found. Please mount your references."' ' else' ' # Check if we can write to references directory' ' if [ ! -w "/app/references" ]; then' ' log "ERROR: Cannot write to /app/references directory. Please ensure the mounted directory has proper permissions for user with UID ${USER_UID}."' ' log "You can fix this by running: sudo chown -R ${USER_UID}:${USER_GID} /path/to/your/references"' ' exit 1' ' fi' ' fi' '}' '' '# Build device arguments' 'build_device_args() {' ' if [ "${BACKEND:-}" = "cpu" ]; then' ' echo "--device cpu"' ' fi' '}' '' '# Build compile arguments' 'build_compile_args() {' ' if [ "${1:-}" = "compile" ] || [ "${COMPILE:-}" = "1" ] || [ "${COMPILE:-}" = "true" ]; then' ' echo "--compile"' ' shift' ' fi' ' echo "$@"' '}' '' '# Health check function' 'health_check() {' ' local port=${1:-7860}' ' local endpoint=${2:-/health}' ' curl -f http://localhost:${port}${endpoint} 2>/dev/null || exit 1' '}' > /app/common.sh && chmod +x /app/common.sh # buildkit
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ARG GRADIO_SERVER_NAME=0.0.0.0
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ARG GRADIO_SERVER_PORT=7860
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ARG LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ARG DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ARG DECODER_CONFIG_NAME=modded_dac_vq
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)EXPOSE [7860/tcp]
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV GRADIO_SERVER_NAME=0.0.0.0
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV GRADIO_SERVER_PORT=7860
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENV DECODER_CONFIG_NAME=modded_dac_vq
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)RUN |13 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth DECODER_CONFIG_NAME=modded_dac_vq /bin/sh -c printf '%s\n' '#!/bin/bash' 'source /app/common.sh' '' 'log "Starting Fish Speech WebUI..."' 'validate_env' '' 'DEVICE_ARGS=$(build_device_args)' 'COMPILE_ARGS=$(build_compile_args "$@")' '' 'log "Device args: ${DEVICE_ARGS:-none}"' 'log "Compile args: ${COMPILE_ARGS}"' 'log "Server: ${GRADIO_SERVER_NAME}:${GRADIO_SERVER_PORT}"' '' 'exec uv run tools/run_webui.py \' ' --llama-checkpoint-path "${LLAMA_CHECKPOINT_PATH}" \' ' --decoder-checkpoint-path "${DECODER_CHECKPOINT_PATH}" \' ' --decoder-config-name "${DECODER_CONFIG_NAME}" \' ' ${DEVICE_ARGS} ${COMPILE_ARGS}' > /app/start_webui.sh && chmod +x /app/start_webui.sh # buildkit
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)HEALTHCHECK {Test:[CMD-SHELL curl -f http://localhost:${GRADIO_SERVER_PORT}/health || exit 1] Interval:30s Timeout:10s StartPeriod:1m0s StartInterval:0s Retries:3}
2026-10-10 07:44:33 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["/app/start_webui.sh"]
2026-10-10 07:44:51 UTC
746 MB
cpu
DEBIAN_FRONTENDnoninteractive
DECODER_CHECKPOINT_PATHcheckpoints/s2-pro/codec.pth
DECODER_CONFIG_NAMEmodded_dac_vq
GPG_KEY7169605F62C751356D054A26A821E680E5FA6305
GRADIO_SERVER_NAME0.0.0.0
GRADIO_SERVER_PORT7860
LANGC.UTF-8
LLAMA_CHECKPOINT_PATHcheckpoints/s2-pro
PATH/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONDONTWRITEBYTECODE1
PYTHONUNBUFFERED1
PYTHON_SHA256c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a
PYTHON_VERSION3.12.15
UV_EXTRAcpu
[#000] sha256:f6e34b18d5f2c1c6536bd84031bf7e06ba7e3fba48bf20b8173737e6cdf0c766 - 3.27% (24.4 MB)
[#001] sha256:10704142bab3b48558158338d1b0be1a417281db871e0ff1d10554e74c4db2ac - 0.12% (893 KB)
[#002] sha256:52adb33342b01bd4568ee0b85df477caed8cc4ff202784749213eee46281dc7f - 1.47% (10.9 MB)
[#003] sha256:62595de3e3230fd797f721fa7624a2fecec64c70e9aa0f4f52a9f44babb64f43 - 0.0% (207 Bytes)
[#004] sha256:2da170e044b55e2987bd19abe0850d1aa56620f12948e0d67c495dfbe85427ed - 4.27% (31.9 MB)
[#005] sha256:058ce6913f857418c87938b290a5f8b315729348f13f31cb7433f6e521183ae1 - 32.6% (243 MB)
[#006] sha256:47735bcbc7cfae155937089a0231aaa3522026391ae48c43a3bc91909721f8ed - 2.31% (17.2 MB)
[#007] sha256:17ad61a7e6a9272f25a08ea7ee64d28d9d3a8f5724c3cf7756aca289c6a0ea1f - 0.0% (3.35 KB)
[#008] sha256:db95cb95e315a5ca4e0b0068c3d67b983aa9d5f236737298534d4cf6d7e44e7e - 0.0% (117 Bytes)
[#009] sha256:2c1ce468d9f3d941396801f6e3afc8921466650dd05430fe644cd3537713d27f - 0.0% (16 Bytes)
[#010] sha256:8e406f382198d3126e24028e33a8c19b3d3b364c0a9dc313ac8387f9977f5d4b - 0.03% (267 KB)
[#011] sha256:f43bfdd6636f9e157b04780a7f6bebe801b9bd5095ea16657f69ba292544adc8 - 55.02% (411 MB)
[#012] sha256:e89b7e2d609ddd83c7fa9ec92bcac764ac988449a96530c3c4997e98b7f48634 - 0.89% (6.64 MB)
[#013] sha256:e44c1d1333627c1879c52c2bf1a35be510fc48321bbaa5b212ae430eedfa9d75 - 0.02% (176 KB)
[#014] sha256:0a6cbd501856cebe6652378594d54b7bb671b59bf6ac1b0507db4409bc8ef7a6 - 0.0% (789 Bytes)
[#015] sha256:bf358b2d16bf9daf9cf713f601891274d4de77da0bd9680ba208b261edc47bcb - 0.0% (434 Bytes)
# debian.sh --arch 'arm64' out/ 'trixie' '@1791158400'
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)ENV LANG=C.UTF-8
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; apt-get dist-clean # buildkit
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)ENV PYTHON_VERSION=3.12.15
2026-10-06 01:59:29 UTC (buildkit.dockerfile.v0)ENV PYTHON_SHA256=c2c4321961fab0fb999d66e0cecf521c2ab3994c7992873ea99e306c1094fd5a
2026-10-06 02:11:04 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev g++ gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:-} -Wl,--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-} -Wl,-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; apt-get dist-clean; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
2026-10-06 02:11:04 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit
2026-10-06 02:11:04 UTC (buildkit.dockerfile.v0)CMD ["python3"]
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ENV UV_EXTRA=cpu
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)RUN /bin/sh -c set -eux && rm -f /etc/apt/apt.conf.d/docker-clean && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && apt-get update && apt-get install -y --no-install-recommends git ca-certificates curl && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG UV_VERSION=0.8.15
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG PY_VER=3.12
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG BACKEND=cpu
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG USERNAME=fish
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG USER_UID=1000
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG USER_GID=1000
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG UV_VERSION=0.8.15
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG UV_EXTRA=cpu
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ENV BACKEND=cpu DEBIAN_FRONTEND=noninteractive PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
2026-10-10 07:33:30 UTC (buildkit.dockerfile.v0)ARG DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg
2026-10-10 07:35:50 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c set -eux && rm -f /etc/apt/apt.conf.d/docker-clean && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && apt-get update && apt-get install -y --no-install-recommends ${DEPENDENCIES} && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
2026-10-10 07:35:50 UTC (buildkit.dockerfile.v0)COPY /uv /uvx /bin/ # buildkit
2026-10-10 07:35:51 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c set -eux; if getent group ${USER_GID} >/dev/null 2>&1; then echo "Group ${USER_GID} already exists"; else groupadd -g ${USER_GID} ${USERNAME}; fi; if id -u ${USER_UID} >/dev/null 2>&1; then echo "User ${USER_UID} already exists, using existing user"; EXISTING_USER=$(id -un ${USER_UID}); mkdir -p /app /home/${EXISTING_USER}/.cache; chown -R ${USER_UID}:${USER_GID} /app /home/${EXISTING_USER}/.cache; else useradd -m -u ${USER_UID} -g ${USER_GID} ${USERNAME}; mkdir -p /app /home/${USERNAME}/.cache; chown -R ${USERNAME}:${USERNAME} /app /home/${USERNAME}/.cache; fi # buildkit
2026-10-10 07:35:51 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c mkdir -p /app/references && chown -R ${USER_UID}:${USER_GID} /app/references && chmod 755 /app/references # buildkit
2026-10-10 07:35:51 UTC (buildkit.dockerfile.v0)WORKDIR /app
2026-10-10 07:35:51 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 pyproject.toml uv.lock README.md ./ # buildkit
2026-10-10 07:35:51 UTC (buildkit.dockerfile.v0)USER 1000:1000
2026-10-10 07:36:42 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c uv python pin ${PY_VER} && uv sync --extra ${UV_EXTRA} --frozen --no-install-project # buildkit
2026-10-10 07:44:31 UTC (buildkit.dockerfile.v0)COPY --chown=1000:1000 . . # buildkit
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c uv sync --extra ${UV_EXTRA} --frozen # buildkit
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)RUN |8 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg /bin/sh -c printf '%s\n' '#!/bin/bash' 'set -euo pipefail' '' '# Set user info from build args' 'USER_UID='${USER_UID} 'USER_GID='${USER_GID} '' '# Logging function' 'log() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $*" >&2; }' '' '# Validate environment' 'validate_env() {' ' if [ ! -d "/app/checkpoints" ]; then' ' log "WARNING: /app/checkpoints directory not found. Please mount your checkpoints."' ' fi' ' if [ ! -d "/app/references" ]; then' ' log "WARNING: /app/references directory not found. Please mount your references."' ' else' ' # Check if we can write to references directory' ' if [ ! -w "/app/references" ]; then' ' log "ERROR: Cannot write to /app/references directory. Please ensure the mounted directory has proper permissions for user with UID ${USER_UID}."' ' log "You can fix this by running: sudo chown -R ${USER_UID}:${USER_GID} /path/to/your/references"' ' exit 1' ' fi' ' fi' '}' '' '# Build device arguments' 'build_device_args() {' ' if [ "${BACKEND:-}" = "cpu" ]; then' ' echo "--device cpu"' ' fi' '}' '' '# Build compile arguments' 'build_compile_args() {' ' if [ "${1:-}" = "compile" ] || [ "${COMPILE:-}" = "1" ] || [ "${COMPILE:-}" = "true" ]; then' ' echo "--compile"' ' shift' ' fi' ' echo "$@"' '}' '' '# Health check function' 'health_check() {' ' local port=${1:-7860}' ' local endpoint=${2:-/health}' ' curl -f http://localhost:${port}${endpoint} 2>/dev/null || exit 1' '}' > /app/common.sh && chmod +x /app/common.sh # buildkit
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ARG GRADIO_SERVER_NAME=0.0.0.0
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ARG GRADIO_SERVER_PORT=7860
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ARG LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ARG DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ARG DECODER_CONFIG_NAME=modded_dac_vq
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)EXPOSE [7860/tcp]
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV GRADIO_SERVER_NAME=0.0.0.0
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV GRADIO_SERVER_PORT=7860
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENV DECODER_CONFIG_NAME=modded_dac_vq
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)RUN |13 UV_VERSION=0.8.15 PY_VER=3.12 BACKEND=cpu USERNAME=fish USER_UID=1000 USER_GID=1000 UV_EXTRA=cpu DEPENDENCIES= libsox-dev build-essential cmake libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 LLAMA_CHECKPOINT_PATH=checkpoints/s2-pro DECODER_CHECKPOINT_PATH=checkpoints/s2-pro/codec.pth DECODER_CONFIG_NAME=modded_dac_vq /bin/sh -c printf '%s\n' '#!/bin/bash' 'source /app/common.sh' '' 'log "Starting Fish Speech WebUI..."' 'validate_env' '' 'DEVICE_ARGS=$(build_device_args)' 'COMPILE_ARGS=$(build_compile_args "$@")' '' 'log "Device args: ${DEVICE_ARGS:-none}"' 'log "Compile args: ${COMPILE_ARGS}"' 'log "Server: ${GRADIO_SERVER_NAME}:${GRADIO_SERVER_PORT}"' '' 'exec uv run tools/run_webui.py \' ' --llama-checkpoint-path "${LLAMA_CHECKPOINT_PATH}" \' ' --decoder-checkpoint-path "${DECODER_CHECKPOINT_PATH}" \' ' --decoder-config-name "${DECODER_CONFIG_NAME}" \' ' ${DEVICE_ARGS} ${COMPILE_ARGS}' > /app/start_webui.sh && chmod +x /app/start_webui.sh # buildkit
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)HEALTHCHECK {Test:[CMD-SHELL curl -f http://localhost:${GRADIO_SERVER_PORT}/health || exit 1] Interval:30s Timeout:10s StartPeriod:1m0s StartInterval:0s Retries:3}
2026-10-10 07:44:51 UTC (buildkit.dockerfile.v0)ENTRYPOINT ["/app/start_webui.sh"]
Please be careful as this will not just delete the reference but also the actual content!
For example when you have latest and v1.2.3 both pointing to the same image
the deletion of latest will also permanently remove v1.2.3.