Commit Graph

6503 Commits

Author SHA1 Message Date
Johnpaul
69ef8ff804 fix: build frontend with IS_NIGHTLY=true in CI workflows
The test was failing because the frontend was built without IS_NIGHTLY=true,
so the compiled code had __IS_NIGHTLY__ set to false. Setting IS_NIGHTLY=true
during test runtime didn't affect the already-compiled code.

This fix ensures the frontend is built with IS_NIGHTLY=true during the build
phase in the CI workflows, so the compiled code will have the correct value.
2026-01-29 03:09:44 +01:00
Alexander Brown
0fdbd77ac8 Merge branch 'main' into fix-nigthly-test 2026-01-28 14:13:01 -08:00
Benjamin Lu
cbd073f89d Add inline queue progress bar and text summary (#8271)
Add inline queue progress bar and summary per the new designs.

This adds an inline 3px progress bar in the actionbar container (docked
or floating) and a compact summary line below the top menu that follows
when floating, both gated by the QPO V2 flag and hidden while the
overlay is expanded.


https://github.com/user-attachments/assets/da8ec7b7-35f4-4d52-a83b-15c21b484eba

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8271-Add-inline-queue-progress-bar-and-summary-for-QPO-V2-2f16d73d36508132a6dff247f71e11e4)
by [Unito](https://www.unito.io)

---------

Co-authored-by: github-actions <github-actions@github.com>
2026-01-28 12:20:13 -08:00
Alexander Brown
e44b411ff6 test: simplify test file mocking patterns (#8320)
Simplifies test mocking patterns across multiple test files.

- Removes redundant `vi.hoisted()` calls
- Cleans up mock implementations
- Removes unused imports and variables

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8320-test-simplify-test-file-mocking-patterns-2f46d73d36508150981bd8ecb99a6a11)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: GitHub Action <action@github.com>
2026-01-28 12:17:16 -08:00
Terry Jia
3e2352423b fix: remove redundant forceRender call and add ResizeObserver guard (#8372)
## Summary
- Remove duplicate forceRender() in ResizeObserver callback since
handleResize() already calls it
- Add guard for environments without ResizeObserver support
- Disconnect existing observer before reassigning to prevent leaks

requested by @DrJKL in
https://github.com/Comfy-Org/ComfyUI_frontend/pull/8351

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8372-fix-remove-redundant-forceRender-call-and-add-ResizeObserver-guard-2f66d73d3650811bb3a6de5c59b3c1fb)
by [Unito](https://www.unito.io)
2026-01-28 11:51:40 -08:00
Christian Byrne
3720b3e794 feat: make invalid URL error message more actionable (#8368)
## Summary

Updates the error message shown when users enter an unsupported URL in
the BYOM (Bring Your Own Model) upload dialog.

**Before:** "Only URLs from Civitai, Hugging Face are supported"
**After:** "Please check the link format. Only URLs from Civitai,
Hugging Face are supported."

This provides more actionable guidance by suggesting users verify their
link format before listing the supported sources.

## Changes

- Updated `unsupportedUrlSource` i18n key in `src/locales/en/main.json`

## Testing

- `pnpm typecheck` 
- `pnpm lint` 
- Manual: Enter invalid URL (e.g.,
`https://example.com/model.safetensors`) in model upload dialog

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8368-feat-make-invalid-URL-error-message-more-actionable-2f66d73d3650810bbcc1e9fa3d1cd962)
by [Unito](https://www.unito.io)

Co-authored-by: Subagent 5 <subagent@example.com>
Co-authored-by: Amp <amp@ampcode.com>
2026-01-28 02:15:09 -08:00
Terry Jia
26eb3eff4d fix: add ResizeObserver to fix Preview3D initial render stretch (#8351)
## Summary

When Preview3D node was added to canvas, the Three.js scene would
stretch outside the node bounds until mouse hover. This happened because
the container size was not stable during initialization.

Add ResizeObserver to Load3d class to automatically refresh viewport
when container size changes, ensuring correct render dimensions.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8351-fix-add-ResizeObserver-to-fix-Preview3D-initial-render-stretch-2f66d73d3650810cbd1fc64dde9ddc17)
by [Unito](https://www.unito.io)
2026-01-28 05:11:54 -05:00
Rizumu Ayaka
dd3e4d3edc fix: hide label of textarea in right side panel + align switch to the left (#8279)
<img width="350" alt="image"
src="https://github.com/user-attachments/assets/3ff3f83c-163b-44df-8b68-7fe18c3266c4"
/>
 | 
<img width="350" alt="CleanShot 2026-01-23 at 21 25 04@2x"
src="https://github.com/user-attachments/assets/c2c630f3-6990-4a55-aa8f-a19297ffee52"
/>

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8279-fix-hide-label-of-textarea-in-right-side-panel-align-switch-to-the-left-2f16d73d365081e9b932fb2be873b660)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
2026-01-27 23:21:03 -08:00
Alexander Brown
8b514463b3 CI: Add formatting after generating locales. (#8360)
## Summary

Hopefully prevent thrashing from formatting disagreements.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8360-CI-Add-formatting-after-generating-locales-2f66d73d36508143a2f6d5ba90056110)
by [Unito](https://www.unito.io)
2026-01-27 22:31:54 -08:00
Comfy Org PR Bot
608ad1d74c 1.39.0 (#8336)
Minor version increment to 1.39.0

**Base branch:** `main`

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8336-1-39-0-2f56d73d365081c3a03bd0381a1a7ddc)
by [Unito](https://www.unito.io)

---------

Co-authored-by: DrJKL <448862+DrJKL@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Austin Mroz <austin@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
v1.39.0
2026-01-27 21:56:40 -08:00
Christian Byrne
5c99f89e9d test: improve refreshRemoteConfig test quality (#8356)
Addresses review feedback from #8266:

- Use vi.stubGlobal for global fetch mock
- Extract mockSuccessResponse and mockErrorResponse helpers to reduce
duplication
- Add test verifying 500 responses preserve existing config (only
401/403 clear config)

Related: #8266

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8356-test-improve-refreshRemoteConfig-test-quality-2f66d73d365081f7b207c2fd2b8a8179)
by [Unito](https://www.unito.io)
2026-01-27 22:18:34 -07:00
Jin Yi
4cf55a7215 [refactor] Manager dialog design improvements (#8247)
## Summary
Refactored Manager dialog components for cleaner button rendering logic
and improved visibility.

## Changes
- **InfoPanelHeader**: Centralized button rendering logic (try update,
uninstall, install) instead of using slot overrides
- **PackTryUpdateButton**: Changed variant from `textonly` to `inverted`
for better visibility
- **InfoPanel**: Removed slot override and unused imports, simplified
component
- **ManagerDialog**: Design modifications for improved UX
- **PackCard/PackBanner**: Component refinements
- **useManagerDisplayPacks**: New composable for display pack management

## Review Focus
- Button visibility and styling with `inverted` variant
- Centralized button logic in InfoPanelHeader

## Before

[manager-before.webm](https://github.com/user-attachments/assets/4cef5f10-9cb2-4a31-a095-b170643e481d)

## After

[manager-after.webm](https://github.com/user-attachments/assets/9b693b32-59ca-4c88-b7e7-9a78aba19df7)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8247-refactor-Manager-dialog-design-improvements-2f06d73d365081bf9f07efa043caa378)
by [Unito](https://www.unito.io)
2026-01-28 14:11:46 +09:00
Christian Byrne
e8b088ce50 feat: add composable to determine if user is eligible for nightly survey(s) (#8189)
## Summary

Adds `useSurveyEligibility` composable that determines whether a user
should see a survey based on multiple criteria: nightly localhost build
only (`isNightly && !isCloud && !isDesktop`), configurable usage
threshold (default 3), 14-day global cooldown between any surveys,
once-per-feature-ever display, optional percentage-based sampling, and
user opt-out support. All state persists to localStorage. Includes
extensive unit tests covering all eligibility conditions.

See:

- https://github.com/Comfy-Org/ComfyUI_frontend/pull/8149
- https://github.com/Comfy-Org/ComfyUI_frontend/pull/8175

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8189-feat-add-composable-to-determine-if-user-is-eligible-for-nightly-survey-s-2ee6d73d365081f088f2fd76032cc60a)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
2026-01-27 21:31:00 -07:00
Simula_r
34fc28a39d Feat/workspaces 5 auth gate check (#8350)
## Summary

- Fix auth related race conditions with a new WorkspaceAuthGate in
App.vue
- De dup initialization calls 
- Add state machine to track state of refreshRemoteConfig
- Fix websocket not using new workspace jwt
- Misc improvments

## Changes

- **What**: Mainly WorkspaceAuthGate.vue
- **Breaking**: <!-- Any breaking changes (if none, remove this line)
-->
- **Dependencies**: <!-- New dependencies (if none, remove this line)
-->

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8350-Feat-workspaces-5-auth-gate-check-2f66d73d365081b1a49afcd418fab3e7)
by [Unito](https://www.unito.io)
2026-01-27 20:28:44 -08:00
Alexander Brown
508de7ac88 Merge branch 'main' into fix-nigthly-test 2026-01-27 20:27:04 -08:00
pythongosssss
d890e7568a Add asset deletion progress indicator (#7906)
## Summary

Currently the delay between user action and visual response is too long
and it looks like it hasn't worked.
This adds a visual indicator that the action is processing.

## Changes

- add loading indicator while asset is deleting

## Screenshots (if applicable)
(Artifically delayed deletion)


https://github.com/user-attachments/assets/a9a8b9fe-896d-4666-b643-ec8b990f6444

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7906-Add-asset-deletion-progress-indicator-2e26d73d365081ed82b8e770ba3d0615)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Jin Yi <jin12cc@gmail.com>
2026-01-27 21:21:50 -07:00
Benjamin Lu
2c54b0dab0 Revert/undo-788f5083-ef8657bb (#8353)
This reverts the addition of GTM for 1.38, as it was still present in
the built files.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8353-Revert-undo-788f5083-ef8657bb-2f66d73d365081818d43fcaab220a4ef)
by [Unito](https://www.unito.io)
2026-01-28 03:48:31 +00:00
Jin Yi
17bd5f527a feat: Add cancel button to active job card in grid view (#8264)
## Summary
Add a cancel (x) button overlay to active job cards in grid view,
matching the existing list view behavior.

## Changes
- **What**: Added hover-triggered cancel button to `ActiveJobCard.vue`
using the existing `useJobActions` composable
- Button appears on hover for jobs in cancellable states (pending,
initialization, running)

<img width="1710" height="1107" alt="스크린샷 2026-01-23 오후 5 11 04"
src="https://github.com/user-attachments/assets/31a6b6d1-46e7-49c4-a253-92260cb28514"
/>
<img width="1710" height="1107" alt="스크린샷 2026-01-23 오후 5 10 59"
src="https://github.com/user-attachments/assets/b559a81e-8e62-4858-b8e7-92de9caa2919"
/>


┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8264-feat-Add-cancel-button-to-active-job-card-in-grid-view-2f16d73d3650817d83f0dd3b955759cb)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
2026-01-28 12:25:57 +09:00
AustinMroz
89571c7a64 Prevent configuring a node to a placeholder nodeId (#8342)
Litegraph uses `-1 ` as a placeholder node id to indicate that a node
should be assigned a new node id when added to the graph. Under some
unknown circumstances it's possible for a node to have this placeholder
id saved in a workflow file.

When this occurs, the node is loaded and assigned a new id, but then
configured back to the placeholder id. This PR makes it so the newly
assigned id is kept instead.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8342-Prevent-configuring-a-node-to-a-placehodler-nodeId-2f56d73d365081ed8217e989187b15c8)
by [Unito](https://www.unito.io)
2026-01-27 19:01:06 -08:00
Alexander Brown
a7862fc4b7 feat: Asset Browser Placeholder update (#8349)
## Summary

Remind Creators that they can add models that they don't have available
yet

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8349-feat-Asset-Browser-Placeholder-update-2f66d73d3650815f83b4e7ce3587740c)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
2026-01-27 18:58:50 -08:00
AustinMroz
803062bccd Prevent partial copy of custom widgets when performing linked promotion on subgraphs (#6079)
The `toConcrete` call creates a restricted view of a widget that extends
from `BaseWidget`. A copy of the widget created by `createCopyForNode`
will also inherit this restricted view. This creates two problems
- Some widget properties (like `displayValue`) have been judged unsafe
and are explicitly blacklisted from being copied
- The widget now extends from `BaseWidget`. This results in the widget
being processed differently in some logic, such as `#processWidgetClick`
- Because `LegacyWidget` provides an implementation for `onClick`, the
presence of click handlers can not be used to determine which should be
used.

As a proposed, minimal workaround. Widgets which do not already extend
from BaseWidget are no longer cloned through `createCopyForNode`.

Because this PR involves side-stepping properties which have been
explicitly blacklisted. I'd recommend waiting to merge/backport until
after the release of 1.28.7

Resolves Kosinkadink/ComfyUI-VideoHelperSuite#569

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6079-Prevent-partial-copy-of-custom-widgets-when-performing-linked-promotion-on-subgraphs-28d6d73d36508198950efd401186ddef)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
2026-01-27 18:45:48 -08:00
Jin Yi
e3bad033ed [refactor] SearchBox and MultiSelect style improvements (#8328) 2026-01-28 02:11:45 +00:00
Johnpaul Chiwetelu
3b5d285fe2 Fix: Implement scope-aware filtering for template modal (#8335)
## Summary
- Fixes template filtering to be scope-aware, preventing empty results
when switching categories
- Filters now only show as selected when they exist in the current
category scope
- User selections are still persisted in localStorage for convenience

## Problem
When users selected filters (e.g., Image-specific filters) and switched
to a different category (e.g., Video), the persisted filters would cause
empty results because those filter values didn't exist in the new scope.

## Solution
- Modified `useTemplateFiltering` composable to track which filters are
"active" (applicable to current scope)
- Only active filters are shown as selected in the UI
- Only active filters are applied to the filtering logic
- All user selections are still persisted in localStorage
- When returning to a category, previously selected filters
automatically reactivate if applicable

## Test Plan
Tested manually in browser:
1. Navigate to Image category
2. Select filters like "Image" and "Image Edit" from Tasks dropdown
3. Switch to Video category - filters show as "0 selected" (Image/Image
Edit don't exist in Video)
4. Return to Image category - filters are automatically reselected (2
selected)
5. No empty results when switching between categories

## Changes
- `useTemplateFiltering.ts`: Added scope-aware filtering logic with
active/inactive filter distinction
- `WorkflowTemplateSelectorDialog.vue`: Pass navigation context and use
active filters for UI
- `useTemplateFiltering.test.ts`: Added comprehensive tests for
scope-aware behavior



https://github.com/user-attachments/assets/706ddabf-abad-4ff9-a378-6603d275d15a
2026-01-28 03:03:30 +01:00
Alexander Brown
aa5125cef6 Chore: Oxfmt formatting pass (#8341)
## Summary

Expanding the covered files to format. One-time formatting pass. To be
added to the `.git-blame-ignore-revs`

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8341-Chore-Oxfmt-formatting-pass-2f56d73d365081f2988fcb7570f9a2a1)
by [Unito](https://www.unito.io)
2026-01-27 17:59:19 -08:00
Kelly Yang
f0eecdfdfa Refactor DropZone to use VueUse useDropZone (#8174)
## Summary

Refactor DropZone to use VueUse useDropZone. (#7971, #7734)

## Changes

- **What**: Replaced `@dragover`, `@dragleave`, and `@drop` bindings
with `useDropZone`.

## Review Focus

## Screenshots

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8174-Refactor-DropZone-to-use-VueUse-useDropZone-2ee6d73d365081ed9d31d68f7cf42263)
by [Unito](https://www.unito.io)
2026-01-27 20:25:58 -05:00
Zhiqi Yao
68f3f2f537 Fix Chinese translation "paste" misspelling (#8316)
## Summary

Fixed the `站贴` misspelling. The original translation is a common
misspelling using Pinyin IME because they are pronounced the same in
Chinese.

## Changes

- Change translation: `站贴` to `粘贴`

## Review Focus

Check the fact that `粘贴` is correct in Chinese. If you're not a Chinese
speaker, copy `粘贴` to Google Translate, and it should be `paste`
exactly.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8316-Fix-Chinese-translation-paste-misspelling-2f46d73d3650814884e3e4adf8edeb5d)
by [Unito](https://www.unito.io)
2026-01-27 17:43:31 -07:00
Johnpaul Chiwetelu
da81399727 Merge branch 'main' into fix-nigthly-test 2026-01-28 01:13:56 +01:00
GitHub Action
6c30c93e83 [automated] Apply ESLint and Oxfmt fixes 2026-01-27 22:34:45 +00:00
Johnpaul
664be8fc19 test: configure Playwright tests to always run as nightly builds
- Set IS_NIGHTLY=true for all Playwright test runs
- Update CI workflows to pass IS_NIGHTLY=true to test commands
- Update package.json test:browser scripts to include IS_NIGHTLY=true
- Update dialog test to expect 'oss-nightly' instead of 'oss'
- Also update playwright expectations workflow to use IS_NIGHTLY=true

This ensures consistent test behavior regardless of where tests run,
since Playwright tests now always run with IS_NIGHTLY=true.
2026-01-27 23:31:53 +01:00
Alexander Brown
bcb4d6e403 fix: await needsLogin (#8340)
## Summary

Add additional protection for bootstrap order issues.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8340-fix-await-needsLogin-2f56d73d365081c9b3c6d5a091c1eb8d)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-01-27 14:04:35 -08:00
GitHub Action
0ac13a6f8d [automated] Apply ESLint and Oxfmt fixes 2026-01-27 21:53:19 +00:00
Johnpaul
14d7aecf71 test: exclude top 15% of viewport from mobile screenshot tests
- Add viewport clipping to mobile baseline tests to reduce flakiness
- Clip top 15% of viewport for all @mobile screenshot tests
- Affects:
  - mobileBaseline.spec.ts: empty canvas and default workflow tests
  - pan.spec.ts: touch pan test
  - move.spec.ts: touch node move test
- This helps reduce test flakiness from variable mobile UI elements
2026-01-27 22:50:18 +01:00
Johnpaul
4b2804aec1 Merge remote-tracking branch 'origin/main' into fix-nigthly-test 2026-01-27 22:39:05 +01:00
Johnpaul
7bca1558a6 test: fix dialog support URL test to properly mock IS_NIGHTLY flag
- Test both nightly and stable build scenarios
- Mock __IS_NIGHTLY__ global to true/false before page loads
- Expect 'oss-nightly' when IS_NIGHTLY is true
- Expect 'oss' when IS_NIGHTLY is false
- Uses Object.defineProperty to properly set the global value
2026-01-27 22:38:28 +01:00
Alexander Brown
50461d401a Add a placeholder logo. (#8321)
## Summary

We could also color it.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8321-Add-a-placeholder-logo-2f46d73d3650819496a2f46d805afc4e)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: AustinMroz <austin@comfy.org>
2026-01-27 13:22:35 -08:00
Benjamin Lu
ef8657bb5d fix: include items array in purchase dataLayer (#8339)
Include GA4-style `items` payload for subscription purchase events so
GTM receives the full item array.

So, to align with GA4's ecommerce standards, we changed it to an items
array:
https://developers.google.com/analytics/devguides/collection/ga4/item-scoped-ecommerce
2026-01-27 13:04:50 -08:00
Alexander Brown
14369c08a3 refactor: parallelize bootstrap and simplify lifecycle with VueUse (#8307)
## Summary

Refactors bootstrap and lifecycle management to parallelize
initialization, use Vue best practices, and fix a logout state bug.

## Changes

### Bootstrap Store (`bootstrapStore.ts`)
- Extract early bootstrap logic into a dedicated store using
`useAsyncState`
- Parallelize settings, i18n, and workflow sync loading (previously
sequential)
- Handle multi-user login scenarios by deferring settings/workflows
until authenticated

### GraphCanvas Refactoring
- Move non-DOM composables (`useGlobalLitegraph`, `useCopy`, `usePaste`,
etc.) to script setup level for earlier initialization
- Move `watch` and `whenever` declarations outside `onMounted` (Vue best
practice)
- Use `until()` from VueUse to await bootstrap store readiness instead
of direct async calls

### GraphView Simplification
- Replace manual `addEventListener`/`removeEventListener` with
`useEventListener`
- Replace `setInterval` with `useIntervalFn` for automatic cleanup
- Move core command registration to script setup level

### Bug Fix
Using `router.push()` for logout caused `isSettingsReady` to persist as
`true`, making new users inherit the previous user's cached settings.
Reverted to `window.location.reload()` with TODOs for future store reset
implementation.

## Testing

- Verified login/logout cycle clears settings correctly
- Verified bootstrap sequence completes without errors

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-01-27 12:50:13 -08:00
Benjamin Lu
788f50834c feat: add cloud gtm injection (#8311)
## Summary

Add GTM injection for cloud distribution builds and push SPA page view +
signup events.

## Changes

- **What**: Inject GTM script into head-prepend and noscript iframe into
body-prepend for cloud builds
- **What**: Push `page_view` to `dataLayer` on cloud route changes
(page_location + page_title)
- **What**: Push `sign_up` to `dataLayer` after successful account
creation (email/google/github)
- **Dependencies**: None

## Review Focus

- Placement order for head-prepend/body-prepend and cloud-only gating
- Route-change page_view payload shape
- Signup event emission only for new users

## Screenshots (if applicable)

<img width="1512" height="860" alt="Screenshot 2026-01-26 at 11 38
11 AM"
src="https://github.com/user-attachments/assets/03fb61db-5ca4-4432-9704-bbdcc4c6c1b7"
/>

<img width="1512" height="862" alt="Screenshot 2026-01-26 at 11 38
26 AM"
src="https://github.com/user-attachments/assets/6e46c855-a552-4e52-9800-17898a512d4d"
/>
2026-01-27 12:44:15 -08:00
Alexander Brown
75fd4f0e67 feat: Make the text for the value control a clickable label (#8334)
## Summary

More clickable!

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8334-feat-Make-the-text-for-the-value-control-a-clickable-label-2f56d73d365081e79886eddeec03458e)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
2026-01-27 20:16:06 +00:00
Johnpaul Chiwetelu
3946d7b5ff Road to no explicit any part 8 group 5 (#8329)
## Summary
- Add `createMockLLink` and `createMockLinks` factory functions to
handle hybrid Map/Record types
- Replace `as any` assertions with type-safe factory functions in
minimap tests
- Implement proper Pinia store mocking using `vi.hoisted()` pattern
- Remove unused `createMockSubgraph` export (shadowed by local
implementations)

## Test plan
- [x] All minimap tests pass (29 tests)
- [x] `pnpm typecheck` passes
- [x] `pnpm lint` passes
- [x] `pnpm knip` passes

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8329-Road-to-no-explicit-any-part-8-group-5-2f56d73d365081218882de81d5526220)
by [Unito](https://www.unito.io)

---------

Co-authored-by: AustinMroz <austin@comfy.org>
2026-01-27 19:25:15 +01:00
Alexander Brown
440e25e232 fix(test): Mobile Settings (#8332)
## Summary

Bigger mask.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8332-fix-test-Mobile-Settings-2f56d73d3650813b8e39ea5d77e39c18)
by [Unito](https://www.unito.io)

---------

Co-authored-by: github-actions <github-actions@github.com>
2026-01-27 00:21:15 -08:00
Comfy Org PR Bot
7ad43c689c 1.38.12 (#8313)
Patch version increment to 1.38.12

**Base branch:** `main`

---------

Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
v1.38.12
2026-01-27 04:44:39 +00:00
Alexander Brown
c8785c32dd feat: add Hugging Face model source support (#8330)
Add support for Hugging Face as a model source in the Model Info Panel.

- Display HF logo for Hugging Face sources
- Extract source URL from `repo_url` metadata field

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8330-feat-add-Hugging-Face-model-source-support-2f56d73d3650816b8a01d903411ee3a1)
by [Unito](https://www.unito.io)

Co-authored-by: Amp <amp@ampcode.com>
2026-01-26 20:37:18 -08:00
Christian Byrne
02c20786b8 perf: remove autoplay from assets cards (#8325)
## Summary

It's rare that someone has enabled autoplay -- but when they have,
scrolling through a large grid of videos and trying to play them all
onload can cause extreme lag. We don't need the asset cards to be
autoplaying, so the fix here is fine for perf and UX.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8325-perf-remove-autoplay-from-assets-cards-2f56d73d3650814e8103f01b1f21b2e2)
by [Unito](https://www.unito.io)
2026-01-26 20:03:45 -07:00
Rizumu Ayaka
e5e51c8e00 fix: image selection modal Inputs Outputs filtering is not working (#8272)
filteredItems only updates during search, and does not update when the
filter changes. Trigger a re-search when items change through the
updateKey prop chain.
2026-01-26 19:40:33 -07:00
Rizumu Ayaka
88fba25617 fix: group recompute in item selection for properties panel (#8274)
Group first click displays an empty node list in Right Side Panel. The
reason is that when clicking the group, only `processSelect()` is
called, and `recomputeInsideNodes()` is not called.

related https://github.com/Comfy-Org/ComfyUI_frontend/pull/8275

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8274-fix-group-recompute-in-item-selection-for-properties-panel-2f16d73d3650812ca394dc9de3d6855b)
by [Unito](https://www.unito.io)
2026-01-26 19:36:37 -07:00
Rizumu Ayaka
01362d5ff1 fix: recomputeInsideNodes does not support nested group processing (#8275)
related https://github.com/Comfy-Org/ComfyUI_frontend/pull/8274

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8275-fix-recomputeInsideNodes-does-not-support-nested-group-processing-2f16d73d3650815e9b44dbd182f8dd74)
by [Unito](https://www.unito.io)
2026-01-26 19:34:49 -07:00
Rizumu Ayaka
4370979bc4 fix: add tooltips for various settings in the right side panel (#8278)
<img width="1264" height="730" alt="CleanShot 2026-01-23 at 21 27 45@2x"
src="https://github.com/user-attachments/assets/9834b673-8467-44c0-b487-d9dd9e4475d0"
/>



┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8278-fix-add-tooltips-for-various-settings-in-the-right-side-panel-2f16d73d365081e2816cfdf24fa7687f)
by [Unito](https://www.unito.io)
2026-01-26 19:31:18 -07:00
Simula_r
5eda23b7aa fix: workspace icon flash and credits showing 0 while workspace is in… (#8323)
## Summary

- Fix: flash of wrong workspace icon (replaced with loader)
- Fix: personal workspace showing 0 credits

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8323-fix-workspace-icon-flash-and-credits-showing-0-while-workspace-is-in-2f46d73d36508159b52fec3fa0c17e35)
by [Unito](https://www.unito.io)
2026-01-26 16:33:00 -08:00
Alexander Brown
6a5b5c968f refactor: replace vi.doMock with vi.mock + vi.hoisted (#8319)
Replace `vi.doMock` with `vi.mock` + `vi.hoisted` pattern for cleaner
test mocking.

- Add ESLint rule to prevent future `doMock` usage
- Refactor `versionUtil.test.ts` and `firebaseAuthStore.test.ts`

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8319-refactor-replace-vi-doMock-with-vi-mock-vi-hoisted-2f46d73d365081ae9fccf2fa7471a75b)
by [Unito](https://www.unito.io)

Co-authored-by: Amp <amp@ampcode.com>
2026-01-26 14:08:54 -08:00