diff --git a/docs/docs/features/supported-formats.md b/docs/docs/features/supported-formats.md index 917950dd2..889a41a9d 100644 --- a/docs/docs/features/supported-formats.md +++ b/docs/docs/features/supported-formats.md @@ -8,24 +8,24 @@ For the full list, refer to the [Immich source code](https://github.com/immich-a ## Image formats -| Format | Extension(s) | Supported? | Notes | -| :---------- | :---------------------------- | :----------------: | :-------------- | -| `AVIF` | `.avif` | :white_check_mark: | | -| `BMP` | `.bmp` | :white_check_mark: | | -| `GIF` | `.gif` | :white_check_mark: | | -| `HEIC` | `.heic` | :white_check_mark: | | -| `HEIF` | `.heif` | :white_check_mark: | | -| `JPEG 2000` | `.jp2` | :white_check_mark: | | -| `JPEG` | `.jpeg` `.jpg` `.jpe` `.insp` | :white_check_mark: | | -| `JPEG XL` | `.jxl` | :white_check_mark: | | -| `MPO` | `.mpo` | :white_check_mark: | Multi-Picture | -| `PNG` | `.png` | :white_check_mark: | | -| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | -| `RAW` | `.raw` | :white_check_mark: | | -| `RW2` | `.rw2` | :white_check_mark: | | -| `SVG` | `.svg` | :white_check_mark: | | -| `TIFF` | `.tif` `.tiff` | :white_check_mark: | | -| `WEBP` | `.webp` | :white_check_mark: | | +| Format | Extension(s) | Supported? | Notes | +| :---------- | :------------------------------------ | :----------------: | :-------------- | +| `AVIF` | `.avif` | :white_check_mark: | | +| `BMP` | `.bmp` | :white_check_mark: | | +| `GIF` | `.gif` | :white_check_mark: | | +| `HEIC` | `.heic` | :white_check_mark: | | +| `HEIF` | `.heif` | :white_check_mark: | | +| `JPEG 2000` | `.jp2` | :white_check_mark: | | +| `JPEG` | `.jfif` `.jpeg` `.jpg` `.jpe` `.insp` | :white_check_mark: | | +| `JPEG XL` | `.jxl` | :white_check_mark: | | +| `MPO` | `.mpo` | :white_check_mark: | Multi-Picture | +| `PNG` | `.png` | :white_check_mark: | | +| `PSD` | `.psd` | :white_check_mark: | Adobe Photoshop | +| `RAW` | `.raw` | :white_check_mark: | | +| `RW2` | `.rw2` | :white_check_mark: | | +| `SVG` | `.svg` | :white_check_mark: | | +| `TIFF` | `.tif` `.tiff` | :white_check_mark: | | +| `WEBP` | `.webp` | :white_check_mark: | | ## Video formats diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index b31619e42..444a1fa56 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -74,6 +74,7 @@ const validImages = [ '.heic', '.heif', '.iiq', + '.jfif', '.jp2', '.jpeg', '.jpg', diff --git a/server/src/utils/mime-types.spec.ts b/server/src/utils/mime-types.spec.ts index ac0f3bfbd..faad362c1 100644 --- a/server/src/utils/mime-types.spec.ts +++ b/server/src/utils/mime-types.spec.ts @@ -23,6 +23,7 @@ describe('mimeTypes', () => { { mimetype: 'image/hif', extension: '.hif' }, { mimetype: 'image/iiq', extension: '.iiq' }, { mimetype: 'image/jp2', extension: '.jp2' }, + { mimetype: 'image/jpeg', extension: '.jfif' }, { mimetype: 'image/jpeg', extension: '.jpe' }, { mimetype: 'image/jpeg', extension: '.jpeg' }, { mimetype: 'image/jpeg', extension: '.jpg' }, diff --git a/server/src/utils/mime-types.ts b/server/src/utils/mime-types.ts index 3e3f6641a..ce68361f9 100644 --- a/server/src/utils/mime-types.ts +++ b/server/src/utils/mime-types.ts @@ -43,6 +43,7 @@ const webSupportedImage = { '.avif': ['image/avif'], '.bmp': ['image/bmp'], '.gif': ['image/gif'], + '.jfif': ['image/jpeg'], '.jpeg': ['image/jpeg'], '.jpg': ['image/jpeg'], '.png': ['image/png', 'image/apng'], @@ -98,7 +99,18 @@ const transparentCapableExtensions = new Set([ '.webp', ]); -const profileExtensions = new Set(['.avif', '.dng', '.heic', '.heif', '.jpeg', '.jpg', '.png', '.webp', '.svg']); +const profileExtensions = new Set([ + '.avif', + '.dng', + '.heic', + '.heif', + '.jfif', + '.jpeg', + '.jpg', + '.png', + '.webp', + '.svg', +]); const profile: Record = Object.fromEntries( Object.entries(image).filter(([key]) => profileExtensions.has(key)), );