v4.0.0
🚨 4.0.0 has some major changes. Please read the patch notes. 🚨
🚨 🚨 🚨 Yes - Those patch notes 👇 🚨 🚨 🚨
🎉 What's New in 4.0.0
💻 Simplified Installation, Updating and Configuration
We've simplified and streamlined installation, making it much faster and more reliable:
- No configuration script - all config is in
invokeai.yaml
- No model installs during installation
- Internal "core" models are downloaded only when they are first requested
- Generation models are installed with the Model Manager UI
- 🚨 No updater - you'll use the installer attached to these releases instead. Selecting the same location will perform an update and leave all your existing images, models, etc. intact.
💖 New Model Manager
The model manager is rewritten in v4.0.0, both frontend and backend. This builds a foundation for future model architectures and brings some exciting new user-facing features:
- All model installation happens via the UI (no configure script)
- Queued model downloads
- Per-model preview images
- Per-model default settings - choose a model’s default VAE, Scheduler, CFG Scale, etc
- User-defined trigger phrases for concepts/LoRAs and models - access by typing the
<
key in any prompt box - API key support for model marketplaces
- 🚨 Autoimport removed - use
Scan Folder
instead
#️⃣ Model Hashing
When you first run v4.0.0, it may take a few minutes to start up as it does a one-time hash of all of your model files.
Do not panic.
Hashes provide a stable identifier for a model that is the same across every platform.
🚨 If you don’t care about this, you can press Ctrl+C to interrupt the process and disable hashing by setting hashing_algorithm: random
setting in invokeai.yaml
.
🎨 Canvas Improvements
The canvas uses a new method for compositing called gradient denoising. This eliminates the need for multiple “passes”, greatly reducing generation time on the canvas. This method also provides substantially improved visual coherence between the masked regions and the rest of the image.
The compositing settings on canvas allow for control over the gradient denoising process.
Major research & experimentation for this novel denoising implementation was led by @dunkeroni, and @blessedcoolant was responsible for managing integration into the canvas UI.
🐛 Known Issue
🚨 Inpainting models on Canvas sometimes kinda give up and output mush. We have a fix en-route, but it will need to wait for 4.1.0.
📈 Fixes and Enhancements
Many small bug fixes, resolved papercuts, and warm fuzzies. Shouting out just a few notable goodies from the community:
- Bulk downloads (download a selection of images or a whole board) @StefanTobler
- Canvas Brush Size Scroll can now be inverted @joshistoast
- Images in the Canvas Staging Area can now be discarded individually @joshistoast
- Numerous fixes and UI enhancements @joshistoast
- Numerous greybeard node things @dunkeroni
- Iterate nodes now iterate in order @cgi-joe
- Sane workflow sorting @clsn
- Image dimensions overlay in the gallery @rohinish404
- Localization fixes @rohinish404
- New translations B N, @Harvester62, @Pfannkuchensack, @Bethanielle, @Vasyanator, @GGSSKK, & @Sufi2425
- Updated
torch
anddiffusers
deps @Malrama - Docs updates @skunkworxdark, @gogurtenjoyer
- LoRA probe fix @skunkworxdark
🎁 Bonus: Invoke Training (Beta)
As of v4.0.0, all references to training in the core invoke script now point to the Invoke Training Repo. Invoke Training offers a simple user interface for:
- Textual Inversion Training
- LoRA Training
- Dreambooth Training
- Pivotal Tuning Training
Learn more on the Invoke Training repo, as well as our YT video on getting started
💾 Installation and Upgrading
🚨 To install or upgrade to version 4.0, download the zip file from the release notes ("Assets" section), unzip it, and follow the installation instructions. For upgrades, select the same installation location.
🤓 Developer Changes
v4.0.0 is versioned as a major release due to breaking changes:
- The internal nodes API has been refactored to provide a stable public API. 🚨 Node authors should review the migration guide.
- The internal graph execution engine is drastically simplified, resulting in more efficient and performant processing. This carries on from the changes in v3.6.0 in which graphs are no longer stored in the database.
🤝 Contributing
As a community-supported project, we rely on volunteers and enthusiasts for continued innovation and polish. Everything from minor documentation fixes to major feature additions are welcome. To get started as a contributor, please refer to How to Contribute or reach out in #dev-chat on Discord!
📝 What's Changed
- fix(ui): do not provide auth headers for openapi.json by @maryhipp in #5726
- ui: translations update from weblate by @weblate in #5736
- ui: translations update from weblate by @weblate in #5743
- add latent-upscale to communityNodes.md by @gogurtenjoyer in #5728
- updated tooltip popovers by @chainchompa in #5751
- ui: translations update from weblate by @weblate in #5752
- ui: translations update from weblate by @weblate in #5765
- ui: translations update from weblate by @weblate in #5788
- Update communityNodes.md by @skunkworxdark in #5802
- ui: translations update from weblate by @weblate in #5823
- chore: merge next by @psychedelicious in #5838
- feat: automated releases via github action by @psychedelicious in #5839
- Fix problem of all installed models being assigned "" by @lstein in #5841
- Tidy the attention code (in preparation for regional prompting) by @RyanJDick in #5843
- ci: fix workflows by @psychedelicious in #5854
- Remove attention map saving by @RyanJDick in #5845
- Make model key assignment deterministic by @lstein in #5792
- fix(canvas): use a corrected gradient mask for canvas pasteback by @dunkeroni in #5855
- Update Transformers 4.37.2 -> 4.38.2 by @Malrama in #5859
- consolidate tabs for main model and concepts in generation panel by @maryhipp in #5848
- ui: translations update from weblate by @weblate in #5832
- Log a stack trace for invocation errors by @RyanJDick in #5853
- Allow in place local installs of models by @brandonrising in #5852
- Default model settings by @maryhipp in #5850
- refactor(mm): update configs and schemas by @psychedelicious in #5846
- updates for
defaultModel
by @maryhipp in #5866 - Remove references to the no longer existing invokeai.app.services.mod… by @brandonrising in #5871
- refactor: ✏️ canvas mask compositor naming by @joshistoast in #5873
- fix(nodes): invocation cache clearing by @psychedelicious in #5880
- fix(ui): fix URL for get image workflow by @maryhipp in #5882
- feat(ui): UI papercuts by @maryhipp in #5881
- fix(ui): only show default settings on main models by @maryhipp in #5884
- feat(scripts): typegen improvements by @psychedelicious in #5878
- feat(ui): add config_path to model update form for ckpt models by @maryhipp in #5883
- fix(nodes): load config before doing anything else by @psychedelicious in #5877
- invert canvas brush size hotkey setting by @joshistoast in #5875
- refactor: model identifiers improvements by @psychedelicious in #5879
- ui: translations update from weblate by @weblate in #5864
- Add cover images to model manager by @chainchompa in #5876
- discard current inpaint instance by @joshistoast in #5874
- feat(ui): model manager UI pass by @psychedelicious in #5886
- Remove civit install source by @brandonrising in #5887
- feat(ui): allow inplace installs by @maryhipp in #5890
- fix: workflows backcompat by @psychedelicious in #5897
- feat: default processors for controlnet & t2i adapter by @psychedelicious in #5896
- migrate models on service start by @maryhipp in #5889
- remove old data migration from previous schema version by @maryhipp in #5901
- ui(model_manager): Remember Scan Path by @blessedcoolant in #5898
- fix(ui): only render convert button if ckpt model by @maryhipp in #5902
- fix(ui): add ordering for model list by @maryhipp in #5903
- Use absolute paths in model manager by @brandonrising in #5900
- docs: autogenerate app config docs by @psychedelicious in #5892
- fix(app): include
config_path
in yaml -> DB migration by @maryhipp in #5905 - fix(mm): only move model files if necessary by @psychedelicious in #5911
- fix(mm): yaml migration fixup by @psychedelicious in #5913
- docs: update docs by @psychedelicious in #5909
- feat(nodes): enriched model identifiers by @psychedelicious in #5910
- fix: make Canvas compatible with inpainting models again by @dunkeroni in #5895
- tidy(mm): ModelSearch cleanup by @psychedelicious in #5912
- fix(mm): do not erroneously rename files by @psychedelicious in #5914
- Remove dead code related to an old symmetry feature. by @RyanJDick in #5899
- fix(nodes): ip adapter by @psychedelicious in #5919
- chore: bump app deps by @psychedelicious in #5915
- Allow lists of basemodel objects in omegaconf by @brandonrising in #5922
- Do not override log_memory_usage when debug logs are enabled by @RyanJDick in #5921
- {release} 4.0.0rc1 by @brandonrising in #5908
- ci: add missing permission to release workflow by @psychedelicious in #5927
- feat(ui): Add image size badge to gallery images by @rohinish404 in #5632
- Update l2i invoke and seamless to support AutoencoderTiny, remove att… by @brandonrising in #5936
- updated model manager to display when import item is cancelled by @chainchompa in #5924
- fix(ui): disable trigger phrase form if empty by @maryhipp in #5942
- ci: add
always_run
input to checks & tests, use this on release workflow by @psychedelicious in #5929 - added hf models import tab and route for getting available hf models by @chainchompa in #5891
- docs: misc updates by @psychedelicious in #5930
- chore: cleanup DepthAnything code by @blessedcoolant in #5945
- fix(ui): force CustomSelect's to rerender when models load to update invalid state by @maryhipp in #5949
- (ui): fetch TIs on socket connect by @maryhipp in #5950
- fix(ui): control adapter errors by @psychedelicious in #5953
- chore(ui): cleanup translations by @psychedelicious in #5946
- feat: ✏️ rename "Workflow Editor" tab label to "Workflows" by @joshistoast in #5955
- feat(mm): faster hashing for spinning disk HDDs by @psychedelicious in #5952
- feat(nodes): defaults dimensions for main models by @psychedelicious in #5931
- Work around missing core conversion model issue by @lstein in #5947
- Restore ability to install models from command line by @lstein in #5948
- fix(nodes): depth anything processor (#5956) by @psychedelicious in #5961
- feat(ui): single getModelConfigs query by @psychedelicious in #5962
- fix: model load events by @psychedelicious in #5959
- docs: update CONFIGURATION.md by @psychedelicious in #5963
- fix(nodes,ui): metadata recall by @psychedelicious in #5957
- Run typegen, update version to 4.0.0rc2 by @brandonrising in #5965
- fix(ui): initial main model in dropdown by @maryhipp in #5968
- Update diffusers 0.26.3 -> 0.27.0 and other HF packages by @Malrama in #5976
- Allow removal of models with legacy relative path addressing by @lstein in #5979
- Remove core conversion models by @lstein in #5981
- Stop registering and moving models which have symlinks in the models dir by @brandonrising in #5973
- Add sdxl controlnet models by @lstein in #5980
- Install missing clip_vision encoders if required by an ip adapter by @lstein in #5982
- refactor: simplified config system by @psychedelicious in #5920
- Revert "fix(mm): provide ckpt config as stream to diffusers" by @lstein in #5990
- Allow users to specify model type and skip detection step of probe by @brandonrising in #5970
- feat(ui, worker): update processed image resolution based on base model type by @maryhipp in #5986
- fix(ui): move created_by out of recall panel by @maryhipp in #5987
- ui: translations update from weblate by @weblate in #5904
- fix(ui): model list refreshes after changes by @psychedelicious in #5993
- Record the model_variant in t2i and clip_vision configs by @lstein in #5989
- Fix race condition causing hangs during model install unit tests by @lstein in #5994
- fix(ui): fix refiner metadata by @maryhipp in #5996
- gh: update pr template by @psychedelicious in #5958
- chore: bump nodes versions by @psychedelicious in #5992
- Fix(backend): Denoise Masks being applied at the wrong time by @dunkeroni in #5985
- refactor: remove configure script by @psychedelicious in #5991
- Update pytorch and xFormers 2.1.2 -> 2.2.1 by @Malrama in #5977
- fix(ui): handle seamless with refiner by @psychedelicious in #5999
- Fix text labels not being localized by @rohinish404 in #5951
- tidy(installer): remove references to removed scripts from installer/launcher by @psychedelicious in #6002
- chore: v4.0.0rc3 by @psychedelicious in #6003
- Remove no longer used pwinput dependency by @brandonrising in #6004
- chore: v4.0.0rc4 by @brandonrising in #6005
- fix(ui): set aspect ratio to free when using default model settings by @psychedelicious in #6017
- Wait for threads to exit after stopping model installer/downloader by @lstein in #6014
- feat(mm): display progress when hashing files by @psychedelicious in #6019
- feat(nodes): better controlnet processors by @psychedelicious in #6021
- Fix running under Docker following 4.0.0rc4 config changes by @ebr in #6009
- [feature] Add probe for SDXL controlnet models by @lstein in #5382
- pkg: pin version of
ruff
by @psychedelicious in #6012 - fix(ui): use the old combobox component for dropdowns by @psychedelicious in #6015
- fix(ui): runtime errors related to model types in ui by @psychedelicious in #6016
- gh: update pr template by @psychedelicious in #6018
- feat(mm): use blake3_single as default hashing algo by @psychedelicious in #6020
- Allow checkpoint config files to use root-relative paths by @lstein in #6023
- fix(config): do not write env vars by @psychedelicious in #6013
- ui: translations update from weblate by @weblate in #6006
- feat: Add Mask from ID Node + ColorField Component Improvements by @blessedcoolant in #6008
- Fix minor bugs involving model manager handling of model paths by @lstein in #6024
- feat(mm): revised starter models by @psychedelicious in #6025
- Catch ^C at startup time while models are being registered by @lstein in #6026
- chore(nodes): update default workflows for v4 by @psychedelicious in #6027
- fix(mm): remove proteus model by @psychedelicious in #6028
- fix(nodes): esrgan model name typo by @psychedelicious in #6029
- chore: v4.0.0rc5 by @psychedelicious in #6030
- fix:Update probe.py - Case-sensitive typo on
.LoRA
by @skunkworxdark in #6031 - allow deletion of symlinked models in models dir by @lstein in #6036
- fix(mm): default settings pydantic error by @psychedelicious in #6045
- fix(ui): load default workflows mutation error by @psychedelicious in #6050
- tidy: launcher by @psychedelicious in #6046
- fixes ui localization and settings typo by @rohinish404 in #6033
- Change GraphExecutionState's _get_next_node method to prioritize Iterate Nodes by @cgi-joe in #6032
- Update transformers and diffusers by @Malrama in #6037
- feat(installer): remove updater & support installing from wheel by @psychedelicious in #6054
- docs: new installation docs by @psychedelicious in #6056
- fix(mm): prevent installer softlock when an unhandled error occurs by @psychedelicious in #6048
- feat(mm): remove
MALLOC_MMAP_THRESHOLD_
env var by @psychedelicious in #6059 - fix(mm): handle integer state dict keys in probe by @psychedelicious in #6051
- fix(ui): image not getting selected when clicked on image-badge by @rohinish404 in #6057
- fix(mm): handle depth and inpaint ckpt conversion by @psychedelicious in #6064
- docs: remove handful of deprecated docs by @psychedelicious in #6063
- feat: display torch device on startup by @psychedelicious in #6062
- feat(mm): remove hf token handling by @psychedelicious in #6061
- Check cuDNN version compatibility on startup by @RyanJDick in #6052
- Flip default ordering of workflow library; #5477 by @clsn in #6066
- feat(ui): when using a control image's dimensions, fit to the current model's optimal dimensions by @psychedelicious in #6068
- chore(ui): bump deps, cleanup by @psychedelicious in #6070
- feat(mm): remove autoimport, revised startup model scanning by @psychedelicious in #6060
- chore: v4.0.0rc6 by @psychedelicious in #6071
- fix(installer): restore install successful message by @psychedelicious in #6073
- chore: ruff by @psychedelicious in #6074
- ci: release process enhancements by @psychedelicious in #6075
- Only cancel session processor if current generating queue item is can… by @brandonrising in #6078
- fix(nodes): workaround seamless multi gpu error by @psychedelicious in #6076
- Use defaults for db_dir and outdir since config no longer writes defa… by @brandonrising in #6079
- Drop model_config table during database version 7 migration. by @lstein in #6083
- feat(mm): restore relative paths for invoke-managed models by @psychedelicious in #6087
- [mm] Do not write diffuser model to disk when convert_cache set to zero by @lstein in #6072
- Remove debug statement by @lstein in #6088
- fix(queue): pause & resume by @psychedelicious in #6091
- Fix 100% CPU load in
session_processor_default._process()
by @lstein in #6095 - fix(nodes): 100% cpu usage when paused by @psychedelicious in #6096
- fix(mm): vae conversion by @psychedelicious in #6097
- feat: db backup, v4.0.0 by @psychedelicious in #6099
New Contributors
Full Changelog: 3.7.0...v4.0.0