tiny-trigger / README.md
Javier Montalvo
Add AI development attribution note
61641a1
|
Raw
History Blame Contribute Delete
4.64 kB
---
title: Tiny Trigger
emoji: "🔌"
colorFrom: red
colorTo: gray
sdk: gradio
sdk_version: 6.17.3
python_version: '3.13'
app_file: server.py
pinned: false
license: other
short_description: 'Open-vocabulary video automations with YOLOE'
tags:
- track:backyard
- achievement:offbrand
---
# Tiny Trigger
Tiny Trigger is a local-first hackathon prototype for open-vocabulary video
automations. It uses YOLOE to detect user-supplied classes plus every label
referenced by enabled rules in a video, then evaluates small structured rules
that can trigger simulated actions or optional webhook POSTs.
The LLM path is intentionally constrained: Replicate, OpenAI, or Claude compile
natural language into JSON/YAML automation rules. The app validates those rules
before evaluating them, and the LLM never emits executable code.
DEMO video: https://youtu.be/BfXir6fonR0
For a quick operator checklist, see [`DEMO.md`](DEMO.md).
## Development Attribution
Tiny Trigger was developed by Javier Montalvo with assistance from AI coding
tools, including Anthropic Claude and OpenAI Codex. Some earlier assisted work
may not consistently include co-author trailers in the commit history; future
assisted commits should include explicit attribution where applicable.
## Run Locally
```bash
pip install -r requirements.txt
python server.py
```
Or with Poetry:
```bash
poetry install
poetry run python server.py
```
The detector defaults to the Small YOLOE model (`yoloe-26s-seg.pt`) at 640px,
which Ultralytics downloads on first use if it is not already cached. Model
weights are not checked into the repo.
For small or background objects, use a larger model such as `yoloe-26l-seg.pt`,
set device to `cuda:0`, lower confidence to `0.05`-`0.15`, and raise image size
to `960` or `1280`.
Run tests with:
```bash
pip install -r requirements-dev.txt
python -m pytest
```
Or:
```bash
poetry run pytest
```
## Cloud Rule Compiler
Choose Replicate, OpenAI, or Claude in Settings and paste the matching API key.
Keys entered in the UI are sent only with compile requests. Hugging Face Space
owners can also set `REPLICATE_API_TOKEN`, `OPENAI_API_KEY`, or
`ANTHROPIC_API_KEY` as Space secrets.
## Rule Shape
Rules can be written directly as YAML or compiled from natural language:
```yaml
rules:
- name: person-near-steering-wheel
when:
all:
- present: {label: person, min_count: 1}
- near: {a: person, b: steering wheel, max_gap_percent: 16}
gate:
enabled: true
cooldown: {key: turn-on-pc, minutes: 5}
then:
- type: webhook
name: turn on pc
```
Initial video conditions include presence, count, near, far, and moving. Near/far
use the minimum horizontal/vertical gap between detection boxes in normalized
frame percent. Moving uses detector-provided track IDs across sampled frames;
YOLOE enables Ultralytics ByteTrack only when active rules include a moving
condition, so presence/near/count rules keep the higher-recall prediction path.
Moving tolerates one missed sampled frame by default to avoid repeat alerts from
detector flicker. Gates include enabled state and cooldown. Triggers can fire
while a condition is true, when it becomes true, when it becomes false, or on
either change. Tiny Trigger does not yet support speed, direction, long-gap
re-identification, or trajectory path rules.
```yaml
rules:
- name: monitor-presence-lights
when:
all:
- near: {a: person, b: monitor, max_gap_percent: 16}
trigger:
on: change
gate:
enabled: true
then:
enter:
- type: webhook
name: turn on lights
exit:
- type: webhook
name: turn off lights
```
Home Assistant, live RTSP/webcam monitoring, and trajectory logic are planned
later increments.
## Local State
Private local settings and runtime memory live under `.local/`, which is ignored
by git:
```text
.local/config.yaml private defaults such as camera/webhook URLs
.local/automations.json saved editable automation rules
.local/state.json cooldown memory and last-fired timestamps
.local/events.jsonl append-only fired action history
```
Example `.local/config.yaml`:
```yaml
webhook_url: "http://127.0.0.1:8123/api/webhook/example"
default_detector_model: "yoloe-26x-seg.pt"
default_device: "cuda:0"
default_image_size: 640
default_max_detections: 300
llm_provider: "anthropic"
replicate_model: "openai/gpt-5.2"
openai_model: "gpt-5.5"
anthropic_model: "claude-sonnet-4-6"
```
## License
This repository is provided under a temporary all-rights-reserved hackathon
prototype license. See `LICENSE`.