mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
[WebUI] Bug Fixes (#2728)
A few bugs fixed. - After the recent update to the Cancel Button, it was no longer respecting sizing in Floating Mode and the Beta Canvas. Fixed that. - After the recent dependency update, useHotkeys was bugging out for the fullscreen hotkey `f`. Realized this was happening because the hotkey was initialized in two places -- in both the gallery and the parameter floating button. Removed it from both those places and moved it to the InvokeTabs component. It makes sense to reside it here because it is a global hotkey. - Also added index `0` to the default Accordion index in state in order to ensure that the main accordions stay open. Conveniently this works great on all tabs. We have all the primary options in accordions so they stay open. And as for advanced settings, the first one is always Seed which is an important accordion, so it opens up by default. Think there may be some more bugs. Looking in to them.
This commit is contained in:
commit
7eafcd47a6
File diff suppressed because one or more lines are too long
2
invokeai/frontend/dist/index.html
vendored
2
invokeai/frontend/dist/index.html
vendored
@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>InvokeAI - A Stable Diffusion Toolkit</title>
|
||||
<link rel="shortcut icon" type="icon" href="./assets/favicon-0d253ced.ico" />
|
||||
<script type="module" crossorigin src="./assets/index-8c49ac18.js"></script>
|
||||
<script type="module" crossorigin src="./assets/index-53ecf883.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index-14cb2922.css">
|
||||
</head>
|
||||
|
||||
|
1
invokeai/frontend/dist/locales/ar.json
vendored
1
invokeai/frontend/dist/locales/ar.json
vendored
@ -380,7 +380,6 @@
|
||||
"img2imgStrength": "قوة صورة إلى صورة",
|
||||
"toggleLoopback": "تبديل الإعادة",
|
||||
"invoke": "إطلاق",
|
||||
"cancel": "إلغاء",
|
||||
"promptPlaceholder": "اكتب المحث هنا. [العلامات السلبية], (زيادة الوزن) ++, (نقص الوزن)--, التبديل و الخلط متاحة (انظر الوثائق)",
|
||||
"sendTo": "أرسل إلى",
|
||||
"sendToImg2Img": "أرسل إلى صورة إلى صورة",
|
||||
|
1
invokeai/frontend/dist/locales/de.json
vendored
1
invokeai/frontend/dist/locales/de.json
vendored
@ -357,7 +357,6 @@
|
||||
"img2imgStrength": "Bild-zu-Bild-Stärke",
|
||||
"toggleLoopback": "Toggle Loopback",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "Abbrechen",
|
||||
"promptPlaceholder": "Prompt hier eingeben. [negative Token], (mehr Gewicht)++, (geringeres Gewicht)--, Tausch und Überblendung sind verfügbar (siehe Dokumente)",
|
||||
"sendTo": "Senden an",
|
||||
"sendToImg2Img": "Senden an Bild zu Bild",
|
||||
|
1
invokeai/frontend/dist/locales/es.json
vendored
1
invokeai/frontend/dist/locales/es.json
vendored
@ -365,7 +365,6 @@
|
||||
"img2imgStrength": "Peso de Imagen a Imagen",
|
||||
"toggleLoopback": "Alternar Retroalimentación",
|
||||
"invoke": "Invocar",
|
||||
"cancel": "Cancelar",
|
||||
"promptPlaceholder": "Ingrese la entrada aquí. [símbolos negativos], (subir peso)++, (bajar peso)--, también disponible alternado y mezclado (ver documentación)",
|
||||
"sendTo": "Enviar a",
|
||||
"sendToImg2Img": "Enviar a Imagen a Imagen",
|
||||
|
79
invokeai/frontend/dist/locales/fr.json
vendored
79
invokeai/frontend/dist/locales/fr.json
vendored
@ -15,8 +15,8 @@
|
||||
"langFrench": "Français",
|
||||
"nodesDesc": "Un système basé sur les nœuds pour la génération d'images est actuellement en développement. Restez à l'écoute pour des mises à jour à ce sujet.",
|
||||
"postProcessing": "Post-traitement",
|
||||
"postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu Options avancées des onglets Texte en image et Image en image. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image ci-dessus l'affichage d'image actuel ou dans le visualiseur.",
|
||||
"postProcessDesc2": "Une interface utilisateur dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.",
|
||||
"postProcessDesc1": "Invoke AI offre une grande variété de fonctionnalités de post-traitement. Le redimensionnement d'images et la restauration de visages sont déjà disponibles dans la WebUI. Vous pouvez y accéder à partir du menu 'Options avancées' des onglets 'Texte vers image' et 'Image vers image'. Vous pouvez également traiter les images directement en utilisant les boutons d'action d'image au-dessus de l'affichage d'image actuel ou dans le visualiseur.",
|
||||
"postProcessDesc2": "Une interface dédiée sera bientôt disponible pour faciliter les workflows de post-traitement plus avancés.",
|
||||
"postProcessDesc3": "L'interface en ligne de commande d'Invoke AI offre diverses autres fonctionnalités, notamment Embiggen.",
|
||||
"training": "Formation",
|
||||
"trainingDesc1": "Un workflow dédié pour former vos propres embeddings et checkpoints en utilisant Textual Inversion et Dreambooth depuis l'interface web.",
|
||||
@ -25,27 +25,27 @@
|
||||
"close": "Fermer",
|
||||
"load": "Charger",
|
||||
"back": "Retour",
|
||||
"statusConnected": "Connecté",
|
||||
"statusDisconnected": "Déconnecté",
|
||||
"statusConnected": "En ligne",
|
||||
"statusDisconnected": "Hors ligne",
|
||||
"statusError": "Erreur",
|
||||
"statusPreparing": "Préparation",
|
||||
"statusProcessingCanceled": "Traitement Annulé",
|
||||
"statusProcessingComplete": "Traitement Terminé",
|
||||
"statusProcessingCanceled": "Traitement annulé",
|
||||
"statusProcessingComplete": "Traitement terminé",
|
||||
"statusGenerating": "Génération",
|
||||
"statusGeneratingTextToImage": "Génération Texte vers Image",
|
||||
"statusGeneratingImageToImage": "Génération Image vers Image",
|
||||
"statusGeneratingInpainting": "Génération de Réparation",
|
||||
"statusGeneratingOutpainting": "Génération de Completion",
|
||||
"statusGenerationComplete": "Génération Terminée",
|
||||
"statusIterationComplete": "Itération Terminée",
|
||||
"statusSavingImage": "Sauvegarde de l'Image",
|
||||
"statusRestoringFaces": "Restauration des Visages",
|
||||
"statusRestoringFacesGFPGAN": "Restauration des Visages (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Restauration des Visages (CodeFormer)",
|
||||
"statusUpscaling": "Mise à Échelle",
|
||||
"statusUpscalingESRGAN": "Mise à Échelle (ESRGAN)",
|
||||
"statusLoadingModel": "Chargement du Modèle",
|
||||
"statusModelChanged": "Modèle Changé"
|
||||
"statusGeneratingInpainting": "Génération de réparation",
|
||||
"statusGeneratingOutpainting": "Génération de complétion",
|
||||
"statusGenerationComplete": "Génération terminée",
|
||||
"statusIterationComplete": "Itération terminée",
|
||||
"statusSavingImage": "Sauvegarde de l'image",
|
||||
"statusRestoringFaces": "Restauration des visages",
|
||||
"statusRestoringFacesGFPGAN": "Restauration des visages (GFPGAN)",
|
||||
"statusRestoringFacesCodeFormer": "Restauration des visages (CodeFormer)",
|
||||
"statusUpscaling": "Mise à échelle",
|
||||
"statusUpscalingESRGAN": "Mise à échelle (ESRGAN)",
|
||||
"statusLoadingModel": "Chargement du modèle",
|
||||
"statusModelChanged": "Modèle changé"
|
||||
},
|
||||
"gallery": {
|
||||
"generations": "Générations",
|
||||
@ -68,7 +68,7 @@
|
||||
"appHotkeys": "Raccourcis de l'application",
|
||||
"generalHotkeys": "Raccourcis généraux",
|
||||
"galleryHotkeys": "Raccourcis de la galerie",
|
||||
"unifiedCanvasHotkeys": "Raccourcis du Canvas unifié",
|
||||
"unifiedCanvasHotkeys": "Raccourcis du canvas unifié",
|
||||
"invoke": {
|
||||
"title": "Invoquer",
|
||||
"desc": "Générer une image"
|
||||
@ -78,36 +78,36 @@
|
||||
"desc": "Annuler la génération d'image"
|
||||
},
|
||||
"focusPrompt": {
|
||||
"title": "Prompt de Focus",
|
||||
"title": "Prompt de focus",
|
||||
"desc": "Mettre en focus la zone de saisie de la commande"
|
||||
},
|
||||
"toggleOptions": {
|
||||
"title": "Basculer Options",
|
||||
"desc": "Ouvrir et fermer le panneau d'options"
|
||||
"title": "Affichage des options",
|
||||
"desc": "Afficher et masquer le panneau d'options"
|
||||
},
|
||||
"pinOptions": {
|
||||
"title": "Epingler Options",
|
||||
"title": "Epinglage des options",
|
||||
"desc": "Epingler le panneau d'options"
|
||||
},
|
||||
"toggleViewer": {
|
||||
"title": "Basculer Visionneuse",
|
||||
"desc": "Ouvrir et fermer la visionneuse d'image"
|
||||
"title": "Affichage de la visionneuse",
|
||||
"desc": "Afficher et masquer la visionneuse d'image"
|
||||
},
|
||||
"toggleGallery": {
|
||||
"title": "Basculer Galerie",
|
||||
"desc": "Ouvrir et fermer le tiroir de galerie"
|
||||
"title": "Affichage de la galerie",
|
||||
"desc": "Afficher et masquer la galerie"
|
||||
},
|
||||
"maximizeWorkSpace": {
|
||||
"title": "Maximiser Espace de travail",
|
||||
"title": "Maximiser la zone de travail",
|
||||
"desc": "Fermer les panneaux et maximiser la zone de travail"
|
||||
},
|
||||
"changeTabs": {
|
||||
"title": "Changer d'onglets",
|
||||
"title": "Changer d'onglet",
|
||||
"desc": "Passer à un autre espace de travail"
|
||||
},
|
||||
"consoleToggle": {
|
||||
"title": "Bascule de la console",
|
||||
"desc": "Ouvrir et fermer la console"
|
||||
"title": "Affichage de la console",
|
||||
"desc": "Afficher et masquer la console"
|
||||
},
|
||||
"setPrompt": {
|
||||
"title": "Définir le prompt",
|
||||
@ -122,7 +122,7 @@
|
||||
"desc": "Utiliser tous les paramètres de l'image actuelle"
|
||||
},
|
||||
"restoreFaces": {
|
||||
"title": "Restaurer les faces",
|
||||
"title": "Restaurer les visages",
|
||||
"desc": "Restaurer l'image actuelle"
|
||||
},
|
||||
"upscale": {
|
||||
@ -155,7 +155,7 @@
|
||||
},
|
||||
"toggleGalleryPin": {
|
||||
"title": "Activer/désactiver l'épinglage de la galerie",
|
||||
"desc": "Épingle ou dépingle la galerie à l'interface utilisateur"
|
||||
"desc": "Épingle ou dépingle la galerie à l'interface"
|
||||
},
|
||||
"increaseGalleryThumbSize": {
|
||||
"title": "Augmenter la taille des miniatures de la galerie",
|
||||
@ -330,7 +330,7 @@
|
||||
"delete": "Supprimer",
|
||||
"deleteModel": "Supprimer le modèle",
|
||||
"deleteConfig": "Supprimer la configuration",
|
||||
"deleteMsg1": "Êtes-vous sûr de vouloir supprimer cette entrée de modèle dans InvokeAI?",
|
||||
"deleteMsg1": "Voulez-vous vraiment supprimer cette entrée de modèle dans InvokeAI ?",
|
||||
"deleteMsg2": "Cela n'effacera pas le fichier de point de contrôle du modèle de votre disque. Vous pouvez les réajouter si vous le souhaitez.",
|
||||
"formMessageDiffusersModelLocation": "Emplacement du modèle de diffuseurs",
|
||||
"formMessageDiffusersModelLocationDesc": "Veuillez en entrer au moins un.",
|
||||
@ -380,7 +380,6 @@
|
||||
"img2imgStrength": "Force de l'Image à l'Image",
|
||||
"toggleLoopback": "Activer/Désactiver la Boucle",
|
||||
"invoke": "Invoker",
|
||||
"cancel": "Annuler",
|
||||
"promptPlaceholder": "Tapez le prompt ici. [tokens négatifs], (poids positif)++, (poids négatif)--, swap et blend sont disponibles (voir les docs)",
|
||||
"sendTo": "Envoyer à",
|
||||
"sendToImg2Img": "Envoyer à Image à Image",
|
||||
@ -448,11 +447,11 @@
|
||||
"feature": {
|
||||
"prompt": "Ceci est le champ prompt. Le prompt inclut des objets de génération et des termes stylistiques. Vous pouvez également ajouter un poids (importance du jeton) dans le prompt, mais les commandes CLI et les paramètres ne fonctionneront pas.",
|
||||
"gallery": "La galerie affiche les générations à partir du dossier de sortie à mesure qu'elles sont créées. Les paramètres sont stockés dans des fichiers et accessibles via le menu contextuel.",
|
||||
"other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img: utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.",
|
||||
"seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération: les deux servent à ajouter de la variété à vos sorties.",
|
||||
"other": "Ces options activent des modes de traitement alternatifs pour Invoke. 'Tuilage seamless' créera des motifs répétitifs dans la sortie. 'Haute résolution' est la génération en deux étapes avec img2img : utilisez ce paramètre lorsque vous souhaitez une image plus grande et plus cohérente sans artefacts. Cela prendra plus de temps que d'habitude txt2img.",
|
||||
"seed": "La valeur de grain affecte le bruit initial à partir duquel l'image est formée. Vous pouvez utiliser les graines déjà existantes provenant d'images précédentes. 'Seuil de bruit' est utilisé pour atténuer les artefacts à des valeurs CFG élevées (essayez la plage de 0 à 10), et Perlin pour ajouter du bruit Perlin pendant la génération : les deux servent à ajouter de la variété à vos sorties.",
|
||||
"variations": "Essayez une variation avec une valeur comprise entre 0,1 et 1,0 pour changer le résultat pour une graine donnée. Des variations intéressantes de la graine sont entre 0,1 et 0,3.",
|
||||
"upscale": "Utilisez ESRGAN pour agrandir l'image immédiatement après la génération.",
|
||||
"faceCorrection": "Correction de visage avec GFPGAN ou Codeformer: l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.",
|
||||
"faceCorrection": "Correction de visage avec GFPGAN ou Codeformer : l'algorithme détecte les visages dans l'image et corrige tout défaut. La valeur élevée changera plus l'image, ce qui donnera des visages plus attirants. Codeformer avec une fidélité plus élevée préserve l'image originale au prix d'une correction de visage plus forte.",
|
||||
"imageToImage": "Image to Image charge n'importe quelle image en tant qu'initiale, qui est ensuite utilisée pour générer une nouvelle avec le prompt. Plus la valeur est élevée, plus l'image de résultat changera. Des valeurs de 0,0 à 1,0 sont possibles, la plage recommandée est de 0,25 à 0,75",
|
||||
"boundingBox": "La boîte englobante est la même que les paramètres Largeur et Hauteur pour Texte à Image ou Image à Image. Seulement la zone dans la boîte sera traitée.",
|
||||
"seamCorrection": "Contrôle la gestion des coutures visibles qui se produisent entre les images générées sur la toile.",
|
||||
@ -495,11 +494,11 @@
|
||||
"clearCanvasHistory": "Effacer l'historique du canvas",
|
||||
"clearHistory": "Effacer l'historique",
|
||||
"clearCanvasHistoryMessage": "Effacer l'historique du canvas laisse votre canvas actuel intact, mais efface de manière irréversible l'historique annuler et refaire.",
|
||||
"clearCanvasHistoryConfirm": "Êtes-vous sûr de vouloir effacer l'historique du canvas?",
|
||||
"clearCanvasHistoryConfirm": "Voulez-vous vraiment effacer l'historique du canvas ?",
|
||||
"emptyTempImageFolder": "Vider le dossier d'images temporaires",
|
||||
"emptyFolder": "Vider le dossier",
|
||||
"emptyTempImagesFolderMessage": "Vider le dossier d'images temporaires réinitialise également complètement le canvas unifié. Cela inclut tout l'historique annuler/refaire, les images dans la zone de mise en attente et la couche de base du canvas.",
|
||||
"emptyTempImagesFolderConfirm": "Êtes-vous sûr de vouloir vider le dossier temporaire?",
|
||||
"emptyTempImagesFolderConfirm": "Voulez-vous vraiment vider le dossier temporaire ?",
|
||||
"activeLayer": "Calque actif",
|
||||
"canvasScale": "Échelle du canevas",
|
||||
"boundingBox": "Boîte englobante",
|
||||
|
10
invokeai/frontend/dist/locales/it.json
vendored
10
invokeai/frontend/dist/locales/it.json
vendored
@ -438,7 +438,6 @@
|
||||
"img2imgStrength": "Forza da Immagine a Immagine",
|
||||
"toggleLoopback": "Attiva/disattiva elaborazione ricorsiva",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "Annulla",
|
||||
"promptPlaceholder": "Digita qui il prompt usando termini in lingua inglese. [token negativi], (aumenta il peso)++, (diminuisci il peso)--, scambia e fondi sono disponibili (consulta la documentazione)",
|
||||
"sendTo": "Invia a",
|
||||
"sendToImg2Img": "Invia a da Immagine a Immagine",
|
||||
@ -459,7 +458,14 @@
|
||||
"denoisingStrength": "Forza riduzione rumore",
|
||||
"copyImage": "Copia immagine",
|
||||
"hiresStrength": "Forza Alta Risoluzione",
|
||||
"negativePrompts": "Prompt Negativi"
|
||||
"negativePrompts": "Prompt Negativi",
|
||||
"imageToImage": "Immagine a Immagine",
|
||||
"cancel": {
|
||||
"schedule": "Annulla dopo l'iterazione corrente",
|
||||
"isScheduled": "Annullamento",
|
||||
"setType": "Imposta il tipo di annullamento",
|
||||
"immediate": "Annulla immediatamente"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"models": "Modelli",
|
||||
|
1
invokeai/frontend/dist/locales/ja.json
vendored
1
invokeai/frontend/dist/locales/ja.json
vendored
@ -304,7 +304,6 @@
|
||||
"scaledHeight": "高さのスケール",
|
||||
"boundingBoxHeader": "バウンディングボックス",
|
||||
"img2imgStrength": "Image To Imageの強度",
|
||||
"cancel": "キャンセル",
|
||||
"sendTo": "転送",
|
||||
"sendToImg2Img": "Image to Imageに転送",
|
||||
"sendToUnifiedCanvas": "Unified Canvasに転送",
|
||||
|
1
invokeai/frontend/dist/locales/nl.json
vendored
1
invokeai/frontend/dist/locales/nl.json
vendored
@ -364,7 +364,6 @@
|
||||
"img2imgStrength": "Sterkte Afbeelding naar afbeelding",
|
||||
"toggleLoopback": "Zet recursieve verwerking aan/uit",
|
||||
"invoke": "Genereer",
|
||||
"cancel": "Annuleer",
|
||||
"promptPlaceholder": "Voer invoertekst hier in. [negatieve trefwoorden], (verhoogdgewicht)++, (verlaagdgewicht)--, swap (wisselen) en blend (mengen) zijn beschikbaar (zie documentatie)",
|
||||
"sendTo": "Stuur naar",
|
||||
"sendToImg2Img": "Stuur naar Afbeelding naar afbeelding",
|
||||
|
2
invokeai/frontend/dist/locales/pl.json
vendored
2
invokeai/frontend/dist/locales/pl.json
vendored
@ -269,7 +269,6 @@
|
||||
"desc": "Akceptuje aktualnie wybrany obraz tymczasowy"
|
||||
}
|
||||
},
|
||||
"modelManager": {},
|
||||
"parameters": {
|
||||
"images": "L. obrazów",
|
||||
"steps": "L. kroków",
|
||||
@ -313,7 +312,6 @@
|
||||
"img2imgStrength": "Wpływ sugestii na obraz",
|
||||
"toggleLoopback": "Wł/wył sprzężenie zwrotne",
|
||||
"invoke": "Wywołaj",
|
||||
"cancel": "Anuluj",
|
||||
"promptPlaceholder": "W tym miejscu wprowadź swoje sugestie. [negatywne sugestie], (wzmocnienie), (osłabienie)--, po więcej opcji (np. swap lub blend) zajrzyj do dokumentacji",
|
||||
"sendTo": "Wyślij do",
|
||||
"sendToImg2Img": "Użyj w trybie \"Obraz na obraz\"",
|
||||
|
2
invokeai/frontend/dist/locales/pt_BR.json
vendored
2
invokeai/frontend/dist/locales/pt_BR.json
vendored
@ -362,7 +362,6 @@
|
||||
"img2imgStrength": "Força de Imagem Para Imagem",
|
||||
"toggleLoopback": "Ativar Loopback",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "Cancelar",
|
||||
"promptPlaceholder": "Digite o prompt aqui. [tokens negativos], (upweight)++, (downweight)--, trocar e misturar estão disponíveis (veja docs)",
|
||||
"sendTo": "Mandar para",
|
||||
"sendToImg2Img": "Mandar para Imagem Para Imagem",
|
||||
@ -425,7 +424,6 @@
|
||||
"initialImageNotSet": "Imagem Inicial Não Definida",
|
||||
"initialImageNotSetDesc": "Não foi possível carregar imagem incial"
|
||||
},
|
||||
"tooltip": {},
|
||||
"unifiedCanvas": {
|
||||
"layer": "Camada",
|
||||
"base": "Base",
|
||||
|
1
invokeai/frontend/dist/locales/ru.json
vendored
1
invokeai/frontend/dist/locales/ru.json
vendored
@ -365,7 +365,6 @@
|
||||
"img2imgStrength": "Сила обработки img2img",
|
||||
"toggleLoopback": "Зациклить обработку",
|
||||
"invoke": "Вызвать",
|
||||
"cancel": "Отменить",
|
||||
"promptPlaceholder": "Введите запрос здесь (на английском). [исключенные токены], (более значимые)++, (менее значимые)--, swap и blend тоже доступны (смотрите Github)",
|
||||
"sendTo": "Отправить",
|
||||
"sendToImg2Img": "Отправить в img2img",
|
||||
|
1
invokeai/frontend/dist/locales/uk.json
vendored
1
invokeai/frontend/dist/locales/uk.json
vendored
@ -365,7 +365,6 @@
|
||||
"img2imgStrength": "Сила обробки img2img",
|
||||
"toggleLoopback": "Зациклити обробку",
|
||||
"invoke": "Викликати",
|
||||
"cancel": "Скасувати",
|
||||
"promptPlaceholder": "Введіть запит тут (англійською). [видалені токени], (більш вагомі)++, (менш вагомі)--, swap и blend також доступні (дивіться Github)",
|
||||
"sendTo": "Надіслати",
|
||||
"sendToImg2Img": "Надіслати у img2img",
|
||||
|
2
invokeai/frontend/dist/locales/zh_CN.json
vendored
2
invokeai/frontend/dist/locales/zh_CN.json
vendored
@ -362,7 +362,6 @@
|
||||
"img2imgStrength": "图像到图像强度",
|
||||
"toggleLoopback": "切换环回",
|
||||
"invoke": "Invoke",
|
||||
"cancel": "取消",
|
||||
"promptPlaceholder": "在这里输入提示。可以使用[反提示]、(加权)++、(减权)--、交换和混合(见文档)",
|
||||
"sendTo": "发送到",
|
||||
"sendToImg2Img": "发送到图像到图像",
|
||||
@ -425,7 +424,6 @@
|
||||
"initialImageNotSet": "初始图像未设定",
|
||||
"initialImageNotSetDesc": "无法加载初始图像"
|
||||
},
|
||||
"tooltip": {},
|
||||
"unifiedCanvas": {
|
||||
"layer": "图层",
|
||||
"base": "基础层",
|
||||
|
@ -40,11 +40,15 @@ const cancelButtonSelector = createSelector(
|
||||
}
|
||||
);
|
||||
|
||||
interface CancelButtonProps {
|
||||
btnGroupWidth?: string | number;
|
||||
}
|
||||
|
||||
export default function CancelButton(
|
||||
props: Omit<IAIIconButtonProps, 'aria-label'>
|
||||
props: CancelButtonProps & Omit<IAIIconButtonProps, 'aria-label'>
|
||||
) {
|
||||
const dispatch = useAppDispatch();
|
||||
const { ...rest } = props;
|
||||
const { btnGroupWidth = 'auto', ...rest } = props;
|
||||
const {
|
||||
isProcessing,
|
||||
isConnected,
|
||||
@ -91,7 +95,12 @@ export default function CancelButton(
|
||||
];
|
||||
|
||||
return (
|
||||
<ButtonGroup isAttached variant="link">
|
||||
<ButtonGroup
|
||||
isAttached
|
||||
variant="link"
|
||||
minHeight="2.5rem"
|
||||
width={btnGroupWidth}
|
||||
>
|
||||
{cancelType === 'immediate' ? (
|
||||
<IAIIconButton
|
||||
icon={<MdCancel />}
|
||||
|
@ -69,7 +69,7 @@ const initialSystemState: SystemState = {
|
||||
isESRGANAvailable: true,
|
||||
socketId: '',
|
||||
shouldConfirmOnDelete: true,
|
||||
openAccordions: [],
|
||||
openAccordions: [0],
|
||||
currentStep: 0,
|
||||
totalSteps: 0,
|
||||
currentIteration: 0,
|
||||
|
@ -2,20 +2,13 @@ import { useAppDispatch, useAppSelector } from 'app/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { setDoesCanvasNeedScaling } from 'features/canvas/store/canvasSlice';
|
||||
import { setShouldShowGallery } from 'features/gallery/store/gallerySlice';
|
||||
import { setShouldShowParametersPanel } from 'features/ui/store/uiSlice';
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { MdPhotoLibrary } from 'react-icons/md';
|
||||
import { floatingSelector } from './FloatingParametersPanelButtons';
|
||||
|
||||
const FloatingGalleryButton = () => {
|
||||
const dispatch = useAppDispatch();
|
||||
const {
|
||||
shouldShowGallery,
|
||||
shouldShowGalleryButton,
|
||||
shouldPinGallery,
|
||||
shouldShowParametersPanel,
|
||||
shouldPinParametersPanel,
|
||||
} = useAppSelector(floatingSelector);
|
||||
const { shouldShowGalleryButton, shouldPinGallery } =
|
||||
useAppSelector(floatingSelector);
|
||||
|
||||
const handleShowGallery = () => {
|
||||
dispatch(setShouldShowGallery(true));
|
||||
@ -24,22 +17,6 @@ const FloatingGalleryButton = () => {
|
||||
}
|
||||
};
|
||||
|
||||
useHotkeys(
|
||||
'f',
|
||||
() => {
|
||||
if (shouldShowGallery || shouldShowParametersPanel) {
|
||||
dispatch(setShouldShowParametersPanel(false));
|
||||
dispatch(setShouldShowGallery(false));
|
||||
} else {
|
||||
dispatch(setShouldShowParametersPanel(true));
|
||||
dispatch(setShouldShowGallery(true));
|
||||
}
|
||||
if (shouldPinGallery || shouldPinParametersPanel)
|
||||
setTimeout(() => dispatch(setDoesCanvasNeedScaling(true)), 400);
|
||||
},
|
||||
[shouldShowGallery, shouldShowParametersPanel]
|
||||
);
|
||||
|
||||
return shouldShowGalleryButton ? (
|
||||
<IAIIconButton
|
||||
tooltip="Show Gallery (G)"
|
||||
|
@ -3,10 +3,7 @@ import { useAppDispatch, useAppSelector } from 'app/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { setDoesCanvasNeedScaling } from 'features/canvas/store/canvasSlice';
|
||||
import { gallerySelector } from 'features/gallery/store/gallerySelectors';
|
||||
import {
|
||||
GalleryState,
|
||||
setShouldShowGallery,
|
||||
} from 'features/gallery/store/gallerySlice';
|
||||
import { GalleryState } from 'features/gallery/store/gallerySlice';
|
||||
import CancelButton from 'features/parameters/components/ProcessButtons/CancelButton';
|
||||
import InvokeButton from 'features/parameters/components/ProcessButtons/InvokeButton';
|
||||
import {
|
||||
@ -16,7 +13,6 @@ import {
|
||||
import { setShouldShowParametersPanel } from 'features/ui/store/uiSlice';
|
||||
import { isEqual } from 'lodash';
|
||||
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { FaSlidersH } from 'react-icons/fa';
|
||||
|
||||
export const floatingSelector = createSelector(
|
||||
@ -67,12 +63,9 @@ export const floatingSelector = createSelector(
|
||||
const FloatingParametersPanelButtons = () => {
|
||||
const dispatch = useAppDispatch();
|
||||
const {
|
||||
shouldShowParametersPanel,
|
||||
shouldShowParametersPanelButton,
|
||||
shouldShowProcessButtons,
|
||||
shouldPinParametersPanel,
|
||||
shouldShowGallery,
|
||||
shouldPinGallery,
|
||||
} = useAppSelector(floatingSelector);
|
||||
|
||||
const handleShowOptionsPanel = () => {
|
||||
@ -82,22 +75,6 @@ const FloatingParametersPanelButtons = () => {
|
||||
}
|
||||
};
|
||||
|
||||
useHotkeys(
|
||||
'f',
|
||||
() => {
|
||||
if (shouldShowGallery || shouldShowParametersPanel) {
|
||||
dispatch(setShouldShowParametersPanel(false));
|
||||
dispatch(setShouldShowGallery(false));
|
||||
} else {
|
||||
dispatch(setShouldShowParametersPanel(true));
|
||||
dispatch(setShouldShowGallery(true));
|
||||
}
|
||||
if (shouldPinGallery || shouldPinParametersPanel)
|
||||
setTimeout(() => dispatch(setDoesCanvasNeedScaling(true)), 400);
|
||||
},
|
||||
[shouldShowGallery, shouldShowParametersPanel]
|
||||
);
|
||||
|
||||
return shouldShowParametersPanelButton ? (
|
||||
<div className="show-hide-button-options">
|
||||
<IAIIconButton
|
||||
|
@ -11,14 +11,20 @@ import PostprocessingIcon from 'common/icons/PostprocessingIcon';
|
||||
import TextToImageIcon from 'common/icons/TextToImageIcon';
|
||||
import TrainingIcon from 'common/icons/TrainingIcon';
|
||||
import UnifiedCanvasIcon from 'common/icons/UnifiedCanvasIcon';
|
||||
import { setDoesCanvasNeedScaling } from 'features/canvas/store/canvasSlice';
|
||||
import { setShouldShowGallery } from 'features/gallery/store/gallerySlice';
|
||||
import Lightbox from 'features/lightbox/components/Lightbox';
|
||||
import { setIsLightboxOpen } from 'features/lightbox/store/lightboxSlice';
|
||||
import { InvokeTabName } from 'features/ui/store/tabMap';
|
||||
import { setActiveTab } from 'features/ui/store/uiSlice';
|
||||
import {
|
||||
setActiveTab,
|
||||
setShouldShowParametersPanel,
|
||||
} from 'features/ui/store/uiSlice';
|
||||
import i18n from 'i18n';
|
||||
import { ReactElement } from 'react';
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { activeTabIndexSelector } from '../store/uiSelectors';
|
||||
import { floatingSelector } from './FloatingParametersPanelButtons';
|
||||
import ImageToImageWorkarea from './ImageToImage';
|
||||
import TextToImageWorkarea from './TextToImage';
|
||||
import UnifiedCanvasWorkarea from './UnifiedCanvas/UnifiedCanvasWorkarea';
|
||||
@ -73,10 +79,18 @@ function updateTabTranslations() {
|
||||
|
||||
export default function InvokeTabs() {
|
||||
const activeTab = useAppSelector(activeTabIndexSelector);
|
||||
|
||||
const isLightBoxOpen = useAppSelector(
|
||||
(state: RootState) => state.lightbox.isLightboxOpen
|
||||
);
|
||||
|
||||
const {
|
||||
shouldShowGallery,
|
||||
shouldShowParametersPanel,
|
||||
shouldPinGallery,
|
||||
shouldPinParametersPanel,
|
||||
} = useAppSelector(floatingSelector);
|
||||
|
||||
useUpdateTranslations(updateTabTranslations);
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
@ -114,6 +128,22 @@ export default function InvokeTabs() {
|
||||
[isLightBoxOpen]
|
||||
);
|
||||
|
||||
useHotkeys(
|
||||
'f',
|
||||
() => {
|
||||
if (shouldShowGallery || shouldShowParametersPanel) {
|
||||
dispatch(setShouldShowParametersPanel(false));
|
||||
dispatch(setShouldShowGallery(false));
|
||||
} else {
|
||||
dispatch(setShouldShowParametersPanel(true));
|
||||
dispatch(setShouldShowGallery(true));
|
||||
}
|
||||
if (shouldPinGallery || shouldPinParametersPanel)
|
||||
setTimeout(() => dispatch(setDoesCanvasNeedScaling(true)), 400);
|
||||
},
|
||||
[shouldShowGallery, shouldShowParametersPanel]
|
||||
);
|
||||
|
||||
const renderTabs = () => {
|
||||
const tabsToRender: ReactElement[] = [];
|
||||
Object.keys(tabDict).forEach((key) => {
|
||||
|
@ -38,7 +38,7 @@ export default function UnifiedCanvasProcessingButtons() {
|
||||
<InvokeButton iconButton />
|
||||
</Flex>
|
||||
<Flex>
|
||||
<CancelButton width="100%" height="40px" />
|
||||
<CancelButton width="100%" height="40px" btnGroupWidth="100%" />
|
||||
</Flex>
|
||||
</Flex>
|
||||
);
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user