diff --git a/.gitea/workflows/build-gpu.yml b/.gitea/workflows/build-gpu.yml new file mode 100644 index 0000000..f311103 --- /dev/null +++ b/.gitea/workflows/build-gpu.yml @@ -0,0 +1,31 @@ +name: Build and publish GPU image + +on: + workflow_dispatch: + +jobs: + build-gpu: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Gitea Container Registry + uses: docker/login-action@v3 + with: + registry: git.byte-mate.ru + username: Coder + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Build and publish linux/amd64 GPU image + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile.gpu + platforms: linux/amd64 + push: true + tags: | + git.byte-mate.ru/coder/whishper-gpu:latest diff --git a/Dockerfile b/Dockerfile index 0ecb9da..fd4a3df 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,17 @@ +ARG DENO_VERSION=2.9.5 +ARG YT_DLP_VERSION=2026.08.19 + +FROM denoland/deno:bin-${DENO_VERSION} AS deno_cache + # YT-DLP Download and setup FROM --platform=$BUILDPLATFORM golang:bookworm AS ytdlp_cache ARG TARGETOS ARG TARGETARCH +ARG YT_DLP_VERSION +ARG YT_DLP_SHA256=1fa6733c37ea6fb51c99ad8fe785e7b7e5f3246c9b980230329d4fb72ed8d4d6 RUN apt update && apt install -y wget -RUN wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp +RUN wget "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/yt-dlp" -O /usr/local/bin/yt-dlp \ + && echo "${YT_DLP_SHA256} /usr/local/bin/yt-dlp" | sha256sum -c - RUN chmod a+rx /usr/local/bin/yt-dlp # Backend setup @@ -58,6 +66,7 @@ COPY --from=frontend-prod-deps /app/node_modules /app/frontend/node_modules COPY --from=backend-builder /app/whishper /bin/whishper RUN chmod a+rx /bin/whishper COPY --from=ytdlp_cache /usr/local/bin/yt-dlp /bin/yt-dlp +COPY --from=deno_cache /deno /bin/deno # Nginx setup COPY ./nginx.conf /etc/nginx/nginx.conf diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 7715fe8..c3a53fc 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -1,9 +1,17 @@ +ARG DENO_VERSION=2.9.5 +ARG YT_DLP_VERSION=2026.08.19 + +FROM denoland/deno:bin-${DENO_VERSION} AS deno_cache + # YT-DLP Download and setup FROM --platform=$BUILDPLATFORM golang:bookworm AS ytdlp_cache ARG TARGETOS ARG TARGETARCH +ARG YT_DLP_VERSION +ARG YT_DLP_SHA256=1fa6733c37ea6fb51c99ad8fe785e7b7e5f3246c9b980230329d4fb72ed8d4d6 RUN apt update && apt install -y wget -RUN wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp +RUN wget "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/yt-dlp" -O /usr/local/bin/yt-dlp \ + && echo "${YT_DLP_SHA256} /usr/local/bin/yt-dlp" | sha256sum -c - RUN chmod a+rx /usr/local/bin/yt-dlp # Backend setup @@ -76,6 +84,7 @@ COPY --from=frontend-prod-deps /app/node_modules /app/frontend/node_modules COPY --from=backend-builder /app/whishper /bin/whishper RUN chmod a+rx /bin/whishper COPY --from=ytdlp_cache /usr/local/bin/yt-dlp /bin/yt-dlp +COPY --from=deno_cache /deno /bin/deno # Nginx setup COPY ./nginx.conf /etc/nginx/nginx.conf diff --git a/README.md b/README.md index f9d6e6b..1dc8206 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ - [x] 🔥 **GPU support**: use your NVIDIA GPU to get even faster transcription times! - [x] 🐎 **CPU support**: no GPU? No problem! Whishper can run on CPU too. +The Docker images pin `yt-dlp` to `2026.08.19` and include Deno `2.9.5`, which yt-dlp uses to solve YouTube JavaScript challenges. Both versions can be overridden at build time with the `YT_DLP_VERSION` and `DENO_VERSION` build arguments (update `YT_DLP_SHA256` when changing yt-dlp). + ### Roadmap - [ ] Local folder as media input ([#15](https://github.com/pluja/whishper/issues/15)). diff --git a/backend/Dockerfile b/backend/Dockerfile index 680b895..e5daa5f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,8 +1,16 @@ +ARG DENO_VERSION=2.9.5 +ARG YT_DLP_VERSION=2026.08.19 + +FROM denoland/deno:bin-${DENO_VERSION} AS deno_cache + FROM --platform=$BUILDPLATFORM golang:bookworm AS ytdlp_cache ARG TARGETOS ARG TARGETARCH +ARG YT_DLP_VERSION +ARG YT_DLP_SHA256=1fa6733c37ea6fb51c99ad8fe785e7b7e5f3246c9b980230329d4fb72ed8d4d6 RUN apt update && apt install -y wget -RUN wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp +RUN wget "https://github.com/yt-dlp/yt-dlp/releases/download/${YT_DLP_VERSION}/yt-dlp" -O /usr/local/bin/yt-dlp \ + && echo "${YT_DLP_SHA256} /usr/local/bin/yt-dlp" | sha256sum -c - RUN chmod a+rx /usr/local/bin/yt-dlp FROM devopsworks/golang-upx:1.23 as builder @@ -23,6 +31,7 @@ WORKDIR /app COPY --from=builder /app/whishper ./whishper RUN chmod a+rx ./whishper COPY --from=ytdlp_cache /usr/local/bin/yt-dlp /bin/yt-dlp +COPY --from=deno_cache /deno /bin/deno RUN mkdir /app/uploads diff --git a/backend/go.mod b/backend/go.mod index 0e10275..21b4270 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -8,7 +8,7 @@ require ( github.com/gofiber/fiber/v2 v2.50.0 github.com/rs/zerolog v1.30.0 github.com/snakesel/libretranslate v0.0.2 - github.com/wader/goutubedl v0.0.0-20230817095831-89e825670ccd + github.com/wader/goutubedl v0.0.0-20260820181547-08cab29d2129 go.mongodb.org/mongo-driver v1.12.1 ) diff --git a/backend/go.sum b/backend/go.sum index acfb72f..d5302f2 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -53,8 +53,8 @@ github.com/valyala/fasthttp v1.50.0 h1:H7fweIlBm0rXLs2q0XbalvJ6r0CUPFWK3/bB4N13e github.com/valyala/fasthttp v1.50.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/wader/goutubedl v0.0.0-20230817095831-89e825670ccd h1:XPyQDsvxm+Kawdk41tpvODAEcm24h9vVR/aZTI0tGAk= -github.com/wader/goutubedl v0.0.0-20230817095831-89e825670ccd/go.mod h1:5KXd5tImdbmz4JoVhePtbIokCwAfEhUVVx3WLHmjYuw= +github.com/wader/goutubedl v0.0.0-20260820181547-08cab29d2129 h1:EgoBHZNnX13+Ig3pp0CZWKkarqDs0iHMn+smvrXYRf8= +github.com/wader/goutubedl v0.0.0-20260820181547-08cab29d2129/go.mod h1:5KXd5tImdbmz4JoVhePtbIokCwAfEhUVVx3WLHmjYuw= github.com/wader/osleaktest v0.0.0-20191111175233-f643b0fed071 h1:QkrG4Zr5OVFuC9aaMPmFI0ibfhBZlAgtzDYWfu7tqQk= github.com/wader/osleaktest v0.0.0-20191111175233-f643b0fed071/go.mod h1:XD6emOFPHVzb0+qQpiNOdPL2XZ0SRUM0N5JHuq6OmXo= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=