feat: add "Copy Metadata" functionality to upscaled images (#1220)

feat: copy metadata
fix: better copy-metadata toggle
raw: add new locales for metadata
fix: log metadata on double upscayl
feat: suggest jpg when copying metadata
raw: add metadata suggestion locales
refactor: add bot suggestions
feat: JPEG format validation + ARIA accessibility
This commit is contained in:
Pedro Medina 2025-06-07 17:34:41 -03:00 committed by GitHub
parent d8152cba74
commit 86c144b1e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
31 changed files with 567 additions and 2 deletions

View File

@ -26,6 +26,7 @@ const ELECTRON_COMMANDS = {
SCALING_AND_CONVERTING: "Adding some finishing touches",
UPSCAYL_WARNING: "Upscaling Warning",
UPSCAYL_ERROR: "Upscaling Error",
METADATA_ERROR: "Metadata Error",
PASTE_IMAGE: "Paste Image from clipboard",
PASTE_IMAGE_SAVE_SUCCESS: "Clipboard Image saved successfully",
PASTE_IMAGE_SAVE_ERROR: "Clipboard Image save failed",

View File

@ -14,6 +14,7 @@ export type ImageUpscaylPayload = {
useCustomWidth: boolean;
tileSize: number;
ttaMode: boolean;
copyMetadata: boolean;
};
export type DoubleUpscaylPayload = {
@ -32,6 +33,7 @@ export type DoubleUpscaylPayload = {
useCustomWidth: boolean;
tileSize: number;
ttaMode: boolean;
copyMetadata: boolean;
};
export type BatchUpscaylPayload = {
@ -47,4 +49,5 @@ export type BatchUpscaylPayload = {
useCustomWidth: boolean;
tileSize: number;
ttaMode: boolean;
copyMetadata: boolean;
};

View File

@ -15,6 +15,7 @@ import { ELECTRON_COMMANDS } from "../../common/electron-commands";
import { BatchUpscaylPayload } from "../../common/types/types";
import showNotification from "../utils/show-notification";
import { MODELS } from "../../common/models-list";
import { copyMetadata } from "../utils/copy-metadata";
const batchUpscayl = async (event, payload: BatchUpscaylPayload) => {
const mainWindow = getMainWindow();
@ -104,11 +105,35 @@ const batchUpscayl = async (event, payload: BatchUpscaylPayload) => {
);
return;
};
const onClose = () => {
const onClose = async () => {
if (!mainWindow) return;
if (!failed && !stopped) {
logit("💯 Done upscaling");
upscayl.kill();
if (payload.copyMetadata) {
logit("🏷️ Copying metadata...");
try {
const files = fs.readdirSync(outputFolderPath);
for (const file of files) {
const outFile = outputFolderPath + slash + file;
const originalFile = inputDir + slash + file;
if (fs.existsSync(outFile) && fs.existsSync(originalFile)) {
try {
await copyMetadata(inputDir, outFile);
logit("✅ Metadata copied to: ", outFile);
} catch (error) {
logit("❌ Error copying metadata: ", error);
mainWindow.webContents.send(
ELECTRON_COMMANDS.METADATA_ERROR,
error,
);
}
}
}
} catch (err) {
logit("❌ Error in batch metadata copy: ", err);
}
}
mainWindow.webContents.send(
ELECTRON_COMMANDS.FOLDER_UPSCAYL_DONE,
outputFolderPath,

View File

@ -22,6 +22,7 @@ import getFilenameFromPath from "../../common/get-file-name";
import decodePath from "../../common/decode-path";
import getDirectoryFromPath from "../../common/get-directory-from-path";
import { MODELS } from "../../common/models-list";
import { copyMetadata } from "../utils/copy-metadata";
const doubleUpscayl = async (event, payload: DoubleUpscaylPayload) => {
const mainWindow = getMainWindow();
@ -129,6 +130,19 @@ const doubleUpscayl = async (event, payload: DoubleUpscaylPayload) => {
logit("💯 Done upscaling");
mainWindow.setProgressBar(-1);
if (payload.copyMetadata) {
logit("🏷️ Copying metadata...");
try {
await copyMetadata(imagePath, outFile);
logit("✅ Metadata copied to: ", outFile);
} catch (error) {
logit("❌ Error copying metadata: ", error);
mainWindow.webContents.send(
ELECTRON_COMMANDS.METADATA_ERROR,
error,
);
}
}
mainWindow.webContents.send(
ELECTRON_COMMANDS.DOUBLE_UPSCAYL_DONE,
outFile,

View File

@ -21,6 +21,7 @@ import decodePath from "../../common/decode-path";
import getDirectoryFromPath from "../../common/get-directory-from-path";
import { MODELS } from "../../common/models-list";
import { getPlatform } from "../utils/get-device-specs";
import { copyMetadata } from "../utils/copy-metadata";
const imageUpscayl = async (event, payload: ImageUpscaylPayload) => {
const mainWindow = getMainWindow();
@ -157,6 +158,19 @@ const imageUpscayl = async (event, payload: ImageUpscaylPayload) => {
// Free up memory
upscayl.kill();
mainWindow.setProgressBar(-1);
if (payload.copyMetadata) {
logit("🏷️ Copying metadata...");
try {
await copyMetadata(imagePath, outFile);
logit("✅ Metadata copied to: ", outFile);
} catch (error) {
logit("❌ Error copying metadata: ", error);
mainWindow.webContents.send(
ELECTRON_COMMANDS.METADATA_ERROR,
error,
);
}
}
mainWindow.webContents.send(ELECTRON_COMMANDS.UPSCAYL_DONE, outFile);
showNotification("Upscayl", "Image upscayled successfully!");
}

View File

@ -0,0 +1,5 @@
import { exiftool } from "exiftool-vendored";
export async function copyMetadata(originalFile: string, outputFile: string): Promise<void> {
await exiftool.write(outputFile, {}, { writeArgs: ['-overwrite_original_in_place', '-tagsFromFile', originalFile] });
}

80
package-lock.json generated
View File

@ -24,6 +24,7 @@
"electron-settings": "^4.0.4",
"electron-updater": "^6.3.9",
"eslint-config-next": "^14.2.7",
"exiftool-vendored": "^29.3.0",
"firebase": "^11.1.0",
"gray-matter": "^4.0.3",
"jotai": "^2.11.0",
@ -1932,6 +1933,12 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/@photostructure/tz-lookup": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/@photostructure/tz-lookup/-/tz-lookup-11.2.0.tgz",
"integrity": "sha512-DwrvodcXHNSdGdeSF7SBL5o8aBlsaeuCuG7633F04nYsL3hn5Hxe3z/5kCqxv61J1q7ggKZ27GPylR3x0cPNXQ==",
"license": "CC0-1.0"
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@ -2721,6 +2728,12 @@
"@types/node": "*"
}
},
"node_modules/@types/luxon": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz",
"integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==",
"license": "MIT"
},
"node_modules/@types/mdast": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
@ -3650,6 +3663,15 @@
],
"license": "MIT"
},
"node_modules/batch-cluster": {
"version": "13.0.0",
"resolved": "https://registry.npmjs.org/batch-cluster/-/batch-cluster-13.0.0.tgz",
"integrity": "sha512-EreW0Vi8TwovhYUHBXXRA5tthuU2ynGsZFlboyMJHCCUXYa2AjgwnE3ubBOJs2xJLcuXFJbi6c/8pH5+FVj8Og==",
"license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@ -6072,6 +6094,46 @@
"node": ">=0.10.0"
}
},
"node_modules/exiftool-vendored": {
"version": "29.3.0",
"resolved": "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-29.3.0.tgz",
"integrity": "sha512-2N+QvQH3mH0yb89vpxJXaD+SXa8GXvDigytS6cro6FOrTx9Opav4H0QPP0V4r9dBhXy5poON7qo+p1KZv5wZqQ==",
"license": "MIT",
"dependencies": {
"@photostructure/tz-lookup": "^11.2.0",
"@types/luxon": "^3.6.0",
"batch-cluster": "^13.0.0",
"he": "^1.2.0",
"luxon": "^3.6.1"
},
"optionalDependencies": {
"exiftool-vendored.exe": "13.26.0",
"exiftool-vendored.pl": "13.26.0"
}
},
"node_modules/exiftool-vendored.exe": {
"version": "13.26.0",
"resolved": "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-13.26.0.tgz",
"integrity": "sha512-y5mLmNAeABbXhb1a77EeR+CYDELI64DawnNywhMiivIYIdBPXf/81UcBd3SQlcTAHJjJjKt20qdmdL4loMkRDA==",
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/exiftool-vendored.pl": {
"version": "13.26.0",
"resolved": "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-13.26.0.tgz",
"integrity": "sha512-4L8b6TrZcrd/dOnoeyCgsIa4WgFygucd0KQzB7xgWpgeMDQ2xYeqAYoHTeKmLAv4DogvaVkZQgDNogscuKuM+Q==",
"license": "MIT",
"optional": true,
"os": [
"!win32"
],
"bin": {
"exiftool": "bin/exiftool"
}
},
"node_modules/exponential-backoff": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
@ -6937,6 +6999,15 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@ -8158,6 +8229,15 @@
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
"node_modules/luxon": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
"integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/make-fetch-happen": {
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",

View File

@ -238,6 +238,7 @@
"electron-settings": "^4.0.4",
"electron-updater": "^6.3.9",
"eslint-config-next": "^14.2.7",
"exiftool-vendored": "^29.3.0",
"firebase": "^11.1.0",
"gray-matter": "^4.0.3",
"jotai": "^2.11.0",

View File

@ -95,3 +95,8 @@ export const userStatsAtom = atomWithStorage("userStats", {
lastUpscaylDuration: 0,
lastUsedAt: 0,
});
export const copyMetadataAtom = atomWithStorage<boolean>(
"copyMetadata",
false,
);

View File

@ -20,6 +20,7 @@ import {
saveImageAsAtom,
userStatsAtom,
ttaModeAtom,
copyMetadataAtom,
} from "../../atoms/user-settings-atom";
import useLogger from "../hooks/use-logger";
import {
@ -93,6 +94,7 @@ const Sidebar = ({
const [showSidebar, setShowSidebar] = useAtom(showSidebarAtom);
const setUserStats = useSetAtom(userStatsAtom);
const ttaMode = useAtomValue(ttaModeAtom);
const [copyMetadata] = useAtom(copyMetadataAtom);
const upscaylHandler = async () => {
logit("🔄 Resetting Upscaled Image Path");
@ -117,6 +119,7 @@ const Sidebar = ({
useCustomWidth,
tileSize,
ttaMode,
copyMetadata,
},
);
setUserStats((prev) => ({
@ -145,6 +148,7 @@ const Sidebar = ({
useCustomWidth,
tileSize,
ttaMode,
copyMetadata,
},
);
setUserStats((prev) => ({
@ -170,6 +174,7 @@ const Sidebar = ({
useCustomWidth,
tileSize,
ttaMode,
copyMetadata,
});
setUserStats((prev) => ({
...prev,

View File

@ -0,0 +1,108 @@
import React, { useState, useCallback } from "react";
import { translationAtom } from "@/atoms/translations-atom";
import { copyMetadataAtom } from "@/atoms/user-settings-atom";
import { useAtom, useAtomValue } from "jotai";
type CopyMetadataToggleProps = {
saveImageAs: string;
setExportType: (type: string) => void;
};
const CopyMetadataToggle = ({ saveImageAs, setExportType }: CopyMetadataToggleProps) => {
const [copyMetadata, setCopyMetadata] = useAtom(copyMetadataAtom);
const t = useAtomValue(translationAtom);
const [showSuggestModal, setShowSuggestModal] = useState(false);
const handleToggle = useCallback(() => {
if (!copyMetadata && !["jpg", "jpeg"].includes(saveImageAs.toLowerCase()) && setExportType) {
setShowSuggestModal(true);
} else {
setCopyMetadata(!copyMetadata);
localStorage.setItem("copyMetadata", (!copyMetadata).toString());
}
}, [copyMetadata, saveImageAs, setExportType, setCopyMetadata]);
const handleChangeToJpg = useCallback(() => {
setShowSuggestModal(false);
setCopyMetadata(true);
localStorage.setItem("copyMetadata", true.toString());
setExportType("jpg");
}, [setCopyMetadata, setExportType]);
const handleKeepFormat = useCallback(() => {
setShowSuggestModal(false);
setCopyMetadata(true);
localStorage.setItem("copyMetadata", true.toString());
}, [setCopyMetadata]);
return (
<div className="flex flex-col gap-2">
<p className="text-sm font-medium" id="copy-metadata-title">
{t("SETTINGS.COPY_METADATA.TITLE")}
</p>
<p className="text-xs text-base-content/80" id="copy-metadata-description">
{t("SETTINGS.COPY_METADATA.DESCRIPTION")}
</p>
<input
type="checkbox"
className="toggle"
checked={copyMetadata}
onChange={handleToggle}
id="copy-metadata-toggle"
aria-labelledby="copy-metadata-title"
aria-describedby="copy-metadata-description"
/>
{copyMetadata && !["jpg", "jpeg"].includes(saveImageAs.toLowerCase()) && (
<p className="text-xs text-warning">
{t("WARNING.METADATA_FORMAT.DESCRIPTION")}
</p>
)}
{showSuggestModal && (
<div
className="fixed inset-0 z-50 flex items-center justify-center bg-black/40"
onClick={() => setShowSuggestModal(false)}
onKeyDown={(e) => e.key === "Escape" && setShowSuggestModal(false)}
tabIndex={0}
>
<div
className="w-96 rounded-lg bg-base-100 p-6 shadow-xl"
onClick={(e) => e.stopPropagation()}
>
<div className="flex justify-between items-center mb-2">
<h3 className="text-lg font-semibold">
{t("SETTINGS.COPY_METADATA.SUGGEST_JPG_TITLE")}
</h3>
<button
className="btn btn-sm btn-ghost"
onClick={() => setShowSuggestModal(false)}
aria-label="Close"
>
×
</button>
</div>
<p className="mb-4 text-sm text-base-content/80">
{t("SETTINGS.COPY_METADATA.SUGGEST_JPG_DESCRIPTION")}
</p>
<div className="flex justify-end gap-2">
<button
className="btn btn-primary"
onClick={handleChangeToJpg}
>
{t("SETTINGS.COPY_METADATA.CHANGE_TO_JPG")}
</button>
<button
className="btn"
onClick={handleKeepFormat}
>
{t("SETTINGS.COPY_METADATA.KEEP_CURRENT_FORMAT").replace("{format}", saveImageAs.toUpperCase())}
</button>
</div>
</div>
</div>
)}
</div>
);
};
export default CopyMetadataToggle;

View File

@ -25,6 +25,7 @@ import EnableContributionToggle from "./enable-contributions-toggle";
import AutoUpdateToggle from "./auto-update-toggle";
import TTAModeToggle from "./tta-mode-toggle";
import SystemInfo from "./system-info";
import CopyMetadataToggle from "./copy-metadata-toggle";
interface IProps {
batchMode: boolean;
@ -182,6 +183,9 @@ function SettingsTab({
saveImageAs={saveImageAs}
setExportType={setExportType}
/>
{/* COPY METADATA TOGGLE */}
<CopyMetadataToggle saveImageAs={saveImageAs} setExportType={setExportType} />
{/* IMAGE SCALE */}
<SelectImageScale scale={scale} setScale={setScale} />

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "نسخ بيانات وصفية للصورة",
"DESCRIPTION": "احتفظ ببيانات الصورة الوصفية الأصلية (EXIF) في الصورة المحسنة.",
"SUGGEST_JPG_TITLE": "تغيير التنسيق المقترح",
"SUGGEST_JPG_DESCRIPTION": "للحصول على توافق أفضل للبيانات الوصفية بين الأنظمة المختلفة، نوصي باستخدام تنسيق JPG. هل تريد التغيير؟",
"CHANGE_TO_JPG": "تغيير إلى JPG",
"KEEP_CURRENT_FORMAT": "الاحتفاظ بـ {format}"
},
"IMAGE_SCALE": {
"TITLE": "تحجيم الصورة",
"DESCRIPTION": "اي حجم اكبر من 4 (ما عدا التحجيم المزدوج 16 ) سيتم تغيير حجم الصورة بدون استعمال الذكاء الاصطناعي",
@ -254,12 +262,20 @@
"TITLE": "ما من صورة محددة",
"DESCRIPTION": "اختر صورة لتحجيمها من فضلك"
},
"METADATA_ERROR": {
"TITLE": "خطأ في نسخ البيانات الوصفية",
"DESCRIPTION": "تعذر نسخ البيانات الوصفية من الصورة الأصلية إلى الصورة المُنشأة. ({data})"
},
"OPEN_DOCS_TITLE": "افتح التوثيقات",
"OPEN_DOCS_BUTTON_TITLE": "استكشاف خطأ"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "تحذير"
},
"METADATA_FORMAT": {
"TITLE": "تحذير البيانات الوصفية",
"DESCRIPTION": "في بعض الأنظمة، قد لا تكون البيانات الوصفية مرئية في التنسيقات غير JPG. استخدم أدوات خاصة لعرض البيانات الوصفية إذا لزم الأمر."
}
},
"UPSCAYL_CLOUD": {

View File

@ -46,6 +46,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIA METADADES D'IMATGE",
"DESCRIPTION": "Mantín les metadades originals de la imatge (EXIF) en la imatge augmentada.",
"SUGGEST_JPG_TITLE": "Canvi de Format Recomanat",
"SUGGEST_JPG_DESCRIPTION": "Per a una millor compatibilitat de metadades entre diferents sistemes, recomanem utilitzar el format JPG. Voleu canviar?",
"CHANGE_TO_JPG": "Canvia a JPG",
"KEEP_CURRENT_FORMAT": "Mantín {format}"
},
"IMAGE_SCALE": {
"TITLE": "Escala d'imatge",
"DESCRIPTION": "Qualsevol cosa per damunt de 4x (excepte 16x Double Upscayl) només redimensiona la imatge i no usa augment amb IA.",
@ -257,12 +265,20 @@
"TITLE": "No s'ha seleccionat cap imatge",
"DESCRIPTION": "Seleccioneu una imatge per a augmentar"
},
"METADATA_ERROR": {
"TITLE": "Error de còpia de metadades",
"DESCRIPTION": "No s'han pogut copiar les metadades de la imatge original a la imatge generada. ({data})"
},
"OPEN_DOCS_TITLE": "Obri documentació",
"OPEN_DOCS_BUTTON_TITLE": "Soluciona problemes"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Avís"
},
"METADATA_FORMAT": {
"TITLE": "Avís de metadades",
"DESCRIPTION": "En alguns sistemes, les metadades poden no ser visibles en formats diferents de JPG. Utilitzeu eines específiques per a veure metadades si cal."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "BILD-METADATEN KOPIEREN",
"DESCRIPTION": "Original-Bildmetadaten (EXIF) im verbesserten Bild beibehalten.",
"SUGGEST_JPG_TITLE": "Empfohlene Formatänderung",
"SUGGEST_JPG_DESCRIPTION": "Für bessere Metadaten-Kompatibilität zwischen verschiedenen Systemen empfehlen wir das JPG-Format. Möchten Sie ändern?",
"CHANGE_TO_JPG": "Zu JPG ändern",
"KEEP_CURRENT_FORMAT": "{format} beibehalten"
},
"IMAGE_SCALE": {
"TITLE": "Bildskala",
"DESCRIPTION": "Alles über 4X (außer 16X Double Upscayl) skaliert das Bild nur und verwendet kein KI-Upscaling.",
@ -254,12 +262,20 @@
"TITLE": "Kein Bild ausgewählt",
"DESCRIPTION": "Bitte wähle ein Bild zum Upscaylen"
},
"METADATA_ERROR": {
"TITLE": "Metadaten-Kopierfehler",
"DESCRIPTION": "Die Metadaten konnten nicht vom Originalbild in das generierte Bild kopiert werden. ({data})"
},
"OPEN_DOCS_TITLE": "Dokumentation öffnen",
"OPEN_DOCS_BUTTON_TITLE": "Fehlerbehebung"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Warnung"
},
"METADATA_FORMAT": {
"TITLE": "Metadaten-Warnung",
"DESCRIPTION": "Auf einigen Systemen sind die Metadaten in anderen Formaten als JPG möglicherweise nicht sichtbar. Verwende gegebenenfalls spezielle Tools zum Anzeigen der Metadaten."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPY IMAGE METADATA",
"DESCRIPTION": "Keep original image metadata (EXIF) in the upscaled image.",
"SUGGEST_JPG_TITLE": "Recommended Format Change",
"SUGGEST_JPG_DESCRIPTION": "For better metadata compatibility across different systems, we recommend using JPG format. Would you like to change?",
"CHANGE_TO_JPG": "Change to JPG",
"KEEP_CURRENT_FORMAT": "Keep {format}"
},
"IMAGE_SCALE": {
"TITLE": "Image Scale",
"DESCRIPTION": "Anything above 4X (except 16X Double Upscayl) only resizes the image and does not use AI upscaling.",
@ -254,12 +262,20 @@
"TITLE": "No image selected",
"DESCRIPTION": "Please select an image to upscale"
},
"METADATA_ERROR": {
"TITLE": "Metadata Copy Error",
"DESCRIPTION": "Could not copy metadata from the original image to the generated image. ({data})"
},
"OPEN_DOCS_TITLE": "Open Docs",
"OPEN_DOCS_BUTTON_TITLE": "Troubleshoot"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Warning"
},
"METADATA_FORMAT": {
"TITLE": "Metadata Warning",
"DESCRIPTION": "On some systems, metadata may not be visible in formats other than JPG. Use specific tools to view metadata if needed."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIAR METADATOS DE IMAGEN",
"DESCRIPTION": "Mantener los metadatos originales de la imagen (EXIF) en la imagen aumentada.",
"SUGGEST_JPG_TITLE": "Cambio de Formato Recomendado",
"SUGGEST_JPG_DESCRIPTION": "Para una mejor compatibilidad de metadatos entre diferentes sistemas, recomendamos usar el formato JPG. ¿Desea cambiar?",
"CHANGE_TO_JPG": "Cambiar a JPG",
"KEEP_CURRENT_FORMAT": "Mantener {format}"
},
"IMAGE_SCALE": {
"TITLE": "Escala de imagen",
"DESCRIPTION": "Cualquier cosa por encima de 4X (excepto 16X Double Upscayl) solo redimensiona la imagen y no usa aumento con IA.",
@ -255,12 +263,20 @@
"TITLE": "No se ha seleccionado imagen",
"DESCRIPTION": "Por favor, selecciona una imagen para aumentar"
},
"METADATA_ERROR": {
"TITLE": "Error de Copia de Metadatos",
"DESCRIPTION": "No se pudieron copiar los metadatos de la imagen original a la imagen generada. ({data})"
},
"OPEN_DOCS_TITLE": "Abrir documentación",
"OPEN_DOCS_BUTTON_TITLE": "Solucionar problemas"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Advertencia"
},
"METADATA_FORMAT": {
"TITLE": "Advertencia de metadatos",
"DESCRIPTION": "En algunos sistemas, los metadatos pueden no ser visibles en formatos distintos a JPG. Usa herramientas específicas para ver los metadatos si es necesario."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIER LES MÉTADONNÉES DE L'IMAGE",
"DESCRIPTION": "Conserver les métadonnées originales de l'image (EXIF) dans l'image améliorée.",
"SUGGEST_JPG_TITLE": "Changement de Format Recommandé",
"SUGGEST_JPG_DESCRIPTION": "Pour une meilleure compatibilité des métadonnées entre différents systèmes, nous recommandons d'utiliser le format JPG. Voulez-vous changer ?",
"CHANGE_TO_JPG": "Changer en JPG",
"KEEP_CURRENT_FORMAT": "Garder {format}"
},
"IMAGE_SCALE": {
"TITLE": "Dimensions de l'image",
"DESCRIPTION": "Tout ce qui dépasse 4X (sauf 16X Double Upscayl) ne fait que redimensionner l'image et n'utilise pas l'améliorateur AI.",
@ -254,12 +262,20 @@
"TITLE": "Aucune image sélectionnée",
"DESCRIPTION": "Veuillez sélectionner une image à suréchantillonner"
},
"METADATA_ERROR": {
"TITLE": "Erreur de Copie des Métadonnées",
"DESCRIPTION": "Impossible de copier les métadonnées de l'image originale vers l'image générée. ({data})"
},
"OPEN_DOCS_TITLE": "Ouvrir la documentation",
"OPEN_DOCS_BUTTON_TITLE": "Dépanner"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Avertissement"
},
"METADATA_FORMAT": {
"TITLE": "Avertissement sur les métadonnées",
"DESCRIPTION": "Sur certains systèmes, les métadonnées peuvent ne pas être visibles dans les formats autres que JPG. Utilisez des outils spécifiques pour visualiser les métadonnées si nécessaire."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "SALIN METADATA GAMBAR",
"DESCRIPTION": "Pertahankan metadata gambar asli (EXIF) dalam gambar yang ditingkatkan.",
"SUGGEST_JPG_TITLE": "Rekomendasi Perubahan Format",
"SUGGEST_JPG_DESCRIPTION": "Untuk kompatibilitas metadata yang lebih baik di berbagai sistem, kami menyarankan menggunakan format JPG. Apakah Anda ingin mengubah?",
"CHANGE_TO_JPG": "Ubah ke JPG",
"KEEP_CURRENT_FORMAT": "Tetap {format}"
},
"IMAGE_SCALE": {
"TITLE": "Skala Gambar",
"DESCRIPTION": "Apa pun di atas 4X (kecuali 16X Double Upscayl) hanya mengubah ukuran gambar dan tidak menggunakan peningkatan AI.",
@ -254,12 +262,20 @@
"TITLE": "Tidak ada gambar yang dipilih",
"DESCRIPTION": "Silakan pilih gambar untuk ditingkatkan kualitasnya"
},
"METADATA_ERROR": {
"TITLE": "Kesalahan Penyalinan Metadata",
"DESCRIPTION": "Tidak dapat menyalin metadata dari gambar asli ke gambar yang dihasilkan. ({data})"
},
"OPEN_DOCS_TITLE": "Buka Dokumen",
"OPEN_DOCS_BUTTON_TITLE": "Pemecahan Masalah"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Peringatan"
},
"METADATA_FORMAT": {
"TITLE": "Peringatan Metadata",
"DESCRIPTION": "Pada beberapa sistem, metadata mungkin tidak terlihat dalam format selain JPG. Gunakan alat khusus untuk melihat metadata jika diperlukan."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIA METADATI IMMAGINE",
"DESCRIPTION": "Mantieni i metadati originali dell'immagine (EXIF) nell'immagine sovracampionata.",
"SUGGEST_JPG_TITLE": "Modifica Formato Consigliata",
"SUGGEST_JPG_DESCRIPTION": "Per una migliore compatibilità dei metadati tra sistemi diversi, consigliamo di utilizzare il formato JPG. Vuoi cambiare?",
"CHANGE_TO_JPG": "Cambia in JPG",
"KEEP_CURRENT_FORMAT": "Mantieni {format}"
},
"IMAGE_SCALE": {
"TITLE": "Scala dell'immagine",
"DESCRIPTION": "Qualsiasi valore superiore a 4X (eccetto 16X Double Upscayl) ridimensiona solo l'immagine e non utilizza l'upsampling AI.",
@ -254,12 +262,20 @@
"TITLE": "Nessuna immagine selezionata",
"DESCRIPTION": "Seleziona un'immagine da sovracampionare"
},
"METADATA_ERROR": {
"TITLE": "Errore di Copia Metadati",
"DESCRIPTION": "Impossibile copiare i metadati dall'immagine originale all'immagine generata. ({data})"
},
"OPEN_DOCS_TITLE": "Apri la documentazione",
"OPEN_DOCS_BUTTON_TITLE": "Risoluzione dei problemi"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Avviso"
},
"METADATA_FORMAT": {
"TITLE": "Avviso sui metadati",
"DESCRIPTION": "Su alcuni sistemi, i metadati potrebbero non essere visibili in formati diversi da JPG. Utilizza strumenti specifici per visualizzare i metadati se necessario."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "画像メタデータをコピー",
"DESCRIPTION": "アップスケールされた画像に元の画像メタデータEXIFを保持します。",
"SUGGEST_JPG_TITLE": "推奨フォーマット変更",
"SUGGEST_JPG_DESCRIPTION": "異なるシステム間でのメタデータの互換性を高めるため、JPG形式の使用をお勧めします。変更しますか",
"CHANGE_TO_JPG": "JPGに変更",
"KEEP_CURRENT_FORMAT": "{format}を維持"
},
"IMAGE_SCALE": {
"TITLE": "画像スケール",
"DESCRIPTION": "4X以上のスケール16X Double Upscaylを除くは、画像をリサイズするだけで、AIアップスケーリングは行われません。",
@ -254,12 +262,20 @@
"TITLE": "画像が選択されていません",
"DESCRIPTION": "アップスケールする画像を選択してください"
},
"METADATA_ERROR": {
"TITLE": "メタデータのコピーエラー",
"DESCRIPTION": "元画像のメタデータを生成された画像にコピーできませんでした。({data})"
},
"OPEN_DOCS_TITLE": "ドキュメントを開く",
"OPEN_DOCS_BUTTON_TITLE": "トラブルシューティング"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "警告"
},
"METADATA_FORMAT": {
"TITLE": "メタデータの警告",
"DESCRIPTION": "一部のシステムでは、JPG以外の形式ではメタデータが表示されない場合があります。必要に応じて専用のツールを使用してメタデータを表示してください。"
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "SALIN METADATA IMEJ",
"DESCRIPTION": "Kekalkan metadata imej asal (EXIF) dalam imej yang telah dipertingkatkan.",
"SUGGEST_JPG_TITLE": "Cadangan Perubahan Format",
"SUGGEST_JPG_DESCRIPTION": "Untuk keserasian metadata yang lebih baik antara sistem yang berbeza, kami mencadangkan menggunakan format JPG. Adakah anda ingin menukar?",
"CHANGE_TO_JPG": "Tukar kepada JPG",
"KEEP_CURRENT_FORMAT": "Kekalkan {format}"
},
"IMAGE_SCALE": {
"TITLE": "Skala Imej",
"DESCRIPTION": "Apa-apa melebihi 4X (kecuali 16X Double Upscayl) hanya mengubah saiz imej dan tidak menggunakan peningkatan AI.",
@ -254,9 +262,22 @@
"TITLE": "Tiada imej dipilih",
"DESCRIPTION": "Sila pilih imej untuk diupscale"
},
"METADATA_ERROR": {
"TITLE": "Ralat Salinan Metadata",
"DESCRIPTION": "Tidak dapat menyalin metadata dari imej asal ke imej yang dihasilkan. ({data})"
},
"OPEN_DOCS_TITLE": "Buka Dokumen",
"OPEN_DOCS_BUTTON_TITLE": "Penyelesaian Masalah"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Amaran"
},
"METADATA_FORMAT": {
"TITLE": "Amaran Metadata",
"DESCRIPTION": "Pada sesetengah sistem, metadata mungkin tidak kelihatan dalam format selain JPG. Gunakan alat khusus untuk melihat metadata jika perlu."
}
},
"UPSCAYL_CLOUD": {
"COMING_SOON": "Akan datang!",
"CATCHY_PHRASE_1": "Tiada lagi ralat, masalah perkakasan, kompromi kualiti atau masa pemuatan yang lama!",

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIAR METADADOS DA IMAGEM",
"DESCRIPTION": "Manter os metadados originais da imagem (EXIF) na imagem aprimorada.",
"SUGGEST_JPG_TITLE": "Alteração de Formato Recomendada",
"SUGGEST_JPG_DESCRIPTION": "Para melhor compatibilidade de metadados entre diferentes sistemas, recomendamos usar o formato JPG. Deseja alterar?",
"CHANGE_TO_JPG": "Mudar para JPG",
"KEEP_CURRENT_FORMAT": "Manter {format}"
},
"IMAGE_SCALE": {
"TITLE": "Redimensionar Imagem",
"DESCRIPTION": "Tudo acima de 4X (exceto 16X Duplo Upscayl) apenas redimensiona a imagem e não usa aprimoramento de AI.",
@ -254,12 +262,20 @@
"TITLE": "Nenhuma imagem selecionada",
"DESCRIPTION": "Favor selecionar uma imagem para o upscale"
},
"METADATA_ERROR": {
"TITLE": "Erro ao Copiar Metadados",
"DESCRIPTION": "Não foi possível copiar os metadados da imagem original para a imagem gerada. ({data})"
},
"OPEN_DOCS_TITLE": "Abrir Docs",
"OPEN_DOCS_BUTTON_TITLE": "Resolução de Problemas"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Aviso"
},
"METADATA_FORMAT": {
"TITLE": "Aviso de Metadados",
"DESCRIPTION": "Em alguns sistemas, os metadados podem não ser visíveis em formatos diferentes de JPG. Use ferramentas específicas para visualizar metadados se necessário."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "COPIAR METADADOS DA IMAGEM",
"DESCRIPTION": "Manter os metadados originais da imagem (EXIF) na imagem aprimorada.",
"SUGGEST_JPG_TITLE": "Alteração de Formato Recomendada",
"SUGGEST_JPG_DESCRIPTION": "Para melhor compatibilidade de metadados entre diferentes sistemas, recomendamos usar o formato JPG. Deseja alterar?",
"CHANGE_TO_JPG": "Mudar para JPG",
"KEEP_CURRENT_FORMAT": "Manter {format}"
},
"IMAGE_SCALE": {
"TITLE": "Escala da imagem",
"DESCRIPTION": "Tudo o que seja acima de 4X (exceto 16X Upscayl duplo) apenas redimensiona a imagem e não utiliza aprimoramento de IA.",
@ -255,14 +263,22 @@
"TITLE": "Nenhuma imagem selecionada",
"DESCRIPTION": "Por favor, selecione uma imagem a aprimorar"
},
"METADATA_ERROR": {
"TITLE": "Erro de cópia de metadados",
"DESCRIPTION": "Não foi possível copiar os metadados da imagem original para a imagem gerada. ({data})"
},
"OPEN_DOCS_TITLE": "Abrir documentos",
"OPEN_DOCS_BUTTON_TITLE": "Problemas"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Aviso"
},
"METADATA_FORMAT": {
"TITLE": "Aviso de metadados",
"DESCRIPTION": "Em alguns sistemas, os metadados podem não ser visíveis em formatos diferentes de JPG. Use ferramentas específicas para visualizar metadados, se necessário."
}
},
},
"UPSCAYL_CLOUD": {
"COMING_SOON": "Brevemente!",
"CATCHY_PHRASE_1": "Acabaram-se os erros, os problemas de hardware, o sacrifício da qualidade ou os longos tempos de carregamento!",

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "КОПИРОВАТЬ МЕТАДАННЫЕ ИЗОБРАЖЕНИЯ",
"DESCRIPTION": "Сохранить исходные метаданные изображения (EXIF) в улучшенном изображении.",
"SUGGEST_JPG_TITLE": "Рекомендуемое изменение формата",
"SUGGEST_JPG_DESCRIPTION": "Для лучшей совместимости метаданных в разных системах мы рекомендуем использовать формат JPG. Хотите изменить?",
"CHANGE_TO_JPG": "Изменить на JPG",
"KEEP_CURRENT_FORMAT": "Оставить {format}"
},
"IMAGE_SCALE": {
"TITLE": "Масштаб изображения",
"DESCRIPTION": "Любое значение выше 4X (кроме двойного увеличения 16X) только изменяет размер изображения и не использует ИИ-увеличение.",
@ -254,12 +262,20 @@
"TITLE": "Изображение не выбрано",
"DESCRIPTION": "Пожалуйста, выберите изображение для увеличения"
},
"METADATA_ERROR": {
"TITLE": "Ошибка копирования метаданных",
"DESCRIPTION": "Не удалось скопировать метаданные из исходного изображения в созданное изображение. ({data})"
},
"OPEN_DOCS_TITLE": "Открыть документацию",
"OPEN_DOCS_BUTTON_TITLE": "Устранение неполадок"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Предупреждение"
},
"METADATA_FORMAT": {
"TITLE": "Предупреждение о метаданных",
"DESCRIPTION": "В некоторых системах метаданные могут не отображаться в форматах, отличных от JPG. При необходимости используйте специальные инструменты для просмотра метаданных."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "คัดลอกข้อมูลเมตาของภาพ",
"DESCRIPTION": "เก็บข้อมูลเมตาของภาพต้นฉบับ (EXIF) ในภาพที่ปรับปรุงแล้ว",
"SUGGEST_JPG_TITLE": "แนะนำการเปลี่ยนรูปแบบ",
"SUGGEST_JPG_DESCRIPTION": "เพื่อให้เข้ากันได้ดีกับข้อมูลเมตาในระบบต่างๆ เราขอแนะนำให้ใช้รูปแบบ JPG คุณต้องการเปลี่ยนหรือไม่?",
"CHANGE_TO_JPG": "เปลี่ยนเป็น JPG",
"KEEP_CURRENT_FORMAT": "เก็บไว้เป็น {format}"
},
"IMAGE_SCALE": {
"TITLE": "ขนาดรูป",
"DESCRIPTION": "สิ่งที่มากกว่า 4 เท่า (ยกเว้น Upscayl 16 เท่า 2 รอบ) จะขยายขนาดรูปเท่านั้น ไม่มีการใช้ AI ในการขยาย",
@ -254,12 +262,20 @@
"TITLE": "ไม่มีรูปที่ถูกเลือก",
"DESCRIPTION": "โปรดเลือกรูปสำหรับขยาย"
},
"METADATA_ERROR": {
"TITLE": "ข้อผิดพลาดในการคัดลอกข้อมูลเมตา",
"DESCRIPTION": "ไม่สามารถคัดลอกข้อมูลเมตาจากภาพต้นฉบับไปยังภาพที่สร้างขึ้น ({data})"
},
"OPEN_DOCS_TITLE": "เปิดเอกสาร",
"OPEN_DOCS_BUTTON_TITLE": "การแก้ไขปัญหา"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "คำเตือน"
},
"METADATA_FORMAT": {
"TITLE": "คำเตือนเกี่ยวกับข้อมูลเมตา",
"DESCRIPTION": "ในบางระบบ ข้อมูลเมตาอาจไม่แสดงในรูปแบบอื่นนอกเหนือจาก JPG ใช้เครื่องมือเฉพาะทางเพื่อดูข้อมูลเมตาหากจำเป็น"
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "GÖRSEL META VERİLERİNİ KOPYALA",
"DESCRIPTION": "İyileştirilmiş görselde orijinal görsel meta verilerini (EXIF) koru.",
"SUGGEST_JPG_TITLE": "Önerilen Format Değişikliği",
"SUGGEST_JPG_DESCRIPTION": "Farklı sistemler arasında daha iyi meta veri uyumluluğu için JPG formatını kullanmanızı öneriyoruz. Değiştirmek ister misiniz?",
"CHANGE_TO_JPG": "JPG'ye Değiştir",
"KEEP_CURRENT_FORMAT": "{format} Olarak Kalsın"
},
"IMAGE_SCALE": {
"TITLE": "Görsel Ölçeği",
"DESCRIPTION": "4X'ten büyük herhangi bir ayar (16X Çifte Upscayl dışında) yalnızca görüntüyü yeniden boyutlandırır ve AI ile iyileştirme yapmaz.",
@ -254,12 +262,20 @@
"TITLE": "Görsel seçilmedi",
"DESCRIPTION": "Lütfen iyileştirilecek bir görsel seçin."
},
"METADATA_ERROR": {
"TITLE": "Meta Veri Kopyalama Hatası",
"DESCRIPTION": "Orijinal görüntüden oluşturulan görüntüye meta veriler kopyalanamadı. ({data})"
},
"OPEN_DOCS_TITLE": "Dökümantasyonu açın",
"OPEN_DOCS_BUTTON_TITLE": "Sorun giderme"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Uyarı"
},
"METADATA_FORMAT": {
"TITLE": "Meta Veri Uyarısı",
"DESCRIPTION": "Bazı sistemlerde, JPG dışındaki formatlarda meta veriler görüntülenemeyebilir. Gerekirse meta verileri görüntülemek için özel araçlar kullanın."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "КОПІЮВАТИ МЕТАДАНІ ЗОБРАЖЕННЯ",
"DESCRIPTION": "Зберігати оригінальні метадані зображення (EXIF) у покращеному зображенні.",
"SUGGEST_JPG_TITLE": "Рекомендована зміна формату",
"SUGGEST_JPG_DESCRIPTION": "Для кращої сумісності метаданих між різними системами ми рекомендуємо використовувати формат JPG. Бажаєте змінити?",
"CHANGE_TO_JPG": "Змінити на JPG",
"KEEP_CURRENT_FORMAT": "Зберегти {format}"
},
"IMAGE_SCALE": {
"TITLE": "Масштаб зображення",
"DESCRIPTION": "Будь-що вище 4X (окрім 16X подвійного збільшення) лише змінює розмір зображення без використання ШІ.",
@ -254,12 +262,20 @@
"TITLE": "Зображення не обрано",
"DESCRIPTION": "Будь ласка, оберіть зображення для обробки"
},
"METADATA_ERROR": {
"TITLE": "Помилка копіювання метаданих",
"DESCRIPTION": "Не вдалося скопіювати метадані з вихідного зображення до створеного зображення. ({data})"
},
"OPEN_DOCS_TITLE": "Відкрити документацію",
"OPEN_DOCS_BUTTON_TITLE": "Вирішення проблем"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Попередження"
},
"METADATA_FORMAT": {
"TITLE": "Попередження про метадані",
"DESCRIPTION": "На деяких системах метадані можуть не відображатися в форматах, відмінних від JPG. За потреби використовуйте спеціальні інструменти для перегляду метаданих."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "SAO CHÉP METADATA ẢNH",
"DESCRIPTION": "Giữ metadata gốc của ảnh (EXIF) trong ảnh đã được nâng cao.",
"SUGGEST_JPG_TITLE": "Đề Xuất Thay Đổi Định Dạng",
"SUGGEST_JPG_DESCRIPTION": "Để có khả năng tương thích metadata tốt hơn trên các hệ thống khác nhau, chúng tôi khuyên bạn nên sử dụng định dạng JPG. Bạn có muốn thay đổi không?",
"CHANGE_TO_JPG": "Chuyển sang JPG",
"KEEP_CURRENT_FORMAT": "Giữ {format}"
},
"IMAGE_SCALE": {
"TITLE": "Tỷ lệ Hình ảnh",
"DESCRIPTION": "Bất kỳ tỷ lệ nào trên 4X (ngoại trừ 16X Double Upscayl) chỉ thay đổi kích thước hình ảnh mà không sử dụng tăng cường AI.",
@ -254,12 +262,20 @@
"TITLE": "Không có hình ảnh nào được chọn",
"DESCRIPTION": "Vui lòng chọn một hình ảnh để tăng cường"
},
"METADATA_ERROR": {
"TITLE": "Lỗi Sao Chép Metadata",
"DESCRIPTION": "Không thể sao chép metadata từ ảnh gốc sang ảnh đã tạo. ({data})"
},
"OPEN_DOCS_TITLE": "Mở Tài liệu",
"OPEN_DOCS_BUTTON_TITLE": "Khắc phục sự cố"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "Cảnh báo"
},
"METADATA_FORMAT": {
"TITLE": "Cảnh báo về Metadata",
"DESCRIPTION": "Trên một số hệ thống, metadata có thể không hiển thị trong các định dạng khác ngoài JPG. Sử dụng các công cụ chuyên dụng để xem metadata nếu cần."
}
},
"UPSCAYL_CLOUD": {

View File

@ -44,6 +44,14 @@
"JPG": "JPG",
"WEBP": "WEBP"
},
"COPY_METADATA": {
"TITLE": "复制图片元数据",
"DESCRIPTION": "在增强后的图片中保留原始图片元数据EXIF。",
"SUGGEST_JPG_TITLE": "推荐格式更改",
"SUGGEST_JPG_DESCRIPTION": "为了在不同系统之间获得更好的元数据兼容性我们建议使用JPG格式。您要更改吗",
"CHANGE_TO_JPG": "更改为JPG",
"KEEP_CURRENT_FORMAT": "保持 {format}"
},
"IMAGE_SCALE": {
"TITLE": "增强比例",
"DESCRIPTION": "超过 4X除 16X 双重升图外)只会调整图片大小,不会使用 AI 增强。",
@ -254,12 +262,20 @@
"TITLE": "未选择图片",
"DESCRIPTION": "你还没选择图片哦 QwQ"
},
"METADATA_ERROR": {
"TITLE": "元数据复制错误",
"DESCRIPTION": "无法将原始图像的元数据复制到生成的图像中。({data})"
},
"OPEN_DOCS_TITLE": "打开文档",
"OPEN_DOCS_BUTTON_TITLE": "排除故障"
},
"WARNING": {
"GENERIC_WARNING": {
"TITLE": "警告"
},
"METADATA_FORMAT": {
"TITLE": "元数据警告",
"DESCRIPTION": "在某些系统上JPG 以外的格式可能无法显示元数据。如有需要,请使用专门的工具查看元数据。"
}
},
"UPSCAYL_CLOUD": {

View File

@ -182,6 +182,13 @@ const Home = () => {
description: data,
});
});
// METADATA ERROR
window.electron.on(ELECTRON_COMMANDS.METADATA_ERROR, (_, data: string) => {
toast({
title: t("ERRORS.METADATA_ERROR.TITLE"),
description: data,
});
});
// UPSCAYL ERROR
window.electron.on(ELECTRON_COMMANDS.UPSCAYL_ERROR, (_, data: string) => {
toast({