edit_video and export_video now run as media jobs: both registrations join the shared operation list the API and the worker build their runtime from, name every artifact they read (source, appended clips, subtitle files) so starting a job refuses artifacts the user cannot read, and their tool schemas use the runtime's continue_after helper. Container deployments get ffmpeg, ffprobe and the subtitle font in the API/worker image. Tests cover the handlers against a fake job context: cuts, blurred 9:16 reframes with subtitles, appended silent clips, audio extraction, single frames, batch exports with posters and progress, rotated phone video, clear input errors and cancellation. They skip where ffmpeg is not installed; the planner and parser tests always run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MRtGG9ARfqqhma3t85Ro2u
21 lines
870 B
Docker
21 lines
870 B
Docker
FROM node:22-bookworm@sha256:0557ac14e0d45d02ed563067b82856ca5e7aa3437fa28d98d4350ea9c3d9494a
|
|
# ffmpeg/ffprobe cut, reframe and export videos; DejaVu is the burned-in subtitle font.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ffmpeg fonts-dejavu-core \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
RUN corepack enable
|
|
WORKDIR /app
|
|
# Normalize modes: a restrictive host umask (e.g. 077 on hardened hosts) would otherwise
|
|
# leave the copied tree unreadable to USER node at runtime.
|
|
COPY --chmod=755 . .
|
|
RUN pnpm install --frozen-lockfile
|
|
RUN pnpm --filter @rakazo/db generate
|
|
RUN RAKAZO_ALLOW_DEV_SECRETS=1 pnpm --filter @rakazo/web build
|
|
RUN install -d -m 750 -o node -g node /data /app/apps/web/node_modules/.vite-temp
|
|
ARG GIT_SHA
|
|
ENV NODE_ENV=production
|
|
ENV GIT_SHA=$GIT_SHA
|
|
EXPOSE 3100 5173 7091
|
|
USER node
|
|
CMD ["pnpm", "--filter", "@rakazo/api", "start"]
|