{
  "label": "Global object configuration.",
  "properties": {
    "track": {
      "label": "Objects to track."
    },
    "filters": {
      "label": "Object filters.",
      "properties": {
        "min_area": {
          "label": "Minimum area of bounding box for object to be counted. Can be pixels (int) or percentage (float between 0.000001 and 0.99)."
        },
        "max_area": {
          "label": "Maximum area of bounding box for object to be counted. Can be pixels (int) or percentage (float between 0.000001 and 0.99)."
        },
        "min_ratio": {
          "label": "Minimum ratio of bounding box's width/height for object to be counted."
        },
        "max_ratio": {
          "label": "Maximum ratio of bounding box's width/height for object to be counted."
        },
        "threshold": {
          "label": "Average detection confidence threshold for object to be counted."
        },
        "min_score": {
          "label": "Minimum detection confidence for object to be counted."
        },
        "mask": {
          "label": "Detection area polygon mask for this filter configuration."
        }
      }
    },
    "mask": {
      "label": "Object mask."
    },
    "genai": {
      "label": "Config for using genai to analyze objects.",
      "properties": {
        "enabled": {
          "label": "Enable GenAI for camera."
        },
        "use_snapshot": {
          "label": "Use snapshots for generating descriptions."
        },
        "prompt": {
          "label": "Default caption prompt."
        },
        "object_prompts": {
          "label": "Object specific prompts."
        },
        "objects": {
          "label": "List of objects to run generative AI for."
        },
        "required_zones": {
          "label": "List of required zones to be entered in order to run generative AI."
        },
        "debug_save_thumbnails": {
          "label": "Save thumbnails sent to generative AI for debugging purposes."
        },
        "send_triggers": {
          "label": "What triggers to use to send frames to generative AI for a tracked object.",
          "properties": {
            "tracked_object_end": {
              "label": "Send once the object is no longer tracked."
            },
            "after_significant_updates": {
              "label": "Send an early request to generative AI when X frames accumulated."
            }
          }
        },
        "enabled_in_config": {
          "label": "Keep track of original state of generative AI."
        }
      }
    }
  }
}