Compare commits

...

6 Commits

Author SHA1 Message Date
Connor Byrne
bdeb3d8948 refactor: rename default graph constants for clarity
- legacyDefaultGraph → testDefaultGraph
- newDefaultGraph → prodDefaultGraph

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-06-17 18:17:30 -07:00
Connor Byrne
e3ab196feb fix(ci): use legacy graph for cloud e2e tests
The cloud test expects CheckpointLoaderSimple in the default graph.
Add VITE_USE_LEGACY_DEFAULT_GRAPH env var to cloud build step.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-06-17 16:10:22 -07:00
Connor Byrne
8eea7dcb25 fix: use legacy default graph for e2e test compatibility
- Add conditional defaultGraph export based on VITE_USE_LEGACY_DEFAULT_GRAPH
- CI builds set env var to use legacy CheckpointLoaderSimple workflow
- Add dev:test script for local testing with legacy graph
- Production continues to use the new z_image_turbo workflow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-06-17 13:59:16 -07:00
Alexis Rolland
516a2b02bb Merge branch 'main' into alexis/update_default_workflow 2026-06-12 06:42:52 +08:00
Alexis Rolland
eb4d111a73 Update default graph 2026-06-12 06:37:45 +08:00
Alexis Rolland
8c66843f6e Update default workflow 2026-06-11 22:54:03 +08:00
4 changed files with 418 additions and 1 deletions

View File

@@ -29,3 +29,5 @@ runs:
if: ${{ inputs.include_build_step == 'true' }}
shell: bash
run: pnpm build
env:
VITE_USE_LEGACY_DEFAULT_GRAPH: 'true'

View File

@@ -47,6 +47,8 @@ jobs:
- name: Build cloud frontend
run: pnpm build:cloud
env:
VITE_USE_LEGACY_DEFAULT_GRAPH: 'true'
- name: Upload cloud frontend
uses: actions/upload-artifact@v6

View File

@@ -23,6 +23,7 @@
"dev:desktop": "pnpm --filter @comfyorg/desktop-ui run dev",
"dev:electron": "cross-env DISTRIBUTION=desktop vite --config vite.electron.config.mts",
"dev:no-vue": "cross-env DISABLE_VUE_PLUGINS=true vite --config vite.config.mts",
"dev:test": "cross-env VITE_USE_LEGACY_DEFAULT_GRAPH=true vite --config vite.config.mts",
"dev": "vite --config vite.config.mts",
"devtools:pycheck": "python3 -m compileall -q tools/devtools",
"format:check": "oxfmt --check",

View File

@@ -1,6 +1,6 @@
import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema'
export const defaultGraph: ComfyWorkflowJSON = {
const testDefaultGraph: ComfyWorkflowJSON = {
last_node_id: 9,
last_link_id: 9,
nodes: [
@@ -149,6 +149,418 @@ export const defaultGraph: ComfyWorkflowJSON = {
version: 0.4
}
const prodDefaultGraph: ComfyWorkflowJSON = {
last_node_id: 71,
last_link_id: 82,
nodes: [
{
id: 9,
type: 'SaveImage',
pos: [1279.9999726783708, 319.9999392082668],
size: [300, 420],
flags: {},
order: 9,
mode: 0,
inputs: [
{
name: 'images',
type: 'IMAGE',
link: 80
}
],
outputs: [],
properties: {
'Node name for S&R': 'SaveImage',
cnr_id: 'comfy-core',
ver: '0.3.64',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: ['ComfyUI']
},
{
id: 62,
type: 'CLIPLoader',
pos: [-239.9999987113997, 420.0000536491848],
size: [340, 169.3125],
flags: {},
order: 0,
mode: 0,
inputs: [],
outputs: [
{
name: 'CLIP',
type: 'CLIP',
links: [79, 81]
}
],
properties: {
'Node name for S&R': 'CLIPLoader',
cnr_id: 'comfy-core',
ver: '0.3.73',
models: [
{
name: 'qwen_3_4b.safetensors',
url: 'https://huggingface.co/Comfy-Org/z_image_turbo/resolve/main/split_files/text_encoders/qwen_3_4b.safetensors',
directory: 'text_encoders'
}
],
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: ['qwen_3_4b.safetensors', 'lumina2', 'default']
},
{
id: 63,
type: 'VAELoader',
pos: [659.9998200904802, 699.9998629143215],
size: [320, 106.65625],
flags: {},
order: 1,
mode: 0,
inputs: [],
outputs: [
{
name: 'VAE',
type: 'VAE',
links: [74]
}
],
properties: {
'Node name for S&R': 'VAELoader',
cnr_id: 'comfy-core',
ver: '0.3.73',
models: [
{
name: 'ae.safetensors',
url: 'https://huggingface.co/Comfy-Org/z_image_turbo/resolve/main/split_files/vae/ae.safetensors',
directory: 'vae'
}
],
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: ['ae.safetensors']
},
{
id: 65,
type: 'VAEDecode',
pos: [1019.9998200904802, 319.9999392082668],
size: [225, 96],
flags: {},
order: 8,
mode: 0,
inputs: [
{
name: 'samples',
type: 'LATENT',
link: 73
},
{
name: 'vae',
type: 'VAE',
link: 74
}
],
outputs: [
{
name: 'IMAGE',
type: 'IMAGE',
slot_index: 0,
links: [80]
}
],
properties: {
'Node name for S&R': 'VAEDecode',
cnr_id: 'comfy-core',
ver: '0.3.64',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: []
},
{
id: 66,
type: 'UNETLoader',
pos: [-239.9999987113997, 110.00000596546897],
size: [380, 134.65625],
flags: {},
order: 2,
mode: 0,
inputs: [],
outputs: [
{
name: 'MODEL',
type: 'MODEL',
links: [72]
}
],
properties: {
'Node name for S&R': 'UNETLoader',
cnr_id: 'comfy-core',
ver: '0.3.73',
models: [
{
name: 'z_image_turbo_bf16.safetensors',
url: 'https://huggingface.co/Comfy-Org/z_image_turbo/resolve/main/split_files/diffusion_models/z_image_turbo_bf16.safetensors',
directory: 'diffusion_models'
}
],
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: ['z_image_turbo_bf16.safetensors', 'default']
},
{
id: 67,
type: 'CLIPTextEncode',
pos: [170.00001082534345, 290.0000536491848],
size: [410, 160],
flags: {},
order: 4,
mode: 0,
inputs: [
{
name: 'clip',
type: 'CLIP',
link: 79
}
],
outputs: [
{
name: 'CONDITIONING',
type: 'CONDITIONING',
links: [76]
}
],
properties: {
'Node name for S&R': 'CLIPTextEncode',
cnr_id: 'comfy-core',
ver: '0.3.73',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: [
'anime RPG game style, cute anime girl with gigantic fennec ears and a big fluffy fox tail with long wavy blonde hair and large blue eyes blonde colored eyelashes wearing a pink sweater a large oversized gold trimmed black winter coat and a long blue maxi skirt and a red scarf, she is sitting beside a campfire in the wilderness at night playing guitar with a milky way galaxy sky'
]
},
{
id: 68,
type: 'EmptySD3LatentImage',
pos: [310.0000489723161, 700.0000155022121],
size: [260, 168],
flags: {},
order: 3,
mode: 0,
inputs: [],
outputs: [
{
name: 'LATENT',
type: 'LATENT',
slot_index: 0,
links: [78]
}
],
properties: {
'Node name for S&R': 'EmptySD3LatentImage',
cnr_id: 'comfy-core',
ver: '0.3.64',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: [1024, 1024, 1]
},
{
id: 69,
type: 'ModelSamplingAuraFlow',
pos: [220.00001082534345, 110.00000596546897],
size: [310, 104],
flags: {},
order: 6,
mode: 0,
inputs: [
{
name: 'model',
type: 'MODEL',
link: 72
}
],
outputs: [
{
name: 'MODEL',
type: 'MODEL',
slot_index: 0,
links: [75]
}
],
properties: {
'Node name for S&R': 'ModelSamplingAuraFlow',
cnr_id: 'comfy-core',
ver: '0.3.64',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: [3]
},
{
id: 70,
type: 'KSampler',
pos: [659.9998200904802, 319.9999392082668],
size: [315, 341.3125],
flags: {},
order: 7,
mode: 0,
inputs: [
{
name: 'model',
type: 'MODEL',
link: 75
},
{
name: 'positive',
type: 'CONDITIONING',
link: 76
},
{
name: 'negative',
type: 'CONDITIONING',
link: 82
},
{
name: 'latent_image',
type: 'LATENT',
link: 78
}
],
outputs: [
{
name: 'LATENT',
type: 'LATENT',
slot_index: 0,
links: [73]
}
],
properties: {
'Node name for S&R': 'KSampler',
cnr_id: 'comfy-core',
ver: '0.3.64',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: [42, 'fixed', 8, 1, 'res_multistep', 'simple', 1]
},
{
id: 71,
type: 'CLIPTextEncode',
pos: [170.00001082534345, 520.0000536491848],
size: [405.46875, 140],
flags: {},
order: 5,
mode: 0,
inputs: [
{
name: 'clip',
type: 'CLIP',
link: 81
}
],
outputs: [
{
name: 'CONDITIONING',
type: 'CONDITIONING',
links: [82]
}
],
properties: {
'Node name for S&R': 'CLIPTextEncode',
cnr_id: 'comfy-core',
ver: '0.3.73',
enableTabs: false,
tabWidth: 65,
tabXOffset: 10,
hasSecondTab: false,
secondTabText: 'Send Back',
secondTabOffset: 80,
secondTabWidth: 65
},
widgets_values: [
'low quality, bad anatomy, extra digits, missing digits, extra limbs, missing limbs'
]
}
],
links: [
[72, 66, 0, 69, 0, 'MODEL'],
[73, 70, 0, 65, 0, 'LATENT'],
[74, 63, 0, 65, 1, 'VAE'],
[75, 69, 0, 70, 0, 'MODEL'],
[76, 67, 0, 70, 1, 'CONDITIONING'],
[78, 68, 0, 70, 3, 'LATENT'],
[79, 62, 0, 67, 0, 'CLIP'],
[80, 65, 0, 9, 0, 'IMAGE'],
[81, 62, 0, 71, 0, 'CLIP'],
[82, 71, 0, 70, 2, 'CONDITIONING']
],
groups: [],
config: {},
extra: {
ds: {
scale: 0.9,
offset: [416, 110]
}
},
version: 0.4
}
export const defaultGraph: ComfyWorkflowJSON =
import.meta.env.VITE_USE_LEGACY_DEFAULT_GRAPH === 'true'
? testDefaultGraph
: prodDefaultGraph
export const defaultGraphJSON = JSON.stringify(defaultGraph)
export const blankGraph: ComfyWorkflowJSON = {