This release brings major improvements to Invoke's memory management, new Blur and Noise Canvas filters, and expanded batch capabilities in Workflows.
Changes since v5.6.0rc3
- Fixed issue preventing you from typing in textarea fields in the workflow editor.
Changes since v5.6.0rc2
- Reduce peak memory during FLUX model load.
- Add
keep_ram_copy_of_weights
config option to reduce average RAM usage. - Revise the default logic for the model cache RAM limit to be more conservative.
- Support float, integer and string batch data types.
- Add batch data generators.
- Support grouped (aka zipped) batches.
- Fix image quality degradation when inpainting an image repeatedly.
- Fix issue with transparent Canvas filter previews blend with unfiltered parent layer.
- Add Noise and Blur filters to Canvas. Adding noise or blurring before generation can add a lot detail, especially when generating from a rough sketch. Thanks @dunkeroni!
Memory Management Improvements (aka Low-VRAM mode)
The goal of these changes is to allow users with low-VRAM GPUs to run even the beefiest models, like the 24GB unquantised FLUX dev model.
Despite the focus on low-VRAM GPUs and the colloquial name "Low-VRAM mode", most users benefit from these improvements to Invoke's memory management.
Low-VRAM mode works on systems with dedicated GPUs (Nvidia GPUs on Windows/Linux and AMD GPUs on Linux). It allows you to generate even if your GPU doesn't have enough VRAM to hold full models.
Low-VRAM mode involves 3 features, each of which can be configured or fine-tuned:
- Partial model loading
- Dynamic RAM and VRAM cache sizes
- Working memory
- Keeping a copy of models in RAM
Most users should only need to enable partial loading by adding this line to your invokeai.yaml
file:
enable_partial_loading: true
🚨 Windows users should also disable the Nvidia sysmem fallback.
For more details and instructions for fine-tuning, see the Low-VRAM mode docs.
Thanks to @RyanJDick for designing and implementing these improvements!
Workflow Batches
We've expanded the capabilities for Batches in Workflows:
- Float, integer and string batch data types
- Batch collection generators
- Grouped (aka zipped) batches
Float, integer and string batch data types
There's a new batch node for of the new data types. They work the same as the existing image batch node.
You can add a list of values directly in the node, but you'll probably find generators to be a nicer way to set up your batch.
Batch collection generators
These are essentially nodes that run in the frontend and generate a list of values to use in a batch node. Included in this release are these generators for floats and integers:
- Arithmetic Sequence: Generate a sequence of
count
numbers, starting fromstart
, that increase or decrease bystep
. - Linear Distribution: Generate a distribution of
count
numbers, starting withstart
and ending withend
. - Uniform Random Distribution: Generation a random distribution of
count
numbers frommin
tomax
. The values are generated randomly when you click Invoke. - Parse String: Split the
input
on the specified character, parsing each value as a number. Non-numbers are ignored.
Screen.Recording.2025-01-17.at.12.26.52.pm.mov
You'll notice the different handle icon for batch generators. These nodes cannot connect to non-batch nodes, which run in the backend.
In the future, we can explore more batch generators. Some ideas:
- Parse File (string, float, integer): Select a file and parse it, splitting on the specified character.
- Board (image): Output all images on a board.
Grouped (aka zipped) batches
When you use multiple batches, we run the graph once for every possible combination of values. In math-y speak, we "take the Cartesian product" of all batch collections.
Consider this simple workflow that joins two strings:
We have two batch collections, each with two strings. This results in 2 * 2 = 4
runs, one for each possible combination of the strings. We get these outputs:
- "a cute cat"
- "a cute dog"
- "a ferocious cat"
- "a ferocious dog"
But what if we wanted to group or "zip" up the two string collections into a single collection, executing the graph once for each pair of strings? This is now possible - we can set both nodes to the same batch group:
This results in 2 runs, one for each "pair" of strings. We get these outputs:
- "a cute cat"
- "a ferocious dog"
It's a bit technical, but if you try it a few times you'll quickly gain an intuition for how things combine. You can use grouped and ungrouped batches arbitrarily - go wild! The Invoke button tooltip lets you know how many executions you'll end up with for the given batch nodes.
Keep in mind that grouped batch collections must have the same size, else we cannot zip them up into one collection. The Invoke button grey out and let you know there is a mismatch.
Details and technical explanation
On the backend, we first zip all grouped batch collections into a single collection. Ungrouped batch collections remain as-is.
Then, we take the product of all batch collections. If there is only a single collection (i.e. a single ungrouped batch nodes, or multiple batch nodes all with the same group), we still do the product operation, but the result is the same as if we had skipped it.
There are 5 slots for groups, plus a 6th ungrouped option:
- None: Batch nodes will always be used as separate collections for the Cartesian product operation.
- Groups 1 - 5: Batch nodes within a given group will first be zipped into a single collection, before the the Cartesian product operation.
All Changes
The launcher itself has been updated to fix a handful of issues, including requiring an install every time you start the launcher and systems with AMD GPUs using CPU. The latest launcher version is v1.2.1.
Fixes
- Fix issue where excessively long board names could cause performance issues.
- Fix error when using DPM++ schedulers with certain models. Thanks @Vargol!
- Fix (maybe, hopefully) the app scrolling off screen when run via launcher.
- Fix link to
Scale
setting's support docs. - Fix image quality degradation when inpainting an image repeatedly.
- Fix issue with transparent Canvas filter previews blend with unfiltered parent layer.
Enhancements
- Support float, integer and string batch data types.
- Add batch data generators.
- Support grouped (aka zipped) batches.
- Reduce peak memory during FLUX model load.
- Add Noise and Blur filters to Canvas. Adding noise or blurring before generation can add a lot detail, especially when generating from a rough sketch. Thanks @dunkeroni!
- Reworked error handling when installing models from a URL.
- Updated first run screen and OOM error toast with links to Low-VRAM mode docs.
Internal
- Tidied some unused variables. Thanks @rikublock!
- Added typegen check to CI pipeline. Thanks @rikublock!
Docs
- Added stereogram nodes to Community Nodes docs. Thanks @simonfuhrmann!
- Updated installation-related docs (quick start, manual install, dev install).
- Add Low-VRAM mode docs.
Installing and Updating
The new Invoke Launcher is the recommended way to install, update and run Invoke. It takes care of a lot of details for you - like installing the right version of python - and runs Invoke as a desktop application.
Follow the Quick Start guide to get started with the launcher.
If you already have the launcher, you can use it to update your existing install.
We've just updated the launcher to v1.2.1 with a handful of fixes. To update the launcher itself, download the latest version from the quick start guide - the download links are kept up to date.
Legacy Scripts (not recommended!)
We recommend using the launcher, as described in the previous section!
To install or update with the outdated legacy scripts 😱, download the latest legacy scripts and follow the legacy scripts instructions.
What's Changed
- Update Readme with new Installer Instructions by @hipsterusername in #7455
- docs: fix installation docs home by @psychedelicious in #7470
- docs: fix installation docs home again by @psychedelicious in #7471
- feat(ci): add typegen check workflow by @rikublock in #7463
- docs: update download links for launcher by @psychedelicious in #7489
- Add Stereogram Nodes to communityNodes.md by @simonfuhrmann in #7493
- Partial Loading PR1: Tidy ModelCache by @RyanJDick in #7492
- Partial Loading PR2: Add utils to support partial loading of models from CPU to GPU by @RyanJDick in #7494
- Partial Loading PR3: Integrate 1) partial loading, 2) quantized models, 3) model patching by @RyanJDick in #7500
- Correct Scale Informational Popover by @hipsterusername in #7499
- docs: install guides by @psychedelicious in #7508
- docs: no need to specify version for dev env setup by @psychedelicious in #7510
- feat(ui): reset canvas layers only resets the layers by @psychedelicious in #7511
- refactor(ui): mm model install error handling by @psychedelicious in #7512
- fix(api): limit board_name length to 300 characters by @maryhipp in #7515
- fix(app): remove obsolete DEFAULT_PRECISION variable by @rikublock in #7473
- Partial Loading PR 3.5: Fix pre-mature model drops from the RAM cache by @RyanJDick in #7522
- Partial Loading PR4: Enable partial loading (behind config flag) by @RyanJDick in #7505
- Partial Loading PR5: Dynamic cache ram/vram limits by @RyanJDick in #7509
- ui: translations update from weblate by @weblate in #7480
- chore: bump version to v5.6.0rc1 by @psychedelicious in #7521
- Bugfix: Offload of GGML-quantized model in
torch.inference_mode()
cm by @RyanJDick in #7525 - Deprecate
ram
/vram
configs for smoother migration path to dynamic limits by @RyanJDick in #7526 - docs: fix pypi indices for manual install for AMD by @psychedelicious in #7528
- Bugfix: Do not rely on
model.device
if model could be partially loaded by @RyanJDick in #7529 - Fix for DEIS / DPM++ config clash by setting algorithm type - fixes #6368 by @Vargol in #7440
- Whats new 5.6 by @maryhipp in #7527
- fix(ui): prevent canvas & main panel content from scrolling by @psychedelicious in #7532
- docs,ui: low vram guide & first run blurb by @psychedelicious in #7533
- docs: fix incorrect macOS launcher fix command by @psychedelicious in #7536
- chore: bump version to v5.6.0rc2 by @psychedelicious in #7538
- Update communityNodes.md - Fix broken image by @simonfuhrmann in #7537
- fix(ui): image quality degradation on canvas after repeated generations by @psychedelicious in #7539
- fix(ui): use window instead of document for image pasting by @maryhipp in #7558
- Support v-prediction checkpoint models when set in the model manager by @dunkeroni in #7504
- fix(ui): sticky preset image tooltip by @psychedelicious in #7542
- fix(ui): round rects when applying transform by @psychedelicious in #7540
- Make T5 models interchangeable between FLUX/SD3 workflows by @RyanJDick in #7544
- Feat: Noise and Blur filters for Canvas by @dunkeroni in #7551
- fix(ui): remove AbortController logic from paste to upload by @maryhipp in #7560
- Reduce peak memory during FLUX model load by @RyanJDick in #7564
- Add
keep_ram_copy_of_weights
config option by @RyanJDick in #7565 - Revise the default logic for the model cache RAM limit by @RyanJDick in #7566
- feat(ui): more batch data types by @psychedelicious in #7545
- feat: support batch node groups (aka zipped/pairwise batch nodes) by @psychedelicious in #7553
- refactor(ui): batch generator nodes by @psychedelicious in #7562
- chore: bump version to v5.6.0rc3 by @psychedelicious in #7557
- fix(ui): string field textarea accidentally readonly by @psychedelicious in #7567
- chore: bump version to v5.6.0rc4 by @psychedelicious in #7568
New Contributors
- @simonfuhrmann made their first contribution in #7493
Full Changelog: v5.5.0...v5.6.0rc4