diff --git a/docker-compose.yml b/docker-compose.yml index b74bd0d..3f4fbc5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,27 +4,32 @@ # OPENROUTER_MODEL="openai/gpt-oss-20b:free" services: - video-render-new: + video-render: restart: unless-stopped build: . - container_name: video-render-new + container_name: video-render environment: # RabbitMQ credentials - - RABBITMQ_PASS=${RABBITMQ_PASS} - - GEMINI_API_KEY=${GEMINI_API_KEY} + # - RABBITMQ_PASS=${RABBITMQ_PASS} + - RABBITMQ_PASS="L@l321321321" + # - GEMINI_API_KEY=${GEMINI_API_KEY} + - GEMINI_API_KEY="AIzaSyB5TPjSPPZG1Qb6EtblhKFAjvCOdY15rcw" - GEMINI_MODEL=${GEMINI_MODEL:-gemini-2.5-pro} - - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} + # - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} + - OPENROUTER_API_KEY="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" - OPENROUTER_MODEL=${OPENROUTER_MODEL:-openai/gpt-oss-20b:free} - FASTER_WHISPER_MODEL_SIZE=${FASTER_WHISPER_MODEL_SIZE:-small} - ports: - - "5000:5000" + # ports: + # - "5000:5000" volumes: # Mount host directories into the container so that videos can be # provided and outputs collected. These paths can be customised when # deploying the stack. The defaults assume /root/videos and # /root/outputs on the host. - - "/root/videos:/app/videos" - - "/root/outputs:/app/outputs" + # - "/root/videos:/app/videos" + # - "/root/outputs:/app/outputs" + - "./videos:/app/videos" + - "./outputs:/app/outputs" command: "python -u main.py" # runtime: nvidia diff --git a/dockerfile b/dockerfile index 048fdd3..6ee410f 100644 --- a/dockerfile +++ b/dockerfile @@ -1,49 +1,47 @@ FROM python:3.11-slim -# Create and set the working directory WORKDIR /app -# Prevent some interactive prompts during package installation ENV DEBIAN_FRONTEND=noninteractive -# Install ffmpeg and other system dependencies. The list largely mirrors -# the original project but omits PostgreSQL development headers which are -# unused here. We include libgl1 and libglib2.0-0 so that MoviePy -# (through its dependencies) can find OpenGL and GLib when using the -# Pillow and numpy backends. RUN apt-get update && \ apt-get install -y --no-install-recommends \ ffmpeg \ + pkg-config \ + libavcodec-dev \ + libavdevice-dev \ + libavfilter-dev \ + libavformat-dev \ + libavutil-dev \ + libswresample-dev \ + libswscale-dev \ + gcc \ + g++ \ libgl1 \ libglib2.0-0 \ - build-essential \ - xvfb \ - xdg-utils \ - wget \ - unzip \ - ffmpeg \ libgomp1 \ libpq-dev \ - vim \ libmagick++-dev \ imagemagick \ fonts-liberation \ sox \ bc \ - gsfonts && \ + gsfonts \ + xvfb \ + xdg-utils \ + wget \ + unzip \ + vim && \ rm -rf /var/lib/apt/lists/* -# Copy dependency specification and install Python dependencies COPY requirements.txt ./ + +RUN pip install --no-cache-dir --upgrade pip setuptools wheel + RUN pip install --no-cache-dir -r requirements.txt -# Copy the rest of the application code COPY . . -# Declare volumes for videos and outputs. These paths correspond to the -# mount points defined in the docker-compose file. Using VOLUME here -# documents the intended persistent storage locations. VOLUME ["/app/videos", "/app/outputs"] -# The default command starts the consumer loop CMD ["python", "-u", "main.py"] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f329669..1593182 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ moviepy==2.2.0 -pillow==10.3.0 +pillow==9.5.0 numpy>=1.26.0 -requests>=2.31.0 -pika>=1.3.2 -faster-whisper==1.0.0 +requests +pika +faster-whisper==1.2.0 \ No newline at end of file diff --git a/video_render/llm.py b/video_render/llm.py index 8a7b143..c0742bc 100644 --- a/video_render/llm.py +++ b/video_render/llm.py @@ -7,8 +7,8 @@ from typing import Dict, List import requests -from .config import BASE_DIR, Settings -from .transcription import TranscriptionResult +from video_render.config import BASE_DIR, Settings +from video_render.transcription import TranscriptionResult logger = logging.getLogger(__name__) diff --git a/video_render/media.py b/video_render/media.py index 360b231..7fb878e 100644 --- a/video_render/media.py +++ b/video_render/media.py @@ -5,9 +5,9 @@ import shutil from dataclasses import dataclass from pathlib import Path -from .config import Settings -from .ffmpeg import extract_audio_to_wav -from .utils import ensure_workspace, remove_paths, sanitize_filename +from video_render.config import Settings +from video_render.ffmpeg import extract_audio_to_wav +from video_render.utils import ensure_workspace, remove_paths, sanitize_filename logger = logging.getLogger(__name__) diff --git a/video_render/messaging.py b/video_render/messaging.py index 28470f5..08ead1d 100644 --- a/video_render/messaging.py +++ b/video_render/messaging.py @@ -6,7 +6,7 @@ from typing import Any, Callable, Dict import pika -from .config import Settings +from video_render.config import Settings logger = logging.getLogger(__name__) diff --git a/video_render/pipeline.py b/video_render/pipeline.py index 0d4b7cd..0b33843 100644 --- a/video_render/pipeline.py +++ b/video_render/pipeline.py @@ -5,12 +5,12 @@ from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional -from .config import Settings -from .llm import GeminiHighlighter, OpenRouterCopywriter -from .media import MediaPreparer, VideoWorkspace -from .transcription import TranscriptionResult, TranscriptionService -from .utils import remove_paths, sanitize_filename -from .rendering import VideoRenderer +from video_render.config import Settings +from video_render.llm import GeminiHighlighter, OpenRouterCopywriter +from video_render.media import MediaPreparer, VideoWorkspace +from video_render.transcription import TranscriptionResult, TranscriptionService +from video_render.utils import remove_paths, sanitize_filename +from video_render.rendering import VideoRenderer logger = logging.getLogger(__name__) diff --git a/video_render/rendering.py b/video_render/rendering.py index b59abb7..efd45e0 100644 --- a/video_render/rendering.py +++ b/video_render/rendering.py @@ -16,8 +16,8 @@ from moviepy.editor import ( ) from PIL import Image, ImageColor, ImageDraw, ImageFont -from .config import Settings -from .transcription import TranscriptionResult, WordTiming +from video_render.config import Settings +from video_render.transcription import TranscriptionResult, WordTiming logger = logging.getLogger(__name__) diff --git a/video_render/transcription.py b/video_render/transcription.py index bf5d695..b5d86db 100644 --- a/video_render/transcription.py +++ b/video_render/transcription.py @@ -8,7 +8,7 @@ from typing import List, Optional from faster_whisper import WhisperModel -from .config import Settings +from video_render.config import Settings logger = logging.getLogger(__name__)