AI Slop Code RIsk Monitor

LibrePhotos/librephotos

A self-hosted open source photo management service.

21.4 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for LibrePhotos/librephotos, a Python project with 8,102 GitHub stars. SynthScan examined 280,432 lines of code across 1747 source files, recording 4911 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 21.4 (Elevated pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

21.4
Adjusted Signal
21.4
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
8.1K
Stars
Python
Language
280.4K
Lines of Code
1.7K
Files
4.9K
Pattern Hits
2026-10-12
Scan Date
0.03
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 57.9/100 · HIGH

Can maintainers explain intent, assumptions, and trade-offs? 4326 finding(s).

Hallucinated Dependency & Supply Chain Risk 5.0/100 · LOW

Are imports declared and package/API names verified? 187 finding(s).

Agent Over-Engineering Ratio 61.7/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 4551 finding(s).

PR Review Velocity Impact 62.7/100 · HIGH

Which changes need focused human review? 4911 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 8HIGH 38MEDIUM 181LOW 4684

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 4911 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers4145 hits · 4507 pts
SeverityFileLineSnippetContext
LOWpackages/api-client/src/endpoints/index.ts129export async function fetchPhotosWithoutTimestamp(CODE
LOWpackages/api-client/src/endpoints/index.ts626export async function removePhotosFromUserAlbum(CODE
LOWpackages/api-client/src/hooks/index.ts99export function useRecentlyAddedPhotosQuery() {CODE
LOWpackages/api-client/src/hooks/index.ts182export function usePhotosWithoutTimestampQuery(page: number) {CODE
LOWpackages/api-client/src/hooks/index.ts224export function useWorkerAvailabilityQuery(options?: { refetchInterval?: number; enabled?: boolean }) {CODE
LOWpackages/api-client/src/hooks/index.ts245export function useSharedPhotosWithMeQuery(enabled = true) {CODE
LOWpackages/api-client/src/hooks/index.ts263export function useSharedAlbumsWithMeQuery(enabled = true) {CODE
LOWapps/frontend/src/api_client/stacks/hooks.ts150export function useRemoveFromStackMutation() {CODE
LOWapps/frontend/src/api_client/stacks/hooks.ts178export function useCreateManualStackMutation() {CODE
LOW…c/api_client/photos/hooks/usePhotoMetadataMutations.ts21export function useUpdatePhotoMetadataMutation() {CODE
LOW…c/api_client/photos/hooks/usePhotoMetadataMutations.ts42export function useRevertMetadataEditMutation() {CODE
LOW…c/api_client/photos/hooks/usePhotoMetadataMutations.ts59export function useRevertAllMetadataEditsMutation() {CODE
LOW…c/api_client/photos/hooks/usePhotoMetadataMutations.ts76export function useBulkUpdateMetadataMutation() {CODE
LOW…pi_client/photos/hooks/useFetchMetadataHistoryQuery.ts14export function useFetchMetadataHistoryQuery(CODE
LOW…/api_client/photos/hooks/useFetchPhotoMetadataQuery.ts14export function useFetchPhotoMetadataQuery(CODE
LOW…src/api_client/albums/hooks/useFetchDateAlbumsQuery.ts107export function buildDateAlbumFilterParams(photosetType: Photoset, mediaType?: MediaType): DateAlbumFilterParams {CODE
LOWapps/frontend/src/util/dateUtils.ts31export function photoTimestampToPickerDate(timestamp: string): Date | null {CODE
LOWapps/frontend/src/util/dateUtils.ts65export function pickerDateToPhotoTimestamp(date: Date): string | null {CODE
LOWapps/frontend/src/util/recentlyTaggedPeople.ts15export function getRecentlyTaggedPeopleIds(): RecentlyTaggedPersonId[] {CODE
LOWapps/frontend/src/util/recentlyTaggedPeople.ts27export function subscribeToRecentlyTaggedPeople(listener: () => void) {CODE
LOWapps/frontend/src/util/recentlyTaggedPeople.ts44export function recordRecentlyTaggedPerson(personId: string | number | null | undefined) {CODE
LOWapps/frontend/src/util/recentlyTaggedPeople.ts62export function resolveRecentlyTaggedPeople(ids: RecentlyTaggedPersonId[], people: People | undefined): People {CODE
LOWapps/frontend/src/util/util.ts49export function getPhotosFlatFromSingleGroup(group: DatePhotosGroup) {CODE
LOWapps/frontend/src/util/util.ts53export function getPhotosFlatFromGroupedByDate(photosGroupedByDate: DatePhotosGroup[]) {CODE
LOWapps/frontend/src/util/util.ts84export function addTempElementsToFlatList(photosCount: number) {CODE
LOW…ntend/src/components/settings/ConfigBurstDetection.tsx36function isSavedBurstDetectionRule(entry: unknown): entry is SavedBurstDetectionRule {CODE
LOWapps/frontend/src/components/spotlight/Spotlight.tsx59export function ConfirmDeleteMissingPhotosModal({ opened, onClose }: { opened: boolean; onClose: () => void }) {CODE
LOWapps/frontend/src/components/react-pig/index.tsx83// export function addTempElementsToFlatList(photosCount: number): ImageItem[] {COMMENT
LOW…ps/frontend/src/components/charts/FaceClusterGraph.tsx44function extractPhotoHashFromFaceUrl(faceUrl: string): string | null {CODE
LOW…d/src/components/charts/LocationDurationStackedBar.tsx12export function LocationDurationStackedBar() {CODE
LOW…/components/modals/ModalNextcloudScanDirectoryEdit.tsx17export function ModalNextcloudScanDirectoryEdit(props: Props) {CODE
LOW…nd/src/components/modals/ModalConfigBurstDetection.tsx47export function ModalConfigBurstDetection({ opened, onClose, availableRules, onAddRules }: Props) {CODE
LOW…ps/frontend/src/components/photolist/timelineFilter.ts122export function timelineFilterToBulkQuery(filter: TimelineFilter): BulkPhotoQuery {CODE
LOWapps/frontend/src/service/notifications/albums.ts54function deleteAutogeneratedAlbums() {CODE
LOWapps/frontend/src/service/notifications/photos.ts187function copyPhotoToClipboardFailed() {CODE
LOWapps/frontend/src/routes/__root.tsx9function AppShellPublicWithoutHeader() {CODE
LOWapps/backend/nextcloud/server_address.py46def private_addresses_allowed() -> bool:CODE
LOW⚡apps/backend/nextcloud/tests.py70 def test_backslash_before_userinfo_is_judged_by_the_dialed_host(self):CODE
LOW⚡apps/backend/nextcloud/tests.py74 def test_userinfo_does_not_hide_a_loopback_host(self):CODE
LOW⚡apps/backend/nextcloud/tests.py78 def test_addresses_the_parsers_disagree_on_are_refused(self):CODE
LOW⚡apps/backend/nextcloud/tests.py86 def test_ordinary_addresses_still_pass(self):CODE
LOWapps/backend/nextcloud/tests.py103 def test_redirect_hops_get_the_same_check(self):CODE
LOWapps/backend/nextcloud/tests.py116 def test_a_location_the_url_splitter_rejects_is_refused(self):CODE
LOWapps/backend/nextcloud/tests.py149 def test_address_cannot_be_saved(self):CODE
LOWapps/backend/nextcloud/tests.py162 def test_stored_address_is_not_contacted(self):CODE
LOWapps/backend/librephotos/standalone.py360def _take_children_down_with_us():CODE
LOWapps/backend/api/batch_jobs.py23def photos_missing_clip_embeddings(user):CODE
LOWapps/backend/api/batch_jobs.py34def photos_with_existing_thumbnail(objs):CODE
LOW⚡apps/backend/api/batch_jobs.py92def _rebuild_index_while_converting(user):CODE
LOW⚡apps/backend/api/batch_jobs.py100def batch_calculate_clip_embedding(user, wait_for_tags=False):CODE
LOWapps/backend/api/batch_jobs.py173def queue_semantic_search_conversion():CODE
LOWapps/backend/api/user_deletion.py121def _drop_others_photos_from_albums(user):CODE
LOWapps/backend/api/stack_detection.py134def _detect_bursts_hard_criteria(user, hard_rules, progress_callback=None):CODE
LOWapps/backend/api/stack_detection.py204def _detect_bursts_soft_criteria(CODE
LOWapps/backend/api/image_similarity.py103def build_image_similarity_index(user):CODE
LOWapps/backend/api/date_time_extractor.py66def _extract_no_tz_datetime_from_str(x, regexp=REGEXP_NO_TZ, group_mapping=None):CODE
LOWapps/backend/api/date_time_extractor.py255 def _check_condition_filename(self, path):CODE
LOWapps/backend/api/perceptual_hash.py32def calculate_perceptual_hash(image_path: str, hash_size: int = 8) -> str | None:CODE
LOW⚡apps/backend/api/perceptual_hash.py58def calculate_hash_from_thumbnail(thumbnail_path: str) -> str | None:CODE
LOWapps/backend/api/screenshot_detection.py50def _matches_screenshot_prefix(basename: str) -> bool:CODE
4085 more matches not shown…
Decorative Section Separators97 hits · 408 pts
SeverityFileLineSnippetContext
MEDIUMapps/backend/librephotos/settings/production.py587# ---------------------------------------------------------------------------COMMENT
MEDIUMapps/backend/librephotos/settings/production.py589# ---------------------------------------------------------------------------COMMENT
MEDIUMapps/backend/api/util.py211# ---------------------------------------------------------------------------COMMENT
MEDIUMapps/backend/api/util.py213# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ests/infra/test_drf_queryset_optimization_metaclass.py59# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ests/infra/test_drf_queryset_optimization_metaclass.py61# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ests/infra/test_drf_queryset_optimization_metaclass.py136# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ests/infra/test_drf_queryset_optimization_metaclass.py138# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py57 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py59 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py73 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py75 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py108 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py110 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py161 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…/tests/users_and_auth/test_user_management_commands.py163 # ------------------------------------------------------------------COMMENT
MEDIUM…/tests/users_and_auth/test_user_management_commands.py254 # ------------------------------------------------------------------COMMENT
MEDIUM…/tests/users_and_auth/test_user_management_commands.py256 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py62 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py64 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py108 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py110 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py204 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py206 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py229 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…end/api/tests/search/test_batch_clip_embeddings_job.py232 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…i/tests/ml_services/test_ml_model_download_pipeline.py102# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…i/tests/ml_services/test_ml_model_download_pipeline.py104# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…i/tests/ml_services/test_ml_model_download_pipeline.py501# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…i/tests/ml_services/test_ml_model_download_pipeline.py503# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py92# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py94# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py127# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py129# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py202# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py204# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py367# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/photos/test_document_classification.py369# ---------------------------------------------------------------------------COMMENT
MEDIUM…ckend/api/tests/photos/test_document_classification.py67# ---------------------------------------------------------------------------COMMENT
MEDIUM…ckend/api/tests/photos/test_document_classification.py69# ---------------------------------------------------------------------------COMMENT
MEDIUM…ckend/api/tests/photos/test_document_classification.py303# ---------------------------------------------------------------------------COMMENT
MEDIUM…ckend/api/tests/photos/test_document_classification.py305# ---------------------------------------------------------------------------COMMENT
MEDIUM…/photos/test_photo_file_variant_download_and_rotate.py44# ---------------------------------------------------------------------------COMMENT
MEDIUM…/photos/test_photo_file_variant_download_and_rotate.py46# ---------------------------------------------------------------------------COMMENT
MEDIUM…/photos/test_photo_file_variant_download_and_rotate.py222# ---------------------------------------------------------------------------COMMENT
MEDIUM…/photos/test_photo_file_variant_download_and_rotate.py224# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py48 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py50 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py102 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py104 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py186 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py188 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py265 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py267 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py323 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py325 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py371 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…d/api/tests/albums/test_album_auto_title_generation.py373 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/metadata/test_exif_service_get_tags.py86 # ------------------------------------------------------------------COMMENT
MEDIUM⚡…ckend/api/tests/metadata/test_exif_service_get_tags.py88 # ------------------------------------------------------------------COMMENT
37 more matches not shown…
Excessive Try-Catch Wrapping193 hits · 226 pts
SeverityFileLineSnippetContext
LOWapps/backend/nextcloud/directory_watcher.py37 except Exception:CODE
LOWapps/backend/nextcloud/directory_watcher.py156 except Exception as e:CODE
LOWapps/backend/librephotos/standalone.py507 except Exception as error:CODE
LOWapps/backend/librephotos/standalone.py667 except Exception as error:CODE
LOWapps/backend/scripts/build_ocr_bundle.py305 except Exception as exc: # pragma: no cover - network dependentCODE
LOWapps/backend/scripts/build_exiftool_wheel.py34 except Exception as error: # noqa: BLE001STRING
LOWapps/backend/api/mail.py29 except Exception:CODE
LOW⚡apps/backend/api/batch_jobs.py88 except Exception:CODE
LOW⚡apps/backend/api/batch_jobs.py95 except Exception as e:CODE
LOWapps/backend/api/batch_jobs.py153 except Exception as e:CODE
LOWapps/backend/api/batch_jobs.py164 except Exception as e:CODE
MEDIUMapps/backend/api/batch_jobs.py92def _rebuild_index_while_converting(user):CODE
LOWapps/backend/api/stack_detection.py171 except Exception as e:CODE
LOWapps/backend/api/stack_detection.py370 except Exception as e:CODE
LOWapps/backend/api/duplicate_detection.py506 except Exception as e:CODE
LOWapps/backend/api/services.py59 except Exception:CODE
LOWapps/backend/api/services.py162 except Exception as e:CODE
LOWapps/backend/api/services.py331 except Exception as e:CODE
LOWapps/backend/api/image_decoding.py78 except Exception:CODE
LOWapps/backend/api/image_decoding.py121 except Exception:CODE
LOW⚡apps/backend/api/perceptual_hash.py53 except Exception as e:CODE
LOWapps/backend/api/perceptual_hash.py99 except Exception as e:CODE
LOWapps/backend/api/screenshot_detection.py81 except Exception:CODE
LOWapps/backend/api/all_tasks.py70 except Exception:CODE
LOWapps/backend/api/all_tasks.py82 except Exception:CODE
LOWapps/backend/api/all_tasks.py178 except Exception as e:CODE
LOWapps/backend/api/all_tasks.py208 except Exception as e:CODE
MEDIUMapps/backend/api/all_tasks.py123def _remove_partial_zip(path):CODE
LOWapps/backend/api/util.py69 except Exception:CODE
LOWapps/backend/api/util.py144 except Exception:CODE
MEDIUMapps/backend/api/util.py140def is_number(s):CODE
LOWapps/backend/api/apps.py53 except Exception:CODE
LOWapps/backend/api/photo_faces.py59 except Exception as e:CODE
LOWapps/backend/api/autoalbum.py47 except Exception as e:CODE
LOWapps/backend/api/autoalbum.py213 except Exception as e:CODE
LOWapps/backend/api/autoalbum.py273 except Exception as e:CODE
LOWapps/backend/api/sync_signals.py214 except Exception:CODE
LOWapps/backend/api/stats.py402 except Exception:CODE
LOWapps/backend/api/stats.py438 except Exception:CODE
LOWapps/backend/api/stats.py491 except Exception:CODE
LOWapps/backend/api/stats.py551 except Exception:CODE
LOWapps/backend/api/stats.py569 except Exception:CODE
MEDIUMapps/backend/api/stats.py399def _location_texts(geolocation_json):CODE
LOWapps/backend/api/api_util.py26 except Exception:CODE
MEDIUMapps/backend/api/api_util.py23def has_hidden_attribute(filepath):CODE
LOWapps/backend/api/thumbnails.py281 except Exception as e:CODE
LOWapps/backend/api/thumbnails.py323 except Exception as e:CODE
LOWapps/backend/api/thumbnails.py408 except Exception as e:CODE
LOW⚡apps/backend/api/thumbnails.py435 except Exception as e:CODE
MEDIUMapps/backend/api/thumbnails.py262def create_thumbnail(CODE
MEDIUMapps/backend/api/thumbnails.py374def _remove_partial(output):CODE
MEDIUMapps/backend/api/thumbnails.py413def create_thumbnail_for_video(input_path, output_path, hash, file_type, transfeCODE
LOWapps/backend/api/ml_models.py455 except Exception:CODE
LOWapps/backend/api/ml_models.py478 except Exception as error:CODE
LOWapps/backend/api/ml_models.py494 except Exception as error:CODE
LOWapps/backend/api/ml_models.py546 except Exception:CODE
LOWapps/backend/api/face_extractor.py94 except Exception:CODE
LOWapps/backend/api/social_graph.py132 except Exception:STRING
MEDIUMapps/backend/api/social_graph.py99def build_social_graph(user):CODE
LOWapps/backend/api/stacks/live_photo.py84 except Exception as e:CODE
133 more matches not shown…
Self-Referential Comments49 hits · 172 pts
SeverityFileLineSnippetContext
MEDIUMapps/backend/librephotos/settings/production.py71# Create the directory before anything in this module writes to it. secret.keyCOMMENT
MEDIUMapps/backend/api/directory_watcher/file_handlers.py378 # Create the File record (File.create handles race conditions via unique path constraint)COMMENT
MEDIUMapps/backend/api/tests/utils.py176 # Create the photo with remaining kwargsCOMMENT
MEDIUM⚡…/backend/api/tests/stacks/test_live_photo_detection.py299 # Create a regular JPEG without embedded videoCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py272 # Create a fake motion photo fileCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py431 # Create a mock photo with existing stackCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py453 # Create a test fileCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py464 # Create a test photo with required fieldsCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py483 # Create a real video file to avoid foreign key issuesCOMMENT
MEDIUM…/backend/api/tests/stacks/test_live_photo_detection.py517 # Create a real video fileCOMMENT
MEDIUM…s/backend/api/tests/stacks/test_stack_model_and_api.py200 # Create a test stackCOMMENT
MEDIUM…ackend/api/tests/scanning/test_file_path_uniqueness.py88 # Create a temp directory for test filesCOMMENT
MEDIUM…api/tests/scanning/test_generate_tags_caption_query.py14 # Create a photo without openclip_vitb32 captionsCOMMENT
MEDIUM…api/tests/scanning/test_generate_tags_caption_query.py43 # Create a photo with openclip_vitb32 captionsCOMMENT
MEDIUM…end/api/tests/scanning/test_scan_progress_reporting.py150 # Create a temporary empty directory for testingCOMMENT
MEDIUM…pi/tests/search/test_search_term_example_generation.py127 # Create a photo with captions and geolocationCOMMENT
MEDIUM…pi/tests/search/test_search_term_example_generation.py159 # Create a photo without captionsCOMMENT
MEDIUM…pi/tests/search/test_search_term_example_generation.py191 # Create a photo with captions and geolocationCOMMENT
MEDIUM⚡…/backend/api/tests/photos/test_photo_related_models.py289 # Create a photo with search dataCOMMENT
MEDIUM⚡…/backend/api/tests/photos/test_photo_related_models.py310 # Create a photo with search dataCOMMENT
MEDIUM⚡…/backend/api/tests/photos/test_photo_related_models.py317 # Create an album date and add the photo to itCOMMENT
MEDIUM⚡…pi/tests/photos/test_photo_delete_and_trash_cleanup.py533 # Create a temp file to simulate a real fileCOMMENT
MEDIUM⚡…pi/tests/photos/test_photo_delete_and_trash_cleanup.py539 # Create a file that's only used by one photoCOMMENT
MEDIUM…pi/tests/photos/test_photo_delete_and_trash_cleanup.py486 # Create a shared fileCOMMENT
MEDIUMapps/backend/api/tests/photos/test_thumbnail_naming.py24 # Create a photo with thumbnailCOMMENT
MEDIUMapps/backend/api/tests/photos/test_thumbnail_naming.py53 # Create a photoCOMMENT
MEDIUM…s/backend/api/tests/photos/test_api_input_hardening.py42 # Create a duplicateCOMMENT
MEDIUM…nd_public/test_duplicates_and_stacks_user_isolation.py231 # Create a stack for user1COMMENT
MEDIUMapps/backend/api/tests/metadata/test_photo_metadata.py494 # Create an editCOMMENT
MEDIUM…d/api/tests/duplicates/test_duplicate_model_and_api.py477 # Create a duplicate and manually remove all but one photoCOMMENT
MEDIUM⚡…s/backend/api/tests/duplicates/test_perceptual_hash.py393 # Create a horizontal gradient patternCOMMENT
MEDIUM⚡…s/backend/api/tests/duplicates/test_perceptual_hash.py400 # Create a vertical gradient pattern (different structure)COMMENT
MEDIUM⚡…s/backend/api/tests/duplicates/test_perceptual_hash.py552 # Create a large list of hashesCOMMENT
MEDIUM⚡…s/backend/api/tests/duplicates/test_perceptual_hash.py566 # Create a CMYK imageCOMMENT
MEDIUM…nd/api/tests/duplicates/test_duplicate_list_filters.py272 # Create a pending duplicate firstCOMMENT
MEDIUM⚡…sts/duplicates/test_duplicate_and_stack_redetection.py500 # Create a photo (create_test_photo adds its own file)COMMENT
MEDIUM⚡…sts/duplicates/test_duplicate_and_stack_redetection.py509 # Create a JPEG fileCOMMENT
MEDIUM…sts/duplicates/test_duplicate_and_stack_redetection.py276 # Create a duplicateCOMMENT
MEDIUM…sts/duplicates/test_duplicate_and_stack_redetection.py306 # Create a manual stackCOMMENT
MEDIUM…sts/duplicates/test_duplicate_and_stack_redetection.py330 # Create a duplicate groupCOMMENT
MEDIUM…sts/duplicates/test_duplicate_and_stack_redetection.py363 # Create a pending duplicateCOMMENT
MEDIUM⚡…nd/api/tests/stats/test_stats_endpoints_and_helpers.py292 # Create a valid stackCOMMENT
MEDIUM⚡…nd/api/tests/stats/test_stats_endpoints_and_helpers.py300 # Create an old duplicate-type stack (should be excluded)COMMENT
MEDIUM⚡…/backend/api/tests/faces/test_social_graph_building.py24 # Create a photoCOMMENT
MEDIUM⚡…/backend/api/tests/faces/test_social_graph_building.py31 # Create a personCOMMENT
MEDIUM⚡…/backend/api/tests/faces/test_social_graph_building.py34 # Create a faceCOMMENT
MEDIUM…/backend/api/tests/faces/test_social_graph_building.py51 # Create a photoCOMMENT
MEDIUMapps/backend/api/serializers/album_date.py112 # This method is removed as we're directly including paginated photos in the response.COMMENT
MEDIUMapps/backend/api/views/photo_metadata.py169 # Create a new edit record for the revertCOMMENT
Empty Error Handlers30 hits · 150 pts
SeverityFileLineSnippetContext
HIGHapps/backend/librephotos/standalone.py354except requests.RequestException:CODE
HIGHapps/backend/librephotos/asgi.py64except ClientDisconnected:CODE
HIGHapps/backend/scripts/build_standalone.py276except OSError:CODE
HIGHapps/backend/api/services.py314except psutil.NoSuchProcess:CODE
HIGHapps/backend/api/services.py328except psutil.NoSuchProcess:CODE
HIGHapps/backend/api/image_decoding.py116except pyvips.Error:CODE
HIGHapps/backend/api/all_tasks.py70except Exception:CODE
HIGHapps/backend/api/all_tasks.py126except FileNotFoundError:CODE
HIGHapps/backend/api/burst_detection_rules.py230except (ValueError, TypeError):CODE
HIGHapps/backend/api/drf_optimize.py111except ProgrammingError:CODE
HIGHapps/backend/api/sidecars.py160except ValueError:CODE
HIGHapps/backend/api/thumbnails.py377except FileNotFoundError:CODE
HIGHapps/backend/api/transcode_cache.py108except OSError:CODE
HIGHapps/backend/api/transcode_cache.py335except OSError:CODE
HIGHapps/backend/api/face_recognition.py72except ValueError:CODE
HIGHapps/backend/api/tests/infra/test_sidecar_client.py38except OSError:CODE
HIGH…nd/api/tests/stacks/test_stack_detection_edge_cases.py584except (TypeError, AttributeError):CODE
HIGH…nd/api/tests/stacks/test_stack_detection_edge_cases.py604except (KeyError, AttributeError):CODE
HIGH…ts/scanning/test_issue_169_dangling_symlink_skipped.py54except (OSError, NotImplementedError):CODE
HIGH…ts/scanning/test_issue_124_symlinked_scan_directory.py83except (OSError, NotImplementedError):CODE
HIGH…sts/jobs/test_issue_1066_nextcloud_scan_job_failure.py70except Exception:CODE
HIGHapps/backend/api/models/photo_search.py87except Exception:CODE
HIGHapps/backend/api/views/upload.py48except (TypeError, ValueError):CODE
HIGHapps/backend/api/views/server_info.py96except Exception:CODE
HIGHapps/backend/api/views/jobs.py80except Exception:CODE
HIGHapps/backend/api/views/public_albums.py110except Exception:CODE
HIGHapps/backend/api/views/photos.py58except (ValueError, AttributeError):CODE
HIGHapps/backend/service/_common.py165except (OSError, AttributeError):CODE
HIGHapps/backend/image_similarity/retrieval_index.py119except FileNotFoundError:CODE
HIGHapps/backend/image_similarity/retrieval_index.py79except OSError:CODE
Fake / Example Data96 hits · 102 pts
SeverityFileLineSnippetContext
LOWdeploy/docker/unified/entrypoint.sh91email = os.environ.get('ADMIN_EMAIL', 'admin@example.com')CODE
LOWapps/frontend/src/locales/sk/translation.json22 "placeholder": "Minimálne hodnotenie"CODE
LOWapps/frontend/src/locales/sk/translation.json116 "placeholder": "Výsledky sémantického vyhľadávania",CODE
LOWapps/frontend/src/locales/sk/translation.json182 "placeholder": "Názov albumu",CODE
LOWapps/frontend/src/locales/pl/translation.json101 "placeholder": "Wyniki wyszukiwania semantycznego",CODE
LOWapps/frontend/src/locales/pl/translation.json111 "placeholder": "Minimalna ocena"CODE
LOWapps/frontend/src/locales/pl/translation.json421 "placeholder": "Tytuł albumu",CODE
LOWapps/frontend/src/locales/sv/translation.json101 "placeholder": "Lägsta betyg"CODE
LOWapps/frontend/src/locales/sv/translation.json115 "placeholder": "Semantiska sökresultat",CODE
LOWapps/frontend/src/locales/sv/translation.json203 "placeholder": "Albumtitel"CODE
LOWapps/frontend/src/locales/da/translation.json131 "placeholder": "Semantisk søgning resultater",CODE
LOWapps/frontend/src/locales/da/translation.json141 "placeholder": "Minimum vurdering"CODE
LOWapps/frontend/src/locales/pt_BR/translation.json78 "placeholder": "Máximo de resultados de pesquisa semântica",CODE
LOWapps/frontend/src/locales/pt_BR/translation.json95 "placeholder": "Classificação mínima"CODE
LOWapps/frontend/src/locales/pt_BR/translation.json272 "placeholder": "Título do álbum",CODE
LOWapps/frontend/src/locales/ja/translation.json76 "placeholder": "セマンティック検索結果",CODE
LOWapps/frontend/src/locales/ja/translation.json85 "placeholder": "最小レート"CODE
LOWapps/frontend/src/locales/it/translation.json84 "placeholder": "Minimo voto"CODE
LOWapps/frontend/src/locales/it/translation.json148 "placeholder": "Risultati ricerca semantica",CODE
LOWapps/frontend/src/locales/it/translation.json340 "placeholder": "Titolo album"CODE
LOWapps/frontend/src/locales/nb_NO/translation.json82 "placeholder": "Semantiske søkeresultater",CODE
LOWapps/frontend/src/locales/nb_NO/translation.json100 "placeholder": "Minimumsvurdering"CODE
LOWapps/frontend/src/locales/nb_NO/translation.json619 "placeholder": "Albumsnavn",CODE
LOWapps/frontend/src/locales/cs/translation.json100 "placeholder": "Výsledky sémantického vyhledávání",CODE
LOWapps/frontend/src/locales/cs/translation.json109 "placeholder": "Minimální hodnocení"CODE
LOWapps/frontend/src/locales/cs/translation.json170 "placeholder": "Název alba",CODE
LOWapps/frontend/src/locales/zh_Hans/translation.json85 "placeholder": "语义化搜索结果",CODE
LOWapps/frontend/src/locales/zh_Hans/translation.json95 "placeholder": "最低等级"CODE
LOWapps/frontend/src/locales/zh_Hans/translation.json646 "placeholder": "相册标题",CODE
LOWapps/frontend/src/locales/ru/translation.json106 "placeholder": "Результаты семантического поиска",CODE
LOWapps/frontend/src/locales/ru/translation.json116 "placeholder": "Минимальный рейтинг"CODE
LOWapps/frontend/src/locales/ru/translation.json206 "placeholder": "Название альбома",CODE
LOWapps/frontend/src/locales/zh_Hant/translation.json98 "placeholder": "最低評級"CODE
LOWapps/frontend/src/locales/zh_Hant/translation.json163 "placeholder": "相冊名稱"CODE
LOWapps/frontend/src/locales/pt/translation.json47 "placeholder": "Resultados da pesquisa semântica",CODE
LOWapps/frontend/src/locales/pt/translation.json105 "placeholder": "Classificação mínima"CODE
LOWapps/frontend/src/locales/pt/translation.json323 "placeholder": "Título do álbum",CODE
LOWapps/frontend/src/locales/pt/translation.json944 "placeholder": "Procurar fotos, correr comandos...",CODE
LOWapps/frontend/src/locales/uk/translation.json108 "placeholder": "Результати семантичного пошуку"CODE
LOWapps/frontend/src/locales/uk/translation.json140 "placeholder": "Мінімальний рейтинг"CODE
LOWapps/frontend/src/locales/uk/translation.json234 "placeholder": "Назва альбому",CODE
LOWapps/frontend/src/locales/nl/translation.json106 "placeholder": "Semantische zoekresultaten",CODE
LOWapps/frontend/src/locales/nl/translation.json118 "placeholder": "Minimale waardering"CODE
LOWapps/frontend/src/locales/nl/translation.json651 "placeholder": "Albumnaam",CODE
LOWapps/frontend/src/locales/hi/translation.json145 "placeholder": "सिमेंटिक खोज परिणाम"CODE
LOWapps/frontend/src/locales/hi/translation.json151 "placeholder": "न्यूनतम रेटिंग"CODE
LOWapps/frontend/src/locales/hi/translation.json454 "placeholder": "एल्बम का शीर्षक",CODE
LOWapps/frontend/src/locales/de/translation.json93 "placeholder": "Anzahl der Resultate",CODE
LOWapps/frontend/src/locales/de/translation.json103 "placeholder": "Minimale Bewertung"CODE
LOWapps/frontend/src/locales/de/translation.json661 "placeholder": "Albumtitel",CODE
LOWapps/frontend/src/locales/ko/translation.json142 "placeholder": "시맨틱(의미 기반) 검색 결과",CODE
LOWapps/frontend/src/locales/ko/translation.json152 "placeholder": "최소 평점"CODE
LOWapps/frontend/src/locales/ko/translation.json239 "placeholder": "앨범 제목",CODE
LOWapps/frontend/src/locales/fi/translation.json97 "placeholder": "Semanttiset hakutulokset"CODE
LOWapps/frontend/src/locales/fi/translation.json114 "placeholder": "Vähimmäisarvosana"CODE
LOWapps/frontend/src/locales/fi/translation.json163 "placeholder": "Albumin otsikko",CODE
LOWapps/frontend/src/locales/eo/translation.json183 "placeholder": "Titolo de albumo",CODE
LOWapps/frontend/src/locales/fr/translation.json93 "placeholder": "Résultat recherche sémantique",CODE
LOWapps/frontend/src/locales/fr/translation.json103 "placeholder": "Note minimale"CODE
LOWapps/frontend/src/locales/fr/translation.json632 "placeholder": "Titre de l'album",CODE
36 more matches not shown…
Hallucination Indicators8 hits · 85 pts
SeverityFileLineSnippetContext
CRITICALapps/backend/api/photo_faces.py76 api.models.face.Face.objects.filter(photo=photo).values_list(CODE
CRITICALapps/backend/api/photo_faces.py129 for existing_face in api.models.face.Face.objects.filter(photo=photo):CODE
CRITICAL…ests/photos/test_thumbnail_creation_and_orientation.py258 self.pyvips.Image.thumbnail.return_value.write_to_file.assert_called_once_with(CODE
CRITICAL⚡apps/backend/api/models/photo_caption.py195 return api.models.album_thing.AlbumThing.objects.filter(CODE
CRITICALapps/backend/api/serializers/person.py3from django.core.exceptions import ValidationError as DjangoValidationErrorCODE
CRITICALapps/backend/api/views/password_reset.py6from django.core.exceptions import ValidationErrorCODE
CRITICALapps/backend/api/views/public_albums.py1from django.core.exceptions import ValidationErrorCODE
CRITICALapps/backend/api/geocode/photo_location.py33 return api.models.album_place.AlbumPlace.objects.filter(Q(photos__in=[photo])).all()CODE
Modern Structural Boilerplate78 hits · 78 pts
SeverityFileLineSnippetContext
LOWapps/backend/nextcloud/directory_watcher.py13logger = logging.getLogger(__name__)CODE
LOWapps/backend/nextcloud/views.py20logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/mail.py20logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/batch_jobs.py16logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/stack_detection.py40logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/image_similarity.py20logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/duplicate_detection.py36logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/services.py18logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/date_time_extractor.py13logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/perceptual_hash.py22logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/all_tasks.py13logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/util.py14logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/photo_files.py12logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/apps.py7logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/photo_faces.py24logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/autoalbum.py20logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/video_color.py43logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/stats.py33logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/burst_detection_rules.py25logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/ffmpeg_budget.py44logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/face_classify.py22logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/api_util.py10logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/thumbnails.py19logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/transcode_cache.py41logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/cluster_manager.py14logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/filters.py16logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/ml_models.py16logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/face_extractor.py13logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/social_graph.py10logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/stacks/__init__.py22__all__ = [CODE
LOWapps/backend/api/stacks/live_photo.py25logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/directory_watcher/scan_jobs.py52logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/directory_watcher/processing_jobs.py34logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/directory_watcher/__init__.py70__all__ = [CODE
LOWapps/backend/api/directory_watcher/utils.py16logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/directory_watcher/file_handlers.py50logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/directory_watcher/repair_jobs.py15logger = logging.getLogger(__name__)CODE
LOW…/api/tests/users_and_auth/test_user_api_permissions.py12logger = logging.getLogger(__name__)CODE
LOW…nd/api/tests/photos/test_bulk_select_all_operations.py17logger = logging.getLogger(__name__)CODE
LOW…tests/sharing_and_public/test_authorization_scoping.py18logger = logging.getLogger(__name__)CODE
LOW…ests/sharing_and_public/test_photo_sharing_endpoint.py9logger = logging.getLogger(__name__)CODE
LOW…sts/sharing_and_public/test_photo_public_visibility.py10logger = logging.getLogger(__name__)CODE
LOW…d/api/management/commands/start_job_cleanup_service.py7logger = logging.getLogger(__name__)CODE
LOW…kend/api/management/commands/start_cleaning_service.py7logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/photo_search.py5logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/thumbnail.py12logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/__init__.py27__all__ = [CODE
LOWapps/backend/api/models/file.py10logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/cluster.py14logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/photo_caption.py16logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/album_auto.py11logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/models/photo_metadata.py28logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/serializers/user.py22logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/serializers/person.py11logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/serializers/album_user.py21logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/serializers/photos.py23logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/views/sharing.py18logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/views/duplicates.py27logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/views/user.py26logger = logging.getLogger(__name__)CODE
LOWapps/backend/api/views/media.py28logger = logging.getLogger(__name__)CODE
18 more matches not shown…
Unused Imports77 hits · 68 pts
SeverityFileLineSnippetContext
LOWapps/backend/librephotos/settings/standalone.py12CODE
LOWapps/backend/librephotos/settings/production_noproxy.py27CODE
LOWapps/backend/librephotos/settings/development.py1CODE
LOWapps/backend/librephotos/settings/test.py5CODE
LOWapps/backend/librephotos/settings/dev_windows.py6CODE
LOWapps/backend/librephotos/settings/test_sqlite.py8CODE
LOWapps/backend/scripts/calibrate_openclip.py34CODE
LOWapps/backend/scripts/build_ocr_bundle.py38CODE
LOWapps/backend/scripts/build_openclip_onnx.py42CODE
LOWapps/backend/api/image_decoding.py10CODE
LOWapps/backend/api/face_classify.py1CODE
LOWapps/backend/api/thumbnails.py1CODE
LOWapps/backend/api/cluster_manager.py1CODE
LOWapps/backend/api/stacks/__init__.py14CODE
LOWapps/backend/api/stacks/__init__.py14CODE
LOWapps/backend/api/stacks/__init__.py14CODE
LOWapps/backend/api/stacks/__init__.py14CODE
LOWapps/backend/api/stacks/__init__.py14CODE
LOWapps/backend/api/stacks/live_photo.py29CODE
LOWapps/backend/api/directory_watcher/__init__.py16CODE
LOWapps/backend/api/directory_watcher/__init__.py16CODE
LOWapps/backend/api/directory_watcher/__init__.py16CODE
LOWapps/backend/api/directory_watcher/__init__.py23CODE
LOWapps/backend/api/directory_watcher/__init__.py23CODE
LOWapps/backend/api/directory_watcher/__init__.py23CODE
LOWapps/backend/api/directory_watcher/__init__.py23CODE
LOWapps/backend/api/directory_watcher/__init__.py23CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py32CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py42CODE
LOWapps/backend/api/directory_watcher/__init__.py54CODE
LOWapps/backend/api/directory_watcher/__init__.py59CODE
LOWapps/backend/api/directory_watcher/__init__.py59CODE
LOWapps/backend/api/directory_watcher/__init__.py59CODE
LOWapps/backend/api/directory_watcher/__init__.py59CODE
LOWapps/backend/api/directory_watcher/__init__.py59CODE
LOWapps/backend/api/directory_watcher/__init__.py68CODE
LOW…backend/api/tests/search/test_retrieval_index_build.py58CODE
LOWapps/backend/api/models/__init__.py1CODE
LOWapps/backend/api/models/__init__.py2CODE
LOWapps/backend/api/models/__init__.py3CODE
LOWapps/backend/api/models/__init__.py4CODE
LOWapps/backend/api/models/__init__.py5CODE
LOWapps/backend/api/models/__init__.py6CODE
LOWapps/backend/api/models/__init__.py7CODE
LOWapps/backend/api/models/__init__.py8CODE
LOWapps/backend/api/models/__init__.py9CODE
LOWapps/backend/api/models/__init__.py10CODE
LOWapps/backend/api/models/__init__.py11CODE
17 more matches not shown…
Deep Nesting47 hits · 42 pts
SeverityFileLineSnippetContext
LOWapps/backend/nextcloud/directory_watcher.py105CODE
LOWapps/backend/api/stack_detection.py204CODE
LOWapps/backend/api/date_time_extractor.py294CODE
LOWapps/backend/api/thumbnail_metadata.py155CODE
LOWapps/backend/api/autoalbum.py54CODE
LOWapps/backend/api/sync_signals.py142CODE
LOWapps/backend/api/sync_signals.py177CODE
LOWapps/backend/api/sync_signals.py143CODE
LOWapps/backend/api/admin.py30CODE
LOWapps/backend/api/stats.py475CODE
LOWapps/backend/api/burst_detection_rules.py235CODE
LOWapps/backend/api/ml_models.py263CODE
LOWapps/backend/api/stacks/live_photo.py89CODE
LOWapps/backend/api/stacks/live_photo.py314CODE
LOWapps/backend/api/directory_watcher/processing_jobs.py504CODE
LOWapps/backend/api/directory_watcher/processing_jobs.py644CODE
LOWapps/backend/api/directory_watcher/utils.py116CODE
LOWapps/backend/api/directory_watcher/repair_jobs.py46CODE
LOWapps/backend/api/tests/utils.py231CODE
LOW…/backend/api/tests/infra/test_logging_configuration.py330CODE
LOW…nd/api/tests/infra/test_requirements_windows_wheels.py24CODE
LOWapps/backend/api/tests/infra/test_sidecar_urls.py23CODE
LOWapps/backend/api/tests/infra/test_sidecar_urls.py47CODE
LOWapps/backend/api/tests/infra/test_sidecar_urls.py61CODE
LOW…sts/media_serving/test_thumbnail_serving_addressing.py84CODE
LOW…sts/media_serving/test_thumbnail_serving_addressing.py102CODE
LOW…sts/media_serving/test_thumbnail_serving_addressing.py164CODE
LOW…sts/media_serving/test_thumbnail_serving_addressing.py186CODE
LOW…l_services/test_ml_model_requirements_and_downloads.py292CODE
LOW…l_services/test_ml_model_requirements_and_downloads.py492CODE
LOW…i/tests/ml_services/test_ml_model_download_pipeline.py140CODE
LOW…i/tests/ml_services/test_ml_model_download_pipeline.py269CODE
LOW…i/tests/ml_services/test_ml_model_download_pipeline.py434CODE
LOW…i/tests/ml_services/test_ml_model_download_pipeline.py448CODE
LOW…i/tests/ml_services/test_ml_model_download_pipeline.py636CODE
LOW…i/tests/sharing_and_public/test_cross_tenant_writes.py510CODE
LOW…/api/tests/metadata/test_xmp_description_extraction.py53CODE
LOW…end/api/tests/metadata/test_iptc_keyword_extraction.py53CODE
LOW…s/backend/api/tests/duplicates/test_perceptual_hash.py580CODE
LOW…/backend/api/tests/faces/test_face_region_writeback.py94CODE
LOWapps/backend/api/models/photo_stack.py124CODE
LOWapps/backend/api/views/jobs.py51CODE
LOWapps/backend/api/views/exception_handler.py7CODE
LOWapps/backend/api/metadata/face_regions.py23CODE
LOWapps/backend/api/metadata/writer.py13CODE
LOWapps/backend/service/exif/main.py89CODE
LOWapps/backend/service/image_captioning/lfm2_vl.py195CODE
Structural Annotation Overuse25 hits · 41 pts
SeverityFileLineSnippetContext
LOWapps/backend/CONTRIBUTING.md26### Step 1: Clone the MonorepoCOMMENT
LOWapps/backend/CONTRIBUTING.md50### Step 2: Configure EnvironmentCOMMENT
LOWapps/backend/CONTRIBUTING.md72### Step 3: Start the Development EnvironmentCOMMENT
LOWapps/backend/CONTRIBUTING.md314### Step 1: Fork the RepositoryCOMMENT
LOWapps/backend/CONTRIBUTING.md326### Step 2: Create a Feature BranchCOMMENT
LOWapps/backend/CONTRIBUTING.md336### Step 3: Make Your ChangesCOMMENT
LOWapps/backend/CONTRIBUTING.md354### Step 4: Push and Create Pull RequestCOMMENT
LOWapps/backend/CONTRIBUTING.md369### Step 5: Respond to ReviewCOMMENT
LOW⚡…/backend/api/tests/faces/test_face_region_writeback.py230 # Step 1: Convert pixel -> normalized (writeback path)COMMENT
LOW⚡…/backend/api/tests/faces/test_face_region_writeback.py240 # Step 2: Simulate read-back (face_extractor.py lines 82-90)COMMENT
LOWapps/docs/docs/user-guide/first-steps.md11### Step 1: Create Your Admin AccountCOMMENT
LOWapps/docs/docs/user-guide/first-steps.md24### Step 2: Site SettingsCOMMENT
LOWapps/docs/docs/user-guide/first-steps.md33### Step 3: Configure Your Scan DirectoryCOMMENT
LOWapps/docs/docs/user-guide/offline-setup.md9### Step 1: Download the Models ManuallyCOMMENT
LOWapps/docs/docs/user-guide/offline-setup.md31### Step 2: Place the Models in the Correct LocationCOMMENT
LOWapps/docs/docs/user-guide/offline-setup.md45### Step 3: Verify Model PlacementCOMMENT
LOWapps/docs/docs/user-guide/offline-setup.md70### Step 4: Turn Off the Online Map ServicesCOMMENT
LOWapps/docs/docs/user-guide/offline-setup.md77### Step 5: Run LibrePhotosCOMMENT
LOW⚡apps/docs/docs/user-guide/places.md66### Step 1: Configure Map Providers (Optional)COMMENT
LOW⚡apps/docs/docs/user-guide/places.md74### Step 2: Scan Your PhotosCOMMENT
LOW⚡apps/docs/docs/user-guide/places.md82### Step 3: View Your PlacesCOMMENT
LOWapps/docs/docs/development/dev-install.md27### Step 1: Clone the MonorepoCOMMENT
LOWapps/docs/docs/development/dev-install.md51### Step 2: Configure EnvironmentCOMMENT
LOWapps/docs/docs/development/dev-install.md70### Step 3: Start Development EnvironmentCOMMENT
LOWapps/docs/docs/development/dev-install.md82### Step 4: Access LibrePhotosCOMMENT
Cross-Language Confusion6 hits · 31 pts
SeverityFileLineSnippetContext
HIGH…backend/api/tests/infra/test_constance_admin_config.py47 undefined,CODE
HIGH…s/scanning/test_issue_1030_nextcloud_listdir_errors.py31``disabled={isNextcloudError || isNextcloudFetching || !nextcloud_server_address}``,STRING
HIGH⚡…api/tests/search/test_search_list_media_type_filter.py74 # Not null, as album details send: installed mobile apps parse thisCOMMENT
HIGH…ring_and_public/test_public_photo_detail_dimensions.py4sent as null, which the public client's schema rejects, so a visitor lost theSTRING
HIGHapps/backend/api/views/sync.py10 "next_cursor": "<b64>" | null, # null => caught up (stop looping)STRING
HIGHapps/backend/api/views/search.py19# null, but the web and mobile search schemas require a string here, and nullCOMMENT
Over-Commented Block26 hits · 26 pts
SeverityFileLineSnippetContext
LOWdeploy/docker/unified/entrypoint.sh1#!/bin/bashCOMMENT
LOWdeploy/docker/backend-gpu/entrypoint.sh21# every font on each start. Keep it on our own volume instead; this is the sameCOMMENT
LOWdeploy/k8s/ingress.yaml41# spec:COMMENT
LOWdeploy/compose/docker-compose.e2e.yml1# End-to-end stack for the Playwright suite in apps/frontend/e2e.COMMENT
LOWapps/frontend/tsc-baseline.txt1# TypeScript error baseline for `yarn typecheck` (scripts/typecheck-ratchet.mjs).COMMENT
LOWapps/frontend/src/api_client/user/types.ts1import type { ManageUser, User } from "@librephotos/api-client";COMMENT
LOWapps/frontend/src/util/maplibreWorker.ts1import { setWorkerUrl } from "maplibre-gl";COMMENT
LOWapps/frontend/src/components/react-pig/index.tsx81// }COMMENT
LOWapps/frontend/src/components/react-pig/utils/getUrl.ts1// This is the default getUrl function, which you can overwrite using a prop;COMMENT
LOWapps/frontend/src/components/lightbox/MediaDisplay.tsx121COMMENT
LOWapps/backend/requirements.txt101# pyclipper: polygon offsetting for the PP-OCRv6 detector's DBPostProcessCOMMENT
LOWapps/backend/pyproject.toml1[tool.ruff]COMMENT
LOWapps/backend/librephotos/settings/test.py1import tempfileCOMMENT
LOWapps/backend/librephotos/settings/production.py21COMMENT
LOWapps/backend/librephotos/settings/production.py41# Set the size to 0 to switch caching off and keep only the live streaming.COMMENT
LOWapps/backend/librephotos/settings/production.py581)COMMENT
LOWapps/backend/librephotos/settings/production.py621# would bypass the throttling and address-enumeration protections onCOMMENT
LOWapps/backend/scripts/build_ocr_bundle.py401 newline="\n",COMMENT
LOWapps/backend/api/autoalbum.py101 job_id,COMMENT
LOWapps/backend/api/video_color.py41from api import ffmpeg_budgetCOMMENT
LOWapps/backend/api/video_color.py81COMMENT
LOWapps/backend/api/directory_watcher/scan_jobs.py421 #COMMENT
LOWapps/backend/api/directory_watcher/file_handlers.py801COMMENT
LOWapps/backend/api/models/photo_stack.py41 class StackType(models.TextChoices):COMMENT
LOWapps/backend/api/views/media.py81 watching this one, so it should outrank the background work rather thanCOMMENT
LOWapps/backend/api/metadata/__init__.py1# api/metadata — organized metadata reading, writing, and tag constants.COMMENT
Redundant / Tautological Comments15 hits · 22 pts
SeverityFileLineSnippetContext
LOWdeploy/docker/unified/entrypoint.sh36# Check if we should serve frontendCOMMENT
LOWdeploy/docker/unified/entrypoint.sh81# Check if we need to create a superuserCOMMENT
LOWdeploy/compose/build-unified.sh10# Check if we're in the right directoryCOMMENT
LOWapps/backend/api/photo_files.py53 # Check if this file is used by other Photos (via files M2M or as main_file)COMMENT
LOWapps/backend/api/burst_detection_rules.py376 # Check if same camera (if required)COMMENT
LOWapps/backend/api/face_classify.py287 if len(encoding) == expected_shape: # Check if shape is consistentCODE
LOWapps/backend/api/stacks/live_photo.py272 # Check if video is already a known photo/fileCOMMENT
LOWapps/backend/api/directory_watcher/file_handlers.py454 # Check if a Photo already exists with any of these files. Matching onCOMMENT
LOW…/api/tests/duplicates/test_duplicate_api_edge_cases.py409 # Check if duplicate still exists (might be deleted due to Bug #12 fix)COMMENT
LOWapps/backend/api/models/file.py86 # Check if a File with this path already existsCOMMENT
LOWapps/backend/api/models/duplicate.py274 # Check if any photo is already in a duplicate group of the same typeCOMMENT
LOWapps/backend/api/models/photo_stack.py216 # Check if any photo is already in a stack of the same typeCOMMENT
LOWapps/backend/api/serializers/photos.py805 # Check if this is the main fileCOMMENT
LOWapps/backend/api/views/stacks.py453 # Check if any photo is already in a manual stackCOMMENT
LOWapps/backend/image_similarity/retrieval_index.py173 # Check if we have any embeddings to processCOMMENT
AI Slop Vocabulary4 hits · 13 pts
SeverityFileLineSnippetContext
MEDIUM⚡apps/backend/api/perceptual_hash.py50 # More robust than average hash or difference hashCOMMENT
MEDIUMapps/backend/api/screenshot_detection.py41 """Lower-case and fold separators/apostrophes so prefix matching is robustSTRING
MEDIUM⚡…ps/backend/api/tests/search/test_photo_search_model.py183 # Create comprehensive test dataCOMMENT
MEDIUMapps/backend/api/serializers/photos.py123 # Use len() instead of .count() to leverage prefetched embedded_mediaCOMMENT
AI Structural Patterns8 hits · 8 pts
SeverityFileLineSnippetContext
LOWapps/backend/api/stats.py323CODE
LOWapps/backend/api/social_graph.py148CODE
LOWapps/backend/api/tests/utils.py55CODE
LOW…d/api/tests/scanning/test_scan_photos_orchestration.py82CODE
LOWapps/backend/api/serializers/person.py36CODE
LOWapps/backend/api/serializers/album_user.py80CODE
LOWapps/backend/api/serializers/album_thing.py33CODE
LOWapps/backend/api/serializers/album_place.py34CODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHapps/backend/api/models/user.py52 "share_captions": False, # AI-generated or user captionsCODE
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHapps/backend/api/views/photo_filters.py16The user's own photos matching a select_all ``query`` payload. This is the write scope behind every server-side "SeSTRING
Verbosity Indicators2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡…/backend/api/tests/faces/test_face_region_writeback.py230 # Step 1: Convert pixel -> normalized (writeback path)COMMENT
LOW⚡…/backend/api/tests/faces/test_face_region_writeback.py240 # Step 2: Simulate read-back (face_extractor.py lines 82-90)COMMENT
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOW⚡…ests/infra/test_drf_queryset_optimization_metaclass.py319 def helper(self):CODE
LOWapps/backend/api/tests/jobs/test_zip_photos_task.py113 def run_task(self, photos, filename="download.zip", job=None):CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWapps/backend/scripts/setup_test_env.sh5# Usage:COMMENT