web: de-brand PhotoPrism references in user-facing copy
Replaces "PhotoPrism" in UI strings (empty states, tooltips, toasts, log header, login screen) with neutral terms like "the indexer", "the library", "the server" — accurate regardless of backend. The login header becomes "Mulimage" and drops the explicit PhotoPrism mention. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -333,7 +333,7 @@ export function gridKeyNav(node: HTMLElement, params: GridKeyNavParams = {}) {
|
|||||||
// truth.
|
// truth.
|
||||||
if (added.length === 0) {
|
if (added.length === 0) {
|
||||||
toast.error(`Nothing added to ${heap.Title}`, {
|
toast.error(`Nothing added to ${heap.Title}`, {
|
||||||
description: `PhotoPrism rejected all ${ids.length} UIDs (already in heap, or not indexed).`
|
description: `The server rejected all ${ids.length} UIDs (already in heap, or not indexed).`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,7 +158,7 @@
|
|||||||
`Archived ${result.moved.length} duplicate${result.moved.length === 1 ? '' : 's'}`,
|
`Archived ${result.moved.length} duplicate${result.moved.length === 1 ? '' : 's'}`,
|
||||||
{
|
{
|
||||||
description: losingIndexed
|
description: losingIndexed
|
||||||
? 'The previously-indexed copy was moved; PhotoPrism will drop it on the next index pass.'
|
? 'The previously-indexed copy was moved; the indexer will drop it on the next index pass.'
|
||||||
: 'Files moved to .duplicates/ inside originals.'
|
: 'Files moved to .duplicates/ inside originals.'
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -246,7 +246,7 @@
|
|||||||
{#if isIndexed}
|
{#if isIndexed}
|
||||||
<span
|
<span
|
||||||
class="absolute right-1.5 top-1.5 rounded bg-emerald-600 px-1.5 py-0.5 text-[10px] font-semibold text-white"
|
class="absolute right-1.5 top-1.5 rounded bg-emerald-600 px-1.5 py-0.5 text-[10px] font-semibold text-white"
|
||||||
title="Currently indexed by PhotoPrism"
|
title="Currently in the library"
|
||||||
>
|
>
|
||||||
Indexed
|
Indexed
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -89,9 +89,9 @@
|
|||||||
<EmptyState icon={Copy} title="No stacks">
|
<EmptyState icon={Copy} title="No stacks">
|
||||||
{#snippet descriptionSnippet()}
|
{#snippet descriptionSnippet()}
|
||||||
<p>
|
<p>
|
||||||
PhotoPrism stacks byte-identical (or EXIF-identical) files. If you don't have
|
The library stacks byte-identical (or EXIF-identical) files. If you don't have
|
||||||
any, this tab stays empty. Cross-folder copies PhotoPrism rejected at index
|
any, this tab stays empty. Cross-folder copies dropped at index time live under
|
||||||
time live under the Cross-folder tab.
|
the Cross-folder tab.
|
||||||
</p>
|
</p>
|
||||||
{/snippet}
|
{/snippet}
|
||||||
</EmptyState>
|
</EmptyState>
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
<div role="tabpanel" aria-label="Cross-folder duplicates" class="space-y-3 px-6 py-4 pb-6">
|
<div role="tabpanel" aria-label="Cross-folder duplicates" class="space-y-3 px-6 py-4 pb-6">
|
||||||
<header class="flex items-baseline justify-between gap-3">
|
<header class="flex items-baseline justify-between gap-3">
|
||||||
<p class="text-[11px] text-muted-foreground">
|
<p class="text-[11px] text-muted-foreground">
|
||||||
Byte-identical files PhotoPrism dropped at index time. Found by scanning the
|
Byte-identical files the indexer dropped at index time. Found by scanning the
|
||||||
originals tree directly.
|
originals tree directly.
|
||||||
</p>
|
</p>
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
Library settings
|
Library settings
|
||||||
</Dialog.Title>
|
</Dialog.Title>
|
||||||
<Dialog.Description class="mt-1 text-xs text-muted-foreground">
|
<Dialog.Description class="mt-1 text-xs text-muted-foreground">
|
||||||
Drive PhotoPrism's library, indexer, importer and server log.
|
Drive the library, indexer, importer and server log.
|
||||||
</Dialog.Description>
|
</Dialog.Description>
|
||||||
</div>
|
</div>
|
||||||
<Dialog.Close
|
<Dialog.Close
|
||||||
@@ -403,8 +403,8 @@
|
|||||||
<Tabs.Content value="logs" class="space-y-2 text-[12px] outline-none">
|
<Tabs.Content value="logs" class="space-y-2 text-[12px] outline-none">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<p class="text-muted-foreground">
|
<p class="text-muted-foreground">
|
||||||
Most recent PhotoPrism errors and warnings. Auto-refreshes
|
Most recent server errors and warnings. Auto-refreshes every
|
||||||
every 5 seconds.
|
5 seconds.
|
||||||
</p>
|
</p>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
// a no-op.
|
// a no-op.
|
||||||
if (added.length === 0) {
|
if (added.length === 0) {
|
||||||
toast.error(`Nothing added to ${heap.Title}`, {
|
toast.error(`Nothing added to ${heap.Title}`, {
|
||||||
description: `PhotoPrism rejected all ${ids.length} UIDs (already in heap, or not indexed).`
|
description: `The server rejected all ${ids.length} UIDs (already in heap, or not indexed).`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ export const CAUSES: Record<CauseKey, CauseMeta> = {
|
|||||||
title: 'Implausible year',
|
title: 'Implausible year',
|
||||||
chip: 'bad year',
|
chip: 'bad year',
|
||||||
suggestion:
|
suggestion:
|
||||||
"Filenames suggest a date PhotoPrism doesn't trust. Open one to set the real TakenAt, then bulk-approve the rest.",
|
"Filenames suggest a date the indexer doesn't trust. Open one to set the real TakenAt, then bulk-approve the rest.",
|
||||||
suggestedAction: 'manual'
|
suggestedAction: 'manual'
|
||||||
},
|
},
|
||||||
non_image_type: {
|
non_image_type: {
|
||||||
@@ -66,7 +66,7 @@ export const CAUSES: Record<CauseKey, CauseMeta> = {
|
|||||||
title: 'Other quality issues',
|
title: 'Other quality issues',
|
||||||
chip: 'low quality',
|
chip: 'low quality',
|
||||||
suggestion:
|
suggestion:
|
||||||
'PhotoPrism flagged these but the metadata looks fine. Open the first one to investigate.',
|
'The indexer flagged these but the metadata looks fine. Open the first one to investigate.',
|
||||||
suggestedAction: 'manual'
|
suggestedAction: 'manual'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -856,13 +856,13 @@
|
|||||||
<EmptyState
|
<EmptyState
|
||||||
icon={Sparkles}
|
icon={Sparkles}
|
||||||
title="Nothing left to review"
|
title="Nothing left to review"
|
||||||
description="Photos PhotoPrism's indexer wasn't sure about land here — use Keep to accept them into the timeline or Archive to set them aside."
|
description="Photos the indexer wasn't sure about land here — use Keep to accept them into the timeline or Archive to set them aside."
|
||||||
/>
|
/>
|
||||||
{:else if filters.section === "hidden"}
|
{:else if filters.section === "hidden"}
|
||||||
<EmptyState
|
<EmptyState
|
||||||
icon={EyeOff}
|
icon={EyeOff}
|
||||||
title="No hidden photos"
|
title="No hidden photos"
|
||||||
description="PhotoPrism auto-hides files it can't index (broken files, very low quality); they only ever show up here."
|
description="The indexer auto-hides files it can't read (broken files, very low quality); they only ever show up here."
|
||||||
/>
|
/>
|
||||||
{:else if filters.section === "heap"}
|
{:else if filters.section === "heap"}
|
||||||
<EmptyState
|
<EmptyState
|
||||||
@@ -874,7 +874,7 @@
|
|||||||
<EmptyState
|
<EmptyState
|
||||||
icon={ImageOff}
|
icon={ImageOff}
|
||||||
title="No photos"
|
title="No photos"
|
||||||
description="Index a folder via PhotoPrism's reindex command."
|
description="Index a folder from Settings → Index, or run a reindex from the server."
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
@@ -61,8 +61,8 @@
|
|||||||
class="w-full max-w-sm space-y-5 rounded-lg border border-border bg-card p-8 shadow-sm"
|
class="w-full max-w-sm space-y-5 rounded-lg border border-border bg-card p-8 shadow-sm"
|
||||||
>
|
>
|
||||||
<header class="space-y-1">
|
<header class="space-y-1">
|
||||||
<h1 class="text-2xl font-semibold tracking-tight text-foreground">Mule</h1>
|
<h1 class="text-2xl font-semibold tracking-tight text-foreground">Mulimage</h1>
|
||||||
<p class="text-sm text-muted-foreground">Sign in with your PhotoPrism account.</p>
|
<p class="text-sm text-muted-foreground">Sign in to your account.</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<label class="block space-y-1.5">
|
<label class="block space-y-1.5">
|
||||||
|
|||||||
@@ -242,10 +242,10 @@
|
|||||||
<EmptyState icon={Sparkles} title="Nothing to review">
|
<EmptyState icon={Sparkles} title="Nothing to review">
|
||||||
{#snippet descriptionSnippet()}
|
{#snippet descriptionSnippet()}
|
||||||
<p>
|
<p>
|
||||||
PhotoPrism's indexer flags photos with a low quality score for human
|
The indexer flags photos with a low quality score for human review. New
|
||||||
review. New arrivals with missing EXIF, low resolution, or unknown
|
arrivals with missing EXIF, low resolution, or unknown cameras will land
|
||||||
cameras will land here. The Stacks and Cross-folder tabs above stay
|
here. The Stacks and Cross-folder tabs above stay available for
|
||||||
available for duplicate cleanup.
|
duplicate cleanup.
|
||||||
</p>
|
</p>
|
||||||
{/snippet}
|
{/snippet}
|
||||||
</EmptyState>
|
</EmptyState>
|
||||||
|
|||||||
Reference in New Issue
Block a user