--- 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`.