Skip to content

Facial Recognition - part 1 - #4280

Merged
ildyria merged 80 commits into
masterfrom
assisted-vision
Jun 21, 2026
Merged

ildyria merged 80 commits into
masterfrom
assisted-vision

Conversation

@ildyria

@ildyria ildyria commented Apr 10, 2026

Copy link
Copy Markdown
Member

No description provided.

@coderabbitai

coderabbitai Bot commented Apr 10, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 427f1b97-0250-4f7c-a7e7-21fc966c11f2

📥 Commits

Reviewing files that changed from the base of the PR and between a5e3813 and 0be4fbb.

📒 Files selected for processing (300)
  • .dockerignore
  • .github/dependabot.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/php_tests.yml
  • .gitignore
  • Makefile
  • app/Actions/Albums/Flow.php
  • app/Actions/Diagnostics/Errors.php
  • app/Actions/Diagnostics/Pipes/Checks/AiVisionServiceCheck.php
  • app/Actions/Diagnostics/Pipes/Checks/AiVisionServiceConfigCheck.php
  • app/Actions/Photo/Create.php
  • app/Actions/Photo/Pipes/Standalone/AutoScanFacesOnUpload.php
  • app/Console/Commands/RescanFailedFaces.php
  • app/Console/Commands/ScanFaces.php
  • app/Contracts/Http/Requests/HasFace.php
  • app/Contracts/Http/Requests/HasPerson.php
  • app/Enum/FacePermissionMode.php
  • app/Enum/FaceScanStatus.php
  • app/Factories/PersonFactory.php
  • app/Http/Controllers/Admin/Maintenance/BulkScanFaces.php
  • app/Http/Controllers/Admin/Maintenance/DestroyDismissedFaces.php
  • app/Http/Controllers/Admin/Maintenance/ResetFaceScanStatus.php
  • app/Http/Controllers/Admin/Maintenance/RunFaceClustering.php
  • app/Http/Controllers/Admin/Maintenance/SyncFaceEmbeddings.php
  • app/Http/Controllers/Admin/ModerationController.php
  • app/Http/Controllers/Admin/SettingsController.php
  • app/Http/Controllers/AiVision/AlbumPeopleController.php
  • app/Http/Controllers/AiVision/FaceClusterController.php
  • app/Http/Controllers/AiVision/FaceController.php
  • app/Http/Controllers/AiVision/FaceDetectionController.php
  • app/Http/Controllers/AiVision/FaceMaintenanceController.php
  • app/Http/Controllers/AiVision/PeopleController.php
  • app/Http/Controllers/AiVision/PersonClaimController.php
  • app/Http/Controllers/AiVision/PersonPhotosController.php
  • app/Http/Controllers/AiVision/PhotoFacesController.php
  • app/Http/Controllers/AiVision/SelfieClaimController.php
  • app/Http/Controllers/Gallery/AlbumPhotosController.php
  • app/Http/Controllers/Gallery/FrameController.php
  • app/Http/Middleware/VerifyCsrfToken.php
  • app/Http/Requests/Album/GetAlbumPhotosRequest.php
  • app/Http/Requests/Face/AssignFaceRequest.php
  • app/Http/Requests/Face/BatchDismissFacesRequest.php
  • app/Http/Requests/Face/BatchFaceRequest.php
  • app/Http/Requests/Face/BulkScanRequest.php
  • app/Http/Requests/Face/ClusterAssignRequest.php
  • app/Http/Requests/Face/ClusterDismissRequest.php
  • app/Http/Requests/Face/ClusterFacesRequest.php
  • app/Http/Requests/Face/ClusterIndexRequest.php
  • app/Http/Requests/Face/ClusterResultsRequest.php
  • app/Http/Requests/Face/DestroyDismissedFacesRequest.php
  • app/Http/Requests/Face/FaceDetectionResultsRequest.php
  • app/Http/Requests/Face/FaceMaintenanceIndexRequest.php
  • app/Http/Requests/Face/GetPhotoFacesRequest.php
  • app/Http/Requests/Face/ScanPhotosRequest.php
  • app/Http/Requests/Face/ToggleDismissedRequest.php
  • app/Http/Requests/Face/UnclusterFacesRequest.php
  • app/Http/Requests/Person/ClaimPersonRequest.php
  • app/Http/Requests/Person/DestroyPersonRequest.php
  • app/Http/Requests/Person/GetAlbumPersonsRequest.php
  • app/Http/Requests/Person/ListPersonsRequest.php
  • app/Http/Requests/Person/MergePersonRequest.php
  • app/Http/Requests/Person/SelfieClaimRequest.php
  • app/Http/Requests/Person/ShowPersonRequest.php
  • app/Http/Requests/Person/StorePersonRequest.php
  • app/Http/Requests/Person/UnclaimPersonRequest.php
  • app/Http/Requests/Person/UpdatePersonRequest.php
  • app/Http/Requests/Photo/EditPhotoRequest.php
  • app/Http/Requests/Photo/RotatePhotoRequest.php
  • app/Http/Requests/Photo/SetPhotoRatingRequest.php
  • app/Http/Requests/Traits/HasFaceTrait.php
  • app/Http/Requests/Traits/HasPersonTrait.php
  • app/Http/Resources/Collections/PaginatedClustersResource.php
  • app/Http/Resources/Collections/PaginatedFaceResource.php
  • app/Http/Resources/Collections/PaginatedPersonsResource.php
  • app/Http/Resources/GalleryConfigs/InitConfig.php
  • app/Http/Resources/Models/ClusterPreviewResource.php
  • app/Http/Resources/Models/FaceResource.php
  • app/Http/Resources/Models/FaceSuggestionResource.php
  • app/Http/Resources/Models/PersonResource.php
  • app/Http/Resources/Models/PhotoFacesResource.php
  • app/Http/Resources/Models/PhotoResource.php
  • app/Http/Resources/Rights/AlbumRightsResource.php
  • app/Http/Resources/Rights/ModulesRightsResource.php
  • app/Http/Resources/Rights/PhotoRightsResource.php
  • app/Jobs/DeleteFaceEmbeddingsJob.php
  • app/Jobs/DispatchFaceScanJob.php
  • app/Metadata/Cache/RouteCacheManager.php
  • app/Models/Face.php
  • app/Models/FaceSuggestion.php
  • app/Models/Person.php
  • app/Models/Photo.php
  • app/Models/User.php
  • app/Observers/FaceObserver.php
  • app/Observers/PhotoObserver.php
  • app/Policies/AiVisionPolicy.php
  • app/Policies/AlbumPolicy.php
  • app/Policies/PhotoPolicy.php
  • app/Providers/AppServiceProvider.php
  • app/Providers/AuthServiceProvider.php
  • app/Repositories/PhotoRepository.php
  • app/Services/Image/FaceDetectionService.php
  • app/Services/Image/FacialRecognitionService.php
  • codecov.yml
  • config/features.php
  • database/factories/FaceFactory.php
  • database/factories/PersonFactory.php
  • database/migrations/2026_03_21_000001_create_persons_table.php
  • database/migrations/2026_03_21_000002_create_faces_table.php
  • database/migrations/2026_03_21_000003_ai_vision_config.php
  • database/migrations/2026_03_21_000004_create_ai_vision_category.php
  • database/migrations/2026_03_21_000005_add_representative_face_id_to_persons.php
  • database/migrations/2026_03_21_000006_add_cluster_label_to_faces.php
  • docker-compose.minimal.yaml
  • docker-compose.yaml
  • docs/specs/2-how-to/configure-facial-recognition.md
  • docs/specs/2-how-to/docker-compose/docker-compose-ai-vision-only.yaml
  • docs/specs/3-reference/database-schema.md
  • docs/specs/4-architecture/features/030-ai-vision-service/plan.md
  • docs/specs/4-architecture/features/030-ai-vision-service/spec.md
  • docs/specs/4-architecture/features/030-ai-vision-service/tasks.md
  • docs/specs/4-architecture/knowledge-map.md
  • docs/specs/4-architecture/open-questions.md
  • docs/specs/4-architecture/roadmap.md
  • lang/ar/dialogs.php
  • lang/ar/gallery.php
  • lang/ar/left-menu.php
  • lang/ar/maintenance.php
  • lang/ar/people.php
  • lang/bg/dialogs.php
  • lang/bg/gallery.php
  • lang/bg/left-menu.php
  • lang/bg/maintenance.php
  • lang/bg/people.php
  • lang/cz/dialogs.php
  • lang/cz/gallery.php
  • lang/cz/left-menu.php
  • lang/cz/maintenance.php
  • lang/cz/people.php
  • lang/de/dialogs.php
  • lang/de/gallery.php
  • lang/de/left-menu.php
  • lang/de/maintenance.php
  • lang/de/people.php
  • lang/el/dialogs.php
  • lang/el/gallery.php
  • lang/el/left-menu.php
  • lang/el/maintenance.php
  • lang/el/people.php
  • lang/en/dialogs.php
  • lang/en/gallery.php
  • lang/en/left-menu.php
  • lang/en/maintenance.php
  • lang/en/people.php
  • lang/es/dialogs.php
  • lang/es/gallery.php
  • lang/es/left-menu.php
  • lang/es/maintenance.php
  • lang/es/people.php
  • lang/fa/dialogs.php
  • lang/fa/gallery.php
  • lang/fa/left-menu.php
  • lang/fa/maintenance.php
  • lang/fa/people.php
  • lang/fr/dialogs.php
  • lang/fr/gallery.php
  • lang/fr/left-menu.php
  • lang/fr/maintenance.php
  • lang/fr/people.php
  • lang/hu/dialogs.php
  • lang/hu/gallery.php
  • lang/hu/left-menu.php
  • lang/hu/maintenance.php
  • lang/hu/people.php
  • lang/it/dialogs.php
  • lang/it/gallery.php
  • lang/it/left-menu.php
  • lang/it/maintenance.php
  • lang/it/people.php
  • lang/ja/dialogs.php
  • lang/ja/gallery.php
  • lang/ja/left-menu.php
  • lang/ja/maintenance.php
  • lang/ja/people.php
  • lang/nl/dialogs.php
  • lang/nl/gallery.php
  • lang/nl/left-menu.php
  • lang/nl/maintenance.php
  • lang/nl/people.php
  • lang/no/dialogs.php
  • lang/no/gallery.php
  • lang/no/left-menu.php
  • lang/no/maintenance.php
  • lang/no/people.php
  • lang/pl/dialogs.php
  • lang/pl/gallery.php
  • lang/pl/left-menu.php
  • lang/pl/maintenance.php
  • lang/pl/people.php
  • lang/pt/dialogs.php
  • lang/pt/gallery.php
  • lang/pt/left-menu.php
  • lang/pt/maintenance.php
  • lang/pt/people.php
  • lang/ru/dialogs.php
  • lang/ru/gallery.php
  • lang/ru/left-menu.php
  • lang/ru/maintenance.php
  • lang/ru/people.php
  • lang/sk/dialogs.php
  • lang/sk/gallery.php
  • lang/sk/left-menu.php
  • lang/sk/maintenance.php
  • lang/sk/people.php
  • lang/sv/dialogs.php
  • lang/sv/gallery.php
  • lang/sv/left-menu.php
  • lang/sv/maintenance.php
  • lang/sv/people.php
  • lang/tr/dialogs.php
  • lang/tr/gallery.php
  • lang/tr/left-menu.php
  • lang/tr/maintenance.php
  • lang/tr/people.php
  • lang/vi/dialogs.php
  • lang/vi/gallery.php
  • lang/vi/left-menu.php
  • lang/vi/maintenance.php
  • lang/vi/people.php
  • lang/zh_CN/dialogs.php
  • lang/zh_CN/gallery.php
  • lang/zh_CN/left-menu.php
  • lang/zh_CN/maintenance.php
  • lang/zh_CN/people.php
  • lang/zh_TW/dialogs.php
  • lang/zh_TW/gallery.php
  • lang/zh_TW/left-menu.php
  • lang/zh_TW/maintenance.php
  • lang/zh_TW/people.php
  • phpunit.ci.xml
  • phpunit.pgsql.xml
  • phpunit.xml
  • resources/js/components/drawers/PhotoDetails.vue
  • resources/js/components/forms/people/PersonDeleteDialog.vue
  • resources/js/components/gallery/PersonCard.vue
  • resources/js/components/gallery/albumModule/AlbumHero.vue
  • resources/js/components/gallery/albumModule/AlbumPanel.vue
  • resources/js/components/gallery/albumModule/AlbumPeopleFilter.vue
  • resources/js/components/gallery/albumModule/PhotoListItem.vue
  • resources/js/components/gallery/albumModule/thumbs/PhotoThumb.vue
  • resources/js/components/gallery/photoModule/Dock.vue
  • resources/js/components/gallery/photoModule/FaceOverlay.vue
  • resources/js/components/gallery/photoModule/PhotoBox.vue
  • resources/js/components/gallery/tagModule/TagPanel.vue
  • resources/js/components/maintenance/MaintenanceBulkScanFaces.vue
  • resources/js/components/maintenance/MaintenanceDestroyDismissedFaces.vue
  • resources/js/components/maintenance/MaintenanceResetFaceScanStatus.vue
  • resources/js/components/maintenance/MaintenanceRunClustering.vue
  • resources/js/components/maintenance/MaintenanceSyncFaceEmbeddings.vue
  • resources/js/components/modals/KeybindingsHelp.vue
  • resources/js/components/modals/faceRecog/FaceAssignmentModal.vue
  • resources/js/components/modals/faceRecog/MergePersonModal.vue
  • resources/js/components/modals/faceRecog/SelfieClaimModal.vue
  • resources/js/composables/contextMenus/contextMenu.ts
  • resources/js/composables/contextMenus/leftMenu.ts
  • resources/js/composables/photo/photoRoute.ts
  • resources/js/composables/useAdminTiles.ts
  • resources/js/lychee.d.ts
  • resources/js/router/routes.ts
  • resources/js/services/album-service.ts
  • resources/js/services/face-batch-service.ts
  • resources/js/services/face-cluster-service.ts
  • resources/js/services/face-detection-service.ts
  • resources/js/services/face-maintenance-service.ts
  • resources/js/services/maintenance-service.ts
  • resources/js/services/people-service.ts
  • resources/js/services/photo-faces-service.ts
  • resources/js/stores/AlbumState.ts
  • resources/js/stores/LycheeState.ts
  • resources/js/stores/PhotoFacesState.ts
  • resources/js/utils/Helpers.ts
  • resources/js/views/Profile.vue
  • resources/js/views/admin/Maintenance.vue
  • resources/js/views/face-recog/FaceClusters.vue
  • resources/js/views/face-recog/FaceMaintenance.vue
  • resources/js/views/face-recog/People.vue
  • resources/js/views/face-recog/PersonDetail.vue
  • resources/js/views/gallery-panels/Albums.vue
  • resources/js/views/gallery-panels/Search.vue
  • resources/js/views/gallery-panels/Timeline.vue
  • routes/api_v2.php
  • routes/web_v2.php
  • tests/AssistedVision/Face/AiVisionServiceCheckTest.php
  • tests/AssistedVision/Face/AlbumPolicyFaceTest.php
  • tests/AssistedVision/Face/DestroyDismissedFacesTest.php
  • tests/AssistedVision/Face/DispatchFaceScanJobTest.php
  • tests/AssistedVision/Face/FaceAssignmentTest.php
  • tests/AssistedVision/Face/FaceBatchTest.php
  • tests/AssistedVision/Face/FaceClusterFacesTest.php
  • tests/AssistedVision/Face/FaceClusterReviewTest.php
  • tests/AssistedVision/Face/FaceDetectionServiceUnavailableTest.php

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Jun 19, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.47006% with 148 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.48%. Comparing base (02e3b90) to head (0be4fbb).
⚠️ Report is 1 commits behind head on master.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@ildyria
ildyria marked this pull request as ready for review June 19, 2026 17:12
@ildyria
ildyria requested a review from a team as a code owner June 19, 2026 17:12
@ildyria ildyria changed the title squash Facial Recognition - part 1 Jun 21, 2026
@ildyria
ildyria merged commit 208fb3c into master Jun 21, 2026
49 checks passed
@ildyria
ildyria deleted the assisted-vision branch June 21, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants