comfyui-workflow-templates
ComfyUI workflow templates package
Description
workflow_templates
This repo hosts the official ComfyUI workflow templates and subgraph blueprints.
Overview
| Content | Description | Location |
|---|---|---|
| Workflow Templates | Full standalone workflows for the template picker | templates/, packages/ |
| Subgraph Blueprints | Reusable node components that appear in the node palette | blueprints/, packages/blueprints/ |
| Template Site | Astro SSG that showcases templates at templates.comfy.org | site/ |
The repository uses a package-per-media structure for Python distribution:
packages/core– manifest + loader helpers shipped ascomfyui-workflow-templates-corepackages/media_*– workflow template JSON + preview assets for each media typepackages/blueprints– subgraph blueprint JSON + preview assets ascomfyui-subgraph-blueprintspackages/metaand the rootpyproject.toml– thecomfyui-workflow-templatesmeta package
Template Site (site/)
The site/ directory contains an independent Astro static site that provides a browsable, searchable interface for all workflow templates. It includes AI-generated descriptions, i18n support (11 languages), SEO optimization, and automated content pipelines. See site/AGENTS.md for full documentation.
cd site
pnpm install
pnpm run dev # Start dev server at localhost:4321
pnpm run build # Production build (runs prebuild pipeline automatically)
Quick Start
| Task | Commands |
|---|---|
| Add a workflow template | Edit templates/, bundles.json, then python scripts/sync_bundles.py |
| Add a subgraph blueprint | Edit blueprints/, blueprints_bundles.json, then python scripts/sync_blueprints.py |
| Import external blueprints | Copy JSONs to blueprints/, then python scripts/import_blueprints.py |
Adding New Templates
I will demonstrate how to add a new template by walking through the process of adding the Wan text to video template.
1 — Find Templates Folder
Set up ComfyUI_frontend dev environment. In the ComfyUI_frontend/.env file, add the line DISABLE_TEMPLATES_PROXY=true then start the dev server with npm run dev.
Copy the templates folder from this repository to the ComfyUI_frontend/public folder.
2 — Obtain Workflow
Either
- Create the workflow and export using
Save=>Export - Use an existing workflow. To extract the workflow json from an image, you can use this tool: https://comfyui-embedded-workflow-editor.vercel.app/
I will get my workflow from the ComfyUI_examples Wan 2.1 page. To get the workflow from the video on that page, I'll drag the video into comfyui-embedded-workflow-editor. Then I'll copy and paste it into a new json file on my computer.
[!IMPORTANT]
Make sure you start ComfyUI with
--disable-all-custom-nodeswhen creating the workflow file (to prevent custom extensions adding metadata into the saved workflow file)
3 — Obtain Thumbnails
Ideally, the thumbnail is simply the output produced by the workflow on first execution. As an example, see the output of the Mixing ControlNets template:
![]()
For my Wan 2.1 template, I'll just use the webp video I got the workflow from.
4 — Choose Thumbnail Type
Choose the content type and hover effect (optional) for your thumbnail:
| Content Types | Hover Effects |
|---|---|
[!WARNING]
For video thumbnails, thumbnails need to be converted to webp format first
Since my Wan 2.1 thumbnail is already an animated video, I'll use a video thumbnail but choose not to add an effect.
5 — Compress Assets
Attempt to compress the assets. Since the thumbnails will never be taking up a large portion of the screen, it is acceptable to lower their size. It's also good to convert them to a space-efficient file format like webp or jpeg, applying a lossy compression algorithm (e.g., convert at 65% quality).
EzGif has free tools for changing resolution, compressing, and converting file types. Use whatever tool you are comfortable with.
[!TIP]
Convert to webp first, then resize to a smaller resolution. You can maintain high quality and still get near 95% reduction if e.g., converting from png.
6 — Rename and Move Files
Give the workflow a filename that has no spaces, dots, or special characters. Then rename the thumbnail file(s) to match, but with a counter suffix.
your_template_name.json
your_template_name-1.png
your_template_name-2.png
I'll name the Wan 2.1 template as text_to_video_wan.json. So my files will be:
text_to_video_wan.json
text_to_video_wan-1.webp
Then move the renamed files to your templates folder.
7 — Assign Bundle & Sync Assets
Each template lives in one bundle (media-image, media-video, etc.). Update
bundles.json with the template ID so the correct media package ships it.
After editing templates/ or bundles.json, regenerate the manifest and copy assets into
the package directories:
python scripts/sync_bundles.py
# or via Nx
npm run sync
This step must be run before committing; CI will fail if the manifest/bundles are out of sync.
8 — Add Entry to index.json
There's an index.json file in the templates folder which is where template configurations are set. You will need to add your template to this file, using the fields outlined below:

If your template doesn't fit into an existing category, you can add a new one:
{
"moduleName": "default",
"title": "Basics",
"type": "image",
"templates": [
{
"name": "default",
"mediaType": "image",
"mediaSubtype": "webp",
"description": "Generate images from text descriptions."
},
]
},
+ {
+ "moduleName": "default",
+ "title": "Your New Category"s Name",
+ "type": "video",
+ "templates": [
+ {
+ "name": "your_template_name",
+ "description": "A description of your template workflow",
+ "mediaType": "image",
+ "mediaSubtype": "webp",
+ "description": "Your template"s description.",
+ "tutorialUrl": "https://link-to-some-helpful-docs-if-they-exist.como"
+ "thumbnailVariant": "zoomHover",
+ },
+ ]
+ }
The Wan 2.1 template I'm adding already fits into the "Video" category, so I'll just add it there:
{
moduleName: "default",
title: "Video",
type: "video",
templates: [
{
name: "ltxv_text_to_video",
mediaType: "image",
mediaSubtype: "webp",
tutorialUrl: "https://comfyanonymous.github.io/ComfyUI_examples/ltxv/"
},
+ {
+ "name": "text_to_video_wan",
+ "description": "Quickly Generate videos from text descriptions.",
+ "mediaType": "image",
+ "mediaSubtype": "webp",
+ "tutorialUrl": "https://comfyanonymous.github.io/ComfyUI_examples/wan/"
+ },
]
},
The thumbnailVariant field is where you add the choice of thumbnail variant.
Now you can start ComfyUI (or refresh browser if already running) and test that your template works.
[!WARNING]
Make sure to use double-quotes
"instead of single-quotes'when adding things to json files
9 — Embed Models
Now we need to embed metadata for any models the template workflow uses. This way, the user can download and run the workflow without ever leaving ComfyUI.
For instance, my Wan 2.1 template requires 3 models:
- umt5_xxl_fp8_e4m3fn_scaled text encoder
- wan_2.1_vae VAE
- wan2.1_t2v_1.3B_bf16 model

To add them to the workflow json, find each associated node and add the metadata to their properties:
{
"id": 39,
"type": "VAELoader",
"pos": [866.3932495117188, 499.18597412109375],
"size": [306.36004638671875, 58],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [76],
"slot_index": 0
}