The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .cspell
    └── frigate-dictionary.txt
├── .devcontainer
    ├── devcontainer.json
    ├── features
    │   └── onnxruntime-gpu
    │   │   ├── devcontainer-feature.json
    │   │   └── install.sh
    ├── initialize.sh
    └── post_create.sh
├── .dockerignore
├── .github
    ├── DISCUSSION_TEMPLATE
    │   ├── camera-support.yml
    │   ├── config-support.yml
    │   ├── detector-support.yml
    │   ├── general-support.yml
    │   ├── hardware-acceleration-support.yml
    │   ├── question.yml
    │   └── report-a-bug.yml
    ├── FUNDING.yml
    ├── ISSUE_TEMPLATE
    │   ├── config.yml
    │   └── feature_request.md
    ├── actions
    │   └── setup
    │   │   └── action.yml
    ├── dependabot.yml
    ├── pull_request_template.md
    └── workflows
    │   ├── ci.yml
    │   ├── pull_request.yml
    │   ├── release.yml
    │   └── stale.yml
├── .gitignore
├── .pylintrc
├── .vscode
    └── launch.json
├── CODEOWNERS
├── LICENSE
├── Makefile
├── README.md
├── README_CN.md
├── audio-labelmap.txt
├── benchmark.py
├── benchmark_motion.py
├── config
    └── config.yml.example
├── cspell.json
├── docker-compose.yml
├── docker
    ├── hailo8l
    │   └── user_installation.sh
    ├── main
    │   ├── Dockerfile
    │   ├── build_nginx.sh
    │   ├── build_ov_model.py
    │   ├── build_pysqlite3.sh
    │   ├── build_sqlite_vec.sh
    │   ├── fake_frigate_run
    │   ├── install_deps.sh
    │   ├── install_hailort.sh
    │   ├── install_s6_overlay.sh
    │   ├── install_tempio.sh
    │   ├── requirements-dev.txt
    │   ├── requirements-ov.txt
    │   ├── requirements-wheels.txt
    │   ├── requirements.txt
    │   └── rootfs
    │   │   ├── etc
    │   │       └── s6-overlay
    │   │       │   └── s6-rc.d
    │   │       │       ├── certsync-log
    │   │       │           ├── consumer-for
    │   │       │           ├── dependencies.d
    │   │       │           │   └── log-prepare
    │   │       │           ├── pipeline-name
    │   │       │           ├── run
    │   │       │           └── type
    │   │       │       ├── certsync
    │   │       │           ├── dependencies.d
    │   │       │           │   └── nginx
    │   │       │           ├── finish
    │   │       │           ├── producer-for
    │   │       │           ├── run
    │   │       │           ├── timeout-kill
    │   │       │           └── type
    │   │       │       ├── frigate-log
    │   │       │           ├── consumer-for
    │   │       │           ├── dependencies.d
    │   │       │           │   └── log-prepare
    │   │       │           ├── pipeline-name
    │   │       │           ├── run
    │   │       │           └── type
    │   │       │       ├── frigate
    │   │       │           ├── dependencies.d
    │   │       │           │   └── go2rtc
    │   │       │           ├── finish
    │   │       │           ├── producer-for
    │   │       │           ├── run
    │   │       │           ├── timeout-kill
    │   │       │           └── type
    │   │       │       ├── go2rtc-healthcheck
    │   │       │           ├── dependencies.d
    │   │       │           │   └── go2rtc
    │   │       │           ├── finish
    │   │       │           ├── producer-for
    │   │       │           ├── run
    │   │       │           ├── timeout-kill
    │   │       │           └── type
    │   │       │       ├── go2rtc-log
    │   │       │           ├── consumer-for
    │   │       │           ├── dependencies.d
    │   │       │           │   └── log-prepare
    │   │       │           ├── pipeline-name
    │   │       │           ├── run
    │   │       │           └── type
    │   │       │       ├── go2rtc
    │   │       │           ├── dependencies.d
    │   │       │           │   └── prepare
    │   │       │           ├── finish
    │   │       │           ├── producer-for
    │   │       │           ├── run
    │   │       │           ├── timeout-kill
    │   │       │           └── type
    │   │       │       ├── log-prepare
    │   │       │           ├── dependencies.d
    │   │       │           │   └── base
    │   │       │           ├── run
    │   │       │           ├── type
    │   │       │           └── up
    │   │       │       ├── nginx-log
    │   │       │           ├── consumer-for
    │   │       │           ├── dependencies.d
    │   │       │           │   └── log-prepare
    │   │       │           ├── pipeline-name
    │   │       │           ├── run
    │   │       │           └── type
    │   │       │       ├── nginx
    │   │       │           ├── data
    │   │       │           │   └── check
    │   │       │           ├── dependencies.d
    │   │       │           │   └── frigate
    │   │       │           ├── finish
    │   │       │           ├── notification-fd
    │   │       │           ├── producer-for
    │   │       │           ├── run
    │   │       │           ├── timeout-kill
    │   │       │           └── type
    │   │       │       ├── prepare
    │   │       │           ├── dependencies.d
    │   │       │           │   └── base
    │   │       │           ├── run
    │   │       │           ├── type
    │   │       │           └── up
    │   │       │       └── user
    │   │       │           └── contents.d
    │   │       │               ├── certsync-pipeline
    │   │       │               ├── frigate-pipeline
    │   │       │               ├── go2rtc-pipeline
    │   │       │               └── nginx-pipeline
    │   │   ├── labelmap
    │   │       ├── coco-80.txt
    │   │       └── coco.txt
    │   │   └── usr
    │   │       └── local
    │   │           ├── ffmpeg
    │   │               └── get_ffmpeg_path.py
    │   │           ├── go2rtc
    │   │               └── create_config.py
    │   │           └── nginx
    │   │               ├── conf
    │   │                   ├── auth_location.conf
    │   │                   ├── auth_request.conf
    │   │                   ├── go2rtc_upstream.conf
    │   │                   ├── nginx.conf
    │   │                   ├── proxy.conf
    │   │                   └── proxy_trusted_headers.conf
    │   │               ├── get_base_path.py
    │   │               ├── get_tls_settings.py
    │   │               └── templates
    │   │                   ├── base_path.gotmpl
    │   │                   └── listen.gotmpl
    ├── rockchip
    │   ├── COCO
    │   │   ├── coco_subset_20.txt
    │   │   └── subset
    │   │   │   ├── 000000005001.jpg
    │   │   │   ├── 000000038829.jpg
    │   │   │   ├── 000000052891.jpg
    │   │   │   ├── 000000075612.jpg
    │   │   │   ├── 000000098261.jpg
    │   │   │   ├── 000000181542.jpg
    │   │   │   ├── 000000215245.jpg
    │   │   │   ├── 000000277005.jpg
    │   │   │   ├── 000000288685.jpg
    │   │   │   ├── 000000301421.jpg
    │   │   │   ├── 000000334371.jpg
    │   │   │   ├── 000000348481.jpg
    │   │   │   ├── 000000373353.jpg
    │   │   │   ├── 000000397681.jpg
    │   │   │   ├── 000000414673.jpg
    │   │   │   ├── 000000419312.jpg
    │   │   │   ├── 000000465822.jpg
    │   │   │   ├── 000000475732.jpg
    │   │   │   ├── 000000559707.jpg
    │   │   │   └── 000000574315.jpg
    │   ├── Dockerfile
    │   ├── conv2rknn.py
    │   ├── requirements-wheels-rk.txt
    │   ├── rk.hcl
    │   └── rk.mk
    ├── rocm
    │   ├── Dockerfile
    │   ├── requirements-wheels-rocm.txt
    │   ├── rocm.hcl
    │   └── rocm.mk
    ├── rpi
    │   ├── Dockerfile
    │   ├── install_deps.sh
    │   ├── rpi.hcl
    │   └── rpi.mk
    └── tensorrt
    │   ├── Dockerfile.amd64
    │   ├── Dockerfile.arm64
    │   ├── build_jetson_ffmpeg.sh
    │   ├── detector
    │       ├── build_python_tensorrt.sh
    │       ├── rootfs
    │       │   └── etc
    │       │   │   ├── ld.so.conf.d
    │       │   │       └── cuda_tensorrt.conf
    │       │   │   └── s6-overlay
    │       │   │       └── s6-rc.d
    │       │   │           ├── frigate
    │       │   │               └── dependencies.d
    │       │   │               │   └── trt-model-prepare
    │       │   │           └── trt-model-prepare
    │       │   │               ├── dependencies.d
    │       │   │                   └── base
    │       │   │               ├── run
    │       │   │               ├── type
    │       │   │               └── up
    │       └── tensorrt_libyolo.sh
    │   ├── requirements-amd64.txt
    │   ├── requirements-arm64.txt
    │   ├── requirements-models-arm64.txt
    │   ├── trt.hcl
    │   └── trt.mk
├── docs
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── docs
    │   ├── configuration
    │   │   ├── advanced.md
    │   │   ├── audio_detectors.md
    │   │   ├── authentication.md
    │   │   ├── autotracking.md
    │   │   ├── bird_classification.md
    │   │   ├── birdseye.md
    │   │   ├── camera_specific.md
    │   │   ├── cameras.md
    │   │   ├── face_recognition.md
    │   │   ├── ffmpeg_presets.md
    │   │   ├── genai.md
    │   │   ├── hardware_acceleration_enrichments.md
    │   │   ├── hardware_acceleration_video.md
    │   │   ├── index.md
    │   │   ├── license_plate_recognition.md
    │   │   ├── live.md
    │   │   ├── masks.md
    │   │   ├── metrics.md
    │   │   ├── motion_detection.md
    │   │   ├── notifications.md
    │   │   ├── object_detectors.md
    │   │   ├── object_filters.md
    │   │   ├── objects.md
    │   │   ├── pwa.md
    │   │   ├── record.md
    │   │   ├── reference.md
    │   │   ├── restream.md
    │   │   ├── review.md
    │   │   ├── semantic_search.md
    │   │   ├── snapshots.md
    │   │   ├── stationary_objects.md
    │   │   ├── tls.md
    │   │   └── zones.md
    │   ├── development
    │   │   ├── contributing-boards.md
    │   │   └── contributing.md
    │   ├── frigate
    │   │   ├── camera_setup.md
    │   │   ├── glossary.md
    │   │   ├── hardware.md
    │   │   ├── index.md
    │   │   ├── installation.md
    │   │   ├── updating.md
    │   │   └── video_pipeline.md
    │   ├── guides
    │   │   ├── configuring_go2rtc.md
    │   │   ├── getting_started.md
    │   │   ├── ha_network_storage.md
    │   │   ├── ha_notifications.md
    │   │   └── reverse_proxy.md
    │   ├── integrations
    │   │   ├── api.md
    │   │   ├── home-assistant.md
    │   │   ├── mqtt.md
    │   │   ├── plus.md
    │   │   └── third_party_extensions.md
    │   ├── mdx.md
    │   ├── plus
    │   │   ├── annotating.md
    │   │   ├── faq.md
    │   │   ├── first_model.md
    │   │   └── index.md
    │   └── troubleshooting
    │   │   ├── edgetpu.md
    │   │   ├── faqs.md
    │   │   ├── gpu.md
    │   │   └── recordings.md
    ├── docusaurus.config.ts
    ├── package-lock.json
    ├── package.json
    ├── plugins
    │   └── raw-loader.js
    ├── sidebars.ts
    ├── src
    │   ├── components
    │   │   └── LanguageAlert
    │   │   │   ├── index.jsx
    │   │   │   └── styles.module.css
    │   ├── css
    │   │   └── custom.css
    │   └── theme
    │   │   └── Navbar
    │   │       └── index.js
    └── static
    │   ├── .nojekyll
    │   ├── frigate-api.yaml
    │   └── img
    │       ├── annotate.png
    │       ├── autotracking-debug.gif
    │       ├── bottom-center-mask.jpg
    │       ├── bottom-center.jpg
    │       ├── camera-ui.png
    │       ├── diagram.png
    │       ├── driveway_zones-min.png
    │       ├── driveway_zones.png
    │       ├── events-ui.png
    │       ├── example-mask-poly-min.png
    │       ├── example-mask-poly.png
    │       ├── favicon.ico
    │       ├── frigate-autotracking-example.gif
    │       ├── frigate.png
    │       ├── ground-plane.jpg
    │       ├── home-ui.png
    │       ├── live-view.png
    │       ├── logo-dark.svg
    │       ├── logo.svg
    │       ├── media_browser-min.png
    │       ├── media_browser.png
    │       ├── mismatched-resolution-min.jpg
    │       ├── mismatched-resolution.jpg
    │       ├── notification-min.png
    │       ├── notification.png
    │       ├── plus-api-key-min.png
    │       ├── plus
    │           ├── attribute-example-face.jpg
    │           ├── attribute-example-fedex.jpg
    │           ├── false-positive-overlap.jpg
    │           ├── false-positive.jpg
    │           ├── fedex-logo.jpg
    │           ├── model-ready-email.jpg
    │           ├── plus-models.jpg
    │           ├── send-to-plus.jpg
    │           ├── submit-to-plus.jpg
    │           └── suggestions.webp
    │       ├── resolutions-min.jpg
    │       ├── resolutions.png
    │       └── review-items.png
├── frigate
    ├── __init__.py
    ├── __main__.py
    ├── api
    │   ├── __init__.py
    │   ├── app.py
    │   ├── auth.py
    │   ├── classification.py
    │   ├── defs
    │   │   ├── __init__.py
    │   │   ├── query
    │   │   │   ├── app_query_parameters.py
    │   │   │   ├── events_query_parameters.py
    │   │   │   ├── media_query_parameters.py
    │   │   │   ├── regenerate_query_parameters.py
    │   │   │   └── review_query_parameters.py
    │   │   ├── request
    │   │   │   ├── __init__.py
    │   │   │   ├── app_body.py
    │   │   │   ├── classification_body.py
    │   │   │   ├── events_body.py
    │   │   │   ├── export_recordings_body.py
    │   │   │   ├── export_rename_body.py
    │   │   │   └── review_body.py
    │   │   ├── response
    │   │   │   ├── event_response.py
    │   │   │   ├── generic_response.py
    │   │   │   └── review_response.py
    │   │   └── tags.py
    │   ├── event.py
    │   ├── export.py
    │   ├── fastapi_app.py
    │   ├── media.py
    │   ├── notification.py
    │   ├── preview.py
    │   └── review.py
    ├── app.py
    ├── camera
    │   ├── __init__.py
    │   ├── activity_manager.py
    │   └── state.py
    ├── comms
    │   ├── base_communicator.py
    │   ├── config_updater.py
    │   ├── detections_updater.py
    │   ├── dispatcher.py
    │   ├── embeddings_updater.py
    │   ├── event_metadata_updater.py
    │   ├── events_updater.py
    │   ├── inter_process.py
    │   ├── mqtt.py
    │   ├── recordings_updater.py
    │   ├── webpush.py
    │   ├── ws.py
    │   └── zmq_proxy.py
    ├── config
    │   ├── __init__.py
    │   ├── auth.py
    │   ├── base.py
    │   ├── camera
    │   │   ├── __init__.py
    │   │   ├── audio.py
    │   │   ├── birdseye.py
    │   │   ├── camera.py
    │   │   ├── detect.py
    │   │   ├── ffmpeg.py
    │   │   ├── genai.py
    │   │   ├── live.py
    │   │   ├── motion.py
    │   │   ├── mqtt.py
    │   │   ├── notification.py
    │   │   ├── objects.py
    │   │   ├── onvif.py
    │   │   ├── record.py
    │   │   ├── review.py
    │   │   ├── snapshots.py
    │   │   ├── timestamp.py
    │   │   ├── ui.py
    │   │   └── zone.py
    │   ├── camera_group.py
    │   ├── classification.py
    │   ├── config.py
    │   ├── database.py
    │   ├── env.py
    │   ├── logger.py
    │   ├── mqtt.py
    │   ├── proxy.py
    │   ├── telemetry.py
    │   ├── tls.py
    │   └── ui.py
    ├── const.py
    ├── data_processing
    │   ├── common
    │   │   ├── face
    │   │   │   └── model.py
    │   │   └── license_plate
    │   │   │   ├── mixin.py
    │   │   │   └── model.py
    │   ├── post
    │   │   ├── api.py
    │   │   └── license_plate.py
    │   ├── real_time
    │   │   ├── api.py
    │   │   ├── bird.py
    │   │   ├── face.py
    │   │   └── license_plate.py
    │   └── types.py
    ├── db
    │   └── sqlitevecq.py
    ├── detectors
    │   ├── __init__.py
    │   ├── detection_api.py
    │   ├── detector_config.py
    │   ├── detector_types.py
    │   └── plugins
    │   │   ├── __init__.py
    │   │   ├── cpu_tfl.py
    │   │   ├── deepstack.py
    │   │   ├── edgetpu_tfl.py
    │   │   ├── hailo8l.py
    │   │   ├── onnx.py
    │   │   ├── openvino.py
    │   │   ├── rknn.py
    │   │   └── tensorrt.py
    ├── embeddings
    │   ├── __init__.py
    │   ├── embeddings.py
    │   ├── maintainer.py
    │   ├── onnx
    │   │   ├── base_embedding.py
    │   │   ├── face_embedding.py
    │   │   ├── jina_v1_embedding.py
    │   │   ├── jina_v2_embedding.py
    │   │   ├── lpr_embedding.py
    │   │   └── runner.py
    │   └── util.py
    ├── events
    │   ├── __init__.py
    │   ├── audio.py
    │   ├── cleanup.py
    │   ├── maintainer.py
    │   └── types.py
    ├── ffmpeg_presets.py
    ├── genai
    │   ├── __init__.py
    │   ├── azure-openai.py
    │   ├── gemini.py
    │   ├── ollama.py
    │   └── openai.py
    ├── images
    │   ├── birdseye.png
    │   └── camera-error.jpg
    ├── log.py
    ├── models.py
    ├── motion
    │   ├── __init__.py
    │   ├── frigate_motion.py
    │   └── improved_motion.py
    ├── mypy.ini
    ├── object_detection
    │   ├── base.py
    │   └── util.py
    ├── output
    │   ├── birdseye.py
    │   ├── camera.py
    │   ├── output.py
    │   └── preview.py
    ├── plus.py
    ├── ptz
    │   ├── autotrack.py
    │   └── onvif.py
    ├── record
    │   ├── __init__.py
    │   ├── cleanup.py
    │   ├── export.py
    │   ├── maintainer.py
    │   ├── record.py
    │   └── util.py
    ├── review
    │   ├── __init__.py
    │   ├── maintainer.py
    │   ├── review.py
    │   └── types.py
    ├── service_manager
    │   ├── __init__.py
    │   ├── multiprocessing.py
    │   ├── multiprocessing_waiter.py
    │   └── service.py
    ├── stats
    │   ├── __init__.py
    │   ├── emitter.py
    │   ├── prometheus.py
    │   └── util.py
    ├── storage.py
    ├── test
    │   ├── __init__.py
    │   ├── const.py
    │   ├── http_api
    │   │   ├── __init__.py
    │   │   ├── base_http_test.py
    │   │   ├── test_http_app.py
    │   │   ├── test_http_event.py
    │   │   └── test_http_review.py
    │   ├── test_birdseye.py
    │   ├── test_camera_pw.py
    │   ├── test_config.py
    │   ├── test_copy_yuv_to_position.py
    │   ├── test_ffmpeg_presets.py
    │   ├── test_gpu_stats.py
    │   ├── test_http.py
    │   ├── test_obects.py
    │   ├── test_object_detector.py
    │   ├── test_record_retention.py
    │   ├── test_reduce_boxes.py
    │   ├── test_storage.py
    │   ├── test_video.py
    │   └── test_yuv_region_2_rgb.py
    ├── timeline.py
    ├── track
    │   ├── __init__.py
    │   ├── centroid_tracker.py
    │   ├── norfair_tracker.py
    │   ├── object_processing.py
    │   └── tracked_object.py
    ├── types.py
    ├── util
    │   ├── __init__.py
    │   ├── builtin.py
    │   ├── config.py
    │   ├── downloader.py
    │   ├── image.py
    │   ├── model.py
    │   ├── object.py
    │   ├── path.py
    │   ├── process.py
    │   ├── services.py
    │   └── velocity.py
    ├── video.py
    └── watchdog.py
├── labelmap.txt
├── migrations
    ├── 001_create_events_table.py
    ├── 002_add_clip_snapshot.py
    ├── 003_create_recordings_table.py
    ├── 004_add_bbox_region_area.py
    ├── 005_make_end_time_nullable.py
    ├── 006_add_motion_active_objects.py
    ├── 007_add_retain_indefinitely.py
    ├── 008_add_sub_label.py
    ├── 009_add_object_filter_ratio.py
    ├── 010_add_plus_image_id.py
    ├── 011_update_indexes.py
    ├── 012_add_segment_size.py
    ├── 013_create_timeline_table.py
    ├── 014_event_updates_for_fp.py
    ├── 015_event_refactor.py
    ├── 016_sublabel_increase.py
    ├── 017_update_indexes.py
    ├── 018_add_dbfs.py
    ├── 019_create_regions_table.py
    ├── 020_update_index_recordings.py
    ├── 021_create_previews_table.py
    ├── 022_create_review_segment_table.py
    ├── 023_add_regions.py
    ├── 024_create_export_table.py
    ├── 025_create_user_table.py
    ├── 026_add_notification_tokens.py
    ├── 027_create_explore_index.py
    ├── 028_optional_event_thumbnail.py
    ├── 029_add_user_role.py
    └── 030_create_user_review_status.py
├── netlify.toml
├── notebooks
    ├── README.md
    └── YOLO_NAS_Pretrained_Export.ipynb
├── package-lock.json
├── process_clip.py
├── pyproject.toml
└── web
    ├── .eslintrc.cjs
    ├── .gitignore
    ├── .prettierrc
    ├── .vscode
        └── extensions.json
    ├── README.md
    ├── components.json
    ├── images
        ├── apple-touch-icon.png
        ├── favicon-16x16.png
        ├── favicon-32x32.png
        ├── favicon.ico
        ├── favicon.png
        ├── favicon.svg
        ├── marker.png
        └── mstile-150x150.png
    ├── index.html
    ├── login.html
    ├── package-lock.json
    ├── package.json
    ├── postcss.config.js
    ├── public
        ├── fonts
        │   ├── Inter-Black.woff2
        │   ├── Inter-BlackItalic.woff2
        │   ├── Inter-Bold.woff2
        │   ├── Inter-BoldItalic.woff2
        │   ├── Inter-ExtraBold.woff2
        │   ├── Inter-ExtraBoldItalic.woff2
        │   ├── Inter-ExtraLight.woff2
        │   ├── Inter-ExtraLightItalic.woff2
        │   ├── Inter-Italic.woff2
        │   ├── Inter-Light.woff2
        │   ├── Inter-LightItalic.woff2
        │   ├── Inter-Medium.woff2
        │   ├── Inter-MediumItalic.woff2
        │   ├── Inter-Regular.woff2
        │   ├── Inter-SemiBold.woff2
        │   ├── Inter-SemiBoldItalic.woff2
        │   ├── Inter-Thin.woff2
        │   └── Inter-ThinItalic.woff2
        ├── images
        │   ├── android-chrome-192x192.png
        │   ├── android-chrome-512x512.png
        │   ├── apple-touch-icon.png
        │   ├── maskable-badge.png
        │   └── maskable-icon.png
        ├── locales
        │   ├── ab
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ar
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── bg
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ca
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── cs
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── de
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── en
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── es
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── fa
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── fi
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── fr
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── he
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── hi
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── hu
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── id
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── it
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ja
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── nb-NO
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── nl
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── pl
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── pt
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ro
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ru
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── sl
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── sv
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── th
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── tr
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── uk
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── ur
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── vi
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   ├── yue-Hant
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │   │   ├── auth.json
        │   │   │   ├── camera.json
        │   │   │   ├── dialog.json
        │   │   │   ├── filter.json
        │   │   │   ├── icons.json
        │   │   │   ├── input.json
        │   │   │   └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │   │   ├── configEditor.json
        │   │   │   ├── events.json
        │   │   │   ├── explore.json
        │   │   │   ├── exports.json
        │   │   │   ├── faceLibrary.json
        │   │   │   ├── live.json
        │   │   │   ├── recording.json
        │   │   │   ├── search.json
        │   │   │   ├── settings.json
        │   │   │   └── system.json
        │   └── zh-CN
        │   │   ├── audio.json
        │   │   ├── common.json
        │   │   ├── components
        │   │       ├── auth.json
        │   │       ├── camera.json
        │   │       ├── dialog.json
        │   │       ├── filter.json
        │   │       ├── icons.json
        │   │       ├── input.json
        │   │       └── player.json
        │   │   ├── objects.json
        │   │   └── views
        │   │       ├── configEditor.json
        │   │       ├── events.json
        │   │       ├── explore.json
        │   │       ├── exports.json
        │   │       ├── faceLibrary.json
        │   │       ├── live.json
        │   │       ├── recording.json
        │   │       ├── search.json
        │   │       ├── settings.json
        │   │       └── system.json
        └── notifications-worker.js
    ├── site.webmanifest
    ├── src
        ├── App.tsx
        ├── api
        │   ├── baseUrl.ts
        │   ├── index.tsx
        │   └── ws.tsx
        ├── components
        │   ├── Logo.tsx
        │   ├── Statusbar.tsx
        │   ├── Wrapper.tsx
        │   ├── auth
        │   │   ├── AuthForm.tsx
        │   │   └── ProtectedRoute.tsx
        │   ├── button
        │   │   └── DownloadVideoButton.tsx
        │   ├── camera
        │   │   ├── AutoUpdatingCameraImage.tsx
        │   │   ├── CameraImage.tsx
        │   │   ├── DebugCameraImage.tsx
        │   │   └── ResizingCameraImage.tsx
        │   ├── card
        │   │   ├── AnimatedEventCard.tsx
        │   │   ├── ExportCard.tsx
        │   │   ├── ReviewCard.tsx
        │   │   ├── SearchThumbnail.tsx
        │   │   └── SearchThumbnailFooter.tsx
        │   ├── dynamic
        │   │   ├── CameraFeatureToggle.tsx
        │   │   ├── EnhancedScrollFollow.tsx
        │   │   ├── NewReviewData.tsx
        │   │   └── TimeAgo.tsx
        │   ├── filter
        │   │   ├── CalendarFilterButton.tsx
        │   │   ├── CameraGroupSelector.tsx
        │   │   ├── CamerasFilterButton.tsx
        │   │   ├── FilterSwitch.tsx
        │   │   ├── LogSettingsButton.tsx
        │   │   ├── ReviewActionGroup.tsx
        │   │   ├── ReviewFilterGroup.tsx
        │   │   ├── SearchActionGroup.tsx
        │   │   ├── SearchFilterGroup.tsx
        │   │   └── ZoneMaskFilter.tsx
        │   ├── graph
        │   │   ├── CombinedStorageGraph.tsx
        │   │   ├── LineGraph.tsx
        │   │   ├── StorageGraph.tsx
        │   │   └── SystemGraph.tsx
        │   ├── icons
        │   │   ├── AddFaceIcon.tsx
        │   │   ├── FrigatePlusIcon.tsx
        │   │   ├── IconPicker.tsx
        │   │   ├── LiveIcons.tsx
        │   │   ├── SearchSourceIcon.tsx
        │   │   └── SubFilterIcon.tsx
        │   ├── indicators
        │   │   ├── CameraActivityIndicator.tsx
        │   │   ├── Chip.tsx
        │   │   ├── ImageLoadingIndicator.tsx
        │   │   ├── StepIndicator.tsx
        │   │   └── activity-indicator.tsx
        │   ├── input
        │   │   ├── DeleteSearchDialog.tsx
        │   │   ├── ImageEntry.tsx
        │   │   ├── InputWithTags.tsx
        │   │   ├── SaveSearchDialog.tsx
        │   │   └── TextEntry.tsx
        │   ├── menu
        │   │   ├── AccountSettings.tsx
        │   │   ├── GeneralSettings.tsx
        │   │   ├── LiveContextMenu.tsx
        │   │   └── SearchResultActions.tsx
        │   ├── mobile
        │   │   └── MobilePage.tsx
        │   ├── navigation
        │   │   ├── Bottombar.tsx
        │   │   ├── NavItem.tsx
        │   │   ├── Redirect.tsx
        │   │   └── Sidebar.tsx
        │   ├── overlay
        │   │   ├── CameraInfoDialog.tsx
        │   │   ├── CreateUserDialog.tsx
        │   │   ├── DebugDrawingLayer.tsx
        │   │   ├── DeleteUserDialog.tsx
        │   │   ├── ExportDialog.tsx
        │   │   ├── FaceSelectionDialog.tsx
        │   │   ├── GPUInfoDialog.tsx
        │   │   ├── LogInfoDialog.tsx
        │   │   ├── MobileCameraDrawer.tsx
        │   │   ├── MobileReviewSettingsDrawer.tsx
        │   │   ├── MobileTimelineDrawer.tsx
        │   │   ├── ReviewActivityCalendar.tsx
        │   │   ├── RoleChangeDialog.tsx
        │   │   ├── SaveExportOverlay.tsx
        │   │   ├── SetPasswordDialog.tsx
        │   │   ├── TimelineDataOverlay.tsx
        │   │   ├── detail
        │   │   │   ├── AnnotationSettingsPane.tsx
        │   │   │   ├── FaceCreateWizardDialog.tsx
        │   │   │   ├── ObjectLifecycle.tsx
        │   │   │   ├── ObjectPath.tsx
        │   │   │   ├── ObjectPathPlotter.tsx
        │   │   │   ├── ReviewDetailDialog.tsx
        │   │   │   └── SearchDetailDialog.tsx
        │   │   └── dialog
        │   │   │   ├── FrigatePlusDialog.tsx
        │   │   │   ├── PlatformAwareDialog.tsx
        │   │   │   ├── RestartDialog.tsx
        │   │   │   ├── SearchFilterDialog.tsx
        │   │   │   ├── TextEntryDialog.tsx
        │   │   │   └── UploadImageDialog.tsx
        │   ├── player
        │   │   ├── BirdseyeLivePlayer.tsx
        │   │   ├── GenericVideoPlayer.tsx
        │   │   ├── HlsVideoPlayer.tsx
        │   │   ├── JSMpegPlayer.tsx
        │   │   ├── LivePlayer.tsx
        │   │   ├── MsePlayer.tsx
        │   │   ├── PlayerStats.tsx
        │   │   ├── PreviewPlayer.tsx
        │   │   ├── PreviewThumbnailPlayer.tsx
        │   │   ├── VideoControls.tsx
        │   │   ├── WebRTCPlayer.tsx
        │   │   └── dynamic
        │   │   │   ├── DynamicVideoController.ts
        │   │   │   └── DynamicVideoPlayer.tsx
        │   ├── preview
        │   │   └── ScrubbablePreview.tsx
        │   ├── settings
        │   │   ├── CameraStreamingDialog.tsx
        │   │   ├── MotionMaskEditPane.tsx
        │   │   ├── ObjectMaskEditPane.tsx
        │   │   ├── PolygonCanvas.tsx
        │   │   ├── PolygonDrawer.tsx
        │   │   ├── PolygonEditControls.tsx
        │   │   ├── PolygonItem.tsx
        │   │   ├── SearchSettings.tsx
        │   │   └── ZoneEditPane.tsx
        │   ├── timeline
        │   │   ├── EventReviewTimeline.tsx
        │   │   ├── EventSegment.tsx
        │   │   ├── MotionReviewTimeline.tsx
        │   │   ├── MotionSegment.tsx
        │   │   ├── ReviewTimeline.tsx
        │   │   ├── SummarySegment.tsx
        │   │   ├── SummaryTimeline.tsx
        │   │   ├── VirtualizedEventSegments.tsx
        │   │   ├── VirtualizedMotionSegments.tsx
        │   │   └── segment-metadata.tsx
        │   └── ui
        │   │   ├── alert-dialog.tsx
        │   │   ├── alert.tsx
        │   │   ├── aspect-ratio.tsx
        │   │   ├── badge.tsx
        │   │   ├── button.tsx
        │   │   ├── calendar-range.tsx
        │   │   ├── calendar.tsx
        │   │   ├── card.tsx
        │   │   ├── carousel.tsx
        │   │   ├── checkbox.tsx
        │   │   ├── circular-progress-bar.tsx
        │   │   ├── command.tsx
        │   │   ├── context-menu.tsx
        │   │   ├── dialog.tsx
        │   │   ├── drawer.tsx
        │   │   ├── dropdown-menu.tsx
        │   │   ├── form.tsx
        │   │   ├── heading.tsx
        │   │   ├── hover-card.tsx
        │   │   ├── icon-wrapper.tsx
        │   │   ├── input.tsx
        │   │   ├── label.tsx
        │   │   ├── pagination.tsx
        │   │   ├── popover.tsx
        │   │   ├── radio-group.tsx
        │   │   ├── scroll-area.tsx
        │   │   ├── select.tsx
        │   │   ├── separator.tsx
        │   │   ├── sheet.tsx
        │   │   ├── skeleton.tsx
        │   │   ├── slider.tsx
        │   │   ├── sonner.tsx
        │   │   ├── switch.tsx
        │   │   ├── table.tsx
        │   │   ├── tabs.tsx
        │   │   ├── text.tsx
        │   │   ├── textarea.tsx
        │   │   ├── toggle-group.tsx
        │   │   ├── toggle.tsx
        │   │   └── tooltip.tsx
        ├── context
        │   ├── auth-context.tsx
        │   ├── language-provider.tsx
        │   ├── providers.tsx
        │   ├── statusbar-provider.tsx
        │   ├── streaming-settings-provider.tsx
        │   └── theme-provider.tsx
        ├── env.ts
        ├── hooks
        │   ├── resize-observer.ts
        │   ├── use-api-filter.ts
        │   ├── use-camera-activity.ts
        │   ├── use-camera-live-mode.ts
        │   ├── use-camera-previews.ts
        │   ├── use-contextmenu.ts
        │   ├── use-date-locale.ts
        │   ├── use-date-utils.ts
        │   ├── use-deep-memo.ts
        │   ├── use-doc-domain.ts
        │   ├── use-draggable-element.ts
        │   ├── use-event-segment-utils.ts
        │   ├── use-fullscreen.ts
        │   ├── use-global-mutate.ts
        │   ├── use-image-loaded.ts
        │   ├── use-is-admin.ts
        │   ├── use-keyboard-listener.tsx
        │   ├── use-motion-segment-utils.ts
        │   ├── use-mouse-listener.ts
        │   ├── use-navigation.ts
        │   ├── use-optimistic-state.ts
        │   ├── use-overlay-state.tsx
        │   ├── use-persistence.ts
        │   ├── use-press.ts
        │   ├── use-session-persistence.ts
        │   ├── use-stats.ts
        │   ├── use-suggestions.ts
        │   ├── use-tap-utils.ts
        │   ├── use-timeline-utils.ts
        │   ├── use-timeline-zoom.ts
        │   └── use-video-dimensions.ts
        ├── index.css
        ├── lib
        │   ├── const.ts
        │   ├── formatTimeAgo.ts
        │   └── utils.ts
        ├── login.tsx
        ├── main.tsx
        ├── pages
        │   ├── AccessDenied.tsx
        │   ├── ConfigEditor.tsx
        │   ├── Events.tsx
        │   ├── Explore.tsx
        │   ├── Exports.tsx
        │   ├── FaceLibrary.tsx
        │   ├── Live.tsx
        │   ├── LoginPage.tsx
        │   ├── Logs.tsx
        │   ├── NoMatch.tsx
        │   ├── Settings.tsx
        │   ├── System.tsx
        │   └── UIPlayground.tsx
        ├── types
        │   ├── canvas.ts
        │   ├── draggable-element.ts
        │   ├── event.ts
        │   ├── export.ts
        │   ├── face.ts
        │   ├── filter.ts
        │   ├── frigateConfig.ts
        │   ├── graph.ts
        │   ├── live.ts
        │   ├── log.ts
        │   ├── navigation.ts
        │   ├── playback.ts
        │   ├── preview.ts
        │   ├── ptz.ts
        │   ├── record.ts
        │   ├── review.ts
        │   ├── search.ts
        │   ├── stats.ts
        │   ├── timeline.ts
        │   ├── user.ts
        │   └── ws.ts
        ├── utils
        │   ├── browserUtil.ts
        │   ├── canvasUtil.ts
        │   ├── colorUtil.ts
        │   ├── dateUtil.ts
        │   ├── i18n.ts
        │   ├── iconUtil.tsx
        │   ├── isIFrame.ts
        │   ├── isPWA.ts
        │   ├── lifecycleUtil.ts
        │   ├── logUtil.ts
        │   ├── storageUtil.ts
        │   ├── stringUtil.ts
        │   ├── timelineUtil.tsx
        │   ├── videoUtil.ts
        │   └── zoneEdutUtil.ts
        ├── views
        │   ├── events
        │   │   └── EventView.tsx
        │   ├── explore
        │   │   └── ExploreView.tsx
        │   ├── live
        │   │   ├── DraggableGridLayout.tsx
        │   │   ├── LiveBirdseyeView.tsx
        │   │   ├── LiveCameraView.tsx
        │   │   └── LiveDashboardView.tsx
        │   ├── recording
        │   │   └── RecordingView.tsx
        │   ├── search
        │   │   └── SearchView.tsx
        │   ├── settings
        │   │   ├── AuthenticationView.tsx
        │   │   ├── CameraSettingsView.tsx
        │   │   ├── EnrichmentsSettingsView.tsx
        │   │   ├── FrigatePlusSettingsView.tsx
        │   │   ├── MasksAndZonesView.tsx
        │   │   ├── MotionTunerView.tsx
        │   │   ├── NotificationsSettingsView.tsx
        │   │   ├── ObjectSettingsView.tsx
        │   │   └── UiSettingsView.tsx
        │   └── system
        │   │   ├── CameraMetrics.tsx
        │   │   ├── EnrichmentMetrics.tsx
        │   │   ├── GeneralMetrics.tsx
        │   │   └── StorageMetrics.tsx
        └── vite-env.d.ts
    ├── tailwind.config.cjs
    ├── themes
        ├── tailwind-base.css
        ├── theme-blue.css
        ├── theme-default.css
        ├── theme-green.css
        ├── theme-high-contrast.css
        ├── theme-nord.css
        └── theme-red.css
    ├── tsconfig.json
    ├── tsconfig.node.json
    └── vite.config.ts


/.devcontainer/features/onnxruntime-gpu/install.sh:
--------------------------------------------------------------------------------
 1 | #!/usr/bin/env bash
 2 | 
 3 | set -e
 4 | 
 5 | VERSION=${VERSION}
 6 | 
 7 | python3 -m pip config set global.break-system-packages true
 8 | # if VERSION == "latest" or VERSION is empty, install the latest version
 9 | if [ "$VERSION" == "latest" ] || [ -z "$VERSION" ]; then
10 |     python3 -m pip install onnxruntime-gpu
11 | else
12 |     python3 -m pip install onnxruntime-gpu==$VERSION
13 | fi
14 | 
15 | echo "Done!"


--------------------------------------------------------------------------------
/.devcontainer/initialize.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | set -euo pipefail
 4 | 
 5 | # These folders needs to be created and owned by the host user
 6 | mkdir -p debug web/dist
 7 | 
 8 | if [[ -f "config/config.yml" ]]; then
 9 |   echo "config/config.yml already exists, skipping initialization" >&2
10 | else
11 |   echo "initializing config/config.yml" >&2
12 |   cp -fv config/config.yml.example config/config.yml
13 | fi
14 | 


--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
 1 | README.md
 2 | docs/
 3 | .gitignore
 4 | debug
 5 | config/
 6 | *.pyc
 7 | .git
 8 | core
 9 | *.mp4
10 | *.jpg
11 | *.db
12 | *.ts
13 | 
14 | web/dist/
15 | web/node_modules/
16 | web/.npm
17 | 


--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github:
2 |   - blakeblackshear
3 |   - NickM-27
4 |   - hawkeye217
5 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 |   - name: Frigate Support
4 |     url: https://github.com/blakeblackshear/frigate/discussions/new/choose
5 |     about: Get support for setting up or troubleshooting Frigate.
6 |   - name: Frigate Bug Report
7 |     url: https://github.com/blakeblackshear/frigate/discussions/new/choose
8 |     about: Report a specific UI or backend bug.
9 | 


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | .DS_Store
 2 | __pycache__
 3 | .mypy_cache
 4 | *.swp
 5 | debug
 6 | .vscode/*
 7 | !.vscode/launch.json
 8 | config/*
 9 | !config/*.example
10 | models
11 | *.mp4
12 | *.db
13 | *.csv
14 | frigate/version.py
15 | web/build
16 | web/node_modules
17 | web/coverage
18 | core
19 | !/web/**/*.ts
20 | .idea/*
21 | .ipynb_checkpoints


--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "version": "0.2.0",
 3 |   "configurations": [
 4 |     {
 5 |       "name": "Python: Launch Frigate",
 6 |       "type": "debugpy",
 7 |       "request": "launch",
 8 |       "module": "frigate"
 9 |     }
10 |   ]
11 | }
12 | 


--------------------------------------------------------------------------------
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Community-supported boards
2 | /docker/tensorrt/ @madsciencetist @NateMeyer
3 | /docker/tensorrt/*arm64* @madsciencetist
4 | /docker/tensorrt/*jetson* @madsciencetist
5 | /docker/rockchip/ @MarcA711
6 | /docker/rocm/ @harakas
7 | /docker/hailo8l/ @spanner3003
8 | 


--------------------------------------------------------------------------------
/config/config.yml.example:
--------------------------------------------------------------------------------
 1 | mqtt:
 2 |   host: mqtt
 3 | 
 4 | cameras:
 5 |   test:
 6 |     ffmpeg:
 7 |       inputs:
 8 |         - path: /media/frigate/car-stopping.mp4
 9 |           input_args: -re -stream_loop -1 -fflags +genpts
10 |           roles:
11 |             - detect
12 |             - rtmp
13 |     detect:
14 |       height: 1080
15 |       width: 1920
16 |       fps: 5
17 | 


--------------------------------------------------------------------------------
/cspell.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "version": "0.2",
 3 |   "ignorePaths": [
 4 |     "Dockerfile",
 5 |     "Dockerfile.*",
 6 |     "CMakeLists.txt",
 7 |     "*.db",
 8 |     "node_modules",
 9 |     "__pycache__",
10 |     "dist",
11 |     "/audio-labelmap.txt"
12 |   ],
13 |   "language": "en",
14 |   "dictionaryDefinitions": [
15 |     {
16 |       "name": "frigate-dictionary",
17 |       "path": "./.cspell/frigate-dictionary.txt",
18 |       "addWords": true
19 |     }
20 |   ],
21 |   "dictionaries": ["frigate-dictionary"]
22 | }
23 | 


--------------------------------------------------------------------------------
/docker/main/build_ov_model.py:
--------------------------------------------------------------------------------
 1 | import openvino as ov
 2 | from openvino.tools import mo
 3 | 
 4 | ov_model = mo.convert_model(
 5 |     "/models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb",
 6 |     compress_to_fp16=True,
 7 |     transformations_config="/usr/local/lib/python3.11/dist-packages/openvino/tools/mo/front/tf/ssd_v2_support.json",
 8 |     tensorflow_object_detection_api_pipeline_config="/models/ssdlite_mobilenet_v2_coco_2018_05_09/pipeline.config",
 9 |     reverse_input_channels=True,
10 | )
11 | ov.save_model(ov_model, "/models/ssdlite_mobilenet_v2.xml")
12 | 


--------------------------------------------------------------------------------
/docker/main/fake_frigate_run:
--------------------------------------------------------------------------------
 1 | #!/command/with-contenv bash
 2 | # shellcheck shell=bash
 3 | # Start the fake Frigate service
 4 | 
 5 | set -o errexit -o nounset -o pipefail
 6 | 
 7 | # Tell S6-Overlay not to restart this service
 8 | s6-svc -O .
 9 | 
10 | while true; do
11 |   echo "[INFO] The fake Frigate service is running..."
12 |   sleep 5s
13 | done
14 | 


--------------------------------------------------------------------------------
/docker/main/install_hailort.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | set -euxo pipefail
 4 | 
 5 | hailo_version="4.21.0"
 6 | 
 7 | if [[ "${TARGETARCH}" == "amd64" ]]; then
 8 |     arch="x86_64"
 9 | elif [[ "${TARGETARCH}" == "arm64" ]]; then
10 |     arch="aarch64"
11 | fi
12 | 
13 | wget -qO- "https://github.com/frigate-nvr/hailort/releases/download/v${hailo_version}/hailort-debian12-${TARGETARCH}.tar.gz" | tar -C / -xzf -
14 | wget -P /wheels/ "https://github.com/frigate-nvr/hailort/releases/download/v${hailo_version}/hailort-${hailo_version}-cp311-cp311-linux_${arch}.whl"
15 | 


--------------------------------------------------------------------------------
/docker/main/install_s6_overlay.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | set -euxo pipefail
 4 | 
 5 | s6_version="3.2.1.0"
 6 | 
 7 | if [[ "${TARGETARCH}" == "amd64" ]]; then
 8 |     s6_arch="x86_64"
 9 | elif [[ "${TARGETARCH}" == "arm64" ]]; then
10 |     s6_arch="aarch64"
11 | fi
12 | 
13 | mkdir -p /rootfs/
14 | 
15 | wget -qO- "https://github.com/just-containers/s6-overlay/releases/download/v${s6_version}/s6-overlay-noarch.tar.xz" |
16 |     tar -C /rootfs/ -Jxpf -
17 | 
18 | wget -qO- "https://github.com/just-containers/s6-overlay/releases/download/v${s6_version}/s6-overlay-${s6_arch}.tar.xz" |
19 |     tar -C /rootfs/ -Jxpf -
20 | 


--------------------------------------------------------------------------------
/docker/main/install_tempio.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | set -euxo pipefail
 4 | 
 5 | tempio_version="2021.09.0"
 6 | 
 7 | if [[ "${TARGETARCH}" == "amd64" ]]; then
 8 |     arch="amd64"
 9 | elif [[ "${TARGETARCH}" == "arm64" ]]; then
10 |     arch="aarch64"
11 | fi
12 | 
13 | mkdir -p /rootfs/usr/local/tempio/bin
14 | 
15 | wget -q -O /rootfs/usr/local/tempio/bin/tempio "https://github.com/home-assistant/tempio/releases/download/${tempio_version}/tempio_${arch}"
16 | chmod 755 /rootfs/usr/local/tempio/bin/tempio
17 | 


--------------------------------------------------------------------------------
/docker/main/requirements-dev.txt:
--------------------------------------------------------------------------------
1 | ruff
2 | 


--------------------------------------------------------------------------------
/docker/main/requirements-ov.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | tensorflow
3 | openvino-dev>=2024.0.0


--------------------------------------------------------------------------------
/docker/main/requirements.txt:
--------------------------------------------------------------------------------
1 | scikit-build == 0.18.*
2 | nvidia-pyindex
3 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/consumer-for:
--------------------------------------------------------------------------------
1 | certsync
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/dependencies.d/log-prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/dependencies.d/log-prepare


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/pipeline-name:
--------------------------------------------------------------------------------
1 | certsync-pipeline
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/run:
--------------------------------------------------------------------------------
1 | #!/command/with-contenv bash
2 | # shellcheck shell=bash
3 | 
4 | exec logutil-service /dev/shm/logs/certsync
5 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync-log/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync/dependencies.d/nginx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync/dependencies.d/nginx


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync/producer-for:
--------------------------------------------------------------------------------
1 | certsync-log
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync/timeout-kill:
--------------------------------------------------------------------------------
1 | 30000
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/certsync/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for:
--------------------------------------------------------------------------------
1 | frigate
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/dependencies.d/log-prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/dependencies.d/log-prepare


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name:
--------------------------------------------------------------------------------
1 | frigate-pipeline
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/run:
--------------------------------------------------------------------------------
1 | #!/command/with-contenv bash
2 | # shellcheck shell=bash
3 | 
4 | exec logutil-service /dev/shm/logs/frigate
5 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/go2rtc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/go2rtc


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for:
--------------------------------------------------------------------------------
1 | frigate-log
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/timeout-kill:
--------------------------------------------------------------------------------
1 | 120000
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/dependencies.d/go2rtc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/dependencies.d/go2rtc


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/finish:
--------------------------------------------------------------------------------
 1 | #!/command/with-contenv bash
 2 | # shellcheck shell=bash
 3 | 
 4 | set -o errexit -o nounset -o pipefail
 5 | 
 6 | # Logs should be sent to stdout so that s6 can collect them
 7 | 
 8 | readonly exit_code_service="${1}"
 9 | readonly exit_code_signal="${2}"
10 | readonly service="go2rtc-healthcheck"
11 | 
12 | echo "[INFO] The ${service} service exited with code ${exit_code_service} (by signal ${exit_code_signal})"
13 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/producer-for:
--------------------------------------------------------------------------------
1 | go2rtc-log
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/timeout-kill:
--------------------------------------------------------------------------------
1 | 5000
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-healthcheck/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for:
--------------------------------------------------------------------------------
1 | go2rtc
2 | go2rtc-healthcheck
3 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name:
--------------------------------------------------------------------------------
1 | go2rtc-pipeline
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/run:
--------------------------------------------------------------------------------
1 | #!/command/with-contenv bash
2 | # shellcheck shell=bash
3 | 
4 | exec logutil-service /dev/shm/logs/go2rtc
5 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/prepare


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish:
--------------------------------------------------------------------------------
 1 | #!/command/with-contenv bash
 2 | # shellcheck shell=bash
 3 | 
 4 | set -o errexit -o nounset -o pipefail
 5 | 
 6 | # Logs should be sent to stdout so that s6 can collect them
 7 | 
 8 | readonly exit_code_service="${1}"
 9 | readonly exit_code_signal="${2}"
10 | readonly service="go2rtc"
11 | 
12 | echo "[INFO] The ${service} service exited with code ${exit_code_service} (by signal ${exit_code_signal})"
13 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for:
--------------------------------------------------------------------------------
1 | go2rtc-log
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/timeout-kill:
--------------------------------------------------------------------------------
1 | 30000
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/run:
--------------------------------------------------------------------------------
 1 | #!/command/with-contenv bash
 2 | # shellcheck shell=bash
 3 | # Prepare the logs folder for s6-log
 4 | 
 5 | set -o errexit -o nounset -o pipefail
 6 | 
 7 | dirs=(/dev/shm/logs/frigate /dev/shm/logs/go2rtc /dev/shm/logs/nginx /dev/shm/logs/certsync)
 8 | 
 9 | mkdir -p "${dirs[@]}"
10 | chown nobody:nogroup "${dirs[@]}"
11 | chmod 02755 "${dirs[@]}"
12 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/type:
--------------------------------------------------------------------------------
1 | oneshot
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up:
--------------------------------------------------------------------------------
1 | /etc/s6-overlay/s6-rc.d/log-prepare/run
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for:
--------------------------------------------------------------------------------
1 | nginx
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name:
--------------------------------------------------------------------------------
1 | nginx-pipeline
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/run:
--------------------------------------------------------------------------------
1 | #!/command/with-contenv bash
2 | # shellcheck shell=bash
3 | 
4 | exec logutil-service /dev/shm/logs/nginx
5 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/data/check:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 | 
4 | # Wait for PID file to exist.
5 | while ! test -f /run/nginx.pid; do sleep 1; done


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/frigate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/frigate


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/notification-fd:
--------------------------------------------------------------------------------
1 | 3


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for:
--------------------------------------------------------------------------------
1 | nginx-log
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/timeout-kill:
--------------------------------------------------------------------------------
1 | 30000
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/type:
--------------------------------------------------------------------------------
1 | longrun
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/prepare/dependencies.d/base:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/prepare/dependencies.d/base


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/prepare/type:
--------------------------------------------------------------------------------
1 | oneshot
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/prepare/up:
--------------------------------------------------------------------------------
1 | /etc/s6-overlay/s6-rc.d/prepare/run
2 | 


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/certsync-pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/certsync-pipeline


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline


--------------------------------------------------------------------------------
/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/main/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline


--------------------------------------------------------------------------------
/docker/main/rootfs/usr/local/nginx/conf/go2rtc_upstream.conf:
--------------------------------------------------------------------------------
1 | upstream go2rtc {
2 |     server 127.0.0.1:1984;
3 |     keepalive 1024;
4 | }


--------------------------------------------------------------------------------
/docker/main/rootfs/usr/local/nginx/get_base_path.py:
--------------------------------------------------------------------------------
 1 | """Prints the base path as json to stdout."""
 2 | 
 3 | import json
 4 | import os
 5 | from typing import Any
 6 | 
 7 | base_path = os.environ.get("FRIGATE_BASE_PATH", "")
 8 | 
 9 | result: dict[str, Any] = {"base_path": base_path}
10 | 
11 | print(json.dumps(result))
12 | 


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000005001.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000005001.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000038829.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000038829.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000052891.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000052891.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000075612.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000075612.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000098261.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000098261.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000181542.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000181542.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000215245.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000215245.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000277005.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000277005.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000288685.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000288685.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000301421.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000301421.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000334371.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000334371.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000348481.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000348481.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000373353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000373353.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000397681.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000397681.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000414673.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000414673.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000419312.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000419312.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000465822.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000465822.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000475732.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000475732.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000559707.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000559707.jpg


--------------------------------------------------------------------------------
/docker/rockchip/COCO/subset/000000574315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/rockchip/COCO/subset/000000574315.jpg


--------------------------------------------------------------------------------
/docker/rockchip/requirements-wheels-rk.txt:
--------------------------------------------------------------------------------
1 | rknn-toolkit2 == 2.3.2
2 | rknn-toolkit-lite2 == 2.3.2


--------------------------------------------------------------------------------
/docker/rockchip/rk.mk:
--------------------------------------------------------------------------------
 1 | BOARDS += rk
 2 | 
 3 | local-rk: version
 4 | 	docker buildx bake --file=docker/rockchip/rk.hcl rk \
 5 | 		--set rk.tags=frigate:latest-rk \
 6 | 		--load
 7 | 
 8 | build-rk: version
 9 | 	docker buildx bake --file=docker/rockchip/rk.hcl rk \
10 | 		--set rk.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rk
11 | 
12 | push-rk: build-rk
13 | 	docker buildx bake --file=docker/rockchip/rk.hcl rk \
14 | 		--set rk.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rk \
15 | 		--push


--------------------------------------------------------------------------------
/docker/rocm/requirements-wheels-rocm.txt:
--------------------------------------------------------------------------------
1 | onnxruntime-rocm @ https://github.com/NickM-27/frigate-onnxruntime-rocm/releases/download/v6.3.3/onnxruntime_rocm-1.20.1-cp311-cp311-linux_x86_64.whl


--------------------------------------------------------------------------------
/docker/rpi/Dockerfile:
--------------------------------------------------------------------------------
 1 | # syntax=docker/dockerfile:1.4
 2 | 
 3 | # https://askubuntu.com/questions/972516/debian-frontend-environment-variable
 4 | ARG DEBIAN_FRONTEND=noninteractive
 5 | 
 6 | FROM deps AS rpi-deps
 7 | ARG TARGETARCH
 8 | 
 9 | # Install dependencies
10 | RUN --mount=type=bind,source=docker/rpi/install_deps.sh,target=/deps/install_deps.sh \
11 |     /deps/install_deps.sh
12 | 
13 | ENV DEFAULT_FFMPEG_VERSION="rpi"
14 | ENV INCLUDED_FFMPEG_VERSIONS="${DEFAULT_FFMPEG_VERSION}:${INCLUDED_FFMPEG_VERSIONS}"
15 | 
16 | WORKDIR /opt/frigate/
17 | COPY --from=rootfs / /
18 | 


--------------------------------------------------------------------------------
/docker/rpi/rpi.hcl:
--------------------------------------------------------------------------------
 1 | target deps {
 2 |   dockerfile = "docker/main/Dockerfile"
 3 |   platforms = ["linux/arm64"]
 4 |   target = "deps"
 5 | }
 6 | 
 7 | target rootfs {
 8 |   dockerfile = "docker/main/Dockerfile"
 9 |   platforms = ["linux/arm64"]
10 |   target = "rootfs"
11 | }
12 | 
13 | target rpi {
14 |   dockerfile = "docker/rpi/Dockerfile"
15 |   contexts = {
16 |     deps = "target:deps",
17 |     rootfs = "target:rootfs"
18 |   }
19 |   platforms = ["linux/arm64"]
20 | }


--------------------------------------------------------------------------------
/docker/rpi/rpi.mk:
--------------------------------------------------------------------------------
 1 | BOARDS += rpi
 2 | 
 3 | local-rpi: version
 4 | 	docker buildx bake --file=docker/rpi/rpi.hcl rpi \
 5 | 		--set rpi.tags=frigate:latest-rpi \
 6 | 		--load
 7 | 
 8 | build-rpi: version
 9 | 	docker buildx bake --file=docker/rpi/rpi.hcl rpi \
10 | 		--set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rpi
11 | 
12 | push-rpi: build-rpi
13 | 	docker buildx bake --file=docker/rpi/rpi.hcl rpi \
14 | 		--set rpi.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-rpi \
15 | 		--push
16 | 


--------------------------------------------------------------------------------
/docker/tensorrt/detector/rootfs/etc/ld.so.conf.d/cuda_tensorrt.conf:
--------------------------------------------------------------------------------
1 | /usr/local/lib/python3.11/dist-packages/nvidia/cudnn/lib
2 | /usr/local/lib/python3.11/dist-packages/nvidia/cuda_runtime/lib
3 | /usr/local/lib/python3.11/dist-packages/nvidia/cublas/lib
4 | /usr/local/lib/python3.11/dist-packages/nvidia/cufft/lib
5 | /usr/local/lib/python3.11/dist-packages/nvidia/curand/lib/
6 | /usr/local/lib/python3.11/dist-packages/nvidia/cuda_nvrtc/lib/


--------------------------------------------------------------------------------
/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/trt-model-prepare:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/trt-model-prepare


--------------------------------------------------------------------------------
/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/trt-model-prepare/dependencies.d/base:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/trt-model-prepare/dependencies.d/base


--------------------------------------------------------------------------------
/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/trt-model-prepare/type:
--------------------------------------------------------------------------------
1 | oneshot
2 | 


--------------------------------------------------------------------------------
/docker/tensorrt/detector/rootfs/etc/s6-overlay/s6-rc.d/trt-model-prepare/up:
--------------------------------------------------------------------------------
1 | /etc/s6-overlay/s6-rc.d/trt-model-prepare/run
2 | 


--------------------------------------------------------------------------------
/docker/tensorrt/requirements-arm64.txt:
--------------------------------------------------------------------------------
1 | cuda-python == 12.6.*; platform_machine == 'aarch64'
2 | 


--------------------------------------------------------------------------------
/docker/tensorrt/requirements-models-arm64.txt:
--------------------------------------------------------------------------------
1 | onnx == 1.14.0; platform_machine == 'aarch64'
2 | protobuf == 3.20.3; platform_machine == 'aarch64'
3 | numpy == 1.23.*; platform_machine == 'aarch64'  # required by python-tensorrt 8.2.1 (Jetpack 4.6)
4 | 


--------------------------------------------------------------------------------
/docs/.gitignore:
--------------------------------------------------------------------------------
 1 | # Dependencies
 2 | /node_modules
 3 | 
 4 | # Production
 5 | /build
 6 | 
 7 | # Generated files
 8 | .docusaurus
 9 | .cache-loader
10 | 
11 | # Misc
12 | .DS_Store
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 | 
18 | npm-debug.log*
19 | yarn-debug.log*
20 | yarn-error.log*
21 | 


--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
 1 | # Website
 2 | 
 3 | This website is built using [Docusaurus 3.5](https://docusaurus.io/docs), a modern static website generator.
 4 | 
 5 | For installation and contributing instructions, please follow the [Contributing Docs](https://docs.frigate.video/development/contributing).
 6 | 
 7 | # Development
 8 | 
 9 | 1. Run `npm i` to install dependencies
10 | 2. Run `npm run start` to start the website
11 | 


--------------------------------------------------------------------------------
/docs/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
3 | };
4 | 


--------------------------------------------------------------------------------
/docs/docs/integrations/api.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/docs/integrations/api.md


--------------------------------------------------------------------------------
/docs/docs/mdx.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | id: mdx
 3 | title: Powered by MDX
 4 | ---
 5 | 
 6 | You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/).
 7 | 
 8 | export const Highlight = ({children, color}) => ( <span style={{
 9 |       backgroundColor: color,
10 |       borderRadius: '2px',
11 |       color: '#fff',
12 |       padding: '0.2rem',
13 |     }}>{children}</span> );
14 | 
15 | <Highlight color="#25c2a0">Docusaurus green</Highlight> and <Highlight color="#1877F2">Facebook blue</Highlight> are my favorite colors.
16 | 
17 | I can write **Markdown** alongside my _JSX_!
18 | 


--------------------------------------------------------------------------------
/docs/plugins/raw-loader.js:
--------------------------------------------------------------------------------
 1 | module.exports = function (context, options) {
 2 |   return {
 3 |     name: 'labelmap',
 4 |     configureWebpack(config, isServer, utils) {
 5 |       return {
 6 |         module: {
 7 |           rules: [{ test: /\.txt$/, use: 'raw-loader' }],
 8 |         },
 9 |       };
10 |     },
11 |   };
12 | };
13 | 


--------------------------------------------------------------------------------
/docs/src/components/LanguageAlert/styles.module.css:
--------------------------------------------------------------------------------
 1 | .alert {
 2 |     padding: 12px;
 3 |     background: #fff8e6;
 4 |     border-bottom: 1px solid #ffd166;
 5 |     text-align: center;
 6 |     font-size: 15px;
 7 |   }
 8 |   
 9 |   .alert a {
10 |     color: #1890ff;
11 |     font-weight: 500;
12 |     margin-left: 6px;
13 |   }


--------------------------------------------------------------------------------
/docs/src/theme/Navbar/index.js:
--------------------------------------------------------------------------------
 1 | import React from 'react';
 2 | import NavbarLayout from '@theme/Navbar/Layout';
 3 | import NavbarContent from '@theme/Navbar/Content';
 4 | import LanguageAlert from '../../components/LanguageAlert';
 5 | 
 6 | export default function Navbar() {
 7 |   return (
 8 |     <>
 9 |       <NavbarLayout>
10 |         <NavbarContent />
11 |       </NavbarLayout>
12 |       <LanguageAlert />
13 |     </>
14 |   );
15 | }


--------------------------------------------------------------------------------
/docs/static/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/.nojekyll


--------------------------------------------------------------------------------
/docs/static/img/annotate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/annotate.png


--------------------------------------------------------------------------------
/docs/static/img/autotracking-debug.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/autotracking-debug.gif


--------------------------------------------------------------------------------
/docs/static/img/bottom-center-mask.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/bottom-center-mask.jpg


--------------------------------------------------------------------------------
/docs/static/img/bottom-center.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/bottom-center.jpg


--------------------------------------------------------------------------------
/docs/static/img/camera-ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/camera-ui.png


--------------------------------------------------------------------------------
/docs/static/img/diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/diagram.png


--------------------------------------------------------------------------------
/docs/static/img/driveway_zones-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/driveway_zones-min.png


--------------------------------------------------------------------------------
/docs/static/img/driveway_zones.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/driveway_zones.png


--------------------------------------------------------------------------------
/docs/static/img/events-ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/events-ui.png


--------------------------------------------------------------------------------
/docs/static/img/example-mask-poly-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/example-mask-poly-min.png


--------------------------------------------------------------------------------
/docs/static/img/example-mask-poly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/example-mask-poly.png


--------------------------------------------------------------------------------
/docs/static/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/favicon.ico


--------------------------------------------------------------------------------
/docs/static/img/frigate-autotracking-example.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/frigate-autotracking-example.gif


--------------------------------------------------------------------------------
/docs/static/img/frigate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/frigate.png


--------------------------------------------------------------------------------
/docs/static/img/ground-plane.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/ground-plane.jpg


--------------------------------------------------------------------------------
/docs/static/img/home-ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/home-ui.png


--------------------------------------------------------------------------------
/docs/static/img/live-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/live-view.png


--------------------------------------------------------------------------------
/docs/static/img/media_browser-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/media_browser-min.png


--------------------------------------------------------------------------------
/docs/static/img/media_browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/media_browser.png


--------------------------------------------------------------------------------
/docs/static/img/mismatched-resolution-min.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/mismatched-resolution-min.jpg


--------------------------------------------------------------------------------
/docs/static/img/mismatched-resolution.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/mismatched-resolution.jpg


--------------------------------------------------------------------------------
/docs/static/img/notification-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/notification-min.png


--------------------------------------------------------------------------------
/docs/static/img/notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/notification.png


--------------------------------------------------------------------------------
/docs/static/img/plus-api-key-min.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus-api-key-min.png


--------------------------------------------------------------------------------
/docs/static/img/plus/attribute-example-face.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/attribute-example-face.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/attribute-example-fedex.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/attribute-example-fedex.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/false-positive-overlap.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/false-positive-overlap.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/false-positive.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/false-positive.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/fedex-logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/fedex-logo.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/model-ready-email.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/model-ready-email.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/plus-models.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/plus-models.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/send-to-plus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/send-to-plus.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/submit-to-plus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/submit-to-plus.jpg


--------------------------------------------------------------------------------
/docs/static/img/plus/suggestions.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/plus/suggestions.webp


--------------------------------------------------------------------------------
/docs/static/img/resolutions-min.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/resolutions-min.jpg


--------------------------------------------------------------------------------
/docs/static/img/resolutions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/resolutions.png


--------------------------------------------------------------------------------
/docs/static/img/review-items.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/docs/static/img/review-items.png


--------------------------------------------------------------------------------
/frigate/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/__init__.py


--------------------------------------------------------------------------------
/frigate/api/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/api/__init__.py


--------------------------------------------------------------------------------
/frigate/api/defs/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/api/defs/__init__.py


--------------------------------------------------------------------------------
/frigate/api/defs/query/app_query_parameters.py:
--------------------------------------------------------------------------------
 1 | from typing import Optional
 2 | 
 3 | from pydantic import BaseModel
 4 | 
 5 | 
 6 | class AppTimelineHourlyQueryParameters(BaseModel):
 7 |     cameras: Optional[str] = "all"
 8 |     labels: Optional[str] = "all"
 9 |     after: Optional[float] = None
10 |     before: Optional[float] = None
11 |     limit: Optional[int] = 200
12 |     timezone: Optional[str] = "utc"
13 | 


--------------------------------------------------------------------------------
/frigate/api/defs/query/regenerate_query_parameters.py:
--------------------------------------------------------------------------------
 1 | from typing import Optional
 2 | 
 3 | from pydantic import BaseModel
 4 | 
 5 | from frigate.events.types import RegenerateDescriptionEnum
 6 | 
 7 | 
 8 | class RegenerateQueryParameters(BaseModel):
 9 |     source: Optional[RegenerateDescriptionEnum] = RegenerateDescriptionEnum.thumbnails
10 | 


--------------------------------------------------------------------------------
/frigate/api/defs/request/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/api/defs/request/__init__.py


--------------------------------------------------------------------------------
/frigate/api/defs/request/app_body.py:
--------------------------------------------------------------------------------
 1 | from typing import Optional
 2 | 
 3 | from pydantic import BaseModel
 4 | 
 5 | 
 6 | class AppConfigSetBody(BaseModel):
 7 |     requires_restart: int = 1
 8 | 
 9 | 
10 | class AppPutPasswordBody(BaseModel):
11 |     password: str
12 | 
13 | 
14 | class AppPostUsersBody(BaseModel):
15 |     username: str
16 |     password: str
17 |     role: Optional[str] = "viewer"
18 | 
19 | 
20 | class AppPostLoginBody(BaseModel):
21 |     user: str
22 |     password: str
23 | 
24 | 
25 | class AppPutRoleBody(BaseModel):
26 |     role: str
27 | 


--------------------------------------------------------------------------------
/frigate/api/defs/request/classification_body.py:
--------------------------------------------------------------------------------
1 | from pydantic import BaseModel
2 | 
3 | 
4 | class RenameFaceBody(BaseModel):
5 |     new_name: str
6 | 


--------------------------------------------------------------------------------
/frigate/api/defs/request/export_rename_body.py:
--------------------------------------------------------------------------------
1 | from pydantic import BaseModel, Field
2 | 
3 | 
4 | class ExportRenameBody(BaseModel):
5 |     name: str = Field(title="Friendly name", max_length=256)
6 | 


--------------------------------------------------------------------------------
/frigate/api/defs/request/review_body.py:
--------------------------------------------------------------------------------
1 | from pydantic import BaseModel, conlist, constr
2 | 
3 | 
4 | class ReviewModifyMultipleBody(BaseModel):
5 |     # List of string with at least one element and each element with at least one char
6 |     ids: conlist(constr(min_length=1), min_length=1)
7 | 


--------------------------------------------------------------------------------
/frigate/api/defs/response/generic_response.py:
--------------------------------------------------------------------------------
1 | from pydantic import BaseModel
2 | 
3 | 
4 | class GenericResponse(BaseModel):
5 |     success: bool
6 |     message: str
7 | 


--------------------------------------------------------------------------------
/frigate/api/defs/tags.py:
--------------------------------------------------------------------------------
 1 | from enum import Enum
 2 | 
 3 | 
 4 | class Tags(Enum):
 5 |     app = "App"
 6 |     preview = "Preview"
 7 |     logs = "Logs"
 8 |     media = "Media"
 9 |     notifications = "Notifications"
10 |     review = "Review"
11 |     export = "Export"
12 |     events = "Events"
13 |     classification = "classification"
14 |     auth = "Auth"
15 | 


--------------------------------------------------------------------------------
/frigate/config/__init__.py:
--------------------------------------------------------------------------------
 1 | from frigate.detectors import DetectorConfig, ModelConfig  # noqa: F401
 2 | 
 3 | from .auth import *  # noqa: F403
 4 | from .camera import *  # noqa: F403
 5 | from .camera_group import *  # noqa: F403
 6 | from .classification import *  # noqa: F403
 7 | from .config import *  # noqa: F403
 8 | from .database import *  # noqa: F403
 9 | from .logger import *  # noqa: F403
10 | from .mqtt import *  # noqa: F403
11 | from .proxy import *  # noqa: F403
12 | from .telemetry import *  # noqa: F403
13 | from .tls import *  # noqa: F403
14 | from .ui import *  # noqa: F403
15 | 


--------------------------------------------------------------------------------
/frigate/config/base.py:
--------------------------------------------------------------------------------
1 | from pydantic import BaseModel, ConfigDict
2 | 
3 | 
4 | class FrigateBaseModel(BaseModel):
5 |     model_config = ConfigDict(extra="forbid", protected_namespaces=())
6 | 


--------------------------------------------------------------------------------
/frigate/config/camera/live.py:
--------------------------------------------------------------------------------
 1 | from typing import Dict
 2 | 
 3 | from pydantic import Field
 4 | 
 5 | from ..base import FrigateBaseModel
 6 | 
 7 | __all__ = ["CameraLiveConfig"]
 8 | 
 9 | 
10 | class CameraLiveConfig(FrigateBaseModel):
11 |     streams: Dict[str, str] = Field(
12 |         default_factory=list,
13 |         title="Friendly names and restream names to use for live view.",
14 |     )
15 |     height: int = Field(default=720, title="Live camera view height")
16 |     quality: int = Field(default=8, ge=1, le=31, title="Live camera view quality")
17 | 


--------------------------------------------------------------------------------
/frigate/config/camera/ui.py:
--------------------------------------------------------------------------------
 1 | from pydantic import Field
 2 | 
 3 | from ..base import FrigateBaseModel
 4 | 
 5 | __all__ = ["CameraUiConfig"]
 6 | 
 7 | 
 8 | class CameraUiConfig(FrigateBaseModel):
 9 |     order: int = Field(default=0, title="Order of camera in UI.")
10 |     dashboard: bool = Field(
11 |         default=True, title="Show this camera in Frigate dashboard UI."
12 |     )
13 | 


--------------------------------------------------------------------------------
/frigate/config/database.py:
--------------------------------------------------------------------------------
 1 | from pydantic import Field
 2 | 
 3 | from frigate.const import DEFAULT_DB_PATH
 4 | 
 5 | from .base import FrigateBaseModel
 6 | 
 7 | __all__ = ["DatabaseConfig"]
 8 | 
 9 | 
10 | class DatabaseConfig(FrigateBaseModel):
11 |     path: str = Field(default=DEFAULT_DB_PATH, title="Database path.")  # noqa: F821
12 | 


--------------------------------------------------------------------------------
/frigate/config/tls.py:
--------------------------------------------------------------------------------
 1 | from pydantic import Field
 2 | 
 3 | from .base import FrigateBaseModel
 4 | 
 5 | __all__ = ["TlsConfig"]
 6 | 
 7 | 
 8 | class TlsConfig(FrigateBaseModel):
 9 |     enabled: bool = Field(default=True, title="Enable TLS for port 8971")
10 | 


--------------------------------------------------------------------------------
/frigate/detectors/plugins/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/detectors/plugins/__init__.py


--------------------------------------------------------------------------------
/frigate/events/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/events/__init__.py


--------------------------------------------------------------------------------
/frigate/events/types.py:
--------------------------------------------------------------------------------
 1 | """Types for event management."""
 2 | 
 3 | from enum import Enum
 4 | 
 5 | 
 6 | class EventTypeEnum(str, Enum):
 7 |     api = "api"
 8 |     tracked_object = "tracked_object"
 9 | 
10 | 
11 | class EventStateEnum(str, Enum):
12 |     start = "start"
13 |     update = "update"
14 |     end = "end"
15 | 
16 | 
17 | class RegenerateDescriptionEnum(str, Enum):
18 |     thumbnails = "thumbnails"
19 |     snapshot = "snapshot"
20 | 


--------------------------------------------------------------------------------
/frigate/images/birdseye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/images/birdseye.png


--------------------------------------------------------------------------------
/frigate/images/camera-error.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/images/camera-error.jpg


--------------------------------------------------------------------------------
/frigate/record/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/record/__init__.py


--------------------------------------------------------------------------------
/frigate/review/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/review/__init__.py


--------------------------------------------------------------------------------
/frigate/review/types.py:
--------------------------------------------------------------------------------
1 | from enum import Enum
2 | 
3 | 
4 | class SeverityEnum(str, Enum):
5 |     alert = "alert"
6 |     detection = "detection"
7 | 


--------------------------------------------------------------------------------
/frigate/service_manager/__init__.py:
--------------------------------------------------------------------------------
1 | from .multiprocessing import ServiceProcess
2 | from .service import Service, ServiceManager
3 | 
4 | __all__ = ["Service", "ServiceProcess", "ServiceManager"]
5 | 


--------------------------------------------------------------------------------
/frigate/stats/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/stats/__init__.py


--------------------------------------------------------------------------------
/frigate/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/test/__init__.py


--------------------------------------------------------------------------------
/frigate/test/const.py:
--------------------------------------------------------------------------------
1 | """Constants for testing."""
2 | 
3 | TEST_DB = "test.db"
4 | TEST_DB_CLEANUPS = ["test.db", "test.db-shm", "test.db-wal"]
5 | 


--------------------------------------------------------------------------------
/frigate/test/http_api/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/frigate/test/http_api/__init__.py


--------------------------------------------------------------------------------
/frigate/track/__init__.py:
--------------------------------------------------------------------------------
 1 | from abc import ABC, abstractmethod
 2 | from typing import Any
 3 | 
 4 | from frigate.config import DetectConfig
 5 | 
 6 | 
 7 | class ObjectTracker(ABC):
 8 |     @abstractmethod
 9 |     def __init__(self, config: DetectConfig) -> None:
10 |         pass
11 | 
12 |     @abstractmethod
13 |     def match_and_update(
14 |         self, frame_name: str, frame_time: float, detections: list[dict[str, Any]]
15 |     ) -> None:
16 |         pass
17 | 


--------------------------------------------------------------------------------
/frigate/util/__init__.py:
--------------------------------------------------------------------------------
1 | from .process import Process
2 | 
3 | __all__ = ["Process"]
4 | 


--------------------------------------------------------------------------------
/migrations/016_sublabel_increase.py:
--------------------------------------------------------------------------------
 1 | import peewee as pw
 2 | 
 3 | from frigate.models import Event
 4 | 
 5 | 
 6 | def migrate(migrator, database, fake=False, **kwargs):
 7 |     migrator.change_columns(Event, sub_label=pw.CharField(max_length=100, null=True))
 8 | 
 9 | 
10 | def rollback(migrator, database, fake=False, **kwargs):
11 |     migrator.change_columns(Event, sub_label=pw.CharField(max_length=20, null=True))
12 | 


--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 |   base = "docs/"
3 |   publish = "build"
4 |   command = "npm run build"
5 |   environment = { NODE_VERSION = "20" }
6 | 
7 | 
8 | 


--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 |   "name": "frigate",
3 |   "lockfileVersion": 3,
4 |   "requires": true,
5 |   "packages": {}
6 | }
7 | 


--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool.ruff.lint]
2 | ignore = ["E501","E711","E712"]
3 | extend-select = ["I"]
4 | 


--------------------------------------------------------------------------------
/web/.gitignore:
--------------------------------------------------------------------------------
 1 | # Logs
 2 | logs
 3 | *.log
 4 | npm-debug.log*
 5 | yarn-debug.log*
 6 | yarn-error.log*
 7 | pnpm-debug.log*
 8 | lerna-debug.log*
 9 | 
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | 
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 | 


--------------------------------------------------------------------------------
/web/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 |   "plugins": ["prettier-plugin-tailwindcss"]
3 | }
4 | 


--------------------------------------------------------------------------------
/web/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 |     "recommendations": [
3 |       "dbaeumer.vscode-eslint"
4 |     ]
5 |   }


--------------------------------------------------------------------------------
/web/components.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "$schema": "https://ui.shadcn.com/schema.json",
 3 |   "style": "default",
 4 |   "rsc": false,
 5 |   "tsx": true,
 6 |   "tailwind": {
 7 |     "config": "tailwind.config.js",
 8 |     "css": "index.css",
 9 |     "baseColor": "slate",
10 |     "cssVariables": true
11 |   },
12 |   "aliases": {
13 |     "components": "@/components",
14 |     "utils": "@/lib/utils",
15 |     "ui": "@/components/ui",
16 |     "lib": "@/lib",
17 |     "hooks": "@/hooks"
18 |   }
19 | }
20 | 


--------------------------------------------------------------------------------
/web/images/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/apple-touch-icon.png


--------------------------------------------------------------------------------
/web/images/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/favicon-16x16.png


--------------------------------------------------------------------------------
/web/images/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/favicon-32x32.png


--------------------------------------------------------------------------------
/web/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/favicon.ico


--------------------------------------------------------------------------------
/web/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/favicon.png


--------------------------------------------------------------------------------
/web/images/marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/marker.png


--------------------------------------------------------------------------------
/web/images/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/images/mstile-150x150.png


--------------------------------------------------------------------------------
/web/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 |   plugins: {
3 |     tailwindcss: {},
4 |     autoprefixer: {},
5 |   },
6 | };
7 | 


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Black.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Black.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-BlackItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-BlackItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Bold.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-BoldItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-ExtraBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-ExtraBold.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-ExtraBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-ExtraBoldItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-ExtraLight.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-ExtraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-ExtraLightItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Italic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Light.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-LightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-LightItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Medium.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-MediumItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-MediumItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Regular.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-SemiBold.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-SemiBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-SemiBoldItalic.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-Thin.woff2


--------------------------------------------------------------------------------
/web/public/fonts/Inter-ThinItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/fonts/Inter-ThinItalic.woff2


--------------------------------------------------------------------------------
/web/public/images/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/images/android-chrome-192x192.png


--------------------------------------------------------------------------------
/web/public/images/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/images/android-chrome-512x512.png


--------------------------------------------------------------------------------
/web/public/images/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/images/apple-touch-icon.png


--------------------------------------------------------------------------------
/web/public/images/maskable-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/images/maskable-badge.png


--------------------------------------------------------------------------------
/web/public/images/maskable-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blakeblackshear/frigate/cd54a8115084d0820f9f594a3e9b1e3d4fd07cd8/web/public/images/maskable-icon.png


--------------------------------------------------------------------------------
/web/public/locales/ab/audio.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/common.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/auth.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/camera.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/dialog.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/filter.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/icons.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/input.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/components/player.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/objects.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/configEditor.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/events.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/explore.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/exports.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/faceLibrary.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/live.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/recording.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/search.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/settings.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ab/views/system.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/common.json:
--------------------------------------------------------------------------------
1 | {
2 |   "time": {
3 |     "untilForTime": "حتى {{time}}",
4 |     "untilForRestart": "حتى يعاد تشغيل فرايجيت.",
5 |     "untilRestart": "حتى إعادة التشغيل",
6 |     "ago": "منذ {{timeAgo}}"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/auth.json:
--------------------------------------------------------------------------------
1 | {
2 |   "form": {
3 |     "password": "كلمة السر",
4 |     "user": "أسم المستخدم",
5 |     "login": "تسجيل الدخول"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/camera.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "group": {
 3 |     "label": "مجموعات الكاميرات",
 4 |     "add": "إضافة مجموعة الكاميرات",
 5 |     "edit": "تعديل مجموعة الكاميرات",
 6 |     "delete": {
 7 |       "label": "حذف مجموعة الكاميرات"
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/dialog.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "restart": {
 3 |     "title": "هل أنت متأكد أنك تريد إعادة تشغيل فرايجيت؟",
 4 |     "button": "إعادة التشغيل",
 5 |     "restarting": {
 6 |       "title": "يتم إعادة تشغيل فرايجيت"
 7 |     }
 8 |   }
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "ترشيح",
 3 |   "labels": {
 4 |     "label": "التسميات",
 5 |     "all": {
 6 |       "title": "كل التسميات"
 7 |     }
 8 |   }
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "اختر أيقونة",
4 |     "search": {
5 |       "placeholder": "ابحث عن أيقونة…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "تحميل الفيديو",
 5 |       "toast": {
 6 |         "success": "تم بدأ تحميل فيديو عنصر المراجعة."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/components/player.json:
--------------------------------------------------------------------------------
1 | {
2 |   "noRecordingsFoundForThisTime": "لا يوجد تسجيلات في هذا التوقيت",
3 |   "noPreviewFound": "لا يوجد معاينة",
4 |   "noPreviewFoundFor": "لا يوجد معاينة لـ{{cameraName}}"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "dog": "كَلْب",
 3 |   "cat": "قِطّ",
 4 |   "horse": "حِصَان",
 5 |   "animal": "حَيَوَان",
 6 |   "bark": "نُبَاح",
 7 |   "person": "شخص",
 8 |   "bicycle": "دراجة هوائية",
 9 |   "car": "سيارة",
10 |   "motorcycle": "دراجة نارية"
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/configEditor.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "محرر الإعدادات - فرايجيت",
3 |   "configEditor": "محرر الإعدادات",
4 |   "copyConfig": "نسخ الإعدادات",
5 |   "saveAndRestart": "حفظ وإعادة تشغيل"
6 | }
7 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/events.json:
--------------------------------------------------------------------------------
1 | {
2 |   "detections": "الإكتشافات",
3 |   "alerts": "الإنذارات",
4 |   "motion": {
5 |     "label": "الحركة"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/explore.json:
--------------------------------------------------------------------------------
1 | {
2 |   "exploreMore": "اكتشف المزيد من أجسام {{label}}",
3 |   "documentTitle": "اكتشف - فرايجيت",
4 |   "generativeAI": "ذكاء اصطناعي مولد"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/exports.json:
--------------------------------------------------------------------------------
1 | {
2 |   "search": "بحث",
3 |   "noExports": "لا يوجد تصديرات",
4 |   "documentTitle": "التصدير - فرايجيت"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/faceLibrary.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "description": {
 3 |     "addFace": "قم بإضافة مجموعة جديدة لمكتبة الأوجه.",
 4 |     "invalidName": "أسم غير صالح. يجب أن يشمل الأسم فقط على الحروف، الأرقام، المسافات، الفاصلة العليا، الشرطة التحتية، والشرطة الواصلة.",
 5 |     "placeholder": "أدخل أسم لهذه المجموعة"
 6 |   },
 7 |   "details": {
 8 |     "person": "شخص"
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/live.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "بث حي - فرايجيت",
3 |   "documentTitle.withCamera": "{{camera}} - بث حي - فرايجيت",
4 |   "lowBandwidthMode": "وضع موفر للبيانات"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/recording.json:
--------------------------------------------------------------------------------
1 | {
2 |   "filter": "ترشيح",
3 |   "export": "إرسال",
4 |   "calendar": "التقويم"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/search.json:
--------------------------------------------------------------------------------
1 | {
2 |   "search": "بحث",
3 |   "savedSearches": "عمليات البحث المحفوظة",
4 |   "searchFor": "البحث عن {{inputValue}}"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/settings.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "camera": "إعدادات الكاميرا - فرايجيت",
4 |     "default": "الإعدادات - فرايجيت",
5 |     "authentication": "إعدادات المصادقة - فرايجيت"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ar/views/system.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "cameras": "إحصاءات الكاميرات - فرايجيت",
4 |     "storage": "إحصاءات التخزين - فرايجيت",
5 |     "general": "إحصاءات عامة - فرايجيت"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/audio.json:
--------------------------------------------------------------------------------
1 | {
2 |   "babbling": "Бърборене"
3 | }
4 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/components/auth.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/components/camera.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/components/dialog.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": {
 3 |     "name": {
 4 |       "placeholder": "Име на експорта"
 5 |     },
 6 |     "time": {
 7 |       "lastHour_one": "Последният час",
 8 |       "lastHour_other": "Последните {{count}} часа"
 9 |     },
10 |     "select": "Избери"
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/components/icons.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/components/input.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/objects.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/configEditor.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/events.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "timeline.aria": "Избери хронология",
 3 |   "timeline": "Хронология",
 4 |   "calendarFilter": {
 5 |     "last24Hours": "Последните 24 часа"
 6 |   },
 7 |   "events": {
 8 |     "label": "Събития",
 9 |     "aria": "Избери събития",
10 |     "noFoundForTimePeriod": "Няма намерени събития за този времеви период."
11 |   },
12 |   "allCameras": "Всички камери"
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/exports.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Филтър",
 3 |   "export": "Експорт",
 4 |   "calendar": "Календар",
 5 |   "filters": "Филтри",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Не е избран валиден времеви диапазон",
 9 |       "endTimeMustAfterStartTime": "Крайното време трябва да бъде след началеният час"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/search.json:
--------------------------------------------------------------------------------
1 | {
2 |   "button": {
3 |     "save": "Запазване на търсенето"
4 |   }
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/settings.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "masksAndZones": {
 3 |     "motionMasks": {
 4 |       "point_one": "{{count}} точка",
 5 |       "point_other": "{{count}} точки"
 6 |     },
 7 |     "objectMasks": {
 8 |       "point_one": "{{count}} точка",
 9 |       "point_other": "{{count}} точки"
10 |     },
11 |     "zones": {
12 |       "point_one": "{{count}} точка",
13 |       "point_other": "{{count}} точки"
14 |     }
15 |   }
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/bg/views/system.json:
--------------------------------------------------------------------------------
1 | {
2 |   "stats": {
3 |     "healthy": "Системата е изправна"
4 |   }
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ca/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Selecciona una icona",
4 |     "search": {
5 |       "placeholder": "Buscar icona…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ca/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Descarregar vídeo",
 5 |       "toast": {
 6 |         "success": "S’ha començat a descarregar el vídeo de l’element de revisió."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ca/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Editor de Configuració - Frigate",
 3 |   "configEditor": "Editor de configuració",
 4 |   "copyConfig": "Copiar configuració",
 5 |   "saveAndRestart": "Desa i reinicia",
 6 |   "saveOnly": "Només desar",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Configuració copiada al porta-retalls."
10 |     },
11 |     "error": {
12 |       "savingError": "Error al desar la configuració"
13 |     }
14 |   },
15 |   "confirm": "Sortir sense desar?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/ca/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Exportar - Frigate",
 3 |   "search": "Buscar",
 4 |   "noExports": "No s'han trobat exportacions",
 5 |   "deleteExport": "Suprimeix l'exportació",
 6 |   "deleteExport.desc": "Estàs segur que vols eliminar {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Renombrar exportació",
 9 |     "desc": "Introdueix un nou nom per a aquesta exportació.",
10 |     "saveExport": "Desar exportació"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Error al canviar el nom de l’exportació: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/ca/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filtre",
 3 |   "toast": {
 4 |     "error": {
 5 |       "noValidTimeSelected": "No s'ha seleccionat un rang de temps vàlid",
 6 |       "endTimeMustAfterStartTime": "L'hora de finalització ha de ser posterior a l'hora d'inici"
 7 |     }
 8 |   },
 9 |   "export": "Exportar",
10 |   "calendar": "Calendari",
11 |   "filters": "Filtres"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Uživatelské jméno",
 4 |     "password": "Heslo",
 5 |     "login": "Přihlášení",
 6 |     "errors": {
 7 |       "usernameRequired": "Uživatelské jméno je povinné",
 8 |       "passwordRequired": "Heslo je povinné",
 9 |       "loginFailed": "Přihlášení se nezdařilo",
10 |       "unknownError": "Neznámá chyba. Zkontrolujte logy.",
11 |       "webUnknownError": "Neznámá chuba. Zkontrolujte logy konzoly.",
12 |       "rateLimit": "Limit požadavků překročen. Zkuste to znovu později."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Zvolte ikonu",
4 |     "search": {
5 |       "placeholder": "Hledejte ikonu…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Stáhnout video",
 5 |       "toast": {
 6 |         "success": "Vaše video se stahuje."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Editor konfigurace - Frigate",
 3 |   "configEditor": "Editor konfigurace",
 4 |   "copyConfig": "Kopírovat konfiguraci",
 5 |   "saveAndRestart": "Uložit a restartovat",
 6 |   "saveOnly": "Jen uložit",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Konfigurace byla zkopírovaná do schránky."
10 |     },
11 |     "error": {
12 |       "savingError": "Chyba ukládání konfigurace"
13 |     }
14 |   },
15 |   "confirm": "Opustit bez uložení?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Hledat",
 3 |   "documentTitle": "Exportovat - Frigate",
 4 |   "noExports": "Žádné exporty nenalezeny",
 5 |   "deleteExport": "Smazat export",
 6 |   "deleteExport.desc": "Opravdu chcete smazat {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Přejmenovat export",
 9 |     "desc": "Zadejte nové jméno pro tento export.",
10 |     "saveExport": "Uložit export"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Nepodařilo se přejmenovat export: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/cs/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Exportovat",
 3 |   "calendar": "Kalendář",
 4 |   "filter": "Filtrovat",
 5 |   "filters": "Filtry",
 6 |   "toast": {
 7 |     "error": {
 8 |       "endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
 9 |       "noValidTimeSelected": "Nebylo zvoleno platné časové období"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/de/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "login": "Anmeldung",
 4 |     "errors": {
 5 |       "passwordRequired": "Kennwort ist erforderlich",
 6 |       "loginFailed": "Anmeldung gescheitert",
 7 |       "webUnknownError": "Unbekannter Fehler. Prüfe Konsolenlogs.",
 8 |       "usernameRequired": "Benutzername ist erforderlich",
 9 |       "rateLimit": "Anmeldelimit überschritten. Bitte später erneut versuchen.",
10 |       "unknownError": "Unbekannter Fehler. Prüfe Logs."
11 |     },
12 |     "user": "Benutzername",
13 |     "password": "Kennwort"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/de/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "Suche nach einem Icon…"
5 |     },
6 |     "selectIcon": "Wähle ein Icon"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/de/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Video herunterladen",
 5 |       "toast": {
 6 |         "success": "Das Herunterladen des überprüften Videos wurde gestartet."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/de/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Konfigurationseditor",
 3 |   "copyConfig": "Konfiguration kopieren",
 4 |   "saveAndRestart": "Sichern und Neustarten",
 5 |   "saveOnly": "Nur Sichern",
 6 |   "toast": {
 7 |     "error": {
 8 |       "savingError": "Fehler beim Speichern der Konfiguration"
 9 |     },
10 |     "success": {
11 |       "copyToClipboard": "Konfiguration in Zwischenablage kopiert."
12 |     }
13 |   },
14 |   "documentTitle": "Konfigurationseditor – Frigate",
15 |   "confirm": "Verlassen ohne zu Speichern?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/de/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "deleteExport": "Export löschen",
 3 |   "editExport": {
 4 |     "title": "Export umbenennen",
 5 |     "desc": "Gib einen neuen Namen für diesen Export an.",
 6 |     "saveExport": "Export speichern"
 7 |   },
 8 |   "documentTitle": "Exportieren - Frigate",
 9 |   "deleteExport.desc": "Soll {{exportName}} wirklich gelöscht werden?",
10 |   "search": "Suche",
11 |   "noExports": "Keine Exporte gefunden",
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Umbenennen des Exports fehlgeschlagen: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/de/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Export",
 3 |   "calendar": "Kalender",
 4 |   "filters": "Filter",
 5 |   "toast": {
 6 |     "error": {
 7 |       "endTimeMustAfterStartTime": "Endzeit muss nach Startzeit liegen",
 8 |       "noValidTimeSelected": "Gewählter Zeitraum ist ungültig"
 9 |     }
10 |   },
11 |   "filter": "Filter"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/en/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Username",
 4 |     "password": "Password",
 5 |     "login": "Login",
 6 |     "errors": {
 7 |       "usernameRequired": "Username is required",
 8 |       "passwordRequired": "Password is required",
 9 |       "rateLimit": "Exceeded rate limit. Try again later.",
10 |       "loginFailed": "Login failed",
11 |       "unknownError": "Unknown error. Check logs.",
12 |       "webUnknownError": "Unknown error. Check console logs."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/en/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Select an icon",
4 |     "search": {
5 |       "placeholder": "Search for an icon…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/en/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Download Video",
 5 |       "toast": {
 6 |         "success": "Your review item video has started downloading."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/en/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Config Editor - Frigate",
 3 |   "configEditor": "Config Editor",
 4 |   "copyConfig": "Copy Config",
 5 |   "saveAndRestart": "Save & Restart",
 6 |   "saveOnly": "Save Only",
 7 |   "confirm": "Exit without saving?",
 8 |   "toast": {
 9 |     "success": {
10 |       "copyToClipboard": "Config copied to clipboard."
11 |     },
12 |     "error": {
13 |       "savingError": "Error saving config"
14 |     }
15 |   }
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/en/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Export - Frigate",
 3 |   "search": "Search",
 4 |   "noExports": "No exports found",
 5 |   "deleteExport": "Delete Export",
 6 |   "deleteExport.desc": "Are you sure you want to delete {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Rename Export",
 9 |     "desc": "Enter a new name for this export.",
10 |     "saveExport": "Save Export"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Failed to rename export: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/en/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Export",
 3 |   "calendar": "Calendar",
 4 |   "filter": "Filter",
 5 |   "filters": "Filters",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "No valid time range selected",
 9 |       "endTimeMustAfterStartTime": "End time must be after start time"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/es/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Selecciona un icono",
4 |     "search": {
5 |       "placeholder": "Buscar un icono…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/es/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Descargar vídeo",
 5 |       "toast": {
 6 |         "success": "El vídeo de tu elemento de revisión ha comenzado a descargarse."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/es/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Editor de Configuración",
 3 |   "copyConfig": "Copiar configuración",
 4 |   "saveAndRestart": "Guardar y reiniciar",
 5 |   "saveOnly": "Guardar solo",
 6 |   "toast": {
 7 |     "success": {
 8 |       "copyToClipboard": "Configuración copiada al portapapeles."
 9 |     },
10 |     "error": {
11 |       "savingError": "Error al guardar la configuración"
12 |     }
13 |   },
14 |   "documentTitle": "Editor de Configuración - Frigate",
15 |   "confirm": "¿Salir sin guardar?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/es/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Exportar",
 3 |   "calendar": "Calendario",
 4 |   "filter": "Filtro",
 5 |   "filters": "Filtros",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "No se ha seleccionado un rango de tiempo válido",
 9 |       "endTimeMustAfterStartTime": "La hora de finalización debe ser posterior a la hora de inicio"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/common.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/auth.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/camera.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/dialog.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/filter.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/icons.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/input.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/components/player.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "person": "شخص",
 3 |   "bicycle": "دوچرخه",
 4 |   "car": "ماشین",
 5 |   "airplane": "هواپیما",
 6 |   "bus": "اتوبوس",
 7 |   "train": "قطار",
 8 |   "boat": "قایق",
 9 |   "traffic_light": "چراغ راهنمایی",
10 |   "motorcycle": "موتور سیکلت",
11 |   "fire_hydrant": "شیر آتش‌نشانی",
12 |   "street_sign": "تابلو راهنمایی رانندگی",
13 |   "stop_sign": "تابلو ایست",
14 |   "parking_meter": "پارکومتر",
15 |   "bench": "نیمکت",
16 |   "bird": "پرنده",
17 |   "cat": "گربه",
18 |   "dog": "سگ",
19 |   "horse": "اسب"
20 | }
21 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/configEditor.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/events.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/explore.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/exports.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/faceLibrary.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/live.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/recording.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/search.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/settings.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fa/views/system.json:
--------------------------------------------------------------------------------
1 | {}
2 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "Salasana",
 4 |     "user": "Käyttäjä",
 5 |     "login": "Kirjaudu",
 6 |     "errors": {
 7 |       "usernameRequired": "Käyttäjänimi vaaditaan",
 8 |       "passwordRequired": "Salasana vaaditaan",
 9 |       "rateLimit": "Käyttöraja ylitetty. Yritä myöhemmin uudelleen.",
10 |       "loginFailed": "Kirjautuminen epäonnistui",
11 |       "unknownError": "Tuntematon virhe. Tarkista logit.",
12 |       "webUnknownError": "Tuntematon virhe. Tarkista konsolilogi."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Valitse kuvake",
4 |     "search": {
5 |       "placeholder": "Etsi kuvaketta…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Lataa Video",
 5 |       "toast": {
 6 |         "success": "Tarkistettavan kohteen videon lataus on aloitettu."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Frigaten konfiguraatioeditori",
 3 |   "confirm": "Poistu tallentamatta?",
 4 |   "saveOnly": "Vain tallennus",
 5 |   "toast": {
 6 |     "error": {
 7 |       "savingError": "Virhe tallennettaessa konfiguraatiota"
 8 |     },
 9 |     "success": {
10 |       "copyToClipboard": "Konfiguraatio kopioitu leikepöydälle."
11 |     }
12 |   },
13 |   "configEditor": "Konfiguraatioeditori",
14 |   "copyConfig": "Kopioi konfiguraatio",
15 |   "saveAndRestart": "Tallenna & uudelleenkäynnistä"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Etsi",
 3 |   "documentTitle": "Vie",
 4 |   "deleteExport.desc": "Oletko varma että haluat poistaa kohteen {{exportName}}?",
 5 |   "toast": {
 6 |     "error": {
 7 |       "renameExportFailed": "Viedyn kohteen uudelleennimeäminen epäonnistui: {{errorMessage}}"
 8 |     }
 9 |   },
10 |   "noExports": "Ei vietyjä kohteita",
11 |   "deleteExport": "Poista viety kohde",
12 |   "editExport": {
13 |     "title": "Nimeä uudelleen",
14 |     "desc": "Anna uusi nimi viedylle kohteelle.",
15 |     "saveExport": "Tallenna vienti"
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/fi/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "calendar": "Kalenteri",
 3 |   "filter": "Suodatin",
 4 |   "filters": "Suodattimet",
 5 |   "toast": {
 6 |     "error": {
 7 |       "noValidTimeSelected": "Sopimaton aikaväli valittu",
 8 |       "endTimeMustAfterStartTime": "Loppuaika täytyy olla aloituksen jälkeen"
 9 |     }
10 |   },
11 |   "export": "Vie"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "Mot de passe",
 4 |     "login": "Identifiant",
 5 |     "user": "Nom d'utilisateur",
 6 |     "errors": {
 7 |       "unknownError": "Erreur inconnue. Vérifiez les journaux.",
 8 |       "webUnknownError": "Erreur inconnue. Vérifiez les journaux de la console.",
 9 |       "passwordRequired": "Un mot de passe est requis",
10 |       "loginFailed": "Échec de l'authentification",
11 |       "usernameRequired": "Un nom d'utilisateur est requis",
12 |       "rateLimit": "Nombre d'essais dépassé. Réessayez plus tard."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "Rechercher une icône…"
5 |     },
6 |     "selectIcon": "Sélectionnez une icône"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Télécharger la vidéo",
 5 |       "toast": {
 6 |         "success": "Le téléchargement de la vidéo de votre élément de la revue d'événements a commencé."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Éditeur de configuration",
 3 |   "documentTitle": "Éditeur de configuration - Frigate",
 4 |   "copyConfig": "Copier la configuration",
 5 |   "saveOnly": "Enregistrer seulement",
 6 |   "saveAndRestart": "Enregistrer et redémarrer",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Configuration copiée dans le presse-papiers"
10 |     },
11 |     "error": {
12 |       "savingError": "Erreur lors de l'enregistrement de la configuration"
13 |     }
14 |   },
15 |   "confirm": "Quitter sans enregistrer ?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Exporter - Frigate",
 3 |   "search": "Rechercher",
 4 |   "noExports": "Aucun export trouvé",
 5 |   "deleteExport": "Supprimer l'export",
 6 |   "deleteExport.desc": "Êtes-vous sûr de vouloir supprimer {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Renommer l'export",
 9 |     "desc": "Saisissez un nouveau nom pour cet export.",
10 |     "saveExport": "Enregistrer l'export"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Échec du renommage de l'export : {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/fr/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Exporter",
 3 |   "calendar": "Calendrier",
 4 |   "filter": "Filtre",
 5 |   "filters": "Filtres",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Pas de période valide sélectionnée",
 9 |       "endTimeMustAfterStartTime": "L'heure de fin doit être après l'heure de début"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/he/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "שם משתמש",
 4 |     "password": "סיסמה",
 5 |     "login": "התחברות",
 6 |     "errors": {
 7 |       "usernameRequired": "נדרש שם משתמש",
 8 |       "passwordRequired": "דרושה סיסמה",
 9 |       "unknownError": "שגיאה לא ידועה. בדוק את הלוגים.",
10 |       "webUnknownError": "שגיאה לא ידועה, בדוק את הלוגים.",
11 |       "rateLimit": "חרגת מהמגבלת בקשות. נסה שוב מאוחר יותר.",
12 |       "loginFailed": "ההתחברות נכשלה"
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/he/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "בחר סמל",
4 |     "search": {
5 |       "placeholder": "חפש אייקון…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/he/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "הורד וידאו",
 5 |       "toast": {
 6 |         "success": "הורדת סרטון הסקירה שלך החלה."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/he/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "עורך הגדרות - פריגטה",
 3 |   "configEditor": "עורך תצורה",
 4 |   "copyConfig": "העתקת הגדרות",
 5 |   "saveAndRestart": "שמירה והפעלה מחדש",
 6 |   "saveOnly": "שמירה בלבד",
 7 |   "confirm": "לצאת ללא שמירה?",
 8 |   "toast": {
 9 |     "success": {
10 |       "copyToClipboard": "התצורה הועתקה ללוח."
11 |     },
12 |     "error": {
13 |       "savingError": "שגיאה בשמירת ההגדרות"
14 |     }
15 |   }
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/he/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "חיפוש",
 3 |   "toast": {
 4 |     "error": {
 5 |       "renameExportFailed": "שינוי שם הייצוא נכשל: {{errorMessage}}"
 6 |     }
 7 |   },
 8 |   "documentTitle": "ייצוא - Frigate",
 9 |   "noExports": "לא נמצא יצוא",
10 |   "deleteExport": "מחיקת ייצוא",
11 |   "deleteExport.desc": "האם אתה בטוח שברצונך למחוק את {{exportName}}?",
12 |   "editExport": {
13 |     "title": "שנה שם ייצוא",
14 |     "desc": "הכנס שם חדש עבור הייצוא הזה.",
15 |     "saveExport": "שמירת ייצוא"
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/he/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "לסנן",
 3 |   "export": "ייצוא",
 4 |   "calendar": "לוח שנה",
 5 |   "filters": "מסננים",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "לא נבחר טווח זמן תקף",
 9 |       "endTimeMustAfterStartTime": "שעת הסיום חייבת להיות אחרי שעת ההתחלה"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/common.json:
--------------------------------------------------------------------------------
1 | {
2 |   "time": {
3 |     "untilForTime": "{{time}} तक",
4 |     "untilForRestart": "जब तक फ्रिगेट पुनः रीस्टार्ट नहीं हो जाता।",
5 |     "untilRestart": "रीस्टार्ट होने में"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "पासवर्ड",
 4 |     "login": "प्रवेश करें",
 5 |     "errors": {
 6 |       "passwordRequired": "पासवर्ड आवश्यक है",
 7 |       "rateLimit": "दर सीमा पार हो गई है। बाद में पुनः प्रयास करें।",
 8 |       "unknownError": "अज्ञात त्रुटि। प्रविष्टियाँ जांचें।",
 9 |       "usernameRequired": "प्रयोक्ता नाम आवश्यक है",
10 |       "webUnknownError": "अज्ञात त्रुटि। कंसोल प्रविष्टियाँ जांचें।",
11 |       "loginFailed": "लॉगिन असफल हुआ"
12 |     },
13 |     "user": "प्रयोक्ता नाम"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/camera.json:
--------------------------------------------------------------------------------
1 | {
2 |   "group": {
3 |     "label": "कैमरा समूह",
4 |     "add": "कैमरा समूह जोड़ें",
5 |     "edit": "कैमरा समूह संपादित करें"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/dialog.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "restart": {
 3 |     "title": "क्या आप निश्चित हैं कि आप फ्रिगेट को रीस्टार्ट करना चाहते हैं?",
 4 |     "button": "रीस्टार्ट",
 5 |     "restarting": {
 6 |       "title": "फ्रिगेट रीस्टार्ट हो रहा है"
 7 |     }
 8 |   }
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "फ़िल्टर",
 3 |   "labels": {
 4 |     "label": "लेबल",
 5 |     "all": {
 6 |       "title": "सभी लेबल"
 7 |     }
 8 |   }
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "चिह्न चुनें",
4 |     "search": {
5 |       "placeholder": "चिह्न खोजें..।"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "वीडियो डाउनलोड करें",
 5 |       "toast": {
 6 |         "success": "आपकी समीक्षा वीडियो डाउनलोड होना शुरू हो गई है।"
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/components/player.json:
--------------------------------------------------------------------------------
1 | {
2 |   "noRecordingsFoundForThisTime": "इस समय का कोई रिकॉर्डिंग नहीं मिला",
3 |   "noPreviewFound": "कोई प्रीव्यू नहीं मिला",
4 |   "noPreviewFoundFor": "{{cameraName}} के लिए कोई पूर्वावलोकन नहीं मिला"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "horse": "घोड़ा",
 3 |   "sheep": "भेड़",
 4 |   "bark": "भौंकना",
 5 |   "animal": "जानवर",
 6 |   "dog": "कुत्ता",
 7 |   "cat": "बिल्ली",
 8 |   "goat": "बकरी",
 9 |   "boat": "नाव",
10 |   "bus": "बस",
11 |   "bird": "पक्षी",
12 |   "mouse": "चूहा",
13 |   "vehicle": "वाहन",
14 |   "car": "गाड़ी",
15 |   "person": "व्यक्ति",
16 |   "bicycle": "साइकिल"
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "saveOnly": "केवल सहेजें",
 3 |   "saveAndRestart": "सहेजें और पुनः प्रारंभ करें",
 4 |   "configEditor": "विन्यास संपादक",
 5 |   "copyConfig": "विन्यास कॉपी करें",
 6 |   "toast": {
 7 |     "error": {
 8 |       "savingError": "विन्यास सहेजने में त्रुटि हुई"
 9 |     },
10 |     "success": {
11 |       "copyToClipboard": "विन्यास क्लिपबोर्ड पर कॉपी कर लिया गया है।"
12 |     }
13 |   },
14 |   "documentTitle": "विन्यास संपादक - Frigate"
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/events.json:
--------------------------------------------------------------------------------
1 | {
2 |   "alerts": "अलर्टस",
3 |   "detections": "खोजें"
4 | }
5 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/explore.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "अन्वेषण करें - फ्रिगेट",
3 |   "generativeAI": "जनरेटिव ए आई"
4 | }
5 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/exports.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "निर्यात - फ्रिगेट",
3 |   "search": "खोजें"
4 | }
5 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/faceLibrary.json:
--------------------------------------------------------------------------------
1 | {
2 |   "description": {
3 |     "addFace": "फेस लाइब्रेरी में नया संग्रह जोड़ने की प्रक्रिया को आगे बढ़ाएं।",
4 |     "placeholder": "इस संग्रह का नाम बताएं"
5 |   }
6 | }
7 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/live.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "लाइव - फ्रिगेट",
3 |   "documentTitle.withCamera": "{{camera}} - लाइव - फ्रिगेट"
4 | }
5 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "calendar": "पंचांग",
 3 |   "toast": {
 4 |     "error": {
 5 |       "noValidTimeSelected": "कोई मान्य समय सीमा चयनित नहीं है",
 6 |       "endTimeMustAfterStartTime": "समाप्ति समय प्रारंभ समय के बाद होना चाहिए"
 7 |     }
 8 |   },
 9 |   "export": "निर्यात",
10 |   "filter": "फ़िल्टर"
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/search.json:
--------------------------------------------------------------------------------
1 | {
2 |   "search": "खोजें",
3 |   "savedSearches": "सहेजी गई खोजें"
4 | }
5 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/settings.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "default": "सेटिंग्स - फ्रिगेट",
4 |     "authentication": "प्रमाणीकरण सेटिंग्स - फ्रिगेट"
5 |   }
6 | }
7 | 


--------------------------------------------------------------------------------
/web/public/locales/hi/views/system.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "cameras": "कैमरा आँकड़े - फ्रिगेट",
4 |     "storage": "भंडारण आँकड़े - फ्रिगेट"
5 |   }
6 | }
7 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Felhasználói név",
 4 |     "password": "Jelszó",
 5 |     "login": "Bejelentkezés",
 6 |     "errors": {
 7 |       "usernameRequired": "Felhasználónév szükséges",
 8 |       "passwordRequired": "Jelszó szükséges",
 9 |       "loginFailed": "Sikertelen bejelentkezés",
10 |       "unknownError": "Ismeretlen hiba. Ellenőrizze a naplókat.",
11 |       "webUnknownError": "Ismeretlen hiba. Ellenőrizze a konzol naplókat."
12 |     }
13 |   }
14 | }
15 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Szűrő",
 3 |   "labels": {
 4 |     "label": "Cimkék",
 5 |     "all": {
 6 |       "title": "Minden cimke",
 7 |       "short": "Cimkék"
 8 |     },
 9 |     "count_other": "{{count}} cimke",
10 |     "count_one": "{{count}} Cimke"
11 |   },
12 |   "zones": {
13 |     "label": "Zónák",
14 |     "all": {
15 |       "title": "Minden zóna",
16 |       "short": "Zónák"
17 |     }
18 |   }
19 | }
20 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Válassz ikont",
4 |     "search": {
5 |       "placeholder": "Ikon keresése…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/components/input.json:
--------------------------------------------------------------------------------
1 | {
2 |   "button": {
3 |     "downloadVideo": {
4 |       "label": "Videó Letöltése"
5 |     }
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/components/player.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "noRecordingsFoundForThisTime": "Ebben az időpontban nem található felvétel",
 3 |   "noPreviewFound": "Nincs elérhető előkép",
 4 |   "submitFrigatePlus": {
 5 |     "title": "Elküldi ezt a képet a Frigate+-nak?",
 6 |     "submit": "Küldés"
 7 |   },
 8 |   "noPreviewFoundFor": "Nem található előnézet {{cameraName}}-hoz/-hez/-höz",
 9 |   "livePlayerRequiredIOSVersion": "iOS 17.1 vagy újabb szükséges ehhez az élő adás típushoz.",
10 |   "streamOffline": {
11 |     "title": "Adás Nem Elérhető"
12 |   },
13 |   "cameraDisabled": "Kamera kikapcsolva"
14 | }
15 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "person": "Személy",
 3 |   "bicycle": "Bicikli",
 4 |   "car": "Autó",
 5 |   "motorcycle": "Motor",
 6 |   "airplane": "Repülőgép",
 7 |   "bus": "Busz",
 8 |   "train": "Vonat",
 9 |   "boat": "Hajó",
10 |   "dog": "Kutya",
11 |   "cat": "Macska",
12 |   "horse": "Ló",
13 |   "sheep": "Juh",
14 |   "bird": "Madár",
15 |   "mouse": "Egér",
16 |   "keyboard": "Szintetizátor",
17 |   "animal": "Állat",
18 |   "bark": "Ugatás",
19 |   "goat": "Kecske",
20 |   "traffic_light": "Jelzőlámpa"
21 | }
22 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Konfiguráció Szerkesztő - Frigate",
 3 |   "configEditor": "Konfiguráció szerkesztő",
 4 |   "copyConfig": "Konfiguráció másolása",
 5 |   "saveAndRestart": "Mentés és Újraindítás",
 6 |   "saveOnly": "Csak mentés",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Konfiguráció átmásolva a vágólapra."
10 |     },
11 |     "error": {
12 |       "savingError": "Hiba a konfiguráció mentésekor"
13 |     }
14 |   },
15 |   "confirm": "Kilép mentés nélkül?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/views/events.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "alerts": "Riasztások",
 3 |   "empty": {
 4 |     "detection": "Nincs megnézendő észlelés",
 5 |     "alert": "Nincs megnézendő riasztás",
 6 |     "motion": "Nem található mozgás"
 7 |   },
 8 |   "detections": "Észlelések",
 9 |   "motion": {
10 |     "label": "Mozgás",
11 |     "only": "Csak mozgások"
12 |   },
13 |   "allCameras": "Összes kamera",
14 |   "timeline": "Idővonal"
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Exportálás - Frigate",
 3 |   "search": "Keresés",
 4 |   "noExports": "Export nem található",
 5 |   "deleteExport.desc": "Biztos, hogy törölni akarja {{exportName}}-t?",
 6 |   "deleteExport": "Export törlése",
 7 |   "editExport": {
 8 |     "title": "Exportálás átnevezése"
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Szűrő",
 3 |   "calendar": "Naptár",
 4 |   "export": "Exportálás",
 5 |   "filters": "Szűrők",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Nem megfelelő idősáv kiválasztva",
 9 |       "endTimeMustAfterStartTime": "A végpontnak később kell lennie, mint a kezdőpontnak"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/hu/views/search.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Keresés",
 3 |   "savedSearches": "Mentett keresések",
 4 |   "searchFor": "{{inputValue}} keresése",
 5 |   "button": {
 6 |     "clear": "Keresés törlése",
 7 |     "filterInformation": "Szűrő információ",
 8 |     "save": "Keresés mentése",
 9 |     "delete": "Mentett keresések törlése"
10 |   },
11 |   "trackedObjectId": "Követett Tárgy Azonosító"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/id/common.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "time": {
 3 |     "untilForRestart": "Hingga Frigate memulai ulang.",
 4 |     "untilRestart": "Sampai memulai ulang",
 5 |     "ago": "{{timeAgo}} Lalu",
 6 |     "justNow": "Sekarang",
 7 |     "today": "Hari ini",
 8 |     "yesterday": "Kemarin",
 9 |     "untilForTime": "Hingga {{time}}"
10 |   }
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Nama pengguna",
 4 |     "password": "Kata sandi",
 5 |     "login": "Masuk",
 6 |     "errors": {
 7 |       "usernameRequired": "Wajib Menggunakan Username",
 8 |       "passwordRequired": "Wajib memakai Password",
 9 |       "rateLimit": "Melewati batas permintaan. Coba lagi nanti.",
10 |       "loginFailed": "Gagal Masuk"
11 |     }
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/camera.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "group": {
 3 |     "label": "Grup Kamera",
 4 |     "add": "Tambah Grup Kamera",
 5 |     "edit": "Edit Grup kamera",
 6 |     "delete": {
 7 |       "label": "Hapus Grup Kamera",
 8 |       "confirm": {
 9 |         "title": "Yakin Hapus",
10 |         "desc": "Apakah Anda yakin ingin menghapus grup kamera <em>{{name}}</em>?"
11 |       }
12 |     },
13 |     "name": {
14 |       "label": "Nama"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Saring",
 3 |   "labels": {
 4 |     "label": "Label",
 5 |     "all": {
 6 |       "title": "Semua Label",
 7 |       "short": "Label"
 8 |     },
 9 |     "count_one": "{{count}} Label",
10 |     "count_other": "{{count}} Label"
11 |   },
12 |   "zones": {
13 |     "label": "Zona"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Pilih ikon",
4 |     "search": {
5 |       "placeholder": "Cari Icon…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Unduh Video",
 5 |       "toast": {
 6 |         "success": "Video yang yang anda lihat sudah mulai di unduh."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/id/components/player.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "noPreviewFound": "Pratinjau Tidak Ditemukan",
 3 |   "noPreviewFoundFor": "Tidak ada Pratinjau untuk {{cameraName}}",
 4 |   "submitFrigatePlus": {
 5 |     "submit": "Kirim",
 6 |     "title": "Kirim frame ini ke Frigate+?"
 7 |   },
 8 |   "noRecordingsFoundForThisTime": "Tidak ada Rekaman pada waktu ini",
 9 |   "livePlayerRequiredIOSVersion": "iOS 17.1 atau yang lebih tinggi diperlukan untuk tipe siaran langsung ini.",
10 |   "streamOffline": {
11 |     "title": "Stream Tidak Aktif"
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/id/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "person": "Orang",
 3 |   "bicycle": "Sepeda",
 4 |   "car": "Mobil",
 5 |   "motorcycle": "Motor",
 6 |   "airplane": "Pesawat",
 7 |   "bus": "Bis",
 8 |   "train": "Kereta"
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Editor Konfigurasi - Frigate",
 3 |   "configEditor": "Editor Konfigurasi",
 4 |   "copyConfig": "Salin Konfigurasi",
 5 |   "saveAndRestart": "Simpan dan Mulai ulang",
 6 |   "saveOnly": "Hanya simpan",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Konfigurasi disalin ke papan klip."
10 |     },
11 |     "error": {
12 |       "savingError": "Gagal menyimpan konfigurasi"
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/events.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "alerts": "Peringatan",
 3 |   "detections": "Deteksi",
 4 |   "motion": {
 5 |     "label": "Gerakan",
 6 |     "only": "Hanya Gerakan"
 7 |   },
 8 |   "allCameras": "Semua Kamera",
 9 |   "empty": {
10 |     "detection": "Tidak ada deteksi untuk ditinjau",
11 |     "alert": "Tidak ada peringatan untuk ditinjau"
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/explore.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Jelajahi - Frigate",
 3 |   "generativeAI": "AI Generatif",
 4 |   "exploreIsUnavailable": {
 5 |     "title": "Penelusuran tidak tersedia",
 6 |     "embeddingsReindexing": {
 7 |       "context": "Jelajahi dapat digunakan setelah embedding objek yang dilacak selesai di-reindex.",
 8 |       "startingUp": "Sedang memulai…",
 9 |       "estimatedTime": "Perkiraan waktu tersisa:"
10 |     }
11 |   },
12 |   "details": {
13 |     "timestamp": "Stempel waktu"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Expor - Frigate",
 3 |   "search": "Cari",
 4 |   "noExports": "Tidak bisa mengekspor",
 5 |   "deleteExport": "Hapus Ekspor",
 6 |   "deleteExport.desc": "Apakah Anda yakin ingin menghapus {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Ganti Nama saat Ekspor"
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/live.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle.withCamera": "{{camera}} - Langsung - Frigate",
 3 |   "documentTitle": "Langsung - Frigate",
 4 |   "lowBandwidthMode": "Mode Bandwith-Rendah",
 5 |   "twoWayTalk": {
 6 |     "enable": "Nyalakan Komunikasi dua arah",
 7 |     "disable": "Nonaktifkan Komunikasi Dua Arah"
 8 |   },
 9 |   "cameraAudio": {
10 |     "enable": "Nyalakan Audio Kamera"
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Saring",
 3 |   "export": "Expor",
 4 |   "calendar": "Kalender",
 5 |   "filters": "Penyaring",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Rentan Waktu yang dipilih tidak valid",
 9 |       "endTimeMustAfterStartTime": "Waktu akhir harus setelah waktu mulai"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/search.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Cari",
 3 |   "savedSearches": "Simpan Pencarian",
 4 |   "searchFor": "Cari untuk {{inputValue}}",
 5 |   "button": {
 6 |     "clear": "Bersihkan pencarian",
 7 |     "save": "Simpan Pencarian",
 8 |     "delete": "Hapus pencarian yang disimpan"
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/settings.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": {
 3 |     "default": "Pengaturan - Frigate",
 4 |     "camera": "Pengaturan Kamera - Frigate",
 5 |     "classification": "Pengaturan Klasifikasi - Frigate",
 6 |     "authentication": "Pengaturan Autentikasi - Frigate",
 7 |     "masksAndZones": "Editor Mask dan Zona - Frigate",
 8 |     "motionTuner": "Penyetel Gerakan - Frigate"
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/id/views/system.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": {
 3 |     "cameras": "Status kamera - Frigate",
 4 |     "storage": "Status Penyimpanan - Frigate",
 5 |     "general": "Status umum - Frigate",
 6 |     "enrichments": "Statistik Enrichment - Frigate",
 7 |     "logs": {
 8 |       "frigate": "Log Frigate - Frigate",
 9 |       "go2rtc": "Log Go2RTC - Frigate"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/it/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Nome utente",
 4 |     "password": "Password",
 5 |     "login": "Accedi",
 6 |     "errors": {
 7 |       "usernameRequired": "Il nome utente è obbligatorio",
 8 |       "passwordRequired": "La password è obbligatoria",
 9 |       "rateLimit": "Superato il limite di tentativi. Riprova più tardi.",
10 |       "unknownError": "Errore sconosciuto. Controlla i registri.",
11 |       "webUnknownError": "Errore sconosciuto. Controlla i registri della console.",
12 |       "loginFailed": "Accesso non riuscito"
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/it/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "Cerca un'icona…"
5 |     },
6 |     "selectIcon": "Seleziona un'icona"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/it/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "toast": {
 5 |         "success": "Il video dell'oggetto da te visto ha iniziato a scaricarsi."
 6 |       },
 7 |       "label": "Scarica video"
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/it/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Editor di configurazione",
 3 |   "documentTitle": "Editor di configurazione - Frigate",
 4 |   "copyConfig": "Copia configurazione",
 5 |   "saveAndRestart": "Salva e riavvia",
 6 |   "saveOnly": "Salva soltanto",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Configurazione copiata negli appunti."
10 |     },
11 |     "error": {
12 |       "savingError": "Errore durante il salvataggio della configurazione"
13 |     }
14 |   },
15 |   "confirm": "Vuoi uscire senza salvare?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/it/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Esporta - Frigate",
 3 |   "search": "Cerca",
 4 |   "noExports": "Nessuna esportazione trovata",
 5 |   "deleteExport": "Elimina esportazione",
 6 |   "deleteExport.desc": "Sei sicuro di voler eliminare {{exportName}}?",
 7 |   "editExport": {
 8 |     "desc": "Inserisci un nuovo nome per questa esportazione.",
 9 |     "title": "Rinomina esportazione",
10 |     "saveExport": "Salva esportazione"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Impossibile rinominare l'esportazione: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/it/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "calendar": "Calendario",
 3 |   "export": "Esporta",
 4 |   "filter": "Filtro",
 5 |   "filters": "Filtri",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Nessun intervallo di tempo valido selezionato",
 9 |       "endTimeMustAfterStartTime": "L'ora di fine deve essere successiva all'ora di inizio"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/audio.json:
--------------------------------------------------------------------------------
1 | {
2 |   "speech": "スピーチ",
3 |   "car": "自動車",
4 |   "bicycle": "自転車"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/common.json:
--------------------------------------------------------------------------------
1 | {
2 |   "time": {
3 |     "untilForRestart": "Frigateが再起動するまで.",
4 |     "untilRestart": "再起動まで",
5 |     "untilForTime": "{{time}} まで"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/auth.json:
--------------------------------------------------------------------------------
1 | {
2 |   "form": {
3 |     "user": "ユーザー名",
4 |     "password": "パスワード",
5 |     "login": "ログイン"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/camera.json:
--------------------------------------------------------------------------------
1 | {
2 |   "group": {
3 |     "label": "カメラグループ",
4 |     "add": "カメラグループを追加",
5 |     "edit": "カメラグループを編集"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/dialog.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "restart": {
 3 |     "title": "Frigateを再起動しますか?",
 4 |     "restarting": {
 5 |       "title": "Frigateは再起動中です"
 6 |     },
 7 |     "button": "再起動"
 8 |   }
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "labels": {
 3 |     "label": "ラベル",
 4 |     "all": {
 5 |       "title": "すべてのラベル"
 6 |     }
 7 |   },
 8 |   "filter": "フィルタ"
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "アイコンを検索…"
5 |     },
6 |     "selectIcon": "アイコンを選択"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "ビデオをダウンロード",
 5 |       "toast": {
 6 |         "success": "あなたのレビュー項目ビデオのダウンロードを開始しました."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/components/player.json:
--------------------------------------------------------------------------------
1 | {
2 |   "noPreviewFound": "プレビューが見つかりません",
3 |   "noRecordingsFoundForThisTime": "この時間帯に録画は見つかりませんでした",
4 |   "noPreviewFoundFor": "{{cameraName}} のプレビューが見つかりません"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/objects.json:
--------------------------------------------------------------------------------
1 | {
2 |   "bicycle": "自転車",
3 |   "car": "自動車",
4 |   "person": "人物"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/configEditor.json:
--------------------------------------------------------------------------------
1 | {
2 |   "copyConfig": "設定をコピー",
3 |   "configEditor": "Configエディタ",
4 |   "saveAndRestart": "保存後再起動",
5 |   "saveOnly": "保存",
6 |   "confirm": "保存せずに終了しますか?"
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/events.json:
--------------------------------------------------------------------------------
1 | {
2 |   "detections": "検出",
3 |   "motion": {
4 |     "label": "動作"
5 |   },
6 |   "alerts": "アラート"
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/explore.json:
--------------------------------------------------------------------------------
1 | {
2 |   "generativeAI": "生成AI"
3 | }
4 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/exports.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "エクスポート - Frigate",
3 |   "noExports": "エクスポートがありません",
4 |   "search": "検索"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/faceLibrary.json:
--------------------------------------------------------------------------------
1 | {
2 |   "description": {
3 |     "placeholder": "このコレクションの名前を入力してください"
4 |   }
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/live.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": "ライブ - Frigate",
3 |   "documentTitle.withCamera": "{{camera}} - ライブ - Frigate",
4 |   "lowBandwidthMode": "低帯域幅モード"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/recording.json:
--------------------------------------------------------------------------------
1 | {
2 |   "filter": "フィルタ",
3 |   "calendar": "カレンダー",
4 |   "export": "エクスポート"
5 | }
6 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/search.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "searchFor": "{{inputValue}} を検索",
 3 |   "button": {
 4 |     "save": "検索を保存",
 5 |     "delete": "保存した検索を削除",
 6 |     "filterInformation": "フィルタ情報",
 7 |     "clear": "検索をクリア"
 8 |   },
 9 |   "search": "検索",
10 |   "savedSearches": "保存した検索"
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/settings.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "authentication": "認証設定 - Frigate",
4 |     "camera": "カメラの設定 - Frigate",
5 |     "default": "設定 - Frigate"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/ja/views/system.json:
--------------------------------------------------------------------------------
1 | {
2 |   "documentTitle": {
3 |     "cameras": "カメラ統計 - Frigate",
4 |     "general": "一般統計 - Frigate",
5 |     "storage": "ストレージ統計 - Frigate"
6 |   }
7 | }
8 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Brukernavn",
 4 |     "password": "Passord",
 5 |     "login": "Logg inn",
 6 |     "errors": {
 7 |       "usernameRequired": "Brukernavn er påkrevd",
 8 |       "passwordRequired": "Passord er påkrevd",
 9 |       "rateLimit": "Grense for antall forsøk overskredet. Prøv igjen senere.",
10 |       "loginFailed": "Innlogging mislyktes",
11 |       "unknownError": "Ukjent feil. Sjekk loggene.",
12 |       "webUnknownError": "Ukjent feil. Sjekk konsoll-loggene."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Velg et ikon",
4 |     "search": {
5 |       "placeholder": "Søk etter et ikon…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Last ned video",
 5 |       "toast": {
 6 |         "success": "Videoen for inspeksjonselementet ditt har startet nedlasting."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Konfigurasjonsredigering - Frigate",
 3 |   "toast": {
 4 |     "error": {
 5 |       "savingError": "Feil ved lagring av konfigurasjon"
 6 |     },
 7 |     "success": {
 8 |       "copyToClipboard": "Konfigurasjonen ble kopiert til utklippstavlen."
 9 |     }
10 |   },
11 |   "configEditor": "Konfigurasjonsredigering",
12 |   "copyConfig": "Kopier konfigurasjonen",
13 |   "saveAndRestart": "Lagre og omstart",
14 |   "saveOnly": "Kun lagre",
15 |   "confirm": "Avslutt uten å lagre?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Eksport - Frigate",
 3 |   "search": "Søk",
 4 |   "noExports": "Ingen eksporter funnet",
 5 |   "deleteExport": "Slett eksport",
 6 |   "deleteExport.desc": "Er du sikker på at du vil slette {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Gi nytt navn til eksport",
 9 |     "desc": "Skriv inn et nytt navn for denne eksporten.",
10 |     "saveExport": "Lagre eksport"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Kunne ikke gi nytt navn til eksport: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/nb-NO/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filter",
 3 |   "export": "Eksporter",
 4 |   "calendar": "Kalender",
 5 |   "filters": "Filtre",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Ingen gyldig tidsperiode valgt",
 9 |       "endTimeMustAfterStartTime": "Sluttid må være etter starttid"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "Wachtwoord",
 4 |     "login": "Inloggen",
 5 |     "errors": {
 6 |       "rateLimit": "Limiet overschreden. Probeer het later opnieuw.",
 7 |       "loginFailed": "Inloggen mislukt",
 8 |       "usernameRequired": "Gebruikersnaam is vereist",
 9 |       "passwordRequired": "Wachtwoord is vereist",
10 |       "unknownError": "Onbekende fout. Bekijk de logs.",
11 |       "webUnknownError": "Onbekende fout. Controleer consolelogboeken."
12 |     },
13 |     "user": "Gebruikersnaam"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Selecteer een pictogram",
4 |     "search": {
5 |       "placeholder": "Zoek naar een pictogram…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Video downloaden",
 5 |       "toast": {
 6 |         "success": "Het downloaden van uw beoordelingsvideo is gestart."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Configuratie-bewerken - Frigate",
 3 |   "copyConfig": "Configuratie kopiëren",
 4 |   "saveAndRestart": "Opslaan en opnieuw opstarten",
 5 |   "toast": {
 6 |     "error": {
 7 |       "savingError": "Fout bij het opslaan van de configuratie"
 8 |     },
 9 |     "success": {
10 |       "copyToClipboard": "Configuratie gekopieerd naar klembord."
11 |     }
12 |   },
13 |   "configEditor": "Configuratie Bewerken",
14 |   "saveOnly": "Alleen opslaan",
15 |   "confirm": "Afsluiten zonder op te slaan?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Exporteren - Frigate",
 3 |   "search": "Zoek",
 4 |   "toast": {
 5 |     "error": {
 6 |       "renameExportFailed": "Het is niet gelukt om de export te hernoemen: {{errorMessage}}"
 7 |     }
 8 |   },
 9 |   "editExport": {
10 |     "title": "Hernoemen Export",
11 |     "saveExport": "Export opslaan",
12 |     "desc": "Voer een nieuwe naam in voor deze export."
13 |   },
14 |   "noExports": "Geen export gevonden",
15 |   "deleteExport": "Verwijder Export",
16 |   "deleteExport.desc": "Weet je zeker dat je dit wilt wissen: {{exportName}}?"
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/nl/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Exporteren",
 3 |   "toast": {
 4 |     "error": {
 5 |       "endTimeMustAfterStartTime": "De eindtijd moet na de starttijd zijn",
 6 |       "noValidTimeSelected": "Er is geen geldig tijdsbereik geselecteerd"
 7 |     }
 8 |   },
 9 |   "filter": "Filter",
10 |   "calendar": "Kalender",
11 |   "filters": "Filters"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Nazwa użytkownika",
 4 |     "password": "Hasło",
 5 |     "login": "Login",
 6 |     "errors": {
 7 |       "usernameRequired": "Nazwa użytkownika jest wymagana",
 8 |       "passwordRequired": "Hasło jest wymagane",
 9 |       "loginFailed": "Logowanie nieudane",
10 |       "unknownError": "Nieznany błąd. Sprawdź logi.",
11 |       "webUnknownError": "Nieznany błąd. Sprawdź konsolę.",
12 |       "rateLimit": "Przekroczono limit częstotliwości. Spróbuj ponownie później."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Wybierz ikonę",
4 |     "search": {
5 |       "placeholder": "Wyszukaj ikonę…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Pobierz Wideo",
 5 |       "toast": {
 6 |         "success": "Rozpoczęto pobieranie nagrania do przeglądu."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Edytor konfiguracji - Frigate",
 3 |   "configEditor": "Edytor konfiguracji",
 4 |   "copyConfig": "Skopiuj konfigurację",
 5 |   "toast": {
 6 |     "success": {
 7 |       "copyToClipboard": "Konfiguracja skopiowana do schowka."
 8 |     },
 9 |     "error": {
10 |       "savingError": "Błąd podczas zapisywanie konfiguracji"
11 |     }
12 |   },
13 |   "saveOnly": "Tylko zapisz",
14 |   "saveAndRestart": "Zapisz i uruchom ponownie",
15 |   "confirm": "Zamknąć bez zapisu?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Szukaj",
 3 |   "documentTitle": "Eksportuj - Frigate",
 4 |   "noExports": "Nie znaleziono eksportów",
 5 |   "deleteExport": "Usuń eksport",
 6 |   "deleteExport.desc": "Czy na pewno chcesz usunąć {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Zmień nazwę eksportu",
 9 |     "desc": "Wprowadź nową nazwę dla tego eksportu.",
10 |     "saveExport": "Zapisz eksport"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Nie udało się zmienić nazwy eksportu: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/pl/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filtr",
 3 |   "export": "Eksportuj",
 4 |   "calendar": "Kalendarz",
 5 |   "filters": "Filtry",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Nie wybrano poprawnego zakresu czasu",
 9 |       "endTimeMustAfterStartTime": "Czas końca musi być po czasie początku"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Nome do utilizador",
 4 |     "login": "Login",
 5 |     "errors": {
 6 |       "usernameRequired": "O nome do utilizador é obrigatório",
 7 |       "passwordRequired": "Senha é necessária",
 8 |       "rateLimit": "Limite de taxa excedido. Tente novamente mais tarde.",
 9 |       "loginFailed": "Falha no login",
10 |       "unknownError": "Erro desconhecido. Verifique os logs.",
11 |       "webUnknownError": "Erro desconhecido. Verifique os logs da consola."
12 |     },
13 |     "password": "Senha"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Selecione um ícone",
4 |     "search": {
5 |       "placeholder": "Pesquisar por um ícone…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Descarregar vídeo",
 5 |       "toast": {
 6 |         "success": "O vídeo do seu item de análise começou a ser descarregado."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Editor de configuração",
 3 |   "copyConfig": "Copiar configuração",
 4 |   "saveAndRestart": "Salvar e reiniciar",
 5 |   "saveOnly": "Salvar Apenas",
 6 |   "toast": {
 7 |     "success": {
 8 |       "copyToClipboard": "Configuração copiada para a área de transferência."
 9 |     },
10 |     "error": {
11 |       "savingError": "Erro ao salvar configuração"
12 |     }
13 |   },
14 |   "documentTitle": "Editor de configuração - Frigate",
15 |   "confirm": "Sair sem salvar?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Exportar - Frigate",
 3 |   "search": "Pesquisar",
 4 |   "noExports": "Nenhuma exportação encontrada",
 5 |   "deleteExport": "Excluir exportação",
 6 |   "editExport": {
 7 |     "title": "Renomear exportação",
 8 |     "desc": "Digite um novo nome para esta exportação.",
 9 |     "saveExport": "Salvar exportação"
10 |   },
11 |   "toast": {
12 |     "error": {
13 |       "renameExportFailed": "Falha ao renomear exportação: {{errorMessage}}"
14 |     }
15 |   },
16 |   "deleteExport.desc": "Tem certeza de que deseja excluir {{exportName}}?"
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/pt/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Exportar",
 3 |   "calendar": "Calendário",
 4 |   "filter": "Filtro",
 5 |   "filters": "Filtros",
 6 |   "toast": {
 7 |     "error": {
 8 |       "endTimeMustAfterStartTime": "O horário de término deve ser posterior ao horário de início",
 9 |       "noValidTimeSelected": "Nenhum intervalo de tempo válido selecionado"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Nume utilizator",
 4 |     "password": "Parola",
 5 |     "login": "Logare",
 6 |     "errors": {
 7 |       "passwordRequired": "Parola este necesara",
 8 |       "rateLimit": "Limita a fost depasita. Reincearca mai tarziu.",
 9 |       "loginFailed": "Logare esuata",
10 |       "webUnknownError": "Eroare necunoscuta. Verifica logurile din consola.",
11 |       "usernameRequired": "Utilizatorul este necesar",
12 |       "unknownError": "Eroare necunoscuta. Verifica logurile."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Selecteaza o pictograma",
4 |     "search": {
5 |       "placeholder": "Cauta o pictograma…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Descarca Video",
 5 |       "toast": {
 6 |         "success": "A inceput descarcarea clipului ce contine articolul revizuit."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Editor Setari - Frigate",
 3 |   "configEditor": "Editor Setari",
 4 |   "copyConfig": "Copiaza Setarile",
 5 |   "saveAndRestart": "Salveaza & Reporneste",
 6 |   "saveOnly": "Doar Salveaza",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Setari copiate in clipboard."
10 |     },
11 |     "error": {
12 |       "savingError": "Eroare la salvarea setarilor"
13 |     }
14 |   },
15 |   "confirm": "Ieși fără să salvezi?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Cauta",
 3 |   "documentTitle": "Export - Frigate",
 4 |   "noExports": "Nu au fost gasite exporturi",
 5 |   "deleteExport": "Sterge Export",
 6 |   "deleteExport.desc": "Esti sigur ca vrei sa stergi {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Redenumeste Exportul",
 9 |     "saveExport": "Salveaza Export",
10 |     "desc": "Introdu un nume nou pentru acest Export."
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Eroare redenumire export: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/ro/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filtru",
 3 |   "export": "Exporta",
 4 |   "calendar": "Calendar",
 5 |   "filters": "Filtre",
 6 |   "toast": {
 7 |     "error": {
 8 |       "endTimeMustAfterStartTime": "Timpul de sfarsit trebuie sa fie dupa cel de start",
 9 |       "noValidTimeSelected": "Niciun interval de timp valid nu a fost selectat"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Имя пользователя",
 4 |     "password": "Пароль",
 5 |     "login": "Логин",
 6 |     "errors": {
 7 |       "usernameRequired": "Необходимо ввести имя пользователя",
 8 |       "passwordRequired": "Необходимо ввести пароль",
 9 |       "rateLimit": "Превышение числа попыток. Попробуй еще раз позже.",
10 |       "loginFailed": "Ошибка входа",
11 |       "unknownError": "Неизвестная ошибка. Проверьте логи.",
12 |       "webUnknownError": "Неизвестная ошибка. Проверьте логи консоли."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Выберите иконку",
4 |     "search": {
5 |       "placeholder": "Поиск иконки…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Скачать видео",
 5 |       "toast": {
 6 |         "success": "Загрузка видео начата."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "configEditor": "Редактор конфигурации",
 3 |   "copyConfig": "Скопировать конфигурацию",
 4 |   "saveAndRestart": "Сохранить и перезапустить",
 5 |   "saveOnly": "Только сохранить",
 6 |   "documentTitle": "Редактор конфигурации - Frigate",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Конфигурация скопирована в буфер обмена."
10 |     },
11 |     "error": {
12 |       "savingError": "Ошибка сохранения конфигурации"
13 |     }
14 |   },
15 |   "confirm": "Выйти без сохранения?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Экспорт - Frigate",
 3 |   "search": "Поиск",
 4 |   "noExports": "Не найдено файлов экспорта",
 5 |   "deleteExport": "Удалить экспорт",
 6 |   "deleteExport.desc": "Вы уверены, что хотите удалить {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Переименовать экспорт",
 9 |     "desc": "Введите новое имя для этого экспорта.",
10 |     "saveExport": "Сохранить экспорт"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Не удалось переименовать экспорт: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/ru/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Фильтр",
 3 |   "export": "Экспорт",
 4 |   "calendar": "Календарь",
 5 |   "filters": "Фильтры",
 6 |   "toast": {
 7 |     "error": {
 8 |       "endTimeMustAfterStartTime": "Конечное время должно быть позже начального",
 9 |       "noValidTimeSelected": "Выбран недопустимый временной диапазон"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Uporabniško ime",
 4 |     "password": "Geslo",
 5 |     "login": "Prijava",
 6 |     "errors": {
 7 |       "usernameRequired": "Uporabniško ime je potrebno",
 8 |       "passwordRequired": "Geslo je zahtevano",
 9 |       "rateLimit": "Preveč poskusov, poskusite znova kasneje.",
10 |       "loginFailed": "Prijava ni uspela",
11 |       "unknownError": "Neznana napaka. Preverite dnevnike.",
12 |       "webUnknownError": "Neznana napaka. Preverite dnevnike konzole."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Izberite ikono",
4 |     "search": {
5 |       "placeholder": "Išči ikono .…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Prenesi video",
 5 |       "toast": {
 6 |         "success": "Izbrani posnetek se je začel prenašati."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Urejevalnik konfiguracij - Frigate",
 3 |   "configEditor": "Urejevalnik konfiguracij",
 4 |   "copyConfig": "Kopiraj konfiguracijo",
 5 |   "saveAndRestart": "Shrani & ponovno zaženi",
 6 |   "saveOnly": "Shani",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "Konfiguracija kopirana v odložišče."
10 |     },
11 |     "error": {
12 |       "savingError": "Napaka pri shranjevanju konfiguracije"
13 |     }
14 |   },
15 |   "confirm": "Izhod brez shranjevanja?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Izvoz - Frigate",
 3 |   "search": "Iskanje",
 4 |   "noExports": "Izovzi niso najdeni",
 5 |   "deleteExport": "Izbriši izvoz",
 6 |   "deleteExport.desc": "Ali ste prepričani, da želite izbrisati {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Preimenuj izvoz",
 9 |     "desc": "Vpišite novo ime za ta izvoz.",
10 |     "saveExport": "Shrani izvoz"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Napaka pri preimenovanju izvoza: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/sl/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filter",
 3 |   "export": "Izvoz",
 4 |   "calendar": "Koledar",
 5 |   "filters": "Filtri",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Izbrano časovno obdobje ni veljavno",
 9 |       "endTimeMustAfterStartTime": "Končen čas mora biti po začetnem času"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "Lösenord",
 4 |     "user": "Användarnamn",
 5 |     "login": "Logga in",
 6 |     "errors": {
 7 |       "usernameRequired": "Användarnamn är obligatoriskt",
 8 |       "passwordRequired": "Lösenord är obligatoriskt",
 9 |       "loginFailed": "Inloggning misslyckades",
10 |       "unknownError": "Okänt fel. Kontrollera loggarna.",
11 |       "webUnknownError": "Okänt fel. Kontrollera konsol loggarna.",
12 |       "rateLimit": "Överskriden anropsgräns. Försök igen senare."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/components/dialog.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "restart": {
 3 |     "button": "Starta om",
 4 |     "restarting": {
 5 |       "title": "Frigate startar om",
 6 |       "content": "Sidan uppdateras om {{countdown}} seconds.",
 7 |       "button": "Tvinga uppdatering nu"
 8 |     },
 9 |     "title": "Är du säker på att du vill starta om Frigate?"
10 |   },
11 |   "explore": {
12 |     "plus": {
13 |       "submitToPlus": {
14 |         "label": "Skicka till Frigate+"
15 |       }
16 |     }
17 |   }
18 | }
19 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "Sök efter ikon…"
5 |     },
6 |     "selectIcon": "Välj en ikon"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Ladda ner Video",
 5 |       "toast": {
 6 |         "success": "Din video laddas ner."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "copyConfig": "Kopiera konfiguration",
 3 |   "saveAndRestart": "Spara & Starta om",
 4 |   "saveOnly": "Spara",
 5 |   "toast": {
 6 |     "success": {
 7 |       "copyToClipboard": "Konfiguration kopierad till urklipp."
 8 |     },
 9 |     "error": {
10 |       "savingError": "Problem att spara konfiguration"
11 |     }
12 |   },
13 |   "documentTitle": "Ändra konfiguration - Frigate",
14 |   "configEditor": "Ändra konfiguration",
15 |   "confirm": "Avsluta utan att spara?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/views/explore.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "generativeAI": "Generativ AI",
 3 |   "documentTitle": "Utforska - Frigate",
 4 |   "exploreIsUnavailable": {
 5 |     "embeddingsReindexing": {
 6 |       "startingUp": "Startar upp…",
 7 |       "estimatedTime": "Beräknad återstående tid:",
 8 |       "finishingShortly": "Snart klar"
 9 |     },
10 |     "title": "Utforska är inte tillgänglig"
11 |   },
12 |   "details": {
13 |     "timestamp": "tidsstämpel"
14 |   },
15 |   "exploreMore": "Utforska fler {{label}} objekt"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Sök",
 3 |   "documentTitle": "Export - Frigate",
 4 |   "noExports": "Inga exporter hittade",
 5 |   "deleteExport": "Radera export",
 6 |   "deleteExport.desc": "Är du säker att du vill radera {{exportName}}?",
 7 |   "editExport": {
 8 |     "desc": "Ange ett nytt namn för denna export.",
 9 |     "title": "Byt namn på Export",
10 |     "saveExport": "Spara Export"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Misslyckades att byta namn på export: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Export",
 3 |   "filter": "Filter",
 4 |   "calendar": "Kalender",
 5 |   "filters": "Filter",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Inget giltigt tidsintervall valt",
 9 |       "endTimeMustAfterStartTime": "Sluttid måste vara efter starttid"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/sv/views/system.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": {
 3 |     "storage": "Lagringsstatistik - Frigate",
 4 |     "general": "Allmän statistik - Frigate",
 5 |     "cameras": "Kamerastatistik - Frigate",
 6 |     "logs": {
 7 |       "frigate": "Frigate loggar - Frigate"
 8 |     }
 9 |   },
10 |   "logs": {
11 |     "copy": {
12 |       "label": "Kopiera till urklipp"
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/th/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "ชื่อผู้ใช้",
 4 |     "errors": {
 5 |       "webUnknownError": "ข้อผิดพลาดที่ไม่รู้จัก. ตรวจสอบที่ console logs.",
 6 |       "rateLimit": "เกินขีดจำกัด. โปรดลองอีกครั้งในภายหลัง.",
 7 |       "loginFailed": "ล็อกอินไม่สำเร็จ",
 8 |       "unknownError": "ข้อผิดพลาดที่ไม่รู้จัก. ตรวจสอบที่ logs.",
 9 |       "passwordRequired": "ต้องการรหัสผ่าน",
10 |       "usernameRequired": "ต้องการชื่อผู้ใช้"
11 |     },
12 |     "login": "ล็อกอิน",
13 |     "password": "รหัสผ่าน"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/th/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "เลือกไอคอน",
4 |     "search": {
5 |       "placeholder": "ค้นหาไอคอน"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/th/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "ดาวน์โหลดวิดีโอ",
 5 |       "toast": {
 6 |         "success": "วิดีโอรายการรีวิวของคุณเริ่มดาวน์โหลดแล้ว."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/th/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "copyConfig": "คัดลอกการกำหนดค่า",
 3 |   "saveOnly": "บันทึกเท่านั้น",
 4 |   "confirm": "ออกโดยที่ไม่บันทึก?",
 5 |   "toast": {
 6 |     "error": {
 7 |       "savingError": "เกิดข้อผิดพลาดในการบันทึกการกำหนดค่า"
 8 |     },
 9 |     "success": {
10 |       "copyToClipboard": "คัดลอกการกำหนดค่าไปยังคลิปบอร์ดแล้ว."
11 |     }
12 |   },
13 |   "saveAndRestart": "บันทึก และ รีสตาร์ท",
14 |   "documentTitle": "ตัวแก้ไขการกำหนดค่า - Frigate",
15 |   "configEditor": "ตัวแก้ไขการกำหนดค่า"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/th/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "ส่งออก - Frigate",
 3 |   "search": "ค้นหา",
 4 |   "noExports": "ไม่เจอการส่งออก",
 5 |   "deleteExport": "ลบส่งออก",
 6 |   "deleteExport.desc": "คุณแน่ใจหรอที่จะลบ {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "แก้ชื่อส่งออก",
 9 |     "desc": "ใส่ชื่อใหม่สำหรับการส่งออกนี้",
10 |     "saveExport": "บันทึกการส่งออก"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "ผิดพลาดในการแก้ไขชื่อการส่งออก: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/th/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "ส่งออก",
 3 |   "calendar": "ปฎิทิน",
 4 |   "filter": "กรอง",
 5 |   "filters": "ตัวกรอง",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "ไม่ได้เลือกช่วงเวลาที่ถูกต้อง",
 9 |       "endTimeMustAfterStartTime": "เวลาสิ้นสุดต้องอยู่หลังเวลาเริ่มต้น"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/tr/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "password": "Parola",
 4 |     "login": "Oturum Aç",
 5 |     "errors": {
 6 |       "webUnknownError": "Bilinmeyen hata. Konsol günlüklerini kontrol edin.",
 7 |       "usernameRequired": "Kullanıcı adı gereklidir",
 8 |       "loginFailed": "Oturum açma başarısız",
 9 |       "passwordRequired": "Parola gereklidir",
10 |       "rateLimit": "İstek sınırı aşıldı. Daha sonra tekrar deneyin.",
11 |       "unknownError": "Bilinmeyen hata. Günlükleri kontrol edin."
12 |     },
13 |     "user": "Kullanıcı Adı"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/tr/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "search": {
4 |       "placeholder": "Bir simge arayın…"
5 |     },
6 |     "selectIcon": "Bir simge belirleyin"
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/tr/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Videoyu İndir",
 5 |       "toast": {
 6 |         "success": "İncele öğesinin videosu indirilmeye başlandı."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/tr/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "saveOnly": "Sadece Kaydet",
 3 |   "toast": {
 4 |     "error": {
 5 |       "savingError": "Yapılandırma kaydedilirken hata"
 6 |     },
 7 |     "success": {
 8 |       "copyToClipboard": "Yapılandırma panoya kopyalandı."
 9 |     }
10 |   },
11 |   "copyConfig": "Yapılandırmayı Kopyala",
12 |   "configEditor": "Yapılandırma Düzenleyicisi",
13 |   "documentTitle": "Yapılandırma Düzenleyicisi - Frigate",
14 |   "saveAndRestart": "Kaydet & Yeniden Başlat",
15 |   "confirm": "Kaydetmeden çıkılsın mı?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/tr/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Filtre",
 3 |   "export": "Dışa Aktar",
 4 |   "filters": "Filtreler",
 5 |   "toast": {
 6 |     "error": {
 7 |       "noValidTimeSelected": "Geçerli bir zaman aralığı seçilmedi",
 8 |       "endTimeMustAfterStartTime": "Bitiş zamanı başlangıç zamanında sonra olmalıdır"
 9 |     }
10 |   },
11 |   "calendar": "Takvim"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "errors": {
 4 |       "webUnknownError": "Невідома помилка. Перевірте журнали консолi.",
 5 |       "usernameRequired": "Ви повинні ввести ім'я користувача",
 6 |       "passwordRequired": "Необхідно ввести пароль",
 7 |       "rateLimit": "Перевищення кількості спроб. Спробуйте пізніше.",
 8 |       "loginFailed": "Спроба входу зазнала невдачі",
 9 |       "unknownError": "Невідома помилка. Перевірте журнали."
10 |     },
11 |     "user": "Iм'я користувача",
12 |     "password": "Пароль",
13 |     "login": "Логiн"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Оберіть іконку",
4 |     "search": {
5 |       "placeholder": "Пошук значка…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Завантажити відео",
 5 |       "toast": {
 6 |         "success": "Розпочата завантаження відео."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "saveAndRestart": "Зберегти та перезавантажити",
 3 |   "toast": {
 4 |     "error": {
 5 |       "savingError": "Помилка збереження конфігурації"
 6 |     },
 7 |     "success": {
 8 |       "copyToClipboard": "Налаштування було скопійовано до буфера обміну даними."
 9 |     }
10 |   },
11 |   "documentTitle": "Редактор конфігурації - Frigate",
12 |   "copyConfig": "Скопіювати конфігурацію",
13 |   "saveOnly": "Тільки зберегти",
14 |   "configEditor": "Налаштування редактора",
15 |   "confirm": "Вийти без збереження?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "Експорта - Frigate",
 3 |   "search": "Пошук",
 4 |   "noExports": "Не знайдено експортованих файлів",
 5 |   "deleteExport": "Видалити експортування",
 6 |   "deleteExport.desc": "Ви справді бажаєте вилучити {{exportName}}?",
 7 |   "editExport": {
 8 |     "title": "Перейменувати експорт",
 9 |     "desc": "Введіть нову назву для цього експорту.",
10 |     "saveExport": "Зберегти експорт"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Не вдалося перейменувати експорт: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/uk/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "Експорт",
 3 |   "toast": {
 4 |     "error": {
 5 |       "noValidTimeSelected": "Вибраний діапазон часу не є коректним",
 6 |       "endTimeMustAfterStartTime": "Час закінчення повинен бути пізніше часу початку"
 7 |     }
 8 |   },
 9 |   "calendar": "Календар",
10 |   "filter": "Фiльтр",
11 |   "filters": "Фiльтри"
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "صارف نام",
 4 |     "password": "پاسورڈ",
 5 |     "login": "لاگ ان",
 6 |     "errors": {
 7 |       "usernameRequired": "صارف نام درکار ہے",
 8 |       "passwordRequired": "پاس ورڈ درکار ہے",
 9 |       "rateLimit": "شرح کی حد سے تجاوز کر گیا۔ بعد میں دوبارہ کوشش کریں۔",
10 |       "loginFailed": "لاگ ان ناکام ہو گیا",
11 |       "unknownError": "نامعلوم خرابی۔ لاگز چیک کریں۔"
12 |     }
13 |   }
14 | }
15 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/camera.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "group": {
 3 |     "delete": {
 4 |       "confirm": {
 5 |         "desc": "کیا آپ واقعی کیمرہ گروپ <em>{{name}}</em> کو حذف کرنا چاہتے ہیں؟",
 6 |         "title": "حذف کی تصدیق کریں"
 7 |       },
 8 |       "label": "کیمرہ گروپ کو حذف کریں"
 9 |     },
10 |     "label": "کیمرہ گروپس",
11 |     "add": "کیمرہ گروپ شامل کریں",
12 |     "edit": "کیمرہ گروپ میں ترمیم کریں",
13 |     "name": {
14 |       "label": "نام"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/filter.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "فلٹر",
 3 |   "labels": {
 4 |     "label": "لیبلز",
 5 |     "all": {
 6 |       "title": "تمام لیبلز",
 7 |       "short": "لیبلز"
 8 |     },
 9 |     "count_one": "{{count}} لیبل",
10 |     "count_other": "{{count}} لیبلز"
11 |   },
12 |   "zones": {
13 |     "label": "زونز",
14 |     "all": {
15 |       "title": "تمام زونز"
16 |     }
17 |   }
18 | }
19 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "آئیکن منتخب کریں",
4 |     "search": {
5 |       "placeholder": "آئیکن تلاش کریں…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "ویڈیو ڈاؤن لوڈ کریں",
 5 |       "toast": {
 6 |         "success": "آپ کی جائزے کی ویڈیو ڈاؤن لوڈ ہونا شروع ہو گئی ہے۔"
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/components/player.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "noRecordingsFoundForThisTime": "اس وقت کے لیے کوئی ریکارڈنگ نہیں ملی",
 3 |   "noPreviewFound": "کوئی پیش نظارہ نہیں ملا",
 4 |   "noPreviewFoundFor": "{{cameraName}} کے لیے کوئی پیش نظارہ نہیں ملا",
 5 |   "submitFrigatePlus": {
 6 |     "title": "اس فریم کو فریگیٹ+ میں جمع کرائیں؟",
 7 |     "submit": "جمع کروائیں"
 8 |   },
 9 |   "livePlayerRequiredIOSVersion": "اس لائیو اسٹریم کی قسم کے لیے iOS 17.1 یا اس سے جدید ورژن درکار ہے۔",
10 |   "streamOffline": {
11 |     "title": "آف لائن اسٹریم"
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/objects.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "person": "شخص",
 3 |   "bicycle": "سائیکل",
 4 |   "car": "گاڑی",
 5 |   "motorcycle": "موٹر سائیکل",
 6 |   "airplane": "ہوائی جہاز",
 7 |   "bus": "بس",
 8 |   "train": "ٹرین"
 9 | }
10 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "toast": {
 3 |     "error": {
 4 |       "savingError": "کنفیگریشن محفوظ کرنے میں خرابی"
 5 |     },
 6 |     "success": {
 7 |       "copyToClipboard": "کنفیگ کلپ بورڈ پر کاپی ہو گیا۔"
 8 |     }
 9 |   },
10 |   "documentTitle": "کنفیگریشن ایڈیٹر - Frigate",
11 |   "configEditor": "کنفیگریشن ایڈیٹر",
12 |   "copyConfig": "کنفیگریشن نقل کریں",
13 |   "saveAndRestart": "محفوظ کریں اور دوبارہ شروع کریں",
14 |   "saveOnly": "صرف محفوظ کریں",
15 |   "confirm": "محفوظ کیے بغیر باہر نکلیں؟"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/events.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "alerts": "انتباہات",
 3 |   "detections": "کھوج",
 4 |   "motion": {
 5 |     "label": "حرکت",
 6 |     "only": "صرف حرکت"
 7 |   },
 8 |   "allCameras": "تمام کیمرے",
 9 |   "empty": {
10 |     "alert": "جائزہ لینے کے لیے کوئی انتباہات نہیں ہیں",
11 |     "detection": "جائزہ لینے کے لیے کوئی ڈیٹیکشن موجود نہیں ہے",
12 |     "motion": "کوئی موشن ڈیٹا نہیں ملا"
13 |   }
14 | }
15 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/explore.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "جائزہ لیں - فریگیٹ",
 3 |   "generativeAI": "جنریٹو اے آئی",
 4 |   "exploreIsUnavailable": {
 5 |     "title": "جائزہ لینا دستیاب نہیں ہے",
 6 |     "embeddingsReindexing": {
 7 |       "context": "جب ٹریک کیے گئے آبجیکٹ ایمبیڈنگز کی دوبارہ انڈیکسنگ مکمل ہو جائےتو \"جائزہ لیں\" استعمال کیا جا سکتا ہے۔",
 8 |       "startingUp": "شروع ہو رہا ہے…",
 9 |       "estimatedTime": "متوقع باقی وقت:"
10 |     }
11 |   },
12 |   "exploreMore": "مزید {{label}} اشیاء کو دریافت کریں"
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "برآمد - فریگیٹ",
 3 |   "search": "تلاش",
 4 |   "noExports": "کوئی برآمدات نہیں ملے",
 5 |   "deleteExport": "برآمد کو حذف کریں",
 6 |   "deleteExport.desc": "کیا آپ واقعی {{exportName}} کو حذف کرنا چاہتے ہیں؟",
 7 |   "editExport": {
 8 |     "title": "برآمد کا نام تبدیل کریں",
 9 |     "desc": "اس برآمد کے لیے ایک نیا نام درج کریں۔"
10 |   }
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/faceLibrary.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "description": {
 3 |     "addFace": "فیس لائبریری میں نئی کلیکشن شامل کرنے کا طریقہ بتائیں۔",
 4 |     "placeholder": "اس مجموعہ کے لیے ایک نام درج کریں",
 5 |     "invalidName": "غلط نام۔ ناموں میں صرف حروف، اعداد، فاصلے، اپوسٹروف، انڈر اسکور، اور ہائفن شامل ہو سکتے ہیں۔"
 6 |   },
 7 |   "details": {
 8 |     "face": "چہرے کی تفصیلات",
 9 |     "person": "شخص",
10 |     "subLabelScore": "سب لیبل سکور",
11 |     "scoreInfo": "سب لیبل سکور تمام تسلیم شدہ چہرے کے اعتماد کے لیے وزنی سکور ہے، اس لیے یہ سنیپ شاٹ پر دکھائے گئے سکور سے مختلف ہو سکتا ہے۔"
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/live.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "لائیو - فریگیٹ",
 3 |   "documentTitle.withCamera": "{{camera}} -براہِ راست - فریگیٹ",
 4 |   "lowBandwidthMode": "کم بینڈوتھ موڈ",
 5 |   "twoWayTalk": {
 6 |     "enable": "دو طرفہ گفتگو کو فعال کریں",
 7 |     "disable": "دو طرفہ گفتگو کو غیر فعال کریں"
 8 |   },
 9 |   "cameraAudio": {
10 |     "enable": "کیمرہ آڈیو فعال کریں",
11 |     "disable": "کیمرہ آڈیو کو غیر فعال کریں"
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "فلٹر",
 3 |   "export": "برآمد",
 4 |   "calendar": "کیلنڈر",
 5 |   "filters": "فلٹرز",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "درست وقت کی حد منتخب نہیں کی گئی",
 9 |       "endTimeMustAfterStartTime": "اختتامی وقت آغاز کے وقت کے بعد ہونا چاہیے"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/search.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "تلاش",
 3 |   "savedSearches": "محفوظ شدہ تلاشیں",
 4 |   "searchFor": "{{inputValue}} تلاش کریں",
 5 |   "button": {
 6 |     "clear": "تلاش صاف کریں",
 7 |     "save": "تلاش کو محفوظ کریں",
 8 |     "delete": "محفوظ کردہ تلاش کو حذف کریں",
 9 |     "filterInformation": "معلومات کو فلٹر کریں"
10 |   }
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/settings.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": {
 3 |     "default": "ترتیبات - فریگیٹ",
 4 |     "authentication": "تصدیق کی ترتیبات - فریگیٹ",
 5 |     "camera": "کیمرے کی ترتیبات - فریگیٹ",
 6 |     "masksAndZones": "ماسک اور زون ایڈیٹر - فریگیٹ",
 7 |     "motionTuner": "موشن ٹونر - فریگیٹ",
 8 |     "object": "ڈی بگ - فریگیٹ",
 9 |     "enrichments": "افزودگی کی ترتیبات - فریگیٹ"
10 |   }
11 | }
12 | 


--------------------------------------------------------------------------------
/web/public/locales/ur/views/system.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": {
 3 |     "cameras": "کیمروں کے اعدادوشمار - فریگیٹ",
 4 |     "storage": "اسٹوریج کے اعدادوشمار - فریگیٹ",
 5 |     "general": "عمومی اعدادوشمار - فریگیٹ",
 6 |     "enrichments": "افزودگی کے اعدادوشمار - فریگیٹ",
 7 |     "logs": {
 8 |       "frigate": "فریگیٹ لاگز - فریگیٹ",
 9 |       "go2rtc": "Go2RTC لاگز - فریگیٹ",
10 |       "nginx": "Nginx لاگز - فریگیٹ"
11 |     }
12 |   }
13 | }
14 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "Tên người dùng",
 4 |     "password": "Mật khẩu",
 5 |     "login": "Đăng nhập",
 6 |     "errors": {
 7 |       "usernameRequired": "Tên người dùng là bắt buộc",
 8 |       "passwordRequired": "Mật khẩu là bắt buộc",
 9 |       "rateLimit": "Đã vượt quá giới hạn tốc độ. Hãy thử lại sau.",
10 |       "loginFailed": "Đăng nhập không thành công",
11 |       "unknownError": "Lỗi không xác định. Kiểm tra nhật ký.",
12 |       "webUnknownError": "Lỗi không xác định. Kiểm tra nhật ký bảng điều khiển."
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "Chọn một biểu tượng",
4 |     "search": {
5 |       "placeholder": "Tìm kiếm một biểu tượng…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "Tải xuống video",
 5 |       "toast": {
 6 |         "success": "Video trong mục xem lại của bạn đã bắt đầu tải xuống."
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "copyConfig": "Sao chép cấu hình",
 3 |   "saveAndRestart": "Lưu & Khởi động lại",
 4 |   "saveOnly": "Chỉ lưu",
 5 |   "confirm": "Thoát mà không lưu?",
 6 |   "toast": {
 7 |     "error": {
 8 |       "savingError": "Lỗi khi lưu cấu hình"
 9 |     },
10 |     "success": {
11 |       "copyToClipboard": "Đã sao chép cấu hình vào bộ nhớ tạm."
12 |     }
13 |   },
14 |   "configEditor": "Trình chỉnh sửa Cấu hình",
15 |   "documentTitle": "Trình chỉnh sửa Cấu hình - Frigate"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "search": "Tìm kiếm",
 3 |   "documentTitle": "Xuất tệp - Frigate",
 4 |   "noExports": "Không tìm thấy tệp xuất nào",
 5 |   "deleteExport": "Xóa tệp xuất",
 6 |   "deleteExport.desc": "Bạn có chắc chắn muốn xóa {{exportName}} không?",
 7 |   "editExport": {
 8 |     "title": "Đổi tên tệp xuất",
 9 |     "desc": "Nhập tên mới cho tệp xuất này.",
10 |     "saveExport": "Lưu tệp xuất"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "Đổi tên tệp xuất thất bại: {{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/vi/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "Lọc",
 3 |   "export": "Xuất",
 4 |   "calendar": "Lịch",
 5 |   "filters": "Bộ lọc",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "Thời gian chọn không hợp lệ",
 9 |       "endTimeMustAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "errors": {
 4 |       "webUnknownError": "未知錯誤。請檢查控制台日誌。",
 5 |       "rateLimit": "超過速率限制。請稍後再試。",
 6 |       "usernameRequired": "必須填寫用戶名",
 7 |       "passwordRequired": "必須填寫密碼",
 8 |       "loginFailed": "登入失敗",
 9 |       "unknownError": "未知錯誤。請檢查日誌。"
10 |     },
11 |     "user": "用戶名",
12 |     "password": "密碼",
13 |     "login": "登入"
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "選擇圖示",
4 |     "search": {
5 |       "placeholder": "搜尋圖示…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "下載影片",
 5 |       "toast": {
 6 |         "success": "你的審查項目影片已開始下載。"
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "設定編輯器 - Frigate",
 3 |   "configEditor": "設定編輯器",
 4 |   "copyConfig": "複製設定",
 5 |   "saveAndRestart": "儲存並重新啟動",
 6 |   "saveOnly": "只儲存",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "設定已複製到剪貼簿。"
10 |     },
11 |     "error": {
12 |       "savingError": "儲存設定時出錯"
13 |     }
14 |   },
15 |   "confirm": "是否不儲存就離開?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "匯出 - Frigate",
 3 |   "search": "搜尋",
 4 |   "noExports": "未找到匯出項目",
 5 |   "deleteExport": "刪除匯出",
 6 |   "editExport": {
 7 |     "title": "重新命名匯出",
 8 |     "desc": "請輸入新的匯出名稱。",
 9 |     "saveExport": "儲存匯出"
10 |   },
11 |   "toast": {
12 |     "error": {
13 |       "renameExportFailed": "重新命名匯出失敗:{{errorMessage}}"
14 |     }
15 |   },
16 |   "deleteExport.desc": "你確定要刪除 {{exportName}} 嗎?"
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/yue-Hant/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "filter": "篩選",
 3 |   "export": "匯出",
 4 |   "calendar": "日曆",
 5 |   "filters": "篩選條件",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "未選擇有效的時間範圍",
 9 |       "endTimeMustAfterStartTime": "結束時間必須在開始時間之後"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/components/auth.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "form": {
 3 |     "user": "用户名",
 4 |     "password": "密码",
 5 |     "login": "登录",
 6 |     "errors": {
 7 |       "usernameRequired": "用户名不能为空",
 8 |       "passwordRequired": "密码不能为空",
 9 |       "rateLimit": "超出请求限制,请稍后再试。",
10 |       "loginFailed": "登录失败",
11 |       "unknownError": "未知错误,请检查日志。",
12 |       "webUnknownError": "未知错误,请检查控制台日志。"
13 |     }
14 |   }
15 | }
16 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/components/icons.json:
--------------------------------------------------------------------------------
1 | {
2 |   "iconPicker": {
3 |     "selectIcon": "选择图标",
4 |     "search": {
5 |       "placeholder": "搜索图标…"
6 |     }
7 |   }
8 | }
9 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/components/input.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "button": {
 3 |     "downloadVideo": {
 4 |       "label": "下载视频",
 5 |       "toast": {
 6 |         "success": "你的核查视频已开始下载。"
 7 |       }
 8 |     }
 9 |   }
10 | }
11 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/views/configEditor.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "配置编辑器 - Frigate",
 3 |   "configEditor": "配置编辑器",
 4 |   "copyConfig": "复制配置",
 5 |   "saveAndRestart": "保存并重启",
 6 |   "saveOnly": "只保存",
 7 |   "toast": {
 8 |     "success": {
 9 |       "copyToClipboard": "配置已复制到剪贴板。"
10 |     },
11 |     "error": {
12 |       "savingError": "保存配置时出错"
13 |     }
14 |   },
15 |   "confirm": "是否退出并不保存?"
16 | }
17 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/views/exports.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "documentTitle": "导出 - Frigate",
 3 |   "search": "搜索",
 4 |   "noExports": "没有找到导出的项目",
 5 |   "deleteExport": "删除导出的项目",
 6 |   "deleteExport.desc": "你确定要删除 {{exportName}} 吗?",
 7 |   "editExport": {
 8 |     "title": "重命名导出",
 9 |     "desc": "为此导出项目输入新名称。",
10 |     "saveExport": "保存导出"
11 |   },
12 |   "toast": {
13 |     "error": {
14 |       "renameExportFailed": "重命名导出失败:{{errorMessage}}"
15 |     }
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/public/locales/zh-CN/views/recording.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "export": "导出",
 3 |   "calendar": "日历",
 4 |   "filter": "过滤器",
 5 |   "filters": "筛选条件",
 6 |   "toast": {
 7 |     "error": {
 8 |       "noValidTimeSelected": "未选择有效的时间范围",
 9 |       "endTimeMustAfterStartTime": "结束时间必须晚于开始时间"
10 |     }
11 |   }
12 | }
13 | 


--------------------------------------------------------------------------------
/web/src/api/baseUrl.ts:
--------------------------------------------------------------------------------
1 | declare global {
2 |   interface Window {
3 |     baseUrl?: string;
4 |   }
5 | }
6 | 
7 | export const baseUrl = `${window.location.protocol}//${window.location.host}${window.baseUrl || "/"}`;
8 | 


--------------------------------------------------------------------------------
/web/src/components/Wrapper.tsx:
--------------------------------------------------------------------------------
 1 | import { ReactNode } from "react";
 2 | 
 3 | type TWrapperProps = {
 4 |   children: ReactNode;
 5 | };
 6 | 
 7 | const Wrapper = ({ children }: TWrapperProps) => {
 8 |   return <main className="h-dvh w-full overflow-hidden">{children}</main>;
 9 | };
10 | 
11 | export default Wrapper;
12 | 


--------------------------------------------------------------------------------
/web/src/components/indicators/ImageLoadingIndicator.tsx:
--------------------------------------------------------------------------------
 1 | import { isSafari } from "react-device-detect";
 2 | import { Skeleton } from "../ui/skeleton";
 3 | import { cn } from "@/lib/utils";
 4 | 
 5 | export default function ImageLoadingIndicator({
 6 |   className,
 7 |   imgLoaded,
 8 | }: {
 9 |   className?: string;
10 |   imgLoaded: boolean;
11 | }) {
12 |   if (imgLoaded) {
13 |     return;
14 |   }
15 | 
16 |   return isSafari ? (
17 |     <div className={cn("pointer-events-none bg-background_alt", className)} />
18 |   ) : (
19 |     <Skeleton className={cn("pointer-events-none", className)} />
20 |   );
21 | }
22 | 


--------------------------------------------------------------------------------
/web/src/components/indicators/activity-indicator.tsx:
--------------------------------------------------------------------------------
 1 | import { cn } from "@/lib/utils";
 2 | import { AiOutlineLoading3Quarters } from "react-icons/ai";
 3 | 
 4 | export default function ActivityIndicator({ className = "w-full", size = 30 }) {
 5 |   return (
 6 |     <div
 7 |       className={cn("flex items-center justify-center", className)}
 8 |       aria-label="Loading…"
 9 |     >
10 |       <AiOutlineLoading3Quarters className="animate-spin" size={size} />
11 |     </div>
12 |   );
13 | }
14 | 


--------------------------------------------------------------------------------
/web/src/components/navigation/Redirect.tsx:
--------------------------------------------------------------------------------
 1 | import { useEffect } from "react";
 2 | import { useNavigate } from "react-router-dom";
 3 | 
 4 | type RedirectProps = {
 5 |   to: string;
 6 | };
 7 | export function Redirect({ to }: RedirectProps) {
 8 |   const navigate = useNavigate();
 9 | 
10 |   useEffect(() => {
11 |     navigate(to);
12 |   }, [to, navigate]);
13 |   return <div />;
14 | }
15 | 


--------------------------------------------------------------------------------
/web/src/components/ui/aspect-ratio.tsx:
--------------------------------------------------------------------------------
1 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
2 | 
3 | const AspectRatio = AspectRatioPrimitive.Root
4 | 
5 | export { AspectRatio }
6 | 


--------------------------------------------------------------------------------
/web/src/components/ui/icon-wrapper.tsx:
--------------------------------------------------------------------------------
 1 | import { ForwardedRef, forwardRef } from "react";
 2 | import { IconType } from "react-icons";
 3 | 
 4 | interface IconWrapperProps {
 5 |   icon: IconType;
 6 |   className?: string;
 7 |   [key: string]: any;
 8 | }
 9 | 
10 | const IconWrapper = forwardRef(
11 |   (
12 |     { icon: Icon, className, ...props }: IconWrapperProps,
13 |     ref: ForwardedRef<HTMLDivElement>,
14 |   ) => (
15 |     <div {...props} ref={ref}>
16 |       <Icon className={className} />
17 |     </div>
18 |   ),
19 | );
20 | 
21 | export default IconWrapper;
22 | 


--------------------------------------------------------------------------------
/web/src/components/ui/skeleton.tsx:
--------------------------------------------------------------------------------
 1 | import { cn } from "@/lib/utils"
 2 | 
 3 | function Skeleton({
 4 |   className,
 5 |   ...props
 6 | }: React.HTMLAttributes<HTMLDivElement>) {
 7 |   return (
 8 |     <div
 9 |       className={cn("animate-pulse rounded-md bg-muted", className)}
10 |       {...props}
11 |     />
12 |   )
13 | }
14 | 
15 | export { Skeleton }
16 | 


--------------------------------------------------------------------------------
/web/src/env.ts:
--------------------------------------------------------------------------------
1 | export const ENV = import.meta.env.MODE;
2 | 


--------------------------------------------------------------------------------
/web/src/hooks/use-deep-memo.ts:
--------------------------------------------------------------------------------
 1 | import { useRef } from "react";
 2 | import { isEqual } from "lodash";
 3 | 
 4 | export default function useDeepMemo<T>(value: T) {
 5 |   const ref = useRef<T | undefined>(undefined);
 6 | 
 7 |   if (!isEqual(ref.current, value)) {
 8 |     ref.current = value;
 9 |   }
10 | 
11 |   return ref.current;
12 | }
13 | 


--------------------------------------------------------------------------------
/web/src/hooks/use-image-loaded.ts:
--------------------------------------------------------------------------------
 1 | import { useEffect, useRef, useState } from "react";
 2 | 
 3 | const useImageLoaded = (): [
 4 |   React.RefObject<HTMLImageElement>,
 5 |   boolean,
 6 |   () => void,
 7 | ] => {
 8 |   const [loaded, setLoaded] = useState(false);
 9 |   const ref = useRef<HTMLImageElement>(null);
10 | 
11 |   const onLoad = () => {
12 |     setLoaded(true);
13 |   };
14 | 
15 |   useEffect(() => {
16 |     if (ref.current && ref.current?.complete) {
17 |       onLoad();
18 |     }
19 |   });
20 | 
21 |   return [ref, loaded, onLoad];
22 | };
23 | 
24 | export default useImageLoaded;
25 | 


--------------------------------------------------------------------------------
/web/src/hooks/use-is-admin.ts:
--------------------------------------------------------------------------------
 1 | import { useContext } from "react";
 2 | import { AuthContext } from "@/context/auth-context";
 3 | 
 4 | export function useIsAdmin() {
 5 |   const { auth } = useContext(AuthContext);
 6 |   const isAdmin =
 7 |     (auth.isAuthenticated && auth.user?.role === "admin") ||
 8 |     auth.user?.role === undefined;
 9 |   return isAdmin;
10 | }
11 | 


--------------------------------------------------------------------------------
/web/src/lib/const.ts:
--------------------------------------------------------------------------------
 1 | export const supportedLanguageKeys = [
 2 |   "en",
 3 |   "es",
 4 |   "pt",
 5 |   "fr",
 6 |   "de",
 7 |   "it",
 8 |   "ca",
 9 |   "ro",
10 |   "nl",
11 |   "nb-NO",
12 |   "zh-CN",
13 |   "yue-Hant",
14 |   "vi",
15 |   "th",
16 |   "he",
17 |   "ru",
18 |   "tr",
19 |   "pl",
20 |   "uk",
21 |   "cs",
22 |   "hu",
23 | ];
24 | 


--------------------------------------------------------------------------------
/web/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 | 
4 | export function cn(...inputs: ClassValue[]) {
5 |   return twMerge(clsx(inputs));
6 | }
7 | 


--------------------------------------------------------------------------------
/web/src/login.tsx:
--------------------------------------------------------------------------------
 1 | import React from "react";
 2 | import ReactDOM from "react-dom/client";
 3 | import LoginPage from "@/pages/LoginPage.tsx";
 4 | import "@/api";
 5 | import "./index.css";
 6 | 
 7 | ReactDOM.createRoot(document.getElementById("root")!).render(
 8 |   <React.StrictMode>
 9 |     <LoginPage />
10 |   </React.StrictMode>,
11 | );
12 | 


--------------------------------------------------------------------------------
/web/src/main.tsx:
--------------------------------------------------------------------------------
 1 | import React from "react";
 2 | import ReactDOM from "react-dom/client";
 3 | import App from "./App.tsx";
 4 | import "./index.css";
 5 | import "@/utils/i18n";
 6 | import "react-i18next";
 7 | 
 8 | ReactDOM.createRoot(document.getElementById("root")!).render(
 9 |   <React.StrictMode>
10 |     <App />
11 |   </React.StrictMode>,
12 | );
13 | 


--------------------------------------------------------------------------------
/web/src/pages/NoMatch.tsx:
--------------------------------------------------------------------------------
 1 | import Heading from "@/components/ui/heading";
 2 | import { useEffect } from "react";
 3 | import { useTranslation } from "react-i18next";
 4 | 
 5 | function NoMatch() {
 6 |   const { t } = useTranslation(["common"]);
 7 |   useEffect(() => {
 8 |     document.title = t("notFound.documentTitle");
 9 |   }, [t]);
10 | 
11 |   return (
12 |     <>
13 |       <Heading as="h2">{t("notFound.title")}</Heading>
14 |       <p>{t("notFound.desc")}</p>
15 |     </>
16 |   );
17 | }
18 | 
19 | export default NoMatch;
20 | 


--------------------------------------------------------------------------------
/web/src/types/draggable-element.ts:
--------------------------------------------------------------------------------
1 | export type DraggableElement = "handlebar" | "export_start" | "export_end";
2 | 


--------------------------------------------------------------------------------
/web/src/types/export.ts:
--------------------------------------------------------------------------------
 1 | export type Export = {
 2 |   id: string;
 3 |   camera: string;
 4 |   name: string;
 5 |   date: number;
 6 |   video_path: string;
 7 |   thumb_path: string;
 8 |   in_progress: boolean;
 9 | };
10 | 
11 | export type DeleteClipType = {
12 |   file: string;
13 |   exportName: string;
14 | };
15 | 


--------------------------------------------------------------------------------
/web/src/types/face.ts:
--------------------------------------------------------------------------------
 1 | export type FaceLibraryData = {
 2 |   [faceName: string]: string[];
 3 | };
 4 | 
 5 | export type RecognizedFaceData = {
 6 |   filename: string;
 7 |   timestamp: number;
 8 |   eventId: string;
 9 |   name: string;
10 |   score: number;
11 | };
12 | 


--------------------------------------------------------------------------------
/web/src/types/filter.ts:
--------------------------------------------------------------------------------
 1 | // allow any
 2 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
 3 | export type FilterType = { [searchKey: string]: any };
 4 | 
 5 | export type ExportMode = "select" | "timeline" | "none";
 6 | 
 7 | export type FilterList = {
 8 |   labels?: string[];
 9 |   zones?: string[];
10 | };
11 | 
12 | export const LAST_24_HOURS_KEY = "last24Hours";
13 | 
14 | export type GeneralFilter = {
15 |   showAll?: boolean;
16 |   labels?: string[];
17 |   zones?: string[];
18 | };
19 | 


--------------------------------------------------------------------------------
/web/src/types/log.ts:
--------------------------------------------------------------------------------
 1 | export type LogData = {
 2 |   totalLines: number;
 3 |   lines: string[];
 4 | };
 5 | 
 6 | export type LogSeverity = "info" | "warning" | "error" | "debug";
 7 | 
 8 | export type LogLine = {
 9 |   dateStamp: string;
10 |   severity: LogSeverity;
11 |   section: string;
12 |   content: string;
13 | };
14 | 
15 | export const logTypes = ["frigate", "go2rtc", "nginx"] as const;
16 | export type LogType = (typeof logTypes)[number];
17 | 
18 | export type LogSettingsType = {
19 |   disableStreaming: boolean;
20 | };
21 | 


--------------------------------------------------------------------------------
/web/src/types/navigation.ts:
--------------------------------------------------------------------------------
 1 | import { IconType } from "react-icons";
 2 | 
 3 | export type NavData = {
 4 |   id: number;
 5 |   variant?: "primary" | "secondary";
 6 |   icon: IconType;
 7 |   title: string;
 8 |   url: string;
 9 |   enabled?: boolean;
10 | };
11 | 


--------------------------------------------------------------------------------
/web/src/types/playback.ts:
--------------------------------------------------------------------------------
 1 | import { Preview } from "./preview";
 2 | import { Recording } from "./record";
 3 | import { TimeRange } from "./timeline";
 4 | 
 5 | export type DynamicPlayback = {
 6 |   recordings: Recording[];
 7 |   timeRange: TimeRange;
 8 | };
 9 | 
10 | export type PreviewPlayback = {
11 |   preview: Preview | undefined;
12 |   timeRange: TimeRange;
13 | };
14 | 


--------------------------------------------------------------------------------
/web/src/types/preview.ts:
--------------------------------------------------------------------------------
 1 | import { REVIEW_PADDING } from "./review";
 2 | 
 3 | export type Preview = {
 4 |   camera: string;
 5 |   src: string;
 6 |   type: string;
 7 |   start: number;
 8 |   end: number;
 9 | };
10 | 
11 | export const PREVIEW_FPS = 8;
12 | export const PREVIEW_PADDING = REVIEW_PADDING * PREVIEW_FPS;
13 | 


--------------------------------------------------------------------------------
/web/src/types/ptz.ts:
--------------------------------------------------------------------------------
1 | type PtzFeature = "pt" | "zoom" | "pt-r" | "zoom-r" | "zoom-a" | "pt-r-fov";
2 | 
3 | export type CameraPtzInfo = {
4 |   name: string;
5 |   features: PtzFeature[];
6 |   presets: string[];
7 | };
8 | 


--------------------------------------------------------------------------------
/web/src/types/user.ts:
--------------------------------------------------------------------------------
1 | export type User = {
2 |   username: string;
3 |   role: string;
4 | };
5 | 


--------------------------------------------------------------------------------
/web/src/utils/browserUtil.ts:
--------------------------------------------------------------------------------
 1 | import copy from "copy-to-clipboard";
 2 | import { t } from "i18next";
 3 | import { toast } from "sonner";
 4 | 
 5 | export function shareOrCopy(url: string, title?: string) {
 6 |   if (window.isSecureContext && "share" in navigator) {
 7 |     navigator.share({
 8 |       url: url,
 9 |       title: title,
10 |     });
11 |   } else {
12 |     copy(url);
13 |     toast.success(t("toast.copyUrlToClipboard", { ns: "common" }), {
14 |       position: "top-center",
15 |     });
16 |   }
17 | }
18 | 


--------------------------------------------------------------------------------
/web/src/utils/isIFrame.ts:
--------------------------------------------------------------------------------
1 | export const isInIframe = (() => {
2 |   try {
3 |     return window.self !== window.top;
4 |   } catch (e) {
5 |     // If we get a security error, we're definitely in an iframe
6 |     return true;
7 |   }
8 | })();
9 | 


--------------------------------------------------------------------------------
/web/src/utils/isPWA.ts:
--------------------------------------------------------------------------------
1 | export const isPWA =
2 |   ("standalone" in window.navigator && window.navigator.standalone) ||
3 |   window.matchMedia("(display-mode: standalone)").matches;
4 | 


--------------------------------------------------------------------------------
/web/src/utils/storageUtil.ts:
--------------------------------------------------------------------------------
1 | export const getUnitSize = (MB: number) => {
2 |   if (MB === null || isNaN(MB) || MB < 0) return "Invalid number";
3 |   if (MB < 1024) return `${MB.toFixed(2)} MiB`;
4 |   if (MB < 1048576) return `${(MB / 1024).toFixed(2)} GiB`;
5 | 
6 |   return `${(MB / 1048576).toFixed(2)} TiB`;
7 | };
8 | 


--------------------------------------------------------------------------------
/web/src/utils/stringUtil.ts:
--------------------------------------------------------------------------------
 1 | export const capitalizeFirstLetter = (text: string): string => {
 2 |   return text.charAt(0).toUpperCase() + text.slice(1);
 3 | };
 4 | 
 5 | export const capitalizeAll = (text: string): string => {
 6 |   return text
 7 |     .replaceAll("_", " ")
 8 |     .split(" ")
 9 |     .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
10 |     .join(" ");
11 | };
12 | 


--------------------------------------------------------------------------------
/web/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | /// <reference types="vite/client" />
2 | 


--------------------------------------------------------------------------------
/web/tsconfig.node.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "composite": true,
 4 |     "skipLibCheck": true,
 5 |     "module": "ESNext",
 6 |     "moduleResolution": "bundler",
 7 |     "allowSyntheticDefaultImports": true
 8 |   },
 9 |   "include": ["vite.config.ts"]
10 | }
11 | 


--------------------------------------------------------------------------------