frigate/docs/scripts/lib/nav_map.py
Josh Hawkins 772bca9375 add generation script
a script to read yaml code blocks from docs markdown files and generate corresponding "Frigate UI" tab instructions based on the json schema, i18n, section configs (hidden fields), and nav mappings
2026-03-27 08:16:56 -05:00

121 lines
4.3 KiB
Python

"""Map config section keys to Settings UI navigation paths."""
# Derived from web/src/pages/Settings.tsx section mappings
# and web/public/locales/en/views/settings.json menu labels.
#
# Format: section_key -> (group_label, page_label)
# Navigation path: "Settings > {group_label} > {page_label}"
GLOBAL_NAV: dict[str, tuple[str, str]] = {
"detect": ("Global configuration", "Object detection"),
"ffmpeg": ("Global configuration", "FFmpeg"),
"record": ("Global configuration", "Recording"),
"snapshots": ("Global configuration", "Snapshots"),
"motion": ("Global configuration", "Motion detection"),
"objects": ("Global configuration", "Objects"),
"review": ("Global configuration", "Review"),
"audio": ("Global configuration", "Audio events"),
"live": ("Global configuration", "Live playback"),
"timestamp_style": ("Global configuration", "Timestamp style"),
"notifications": ("Notifications", "Notifications"),
}
CAMERA_NAV: dict[str, tuple[str, str]] = {
"detect": ("Camera configuration", "Object detection"),
"ffmpeg": ("Camera configuration", "FFmpeg"),
"record": ("Camera configuration", "Recording"),
"snapshots": ("Camera configuration", "Snapshots"),
"motion": ("Camera configuration", "Motion detection"),
"objects": ("Camera configuration", "Objects"),
"review": ("Camera configuration", "Review"),
"audio": ("Camera configuration", "Audio events"),
"audio_transcription": ("Camera configuration", "Audio transcription"),
"notifications": ("Camera configuration", "Notifications"),
"live": ("Camera configuration", "Live playback"),
"birdseye": ("Camera configuration", "Birdseye"),
"face_recognition": ("Camera configuration", "Face recognition"),
"lpr": ("Camera configuration", "License plate recognition"),
"mqtt": ("Camera configuration", "MQTT"),
"onvif": ("Camera configuration", "ONVIF"),
"ui": ("Camera configuration", "Camera UI"),
"timestamp_style": ("Camera configuration", "Timestamp style"),
}
ENRICHMENT_NAV: dict[str, tuple[str, str]] = {
"semantic_search": ("Enrichments", "Semantic search"),
"genai": ("Enrichments", "Generative AI"),
"face_recognition": ("Enrichments", "Face recognition"),
"lpr": ("Enrichments", "License plate recognition"),
"classification": ("Enrichments", "Object classification"),
"audio_transcription": ("Enrichments", "Audio transcription"),
}
SYSTEM_NAV: dict[str, tuple[str, str]] = {
"go2rtc_streams": ("System", "go2rtc streams"),
"database": ("System", "Database"),
"mqtt": ("System", "MQTT"),
"tls": ("System", "TLS"),
"auth": ("System", "Authentication"),
"networking": ("System", "Networking"),
"proxy": ("System", "Proxy"),
"ui": ("System", "UI"),
"logger": ("System", "Logging"),
"environment_vars": ("System", "Environment variables"),
"telemetry": ("System", "Telemetry"),
"birdseye": ("System", "Birdseye"),
"detectors": ("System", "Detector hardware"),
"model": ("System", "Detection model"),
}
# All known top-level config section keys
ALL_CONFIG_SECTIONS = (
set(GLOBAL_NAV)
| set(CAMERA_NAV)
| set(ENRICHMENT_NAV)
| set(SYSTEM_NAV)
| {"cameras"}
)
def get_nav_path(section_key: str, level: str = "global") -> str | None:
"""Get the full navigation path for a config section.
Args:
section_key: Config section key (e.g., "record")
level: "global", "camera", "enrichment", or "system"
Returns:
NavPath string like "Settings > Global configuration > Recording",
or None if not found.
"""
nav_tables = {
"global": GLOBAL_NAV,
"camera": CAMERA_NAV,
"enrichment": ENRICHMENT_NAV,
"system": SYSTEM_NAV,
}
table = nav_tables.get(level)
if table is None:
return None
entry = table.get(section_key)
if entry is None:
return None
group, page = entry
return f"Settings > {group} > {page}"
def detect_level(section_key: str) -> str:
"""Detect whether a config section is global, camera, enrichment, or system."""
if section_key in SYSTEM_NAV:
return "system"
if section_key in ENRICHMENT_NAV:
return "enrichment"
if section_key in GLOBAL_NAV:
return "global"
if section_key in CAMERA_NAV:
return "camera"
return "global"