import { ThemeSelect } from "./ThemeSelect"; import { SaveOutputFolderToggle } from "./SaveOutputFolderToggle"; import { GpuIdInput } from "./GpuIdInput"; import { CustomModelsFolderSelect } from "./CustomModelsFolderSelect"; import { LogArea } from "./LogArea"; import { ImageScaleSelect } from "./ImageScaleSelect"; import { ImageFormatSelect } from "./ImageFormatSelect"; import { DonateButton } from "./DonateButton"; import React, { useEffect, useState } from "react"; import { themeChange } from "theme-change"; import { useAtom, useAtomValue } from "jotai"; import { customModelsPathAtom, noImageProcessingAtom, overwriteAtom, scaleAtom, } from "../../atoms/userSettingsAtom"; import { modelsListAtom } from "../../atoms/modelsListAtom"; import useLog from "../hooks/useLog"; import { CompressionInput } from "./CompressionInput"; import OverwriteToggle from "./OverwriteToggle"; import { UpscaylCloudModal } from "../UpscaylCloudModal"; import { ResetSettings } from "./ResetSettings"; import { featureFlags } from "@common/feature-flags"; import TurnOffNotificationsToggle from "./TurnOffNotificationsToggle"; import { cn } from "@/lib/utils"; interface IProps { batchMode: boolean; setModel: React.Dispatch>; saveImageAs: string; setSaveImageAs: React.Dispatch>; compression: number; setCompression: React.Dispatch>; gpuId: string; setGpuId: React.Dispatch>; logData: string[]; os: "linux" | "mac" | "win" | undefined; show: boolean; setShow: React.Dispatch>; setDontShowCloudModal: React.Dispatch>; } function SettingsTab({ batchMode, setModel, compression, setCompression, gpuId, setGpuId, saveImageAs, setSaveImageAs, logData, os, show, setShow, setDontShowCloudModal, }: IProps) { // STATES const [currentModel, setCurrentModel] = useState<{ label: string; value: string; }>({ label: null, value: null, }); const [isCopied, setIsCopied] = useState(false); const [customModelsPath, setCustomModelsPath] = useAtom(customModelsPathAtom); const modelOptions = useAtomValue(modelsListAtom); const [scale, setScale] = useAtom(scaleAtom); const [enableScrollbar, setEnableScrollbar] = useState(true); const [timeoutId, setTimeoutId] = useState(null); const { logit } = useLog(); useEffect(() => { themeChange(false); if (!localStorage.getItem("saveImageAs")) { logit("⚙️ Setting saveImageAs to png"); localStorage.setItem("saveImageAs", "png"); } else { const currentlySavedImageFormat = localStorage.getItem("saveImageAs"); logit( "⚙️ Getting saveImageAs from localStorage: ", currentlySavedImageFormat, ); setSaveImageAs(currentlySavedImageFormat); } if (!localStorage.getItem("model")) { setCurrentModel(modelOptions[0]); setModel(modelOptions[0].value); localStorage.setItem("model", JSON.stringify(modelOptions[0])); logit("🔀 Setting model to", modelOptions[0].value); } else { let currentlySavedModel = JSON.parse( localStorage.getItem("model"), ) as (typeof modelOptions)[0]; if ( modelOptions.find( (model) => model.value === currentlySavedModel.value, ) === undefined ) { localStorage.setItem("model", JSON.stringify(modelOptions[0])); logit("🔀 Setting model to", modelOptions[0].value); currentlySavedModel = modelOptions[0]; } setCurrentModel(currentlySavedModel); setModel(currentlySavedModel.value); logit( "⚙️ Getting model from localStorage: ", JSON.stringify(currentlySavedModel), ); } if (!localStorage.getItem("gpuId")) { localStorage.setItem("gpuId", ""); logit("⚙️ Setting gpuId to empty string"); } else { const currentlySavedGpuId = localStorage.getItem("gpuId"); setGpuId(currentlySavedGpuId); logit("⚙️ Getting gpuId from localStorage: ", currentlySavedGpuId); } }, []); // HANDLERS const setExportType = (format: string) => { setSaveImageAs(format); localStorage.setItem("saveImageAs", format); }; const handleCompressionChange = (e) => { setCompression(e.target.value); }; const handleGpuIdChange = (e) => { setGpuId(e.target.value); localStorage.setItem("gpuId", e.target.value); }; const copyOnClickHandler = () => { navigator.clipboard.writeText(logData.join("\n")); setIsCopied(true); setTimeout(() => { setIsCopied(false); }, 2000); }; const upscaylVersion = navigator?.userAgent?.match( /Upscayl\/([\d\.]+\d+)/, )[1]; function disableScrolling() { if (timeoutId !== null) { clearTimeout(timeoutId); } setTimeoutId( setTimeout(function () { setEnableScrollbar(false); }, 1000), ); } function enableScrolling() { if (timeoutId !== null) { clearTimeout(timeoutId); } setEnableScrollbar(true); } return (
{ if (enableScrollbar) disableScrolling(); }} onWheel={() => { enableScrolling(); }} >

Having issues?

GET HELP {featureFlags.APP_STORE_BUILD && ( EMAIL DEVELOPER )} {!featureFlags.APP_STORE_BUILD && }
{/* THEME SELECTOR */} {/* IMAGE FORMAT BUTTONS */} {/* IMAGE SCALE */} {/* GPU ID INPUT */} {/* CUSTOM MODEL */} {/* RESET SETTINGS */} {featureFlags.SHOW_UPSCAYL_CLOUD_INFO && ( <> )}
); } export default SettingsTab;