# cuda-grid-controller Control-plane sidecar для [`vf_cuda_grid`](../) FFmpeg filter. Transforms MQTT / HTTP REST commands от Home Assistant / Node-RED / custom apps в FFmpeg `process_command` через ZeroMQ. Publishes state + events наружу для bidirectional integration. **Статус:** Phase 3 work-in-progress — basic skeleton + HA Discovery + ZMQ command bridge. Phase 4+ добавит overlays, audio orchestration. ## Что умеет (Phase 3) - ✅ MQTT subscribe `cuda_grid/cmd//layout/set` → ZMQ send → FFmpeg layout switch - ✅ MQTT publish `cuda_grid/state//layout` (retained) + `cuda_grid/event/.../layout_switched` - ✅ HA MQTT Discovery — `select.layout` + `sensor.current_layout` + `binary_sensor.online` per instance - ✅ HTTP REST API: `/health`, `/layouts`, `/state`, `POST /layout/{instance}/set` - ✅ Multi-instance (несколько FFmpeg pipelines с разными ZMQ endpoints) - ✅ Auto-reconnect MQTT, LWT для availability tracking ## Использование ```bash pip install -e . export MQTT_USERNAME=mqtt export MQTT_PASSWORD=secret cuda-grid-controller --config examples/controller.yaml ``` ## FFmpeg side — как подключить cuda_grid + zmq filter ```bash ffmpeg -i cam1.mp4 -i cam2.mp4 -i cam3.mp4 -i cam4.mp4 \ -filter_complex " [0:v][1:v][2:v][3:v]cuda_grid=layout=quad, zmq=bind_address=tcp\\\\://127.0.0.1\\\\:5555 " \ -c:v h264_nvenc out.mp4 ``` (После этого controller с `zmq_endpoint: tcp://127.0.0.1:5555` сможет переключать layout командой `cuda_grid@... layout six_grid`.) ## HA dashboard После startup controller'а — в Home Assistant появятся entities: - `select.cuda_grid__layout` — dropdown с layouts - `sensor.cuda_grid__current_layout` — текущий выбранный - `binary_sensor.cuda_grid_controller_online` — online/offline ## Roadmap | Phase | Что | |---|---| | 3 (this) | Basic skeleton + HA Discovery + ZMQ bridge для layout switching | | 4 | Overlay API (rect/text/icon через side data) | | 5 | Rich overlays (image/dim/graph/chat) + privacy filtering | | 6 | Audio orchestration (state machine, domofon use case) | Полный design: [`docs/design.md`](../docs/design.md).