Phase D - Drag-drop layers réordonnance: - @dnd-kit/core + sortable + utilities installés - LayersPanel réécrit avec SortableContext + useSortable - Endpoint layers.reorder + db.reorderLayers - Drag handle via GripVertical, optimistic UI update Phase B - Compositing dual (sharp serveur + Canvas client): - sharp 0.34.5 + vips-dev + libvips installés dans Dockerfile - compositeLayers() réécrit: téléchargement frames, blend pixel par pixel, masques avec feathering, opacity, blend modes (over/multiply/screen/overlay) - Endpoints compositing.composeFrame + compositing.composeSequence - Composant CompositePreview: rendu client temps réel via <img> + mix-blend-mode - Mode composite du ViewportPanel utilise CompositePreview pour preview live Phase A - Outil d'annotation viewport: - Composant AnnotationCanvas: brush/rectangle/lasso/eraser - Taille pinceau ajustable, undo stack, clear all, save vers S3 - Raccourcis clavier B/R/Y/E + Ctrl+Z - Bouton "Annoter" dans toolbar ViewportPanel - Endpoint frames.saveMask, intégration mode original Phase C - Pipeline auto-compose réel: - inpaintBackgrounds: appelle vraiment segmentationService.inpaintBackground - regenerateBackgrounds: vraie regen + propagation aux frames de la séquence - regenerateCharacters: utilise character sheets + masks - compositeAll: compose toutes les frames avec bg+fg via sharp - fullAutoCompose chaîne tout: detect → analyze → segment → inpaint → regen → composite - Tracking via generationJobs (progress %) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.6 KiB
Docker
46 lines
1.6 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
FROM node:22-alpine AS deps
|
|
WORKDIR /app
|
|
RUN apk add --no-cache git python3 make g++ vips-dev
|
|
RUN corepack enable && corepack prepare pnpm@10.15.1 --activate
|
|
COPY package.json pnpm-lock.yaml ./
|
|
COPY patches ./patches
|
|
RUN pnpm install --frozen-lockfile && pnpm rebuild sharp
|
|
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
RUN apk add --no-cache git
|
|
RUN corepack enable && corepack prepare pnpm@10.15.1 --activate
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
ARG VITE_ANALYTICS_ENDPOINT
|
|
ARG VITE_ANALYTICS_WEBSITE_ID
|
|
ARG VITE_APP_ID
|
|
ARG VITE_APP_LOGO
|
|
ARG VITE_APP_TITLE
|
|
ARG VITE_FRONTEND_FORGE_API_KEY
|
|
ARG VITE_FRONTEND_FORGE_API_URL
|
|
ARG VITE_OAUTH_PORTAL_URL
|
|
ENV VITE_ANALYTICS_ENDPOINT=$VITE_ANALYTICS_ENDPOINT \
|
|
VITE_ANALYTICS_WEBSITE_ID=$VITE_ANALYTICS_WEBSITE_ID \
|
|
VITE_APP_ID=$VITE_APP_ID \
|
|
VITE_APP_LOGO=$VITE_APP_LOGO \
|
|
VITE_APP_TITLE=$VITE_APP_TITLE \
|
|
VITE_FRONTEND_FORGE_API_KEY=$VITE_FRONTEND_FORGE_API_KEY \
|
|
VITE_FRONTEND_FORGE_API_URL=$VITE_FRONTEND_FORGE_API_URL \
|
|
VITE_OAUTH_PORTAL_URL=$VITE_OAUTH_PORTAL_URL
|
|
RUN pnpm build
|
|
|
|
FROM node:22-alpine AS runner
|
|
WORKDIR /app
|
|
RUN apk add --no-cache ffmpeg vips
|
|
ENV NODE_ENV=production PORT=3000
|
|
RUN corepack enable && corepack prepare pnpm@10.15.1 --activate
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY --from=builder /app/dist ./dist
|
|
COPY package.json ./
|
|
RUN addgroup -S app && adduser -S app -G app && chown -R app:app /app
|
|
USER app
|
|
EXPOSE 3000
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=5 CMD wget -q --spider http://127.0.0.1:3000/ || exit 1
|
|
CMD ["node", "dist/index.js"]
|