Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions backends/advanced/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ services:
socat TCP-LISTEN:18123,fork,reuseaddr TCP:100.99.62.5:8123"

chronicle-backend:
image: ${CHRONICLE_REGISTRY:-}chronicle-backend:${CHRONICLE_TAG:-latest}
build:
context: .
dockerfile: Dockerfile
Expand Down Expand Up @@ -83,6 +84,7 @@ services:
# - 1+ Stream workers (conditional based on config.yml - Deepgram/Parakeet)
# Uses Python orchestrator for process management, health monitoring, and self-healing
workers:
image: ${CHRONICLE_REGISTRY:-}chronicle-backend:${CHRONICLE_TAG:-latest}
build:
context: .
dockerfile: Dockerfile
Expand Down Expand Up @@ -131,6 +133,7 @@ services:
# - Weekly: Fine-tune error detection models using user feedback
# Set DEV_MODE=true in .env for 1-minute intervals (testing)
annotation-cron:
image: ${CHRONICLE_REGISTRY:-}chronicle-backend:${CHRONICLE_TAG:-latest}
build:
context: .
dockerfile: Dockerfile
Expand All @@ -153,6 +156,7 @@ services:
- annotation # Optional profile - enable with: docker compose --profile annotation up

webui:
image: ${CHRONICLE_REGISTRY:-}chronicle-webui:${CHRONICLE_TAG:-latest}
build:
context: ./webui
dockerfile: Dockerfile
Expand Down
18 changes: 9 additions & 9 deletions extras/asr-services/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ services:
dockerfile: providers/nemo/Dockerfile
args:
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}
image: chronicle-asr-nemo:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-nemo:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down Expand Up @@ -58,7 +58,7 @@ services:
build:
context: .
dockerfile: providers/faster_whisper/Dockerfile
image: chronicle-asr-faster-whisper:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-faster-whisper:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down Expand Up @@ -92,7 +92,7 @@ services:
dockerfile: providers/vibevoice/Dockerfile
args:
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cu126}
image: chronicle-asr-vibevoice:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-vibevoice:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down Expand Up @@ -133,7 +133,7 @@ services:
build:
context: .
dockerfile: providers/transformers/Dockerfile
image: chronicle-asr-transformers:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-transformers:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down Expand Up @@ -163,7 +163,7 @@ services:
build:
context: .
dockerfile: providers/qwen3_asr/Dockerfile.vllm
image: chronicle-asr-qwen3-vllm:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-qwen3-vllm:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_VLLM_PORT:-8768}:8000"
volumes:
Expand Down Expand Up @@ -193,7 +193,7 @@ services:
build:
context: .
dockerfile: providers/qwen3_asr/Dockerfile.full
image: chronicle-asr-qwen3-wrapper:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-qwen3-wrapper:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand All @@ -220,7 +220,7 @@ services:
build:
context: .
dockerfile: providers/qwen3_asr/Dockerfile
image: chronicle-asr-qwen3-bridge:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-qwen3-bridge:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_STREAM_PORT:-8769}:8766"
environment:
Expand All @@ -240,7 +240,7 @@ services:
build:
context: .
dockerfile: providers/vibevoice/Dockerfile.strixhalo
image: chronicle-asr-vibevoice-strixhalo:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-vibevoice-strixhalo:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down Expand Up @@ -285,7 +285,7 @@ services:
build:
context: .
dockerfile: providers/nemo/Dockerfile.strixhalo
image: chronicle-asr-nemo-strixhalo:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-asr-nemo-strixhalo:${CHRONICLE_TAG:-latest}
ports:
- "${ASR_PORT:-8767}:8765"
volumes:
Expand Down
5 changes: 3 additions & 2 deletions extras/havpe-relay/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
services:
havpe-relay:
image: ${CHRONICLE_REGISTRY:-}chronicle-havpe-relay:${CHRONICLE_TAG:-latest}
build:
context: .
dockerfile: Dockerfile
Expand All @@ -21,8 +22,8 @@ services:
timeout: 10s
retries: 3
start_period: 10s
command: ["uv", "run", "python3", "main.py"]
command: ["uv", "run", "python3", "main.py"]
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ./audio_chunks:/app/audio_chunks
- ./audio_chunks:/app/audio_chunks
5 changes: 3 additions & 2 deletions extras/speaker-recognition/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ services:
dockerfile: Dockerfile
args:
PYTORCH_CUDA_VERSION: ${PYTORCH_CUDA_VERSION:-cpu}
image: speaker-recognition:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-speaker:${CHRONICLE_TAG:-latest}
env_file:
- .env
ports:
Expand Down Expand Up @@ -67,7 +67,7 @@ services:
build:
context: .
dockerfile: Dockerfile.strixhalo
image: speaker-recognition-strixhalo:latest
image: ${CHRONICLE_REGISTRY:-}chronicle-speaker-strixhalo:${CHRONICLE_TAG:-latest}
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
Expand All @@ -92,6 +92,7 @@ services:
# React Web UI
web-ui:
platform: linux/amd64
image: ${CHRONICLE_REGISTRY:-}chronicle-speaker-webui:${CHRONICLE_TAG:-latest}
build:
context: webui
dockerfile: Dockerfile
Expand Down
122 changes: 122 additions & 0 deletions scripts/pull-images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
#!/usr/bin/env bash
# pull-images.sh — Pull Chronicle images from DockerHub and retag them locally
#
# Usage:
# DOCKERHUB_USERNAME=myuser ./scripts/pull-images.sh v1.0.0
#
# After pulling, start with the prebuilt images:
# DOCKERHUB_USERNAME=myuser ./start.sh --use-prebuilt v1.0.0

set -euo pipefail

# ── Colour helpers ─────────────────────────────────────────────────────────────
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
RESET='\033[0m'

info() { echo -e "${CYAN}ℹ️ $*${RESET}"; }
success() { echo -e "${GREEN}✅ $*${RESET}"; }
warn() { echo -e "${YELLOW}⚠️ $*${RESET}"; }
error() { echo -e "${RED}❌ $*${RESET}" >&2; }

# ── Validate inputs ────────────────────────────────────────────────────────────
if [[ -z "${DOCKERHUB_USERNAME:-}" ]]; then
error "DOCKERHUB_USERNAME env var is required."
echo " Example: DOCKERHUB_USERNAME=myuser ./scripts/pull-images.sh v1.0.0" >&2
exit 1
fi

TAG="${1:-}"
if [[ -z "$TAG" ]]; then
error "TAG argument is required."
echo " Example: DOCKERHUB_USERNAME=myuser ./scripts/pull-images.sh v1.0.0" >&2
exit 1
fi

REGISTRY="${DOCKERHUB_USERNAME}/"

# ── Image inventory ────────────────────────────────────────────────────────────
# Format: "local-image-name:registry-image-name"
# After pulling, each remote image is retagged to "<local-image-name>:<TAG>"
# so that docker-compose can find it when CHRONICLE_TAG=<TAG> is set.
IMAGES=(
"chronicle-backend:chronicle-backend"
"chronicle-webui:chronicle-webui"
"chronicle-speaker:chronicle-speaker"
"chronicle-speaker-strixhalo:chronicle-speaker-strixhalo"
"chronicle-speaker-webui:chronicle-speaker-webui"
"chronicle-asr-nemo:chronicle-asr-nemo"
"chronicle-asr-nemo-strixhalo:chronicle-asr-nemo-strixhalo"
"chronicle-asr-faster-whisper:chronicle-asr-faster-whisper"
"chronicle-asr-vibevoice:chronicle-asr-vibevoice"
"chronicle-asr-vibevoice-strixhalo:chronicle-asr-vibevoice-strixhalo"
"chronicle-asr-transformers:chronicle-asr-transformers"
"chronicle-asr-qwen3-wrapper:chronicle-asr-qwen3-wrapper"
"chronicle-asr-qwen3-bridge:chronicle-asr-qwen3-bridge"
"chronicle-havpe-relay:chronicle-havpe-relay"
)

echo ""
echo -e "${BOLD}Chronicle Image Pull${RESET}"
echo -e " Registry : ${REGISTRY}"
echo -e " Tag : ${TAG}"
echo ""

# ── Pull loop ─────────────────────────────────────────────────────────────────
PULLED=()
FAILED=()

for entry in "${IMAGES[@]}"; do
LOCAL_BASE="${entry%%:*}"
REMOTE_BASE="${REGISTRY}${entry##*:}"
REMOTE_TAG="${REMOTE_BASE}:${TAG}"
LOCAL_TAG="${LOCAL_BASE}:${TAG}"

echo -e "${CYAN}── ${entry##*:}${RESET}"
info " Pulling ← ${REMOTE_TAG}"

if docker pull "${REMOTE_TAG}"; then
# Retag to local name so docker-compose finds it with CHRONICLE_TAG=<TAG>
info " Retagging → ${LOCAL_TAG}"
docker tag "${REMOTE_TAG}" "${LOCAL_TAG}"
success " Ready as ${LOCAL_TAG}"
PULLED+=("${entry##*:}")
else
warn " Not found on DockerHub — skipping (this service may not have been pushed)"
FAILED+=("${entry##*:}")
fi
echo ""
done

# ── Summary ───────────────────────────────────────────────────────────────────
echo -e "${BOLD}── Summary ──────────────────────────────────────────────────────${RESET}"
printf "%-40s %s\n" "Image" "Status"
printf "%-40s %s\n" "─────────────────────────────────────" "──────"

for entry in "${IMAGES[@]}"; do
IMAGE_NAME="${entry##*:}"
STATUS=""
for p in "${PULLED[@]}"; do
[[ "$p" == "$IMAGE_NAME" ]] && STATUS="${GREEN}pulled${RESET}" && break
done
for f in "${FAILED[@]}"; do
[[ "$f" == "$IMAGE_NAME" ]] && STATUS="${YELLOW}not found${RESET}" && break
done
[[ -z "$STATUS" ]] && STATUS="${YELLOW}not found${RESET}"
printf "%-40s " "${IMAGE_NAME}"
echo -e "${STATUS}"
done

echo ""
if [[ ${#PULLED[@]} -gt 0 ]]; then
success "Pulled ${#PULLED[@]} image(s) tagged as ${TAG}"
echo ""
echo "Start services with prebuilt images:"
echo -e " ${BOLD}DOCKERHUB_USERNAME=${DOCKERHUB_USERNAME} ./start.sh --use-prebuilt ${TAG}${RESET}"
fi
if [[ ${#FAILED[@]} -gt 0 ]]; then
warn "${#FAILED[@]} image(s) not found on DockerHub (these services will fall back to local builds)"
fi
Loading
Loading