* api_nodes: added prices for Ideogram V3 node (character reference)
* Support watching changes on connections. (#5250)
* rename renderingSpeed default value from 'balanced' to 'default'
* added missing type
---------
Co-authored-by: AustinMroz <austin@comfy.org>
* Fixed square brush with hardness <1; improved the effect of hardness, improved the effect of smoothing precision
* Improved square hardness and code quality with performance optimizations
* Fix brush rendering anti-aliasing and optimized square brushes using texture caching
* Switched to QuickLRU for brush cache
* Cleaned up exports from testing
* Removed SOFT_BRUSH_STEPS unused variable
Improves CI performance by caching Playwright browsers between runs.
This reduces the time spent downloading browsers on each workflow execution.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
- Add condition to only run on version-bump branches
- Handle additional build statuses (skipped, cancelled) with appropriate icons and messages
- Improve readability by breaking long conditionals across multiple lines
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* [release] Increment version to 1.26.8
* [fix] Fix Chromatic build failure by updating build-storybook script
Replace nx build-storybook with direct storybook build command to properly
forward --output-dir argument from Chromatic deployment.
Fixes invalid Storybook build issue where static files were empty due to
Nx not passing through command-line arguments to the underlying Storybook
build command.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Change version to 0.7 for testing purposes
* chore(package.json): update version from 0.7 to 1.26.7 to reflect new release
---------
Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Change collect-i18n command from 'nx e2e' to 'npx playwright test' to use
Playwright's native TypeScript compilation instead of Nx's pipeline.
Nx's compilation pipeline doesn't properly handle TypeScript 'declare' fields
in LiteGraph source files, causing babel transform errors. Playwright's native
compilation handles these correctly.
This addresses the TypeScript compilation error:
'declare fields must first be transformed by @babel/plugin-transform-typescript'
Fixes remaining issue after previous workflow fixes.
Restore the ComfyUI animated favicon loading indicator to PR status
comments that was removed in PR #5209 when workflow architecture was
restructured. The loading GIF now appears in:
- Playwright test status comments (pr-playwright-comment.yaml)
- Storybook build status comments (pr-storybook-comment.yaml)
This provides visual continuity and branding consistency during
CI operations, replacing generic hourglass emoji with ComfyUI's
animated logo.
* fix: Ensure logout clears both Firebase auth and API key
When logging out via the avatar dropdown, the logout function was only
clearing Firebase authentication but not the stored API key. This could
leave users partially authenticated with their API key still active.
Updated CurrentUserPopover to use handleSignOut from useCurrentUser
composable, which properly handles both authentication methods:
- Clears API key if logged in with API key
- Signs out Firebase if logged in with Firebase
This ensures complete logout regardless of authentication method.
Fixes#5261🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* test: Update CurrentUserPopover tests to match new logout implementation
Updated test mocks to include handleSignOut from useCurrentUser composable
and adjusted test expectations to verify handleSignOut is called instead
of the direct logout method.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Update playwright.i18n.config.ts to use defineConfig() instead of PlaywrightTestConfig
interface to fix TypeScript compilation issues with 'declare' fields.
The defineConfig API provides proper Vite integration for TypeScript/Babel
compilation, fixing the error: 'TypeScript declare fields must first be
transformed by @babel/plugin-transform-typescript'
Fixes compilation error in i18n collection workflow.
Remove explicit file arguments from collect-i18n command as the new Nx e2e setup
uses playwright config with testMatch pattern to automatically find test files.
The command 'pnpm collect-i18n -- scripts/collect-i18n-general.ts' was failing
because Nx e2e doesn't accept file arguments in the same way.
Fixes workflow failure in release PR #5263
* [feat] Fix CI workflow issues for forked PRs and improve test diagnostics
This commit addresses two critical blockers in the CI workflow:
1. **Cloudflare Token Access Issue**:
- Added conditional deployment that skips Cloudflare Pages for forked PRs
- Forked PRs now get artifact-based report access instead of live URLs
- Maintains security by preventing secret access from external repos
2. **Test Startup Issues**:
- Enhanced ComfyUI server startup with better diagnostics
- Added server PID tracking and process status verification
- Improved error messages and timeout handling
Additional improvements:
- Updated PR comment logic to handle both deployment scenarios
- Added FORK_TESTING.md documentation for contributors
- Enhanced deployment info handling for summary generation
Fixes#5207🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Implement pull_request_target deployment for forked PRs
Add secure deployment solution for Playwright reports from forked PRs using pull_request_target event.
Key Changes:
- Add deploy-playwright-reports.yaml workflow using pull_request_target
- Update test-ui.yaml to work with new deployment approach
- Add comprehensive security documentation
Security Features:
- No untrusted code execution (artifacts only)
- Follows GitHub security best practices
- Maintains full secret access for deployment
- Clear audit trail and logging
Fixes#5207🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Implement cost-optimized deployment with webhook triggers
Replace expensive polling mechanism with repository_dispatch webhooks to reduce GitHub Actions costs by 85%.
Key improvements:
- Remove 30-minute polling wait in deploy-playwright-reports.yaml
- Add repository_dispatch trigger for instant deployment activation
- Implement concurrency controls to prevent redundant deployments
- Add webhook trigger from test completion in test-ui.yaml
- Maintain security and forked PR support
Cost benefits:
- Eliminates 4 Ubuntu runners waiting up to 30min each
- Reduces API calls from 240+ to 1 per PR
- Event-driven architecture for better reliability
- No timeout risks or polling overhead
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [cleanup] Simplify PR testing approach per review feedback
- Revert enhanced ComfyUI server startup logging
- Remove complex fork handling and webhook triggers
- Simplify Cloudflare deployment to original approach
- Remove FORK_TESTING.md and PULL_REQUEST_TARGET_DEPLOYMENT.md files
- Remove deploy-playwright-reports.yaml workflow
- Documentation moved to PR comments for better visibility
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Implement workflow_run architecture for CI comment/deploy separation
Restructures CI workflows to use workflow_run triggers, improving forked PR support and simplifying core testing workflows.
- pr-playwright-comment.yaml - Comments Playwright test results after Tests CI completion
- pr-storybook-comment.yaml - Comments Storybook build status after Chromatic completion
- pr-playwright-deploy.yaml - Deploys Playwright reports with secret access after Tests CI completion
- chromatic.yaml - Removed all commenting logic, focused on Chromatic testing only
- test-ui.yaml - Removed deployment, commenting, and comment-summary job; focused on Playwright testing only
- ✅ Better forked PR support - workflow_run has access to secrets for deployment
- ✅ Cleaner separation of concerns - testing vs commenting/deployment
- ✅ Reduced complexity in core testing workflows
- ✅ Improved reliability for external contributors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Implement workflow_run for both start and completion events
- Updated pr-playwright-comment.yaml to trigger on both 'requested' and 'completed' events
- Updated pr-storybook-comment.yaml to trigger on both 'requested' and 'completed' events
- Added conditional logic to post different messages for workflow start vs completion
- Added "Tests are starting..." message when workflows begin
- Added "Build is starting..." message for Storybook builds
- Maintained existing completion logic with full test results and reports
This allows users to see immediate feedback when their workflows start running,
improving the user experience by providing real-time status updates.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [cleanup] Remove continue-on-error from comment workflows
Comment workflow failures should be visible rather than silently ignored.
This allows better debugging when PR comments fail to post.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Add logging when no PR found in comment workflows
- Add explicit logging step when steps.pr.outputs.result == 'null'
- Shows branch name, workflow run ID, repository, and event details
- Improves debugging when workflow_run triggers but finds no open PR
- Helps identify issues with branch name matching or PR state
Previously these workflows would silently skip all steps when no PR was found,
making it difficult to debug why comments weren't being posted.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Update workflow formatting
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [security] Implement security hardening for workflow_run workflows
- Add URL sanitization for deployment report links to prevent malicious URL injection
- Pin third-party GitHub Actions to commit hashes for supply chain security
- Add repository validation checks to prevent workflow misconfiguration
- Validate deployment URLs against pages.dev pattern before using in comments
Following security recommendations from code review to implement defense-in-depth.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [security] Pin only third-party actions to commit hashes
Keep official GitHub actions (actions/github-script, actions/download-artifact) pinned to version tags as they are trusted first-party actions, while only pinning third-party edumserrano/find-create-or-update-comment to commit hash for supply chain security.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* chore: add setup_repo command for claude code
* docs: update CLAUDE.md with monorepo guidance
* chore: ignore CLAUDE.local.md
* ci: add .nvmrc
enforce v22, the current lts release
* chore: node 24 it is!
* fix .claude/commands/setup_repo.md
Co-authored-by: Alexander Brown <drjkl@comfy.org>
* fix: .claude/commands/setup_repo.md
Co-authored-by: Alexander Brown <drjkl@comfy.org>
* fix: update CLAUDE.md
Co-authored-by: Alexander Brown <drjkl@comfy.org>
---------
Co-authored-by: Alexander Brown <drjkl@comfy.org>
* nx: Initialize nx
https://nx.dev/getting-started/adding-to-existing
* fix: Migrator ordering issue for vitest scripts
* nit: trailing newline
* deps: Updated select dependencies to fix Storybook with pnpm
* fix: Add explicit knip entry point for current workspace
...since it's not inferred from the script now.
- Add pnpm outdated for dependency analysis
- Include pnpm licenses for compliance checking
- Use pnpm why for dependency tree analysis
- Add pnpm doctor for health checks
- Replace npm audit with pnpm audit
These additions provide better insights during release process
and leverage pnpm's superior dependency analysis tools.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* [feat] Move i18n workflow to release-only pattern
- Modify i18n.yaml to only run on version-bump-* branches and manual dispatch
- Follow chromatic.yaml pattern for release-only workflows
- Update CONTRIBUTING.md to document new translation process
- Reduces PR conflicts and improves development velocity
Fixes#5224🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [feat] Optimize i18n workflow trigger conditions
Move logic from job-level 'if' to more restrictive trigger configuration:
- Limit pull_request trigger to main/master branches only
- Add explicit types to reduce unnecessary workflow runs
- Simplify job-level condition while maintaining same behavior
- Only run on version-bump-* branches or manual dispatch
* Apply suggestion from @DrJKL
Co-authored-by: Alexander Brown <drjkl@comfy.org>
* [feat] Optimize i18n workflow trigger conditions
- Simplify trigger section with cleaner organization
- Move workflow_dispatch to top for better readability
- Remove unnecessary path-ignore filters
- Add clearer comments for branch detection logic
- Maintain same functional behavior while improving structure
Addresses request to move branch detection logic from job-level 'if'
to trigger-level 'on' where possible within GitHub Actions limitations.
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
* [fix] Correct WhatsNew popup arrow alignment with help center icon
The arrow positioning was not accounting for additional sidebar icons (terminal and shortcuts)
that were added below the help center icon, causing misalignment. Updated the calculation to
properly position the arrow relative to the help center icon's current location.
Fixes#5126
* [fix] Update small sidebar arrow positioning and improve center alignment
- Fixed small sidebar rule to use consistent calculation with normal sidebar
- Updated positioning to use half icon height for better center alignment
- Both normal and small sidebar now use dynamic CSS variable calculations
Addresses feedback from review by viva-jinyi on CSS specificity and positioning accuracy.
* [fix] Make sidebar CSS variables global for teleported components
- Move --sidebar-width CSS variable to :root to make it accessible globally
- This allows teleported components like WhatsNewPopup to reference sidebar dimensions
- Adjust arrow positioning calculations for better alignment with help center icon
- Add explanatory comments about why these variables need to be global
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: icon-size should be variable
---------
Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
* migration: npm to pnpm
Step 1, package and lockfile
* migration: npm to pnpm
Step 2: docs / LLM instructions
* migration: npm to pnpm
Step 3: More documentation updates
* migration: npm to pnpm
Step 4: Even more documentation
* migration: npm to pnpm
Step 5: GitHub Actions
* migration: npm to pnpm
Step 6: PNPM installation in actions. This merge is going to be painful.
* migration: npm to pnpm
Unignore and add pnpm lockfile.
* migration: npm to pnpm
package-lock.json -> pnpm-lock.yaml
* migration: explicit @primeuix/styled, move glob to prod deps
* migration: more explicit deps required by the importmap plugin and vite
* fix: missed merge artifact
* fix: Make sure pnpm is available to install wrangler
* migration: pnpm for dev-release.yaml
* migration: new setup action version
Won't work until that is updated and a new release is cut.
* migration: Playwright needs uuid
* migration: Add explicit deps for lobehub
* chore(version-bump.yaml): change cache from npm to pnpm to optimize package management and improve build performance
* migration: install pnpm in version-bump action
---------
Co-authored-by: snomiao <snomiao@gmail.com>
The refreshComboInNodes function was only iterating over top-level nodes,
missing nodes inside subgraphs. This caused file lists and combo widget
options to not update properly when new models were added, unless users
created completely new nodes.
Changes:
- Replace graph.nodes iteration with forEachNode() for hierarchical traversal
- Import forEachNode utility from graphTraversalUtil
- Change early continue to early return for callback function
Fixes#5196🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* [ci] Make Playwright deploy step safe to fail
Add continue-on-error: true to Deploy to Cloudflare Pages step to prevent
Cloudflare API issues from blocking essential testing processes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [ci] Make lint-and-format comment steps safe to fail
Add continue-on-error: true to PR comment steps in lint workflow:
- Comment on PR about auto-fix (line 63)
- Comment on PR about manual fix needed (line 76)
This prevents GitHub API permission errors from blocking
essential linting processes while maintaining comment functionality.
---------
Co-authored-by: Claude <noreply@anthropic.com>
The FirstTimeUIMessage was introduced in November 2024 when the new UI became default, but after 6+ months it's no longer needed as users have adapted to the new interface. The message was confusing for new users who never experienced the old UI.
Changes:
- Remove FirstTimeUIMessage.vue component
- Remove component usage from SettingDialogContent.vue
- Remove 'firstTimeUIMessage' translation key from all locales
- Keep settingStore.exists() method as it's part of the public API
* fix: [@vue/compiler-sfc] defineModel is a compiler macro and no longer needs to be imported.
* fix: Duplicate name conflict/warning from unplugin-vue-components
* fix: enforce correct line endings for the commonjs and esm variants via git
* [fix] Resolve HoverDissolveThumbnail layering issue preventing dissolve effect
- Fix layer stacking problem where LazyImage containers blocked overlay visibility
- Restructure template with separate positioning containers for base and overlay images
- Use z-index to ensure proper layering of overlay image above base image
- Update CSS classes from absolute positioning on images to container-based positioning
- Update test assertions to match new class structure
- Ensure hover dissolve transition works correctly from opacity-0 to opacity-100
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Address code review feedback
- Use size-full instead of w-full h-full for cleaner Tailwind classes
- Update tests to use classList approach instead of string contains
- Maintain same functionality while improving code quality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: bymyself <cbyrne@comfy.org>
* Add support for custom iconify using tailwind plugin
- Register svgs from custom icons folder
- Update existing custom icons to remove padding
- Swap component icons for classes in sidebar tabs
- Update browse templates in menu to use custom icon
* Add basic check for custom SVG icons
* Remove unused iconify packages
* [test] regenerate browser test baselines after flaky PR #5158
Trigger fresh baseline generation for browser tests. The animated webp
screenshot baseline was corrupted by flaky results and needs regeneration.
* Update test expectations [skip ci]
---------
Co-authored-by: github-actions <github-actions@github.com>
* [feat] update navigation mode default to legacy and improve display name
- Change defaultsByInstallVersion from 'standard' to 'legacy' for version 1.25.0
- Update legacy navigation display name from 'Left-Click Pan (Legacy)' to 'Drag Navigation'
- Maintains both navigation systems over long term while improving UX clarity
* Update locales [skip ci]
---------
Co-authored-by: github-actions <github-actions@github.com>
* [fix] update selection overlay tests after canvas migration
Update browser tests to work with canvas-based selection overlay introduced in PR #5158.
Replaces DOM-based .selection-overlay-container checks with .selection-toolbox visibility
and converts border visibility tests to canvas screenshot comparisons.
Fixes#5158
* [chore] remove unused file flagged by knip
* [fix] adjust test expectations for canvas-based positioning
- Skip animated webp test unrelated to selection overlay changes
- Update toolbox position expectations to match canvas-based coordinates
- Canvas positioning uses different coordinate system than DOM overlay
* [fix] improve positioning test flexibility and revert webp skip
- Make toolbox position test more flexible for canvas-based coordinates
- Revert animated webp test skip as requested in review
- Canvas positioning varies more than DOM, use reasonable bounds instead
* Update test expectations [skip ci]
* [refactor] address review comments - use fixture locators
- Add selectionToolbox locator to ComfyPage fixture as requested
- Replace .isVisible() === false with .not.toBeVisible() pattern
- Update all selection toolbox locators to use fixture instead of inline selectors
- Improves maintainability and follows established patterns
* [refactor] use fixture canvas locator for screenshots
Replace inline canvas locators with comfyPage.canvas fixture property
for consistency and maintainability as suggested in review.
---------
Co-authored-by: github-actions <github-actions@github.com>
- Remove automatic trigger on push to main
- Add workflow_dispatch for manual triggering
- Add conditional to only run for PRs from version-bump-* branches
- Reduces unnecessary Chromatic builds on regular PRs
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>