Files
vf-cuda-grid/controller/Dockerfile
T
gx 19ddaf2dde controller: browser-rendered overlays — Grafana/chat/любой HTML
MVP Phase 8 feature: headless Chromium snapshot URL → PNG → existing icon
overlay infrastructure. Use case — Grafana dashboard, web chat, любой
HTML widget с transparent background поверх video composite.

Архитектура:
  BrowserRenderer launches один shared Chromium instance, per-dashboard
  page. Loop:
    page.reload (для свежих данных — Grafana auto-refresh не triggers
                 в headless mode без user interaction)
    page.add_style_tag (re-inject transparent CSS — reload teryает styles)
    page.wait_for_selector (если selector задан)
    page.screenshot(omit_background=True) или locator(selector).screenshot
    save PNG к icon_dir
    dispatcher._reload_icon → filter re-reads atlas

Config (dynamic_overlays.dashboards в controller.yaml):
  id, target_instance, cell, url, x, y, w_px, h_px,
  refresh_sec (default 2.0s, min 0.5s — frequent reload bad см. stutter memory),
  inject_css (default — transparent background + zero margins),
  selector (optional CSS selector — экспортить только конкретный element),
  viewport_w/h (override page viewport, default = w_px/h_px;
                полезно при selector чтобы page layout не collapsed),
  wait_until, page_timeout_ms, opacity, z_order.

Dockerfile:
  + pip install playwright
  + playwright install --with-deps chromium (~170MB Chromium + ~150MB system libs)

Если dashboards не нужны — можно убрать оба install'а (playwright
import lazy, BrowserRenderer.start() graceful no-op без playwright).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 23:09:50 +01:00

49 lines
1.5 KiB
Docker

# cuda-grid-controller — Python sidecar для vf_cuda_grid filter.
FROM python:3.11-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /app
# ffmpeg для snapshot endpoint — нужен basic CPU build (RTSP read + PNG output).
# Размер: ~120 MB additional (ffmpeg + libs); приемлемо для controller image.
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
# Install deps первым layer — пересборка только при изменении pyproject.toml
COPY pyproject.toml ./
RUN pip install --no-cache-dir \
fastapi \
"uvicorn[standard]" \
pydantic \
pydantic-settings \
aiomqtt \
pyzmq \
pyyaml \
structlog \
typer \
sse-starlette \
pillow \
httpx \
playwright
# Playwright headless Chromium для browser-rendered overlays (Grafana, чаты).
# install-deps добавляет system libs (libnss3, libxkbcommon0, libgbm1...).
# Chromium ~170 MB + system deps ~150 MB. Можно отключить если dashboards
# не нужны: убрать `playwright` из pip и закомментировать ниже.
RUN playwright install --with-deps chromium
# Source code
COPY cuda_grid_controller ./cuda_grid_controller
COPY examples ./examples
RUN pip install --no-cache-dir -e .
EXPOSE 8080
ENTRYPOINT ["cuda-grid-controller"]
CMD ["--config", "/app/controller.yaml"]