Compare commits
2 commits
0818f15498
...
a7ef0397e1
| Author | SHA1 | Date | |
|---|---|---|---|
| a7ef0397e1 | |||
| cf1fe136d0 |
4 changed files with 42 additions and 5 deletions
|
|
@ -116,7 +116,11 @@ services:
|
|||
S3_SECRET_KEY: ${S3_SECRET_KEY}
|
||||
S3_REGION: ${S3_REGION:-us-east-1}
|
||||
GROWING_PATH: /growing
|
||||
WORKER_QUEUES: proxy,conform,trim
|
||||
# Includes `import` (YouTube importer): the import queue had no consumer
|
||||
# after the capability-routing split, so import jobs sat unprocessed and
|
||||
# assets stayed `ingesting` forever. import is concurrency-1 + network-
|
||||
# bound, so one consumer (this heavy/primary worker) is sufficient.
|
||||
WORKER_QUEUES: proxy,conform,trim,import
|
||||
RUN_PROMOTION: "true"
|
||||
PROXY_CONCURRENCY: "2"
|
||||
NVIDIA_VISIBLE_DEVICES: GPU-79afca3e-2ab2-a6ea-1c44-706c1f0a26d6
|
||||
|
|
|
|||
|
|
@ -230,11 +230,29 @@ function YouTubeImport({ navigate }) {
|
|||
patch.error = patch.error || 'Import failed: check the Jobs screen for details.';
|
||||
} else if (asset.status === 'processing') {
|
||||
patch.status = 'processing';
|
||||
} else if (asset.status === 'ingesting') {
|
||||
patch.status = 'downloading';
|
||||
}
|
||||
|
||||
// While the import is still running, pull the live percentage from its
|
||||
// BullMQ job so the bar reflects the actual yt-dlp download instead of
|
||||
// sitting at 0 until the asset flips to ready. The worker emits 2..100
|
||||
// across the download + S3 upload (job.updateProgress). If the job has
|
||||
// already completed and been evicted, the fetch throws and we just fall
|
||||
// back to the status-driven values above.
|
||||
if (row.jobId && asset.status !== 'ready' && asset.status !== 'error') {
|
||||
try {
|
||||
const job = await window.ZAMPP_API.fetch('/jobs/' + row.jobId);
|
||||
if (typeof job.progress === 'number') patch.progress = job.progress;
|
||||
} catch { /* job evicted after completion — fall back to status */ }
|
||||
}
|
||||
|
||||
if (Object.keys(patch).length) updateRow(row.id, patch);
|
||||
if (asset.status === 'ready' || asset.status === 'error') return;
|
||||
} catch { /* ignore */ }
|
||||
setTimeout(tick, 3000);
|
||||
// Poll fairly briskly: the download phase is where the user wants to see
|
||||
// the bar move, and a short clip can finish in a handful of seconds.
|
||||
setTimeout(tick, 2000);
|
||||
};
|
||||
tick();
|
||||
return () => { stopped = true; };
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
FROM node:20-alpine
|
||||
# yt-dlp powers the YouTube importer; python3 is its runtime dep.
|
||||
RUN apk add --no-cache ffmpeg yt-dlp python3
|
||||
# Not from apk: the packaged yt-dlp goes stale and YouTube breaks old versions.
|
||||
# Pull the latest python-zipapp release (runs on musl via system python3) so a
|
||||
# rebuild always refreshes it. /usr/local/bin precedes /usr/bin on PATH.
|
||||
RUN apk add --no-cache ffmpeg python3 curl \
|
||||
&& curl -fsSL https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \
|
||||
-o /usr/local/bin/yt-dlp \
|
||||
&& chmod a+rx /usr/local/bin/yt-dlp
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install --omit=dev
|
||||
|
|
|
|||
|
|
@ -9,11 +9,20 @@
|
|||
FROM nvcr.io/nvidia/cuda:12.3.1-base-ubuntu22.04
|
||||
|
||||
# Install Node.js 20, ffmpeg (Ubuntu's ffmpeg includes h264_nvenc/hevc_nvenc),
|
||||
# and yt-dlp (+ python3 runtime) for the YouTube importer.
|
||||
# and yt-dlp for the YouTube importer.
|
||||
#
|
||||
# yt-dlp is NOT installed from apt: Ubuntu 22.04's package is pinned to a 2022
|
||||
# release, which YouTube has long since broken (extraction fails). yt-dlp must
|
||||
# track YouTube's frequent changes, so we pull the latest self-contained
|
||||
# release binary at build time. /usr/local/bin precedes /usr/bin on PATH, so
|
||||
# `yt-dlp` resolves to this one. Rebuild the worker image to refresh it.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
curl ca-certificates ffmpeg yt-dlp python3 \
|
||||
curl ca-certificates ffmpeg python3 \
|
||||
&& curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
|
||||
&& apt-get install -y --no-install-recommends nodejs \
|
||||
&& curl -fsSL https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux \
|
||||
-o /usr/local/bin/yt-dlp \
|
||||
&& chmod a+rx /usr/local/bin/yt-dlp \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /app
|
||||
|
|
|
|||
Loading…
Reference in a new issue