Repository Analysis

immich-app/immich

High performance self-hosted photo and video management solution.

1.0 Likely human-written View on GitHub
1.0
Adjusted Score
1.0
Raw Score
100%
Time Factor
2026-05-30
Last Push
102,245
Stars
TypeScript
Language
603,812
Lines of Code
3070
Files
560
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 1HIGH 10MEDIUM 4LOW 545

Pattern Findings

560 matches across 14 categories. Click a row to expand file-level details.

Over-Commented Block428 hits · 426 pts
SeverityFileLineSnippet
LOWmisc/release/pump-version.sh1#!/usr/bin/env bash
LOWdocker/docker-compose.rootless.yml1#
LOWdocker/docker-compose.dev.yml1#
LOWdocker/docker-compose.dev.yml181 # ports:
LOWdocker/docker-compose.yml1#
LOWdocker/docker-compose.prod.yml1#
LOWweb/src/lib/utils/container-utils.ts1// Coordinate spaces used throughout the viewer:
LOWweb/src/lib/components/AdaptiveImage.svelte1<script module lang="ts">
LOWserver/src/services/album.service.spec.ts1341 await expect(sut.removeAssets(AuthFactory.create(owner), album.id, { ids: [asset1.id] })).resolves.toEqual([
LOWserver/src/services/album.service.spec.ts1361 // // ),
LOWmobile/analysis_options.yaml1# This file configures the analyzer, which statically analyzes Dart code to
LOWmobile/flutter_native_splash.yaml1flutter_native_splash:
LOWmobile/flutter_native_splash.yaml21 image: assets/immich-splash.png
LOWmobile/flutter_native_splash.yaml41
LOWmobile/flutter_native_splash.yaml61 # The branding property allows you to specify an image used as branding in the splash screen.
LOWmobile/flutter_native_splash.yaml81 #color_ios: "#42a5f5"
LOWmobile/flutter_native_splash.yaml101
LOWmobile/flutter_native_splash.yaml121 # Valid parameters can be found here:
LOWmobile/openapi/README.md41import 'package:openapi/api.dart';
LOWmobile/openapi/lib/auth/authentication.dart1//
LOWmobile/openapi/lib/model/o_auth_callback_dto.dart21 /// OAuth code verifier (PKCE)
LOWmobile/openapi/lib/model/maintenance_login_dto.dart1//
LOWmobile/openapi/lib/model/people_update.dart21 ///
LOWmobile/openapi/lib/model/server_stats_response_dto.dart21 required this.videos,
LOWmobile/openapi/lib/model/statistics_search_dto.dart61 ///
LOWmobile/openapi/lib/model/statistics_search_dto.dart81
LOWmobile/openapi/lib/model/statistics_search_dto.dart101 ///
LOWmobile/openapi/lib/model/statistics_search_dto.dart141 /// Please note: This property should have been non-nullable! Since the specification file
LOWmobile/openapi/lib/model/statistics_search_dto.dart161 List<String>? tagIds;
LOWmobile/openapi/lib/model/statistics_search_dto.dart181 /// Filter by trash date (after)
LOWmobile/openapi/lib/model/statistics_search_dto.dart201 /// does not include a default value (using the "default:" property), however, the generated
LOW…/openapi/lib/model/person_statistics_response_dto.dart1//
LOW…/openapi/lib/model/asset_bulk_upload_check_result.dart21 });
LOWmobile/openapi/lib/model/video_container.dart1//
LOWmobile/openapi/lib/model/user_admin_update_dto.dart41 /// does not include a default value (using the "default:" property), however, the generated
LOWmobile/openapi/lib/model/user_admin_update_dto.dart61 /// Consider adding a "default:" property in the specification file to hide this note.
LOW…bile/openapi/lib/model/email_notifications_update.dart21 /// Whether to receive email notifications for album invites
LOWmobile/openapi/lib/model/memory_response_dto.dart41 /// does not include a default value (using the "default:" property), however, the generated
LOWmobile/openapi/lib/model/memory_response_dto.dart61
LOWmobile/openapi/lib/model/asset_media_size.dart1//
LOWmobile/openapi/lib/model/person_update_dto.dart21 this.name,
LOWmobile/openapi/lib/model/person_update_dto.dart41 /// Please note: This property should have been non-nullable! Since the specification file
LOWmobile/openapi/lib/model/places_response_dto.dart21 });
LOWmobile/openapi/lib/model/system_config_user_dto.dart1//
LOW…ile/openapi/lib/model/user_preferences_update_dto.dart41 /// source code must fall back to having a nullable type.
LOW…ile/openapi/lib/model/user_preferences_update_dto.dart61
LOW…ile/openapi/lib/model/user_preferences_update_dto.dart81 /// source code must fall back to having a nullable type.
LOW…ile/openapi/lib/model/user_preferences_update_dto.dart101
LOWmobile/openapi/lib/model/asset_reject_reason.dart1//
LOWmobile/openapi/lib/model/asset_edit_action.dart1//
LOWmobile/openapi/lib/model/sync_asset_face_v2.dart41 /// Minimum value: -9007199254740991
LOWmobile/openapi/lib/model/shared_link_type.dart1//
LOWmobile/openapi/lib/model/on_this_day_dto.dart1//
LOWmobile/openapi/lib/model/album_user_role.dart1//
LOWmobile/openapi/lib/model/sync_asset_exif_v1.dart61 /// Maximum value: 9007199254740991
LOWmobile/openapi/lib/model/metadata_search_dto.dart61 List<String> albumIds;
LOWmobile/openapi/lib/model/metadata_search_dto.dart81 /// does not include a default value (using the "default:" property), however, the generated
LOWmobile/openapi/lib/model/metadata_search_dto.dart101 /// Consider adding a "default:" property in the specification file to hide this note.
LOWmobile/openapi/lib/model/metadata_search_dto.dart121 String? id;
LOWmobile/openapi/lib/model/metadata_search_dto.dart141 /// Filter by motion photo status
368 more matches not shown…
Hyper-Verbose Identifiers97 hits · 90 pts
SeverityFileLineSnippet
LOW…agers/timeline-manager/timeline-manager.svelte.spec.ts20function deriveLocalDateTimeFromFileCreatedAt(arg: TimelineAsset): TimelineAsset {
LOW…ers/timeline-manager/internal/search-support.svelte.ts39export function findTimelineMonthForAsset(timelineManager: TimelineManager, id: string) {
LOW…ers/timeline-manager/internal/search-support.svelte.ts158export function findClosestTimelineMonthForDate(months: TimelineMonth[], targetYearMonth: TimelineYearMonth) {
LOW…meline-manager/internal/intersection-support.svelte.ts31function calculateViewportProximity(regionTop: number, regionBottom: number, windowTop: number, windowBottom: number) {
LOW…meline-manager/internal/intersection-support.svelte.ts43export function updateTimelineMonthViewportProximity(timelineManager: TimelineManager, month: TimelineMonth) {
LOWweb/src/lib/modals/timezone-utils.ts53export function getModernOffsetForZoneAndDate(
LOWweb/src/lib/utils/container-utils.ts98export function mapNormalizedRectToContent(
LOWweb/src/lib/utils/layout-utils.ts30export function getJustifiedLayoutFromAssets(
LOWweb/src/lib/utils/actions.ts70export function updateStackedAssetInTimeline(timelineManager: TimelineManager, { stack, toDeleteIds }: StackResponse) {
LOWweb/src/lib/utils/actions.ts94export function updateUnstackedAssetInTimeline(timelineManager: TimelineManager, assets: TimelineAsset[]) {
LOWweb/src/lib/utils/maintenance.ts14export function maintenanceShouldRedirect(maintenanceMode: boolean, currentUrl: URL | Location) {
LOW…hared-components/search-bar/SearchPeopleSection.svelte25 function orderBySelectedPeopleFirst(people: PersonResponseDto[]) {
LOW…)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte170 function getHumanReadableSearchKey(key: keyof SearchTerms): string {
LOWserver/src/utils/file.ts11export function getFileNameWithoutExtension(path: string): string {
LOWserver/src/utils/file.ts19export function getLivePhotoMotionFilename(stillName: string, motionName: string) {
LOWserver/src/utils/database-backups.ts1export function isValidDatabaseBackupName(filename: string) {
LOWserver/src/utils/database-backups.ts5export function isValidDatabaseRoutineBackupName(filename: string) {
LOWserver/src/utils/database-backups.ts12export function isFailedDatabaseBackupName(filename: string) {
LOWserver/src/utils/database-backups.ts16export function findDatabaseBackupVersion(filename: string) {
LOWserver/src/utils/maintenance.ts9export async function createMaintenanceLoginUrl(
LOWserver/src/utils/maintenance.ts27export function generateMaintenanceSecret(): string {
LOWserver/src/dtos/editing.dto.ts67function getExpectedKeysByActionMessage(): string {
LOWserver/src/dtos/editing.dto.ts75function isParametersValidForAction(edit: z.infer<typeof AssetEditActionItemSchema>): boolean {
LOWpackages/sdk/src/fetch-client.ts3288export function unlinkAllOAuthAccountsAdmin(opts?: Oazapfts.RequestOpts) {
LOWpackages/sdk/src/fetch-client.ts3418export function getNotificationTemplateAdmin({ name, templateDto }: {
LOWpackages/sdk/src/fetch-client.ts3539export function updateUserPreferencesAdmin({ id, userPreferencesUpdateDto }: {
LOWpackages/sdk/src/fetch-client.ts6136export function getStorageTemplateOptions(opts?: Oazapfts.RequestOpts) {
LOWpackages/plugin-core/src/index.d.ts15 export function assetMissingTimeZoneFilter(): I32;
LOWmachine-learning/test_main.py51 def test_sets_default_worker_timeout(self, monkeypatch: MonkeyPatch) -> None:
LOWmachine-learning/test_main.py57 def test_sets_rocm_default_worker_timeout(self, monkeypatch: MonkeyPatch) -> None:
LOWmachine-learning/test_main.py63 def test_worker_timeout_env_override(self, monkeypatch: MonkeyPatch) -> None:
LOWmachine-learning/test_main.py69 def test_sets_default_cache_dir(self) -> None:
LOWmachine-learning/test_main.py74 def test_sets_cache_dir_kwarg(self) -> None:
LOWmachine-learning/test_main.py80 def test_sets_default_model_format(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py88 def test_sets_default_model_format_to_armnn_if_available(self, path: mock.Mock, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py97 def test_sets_model_format_kwarg(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py105 def test_sets_default_model_format_to_rknn_if_available(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py113 def test_casts_cache_dir_string_to_path(self) -> None:
LOWmachine-learning/test_main.py225 def test_sets_cuda_provider_if_available(self, providers: list[str]) -> None:
LOWmachine-learning/test_main.py232 def test_sets_openvino_provider_if_available(self, providers: list[str], ov_device_ids: list[str]) -> None:
LOWmachine-learning/test_main.py238 def test_sets_providers_in_correct_order(self, providers: list[str]) -> None:
LOWmachine-learning/test_main.py244 def test_ignores_unsupported_providers(self, providers: list[str]) -> None:
LOWmachine-learning/test_main.py366 def test_sets_provider_options_kwarg(self) -> None:
LOWmachine-learning/test_main.py375 def test_sets_default_sess_options_if_cpu(self) -> None:
LOWmachine-learning/test_main.py383 def test_sets_default_sess_options_if_openvino_cpu(self, ov_device_ids: list[str]) -> None:
LOWmachine-learning/test_main.py392 def test_sets_default_sess_options_if_openvino_gpu(self, ov_device_ids: list[str]) -> None:
LOWmachine-learning/test_main.py399 def test_sets_default_sess_options_does_not_set_threads_if_non_cpu_and_default_threads(self) -> None:
LOWmachine-learning/test_main.py405 def test_sets_default_sess_options_sets_threads_if_non_cpu_and_set_threads(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py415 def test_uses_arena_if_enabled(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py425 def test_does_not_use_arena_if_disabled(self, mocker: MockerFixture) -> None:
LOWmachine-learning/test_main.py435 def test_sets_sess_options_kwarg(self) -> None:
LOWmachine-learning/test_main.py1136 async def test_raises_exception_if_invalid_model_type(self) -> None:
LOWmachine-learning/test_main.py1143 async def test_raises_exception_if_unknown_model_name(self) -> None:
LOWmachine-learning/test_main.py1149 async def test_preloads_clip_models(self, monkeypatch: MonkeyPatch, mock_get_model: mock.Mock) -> None:
LOWmachine-learning/test_main.py126 def test_clear_cache_warns_if_path_does_not_exist(
LOWmachine-learning/test_main.py137 def test_clear_cache_raises_exception_if_vulnerable_to_symlink_attack(
LOWmachine-learning/test_main.py148 def test_clear_cache_replaces_file_with_dir_if_path_is_file(
LOWmachine-learning/test_main.py172 def test_download_downloads_armnn_if_preferred_format(self, snapshot_download: mock.Mock) -> None:
LOWmachine-learning/test_main.py183 def test_download_downloads_rknn_if_preferred_format(self, snapshot_download: mock.Mock) -> None:
LOWmachine-learning/test_main.py194 def test_throws_exception_if_model_path_does_not_exist(
37 more matches not shown…
Magic Placeholder Names5 hits · 30 pts
SeverityFileLineSnippet
HIGHdocs/docs/features/command-line-interface.md40docker run -it -v "$(pwd)":/import:ro -e IMMICH_INSTANCE_URL=https://your-immich-instance/api -e IMMICH_API_KEY=your-api
HIGHdocs/docs/features/command-line-interface.md48docker run -it -v "$(pwd)":/import:ro -e IMMICH_INSTANCE_URL=https://your-immich-instance/api -e IMMICH_API_KEY=your-api
HIGHdocs/docs/guides/python-file-upload.md10API_KEY = 'YOUR_API_KEY' # replace with a valid api key
HIGHmobile/openapi/README.md44//defaultApiClient.getAuthentication<ApiKeyAuth>('cookie').apiKey = 'YOUR_API_KEY';
HIGHmobile/openapi/README.md48//defaultApiClient.getAuthentication<ApiKeyAuth>('api_key').apiKey = 'YOUR_API_KEY';
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippet
HIGHmobile/test/modules/utils/openapi_patching_test.dart0{ "download": { "archivesize": 4294967296, "includeembeddedvideos": false } }
HIGHmobile/test/modules/utils/openapi_patching_test.dart0{ "download": { "archivesize": 4294967296, "includeembeddedvideos": false } }
HIGHmobile/test/modules/utils/openapi_patching_test.dart0{ "download": { "archivesize": 4294967296, "includeembeddedvideos": false } }
Cross-Language Confusion (JS/TS)2 hits · 10 pts
SeverityFileLineSnippet
HIGHserver/src/repositories/oauth.repository.ts231 return None();
HIGHserver/src/repositories/oauth.repository.ts244 return None();
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippet
CRITICALmachine-learning/test_main.py1112 mock_lock_cls.return_value.__aenter__.return_value.cas.assert_called_with(mock.ANY, ttl=100)
Verbosity Indicators5 hits · 8 pts
SeverityFileLineSnippet
LOWserver/src/services/storage-template.service.ts351 * In case of migrating duplicate filename to a new path, we need to check if it is already migrated
LOWserver/src/services/library.service.ts251 // We need to check if the library still exists as it could have been deleted after the scan was queued
LOWmobile/lib/widgets/settings/free_up_space_settings.dart406 // Step 1: Select Cutoff Date
LOWmobile/lib/widgets/settings/free_up_space_settings.dart500 // Step 2: Scan Assets
LOWmobile/lib/widgets/settings/free_up_space_settings.dart605 // Step 3: Delete Assets
Fake / Example Data6 hits · 8 pts
SeverityFileLineSnippet
LOWserver/src/services/notification-admin.service.ts70 displayName: 'John Doe',
LOWserver/src/services/notification-admin.service.ts87 recipientName: 'Jane Doe',
LOWserver/src/services/notification-admin.service.ts102 albumName: "John Doe's Favorites",
LOWserver/src/services/notification-admin.service.ts103 senderName: 'John Doe',
LOWserver/src/services/notification-admin.service.ts104 recipientName: 'Jane Doe',
LOW…t/domain/repositories/sync_stream_repository_test.dart16 email: 'test@test.com',
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippet
MEDIUMdeployment/modules/cloudflare/docs/.terraform.lock.hcl1# This file is maintained automatically by "tofu init".
MEDIUM…nt/modules/cloudflare/docs-release/.terraform.lock.hcl1# This file is maintained automatically by "tofu init".
Unused Imports5 hits · 5 pts
SeverityFileLineSnippet
LOWmachine-learning/immich_ml/models/base.py1
LOWmachine-learning/immich_ml/sessions/ort.py1
LOWmachine-learning/immich_ml/sessions/ann/__init__.py1
LOWmachine-learning/immich_ml/sessions/ann/loader.py1
LOWmachine-learning/immich_ml/sessions/rknn/__init__.py1
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMmobile/flutter_native_splash.yaml28 # To position the branding image at the bottom of the screen you can use bottom, bottomRight,
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUM…esentation/widgets/asset_viewer/asset_viewer.page.dart141 // Changing the page at the end of a scroll should be more robust, and allow
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippet
LOWmobile/lib/widgets/common/feature_check.dart8/// Example usage:
LOW…s/photo_view/src/core/photo_view_gesture_detector.dart238/// Usage example:
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippet
LOWmachine-learning/immich_ml/sessions/ort.py77
LOWmachine-learning/immich_ml/sessions/rknn/rknnpool.py17