Conversation
|
Updating the Edit: Oops, I guess those need to be Includes some ROCm help from #8867. Do add |
|
Reminder to update the docs. |
* docs: Updated uvicorn URL In the current documentation links for info on SSL configuration point to 'uvicorn.org', however this URL does not resolve for me. Checking 'uvicorn.dev' shows what appears to be the correct information so I've updated the links accordingly. * fix(config): update uvicorn.org URL to uvicorn.dev in ssl field descriptions The docstring and generated files were updated to uvicorn.dev, but the actual ssl_certfile/ssl_keyfile Field descriptions (the source for the generated schemas) still pointed to uvicorn.org. --------- Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev> Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
* docs: add graph execution example to API guide * Move workflow execution docs into a dedicated guide
* feat: ⬆️ upgrade deps
* chore: ⬆️ upgrade `react` to `19.2`
* perf: ⚡ enable react compiler
don't think it's working rn but here it is
* feat: upgrade deps, configure compiler linting errors
* chore: upgrade vite to v8
required also upgrading storybook and vitest
* fix: react 19 upgrade migrations
mostly updates refobject types to have null possibilities, and in some places made updates to mitigate some
immediate react 19 rendering errors
* fix: dragHandleRef can be null
* perf: avoid cascading renders on `InvokeAIUI`
* perf(canvas): run workflows hook improvements
- no hooks get called in loops anymore
- effect starts async filter after render
- updates state only after awaiting fetches
- tracks cancellation
- use sets for workflow ids
* perf: refactors to avoid synchronous state setting in effects
this can cause cascading re-renders, and is counted as an error to the react 19 recommended linting.
* fix(api): run typegen
* fix: text tool effects usage
* fix: linting
* fix(compiler): properly wire up the react compiler
* fix: refactor compiler-incompatible component tests
The React Compiler emits `useMemoCache` calls into every component,
which crashed two tests that invoked components as plain functions (via
direct call or `.type`) outside React's render path.
Rather than disable the compiler for tests, extract the testable surface
so the tests no longer need to render:
- ImageMetadataActions: hoist the handler list to an exported
`IMAGE_METADATA_ACTION_HANDLERS` array and render via map +
type-guarded dispatch. Test asserts against the array.
- AddBoardButton: extract the async create-and-dispatch flow into
`createBoardAndDispatchActions`. Test exercises that function
directly with vi.fn() doubles.
- parsing.tsx: export `isCollectionMetadataHandler` and add
`isUnrecallableMetadataHandler` to support the map-based render.
* fix: linting
* chore: run typegen
* fix(canvas): wrap text line-height combobox tooltip child
* fix(app): keep rehydration bootstrap outside strict mode
* fix(canvas): clear workflow filtering state for empty lists
* fix(workflows): gate library render until view sync
* fix(canvas): keep model loading indicator across transitions
* fix(canvas): seed text overlay size from content metrics
* test(ui): restore null active tab navigation coverage
* fix(nodes): guard optional scheduler field
* fix(ui): handle optional metadata parser failures
* fix color picker hex value entry field
---------
Co-authored-by: joshistoast <me@joshcorbett.com>
Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev>
Co-authored-by: dunkeroni <dunkeroni@gmail.com>
…r non-admins (invoke-ai#9262) * fix(multiuser): restore global queue counts + redacted entries for non-admins PR invoke-ai#9018 changed the queue status/list endpoints from "global counts + per-user counts" to "user-scoped only" for non-admins. This silently broke two multiuser behaviors: 1. The hamburger-menu badge lost its "X/Y" form. invoke-ai#9018 dropped the user_pending/user_in_progress fields, made pending/in_progress/total user-scoped (so a non-admin had no global total), and reduced the badge to a single number. 2. The virtualized queue list stopped showing other users' redacted entries. invoke-ai#9018 added `AND user_id = ?` to get_queue_item_ids, so a non-admin only ever received their own item ids — the (intact) sanitize_queue_item_for_user redaction never ran for other users' items. Restore the original design (PR invoke-ai#8822) while keeping the invoke-ai#9087 current-item identifier redaction: - SessionQueueStatus regains optional user_pending/user_in_progress. - get_queue_status always computes GLOBAL aggregate counts and, when user_id is provided, additionally returns that user's own counts. The current item's identifiers are still gated to the owner/admin via a single get_current() snapshot (race-free, invoke-ai#9087 preserved). - get_queue_item_ids no longer filters by user; ids carry no sensitive data and items are redacted at hydration by sanitize_queue_item_for_user, so non-admins again see partially-redacted entries for other users' jobs. - QueueCountBadge renders "<own>/<global total>" in multiuser mode and the plain total for admins / single-user mode. - Regenerate the frontend OpenAPI schema. Aggregate counts are global but non-identifying (no session_id/batch_id/ params/graph), consistent with invoke-ai#9087's "counts remain global" decision. Tests: - Update the model-shape test to assert user_pending/user_in_progress exist. - Add session-queue integration tests: global counts + per-user subcounts, admin/global omission of subcounts, current-item redaction with global counts intact, and get_queue_item_ids returning every user's ids. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(frontend): typegen + openapi * chore(backend): ruff --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev>
Co-authored-by: wunianze666-netizen <wunianze666@gmail.com>
* Upgrade ROCm support from 6.3 to 7.1 - Update PyTorch to 2.10.0+rocm7.1 (from 2.7.1+rocm6.3) - Update TorchVision to 0.25.0+rocm7.1 (from 0.22.1+rocm6.3) - Update PyTorch ROCm index URL to rocm7.1 - Update Docker ROCm runtime to 7.1.1 (from 6.3.4) ROCm 7.1 adds support for 3 new GPU architectures: - gfx950: CDNA3+ (Instinct MI350, MI325X) - gfx1150: RDNA 3.5 (Strix Point APU) - gfx1151: RDNA 3.5 (Strix Halo APU) All 11 previously supported architectures remain compatible. Total supported architectures: 14 (11 existing + 3 new) Relates to invoke-ai#8655 * Fix uv sync for ROCm 7.1 by explicitly declaring triton-rocm The uv package manager couldn't resolve triton-rocm as a transitive dependency of torch from the PyTorch custom index. This commit adds triton-rocm==3.6.0 explicitly to the rocm extras with a Linux-only platform marker. Changes: - Added triton-rocm==3.6.0; sys_platform == 'linux' to rocm extras - Added triton-rocm source configuration pointing to torch-rocm index - Already committed: torch version constraint relaxation (>=2.7.0,<3.0) - Already committed: platform environment restrictions for ROCm Verified with uv sync --extra rocm: - torch==2.10.0+rocm7.1 installed correctly - torchvision==0.25.0+rocm7.1 installed correctly - triton-rocm==3.6.0 resolved successfully - ROCm 7.1.25424 detected on AMD Radeon PRO V620 - All 8 model architectures accessible - GPU compute operations verified Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Update uv lock and remove old dockerfile * docs: update ROCm torch backend from 6.3 to 7.1 Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> * fix: regenerate uv.lock with ROCm 7.1 dependencies Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> * remove redundant inclusion of torch-triton wheel && confirm no aarch64-linux support * chore(frontend): openapi and typegen * chore: drop spurious typegen changes from ROCm PR The ROCm 7.1 update is dependency-only and does not alter any backend route or model, so schema.ts/openapi.json should match main. The earlier regeneration introduced spurious diffs (removed @example blocks, reformatted JSDoc) from a local tooling/backend mismatch, failing the typegen-checks "compare files" step. Restore both files to main. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(deps): keep macOS on torch 2.7.x; gate rocm extra to linux Loosening the base torch pin to <3.0 (so the rocm extra could use 2.10.0+rocm7.1) let macOS resolve torch 2.12.0, whose MPS backend fails with OOM on GitHub's hosted macOS runners (no usable Metal GPU), breaking the py3.x macos-default pytest jobs. Split the base pin by platform so macOS stays on 2.7.x (matching main) while linux/win still allow >=2.10, and gate the rocm extra's torch/torchvision to sys_platform == 'linux' (ROCm is x86_64-linux-only) so non-linux resolution is unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(frontend): regenerate schema for pydantic 2.13 docstring descriptions The dependency update bumps pydantic 2.11.7 -> 2.13.4, which now emits a plain class docstring as the JSON-schema description. CacheStats gains "Collect statistics on cache performance." in both openapi.json and schema.ts. This is the sole schema delta from the bump and is what the openapi-checks/typegen-checks jobs regenerate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Heathen711 <Heathen711@me.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: heathen711 <heathen711@example.com> Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
…22 (invoke-ai#9272) * fix(db): repair model_relationships foreign keys broken by migration 22 Migration 22 rebuilds the `models` table by renaming it to `models_old`, creating a fresh `models` table, and dropping `models_old`. Modern SQLite (legacy_alter_table off) rewrites foreign-key references in other tables on rename, so the FKs in `model_relationships` were repointed at `models_old`, which was then dropped. This broke ON DELETE CASCADE and integrity for related models. Add migration 32 to rebuild `model_relationships` with its foreign keys referencing `models(id)` again, preserving existing links and dropping any orphaned rows. Idempotent and a no-op when the FKs are already correct. * Chore Ruff Format --------- Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
* Fix python tests on CUDA * Updated more CUDA tests * Address CUDA test review feedback
…rt (invoke-ai#9253) * feat(model-manager): add Qwen Image single-file checkpoint loader with fp8 support Adds Main_Checkpoint_QwenImage_Config and QwenImageCheckpointModel so that single-file safetensors checkpoints (e.g. Qwen-Image-Edit 2511 fp8_scaled from Civitai) can be imported. ComfyUI-style fp8 weights are dequantized to bf16 at load time; the existing default_settings.fp8_storage toggle then optionally re-casts to fp8 for VRAM savings. Also wires _apply_fp8_layerwise_casting into the Qwen Image diffusers loader so the fp8 storage option works across all three formats (diffusers, single- file checkpoint, GGUF stays untouched as it carries its own quantization). Shared variant inference (marker tensor → filename heuristic) and transformer architecture auto-detection are extracted into module-level helpers so the GGUF and checkpoint loaders stay in sync. * chore(frontend): openapi & typegen * fix(qwen-image): align ComfyUI-prefix detection with loader, tighten edit heuristic, dedupe fp8 helpers - strip ComfyUI key prefixes in _has_qwen_image_keys so prefixed checkpoints are identified and reach the loader - match "edit" as a filename token instead of any substring (no credited/edited/unedited false positives) - reuse _dequantize_comfyui_fp8 / _strip_quantization_metadata in the QwenVL encoder loader - size make_room reservation after the bf16 cast to avoid fp32 undercount - add Path type hint on _infer_qwen_image_variant * fix(qwen-image): reduce dequant RAM, fix VL encoder classification, silence int8 warning - qwen_image: dequantize ComfyUI fp8_scaled weights directly to compute_dtype instead of a full-precision float32 intermediate. The previous path materialised a 4-byte/param copy of the whole model before downcasting, spiking peak RAM to ~2x the final bf16 size (~80GB for the 20B transformer). bf16 shares float32's exponent range and fp8 has only 3 mantissa bits, so no meaningful precision loss. - qwen3_encoder: reject checkpoints that bundle a Qwen-VL visual tower (visual.blocks.* / visual.patch_embed.*). A Qwen2.5-VL file satisfies the Qwen3 key heuristic too, so it matched both configs and the tiebreak misrouted it to Qwen3Encoder, hiding it from the Qwen Image loader's encoder field. Qwen3 (text) and QwenVLEncoder (vision+language) are now mutually exclusive. - bnb_llm_int8: silence the per-matmul "inputs will be cast from bfloat16 to float16" UserWarning. LLM.int8 only supports fp16 activations; the bf16->fp16 cast is correct and intended, so the warning is pure log spam on every layer. * Chore Ruff --------- Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
…nvoke-ai#9274) The Heun (2nd order) branch of the FLUX.2 Klein denoise loop passed the full preview latent to step_callback without removing the concatenated reference-image tokens. With ref images the sequence length is doubled, so unpack_flux2 failed with "Shape mismatch, 8192 != 4096". Slice the preview to original_seq_len before the callback, matching the behavior already present in the Euler branch. Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
The left and right side-panel splitters could be dragged inward until the middle viewer panel was crowded down to ~0px, leaving no surface to grab the splitters and pull the panels back. On a tablet this was easy to fall into and hard to recover from. Add a MAIN_PANEL_MIN_SIZE_PX = 128 minimum to the main panel in the canvas, generate, workflows, and upscaling layouts -- wide enough to fit both floating toggle button groups (~48px each + breathing room). Apply it both at fresh-init time and after registerContainer restores from persisted JSON via enforceMainPanelMinWidth, so existing users with saved layouts that pre-date the constraint also get it (and the panel grows up to the minimum if its restored size violates it). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev> Co-authored-by: dunkeroni <dunkeroni@gmail.com>
…ation (invoke-ai#9275) * fix(ui): add missing canvas-workflow-integration log namespace translation The 'canvas-workflow-integration' namespace was added to the logger enum but had no translation key, so all languages fell back to showing the raw key. Add the English source string translation. * fix(ui): correct orphaned-models plural keys in en.json The singular forms were placed in suffix-less bare keys while the `_one` keys were left empty. With i18next v4 plurals, count=1 resolved to the empty `_one` key and rendered nothing. Move the singular text into `_one` and drop the redundant bare keys, matching the rest of the file. --------- Co-authored-by: dunkeroni <dunkeroni@gmail.com> Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
…ies (invoke-ai#9291) When invokeai.yaml sets an image_subfolder_strategy, new images are written into subfolders of outputs/images (by date, type, or hash). The orphaned-db- entry cleanup only checked the top-level outputs/images directory, so every image stored in a subfolder looked missing and its (valid) database row was deleted. Add PhysicalFileMapper.get_all_image_filenames_recursive(), which globs the entire outputs/images tree, and use it for the orphan check. Image names are globally unique UUIDs, so a basename set is collision-free; thumbnails (.webp) and the sibling images-archive directory are naturally excluded. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: dunkeroni <dunkeroni@gmail.com>
…cket double-emit) (invoke-ai#9288) * feat(api): add append mode to recall reference images POST /api/v1/recall/{queue_id}?append=true now asks the frontend to add the recalled reference images (ip_adapters and model-free reference_images) to its existing list instead of replacing it. The flag rides inside the event's parameters dict so the generated client schema needs no regeneration, and is injected after the persistence loop so it is never stored as a recall parameter. Mutually exclusive with strict. The frontend dispatches refImagesRecalled with replace:false in append mode, and skips the dispatch entirely when nothing resolved so a failed append can never clear the user's current reference images. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(sockets): emit recall event once to owner+admin room union RecallParametersUpdatedEvent was emitted in two separate socket.io calls — one to the owner's user room, one to the admin room. A socket that belongs to both (the "system" user in single-user mode is also an admin, so it joins user:system AND admin) received the event twice. That double delivery was invisible for the scalar/replace recall fields, which are idempotent, but the append-mode reference-image recall pushes rather than replaces — so each append showed up as two copies of the same reference image in the InvokeAI canvas. Emit once to the room union [user_room, "admin"] instead. python-socketio deduplicates recipients across a room list, so a socket in both rooms is delivered to exactly once, while genuinely distinct owner/admin sockets still each receive it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(api): regenerate openapi.json + schema.ts for recall append param Rebuilds the committed OpenAPI schema and generated TypeScript types so the update_recall_parameters operation advertises the new append query parameter. Generated via 'make frontend-openapi' / 'frontend-typegen' equivalent; the only change is the added append param + its docstring. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: document append query parameter for recall API Documents the new append=true query parameter on POST /api/v1/recall/{queue_id}: - new Query parameters subsection covering strict and append - mutual exclusivity (strict+append -> 400) with error body - append-mode cURL example - updated WebSocket Events + frontend log sample for the merged reference-image list Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Jonathan <34005131+JPPhoto@users.noreply.github.com>
…ai#9309) * fix metadata overrides with empty string values * chore(backend): ruff --------- Co-authored-by: wunianze666-netizen <wunianze666@gmail.com> Co-authored-by: Alexander Eichhorn <alex@eichhorn.dev> Co-authored-by: Jonathan <34005131+JPPhoto@users.noreply.github.com>
* fix(z-image): repair regional guidance forward after diffusers refactor Z-Image Regional Guidance crashed with "split_with_sizes expects split_sizes to sum exactly to 162 ... but got split_sizes=[160]". The regional-prompting patch was a hand-copied snapshot of an outdated ZImageTransformer2DModel.forward. The installed diffusers version changed _pad_with_ids so caption pos_ids are now longer than the caption feature tensor, while the stale patch split RoPE embeddings by feature lengths instead of pos_ids lengths. Rewrite create_regional_forward to delegate to the model's own helpers (patchify_and_embed, _prepare_sequence, _build_unified_sequence) and only override the main-layer attention mask to inject the regional mask. This keeps the patch in sync with upstream diffusers and stops re-implementing the drift-prone patchify/RoPE/padding logic. * fix(z-image): repair & realign regional guidance after diffusers refactor Z-Image Regional Guidance crashed with "split_with_sizes expects split_sizes to sum exactly to 162 ... but got split_sizes=[160]". The regional-prompting patch was a hand-copied snapshot of an outdated ZImageTransformer2DModel.forward; the installed diffusers version changed _pad_with_ids so caption pos_ids are longer than the caption feature tensor, while the stale patch split RoPE embeddings by feature lengths instead of pos_ids lengths. Rewrite create_regional_forward to delegate to the model's own helpers (patchify_and_embed, _prepare_sequence, _build_unified_sequence) so it stays in sync with upstream diffusers, and only override the main-layer attention mask. Also fix two reasons regional guidance had no visible effect: - Mask alignment: the unified sequence pads the image and caption blocks individually to a multiple of 32, so the real layout is [img_real | img_pad | txt_real | txt_pad]. Scatter the four regional sub-blocks into their padding-aware positions instead of assuming a contiguous top-left block (which only matched square 1024x1024). - CFG pass: the patched forward also runs for the negative prompt; only apply the regional mask to passes whose caption length matches the positive prompt, otherwise fall back to the plain padding mask. * Chore Ruff + Typegen * fix(z-image): use identity to gate regional mask onto the positive pass The regional attention patch ran for both the conditioned and negative/CFG forward passes and distinguished them by comparing the padded caption length against the positive prompt's expected length. Two short prompts that round up to the same multiple of 32 collided, so the positive regional mask could be injected into the unconditional prediction and silently corrupt CFG. Discriminate the conditioned pass by tensor identity (cap_feats is the exact positive_cap_feats the mask was built for) instead of a length heuristic, so the positive and negative passes can never be confused. The context manager now requires positive_cap_feats whenever a regional mask is provided, turning the previously inferred invariant into an enforced one rather than a silent no-op. Also build the (bsz, 1, S, S) float mask lazily: compute applied_regional from cheap scalar checks first and skip materializing/cloning the full mask on passes that never match (every negative pass), avoiding a ~33 MB bf16 clone per call. --------- Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
Resolve conflicts from PR invoke-ai#9225 (Python 3.14.5 / dependency cascade) against current main. Most conflicts came from stale duplicates of features main has since released, carried in by earlier main merges; those were resolved to main's authoritative version. Key decisions: - Duplicate-lineage files (schema.ts, openapi.json, en.json, session_queue*, workflowExecution*, setEventListeners, ParamAnimaModelSelect, qwen_image, starter_models, migration_32, config_default, and related tests): took main's version — the PR does not intend to change these. - transformers/compel: kept main's transformers>=5.5 + compel>=2.4 (do not regress main's upgrade); dropped the PR's older 4.56/2.1.1 pins. - aarch64: kept main's ARM-Linux support and platform-gated torch structure, grafting the PR's torch 2.12 / cu130 / rocm7.2 bumps into it. The aarch64 PyPI fallback moves to torch 2.12.0 / torchvision 0.27.0 (2.7.x has no cp314 wheels under Python 3.14). - macOS base torch cap (<2.8) removed: no torch 2.7.x cp314 wheels exist, so macOS moves to 2.12 as well (matching the PR's original intent). - deploy-docs.yml: kept the PR's uv 0.11.16. - uv.lock: regenerated from scratch against the merged pyproject (275 pkgs). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Python 3.14 deprecates torch.jit.load / torch.jit.script(_method). Two preprocessors trip this on every run: - LaMa infill (lama.py) loads a TorchScript archive via torch.jit.load. - Normal Map / normal_bae (encoder.py) loads a vendored EfficientNet whose geffnet code is decorated with @torch.jit.script / @torch.jit.script_method (~26 warnings per model load). Both are compiled/vendored TorchScript with no drop-in torch.compile/export migration for us as consumers. Suppress just the per-call DeprecationWarning noise (scoped filterwarnings), but log a single breadcrumb once per process so the deprecation stays visible for planning. When torch eventually removes these APIs the calls will raise, not warn, so both paths fail loudly at that point regardless of the suppression. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@dunkeroni I took the liberty of fixing the merge conflicts. I then tested the following under Linux on a ROCm AMD GPU.
I got a bunch of Py3.14 TorchScript deprecation warnings for the This needs to be tested on MacOS and Windows. |
|
I updated to use python latest stable release 3.14.6. Use of .5 was causing the MacOS pytest runner to error out because it is not supported by the Mac runner. I also updated the openapi-checks.yml workflow to use an up to date version of uv, and tightened up output path resolution in the openapi generation script. |
Two bugs made the openapi-checks job fail: 1. openapi-checks.yml was the only workflow left on the old toolchain (setup-uv@v5 / uv 0.6.10, checkout@v4, setup-python@v5) while every other workflow moved to setup-uv@v8.1.0 / uv 0.11.16 / @v6. uv 0.6.10 predates Python 3.14 and the current uv.lock format, so it re-resolved from scratch and installed an ABI-mismatched environment; the schema script then died with SIGSEGV (exit 139). Bring it in line with typegen-checks.yml, and pin changed-files to the same hash the other workflows use. 2. generate_openapi_schema.py resolved its output argument *after* chdir'ing to the repo root, so the CI step `cd invokeai/frontend/web && ... openapi.json` wrote to <repo_root>/openapi.json instead. The real schema was never regenerated, so the diff compared an untouched file against its own copy — the check would have passed vacuously once the segfault was fixed. Resolve the path against the caller's CWD before chdir. Verified locally: generated schema + prettier matches the checked-in invokeai/frontend/web/openapi.json exactly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Summary
Changes to the pyptoject.toml to bring up installation to python 3.14.6 with CUDA 13.0 and Torch 2.12
Mediapipe had a breaking change that removed their Solutions API, so support for a face controlnet had to be rewritten.
Related Issues / Discussions
Known difference: Generation results are not the same as they were before. Torch.randn() is generating different noise when using
dtype=torch.float16than it was in previous versions. This might technically improve the quality of some more sensitive models, but will probably not be noticeable aside from the seeds being completely different.Potential Issue: #8494 locked sentencepiece (used by Transformers) to 2.0.0 to avoid a crash on Windows. For python compatibility, it had to be updated to 2.1.0 again (the version causing crashes). Will need to test if this is still a problem once Compel is updated to allow the newer Transformers.
QA Instructions
UV_HTTP_TIMEOUT=600 uv pip install -e ".[dev,test,docs]" --python 3.14.6 --python-preference only-managed --index=https://download.pytorch.org/whl/cu130, optionally add xformers.(UV timeout is to avoid an error while waiting for cudnn files to download. Nvidia servers are slow lately. We might want to add that to the launcher as well...)
Merge Plan
DRAFT: wait until all models and workflows have been tested.
Checklist
What's Newcopy (if doing a release after this PR)