Backport of #7899 to `cloud/1.36`
## Summary
- Implement the new add credits (top up) dialog
- Refactor the subscription dialog to make different credit types easier
to understand
## Conflicts Resolved
- `src/components/dialog/content/TopUpCreditsDialogContent.vue` - Took
PR version (new UI)
- `src/locales/en/main.json` - Added missing `usdAmount` translation key
Automatically created by manual backport process.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7932-backport-cloud-1-36-Feat-cloud-new-top-up-dialog-2e36d73d3650812dba2cd7edcb43259b)
by [Unito](https://www.unito.io)
Backport of #7793 to `cloud/1.36`
Automatically created by backport workflow.
Co-authored-by: Luke Mino-Altherr <luke@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
Adds HuggingFace as a model import source alongside CivitAI, with
improved UX for model type selection and UTF-8 filename support.
## Changes
- **Import Sources**: Implemented extensible import source handler
pattern supporting both CivitAI and HuggingFace
- **UTF-8 Support**: Decode URL-encoded filenames to properly display
international characters (e.g., Chinese)
- **UX**: Sort model types alphabetically for easier selection
- **Feature Flag**: Added `huggingfaceModelImportEnabled` flag for
gradual rollout
- **i18n**: Use proper template parameters for localized error messages
## Technical Details
- Created `ImportSourceHandler` interface for extensibility
- Refactored existing CivitAI logic into handler pattern
- Added URL validation per source
- Filename decoding handles malformed URLs gracefully
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7540-feat-Add-HuggingFace-model-import-support-2cb6d73d3650818f966cca89244e8c36)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
## Summary
Pass target tier to billing portal API for deep linking to Stripe's
subscription update confirmation screen when user has an active
subscription.
## Changes
- **What**: When a user with an active subscription clicks a tier in
PricingTable, pass the target tier (including billing cycle) to
`accessBillingPortal` which sends it as `target_tier` in the request
body. This enables the backend to create a Stripe billing portal deep
link directly to the subscription update confirmation screen.
- **Dependencies**: Requires comfy-api PR for `POST /customers/billing`
`target_tier` support
## Review Focus
- PricingTable now differentiates between new subscriptions (checkout
flow) and existing subscriptions (billing portal with deep link)
- Type derivation uses `Parameters<typeof
authStore.accessBillingPortal>[0]` to avoid duplicating the tier union
(matches codebase pattern)
- Registry types manually updated to include `target_tier` field (will
be regenerated when API is deployed)
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7692-feat-pass-target-tier-to-billing-portal-for-subscription-updates-2d06d73d365081b38fe4c81e95dce58c)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
## Summary
Updates SubscriptionPanel to display yearly-appropriate labels for
annual subscribers:
- "Credits remaining this year" instead of "this month"
- "Yearly credits" instead of "Monthly credits" in the "Your plan
includes" section
## Changes
- Added `creditsRemainingThisYear` i18n key
- Added `creditsRemainingLabel` computed that switches based on
`isYearlySubscription`
- Updated `tierBenefits` to use `yearlyCreditsLabel` for annual
subscribers
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7706-fix-show-yearly-labels-in-subscription-panel-for-annual-subscribers-2d16d73d365081488552c2c0b03d862e)
by [Unito](https://www.unito.io)
## Summary
Fix: PricingTable showed "Current Plan" on the wrong billing cycle
(e.g., showing it on Yearly when subscribed to Monthly) because we
weren't checking subscription_duration. Now we check for ANNUAL |
MONTHLY match.
Fix: Subscribed users were being sent to billing portal instead of
checkout. Now routes to checkout.
Improved: Types now use openapi.yml as source of truth. Tier names in
user popover and subscription panels now reflect the billing cycle
(YEARLY/MONTHLY).
Recommended to merge this before
https://github.com/Comfy-Org/ComfyUI_frontend/pull/7692
---------
Co-authored-by: bymyself <cbyrne@comfy.org>
## Summary
Refactor: remove FF for subscription tier, remove legacy code for non
subscription tier logic.
## Review Focus
Preexisting cloud functionality impact.
<!-- If this PR fixes an issue, uncomment and update the line below -->
<!-- Fixes #ISSUE_NUMBER -->
## Screenshots (if applicable)
<!-- Add screenshots or video recording to help explain your changes -->
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7596-refactor-start-on-removing-FF-for-subscription-tiers-2cc6d73d3650816bac3aef893e4f37cd)
by [Unito](https://www.unito.io)
## Summary
Fix subscription panel to use new shared consts for pricing info and
misc plan related items.
## Changes
- **What**: SubscriptionPanel.vue, /en/main.json
- **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-7628-Fix-cloud-subscription-panel-2ce6d73d36508119846dd537b37a0d59)
by [Unito](https://www.unito.io)
## Summary
Add yearly total credits vs monthly. Also pulled out numerical values
from the main.json to avoid translation issues and used n() for better
currency support on prices.
## Changes
- **What**: PricingTable.vue, /en/main.json
- **Breaking**: <!-- Any breaking changes (if none, remove this line)
-->
- **Dependencies**: <!-- New dependencies (if none, remove this line)
-->
## Review Focus
<!-- Critical design decisions or edge cases that need attention -->
<!-- If this PR fixes an issue, uncomment and update the line below -->
<!-- Fixes #ISSUE_NUMBER -->
## Screenshots (if applicable)
<img width="2321" height="1538" alt="image"
src="https://github.com/user-attachments/assets/8c7b3eed-bfd8-4188-914f-3bfa5397a84f"
/>
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7584-Refactor-cloud-yearly-credits-monthly-2cc6d73d365081b28afbec7f9d22546f)
by [Unito](https://www.unito.io)
## Summary
Setup the variants and migrate existing uses of
TextButton/TextIconButton/IconButton to a single Button component.
Still a work in progress.
## Changes
- **What**: Add a new Button
- **What**: Migrate old buttons
- **What**: Delete old buttons
- **Dependencies**: CVA, upgrade Storybook
## Review Focus
<!-- Critical design decisions or edge cases that need attention -->
<!-- If this PR fixes an issue, uncomment and update the line below -->
<!-- Fixes #ISSUE_NUMBER -->
## Screenshots (if applicable)
<!-- Add screenshots or video recording to help explain your changes -->
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7537-WIP-Component-Button-migration-2cb6d73d36508156a81bfc7bbddb36e9)
by [Unito](https://www.unito.io)
---------
Co-authored-by: GitHub Action <action@github.com>
## Summary
Add real-time selection feedback during marquee drag, matching the
behavior users expect from other applications.
## Changes
- Nodes and groups are now selected/deselected instantly as the
selection rectangle moves
- Supports all modifier keys (Shift to add, Alt to subtract) during drag
- Added Comfy.Graph.LiveSelection setting (off by default)
## Rationale
This interaction pattern is standard across virtually all design and
productivity software:
- Operating Systems: Windows Explorer, macOS Finder, and Linux file
managers all show live selection feedback when dragging
- Design Tools: Figma, Sketch, Adobe Illustrator, Photoshop, and Blender
use real-time selection
- IDEs: VS Code, JetBrains IDEs show live selection in file explorers
- Node Editors: Unreal Engine Blueprints, Unity Shader Graph, and
Houdini all support live selection
## Screenshots
https://github.com/user-attachments/assets/8b0c2217-47f9-4422-9cab-cb39e145310c
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7465-live-selection-2c96d73d36508133a4a6f917955d55b3)
by [Unito](https://www.unito.io)
Prior to the release of subgraphs, there was a single graph accessed
through `app.graph`. Now that there's multiple graphs, there's a lot of
code that needs to be reviewed and potentially updated depending on if
it cares about nearby nodes, all nodes, or something else requiring
specific attention.
This was done by simply changing the type of `app.graph` to unknown so
the typechecker will complain about every place it's currently used.
References were then updated to `app.rootGraph` if the previous usage
was correct, or actually rewritten.
By not getting rid of `app.graph`, this change already ensures that
there's no loss of functionality for custom nodes, but the prior typing
of `app.graph` can always be restored if future dissuasion of
`app.graph` usage creates issues.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7399-Cleanup-app-graph-usage-2c76d73d365081178743dfdcf07f44d0)
by [Unito](https://www.unito.io)
## Summary
Add frontend setting to override live preview method per prompt
execution.
## Changes
- **What**: New setting `Comfy.Execution.PreviewMethod` allows users to
override preview method (default/none/auto/latent2rgb/taesd) from
frontend. Applied to Queue Prompt, Queue Front, Run Selected Nodes, and
Auto Queue.
- **Dependencies**: Requires backend support from
comfyanonymous/ComfyUI#11261
## Review Focus
- `'default'` option does not send `preview_method` to backend (uses
server CLI setting)
- Legacy UI intentionally not modified (deprecated, maintains backward
compatibility)
- `versionAdded: '1.35.3'` assigned tentatively; adjust as needed for
actual release version
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7385-feat-add-live-preview-method-setting-for-prompt-execution-2c66d73d365081759c9cebaec29f451c)
by [Unito](https://www.unito.io)
## Summary
Removes custom LoRA feature from subscription benefits display for
standard and founder tiers.
## Changes
- **What**: Removed `customLoRAs` benefit entry from `BENEFITS_BY_TIER`
for standard and founder tiers
## Review Focus
- Verify custom LoRA feature is completely removed from subscription UI
Related to #7391
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
Standard tier was incorrectly displaying custom LoRA as a benefit.
Refactored to use strongly-typed benefit configuration.
## Changes
- **What**: Created `BENEFITS_BY_TIER` configuration to explicitly
define tier benefits
- **Type Safety**: Added `TierKey` type and improved type constraints
throughout
- **Fix**: Excluded `customLoRAs` from standard tier (only
creator/pro/founder get this feature)
## Review Focus
Verify standard tier no longer shows custom LoRA feature in subscription
panel
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7391-fix-remove-custom-LoRA-feature-from-standard-tier-2c66d73d36508149ad6ff7bba6333109)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
Add Jobs API infrastructure in preparation for migrating from legacy
`/history`, `/history_v2`, and `/queue` endpoints to the unified `/jobs`
API.
**This is PR 1 of 3** - Additive changes only, no breaking changes.
## Changes
- **What**:
- Add Zod schemas for runtime validation of Jobs API responses
(`JobListItem`, `JobDetail`)
- Add `fetchQueue`, `fetchHistory`, `fetchJobDetail` fetchers for
`/jobs` endpoint
- Add `extractWorkflow` utility for extracting workflow from nested job
detail response
- Add synthetic priority assignment for queue ordering (pending >
running > history)
- Add comprehensive tests for all new fetchers
- **Non-breaking**: All changes are additive - existing code continues
to work
## Review Focus
1. **Zod schema flexibility**: Using `.passthrough()` to allow extra API
fields - ensures forward compatibility but less strict validation
2. **Priority computation**: Synthetic priority ensures display order:
pending (queued) → running → completed (history)
3. **Test coverage**: Verify tests adequately cover edge cases
## Files Added
- `src/platform/remote/comfyui/jobs/` - New Jobs API module
- `types/jobTypes.ts` - Zod schemas and TypeScript types
- `fetchers/fetchJobs.ts` - API fetchers with validation
- `index.ts` - Barrel exports
-
`tests-ui/tests/platform/remote/comfyui/jobs/fetchers/fetchJobs.test.ts`
- Tests
## Next PRs
- **PR 2**: Migrate `getQueue()` and `getHistory()` to use Jobs API
- **PR 3**: Remove legacy history code and unused types
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7169-feat-Add-Jobs-API-infrastructure-PR-1-of-3-2bf6d73d3650812eae4ac0555a86969c)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
- Add clickable popover to the "What is this?" help text in video
estimates
- Explains that estimates are based on the Wan Fun Control template for
5-second videos
- Includes direct link to try the template:
`cloud.comfy.org/?template=video_wan2_2_14B_fun_camera`
This improves user understanding of how video estimates are calculated
and provides easy access to try the template that the estimates are
based on.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7363-feat-add-popover-with-link-to-Wan-Fun-Control-template-on-pricing-table-2c66d73d36508109b7a6ef80f978448e)
by [Unito](https://www.unito.io)
---------
Co-authored-by: GitHub Action <action@github.com>