Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
386eb93
Revert test PR for backport workflow (#4794)
christian-byrne Aug 6, 2025
5e9b878
Scroll templates better (#4584)
Myestery Aug 6, 2025
85aa89d
[test] Regenerate template test screenshots (#4795)
christian-byrne Aug 7, 2025
f3b82e3
[fix] Display dynamic keybinding in minimap tooltip (#4805)
christian-byrne Aug 7, 2025
385c56d
Fix widget display on subgraph nodes (#4798)
AustinMroz Aug 7, 2025
e63337c
[docs] Add feature flags documentation (#4797)
christian-byrne Aug 7, 2025
04f8ae4
[docs] Create CONTRIBUTING.md and reorganize documentation (#4804)
christian-byrne Aug 7, 2025
e77411d
Add touch screen dragging support to minimap (#4781)
Copilot Aug 7, 2025
f4482eb
1.26.0 (#4812)
comfy-pr-bot Aug 7, 2025
70c06d1
Keyboard Shortcut Bottom Panel (#4635)
Myestery Aug 7, 2025
c6c20e5
[docs] Improve icon documentation with practical examples (#4810)
christian-byrne Aug 7, 2025
3c154d8
[refactor] Remove 5 unused settings from apiSchema (#4811)
christian-byrne Aug 7, 2025
65cc067
[ci] Merge ESLint and Prettier workflows with auto-fix for faster ite…
snomiao Aug 7, 2025
1b9baca
[fix] Handle fork PRs in lint-and-format workflow (#4819)
christian-byrne Aug 7, 2025
1fc4fd2
Remove subgraphs from add node context menu (#4820)
AustinMroz Aug 7, 2025
8899b42
Rename subgraph widgets when slot is renamed (#4821)
AustinMroz Aug 7, 2025
5d71d6f
fix: correct branch protection status contexts for RC branches (#4829)
vivekchavan14 Aug 8, 2025
95ab886
feat: Add smooth slide-up animation to SelectionToolbox (#4832)
huchenlei Aug 8, 2025
ba28fa4
Support preview display on subgraphNodes (#4814)
AustinMroz Aug 8, 2025
8bf6077
[CI] Exclude `vue-nodes-migration` branch from playwright tests (#4844)
christian-byrne Aug 8, 2025
7bbbf59
feat: Enable double-click on subgraph slot labels for renaming (#4833)
huchenlei Aug 9, 2025
c3997df
docs: add AGENTS.md file (#4858)
benceruleanlu Aug 9, 2025
10d8016
[bugfix] Fix subgraph I/O slot rename dialog showing stale label cont…
huchenlei Aug 9, 2025
db452c1
Fix disconnection from subgraph inputs (#4800)
AustinMroz Aug 9, 2025
16d7436
Fix: Alt+click reroute creation on high-DPI displays (#4831)
vivekchavan14 Aug 9, 2025
5cc269e
Fix Alt+click create reroute (2/2) (#4863)
christian-byrne Aug 9, 2025
b42878a
Remove unused Litegraph context menu options (#4867)
webfiltered Aug 9, 2025
5f5f44b
Fix execution breaks on multi/any-type slots (#4864)
webfiltered Aug 9, 2025
0d8e4fe
Fix Simplified Chinese Translation (#4865)
MakkiShizu Aug 9, 2025
e70b127
Revert animated-image-preview-saved-webp snapshot change from #4863 (…
christian-byrne Aug 9, 2025
2d11fb1
[CI] Pin third party GH actions to specific SHAs (#4878)
webfiltered Aug 9, 2025
b1117b9
[ci] Add chromium-0.5x to test matrix (#4880)
christian-byrne Aug 9, 2025
ff5943f
Reorder subgraph context menu items (#4870)
webfiltered Aug 9, 2025
03ad06e
Add preview to workflow tabs (#4290)
pythongosssss Aug 9, 2025
48aea92
fix: hide Desktop User Guide menu item in web builds (#4828)
vivekchavan14 Aug 9, 2025
79b4c78
fix: hide More menu when no submenu items are visible (#4837)
vivekchavan14 Aug 9, 2025
8f289c8
Fix Alt-Click-Drag-Copy of Subgraph Nodes (#4879)
christian-byrne Aug 9, 2025
b745f53
[feat] Replace manual clamp function with lodash (#4874)
christian-byrne Aug 9, 2025
ffc812a
[refactor] Remove unused omitBy function (#4886)
christian-byrne Aug 10, 2025
109542d
1.26.1 (#4889)
comfy-pr-bot Aug 10, 2025
c4912dc
[fix] Add bounds checking for clipspace indices to prevent paste erro…
christian-byrne Aug 10, 2025
8e357c4
[feat] Add PR creation automation command (#4892)
huchenlei Aug 10, 2025
d22d62b
[3d] initial version of 3d viewer (#3968)
jtydhr88 Aug 11, 2025
a1a8d48
[feat] Replace removeFromArray with lodash pull (#4906)
christian-byrne Aug 11, 2025
d0d13bf
[ci] standardize release notes format in release commands (#4912)
christian-byrne Aug 11, 2025
71a4319
[feat] Make hotkey for exiting subgraphs configurable in user keybind…
christian-byrne Aug 11, 2025
2c215a6
Fix subgraph reroute serialization (#4911)
AustinMroz Aug 11, 2025
fbc6edd
[feat] Add red styling to Remove Slot context menu option (#4918)
christian-byrne Aug 11, 2025
505c242
[refactor] Replace stringOrEmpty with lodash toString (#4917)
christian-byrne Aug 11, 2025
90f5441
fix: Multiple links from reroute create single slot on SubgraphOutput…
christian-byrne Aug 11, 2025
8403bd0
minimap improve (#4679)
jtydhr88 Aug 11, 2025
c7baf3c
[feat] Add knip for unused code detection (#4890)
huchenlei Aug 12, 2025
7972550
[fix] Fix link deletion from middle button when connected to reroute …
christian-byrne Aug 12, 2025
2138cee
[fix] ensure consistent link release behavior for subgraph IO nodes (…
christian-byrne Aug 12, 2025
a055ec2
[bugfix] Fix queue not updating with completed task images (#4936)
weberjc Aug 12, 2025
dc444fa
Feature/arabic translation (#4916)
Aug 12, 2025
9a70e92
1.26.2 (#4939)
comfy-pr-bot Aug 12, 2025
9c31d70
Add automatic trackpad / mouse sensing (#4913)
webfiltered Aug 12, 2025
1cf8087
[ci] Optimize ESLint performance with caching and generated file excl…
christian-byrne Aug 12, 2025
d068b83
Feat: add duplicate workflow on sidebar (#4895)
ssidharth010 Aug 12, 2025
c42c931
[refactor] Replace lodash with es-toolkit (#4935)
christian-byrne Aug 12, 2025
24a386c
fix: add cleanup for graphChanged listener in useWorkflowPersistence …
christian-byrne Aug 12, 2025
17d7ba8
[ci] Add lint:fix:no-cache script for consistency (#4948)
christian-byrne Aug 12, 2025
db71365
Implement subgraph unpacking (#4840)
AustinMroz Aug 12, 2025
983ebb2
pricing update for MinimaxHailuoVideo node and Kling "kling-v2-1" mod…
bigcat88 Aug 12, 2025
ef1852d
gemini-2.5-pro and flash models; corrected prices (#4945)
bigcat88 Aug 12, 2025
eba0b42
Trigger updateSelectedItems on subgraph conversion (#4949)
AustinMroz Aug 13, 2025
39df4ac
[feat] Add Linux core dump to .gitignore (#4960)
snomiao Aug 13, 2025
1784e2b
[feat] Add alternative package manager lockfiles to .gitignore (#4961)
snomiao Aug 13, 2025
efc0431
Update side toolbar menu (#4946)
pythongosssss Aug 13, 2025
6566acb
Bundled subgraph fixes (#4964)
AustinMroz Aug 13, 2025
5e81343
show group self color in minimap (#4954)
jtydhr88 Aug 13, 2025
db1b81b
fix: Add guards for _listenerController.abort() calls in SubgraphNode…
christian-byrne Aug 13, 2025
4a3bd39
[feat] Restore group node conversion menu with deprecated label (#4967)
christian-byrne Aug 13, 2025
89c78b0
fix pricing for KlingImage2VideoNode (#4957)
bigcat88 Aug 14, 2025
5224c63
[fix] Prevent incompatible connections to SubgraphInputNode occupied …
christian-byrne Aug 14, 2025
1e41c6d
fix: Handle missing subgraph inputs gracefully during workflow import…
christian-byrne Aug 14, 2025
4ca6220
Refactor app menu items (#4665)
pythongosssss Aug 14, 2025
547af0e
feat: Add GTM feature summary step to release command (#4990)
christian-byrne Aug 15, 2025
7b228d6
[release] Increment version to 1.26.3 (#4995)
comfy-pr-bot Aug 15, 2025
9dbdc6a
Fix inconsistency on bypass from context menu (#4988)
AustinMroz Aug 15, 2025
a132dad
[test] Add tests for --disable-api-nodes release fetch skip functiona…
yoland68 Aug 15, 2025
7aaa0f0
fix: Correct traditional Chinese to simplified Chinese in translation…
comfyui-wiki Aug 15, 2025
7d5a4d4
[feat] Improve low quality rendering zoom threshold tooltip (#5009)
christian-byrne Aug 15, 2025
2ed1704
Translated Keyboard Shortcuts (#5007)
Myestery Aug 15, 2025
c90fd18
api_nodes: added prices for gpt-5 series models (#4958)
bigcat88 Aug 15, 2025
c303a3f
[fix] Complete traditional to simplified Chinese character conversion…
christian-byrne Aug 15, 2025
45cc6ca
Fix widget disconnection issue in subgraphs #4922 (#5015)
christian-byrne Aug 15, 2025
d18081a
fix: improve minimap subgraph navigation with graph UUID callback tra…
christian-byrne Aug 15, 2025
fdd8564
Deep copy subgraphs to clipboard, update nested ids on paste (#5003)
AustinMroz Aug 15, 2025
e9ddf29
[bugfix] Preserve nested subgraph widget values during serialization …
christian-byrne Aug 15, 2025
ec4ad5e
fix: issue #4121 (#5029)
arjansingh Aug 16, 2025
65785af
[release] Increment version to 1.26.4 (#5032)
comfy-pr-bot Aug 16, 2025
c78d03d
api_nodes: added prices for Vidu Video nodes (#5035)
bigcat88 Aug 16, 2025
7ab247a
Improve release command flow and GTM criteria (#5040)
christian-byrne Aug 16, 2025
88579c2
Update menu items with a active toggle state to not close menu when c…
pythongosssss Aug 17, 2025
69c660b
handle minimap cleanup called before map set (#5038)
comfyui-wiki Aug 17, 2025
d5d0aa5
[refactor] Refactor minimap initialization logic (#5052)
christian-byrne Aug 17, 2025
f0adb4c
[bugfix] Allow removeInput/removeOutput on nodes without graph refere…
christian-byrne Aug 17, 2025
4a189bd
Minor updates to subgraph breadcrumb item (#5060)
pythongosssss Aug 17, 2025
b1057f1
[fix] Resolve group node execution error when connecting to external …
christian-byrne Aug 17, 2025
ceac8f3
Modal Standardization (#4784)
viva-jinyi Aug 18, 2025
5a35562
[refactor] Migrate minimap to domain-driven renderer architecture (#5…
christian-byrne Aug 18, 2025
0daacfd
[fix] Restore ability to override onMouseDown in node subclasses (#5079)
christian-byrne Aug 18, 2025
194201e
[refactor] Migrate litegraph tests to centralized location (#5072)
christian-byrne Aug 18, 2025
efd9b04
[refactor] Organize all browser test assets into logical folders (#5058)
christian-byrne Aug 18, 2025
9e78558
[fix] Update title button tests after onMouseDown method refactor (#5…
christian-byrne Aug 18, 2025
a505aec
docs: Clarify extension terminology and dev server limitations (#5042)
simula-r Aug 18, 2025
29ae9b4
[fix] Rename viewer control components to prevent unplug warnings (#5…
benceruleanlu Aug 18, 2025
ba4c159
Add .git-blame-ignore-revs for cleaner git blame (#5078)
benceruleanlu Aug 18, 2025
75d7a37
Fix widgets added after previews on subgraph nodes (#5084)
AustinMroz Aug 18, 2025
7a1a2dd
fix: Make bottom panel tab titles reactive to language changes (#5077)
benceruleanlu Aug 18, 2025
727a349
Modal Component & Custom UI Components (#4908)
viva-jinyi Aug 19, 2025
451ef24
[feat] Add Storybook setup and NodePreview story (#4861)
snomiao Aug 19, 2025
30d48f2
feat: add a filter and check box to disable (#5014)
ssidharth010 Aug 19, 2025
7d2d006
Convert Group Nodes to Subgraph (#4972)
Myestery Aug 19, 2025
7d7c6a3
[feat] Enhanced auto-retry configuration for flaky tests (#5089)
snomiao Aug 19, 2025
321fe71
[release] Increment version to 1.26.5 (#5094)
comfy-pr-bot Aug 19, 2025
cf9847a
Remove PR checks workflows (#5099)
benceruleanlu Aug 19, 2025
2240645
[feat] Add Cloudflare Pages deployment for Playwright test reports (#…
snomiao Aug 19, 2025
28d74be
add onRemove invoke to removeWidget method (#5102)
christian-byrne Aug 19, 2025
6948172
[ci] Add caching support to format and knip commands (#5107)
christian-byrne Aug 19, 2025
deba8df
[chore] ignore ./claude/settings.json (#5110)
arjansingh Aug 19, 2025
8009700
refactor readme to suggest deployed reports (#5112)
christian-byrne Aug 19, 2025
97e5291
Update to latest version of workflow icon (#5103)
pythongosssss Aug 19, 2025
8d0a523
[refactor] Remove obsolete Kontext Edit Button (#5108)
christian-byrne Aug 20, 2025
5f349ed
chore: storybook-doc added (#5122)
viva-jinyi Aug 20, 2025
2407748
[feat] Add enhanced filter UI components with search and clear functi…
viva-jinyi Aug 20, 2025
337fb21
[ci] Add retry logic to wrangler page deploy step (#5118)
snomiao Aug 20, 2025
bcdb96a
Remove duplicate semantic labeling from issue templates (#5114)
benceruleanlu Aug 20, 2025
180f951
[fix] reposition TaskItem info #4996 (#5113)
arjansingh Aug 20, 2025
1e9d4c7
Fix/widget ordering consistency (#5106)
simula-r Aug 20, 2025
4db9e3d
Fix: Shift+Click+Drag from outputs with Subgraph outputs (#5115)
DrJKL Aug 20, 2025
e789227
Add support for high-resolution wheel events (#5092)
webfiltered Aug 20, 2025
20b0927
Fix CopyToClipboard Issue (#5109)
Myestery Aug 20, 2025
4e8f665
[bugfix] Remove empty title field from issue templates (#5136)
benceruleanlu Aug 20, 2025
11f5439
[feat] Add comprehensive Storybook stories for custom UI components (…
viva-jinyi Aug 20, 2025
ea9cb3c
Allow Macs to zoom with Cmd + wheel (#5143)
webfiltered Aug 21, 2025
23b3914
[release] Increment version to 1.26.6 (#5148)
comfy-pr-bot Aug 21, 2025
84379d9
Feature/expanded minimap (#4902)
Myestery Aug 21, 2025
78c8dc3
[ci] Trigger CI action (#5157)
christian-byrne Aug 21, 2025
69a3239
Update SidebarIcon.vue (#5105)
Amorano Aug 22, 2025
882506d
Fix: Search Box Implementation for keyboard shortcut (#5140)
DrJKL Aug 22, 2025
aebdda3
api_nodes: added prices for ByteDance Image nodes (#5152)
bigcat88 Aug 22, 2025
ca09374
[fix] #4468 gracefully handle Firebase auth failure (#5144)
arjansingh Aug 22, 2025
3169628
[fix] unignore Claude project settings.json (#5171)
arjansingh Aug 22, 2025
84e7102
Fix/selection toolbox reflow (#5158)
simula-r Aug 22, 2025
c752553
[ci] Make Chromatic and Playwright comment steps safe to fail (#5156)
snomiao Aug 23, 2025
5cc916b
[ci] Restrict chromatic workflow to version-bump-* PRs and manual tri…
snomiao Aug 23, 2025
95a1c86
[tests] update selection overlay tests after canvas migration (#5173)
christian-byrne Aug 23, 2025
1e0ba5c
[feat] update navigation mode default to legacy and improve display n…
christian-byrne Aug 23, 2025
926d8fe
[test] regenerate browser test baselines - clean slate (#5182)
christian-byrne Aug 23, 2025
6bf430b
feat: ✨ support frontend node description (originally @melMass) (#5187)
DrJKL Aug 24, 2025
a630caa
Enhanced custom icon support with tailwind (#5159)
pythongosssss Aug 25, 2025
f79a5dc
Fix HoverDissolveThumbnail layering issue preventing dissolve effect …
comfyui-wiki Aug 25, 2025
73f7e11
Cleanup: Potpourri PR of small changes that reduce the warning noise …
DrJKL Aug 25, 2025
ced62ca
ADR: Monorepo Conversion (#5199)
DrJKL Aug 25, 2025
50e0e29
[feat] Remove obsolete FirstTimeUIMessage component (#5201)
christian-byrne Aug 26, 2025
7d6e252
[feat] improve custom icon build script with TypeScript and error han…
christian-byrne Aug 26, 2025
42bc187
Merge remote-tracking branch 'origin/main' into vue-nodes-migration
benceruleanlu Aug 26, 2025
8646ca4
[ci] Complete implementation of safe-to-fail CI steps (#5210)
snomiao Aug 26, 2025
74b61ec
feat: Add dropdown list for additional tabs (#5046)
ssidharth010 Aug 26, 2025
62e06f4
[ci] Enhance CI/CD caching across all workflows (#5117)
snomiao Aug 26, 2025
9e8db61
fix: Allow for leading/trailing spaces when searching settings (#5193)
DrJKL Aug 26, 2025
48b1ebf
Add Gemini Image node static pricing (#5219)
Kosinkadink Aug 27, 2025
cd444b6
[bugfix] Fix refresh node definitions for subgraph nodes (#5222)
christian-byrne Aug 27, 2025
1b83d6b
Migration: pnpm (#5215)
DrJKL Aug 27, 2025
e8f0ec5
[fix] Correct WhatsNew popup arrow alignment with help center icon (#…
christian-byrne Aug 27, 2025
810f027
Move i18n workflow from single-PRs to release PRs (#5225)
snomiao Aug 27, 2025
e991926
[release] Increment version to 1.26.7 (#5227)
comfy-pr-bot Aug 27, 2025
1bdc190
[feat] Replace Claude loading GIF with ComfyUI logo in test workflow …
christian-byrne Aug 27, 2025
2018119
Fix/toolbox animation (#5197)
simula-r Aug 27, 2025
6b1584e
[docs] Standardize GTM summary format in release SOP (#5231)
christian-byrne Aug 27, 2025
b9f232e
feat: Add menu item to refresh nodes (#5226)
DrJKL Aug 27, 2025
d766cd6
feat: enhance release command with pnpm features (#5232)
christian-byrne Aug 27, 2025
f3d9f4c
fix: Fixed the problem of recalculating internal nodes after adding s…
yiqun12 Aug 27, 2025
29cbcb0
Merge remote-tracking branch 'origin/main' into merge-main-into-vue-n…
benceruleanlu Aug 28, 2025
4c9c665
update deps
benceruleanlu Aug 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[docs] Create CONTRIBUTING.md and reorganize documentation (#4804)
  • Loading branch information
christian-byrne authored Aug 7, 2025
commit 04f8ae416faceff72302fca7563f305cf9181515
327 changes: 327 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,327 @@
# Contributing to ComfyUI Frontend

We're building this frontend together and would love your help — no matter how you'd like to pitch in! You don't need to write code to make a difference.

## Ways to Contribute

- **Pull Requests:** Add features, fix bugs, or improve code health. Browse [issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues) for inspiration. Look for the `Good first issue` label if you're new to the project.
- **Vote on Features:** Give a 👍 to the feature requests you care about to help us prioritize.
- **Verify Bugs:** Try reproducing reported issues and share your results (even if the bug doesn't occur!).
- **Community Support:** Hop into our [Discord](https://discord.com/invite/comfyorg) to answer questions or get help.
- **Share & Advocate:** Tell your friends, tweet about us, or share tips to support the project.

Have another idea? Drop into Discord or open an issue, and let's chat!

## Development Setup

### Prerequisites & Technology Stack

- **Required Software**:
- Node.js (v16 or later; v20/v22 strongly recommended) and npm
- Git for version control
- A running ComfyUI backend instance

- **Tech Stack**:
- [Vue 3.5 Composition API](https://vuejs.org/) with [TypeScript](https://www.typescriptlang.org/)
- [Pinia](https://pinia.vuejs.org/) for state management
- [PrimeVue](https://primevue.org/) with [TailwindCSS](https://tailwindcss.com/) for UI
- litegraph.js (integrated in src/lib) for node editor
- [zod](https://zod.dev/) for schema validation
- [vue-i18n](https://github.com/intlify/vue-i18n) for internationalization

### Initial Setup

1. Clone the repository:
```bash
git clone https://github.com/Comfy-Org/ComfyUI_frontend.git
cd ComfyUI_frontend
```

2. Install dependencies:
```bash
npm install
```

3. Configure environment (optional):
Create a `.env` file in the project root based on the provided [.env.example](.env.example) file.

**Note about ports**: By default, the dev server expects the ComfyUI backend at `localhost:8188`. If your ComfyUI instance runs on a different port, update this in your `.env` file.

### Dev Server Configuration

To launch ComfyUI and have it connect to your development server:

```bash
python main.py --port 8188
```

### Git pre-commit hooks

Run `npm run prepare` to install Git pre-commit hooks. Currently, the pre-commit hook is used to auto-format code on commit.

### Dev Server

Note: The dev server will NOT load any extension from the ComfyUI server. Only core extensions will be loaded.

- Start local ComfyUI backend at `localhost:8188`
- Run `npm run dev` to start the dev server
- Run `npm run dev:electron` to start the dev server with electron API mocked

#### Access dev server on touch devices

Enable remote access to the dev server by setting `VITE_REMOTE_DEV` in `.env` to `true`.

After you start the dev server, you should see following logs:

```
> [email protected] dev
> vite


VITE v5.4.6 ready in 488 ms

➜ Local: http://localhost:5173/
➜ Network: http://172.21.80.1:5173/
➜ Network: http://192.168.2.20:5173/
➜ press h + enter to show help
```

Make sure your desktop machine and touch device are on the same network. On your touch device,
navigate to `http://<server_ip>:5173` (e.g. `http://192.168.2.20:5173` here), to access the ComfyUI frontend.

## Development Workflow

### Architecture Decision Records

We document significant architectural decisions using ADRs (Architecture Decision Records). See [docs/adr/](docs/adr/) for all ADRs and the template for creating new ones.

### Backporting Changes to Release Branches

When you fix a bug that affects a version in feature freeze, we use an automated backport process to apply the fix to the release candidate branch.

#### Real Example

- Subgraphs feature was released in v1.24
- While developing v1.25, we discovered a bug in subgraphs
- v1.24 is in feature freeze (only accepting bug fixes, no new features)
- The fix needs to be applied to both main (v1.25) and the v1.24 release candidate

#### How to Backport Your Fix

1. Create your PR fixing the bug on `main` branch as usual
2. Before merging, add these labels to your PR:
- `needs-backport` - triggers the automated backport workflow
- `1.24` - targets the `core/1.24` release candidate branch

3. Merge your PR normally
4. The automated workflow will:
- Create a new branch from `core/1.24`
- Apply your changes to that branch
- Open a new PR to `core/1.24`
- Comment on your original PR with a link to the backport PR

#### When to Use Backporting

- Bug fixes for features already released
- Security fixes
- Critical issues affecting existing functionality
- Never for new features (these wait for the next release cycle)

#### Handling Conflicts

If the automated cherry-pick fails due to conflicts, the workflow will comment on your PR with:
- The list of conflicting files
- Instructions to manually cherry-pick to the release candidate branch

See [PR #4616](https://github.com/Comfy-Org/ComfyUI_frontend/pull/4616) for the actual subgraph bugfix that was backported from v1.25 to v1.24.

## Code Editor Configuration

### Recommended Setup

This project includes `.vscode/launch.json.default` and `.vscode/settings.json.default` files with recommended launch and workspace settings for editors that use the `.vscode` directory (e.g., VS Code, Cursor, etc.).

We've also included a list of recommended extensions in `.vscode/extensions.json`. Your editor should detect this file and show a human friendly list in the Extensions panel, linking each entry to its marketplace page.

### MCP Integrations

#### Playwright Browser Automation

The Playwright MCP server enables LLM coding assistants (like Copilot, Claude Code, etc.) to control and inspect web browsers programmatically. This allows assistants to navigate websites, take screenshots, and interact with web pages on your behalf.

For ComfyUI_frontend development, you can ask coding assistants to use Playwright screenshots to continuously verify that your code changes produce the expected visual results.

##### Setup for Claude Code

After installing dependencies with `npm i`, the Playwright MCP server will be automatically available when you start Claude Code locally.

Here's how Claude Code can use the Playwright MCP server to inspect the interface of the local development server (assuming you're running the dev server at `localhost:5173`):

```
> navigate to localhost:5173 and take a screenshot.
tell me the items in the menubar

● I'll navigate to localhost:5173 and take a
screenshot to see the menubar items.

● playwright:playwright_navigate (MCP)(url: …
"http://local
host:5173")
⎿ Navigated to http://localhost:5173

● playwright:playwright_screenshot (MCP)(name: "lo…
alhost_5173
_menubar")

⎿ Screenshot saved to: ../../../Downloads/localho
st_5173_menubar-2025-05-30T17-23-00-942Z.png
⎿ Screenshot also stored in memory with name:
'localhost_5173_menubar'

● Read(../../../Downloads/localhost_5173_menubar-2…
25-05-30T17-23-00-942Z.png)
⎿ Read image (94.3KB)

● Based on the screenshot, I can see the menubar at
the top of the ComfyUI interface contains the
following items:

Main Menubar Items:
- Workflow - Menu for workflow-related actions
- Edit - Menu for editing operations
- Help - Menu for help and documentation

Additional UI Elements:
- ComfyUI Logo - On the far left
- Workflow Tab - Shows "Unsaved Workflow" with a
dropdown and close button
- Layout Controls - On the far right (grid view
and hamburger menu icons)

The interface shows a typical ComfyUI workflow
graph with nodes like "Load Checkpoint", "CLIP
Text Encode (Prompt)", "KSampler", and "Empty
Latent Image" connected with colored cables.
```

## Testing

### Unit Tests

- `npm i` to install all dependencies
- `npm run test:unit` to execute all unit tests

### Component Tests

Component tests verify Vue components in `src/components/`.

- `npm run test:component` to execute all component tests

### Playwright Tests

Playwright tests verify the whole app. See [browser_tests/README.md](browser_tests/README.md) for details.

### Running All Tests

Before submitting a PR, ensure all tests pass:

```bash
npm run test:unit
npm run test:component
npm run test:browser
npm run typecheck
npm run lint
npm run format
```

## Code Style Guidelines

### TypeScript
- Use TypeScript for all new code
- Avoid `any` types - use proper type definitions
- Never use `@ts-expect-error` - fix the underlying type issue

### Vue 3 Patterns
- Use Composition API for all components
- Follow Vue 3.5+ patterns (props destructuring is reactive)
- Use `<script setup>` syntax

### Styling
- Use Tailwind CSS classes instead of custom CSS
- Follow the existing dark theme pattern: `dark-theme:` prefix (not `dark:`)

### Internationalization
- All user-facing strings must use vue-i18n
- Add translations to `src/locales/en/main.json`
- Use translation keys: `const { t } = useI18n(); t('key.path')`

## Custom Icons

The project supports custom SVG icons through the unplugin-icons system. Custom icons are stored in `src/assets/icons/custom/` and can be used as Vue components with the `i-comfy:` prefix.

For detailed instructions on adding and using custom icons, see [src/assets/icons/README.md](src/assets/icons/README.md).

## Working with litegraph.js

Since Aug 5, 2025, litegraph.js is now integrated directly into this repository. It was merged using git subtree to preserve the complete commit history ([PR #4667](https://github.com/Comfy-Org/ComfyUI_frontend/pull/4667), [ADR](docs/adr/0001-merge-litegraph-into-frontend.md)).

### Important Notes

- **Issue References**: Commits from the original litegraph repository may contain issue/PR numbers (e.g., #4667) that refer to issues/PRs in the original litegraph.js repository, not this one.
- **File Paths**: When viewing historical commits, file paths may show the original structure before the subtree merge. In those cases, just consider the paths relative to the new litegraph folder.
- **Contributing**: All litegraph modifications should now be made directly in this repository.

The original litegraph repository (https://github.com/Comfy-Org/litegraph.js) is now archived.

## Submitting Changes

### Pull Request Process

1. Ensure your branch is up to date with main
2. Run all tests and ensure they pass
3. Create a pull request with a clear title and description
4. Use conventional commit format for PR titles:
- `[feat]` for new features
- `[fix]` for bug fixes
- `[docs]` for documentation
- `[refactor]` for code refactoring
- `[test]` for test additions/changes
- `[chore]` for maintenance tasks

### PR Description Template

```
## Description
Brief description of the changes

## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update

## Testing
- [ ] Unit tests pass
- [ ] Component tests pass
- [ ] Browser tests pass (if applicable)
- [ ] Manual testing completed

## Screenshots (if applicable)
Add screenshots for UI changes
```

### Review Process

1. All PRs require at least one review
2. Address review feedback promptly
3. Keep PRs focused - one feature/fix per PR
4. Large features should be discussed in an issue first

## Questions?

If you have questions about contributing:
- Check existing issues and discussions
- Ask in our [Discord](https://discord.com/invite/comfyorg)
- Open a new issue for clarification

Thank you for contributing to ComfyUI Frontend!
Loading