diff --git a/web/apps/photos/src/components/ml/PeopleList.tsx b/web/apps/photos/src/components/ml/PeopleList.tsx
index 75748206b..96dd2cacd 100644
--- a/web/apps/photos/src/components/ml/PeopleList.tsx
+++ b/web/apps/photos/src/components/ml/PeopleList.tsx
@@ -61,8 +61,8 @@ export const PeopleList = React.memo((props: PeopleListProps) => {
}
>
))}
@@ -141,7 +141,7 @@ export function UnidentifiedFaces(props: {
))}
@@ -151,13 +151,13 @@ export function UnidentifiedFaces(props: {
}
interface FaceCropImageViewProps {
- url: string;
faceId: string;
+ cacheKey?: string;
}
const FaceCropImageView: React.FC = ({
- url,
faceId,
+ cacheKey,
}) => {
const [objectURL, setObjectURL] = useState();
@@ -165,22 +165,18 @@ const FaceCropImageView: React.FC = ({
let didCancel = false;
async function loadImage() {
- let blob: Blob;
- if (!url) {
- blob = undefined;
- } else {
- blob = await cachedOrNew("face-crops", url, async () => {
- const user = await ensureLocalUser();
- return machineLearningService.regenerateFaceCrop(
- user.token,
- user.id,
- faceId,
- );
- });
- }
-
- if (didCancel) return;
- setObjectURL(blob ? URL.createObjectURL(blob) : undefined);
+ const blob = cacheKey
+ ? await cachedOrNew("face-crops", cacheKey, async () => {
+ const user = await ensureLocalUser();
+ return machineLearningService.regenerateFaceCrop(
+ user.token,
+ user.id,
+ faceId,
+ );
+ })
+ : undefined;
+ if (!didCancel)
+ setObjectURL(blob ? URL.createObjectURL(blob) : undefined);
}
loadImage();
@@ -189,7 +185,7 @@ const FaceCropImageView: React.FC = ({
didCancel = true;
if (objectURL) URL.revokeObjectURL(objectURL);
};
- }, [url, faceId]);
+ }, [faceId, cacheKey]);
return objectURL ? (
diff --git a/web/apps/photos/src/services/machineLearning/faceService.ts b/web/apps/photos/src/services/machineLearning/faceService.ts
index 9c56ef45f..052ed020d 100644
--- a/web/apps/photos/src/services/machineLearning/faceService.ts
+++ b/web/apps/photos/src/services/machineLearning/faceService.ts
@@ -229,13 +229,8 @@ class FaceService {
const blobOptions = syncContext.config.faceCrop.blobOptions;
const blob = await imageBitmapToBlob(faceCrop.image, blobOptions);
- const faceCropUrl = `/${face.id}`;
- const faceCropCache = await openCache("face-crops");
- await faceCropCache.put(faceCropUrl, blob);
- face.crop = {
- imageUrl: faceCropUrl,
- imageBox: faceCrop.imageBox,
- };
+ const cache = await openCache("face-crops");
+ await cache.put(face.id, blob);
faceCrop.image.close();
diff --git a/web/apps/photos/src/services/machineLearning/peopleService.ts b/web/apps/photos/src/services/machineLearning/peopleService.ts
index dbd2706bc..ad7d7bcec 100644
--- a/web/apps/photos/src/services/machineLearning/peopleService.ts
+++ b/web/apps/photos/src/services/machineLearning/peopleService.ts
@@ -62,7 +62,7 @@ class PeopleService {
(a, b) => b.detection.probability - a.detection.probability,
);
- if (personFace && !personFace.crop?.imageUrl) {
+ if (personFace && !personFace.crop?.cacheKey) {
const file = await getLocalFile(personFace.fileId);
const imageBitmap = await getOriginalImageBitmap(file);
await FaceService.saveFaceCrop(
@@ -76,7 +76,7 @@ class PeopleService {
id: index,
files: faces.map((f) => f.fileId),
displayFaceId: personFace?.id,
- displayImageUrl: personFace?.crop?.imageUrl,
+ faceCropCacheKey: personFace?.crop?.cacheKey,
};
await mlIDbStorage.putPerson(person);
diff --git a/web/apps/photos/src/types/machineLearning/index.ts b/web/apps/photos/src/types/machineLearning/index.ts
index d0c902333..7fee94815 100644
--- a/web/apps/photos/src/types/machineLearning/index.ts
+++ b/web/apps/photos/src/types/machineLearning/index.ts
@@ -90,7 +90,7 @@ export interface FaceCrop {
}
export interface StoredFaceCrop {
- imageUrl: string;
+ cacheKey: string;
imageBox: Box;
}
@@ -128,7 +128,7 @@ export interface Person {
name?: string;
files: Array;
displayFaceId?: string;
- displayImageUrl?: string;
+ faceCropCacheKey?: string;
}
export interface MlFileData {