Frigate
Frigate is a network video recorder with object detection. Its Generative AI feature writes object and review descriptions from snapshots, and it has a chat.
Plugboard options
Give Frigate its own key and a vision alias, because descriptions are image-based. Docker needs a reachable address (Serving other machines).
jsonc
{
"options": {
"listen": { "host": "0.0.0.0", "port": 4010 },
"keys": { "frigate": "{env:PLUGBOARD_KEY_FRIGATE}" },
"models": ["anthropic/claude-sonnet-4-6"],
"aliases": { "vision": "anthropic/claude-sonnet-4-6" },
"apps": { "frigate": { "allowedModels": ["vision"] } }
}
}Connect
Add a provider under genai in config.yml:
yml
genai:
plugboard:
provider: openai
base_url: http://host.docker.internal:4010/v1
# Read from the environment: FRIGATE_PLUGBOARD_KEY, the plugboard `frigate` app key.
api_key: "{FRIGATE_PLUGBOARD_KEY}"
# An alias from plugboard's `aliases` option. It must accept images.
model: vision
roles:
- chat
- descriptions
semantic_search:
enabled: true
model: jinav1
model_size: smallplugboard is a name you choose. Frigate expands {FRIGATE_PLUGBOARD_KEY} from the environment, so set it to the plugboard key. Do not give the provider the embeddings role.
The file is in examples/self-hosted/frigate/.
What works
- Descriptions (the
descriptionsrole), from images and text. - Chat (the
chatrole).
Limits
- Semantic search stays on Frigate's local Jina model. Plugboard serves no embeddings.
- Plugboard reads
data:image URLs. It fetches a plainhttp(s)image URL only whenremoteImagesis on, and then only public addresses. Turn it on only if Frigate sends URLs. - Snapshots go to the provider your OpenCode server is signed in to, so they leave your network.