diff --git a/browser_tests/helpers/templates.ts b/browser_tests/helpers/templates.ts index 3eee39128..0aa59c3ee 100644 --- a/browser_tests/helpers/templates.ts +++ b/browser_tests/helpers/templates.ts @@ -1,4 +1,8 @@ import { Locator, Page } from '@playwright/test' +import path from 'path' + +import { CORE_TEMPLATES } from '../../src/constants/coreTemplates' +import { TemplateInfo } from '../../src/types/workflowTemplateTypes' export class ComfyTemplates { readonly content: Locator @@ -8,6 +12,17 @@ export class ComfyTemplates { } async loadTemplate(id: string) { - await this.content.getByTestId(`template-workflow-${id}`).click() + await this.content + .getByTestId(`template-workflow-${id}`) + .getByRole('img') + .click() + } + + getAllTemplates(): TemplateInfo[] { + return CORE_TEMPLATES.flatMap((category) => category.templates) + } + + getTemplatePath(filename: string): string { + return path.join('public', 'templates', filename) } } diff --git a/browser_tests/templates.spec.ts b/browser_tests/templates.spec.ts index 78ba800d6..d5a46b0fc 100644 --- a/browser_tests/templates.spec.ts +++ b/browser_tests/templates.spec.ts @@ -1,15 +1,58 @@ import { expect } from '@playwright/test' +import fs from 'fs' import { comfyPageFixture as test } from './fixtures/ComfyPage' test.describe('Templates', () => { test.beforeEach(async ({ comfyPage }) => { await comfyPage.setSetting('Comfy.UseNewMenu', 'Top') + await comfyPage.setSetting('Comfy.Workflow.ShowMissingModelsWarning', false) + }) + + test('should have a JSON workflow file for each template', async ({ + comfyPage + }) => { + for (const template of comfyPage.templates.getAllTemplates()) { + const workflowPath = comfyPage.templates.getTemplatePath( + `${template.name}.json` + ) + expect( + fs.existsSync(workflowPath), + `Missing workflow: ${template.name}` + ).toBe(true) + } + }) + + test('should have all required thumbnail media for each template', async ({ + comfyPage + }) => { + for (const template of comfyPage.templates.getAllTemplates()) { + const { name, mediaSubtype, thumbnailVariant } = template + const baseMedia = `${name}-1.${mediaSubtype}` + const basePath = comfyPage.templates.getTemplatePath(baseMedia) + + // Check base thumbnail + expect( + fs.existsSync(basePath), + `Missing base thumbnail: ${baseMedia}` + ).toBe(true) + + // Check second thumbnail for variants that need it + if ( + thumbnailVariant === 'compareSlider' || + thumbnailVariant === 'hoverDissolve' + ) { + const secondMedia = `${name}-2.${mediaSubtype}` + const secondPath = comfyPage.templates.getTemplatePath(secondMedia) + expect( + fs.existsSync(secondPath), + `Missing second thumbnail: ${secondMedia} required for ${thumbnailVariant}` + ).toBe(true) + } + } }) test('Can load template workflows', async ({ comfyPage }) => { - // This test will need expanding on once the templates are decided - // Clear the workflow await comfyPage.menu.workflowsTab.open() await comfyPage.menu.workflowsTab.newBlankWorkflowButton.click() diff --git a/package-lock.json b/package-lock.json index bd4171b4e..ec712b247 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@comfyorg/comfyui-frontend", - "version": "1.10.15", + "version": "1.10.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@comfyorg/comfyui-frontend", - "version": "1.10.15", + "version": "1.10.16", "license": "GPL-3.0-only", "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.3.1", diff --git a/package.json b/package.json index 307551d92..a553786ad 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@comfyorg/comfyui-frontend", "private": true, - "version": "1.10.15", + "version": "1.10.16", "type": "module", "repository": "https://github.com/Comfy-Org/ComfyUI_frontend", "homepage": "https://comfy.org", diff --git a/public/templates/2_pass_pose_worship-1.webp b/public/templates/2_pass_pose_worship-1.webp new file mode 100644 index 000000000..a600a652c Binary files /dev/null and b/public/templates/2_pass_pose_worship-1.webp differ diff --git a/public/templates/2_pass_pose_worship-2.webp b/public/templates/2_pass_pose_worship-2.webp new file mode 100644 index 000000000..9e396665c Binary files /dev/null and b/public/templates/2_pass_pose_worship-2.webp differ diff --git a/public/templates/area_composition-1.webp b/public/templates/area_composition-1.webp new file mode 100644 index 000000000..a2c85cfa5 Binary files /dev/null and b/public/templates/area_composition-1.webp differ diff --git a/public/templates/area_composition_reversed-1.webp b/public/templates/area_composition_reversed-1.webp new file mode 100644 index 000000000..3987e096f Binary files /dev/null and b/public/templates/area_composition_reversed-1.webp differ diff --git a/public/templates/area_composition_square_area_for_subject-1.webp b/public/templates/area_composition_square_area_for_subject-1.webp new file mode 100644 index 000000000..a7273d81e Binary files /dev/null and b/public/templates/area_composition_square_area_for_subject-1.webp differ diff --git a/public/templates/controlnet_example-1.webp b/public/templates/controlnet_example-1.webp new file mode 100644 index 000000000..37dd7b256 Binary files /dev/null and b/public/templates/controlnet_example-1.webp differ diff --git a/public/templates/controlnet_example-2.webp b/public/templates/controlnet_example-2.webp new file mode 100644 index 000000000..a5ebf79ad Binary files /dev/null and b/public/templates/controlnet_example-2.webp differ diff --git a/public/templates/default-1.webp b/public/templates/default-1.webp new file mode 100644 index 000000000..aa2556e82 Binary files /dev/null and b/public/templates/default-1.webp differ diff --git a/public/templates/default.jpg b/public/templates/default.jpg deleted file mode 100644 index a2b870cef..000000000 Binary files a/public/templates/default.jpg and /dev/null differ diff --git a/public/templates/depth_controlnet-1.webp b/public/templates/depth_controlnet-1.webp new file mode 100644 index 000000000..6460e0f3b Binary files /dev/null and b/public/templates/depth_controlnet-1.webp differ diff --git a/public/templates/depth_controlnet-2.webp b/public/templates/depth_controlnet-2.webp new file mode 100644 index 000000000..f58d97e6c Binary files /dev/null and b/public/templates/depth_controlnet-2.webp differ diff --git a/public/templates/depth_t2i_adapter-1.webp b/public/templates/depth_t2i_adapter-1.webp new file mode 100644 index 000000000..e660bfa74 Binary files /dev/null and b/public/templates/depth_t2i_adapter-1.webp differ diff --git a/public/templates/depth_t2i_adapter-2.webp b/public/templates/depth_t2i_adapter-2.webp new file mode 100644 index 000000000..626d34903 Binary files /dev/null and b/public/templates/depth_t2i_adapter-2.webp differ diff --git a/public/templates/embedding_example-1.webp b/public/templates/embedding_example-1.webp new file mode 100644 index 000000000..9684273ad Binary files /dev/null and b/public/templates/embedding_example-1.webp differ diff --git a/public/templates/esrgan_example-1.webp b/public/templates/esrgan_example-1.webp new file mode 100644 index 000000000..886658239 Binary files /dev/null and b/public/templates/esrgan_example-1.webp differ diff --git a/public/templates/flux_canny_model_example-1.webp b/public/templates/flux_canny_model_example-1.webp new file mode 100644 index 000000000..37ad019d9 Binary files /dev/null and b/public/templates/flux_canny_model_example-1.webp differ diff --git a/public/templates/flux_canny_model_example-2.webp b/public/templates/flux_canny_model_example-2.webp new file mode 100644 index 000000000..8fa3103a3 Binary files /dev/null and b/public/templates/flux_canny_model_example-2.webp differ diff --git a/public/templates/flux_depth_lora_example-1.webp b/public/templates/flux_depth_lora_example-1.webp new file mode 100644 index 000000000..4a89de56a Binary files /dev/null and b/public/templates/flux_depth_lora_example-1.webp differ diff --git a/public/templates/flux_depth_lora_example-2.webp b/public/templates/flux_depth_lora_example-2.webp new file mode 100644 index 000000000..179a0826b Binary files /dev/null and b/public/templates/flux_depth_lora_example-2.webp differ diff --git a/public/templates/flux_dev_checkpoint_example-1.webp b/public/templates/flux_dev_checkpoint_example-1.webp new file mode 100644 index 000000000..a8fe73d0a Binary files /dev/null and b/public/templates/flux_dev_checkpoint_example-1.webp differ diff --git a/public/templates/flux_fill_inpaint_example-1.webp b/public/templates/flux_fill_inpaint_example-1.webp new file mode 100644 index 000000000..b06b2d663 Binary files /dev/null and b/public/templates/flux_fill_inpaint_example-1.webp differ diff --git a/public/templates/flux_fill_inpaint_example-2.webp b/public/templates/flux_fill_inpaint_example-2.webp new file mode 100644 index 000000000..9d7838f30 Binary files /dev/null and b/public/templates/flux_fill_inpaint_example-2.webp differ diff --git a/public/templates/flux_fill_outpaint_example-1.webp b/public/templates/flux_fill_outpaint_example-1.webp new file mode 100644 index 000000000..557e1d2b1 Binary files /dev/null and b/public/templates/flux_fill_outpaint_example-1.webp differ diff --git a/public/templates/flux_fill_outpaint_example-2.webp b/public/templates/flux_fill_outpaint_example-2.webp new file mode 100644 index 000000000..88b0c4b9a Binary files /dev/null and b/public/templates/flux_fill_outpaint_example-2.webp differ diff --git a/public/templates/flux_redux_model_example-1.webp b/public/templates/flux_redux_model_example-1.webp new file mode 100644 index 000000000..13ce990fc Binary files /dev/null and b/public/templates/flux_redux_model_example-1.webp differ diff --git a/public/templates/flux_schnell-1.webp b/public/templates/flux_schnell-1.webp new file mode 100644 index 000000000..692d1f1d6 Binary files /dev/null and b/public/templates/flux_schnell-1.webp differ diff --git a/public/templates/flux_schnell.jpg b/public/templates/flux_schnell.jpg deleted file mode 100644 index a0663c041..000000000 Binary files a/public/templates/flux_schnell.jpg and /dev/null differ diff --git a/public/templates/gligen_textbox_example-1.webp b/public/templates/gligen_textbox_example-1.webp new file mode 100644 index 000000000..449c9add8 Binary files /dev/null and b/public/templates/gligen_textbox_example-1.webp differ diff --git a/public/templates/hiresfix_esrgan_workflow-1.webp b/public/templates/hiresfix_esrgan_workflow-1.webp new file mode 100644 index 000000000..c4e8922ee Binary files /dev/null and b/public/templates/hiresfix_esrgan_workflow-1.webp differ diff --git a/public/templates/hiresfix_latent_workflow-1.webp b/public/templates/hiresfix_latent_workflow-1.webp new file mode 100644 index 000000000..82f49fa90 Binary files /dev/null and b/public/templates/hiresfix_latent_workflow-1.webp differ diff --git a/public/templates/hunyuan_video_text_to_video-1.webp b/public/templates/hunyuan_video_text_to_video-1.webp new file mode 100644 index 000000000..725ecce28 Binary files /dev/null and b/public/templates/hunyuan_video_text_to_video-1.webp differ diff --git a/public/templates/image2image-1.webp b/public/templates/image2image-1.webp new file mode 100644 index 000000000..09a9f57a6 Binary files /dev/null and b/public/templates/image2image-1.webp differ diff --git a/public/templates/image2image.jpg b/public/templates/image2image.jpg deleted file mode 100644 index fc8e3ab61..000000000 Binary files a/public/templates/image2image.jpg and /dev/null differ diff --git a/public/templates/image_to_video-1.webp b/public/templates/image_to_video-1.webp new file mode 100644 index 000000000..e5c18719a Binary files /dev/null and b/public/templates/image_to_video-1.webp differ diff --git a/public/templates/inpain_model_outpainting-1.webp b/public/templates/inpain_model_outpainting-1.webp new file mode 100644 index 000000000..668feff2e Binary files /dev/null and b/public/templates/inpain_model_outpainting-1.webp differ diff --git a/public/templates/inpain_model_outpainting-2.webp b/public/templates/inpain_model_outpainting-2.webp new file mode 100644 index 000000000..f2a5313e7 Binary files /dev/null and b/public/templates/inpain_model_outpainting-2.webp differ diff --git a/public/templates/inpaint_example-1.webp b/public/templates/inpaint_example-1.webp new file mode 100644 index 000000000..90deba6cf Binary files /dev/null and b/public/templates/inpaint_example-1.webp differ diff --git a/public/templates/inpaint_example-2.webp b/public/templates/inpaint_example-2.webp new file mode 100644 index 000000000..4f755dd0c Binary files /dev/null and b/public/templates/inpaint_example-2.webp differ diff --git a/public/templates/latent_upscale_different_prompt_model-1.webp b/public/templates/latent_upscale_different_prompt_model-1.webp new file mode 100644 index 000000000..eb5356c56 Binary files /dev/null and b/public/templates/latent_upscale_different_prompt_model-1.webp differ diff --git a/public/templates/lora-1.webp b/public/templates/lora-1.webp new file mode 100644 index 000000000..5a60509a0 Binary files /dev/null and b/public/templates/lora-1.webp differ diff --git a/public/templates/lora_multiple-1.webp b/public/templates/lora_multiple-1.webp new file mode 100644 index 000000000..3abe64e83 Binary files /dev/null and b/public/templates/lora_multiple-1.webp differ diff --git a/public/templates/ltxv_image_to_video-1.webp b/public/templates/ltxv_image_to_video-1.webp new file mode 100644 index 000000000..2ce886fd3 Binary files /dev/null and b/public/templates/ltxv_image_to_video-1.webp differ diff --git a/public/templates/ltxv_text_to_video-1.webp b/public/templates/ltxv_text_to_video-1.webp new file mode 100644 index 000000000..5ec6e3386 Binary files /dev/null and b/public/templates/ltxv_text_to_video-1.webp differ diff --git a/public/templates/mixing_controlnets-1.webp b/public/templates/mixing_controlnets-1.webp new file mode 100644 index 000000000..ff9429434 Binary files /dev/null and b/public/templates/mixing_controlnets-1.webp differ diff --git a/public/templates/mixing_controlnets-2.webp b/public/templates/mixing_controlnets-2.webp new file mode 100644 index 000000000..58129449b Binary files /dev/null and b/public/templates/mixing_controlnets-2.webp differ diff --git a/public/templates/mochi_text_to_video_example-1.webp b/public/templates/mochi_text_to_video_example-1.webp new file mode 100644 index 000000000..ae8aff4ed Binary files /dev/null and b/public/templates/mochi_text_to_video_example-1.webp differ diff --git a/public/templates/sd3.5_large_blur-1.webp b/public/templates/sd3.5_large_blur-1.webp new file mode 100644 index 000000000..87d5404af Binary files /dev/null and b/public/templates/sd3.5_large_blur-1.webp differ diff --git a/public/templates/sd3.5_large_blur-2.webp b/public/templates/sd3.5_large_blur-2.webp new file mode 100644 index 000000000..10f9f8785 Binary files /dev/null and b/public/templates/sd3.5_large_blur-2.webp differ diff --git a/public/templates/sd3.5_large_blur.json b/public/templates/sd3.5_large_blur.json new file mode 100644 index 000000000..39d6c9a92 --- /dev/null +++ b/public/templates/sd3.5_large_blur.json @@ -0,0 +1,582 @@ +{ + "last_node_id": 57, + "last_link_id": 113, + "nodes": [ + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + 1, + -17 + ], + "size": [ + 389.7508239746094, + 98 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 14 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 65 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 8, + 85 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "sd3.5_large_fp8_scaled.safetensors" + ] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 0, + 145 + ], + "size": [ + 388.7348327636719, + 188.959716796875 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 65 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 98, + 109 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "crystal butterfly above the sea, white, hyper detailed, with diamonds" + ] + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 770, + 310 + ], + "size": [ + 278.8823547363281, + 46.5799446105957 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 63 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 13 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1097, + -14 + ], + "size": [ + 845.74560546875, + 898.2359619140625 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 13 + } + ], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 33, + "type": "EmptySD3LatentImage", + "pos": [ + 420, + 250 + ], + "size": [ + 300.9447021484375, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "shape": 3, + "links": [ + 66 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptySD3LatentImage" + }, + "widgets_values": [ + 1024, + 1024, + 1 + ] + }, + { + "id": 50, + "type": "ConditioningZeroOut", + "pos": [ + 94, + 404 + ], + "size": [ + 317.4000244140625, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 98 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "shape": 3, + "links": [ + 108 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut" + }, + "widgets_values": [] + }, + { + "id": 46, + "type": "ControlNetLoader", + "pos": [ + -15, + 472 + ], + "size": [ + 411.968017578125, + 58.06914520263672 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "shape": 3, + "links": [ + 87 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "sd3.5_large_controlnet_blur.safetensors" + ] + }, + { + "id": 57, + "type": "LoadImage", + "pos": [ + 449, + 478 + ], + "size": [ + 470.65765380859375, + 461.4942932128906 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 113 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ComfyUI_00204_.png", + "image" + ] + }, + { + "id": 3, + "type": "KSampler", + "pos": [ + 770, + -10 + ], + "size": [ + 284.1198425292969, + 262 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 14 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 83, + "slot_index": 1 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 84 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 66 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 63 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 268264726798396, + "randomize", + 30, + 4, + "euler", + "simple", + 1 + ] + }, + { + "id": 44, + "type": "ControlNetApplySD3", + "pos": [ + 420, + -20 + ], + "size": [ + 315, + 186 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 109 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 108 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 87, + "slot_index": 2 + }, + { + "name": "vae", + "type": "VAE", + "link": 85, + "slot_index": 3 + }, + { + "name": "image", + "type": "IMAGE", + "link": 113, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "shape": 3, + "links": [ + 83 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "shape": 3, + "links": [ + 84 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplySD3" + }, + "widgets_values": [ + 0.7000000000000001, + 0, + 1 + ] + } + ], + "links": [ + [ + 8, + 4, + 2, + 8, + 1, + "VAE" + ], + [ + 13, + 8, + 0, + 9, + 0, + "IMAGE" + ], + [ + 14, + 4, + 0, + 3, + 0, + "MODEL" + ], + [ + 63, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 65, + 4, + 1, + 6, + 0, + "CLIP" + ], + [ + 66, + 33, + 0, + 3, + 3, + "LATENT" + ], + [ + 83, + 44, + 0, + 3, + 1, + "CONDITIONING" + ], + [ + 84, + 44, + 1, + 3, + 2, + "CONDITIONING" + ], + [ + 85, + 4, + 2, + 44, + 3, + "VAE" + ], + [ + 87, + 46, + 0, + 44, + 2, + "CONTROL_NET" + ], + [ + 92, + 48, + 0, + 47, + 0, + "IMAGE" + ], + [ + 98, + 6, + 0, + 50, + 0, + "CONDITIONING" + ], + [ + 102, + 47, + 0, + 53, + 0, + "IMAGE" + ], + [ + 108, + 50, + 0, + 44, + 1, + "CONDITIONING" + ], + [ + 109, + 6, + 0, + 44, + 0, + "CONDITIONING" + ], + [ + 113, + 57, + 0, + 44, + 4, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.555991731349224, + "offset": [ + 224.63848966184364, + 330.6857814538206 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/public/templates/sd3.5_large_canny_controlnet_example-1.webp b/public/templates/sd3.5_large_canny_controlnet_example-1.webp new file mode 100644 index 000000000..d8a592cab Binary files /dev/null and b/public/templates/sd3.5_large_canny_controlnet_example-1.webp differ diff --git a/public/templates/sd3.5_large_canny_controlnet_example-2.webp b/public/templates/sd3.5_large_canny_controlnet_example-2.webp new file mode 100644 index 000000000..a1d04a6bd Binary files /dev/null and b/public/templates/sd3.5_large_canny_controlnet_example-2.webp differ diff --git a/public/templates/sd3.5_large_depth-1.webp b/public/templates/sd3.5_large_depth-1.webp new file mode 100644 index 000000000..ae4ff4f0a Binary files /dev/null and b/public/templates/sd3.5_large_depth-1.webp differ diff --git a/public/templates/sd3.5_large_depth-2.webp b/public/templates/sd3.5_large_depth-2.webp new file mode 100644 index 000000000..3bd71e101 Binary files /dev/null and b/public/templates/sd3.5_large_depth-2.webp differ diff --git a/public/templates/sd3.5_large_depth.json b/public/templates/sd3.5_large_depth.json new file mode 100644 index 000000000..0191c9090 --- /dev/null +++ b/public/templates/sd3.5_large_depth.json @@ -0,0 +1,713 @@ +{ + "last_node_id": 60, + "last_link_id": 121, + "nodes": [ + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1097, + -14 + ], + "size": [ + 845.74560546875, + 898.2359619140625 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 13 + } + ], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 33, + "type": "EmptySD3LatentImage", + "pos": [ + 430, + 250 + ], + "size": [ + 300.9447021484375, + 106 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "shape": 3, + "links": [ + 115 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptySD3LatentImage" + }, + "widgets_values": [ + 1024, + 1024, + 1 + ] + }, + { + "id": 45, + "type": "LoadImage", + "pos": [ + -10, + 600 + ], + "size": [ + 288, + 336 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 91 + ] + }, + { + "name": "MASK", + "type": "MASK", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "vcmd_create_dragon_mascot_characters_that_best_suitable_for_Sin_5ba6beab-2ad7-4810-997e-387c27bea297.png", + "image" + ] + }, + { + "id": 46, + "type": "ControlNetLoader", + "pos": [ + 0, + 490 + ], + "size": [ + 623.134033203125, + 58 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "shape": 3, + "links": [ + 87 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "sd3.5_large_controlnet_depth.safetensors" + ] + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 780, + 315 + ], + "size": [ + 278.8823547363281, + 46.5799446105957 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 116 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 13 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 56, + "type": "KSampler", + "pos": [ + 765, + -15 + ], + "size": [ + 315, + 262 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 112 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 113 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 114 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 115 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 116 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 0, + "randomize", + 20, + 8, + "euler", + "normal", + 1 + ] + }, + { + "id": 58, + "type": "ConditioningZeroOut", + "pos": [ + 135, + 420 + ], + "size": [ + 317.4000244140625, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 119 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 121 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut" + } + }, + { + "id": 57, + "type": "CLIPTextEncode", + "pos": [ + -15, + 150 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 117 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 119, + 120 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "hairy dragon stuffed toy with light green color in a fairy tale background, fluffy hair, standing with 2 legs" + ] + }, + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + -15, + 0 + ], + "size": [ + 387.85345458984375, + 98 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 112 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 117 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 8, + 85 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "sd3.5_large_fp8_scaled.safetensors" + ] + }, + { + "id": 44, + "type": "ControlNetApplySD3", + "pos": [ + 420, + 15 + ], + "size": [ + 315, + 186 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 120 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 121 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 87, + "slot_index": 2 + }, + { + "name": "vae", + "type": "VAE", + "link": 85, + "slot_index": 3 + }, + { + "name": "image", + "type": "IMAGE", + "link": 110, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "shape": 3, + "links": [ + 113 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "shape": 3, + "links": [ + 114 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplySD3" + }, + "widgets_values": [ + 0.7000000000000001, + 0, + 1 + ] + }, + { + "id": 54, + "type": "PreviewImage", + "pos": [ + 660, + 495 + ], + "size": [ + 366.44989013671875, + 340.7085266113281 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 109 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 48, + "type": "ImageScale", + "pos": [ + 310, + 600 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 91 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 103, + 108 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageScale" + }, + "widgets_values": [ + "bilinear", + 1024, + 1024, + "center" + ] + }, + { + "id": 55, + "type": "DepthAnythingPreprocessor", + "pos": [ + 310, + 770 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 108 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 109, + 110 + ] + } + ], + "properties": { + "Node name for S&R": "DepthAnythingPreprocessor" + }, + "widgets_values": [ + "depth_anything_vitl14.pth", + 1024 + ] + } + ], + "links": [ + [ + 8, + 4, + 2, + 8, + 1, + "VAE" + ], + [ + 13, + 8, + 0, + 9, + 0, + "IMAGE" + ], + [ + 85, + 4, + 2, + 44, + 3, + "VAE" + ], + [ + 87, + 46, + 0, + 44, + 2, + "CONTROL_NET" + ], + [ + 91, + 45, + 0, + 48, + 0, + "IMAGE" + ], + [ + 92, + 48, + 0, + 47, + 0, + "IMAGE" + ], + [ + 102, + 47, + 0, + 53, + 0, + "IMAGE" + ], + [ + 108, + 48, + 0, + 55, + 0, + "IMAGE" + ], + [ + 109, + 55, + 0, + 54, + 0, + "IMAGE" + ], + [ + 110, + 55, + 0, + 44, + 4, + "IMAGE" + ], + [ + 112, + 4, + 0, + 56, + 0, + "MODEL" + ], + [ + 113, + 44, + 0, + 56, + 1, + "CONDITIONING" + ], + [ + 114, + 44, + 1, + 56, + 2, + "CONDITIONING" + ], + [ + 115, + 33, + 0, + 56, + 3, + "LATENT" + ], + [ + 116, + 56, + 0, + 8, + 0, + "LATENT" + ], + [ + 117, + 4, + 1, + 57, + 0, + "CLIP" + ], + [ + 119, + 57, + 0, + 58, + 0, + "CONDITIONING" + ], + [ + 120, + 57, + 0, + 44, + 0, + "CONDITIONING" + ], + [ + 121, + 58, + 0, + 44, + 1, + "CONDITIONING" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 1.2331581182307068, + "offset": [ + 692.0972183417064, + 84.29928193157562 + ] + } + }, + "version": 0.4 +} \ No newline at end of file diff --git a/public/templates/sd3.5_simple_example-1.webp b/public/templates/sd3.5_simple_example-1.webp new file mode 100644 index 000000000..2f7a61db1 Binary files /dev/null and b/public/templates/sd3.5_simple_example-1.webp differ diff --git a/public/templates/sdxl_refiner_prompt_example-1.webp b/public/templates/sdxl_refiner_prompt_example-1.webp new file mode 100644 index 000000000..91a5e1ddc Binary files /dev/null and b/public/templates/sdxl_refiner_prompt_example-1.webp differ diff --git a/public/templates/sdxl_revision_text_prompts-1.webp b/public/templates/sdxl_revision_text_prompts-1.webp new file mode 100644 index 000000000..aa3f8731d Binary files /dev/null and b/public/templates/sdxl_revision_text_prompts-1.webp differ diff --git a/public/templates/sdxl_revision_zero_positive-1.webp b/public/templates/sdxl_revision_zero_positive-1.webp new file mode 100644 index 000000000..dfea10996 Binary files /dev/null and b/public/templates/sdxl_revision_zero_positive-1.webp differ diff --git a/public/templates/sdxl_simple_example-1.webp b/public/templates/sdxl_simple_example-1.webp new file mode 100644 index 000000000..c511fd4e5 Binary files /dev/null and b/public/templates/sdxl_simple_example-1.webp differ diff --git a/public/templates/sdxlturbo_example-1.webp b/public/templates/sdxlturbo_example-1.webp new file mode 100644 index 000000000..4b185d55b Binary files /dev/null and b/public/templates/sdxlturbo_example-1.webp differ diff --git a/public/templates/stable_audio_example-1.flac b/public/templates/stable_audio_example-1.flac new file mode 100644 index 000000000..6aa694843 Binary files /dev/null and b/public/templates/stable_audio_example-1.flac differ diff --git a/public/templates/stable_zero123_example-1.webp b/public/templates/stable_zero123_example-1.webp new file mode 100644 index 000000000..7183c7dd3 Binary files /dev/null and b/public/templates/stable_zero123_example-1.webp differ diff --git a/public/templates/txt_to_image_to_video-1.webp b/public/templates/txt_to_image_to_video-1.webp new file mode 100644 index 000000000..3a02d3411 Binary files /dev/null and b/public/templates/txt_to_image_to_video-1.webp differ diff --git a/public/templates/upscale.jpg b/public/templates/upscale.jpg deleted file mode 100644 index e8523535f..000000000 Binary files a/public/templates/upscale.jpg and /dev/null differ diff --git a/src/components/templates/TemplateWorkflowCard.vue b/src/components/templates/TemplateWorkflowCard.vue index b1667856e..ea1fd0df2 100644 --- a/src/components/templates/TemplateWorkflowCard.vue +++ b/src/components/templates/TemplateWorkflowCard.vue @@ -1,38 +1,45 @@ diff --git a/src/components/templates/thumbnails/BaseThumbnail.vue b/src/components/templates/thumbnails/BaseThumbnail.vue new file mode 100644 index 000000000..6be2f2eb7 --- /dev/null +++ b/src/components/templates/thumbnails/BaseThumbnail.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/components/templates/thumbnails/CompareSliderThumbnail.vue b/src/components/templates/thumbnails/CompareSliderThumbnail.vue new file mode 100644 index 000000000..76ae33ee1 --- /dev/null +++ b/src/components/templates/thumbnails/CompareSliderThumbnail.vue @@ -0,0 +1,51 @@ + + + diff --git a/src/components/templates/thumbnails/DefaultThumbnail.vue b/src/components/templates/thumbnails/DefaultThumbnail.vue new file mode 100644 index 000000000..6a854a0b6 --- /dev/null +++ b/src/components/templates/thumbnails/DefaultThumbnail.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/templates/thumbnails/HoverDissolveThumbnail.vue b/src/components/templates/thumbnails/HoverDissolveThumbnail.vue new file mode 100644 index 000000000..686f5cc3b --- /dev/null +++ b/src/components/templates/thumbnails/HoverDissolveThumbnail.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/constants/coreTemplates.ts b/src/constants/coreTemplates.ts index 4a67ecaa5..83cf23fb8 100644 --- a/src/constants/coreTemplates.ts +++ b/src/constants/coreTemplates.ts @@ -7,52 +7,54 @@ export const CORE_TEMPLATES = [ { name: 'default', mediaType: 'image', - mediaSubtype: 'png' + mediaSubtype: 'webp' }, { name: 'image2image', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/img2img/' }, { name: 'lora', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/lora/' }, { name: 'inpaint_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'compareSlider', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/inpaint/' }, { name: 'inpain_model_outpainting', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'compareSlider', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/inpaint/#outpainting' }, { name: 'embedding_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/textual_inversion_embeddings/' }, { name: 'gligen_textbox_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/gligen/' }, { name: 'lora_multiple', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/lora/' } ] @@ -65,51 +67,55 @@ export const CORE_TEMPLATES = [ { name: 'flux_dev_checkpoint_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#flux-dev-1' }, { name: 'flux_schnell', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#flux-schnell-1' }, { name: 'flux_fill_inpaint_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'compareSlider', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#fill-inpainting-model' }, { name: 'flux_fill_outpaint_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'compareSlider', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#fill-inpainting-model' }, { name: 'flux_canny_model_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', + tutorialUrl: + 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#canny-and-depth' + }, + { + name: 'flux_depth_lora_example', + mediaType: 'image', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#canny-and-depth' }, { name: 'flux_redux_model_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#redux' - }, - { - name: 'flux_depth_lora_example', - mediaType: 'image', - mediaSubtype: 'png', - tutorialUrl: - 'https://comfyanonymous.github.io/ComfyUI_examples/flux/#canny-and-depth' } ] }, @@ -121,35 +127,40 @@ export const CORE_TEMPLATES = [ { name: 'controlnet_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/controlnet/' }, { name: '2_pass_pose_worship', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/controlnet/#pose-controlnet' }, { name: 'depth_controlnet', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/controlnet/#t2i-adapter-vs-controlnets' }, { name: 'depth_t2i_adapter', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/controlnet/#t2i-adapter-vs-controlnets' }, { name: 'mixing_controlnets', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/controlnet/#mixing-controlnets' } @@ -161,30 +172,34 @@ export const CORE_TEMPLATES = [ type: 'image', templates: [ { - name: 'upscale', + name: 'hiresfix_latent_workflow', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'zoomHover', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/2_pass_txt2img/' }, { name: 'esrgan_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'zoomHover', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/upscale_models/' }, { name: 'hiresfix_esrgan_workflow', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'zoomHover', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/2_pass_txt2img/#non-latent-upscaling' }, { name: 'latent_upscale_different_prompt_model', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'zoomHover', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/2_pass_txt2img/#more-examples' } @@ -195,20 +210,6 @@ export const CORE_TEMPLATES = [ title: 'Video', type: 'video', templates: [ - { - name: 'image_to_video', - mediaType: 'image', - mediaSubtype: 'webp', - tutorialUrl: - 'https://comfyanonymous.github.io/ComfyUI_examples/video/#image-to-video' - }, - { - name: 'txt_to_image_to_video', - mediaType: 'image', - mediaSubtype: 'webp', - tutorialUrl: - 'https://comfyanonymous.github.io/ComfyUI_examples/video/#image-to-video' - }, { name: 'ltxv_image_to_video', mediaType: 'image', @@ -233,6 +234,20 @@ export const CORE_TEMPLATES = [ mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/hunyuan_video/' + }, + { + name: 'image_to_video', + mediaType: 'image', + mediaSubtype: 'webp', + tutorialUrl: + 'https://comfyanonymous.github.io/ComfyUI_examples/video/#image-to-video' + }, + { + name: 'txt_to_image_to_video', + mediaType: 'image', + mediaSubtype: 'webp', + tutorialUrl: + 'https://comfyanonymous.github.io/ComfyUI_examples/video/#image-to-video' } ] }, @@ -244,28 +259,31 @@ export const CORE_TEMPLATES = [ { name: 'sd3.5_simple_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sd3/#sd35' }, { name: 'sd3.5_large_canny_controlnet_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sd3/#sd35-controlnets' }, { name: 'sd3.5_large_depth', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sd3/#sd35-controlnets' }, { name: 'sd3.5_large_blur', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', + thumbnailVariant: 'hoverDissolve', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sd3/#sd35-controlnets' } @@ -279,33 +297,33 @@ export const CORE_TEMPLATES = [ { name: 'sdxl_simple_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sdxl/' }, { name: 'sdxl_refiner_prompt_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sdxl/' }, { name: 'sdxl_revision_text_prompts', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sdxl/#revision' }, { name: 'sdxl_revision_zero_positive', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sdxl/#revision' }, { name: 'sdxlturbo_example', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/sdturbo/' } @@ -319,21 +337,21 @@ export const CORE_TEMPLATES = [ { name: 'area_composition', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/area_composition/' }, { name: 'area_composition_reversed', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/area_composition/' }, { name: 'area_composition_square_area_for_subject', mediaType: 'image', - mediaSubtype: 'png', + mediaSubtype: 'webp', tutorialUrl: 'https://comfyanonymous.github.io/ComfyUI_examples/area_composition/#increasing-consistency-of-images-with-area-composition' } diff --git a/src/locales/en/main.json b/src/locales/en/main.json index efe2d75b6..28b783edb 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -393,9 +393,8 @@ "mixing_controlnets": "Mixing ControlNets" }, "Upscaling": { - "upscale": "Upscale", "esrgan_example": "ESRGAN", - "hiresfix_latent_workflow": "HiresFix Latent Workflow", + "hiresfix_latent_workflow": "Upscale", "hiresfix_esrgan_workflow": "HiresFix ESRGAN Workflow", "latent_upscale_different_prompt_model": "Latent Upscale Different Prompt Model" }, diff --git a/src/locales/fr/main.json b/src/locales/fr/main.json index 248de7866..3179633e0 100644 --- a/src/locales/fr/main.json +++ b/src/locales/fr/main.json @@ -820,8 +820,7 @@ "esrgan_example": "ESRGAN", "hiresfix_esrgan_workflow": "Flux de Travail ESRGAN HiresFix", "hiresfix_latent_workflow": "Flux de Travail Latent HiresFix", - "latent_upscale_different_prompt_model": "Modèle d'Agrandissement Latent Différent Prompt", - "upscale": "Agrandissement" + "latent_upscale_different_prompt_model": "Modèle d'Agrandissement Latent Différent Prompt" }, "Video": { "hunyuan_video_text_to_video": "Texte à Vidéo Hunyuan", diff --git a/src/locales/ja/main.json b/src/locales/ja/main.json index 4d0d2ae81..a258234b8 100644 --- a/src/locales/ja/main.json +++ b/src/locales/ja/main.json @@ -820,8 +820,7 @@ "esrgan_example": "ESRGAN", "hiresfix_esrgan_workflow": "HiresFix ESRGANワークフロー", "hiresfix_latent_workflow": "HiresFix Latentワークフロー", - "latent_upscale_different_prompt_model": "Latent Upscale異なるプロンプトモデル", - "upscale": "アップスケール" + "latent_upscale_different_prompt_model": "Latent Upscale異なるプロンプトモデル" }, "Video": { "hunyuan_video_text_to_video": "Hunyuanビデオテキストからビデオへ", diff --git a/src/locales/ko/main.json b/src/locales/ko/main.json index 769af2f03..9e90cb8b2 100644 --- a/src/locales/ko/main.json +++ b/src/locales/ko/main.json @@ -813,8 +813,7 @@ "esrgan_example": "ESRGAN", "hiresfix_esrgan_workflow": "HiresFix ESRGAN 워크플로우", "hiresfix_latent_workflow": "HiresFix Latent 워크플로우", - "latent_upscale_different_prompt_model": "Latent Upscale 다른 프롬프트 모델", - "upscale": "업스케일" + "latent_upscale_different_prompt_model": "Latent Upscale 다른 프롬프트 모델" }, "Video": { "hunyuan_video_text_to_video": "텍스트 -> 비디오 (Hunyuan Video)", diff --git a/src/locales/ru/main.json b/src/locales/ru/main.json index 81ed322cb..19425c3c9 100644 --- a/src/locales/ru/main.json +++ b/src/locales/ru/main.json @@ -820,8 +820,7 @@ "esrgan_example": "ESRGAN", "hiresfix_esrgan_workflow": "HiresFix ESRGAN Workflow", "hiresfix_latent_workflow": "HiresFix Latent Workflow", - "latent_upscale_different_prompt_model": "Latent Upscale Different Prompt Model", - "upscale": "Увеличение" + "latent_upscale_different_prompt_model": "Latent Upscale Different Prompt Model" }, "Video": { "hunyuan_video_text_to_video": "Hunyuan Video Text to Video", diff --git a/src/locales/zh/main.json b/src/locales/zh/main.json index 56a7d95aa..a542a8a47 100644 --- a/src/locales/zh/main.json +++ b/src/locales/zh/main.json @@ -820,8 +820,7 @@ "esrgan_example": "ESRGAN", "hiresfix_esrgan_workflow": "HiresFix ESRGAN工作流", "hiresfix_latent_workflow": "HiresFix潜在工作流", - "latent_upscale_different_prompt_model": "潜在升级不同提示模型", - "upscale": "升级" + "latent_upscale_different_prompt_model": "潜在升级不同提示模型" }, "Video": { "hunyuan_video_text_to_video": "Hunyuan视频文本到视频", diff --git a/src/types/workflowTemplateTypes.ts b/src/types/workflowTemplateTypes.ts index 50d9f1f02..06f247262 100644 --- a/src/types/workflowTemplateTypes.ts +++ b/src/types/workflowTemplateTypes.ts @@ -3,6 +3,7 @@ export interface TemplateInfo { tutorialUrl?: string mediaType: string mediaSubtype: string + thumbnailVariant?: string } export interface WorkflowTemplates {