Skip to content

Commit 1d05060

Browse files
Merge branch 'main' into main
2 parents 970b2a8 + 9ec4d96 commit 1d05060

File tree

33 files changed

+602
-240
lines changed

33 files changed

+602
-240
lines changed

invokeai/app/invocations/flux_redux.py

+35-11
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020
)
2121
from invokeai.app.invocations.model import ModelIdentifierField
2222
from invokeai.app.invocations.primitives import ImageField
23+
from invokeai.app.services.model_records.model_records_base import ModelRecordChanges
2324
from invokeai.app.services.shared.invocation_context import InvocationContext
2425
from invokeai.backend.flux.redux.flux_redux_model import FluxReduxModel
26+
from invokeai.backend.model_manager.config import AnyModelConfig, BaseModelType, ModelType
27+
from invokeai.backend.model_manager.starter_models import siglip
2528
from invokeai.backend.sig_lip.sig_lip_pipeline import SigLipPipeline
2629
from invokeai.backend.util.devices import TorchDevice
2730

@@ -35,16 +38,12 @@ class FluxReduxOutput(BaseInvocationOutput):
3538
)
3639

3740

38-
SIGLIP_STARTER_MODEL_NAME = "SigLIP - google/siglip-so400m-patch14-384"
39-
FLUX_REDUX_STARTER_MODEL_NAME = "FLUX Redux"
40-
41-
4241
@invocation(
4342
"flux_redux",
4443
title="FLUX Redux",
4544
tags=["ip_adapter", "control"],
4645
category="ip_adapter",
47-
version="1.0.0",
46+
version="2.0.0",
4847
classification=Classification.Prototype,
4948
)
5049
class FluxReduxInvocation(BaseInvocation):
@@ -61,11 +60,6 @@ class FluxReduxInvocation(BaseInvocation):
6160
title="FLUX Redux Model",
6261
ui_type=UIType.FluxReduxModel,
6362
)
64-
siglip_model: ModelIdentifierField = InputField(
65-
description="The SigLIP model to use.",
66-
title="SigLIP Model",
67-
ui_type=UIType.SigLipModel,
68-
)
6963

7064
def invoke(self, context: InvocationContext) -> FluxReduxOutput:
7165
image = context.images.get_pil(self.image.image_name, "RGB")
@@ -80,7 +74,8 @@ def invoke(self, context: InvocationContext) -> FluxReduxOutput:
8074

8175
@torch.no_grad()
8276
def _siglip_encode(self, context: InvocationContext, image: Image.Image) -> torch.Tensor:
83-
with context.models.load(self.siglip_model).model_on_device() as (_, siglip_pipeline):
77+
siglip_model_config = self._get_siglip_model(context)
78+
with context.models.load(siglip_model_config.key).model_on_device() as (_, siglip_pipeline):
8479
assert isinstance(siglip_pipeline, SigLipPipeline)
8580
return siglip_pipeline.encode_image(
8681
x=image, device=TorchDevice.choose_torch_device(), dtype=TorchDevice.choose_torch_dtype()
@@ -93,3 +88,32 @@ def _flux_redux_encode(self, context: InvocationContext, encoded_x: torch.Tensor
9388
dtype = next(flux_redux.parameters()).dtype
9489
encoded_x = encoded_x.to(dtype=dtype)
9590
return flux_redux(encoded_x)
91+
92+
def _get_siglip_model(self, context: InvocationContext) -> AnyModelConfig:
93+
siglip_models = context.models.search_by_attrs(name=siglip.name, base=BaseModelType.Any, type=ModelType.SigLIP)
94+
95+
if not len(siglip_models) > 0:
96+
context.logger.warning(
97+
f"The SigLIP model required by FLUX Redux ({siglip.name}) is not installed. Downloading and installing now. This may take a while."
98+
)
99+
100+
# TODO(psyche): Can the probe reliably determine the type of the model? Just hardcoding it bc I don't want to experiment now
101+
config_overrides = ModelRecordChanges(name=siglip.name, type=ModelType.SigLIP)
102+
103+
# Queue the job
104+
job = context._services.model_manager.install.heuristic_import(siglip.source, config=config_overrides)
105+
106+
# Wait for up to 10 minutes - model is ~3.5GB
107+
context._services.model_manager.install.wait_for_job(job, timeout=600)
108+
109+
siglip_models = context.models.search_by_attrs(
110+
name=siglip.name,
111+
base=BaseModelType.Any,
112+
type=ModelType.SigLIP,
113+
)
114+
115+
if len(siglip_models) == 0:
116+
context.logger.error("Error while fetching SigLIP for FLUX Redux")
117+
assert len(siglip_models) == 1
118+
119+
return siglip_models[0]

invokeai/backend/model_manager/starter_models.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,7 @@ class StarterModelBundles(BaseModel):
610610
source="black-forest-labs/FLUX.1-Redux-dev::flux1-redux-dev.safetensors",
611611
description="FLUX Redux model (for image variation).",
612612
type=ModelType.FluxRedux,
613+
dependencies=[siglip],
613614
)
614615
# endregion
615616

@@ -717,7 +718,6 @@ class StarterModelBundles(BaseModel):
717718
scribble_sdxl,
718719
tile_sdxl,
719720
swinir,
720-
flux_redux,
721721
]
722722

723723
flux_bundle: list[StarterModel] = [
@@ -730,7 +730,7 @@ class StarterModelBundles(BaseModel):
730730
ip_adapter_flux,
731731
flux_canny_control_lora,
732732
flux_depth_control_lora,
733-
siglip,
733+
flux_redux,
734734
]
735735

736736
STARTER_BUNDLES: dict[str, list[StarterModel]] = {

invokeai/frontend/web/public/locales/de.json

+14-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@
113113
"end": "Ende",
114114
"layout": "Layout",
115115
"board": "Ordner",
116-
"combinatorial": "Kombinatorisch"
116+
"combinatorial": "Kombinatorisch",
117+
"saveChanges": "Änderungen speichern"
117118
},
118119
"gallery": {
119120
"galleryImageSize": "Bildgröße",
@@ -761,7 +762,16 @@
761762
"workflowDeleted": "Arbeitsablauf gelöscht",
762763
"errorCopied": "Fehler kopiert",
763764
"layerCopiedToClipboard": "Ebene in die Zwischenablage kopiert",
764-
"sentToCanvas": "An Leinwand gesendet"
765+
"sentToCanvas": "An Leinwand gesendet",
766+
"problemDeletingWorkflow": "Problem beim Löschen des Arbeitsablaufs",
767+
"uploadFailedInvalidUploadDesc_withCount_one": "Es darf maximal 1 PNG- oder JPEG-Bild sein.",
768+
"uploadFailedInvalidUploadDesc_withCount_other": "Es dürfen maximal {{count}} PNG- oder JPEG-Bilder sein.",
769+
"problemRetrievingWorkflow": "Problem beim Abrufen des Arbeitsablaufs",
770+
"uploadFailedInvalidUploadDesc": "Müssen PNG- oder JPEG-Bilder sein.",
771+
"pasteSuccess": "Eingefügt in {{destination}}",
772+
"pasteFailed": "Einfügen fehlgeschlagen",
773+
"unableToCopy": "Kopieren nicht möglich",
774+
"unableToCopyDesc_theseSteps": "diese Schritte"
765775
},
766776
"accessibility": {
767777
"uploadImage": "Bild hochladen",
@@ -1314,7 +1324,8 @@
13141324
"nodeName": "Knotenname",
13151325
"description": "Beschreibung",
13161326
"loadWorkflowDesc": "Arbeitsablauf laden?",
1317-
"loadWorkflowDesc2": "Ihr aktueller Arbeitsablauf enthält nicht gespeicherte Änderungen."
1327+
"loadWorkflowDesc2": "Ihr aktueller Arbeitsablauf enthält nicht gespeicherte Änderungen.",
1328+
"loadingTemplates": "Lade {{name}}"
13181329
},
13191330
"hrf": {
13201331
"enableHrf": "Korrektur für hohe Auflösungen",

invokeai/frontend/web/public/locales/en.json

+2
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,8 @@
17411741
"row": "Row",
17421742
"column": "Column",
17431743
"container": "Container",
1744+
"containerRowLayout": "Container (row layout)",
1745+
"containerColumnLayout": "Container (column layout)",
17441746
"heading": "Heading",
17451747
"text": "Text",
17461748
"divider": "Divider",

invokeai/frontend/web/public/locales/fr.json

-1
Original file line numberDiff line numberDiff line change
@@ -1771,7 +1771,6 @@
17711771
"projectWorkflows": "Workflows du projet",
17721772
"copyShareLink": "Copier le lien de partage",
17731773
"chooseWorkflowFromLibrary": "Choisir le Workflow dans la Bibliothèque",
1774-
"uploadAndSaveWorkflow": "Importer dans la bibliothèque",
17751774
"edit": "Modifer",
17761775
"deleteWorkflow2": "Êtes-vous sûr de vouloir supprimer ce Workflow ? Cette action ne peut pas être annulé.",
17771776
"download": "Télécharger",

invokeai/frontend/web/public/locales/it.json

+22-10
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@
109109
"board": "Bacheca",
110110
"layout": "Schema",
111111
"row": "Riga",
112-
"column": "Colonna"
112+
"column": "Colonna",
113+
"saveChanges": "Salva modifiche"
113114
},
114115
"gallery": {
115116
"galleryImageSize": "Dimensione dell'immagine",
@@ -784,7 +785,7 @@
784785
"serverError": "Errore del Server",
785786
"connected": "Connesso al server",
786787
"canceled": "Elaborazione annullata",
787-
"uploadFailedInvalidUploadDesc": "Devono essere immagini PNG o JPEG.",
788+
"uploadFailedInvalidUploadDesc": "Devono essere immagini PNG, JPEG o WEBP.",
788789
"parameterSet": "Parametro richiamato",
789790
"parameterNotSet": "Parametro non richiamato",
790791
"problemCopyingImage": "Impossibile copiare l'immagine",
@@ -835,9 +836,9 @@
835836
"linkCopied": "Collegamento copiato",
836837
"addedToUncategorized": "Aggiunto alle risorse della bacheca $t(boards.uncategorized)",
837838
"imagesWillBeAddedTo": "Le immagini caricate verranno aggiunte alle risorse della bacheca {{boardName}}.",
838-
"uploadFailedInvalidUploadDesc_withCount_one": "Devi caricare al massimo 1 immagine PNG o JPEG.",
839-
"uploadFailedInvalidUploadDesc_withCount_many": "Devi caricare al massimo {{count}} immagini PNG o JPEG.",
840-
"uploadFailedInvalidUploadDesc_withCount_other": "Devi caricare al massimo {{count}} immagini PNG o JPEG.",
839+
"uploadFailedInvalidUploadDesc_withCount_one": "Devi caricare al massimo 1 immagine PNG, JPEG o WEBP.",
840+
"uploadFailedInvalidUploadDesc_withCount_many": "Devi caricare al massimo {{count}} immagini PNG, JPEG o WEBP.",
841+
"uploadFailedInvalidUploadDesc_withCount_other": "Devi caricare al massimo {{count}} immagini PNG, JPEG o WEBP.",
841842
"outOfMemoryErrorDescLocal": "Segui la nostra <LinkComponent>guida per bassa VRAM</LinkComponent> per ridurre gli OOM.",
842843
"pasteFailed": "Incolla non riuscita",
843844
"pasteSuccess": "Incollato su {{destination}}",
@@ -1704,7 +1705,7 @@
17041705
"saveWorkflow": "Salva flusso di lavoro",
17051706
"openWorkflow": "Apri flusso di lavoro",
17061707
"clearWorkflowSearchFilter": "Cancella il filtro di ricerca del flusso di lavoro",
1707-
"workflowLibrary": "Libreria",
1708+
"workflowLibrary": "Libreria flussi di lavoro",
17081709
"workflowSaved": "Flusso di lavoro salvato",
17091710
"unnamedWorkflow": "Flusso di lavoro senza nome",
17101711
"savingWorkflow": "Salvataggio del flusso di lavoro...",
@@ -1734,7 +1735,6 @@
17341735
"userWorkflows": "Flussi di lavoro utente",
17351736
"projectWorkflows": "Flussi di lavoro del progetto",
17361737
"defaultWorkflows": "Flussi di lavoro predefiniti",
1737-
"uploadAndSaveWorkflow": "Carica nella libreria",
17381738
"chooseWorkflowFromLibrary": "Scegli il flusso di lavoro dalla libreria",
17391739
"deleteWorkflow2": "Vuoi davvero eliminare questo flusso di lavoro? Questa operazione non può essere annullata.",
17401740
"edit": "Modifica",
@@ -1772,7 +1772,19 @@
17721772
"container": "Contenitore",
17731773
"text": "Testo",
17741774
"numberInput": "Ingresso numerico"
1775-
}
1775+
},
1776+
"loadMore": "Carica altro",
1777+
"searchPlaceholder": "Cerca per nome, descrizione o etichetta",
1778+
"filterByTags": "Filtra per etichetta",
1779+
"shared": "Condiviso",
1780+
"browseWorkflows": "Sfoglia i flussi di lavoro",
1781+
"resetTags": "Reimposta le etichette",
1782+
"allLoaded": "Tutti i flussi di lavoro caricati",
1783+
"saveChanges": "Salva modifiche",
1784+
"yourWorkflows": "I tuoi flussi di lavoro",
1785+
"recentlyOpened": "Aperto di recente",
1786+
"workflowThumbnail": "Miniatura del flusso di lavoro",
1787+
"private": "Privato"
17761788
},
17771789
"accordions": {
17781790
"compositing": {
@@ -2330,8 +2342,8 @@
23302342
"watchRecentReleaseVideos": "Guarda i video su questa versione",
23312343
"watchUiUpdatesOverview": "Guarda le novità dell'interfaccia",
23322344
"items": [
2333-
"Editor del flusso di lavoro: nuovo generatore di moduli trascina-e-rilascia per una creazione più facile del flusso di lavoro.",
2334-
"Altri miglioramenti: messa in coda dei lotti più rapida, migliore ampliamento, selettore colore migliorato e nodi metadati."
2345+
"Gestione della memoria: nuova impostazione per gli utenti con GPU Nvidia per ridurre l'utilizzo della VRAM.",
2346+
"Prestazioni: continui miglioramenti alle prestazioni e alla reattività complessive dell'applicazione."
23352347
]
23362348
},
23372349
"system": {

invokeai/frontend/web/public/locales/ru.json

-1
Original file line numberDiff line numberDiff line change
@@ -1566,7 +1566,6 @@
15661566
"defaultWorkflows": "Стандартные рабочие процессы",
15671567
"deleteWorkflow2": "Вы уверены, что хотите удалить этот рабочий процесс? Это нельзя отменить.",
15681568
"chooseWorkflowFromLibrary": "Выбрать рабочий процесс из библиотеки",
1569-
"uploadAndSaveWorkflow": "Загрузить в библиотеку",
15701569
"edit": "Редактировать",
15711570
"download": "Скачать",
15721571
"copyShareLink": "Скопировать ссылку на общий доступ",

invokeai/frontend/web/public/locales/vi.json

+25-11
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,8 @@
235235
"column": "Cột",
236236
"layout": "Bố Cục",
237237
"row": "Hàng",
238-
"board": "Bảng"
238+
"board": "Bảng",
239+
"saveChanges": "Lưu Thay Đổi"
239240
},
240241
"prompt": {
241242
"addPromptTrigger": "Thêm Prompt Trigger",
@@ -766,7 +767,9 @@
766767
"urlUnauthorizedErrorMessage2": "Tìm hiểu thêm.",
767768
"urlForbidden": "Bạn không có quyền truy cập vào model này",
768769
"urlForbiddenErrorMessage": "Bạn có thể cần yêu cầu quyền truy cập từ trang web đang cung cấp model.",
769-
"urlUnauthorizedErrorMessage": "Bạn có thể cần thiếp lập một token API để dùng được model này."
770+
"urlUnauthorizedErrorMessage": "Bạn có thể cần thiếp lập một token API để dùng được model này.",
771+
"fluxRedux": "FLUX Redux",
772+
"sigLip": "SigLIP"
770773
},
771774
"metadata": {
772775
"guidance": "Hướng Dẫn",
@@ -979,7 +982,7 @@
979982
"unknownInput": "Đầu Vào Không Rõ: {{name}}",
980983
"validateConnections": "Xác Thực Kết Nối Và Đồ Thị",
981984
"workflowNotes": "Ghi Chú",
982-
"workflowTags": "Thẻ Tên",
985+
"workflowTags": "Nhãn",
983986
"editMode": "Chỉnh sửa trong Trình Biên Tập Workflow",
984987
"edit": "Chỉnh Sửa",
985988
"executionStateInProgress": "Đang Xử Lý",
@@ -2021,7 +2024,7 @@
20212024
},
20222025
"mergingLayers": "Đang gộp layer",
20232026
"controlLayerEmptyState": "<UploadButton>Tải lên ảnh</UploadButton>, kéo thả ảnh từ <GalleryButton>thư viện</GalleryButton> vào layer này, hoặc vẽ trên canvas để bắt đầu.",
2024-
"referenceImageEmptyState": "<UploadButton>Tải lên ảnh</UploadButton> hoặc kéo thả ảnh từ <GalleryButton>thư viện</GalleryButton> vào layer này để bắt đầu.",
2027+
"referenceImageEmptyState": "<UploadButton>Tải lên hình ảnh</UploadButton>, kéo ảnh từ <GalleryButton>thư viện ảnh</GalleryButton> vào layer này, hoặc <PullBboxButton>kéo hộp giới hạn vào layer này</PullBboxButton> để bắt đầu.",
20252028
"useImage": "Dùng Hình Ảnh",
20262029
"resetCanvasLayers": "Khởi Động Lại Layer Canvas",
20272030
"asRasterLayer": "Như $t(controlLayers.rasterLayer)",
@@ -2137,7 +2140,7 @@
21372140
"toast": {
21382141
"imageUploadFailed": "Tải Lên Ảnh Thất Bại",
21392142
"layerCopiedToClipboard": "Sao Chép Layer Vào Clipboard",
2140-
"uploadFailedInvalidUploadDesc_withCount_other": "Tối đa là {{count}} ảnh PNG hoặc JPEG.",
2143+
"uploadFailedInvalidUploadDesc_withCount_other": "Tối đa là {{count}} ảnh PNG, JPEG hoặc WEBP.",
21412144
"imageCopied": "Ảnh Đã Được Sao Chép",
21422145
"sentToUpscale": "Chuyển Vào Upscale",
21432146
"unableToLoadImage": "Không Thể Tải Hình Ảnh",
@@ -2149,7 +2152,7 @@
21492152
"unableToLoadImageMetadata": "Không Thể Tải Metadata Của Ảnh",
21502153
"workflowLoaded": "Workflow Đã Tải",
21512154
"uploadFailed": "Tải Lên Thất Bại",
2152-
"uploadFailedInvalidUploadDesc": "Phải là ảnh PNG hoặc JPEG.",
2155+
"uploadFailedInvalidUploadDesc": "Phải là ảnh PNG, JPEG hoặc WEBP.",
21532156
"serverError": "Lỗi Server",
21542157
"addedToBoard": "Thêm vào tài nguyên của bảng {{name}}",
21552158
"sessionRef": "Phiên: {{sessionId}}",
@@ -2252,11 +2255,10 @@
22522255
"convertGraph": "Chuyển Đổi Đồ Thị",
22532256
"saveWorkflowToProject": "Lưu Workflow Vào Dự Án",
22542257
"workflowName": "Tên Workflow",
2255-
"workflowLibrary": "Thư Viện",
2258+
"workflowLibrary": "Thư Viện Workflow",
22562259
"opened": "Ngày Mở",
22572260
"deleteWorkflow": "Xoá Workflow",
22582261
"workflowEditorMenu": "Menu Biên Tập Workflow",
2259-
"uploadAndSaveWorkflow": "Tải Lên Thư Viện",
22602262
"openLibrary": "Mở Thư Viện",
22612263
"builder": {
22622264
"resetAllNodeFields": "Tải Lại Các Vùng Node",
@@ -2287,7 +2289,19 @@
22872289
"heading": "Đầu Dòng",
22882290
"text": "Văn Bản",
22892291
"divider": "Gạch Chia"
2290-
}
2292+
},
2293+
"yourWorkflows": "Workflow Của Bạn",
2294+
"browseWorkflows": "Khám Phá Workflow",
2295+
"workflowThumbnail": "Ảnh Minh Họa Workflow",
2296+
"saveChanges": "Lưu Thay Đổi",
2297+
"allLoaded": "Đã Tải Tất Cả Workflow",
2298+
"shared": "Nhóm",
2299+
"searchPlaceholder": "Tìm theo tên, mô tả, hoặc nhãn",
2300+
"filterByTags": "Lọc Theo Nhãn",
2301+
"recentlyOpened": "Mở Gần Đây",
2302+
"private": "Cá Nhân",
2303+
"resetTags": "Khởi Động Lại Nhãn",
2304+
"loadMore": "Tải Thêm"
22912305
},
22922306
"upscaling": {
22932307
"missingUpscaleInitialImage": "Thiếu ảnh dùng để upscale",
@@ -2322,8 +2336,8 @@
23222336
"watchRecentReleaseVideos": "Xem Video Phát Hành Mới Nhất",
23232337
"watchUiUpdatesOverview": "Xem Tổng Quan Về Những Cập Nhật Cho Giao Diện Người Dùng",
23242338
"items": [
2325-
"Trình Biên Tập Workflow: trình tạo vùng nhập dưới dạng kéo thả nhằm tạo dựng workflow dễ dàng hơn.",
2326-
"Các nâng cấp khác: Xếp hàng tạo sinh theo nhóm nhanh hơn, upscale tốt hơn, trình chọn màu được cải thiện, và node chứa metadata."
2339+
"Trình Quản Lý Bộ Nhớ: Thiết lập mới cho người dùng với GPU Nvidia để giảm lượng VRAM sử dụng.",
2340+
"Hiệu suất: Các cải thiện tiếp theo nhằm gói gọn hiệu suất và khả năng phản hồi của ứng dụng."
23272341
]
23282342
},
23292343
"upsell": {

invokeai/frontend/web/public/locales/zh_CN.json

-1
Original file line numberDiff line numberDiff line change
@@ -1629,7 +1629,6 @@
16291629
"projectWorkflows": "项目工作流程",
16301630
"copyShareLink": "复制分享链接",
16311631
"chooseWorkflowFromLibrary": "从库中选择工作流程",
1632-
"uploadAndSaveWorkflow": "上传到库",
16331632
"deleteWorkflow2": "您确定要删除此工作流程吗?此操作无法撤销。"
16341633
},
16351634
"accordions": {

0 commit comments

Comments
 (0)