Skip to content

New Templates#938

Merged
comfyui-wiki merged 24 commits into
Comfy-Org:mainfrom
comfyui-wiki:template-update-20260612-131543
Jun 15, 2026
Merged

New Templates#938
comfyui-wiki merged 24 commits into
Comfy-Org:mainfrom
comfyui-wiki:template-update-20260612-131543

Conversation

@comfyui-wiki

@comfyui-wiki comfyui-wiki commented Jun 12, 2026

Copy link
Copy Markdown
Member

Changes Summary

✨ New Templates (1)

  • utility_depth_anything3_image_depth_estimation

Details

This PR contains updates to the ComfyUI workflow templates.


📝 Created via ComfyUI Template Manager
Branch: template-update-20260612-131543
Repository: comfyui-wiki/workflow_templates


📊 View changes in Template Manager: http://localhost:3000/?pr=938

@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

🔤 Spellcheck Results

Check Status
templates/index.json (titles & descriptions) ✅ No issues found
Workflow JSON notes (MarkdownNote / Note nodes) ✅ No issues found

All spellchecks passed! 🎉

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds three new workflow templates: two Depth Anything 3 Utility templates (image and video depth estimation with embedded DA3 subgraphs) and one Bernini-R video editing template. All are registered in templates/index.json, localized across multiple languages, and enrolled in bundles.json — workflow templates really depth into the stack, and with Bernini-R on board, we're ready to edit like there's no tomorrow (literally).

Changes

Depth Anything 3 Utility Templates (image + video)

Layer / File(s) Summary
Template registration in templates/index.json
templates/index.json
Registers utility_depth_anything3_image_depth_estimation and utility_depth_anything3_video_depth_estimation with compareSlider thumbnail variant, Depth Anything \bv3 model metadata, openSource flag, and usage fields.
Image depth estimation workflow
templates/utility_depth_anything3_image_depth_estimation.json
Complete ComfyUI workflow: LoadImage → subgraph wrapper with embedded DA3 subgraph (LoadDA3Model, DA3Inference, DA3Render) → PreviewImage and Compare nodes. Includes Markdown usage notes, top-level wiring, and workflow-level config/metadata (renderer versions, VHS preview/keep-intermediate flags).
Video depth estimation workflow
templates/utility_depth_anything3_video_depth_estimation.json
Complete ComfyUI workflow: LoadVideo → subgraph wrapper with embedded DA3 subgraph (GetVideoComponents, per-frame DA3Inference/DA3Render) → CreateVideo/SaveVideo (depth video output to video/depth_anything3 directory). Includes Markdown notes, top-level wiring, and workflow-level rendering/front-end/VHS metadata.
Localization and bundle registration
scripts/i18n.json, bundles.json
Adds i18n completeness blocks and localized title/description objects (pt-BR, fa, and other locales) for both utilities. Appends both template IDs to the media-other bundle in bundles.json immediately after api_bria_video_green_screen.

Bernini-R Video Editing Template

Layer / File(s) Summary
Template registration (main and localized indices)
templates/index.json, templates/index.{ar,es,fa,fr,ja,ko,pt-BR,ru,tr,zh-TW,zh}.json
Registers video_bernini_r_video_editing ("Bernini-R: Video Editing") across the main and all eleven localized template index files. Each entry includes metadata (title/description, tags, Bernini-R model, openSource: true), requiresCustomNodes: ["was-node-suite-comfyui"] declaration, and an io stub with one image input (example.png) and empty outputs array.
Bundle registration
bundles.json
Appends video_bernini_r_video_editing to the media-video bundle list immediately after api_grok_imagine_video_1_5.
🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
✨ Simplify code
  • Create PR with simplified code

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/i18n.json`:
- Around line 4557-4574: The i18n entry
"utility_depth_anything3_image_depth_estimation" has a stale
"missing_fields"/"missing_languages" block while the locale sub-blocks for
zh/zh-TW/ja/ko/es/fr/ru/tr/ar/pt-BR/fa already include title/description
placeholders; either remove the entire "missing_fields" and "missing_languages"
properties for that key or replace the English placeholder strings under each
locale with proper translations, ensuring title and description are present and
accurate for each listed language so the metadata reflects reality.

In `@templates/index.json`:
- Line 14125: The model entry contains an escaped backspace sequence "Depth
Anything \bv3" which becomes a control char in JSON and breaks matching; update
the models array entry to a plain, literal model name (e.g. replace "Depth
Anything \bv3" with "Depth Anything bv3" or the correct intended name) so the
"models" value is a normal string and exact matching/filtering will work.

In `@templates/utility_depth_anything3_image_depth_estimation.json`:
- Around line 571-636: The validator is failing because the LoadDA3Model node
(id 82) models metadata lacks required SHA256 hashes; update the
properties.models array for the LoadDA3Model node to include a "sha256" field
for each model entry (depth_anything_3_small.safetensors,
depth_anything_3_base.safetensors, depth_anything_3_mono_large.safetensors,
depth_anything_3_metric_large.safetensors) with their correct checksum values so
the pipeline validator accepts them, and then re-run validation (leave
widgets_values as the selected default unless the validator requires enumerating
options).
- Around line 609-630: Each model object in properties.models[] for
Depth-Anything-3 is missing the required sha256 field; update the four model
entries (depth_anything_3_small.safetensors, depth_anything_3_base.safetensors,
depth_anything_3_mono_large.safetensors,
depth_anything_3_metric_large.safetensors) to include their respective SHA256
values (9c0a53d157c5b315d4c82908a43d93eeaa3a9ac3de9d15c2b4242ef46b5508ad,
418c0d2ea857e2d1215fa51baa46833f499a62eb2400ec63d337aa20d326414f,
9b44eda5bedba5b4e125686fdb79d1db309c1b9785277576eb930f885b008f96,
b6eac00c060931fb15a97c1ba77d2e49d866b83ff7da631289279b3c1c0c99c8) so validation
can pass; after adding these sha256 fields to the model objects, run the schema
validation and, if it still fails, inspect widget_values/model-list wiring.
- Around line 1-742: The LoadDA3Model node's model entries are missing required
SHA256 hashes and the template lacks an embedded thumbnail reference; update the
properties.models array inside the LoadDA3Model node (identify by type
"LoadDA3Model" and property path properties.models) to add a "sha256" field for
each model object with the correct hash for the corresponding URL, and add a
thumbnail metadata entry that points to
"utility_depth_anything3_image_depth_estimation-1.webp" (place the thumbnail
reference under the template metadata—e.g., add a "thumbnail" or
"extra.thumbnail" field at the JSON root or inside
definitions.subgraphs[0].properties—so the template properly references the
bundled {template}-1.webp file).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2fc47a8c-ecce-44e2-b06a-9acb4a65025b

📥 Commits

Reviewing files that changed from the base of the PR and between 064febf and eed7f02.

📒 Files selected for processing (6)
  • bundles.json
  • scripts/i18n.json
  • templates/index.json
  • templates/utility_depth_anything3_image_depth_estimation-1.webp
  • templates/utility_depth_anything3_image_depth_estimation-2.webp
  • templates/utility_depth_anything3_image_depth_estimation.json

Comment thread scripts/i18n.json
Comment thread templates/index.json
"mediaSubtype": "webp",
"thumbnailVariant": "compareSlider",
"tags": ["Depth Map"],
"models": ["Depth Anything \bv3"],

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Fix escaped backspace in model name (\b) before it breaks matching.

Line 14125 uses ["Depth Anything \bv3"]; in JSON, \b becomes a backspace character, so the model string is corrupted and may fail exact model matching/filtering. Use a plain string instead.

Suggested fix
-        "models": ["Depth Anything \bv3"],
+        "models": ["Depth Anything v3"],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"models": ["Depth Anything \bv3"],
"models": ["Depth Anything v3"],
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/index.json` at line 14125, The model entry contains an escaped
backspace sequence "Depth Anything \bv3" which becomes a control char in JSON
and breaks matching; update the models array entry to a plain, literal model
name (e.g. replace "Depth Anything \bv3" with "Depth Anything bv3" or the
correct intended name) so the "models" value is a normal string and exact
matching/filtering will work.

Comment on lines +1 to +742
{
"id": "b2d4f6a8-3c5e-7f9b-1d3f-5a7b9c1d3e5f",
"revision": 2,
"last_node_id": 85,
"last_link_id": 109,
"nodes": [
{
"id": 6,
"type": "PreviewImage",
"pos": [
780,
30
],
"size": [
400,
400
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 21
}
],
"outputs": [],
"title": "Depth Preview (one frame per view)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "PreviewImage"
},
"widgets_values": []
},
{
"id": 14,
"type": "605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3",
"pos": [
340,
30
],
"size": [
400,
360
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "image",
"type": "IMAGE",
"link": 108
},
{
"label": "output_type",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"widget": {
"name": "output"
},
"link": null
},
{
"label": "output_normalization",
"name": "output.normalization",
"type": "COMBO",
"widget": {
"name": "output.normalization"
},
"link": null
},
{
"label": "apply_sky_clip",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"widget": {
"name": "output.apply_sky_clip"
},
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
21,
105
]
}
],
"properties": {
"proxyWidgets": [
[
"5",
"resolution"
],
[
"5",
"resize_method"
],
[
"7",
"output"
],
[
"7",
"output.normalization"
],
[
"7",
"output.apply_sky_clip"
],
[
"82",
"model_name"
]
],
"cnr_id": "comfy-core",
"ver": "0.24.0"
},
"widgets_values": []
},
{
"id": 80,
"type": "ImageCompare",
"pos": [
1240,
30
],
"size": [
440,
390
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "image_a",
"shape": 7,
"type": "IMAGE",
"link": 109
},
{
"name": "image_b",
"shape": 7,
"type": "IMAGE",
"link": 105
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "ImageCompare"
},
"widgets_values": []
},
{
"id": 83,
"type": "MarkdownNote",
"pos": [
-1190,
30
],
"size": [
510,
818.953125
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Model Link",
"properties": {},
"widgets_values": [
"Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Link (for Local Users)\n\n**geometry_estimation**\n\n- [depth_anything_3_small.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_small.safetensors)\n- [depth_anything_3_base.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_base.safetensors)\n- [depth_anything_3_mono_large.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors)\n- [depth_anything_3_metric_large.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_metric_large.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ └── 📂 geometry_estimation/\n│ ├── depth_anything_3_small.safetensors\n│ ├── depth_anything_3_base.safetensors\n│ ├── depth_anything_3_mono_large.safetensors\n│ └── depth_anything_3_metric_large.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
],
"color": "#222",
"bgcolor": "#000"
},
{
"id": 84,
"type": "MarkdownNote",
"pos": [
-640,
30
],
"size": [
550,
820
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "About: Depth Anything 3",
"properties": {},
"widgets_values": [
"## About Depth Anything 3\n\n[Depth Anything 3 (DA3)](https://github.com/ByteDance-Seed/Depth-Anything-3) is a vision transformer from ByteDance Seed that recovers spatially consistent geometry from arbitrary visual inputs, with or without known camera poses. A single plain DINO encoder and unified depth-ray representation let one model family cover monocular depth, multi-view depth, camera pose estimation, and 3D reconstruction.\n\n### What this workflow does\n\nUpload one image and run **Image Depth Estimation (Depth Anything 3)** to produce a depth map. The result is shown in **Depth Preview**, with a side-by-side **ImageCompare** against the source image.\n\n### Model variants\n\n- **depth_anything_3_mono_large** (default): High-quality relative monocular depth with sky segmentation. Best starting point for single-image depth maps.\n- **depth_anything_3_metric_large**: Metric depth in real-world scale (meters). Use `raw` normalization in Render to preserve scale.\n- **depth_anything_3_base**: Any-view foundation model (0.12B). Adds confidence maps and supports multi-view mode.\n- **depth_anything_3_small**: Fastest any-view model (0.08B). Lowest VRAM; supports confidence and multi-view.\n\n\n### Learn more\n\n- Paper: [arXiv:2511.10647](https://arxiv.org/abs/2511.10647)\n- Original repo: [ByteDance-Seed/Depth-Anything-3](https://github.com/ByteDance-Seed/Depth-Anything-3)\n- ComfyUI weights: [Comfy-Org/Depth-Anything-3](https://huggingface.co/Comfy-Org/Depth-Anything-3)\n"
],
"color": "#222",
"bgcolor": "#000"
},
{
"id": 85,
"type": "LoadImage",
"pos": [
-20,
30
],
"size": [
282.796875,
364
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
108,
109
]
},
{
"name": "MASK",
"type": "MASK",
"links": null
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"retro_futuristic_home.png",
"image"
]
}
],
"links": [
[
21,
14,
0,
6,
0,
"IMAGE"
],
[
105,
14,
0,
80,
1,
"IMAGE"
],
[
108,
85,
0,
14,
0,
"IMAGE"
],
[
109,
85,
0,
80,
0,
"IMAGE"
]
],
"groups": [],
"definitions": {
"subgraphs": [
{
"id": "605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3",
"version": 1,
"state": {
"lastGroupId": 4,
"lastNodeId": 85,
"lastLinkId": 109,
"lastRerouteId": 0
},
"revision": 2,
"config": {},
"name": "Image Depth Estimation (Depth Anything 3)",
"inputNode": {
"id": -10,
"bounding": [
400,
90,
166.998046875,
188
]
},
"outputNode": {
"id": -20,
"bounding": [
1250,
146,
128,
68
]
},
"inputs": [
{
"id": "43cf3118-495a-487d-8eb3-a17c7e92f64f",
"name": "image",
"type": "IMAGE",
"linkIds": [
19
],
"localized_name": "image",
"pos": [
542.998046875,
114
]
},
{
"id": "1089a0a1-6db1-45a8-84b0-0bfdc2ed920a",
"name": "resolution",
"type": "INT",
"linkIds": [
22
],
"pos": [
542.998046875,
134
]
},
{
"id": "25fb64ac-26d5-466d-995b-6d51b9afa2c4",
"name": "resize_method",
"type": "COMBO",
"linkIds": [
23
],
"pos": [
542.998046875,
154
]
},
{
"id": "8acafb7c-6c8b-46b3-9d74-c563498a3af1",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"linkIds": [
24
],
"label": "output_type",
"pos": [
542.998046875,
174
]
},
{
"id": "1da5009b-4648-43e8-a257-16426630cf22",
"name": "output.normalization",
"type": "COMBO",
"linkIds": [
25
],
"label": "output_normalization",
"pos": [
542.998046875,
194
]
},
{
"id": "fd7edb33-5fb1-4538-a411-26e5039a9321",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"linkIds": [
26
],
"label": "apply_sky_clip",
"pos": [
542.998046875,
214
]
},
{
"id": "b5be4c8a-b833-4f1e-8c94-3ed1dd722190",
"name": "model_name",
"type": "COMBO",
"linkIds": [
106
],
"pos": [
542.998046875,
234
]
}
],
"outputs": [
{
"id": "478ab537-63bc-4d74-a9f0-c975f550880f",
"name": "IMAGE",
"type": "IMAGE",
"linkIds": [
7
],
"localized_name": "IMAGE",
"pos": [
1274,
170
]
}
],
"widgets": [],
"nodes": [
{
"id": 7,
"type": "DA3Render",
"pos": [
800,
310
],
"size": [
380,
126
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"localized_name": "da3_geometry",
"name": "da3_geometry",
"type": "DA3_GEOMETRY",
"link": 12
},
{
"localized_name": "output",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"widget": {
"name": "output"
},
"link": 24
},
{
"localized_name": "output.normalization",
"name": "output.normalization",
"type": "COMBO",
"widget": {
"name": "output.normalization"
},
"link": 25
},
{
"localized_name": "output.apply_sky_clip",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"widget": {
"name": "output.apply_sky_clip"
},
"link": 26
},
{
"name": "geometry",
"type": "DA3_GEOMETRY",
"link": null
}
],
"outputs": [
{
"localized_name": "IMAGE",
"name": "IMAGE",
"type": "IMAGE",
"slot_index": 0,
"links": [
7
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "DA3Render"
},
"widgets_values": [
"depth",
"v2_style",
false
]
},
{
"id": 5,
"type": "DA3Inference",
"pos": [
800,
50
],
"size": [
390,
130
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"localized_name": "da3_model",
"name": "da3_model",
"type": "DA3_MODEL",
"link": 107
},
{
"localized_name": "image",
"name": "image",
"type": "IMAGE",
"link": 19
},
{
"localized_name": "resolution",
"name": "resolution",
"type": "INT",
"widget": {
"name": "resolution"
},
"link": 22
},
{
"localized_name": "resize_method",
"name": "resize_method",
"type": "COMBO",
"widget": {
"name": "resize_method"
},
"link": 23
}
],
"outputs": [
{
"localized_name": "da3_geometry",
"name": "da3_geometry",
"type": "DA3_GEOMETRY",
"slot_index": 0,
"links": [
12
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "DA3Inference"
},
"widgets_values": [
504,
"upper_bound_resize",
"mono"
]
},
{
"id": 82,
"type": "LoadDA3Model",
"pos": [
810,
-160
],
"size": [
400,
140
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"localized_name": "model_name",
"name": "model_name",
"type": "COMBO",
"widget": {
"name": "model_name"
},
"link": 106
}
],
"outputs": [
{
"localized_name": "DA3_MODEL",
"name": "DA3_MODEL",
"type": "DA3_MODEL",
"links": [
107
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "LoadDA3Model",
"models": [
{
"name": "depth_anything_3_small.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_small.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_base.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_base.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_mono_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_metric_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_metric_large.safetensors",
"directory": "geometry_estimation"
}
]
},
"widgets_values": [
"depth_anything_3_mono_large.safetensors",
"default"
]
}
],
"groups": [],
"links": [
{
"id": 12,
"origin_id": 5,
"origin_slot": 0,
"target_id": 7,
"target_slot": 0,
"type": "DA3_GEOMETRY"
},
{
"id": 19,
"origin_id": -10,
"origin_slot": 0,
"target_id": 5,
"target_slot": 1,
"type": "IMAGE"
},
{
"id": 7,
"origin_id": 7,
"origin_slot": 0,
"target_id": -20,
"target_slot": 0,
"type": "IMAGE"
},
{
"id": 22,
"origin_id": -10,
"origin_slot": 1,
"target_id": 5,
"target_slot": 2,
"type": "INT"
},
{
"id": 23,
"origin_id": -10,
"origin_slot": 2,
"target_id": 5,
"target_slot": 3,
"type": "COMBO"
},
{
"id": 24,
"origin_id": -10,
"origin_slot": 3,
"target_id": 7,
"target_slot": 1,
"type": "COMFY_DYNAMICCOMBO_V3"
},
{
"id": 25,
"origin_id": -10,
"origin_slot": 4,
"target_id": 7,
"target_slot": 2,
"type": "COMBO"
},
{
"id": 26,
"origin_id": -10,
"origin_slot": 5,
"target_id": 7,
"target_slot": 3,
"type": "BOOLEAN"
},
{
"id": 106,
"origin_id": -10,
"origin_slot": 6,
"target_id": 82,
"target_slot": 0,
"type": "COMBO"
},
{
"id": 107,
"origin_id": 82,
"origin_slot": 0,
"target_id": 5,
"target_slot": 0,
"type": "DA3_MODEL"
}
],
"extra": {}
}
]
},
"config": {},
"extra": {
"ds": {
"scale": 0.48791082929996415,
"offset": [
1502.5449848048947,
716.678231284096
]
},
"frontendVersion": "1.45.15",
"workflowRendererVersion": "LG",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
} No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if thumbnail file exists in the templates directory

echo "Checking for thumbnail file..."
fd -t f "utility_depth_anything3_image_depth_estimation.*\.webp" templates/

Repository: Comfy-Org/workflow_templates

Length of output: 231


Fix model metadata compliance in templates/utility_depth_anything3_image_depth_estimation.json

  • LoadDA3Model properties.models[] entries include name, url, and directory, but no sha256 fields (guidelines require embedded download URLs and SHA256 hashes).
  • The snippet does not show any embedded thumbnail metadata referencing {template}-1.webp (e.g., utility_depth_anything3_image_depth_estimation-1.webp), even though thumbnail files appear to exist in templates/.
🧰 Tools
🪛 GitHub Actions: Validate Templates / 0_validate.txt

[error] 1-1: Validation error: Model 'depth_anything_3_small.safetensors' in node 82 (LoadDA3Model) properties but not in widget_values (subgraph 605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3).

🪛 GitHub Actions: Validate Templates / validate

[error] 1-1: Template validation error: in subgraph 605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3, model 'depth_anything_3_small.safetensors' in node 82 (LoadDA3Model) properties but not in widget_values.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_image_depth_estimation.json` around lines 1
- 742, The LoadDA3Model node's model entries are missing required SHA256 hashes
and the template lacks an embedded thumbnail reference; update the
properties.models array inside the LoadDA3Model node (identify by type
"LoadDA3Model" and property path properties.models) to add a "sha256" field for
each model object with the correct hash for the corresponding URL, and add a
thumbnail metadata entry that points to
"utility_depth_anything3_image_depth_estimation-1.webp" (place the thumbnail
reference under the template metadata—e.g., add a "thumbnail" or
"extra.thumbnail" field at the JSON root or inside
definitions.subgraphs[0].properties—so the template properly references the
bundled {template}-1.webp file).

Source: Coding guidelines

Comment on lines +571 to +636
"id": 82,
"type": "LoadDA3Model",
"pos": [
810,
-160
],
"size": [
400,
140
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"localized_name": "model_name",
"name": "model_name",
"type": "COMBO",
"widget": {
"name": "model_name"
},
"link": 106
}
],
"outputs": [
{
"localized_name": "DA3_MODEL",
"name": "DA3_MODEL",
"type": "DA3_MODEL",
"links": [
107
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "LoadDA3Model",
"models": [
{
"name": "depth_anything_3_small.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_small.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_base.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_base.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_mono_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_metric_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_metric_large.safetensors",
"directory": "geometry_estimation"
}
]
},
"widgets_values": [
"depth_anything_3_mono_large.safetensors",
"default"
]
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pipeline validation failure: models property-widget mismatch merit.

The pipeline reports: "Model 'depth_anything_3_small.safetensors' in node 82 (LoadDA3Model) properties but not in widget_values."

The widgets_values array (lines 632-635) contains only the default selected model (depth_anything_3_mono_large.safetensors), while properties.models[] defines all four available model options. This validation error may indicate:

  1. A structural requirement that the validation script expects (possibly related to the missing SHA256 hashes flagged in the previous comment)
  2. An incomplete model metadata entry causing validation to fail
  3. A mismatch in how the LoadDA3Model node is structured

Resolving the missing SHA256 hashes should address this pipeline failure. If the error persists after adding hashes, further investigation of the validation script's requirements will be needed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_image_depth_estimation.json` around lines
571 - 636, The validator is failing because the LoadDA3Model node (id 82) models
metadata lacks required SHA256 hashes; update the properties.models array for
the LoadDA3Model node to include a "sha256" field for each model entry
(depth_anything_3_small.safetensors, depth_anything_3_base.safetensors,
depth_anything_3_mono_large.safetensors,
depth_anything_3_metric_large.safetensors) with their correct checksum values so
the pipeline validator accepts them, and then re-run validation (leave
widgets_values as the selected default unless the validator requires enumerating
options).

Source: Pipeline failures

Comment on lines +609 to +630
"models": [
{
"name": "depth_anything_3_small.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_small.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_base.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_base.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_mono_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
"directory": "geometry_estimation"
},
{
"name": "depth_anything_3_metric_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_metric_large.safetensors",
"directory": "geometry_estimation"
}
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Retrieve SHA256 hashes from the Hugging Face repository for each model

echo "Fetching SHA256 hashes for Depth Anything 3 models..."
echo ""

models=(
  "depth_anything_3_small.safetensors"
  "depth_anything_3_base.safetensors"
  "depth_anything_3_mono_large.safetensors"
  "depth_anything_3_metric_large.safetensors"
)

for model in "${models[@]}"; do
  echo "Model: $model"
  # Try to fetch the hash from HuggingFace's LFS pointer or metadata
  curl -sL "https://huggingface.co/Comfy-Org/Depth-Anything-3/raw/main/geometry_estimation/$model" | head -n 20 | grep -i "sha256" || echo "  (Hash not found in LFS pointer)"
  echo ""
done

Repository: Comfy-Org/workflow_templates

Length of output: 614


Fix missing SHA256 hashes in properties.models[] for Depth-Anything-3 (hash it or crash—no capes required!)

templates/utility_depth_anything3_image_depth_estimation.json (lines 609-630): each properties.models[] entry is missing the required sha256. Add these SHA256 values to the corresponding model objects:

  • depth_anything_3_small.safetensors: 9c0a53d157c5b315d4c82908a43d93eeaa3a9ac3de9d15c2b4242ef46b5508ad
  • depth_anything_3_base.safetensors: 418c0d2ea857e2d1215fa51baa46833f499a62eb2400ec63d337aa20d326414f
  • depth_anything_3_mono_large.safetensors: 9b44eda5bedba5b4e125686fdb79d1db309c1b9785277576eb930f885b008f96
  • depth_anything_3_metric_large.safetensors: b6eac00c060931fb15a97c1ba77d2e49d866b83ff7da631289279b3c1c0c99c8

If validation still fails afterward, re-check the widget_values/model list wiring (but hashes are the must-fix first).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_image_depth_estimation.json` around lines
609 - 630, Each model object in properties.models[] for Depth-Anything-3 is
missing the required sha256 field; update the four model entries
(depth_anything_3_small.safetensors, depth_anything_3_base.safetensors,
depth_anything_3_mono_large.safetensors,
depth_anything_3_metric_large.safetensors) to include their respective SHA256
values (9c0a53d157c5b315d4c82908a43d93eeaa3a9ac3de9d15c2b4242ef46b5508ad,
418c0d2ea857e2d1215fa51baa46833f499a62eb2400ec63d337aa20d326414f,
9b44eda5bedba5b4e125686fdb79d1db309c1b9785277576eb930f885b008f96,
b6eac00c060931fb15a97c1ba77d2e49d866b83ff7da631289279b3c1c0c99c8) so validation
can pass; after adding these sha256 fields to the model objects, run the schema
validation and, if it still fails, inspect widget_values/model-list wiring.

Source: Coding guidelines

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

♻️ Duplicate comments (1)
scripts/i18n.json (1)

4576-4593: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Missing-fields metadata doesn't match the locale data that's been set.

The missing_fields and missing_languages block claims title and description are missing for zh/zh-TW/ja/ko/es/fr/ru/tr/ar/pt-BR/fa, but hunk 2 below (lines 20885–20913) provides those exact keys for every listed language—they're just English placeholder strings rather than real translations. This duplicates the concern raised for the image variant: either remove the stale missing_* properties or replace the English placeholders with actual translations so the metadata reflects reality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/i18n.json` around lines 4576 - 4593, The metadata for key
"utility_depth_anything3_video_depth_estimation" incorrectly lists title and
description as missing for several locales while those keys exist as English
placeholders; either remove the stale missing_fields/missing_languages entries
or replace the placeholder title/description values for the listed locales (zh,
zh-TW, ja, ko, es, fr, ru, tr, ar, pt-BR, fa) with proper translations so the
metadata matches the actual locale content; update the JSON so missing_fields
only lists truly absent keys and missing_languages only lists locales that lack
non-placeholder translations.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/i18n.json`:
- Around line 20886-20913: The non-English locale values under the JSON keys
"title" and "description" (locale codes "zh", "zh-TW", "ja", "ko", "es", "fr",
"ru", "tr", "ar", "pt-BR", "fa") are English placeholders and will be ignored by
the sync logic; replace each placeholder with actual translated text (or remove
the locale entry so the sync process can populate it) ensuring each non-English
value differs from the "en" master; update the "title" and "description" entries
accordingly so the sync_data.py comparison detects and preserves real
translations.
- Line 20901: The "en" string currently says "Upload 1 image..." but this
template is for video depth estimation; update the English description string in
scripts/i18n.json (the "en" value shown in the diff) to instruct users to upload
a video or multiple frames (e.g., "Upload a video or sequence of frames to
generate depth maps for video depth estimation...") and clarify the output is a
depth-processed video or per-frame depth images ready for downstream workflows.
- Line 20898: The repo has partial Farsi locale entries (e.g., the "fa" key for
utility_depth_anything3_video_depth_estimation in scripts/i18n.json and an
index.fa.json generated by scripts/locale_index_files.py) but the official site
locale lists in site/astro.config.mjs and site/src/i18n/config.ts don’t include
"fa"; choose one: either add "fa" to the supported locales arrays in
site/astro.config.mjs and site/src/i18n/config.ts (ensuring any build tooling or
locale whitelist accepts it) or remove all "fa" keys/generated files (e.g.,
remove the "fa" entries for utility_depth_anything3_video_depth_estimation in
scripts/i18n.json and prevent generating index.fa.json in
scripts/locale_index_files.py) so the i18n source matches the site’s official
locale list.

In `@templates/index.json`:
- Around line 14137-14157: The metadata claims an image input/output but the IO
block uses a LoadVideo node (nodeId 87, nodeType "LoadVideo", file
"empty_room_assembly.mp4"), so update the template to be consistent: either
change the description/mediaType/mediaSubtype fields (and any size/vram if
needed) to indicate a video workflow (e.g., "Upload 1 video..." and mediaType
"video") or replace the LoadVideo input with the correct image loader (e.g., a
LoadImage node) and adjust file/sample info accordingly; ensure the
"description", "mediaType", "mediaSubtype", and the IO input node (nodeType for
nodeId 87) all match the chosen media type.

In `@templates/utility_depth_anything3_video_depth_estimation.json`:
- Around line 1-903: The Markdown note titled "About: Depth Anything 3 Video"
(node id 84) currently tells users to "Upload 1 image" but the workflow uses a
LoadVideo node (node id 87) and expects a video input; update the Markdown text
to say "Upload 1 video" (and any nearby phrasing referencing an image input) to
match the workflow, and also fix the LoadVideo node's widget value (node id 87,
widgets_values second entry) from "image" to "video" so UI hints and node
settings are consistent.
- Around line 1-903: The template is missing thumbnail wiring, model SHA256s,
and has wrong i18n text: add a reference to
utility_depth_anything3_video_depth_estimation-1.webp in the template metadata
so the UI shows the thumbnail breadcrumbs, add a sha256 field to each entry in
the LoadDA3Model properties.models array (node id 82 / "LoadDA3Model") with the
correct SHA256 checksums for those safetensors, and update the i18n string in
scripts/i18n.json that currently reads "Upload 1 image…" to a video-appropriate
phrase like "Upload a video…" (or similar) so the description matches
LoadVideo/CreateVideo usage. Ensure you modify the template's top-level metadata
section the UI reads for thumbnails and the specific properties.models objects
rather than adding new duplicate model entries.
- Around line 706-712: The model metadata entry in properties.models[] is
missing the required sha256 field; update the model object (the entry with name
"depth_anything_3_mono_large.safetensors" and url
"https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors")
to include a sha256 property containing the SHA-256 checksum of the file,
keeping the existing name/url/directory keys intact and formatted the same way
as other models in properties.models[] so the workflow JSON follows the standard
ComfyUI model metadata schema.

---

Duplicate comments:
In `@scripts/i18n.json`:
- Around line 4576-4593: The metadata for key
"utility_depth_anything3_video_depth_estimation" incorrectly lists title and
description as missing for several locales while those keys exist as English
placeholders; either remove the stale missing_fields/missing_languages entries
or replace the placeholder title/description values for the listed locales (zh,
zh-TW, ja, ko, es, fr, ru, tr, ar, pt-BR, fa) with proper translations so the
metadata matches the actual locale content; update the JSON so missing_fields
only lists truly absent keys and missing_languages only lists locales that lack
non-placeholder translations.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1975201d-abaa-4e15-adf0-3f650db88238

📥 Commits

Reviewing files that changed from the base of the PR and between 04461c4 and cbe2f8b.

⛔ Files ignored due to path filters (2)
  • input/empty_room_assembly.mp4 is excluded by !**/*.mp4
  • input/retro_futuristic_home.png is excluded by !**/*.png
📒 Files selected for processing (6)
  • bundles.json
  • scripts/i18n.json
  • templates/index.json
  • templates/utility_depth_anything3_video_depth_estimation-1.webp
  • templates/utility_depth_anything3_video_depth_estimation-2.webp
  • templates/utility_depth_anything3_video_depth_estimation.json

Comment thread scripts/i18n.json
Comment thread scripts/i18n.json Outdated
Comment thread scripts/i18n.json
"fa": "Depth Anything 3: Video Depth Estimation"
},
"description": {
"en": "Upload 1 image to generate a depth map for video depth estimation. Output a single depth-processed image ready for use in downstream workflows. Ideal for video generation tasks requiring depth control, 3D scene preprocessing, and animation depth mapping.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Description says "Upload 1 image" but this is video depth, no debate—check your input, mate!

The description begins with "Upload 1 image to generate a depth map for video depth estimation," but this template processes video input, not a single image. This appears to be a copy-paste slip from the image variant's description.

📹 Proposed fix to correct the input description
-        "en": "Upload 1 image to generate a depth map for video depth estimation. Output a single depth-processed image ready for use in downstream workflows. Ideal for video generation tasks requiring depth control, 3D scene preprocessing, and animation depth mapping.",
+        "en": "Upload 1 video to generate depth maps for each frame using Depth Anything 3. Outputs a depth-processed video ready for use in downstream workflows. Ideal for video generation tasks requiring depth control, 3D scene preprocessing, and animation depth mapping.",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"en": "Upload 1 image to generate a depth map for video depth estimation. Output a single depth-processed image ready for use in downstream workflows. Ideal for video generation tasks requiring depth control, 3D scene preprocessing, and animation depth mapping.",
"en": "Upload 1 video to generate depth maps for each frame using Depth Anything 3. Outputs a depth-processed video ready for use in downstream workflows. Ideal for video generation tasks requiring depth control, 3D scene preprocessing, and animation depth mapping.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/i18n.json` at line 20901, The "en" string currently says "Upload 1
image..." but this template is for video depth estimation; update the English
description string in scripts/i18n.json (the "en" value shown in the diff) to
instruct users to upload a video or multiple frames (e.g., "Upload a video or
sequence of frames to generate depth maps for video depth estimation...") and
clarify the output is a depth-processed video or per-frame depth images ready
for downstream workflows.

Comment thread templates/index.json
Comment on lines +1 to +903
{
"id": "b2d4f6a8-3c5e-7f9b-1d3f-5a7b9c1d3e5f",
"revision": 2,
"last_node_id": 89,
"last_link_id": 118,
"nodes": [
{
"id": 14,
"type": "605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3",
"pos": [
340,
30
],
"size": [
400,
360
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"label": "output_type",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"widget": {
"name": "output"
},
"link": null
},
{
"label": "output_normalization",
"name": "output.normalization",
"type": "COMBO",
"widget": {
"name": "output.normalization"
},
"link": null
},
{
"label": "apply_sky_clip",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"widget": {
"name": "output.apply_sky_clip"
},
"link": null
},
{
"name": "video",
"type": "VIDEO",
"link": 114
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
21,
115
]
},
{
"name": "audio",
"type": "AUDIO",
"links": [
116
]
},
{
"name": "fps",
"type": "FLOAT",
"links": [
117
]
}
],
"properties": {
"proxyWidgets": [
[
"5",
"resolution"
],
[
"5",
"resize_method"
],
[
"7",
"output"
],
[
"7",
"output.normalization"
],
[
"7",
"output.apply_sky_clip"
],
[
"82",
"model_name"
]
],
"cnr_id": "comfy-core",
"ver": "0.24.0"
},
"widgets_values": []
},
{
"id": 83,
"type": "MarkdownNote",
"pos": [
-1190,
30
],
"size": [
510,
820
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Model Link",
"properties": {},
"widgets_values": [
"Guide: [Subgraph](https://docs.comfy.org/interface/features/subgraph)\n\n## Model Link (for Local Users)\n\n**geometry_estimation**\n\n- [depth_anything_3_small.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_small.safetensors)\n- [depth_anything_3_base.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_base.safetensors)\n- [depth_anything_3_mono_large.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors)\n- [depth_anything_3_metric_large.safetensors](https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_metric_large.safetensors)\n\n## Model Storage Location\n\n```\n📂 ComfyUI/\n├── 📂 models/\n│ └── 📂 geometry_estimation/\n│ ├── depth_anything_3_small.safetensors\n│ ├── depth_anything_3_base.safetensors\n│ ├── depth_anything_3_mono_large.safetensors\n│ └── depth_anything_3_metric_large.safetensors\n```\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
],
"color": "#222",
"bgcolor": "#000"
},
{
"id": 84,
"type": "MarkdownNote",
"pos": [
-640,
30
],
"size": [
550,
966.03125
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "About: Depth Anything 3 Video",
"properties": {},
"widgets_values": [
"## About Depth Anything 3\n\n[Depth Anything 3 (DA3)](https://github.com/ByteDance-Seed/Depth-Anything-3) is a vision transformer from ByteDance Seed that recovers spatially consistent geometry from arbitrary visual inputs. In ComfyUI, it can estimate a depth map for every frame of a video.\n\n### What this workflow does\n\nUpload a video with **LoadVideo**, then run **Video Depth Estimation (Depth Anything 3)** to produce a per-frame depth sequence. Inside the subgraph:\n\n1. **GetVideoComponents** splits the input video into a frame **image sequence**, **audio**, and **fps**.\n2. **LoadDA3Model** loads the selected DA3 checkpoint.\n3. **DA3Inference** runs mono depth estimation on each frame.\n4. **DA3Render** converts geometry into a depth preview image per frame.\n\nThe subgraph also forwards the original **audio** and **fps** from the source video for downstream reuse.\n\n\n### Model variants\n\n- **depth_anything_3_mono_large** (default): High-quality relative monocular depth with sky segmentation. Best starting point for per-frame video depth.\n- **depth_anything_3_metric_large**: Metric depth in real-world scale (meters). Use `raw` normalization in Render to preserve scale.\n- **depth_anything_3_base**: Any-view foundation model (0.12B). Adds confidence maps; supports multi-view mode (not used in this per-frame video workflow).\n- **depth_anything_3_small**: Fastest any-view model (0.08B). Lowest VRAM per frame.\n\n### Learn more\n\n- Paper: [arXiv:2511.10647](https://arxiv.org/abs/2511.10647)\n- Original repo: [ByteDance-Seed/Depth-Anything-3](https://github.com/ByteDance-Seed/Depth-Anything-3)\n- ComfyUI weights: [Comfy-Org/Depth-Anything-3](https://huggingface.co/Comfy-Org/Depth-Anything-3)\n"
],
"color": "#222",
"bgcolor": "#000"
},
{
"id": 87,
"type": "LoadVideo",
"pos": [
-40,
30
],
"size": [
290,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VIDEO",
"type": "VIDEO",
"links": [
114
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "LoadVideo"
},
"widgets_values": [
"empty_room_assembly.mp4",
"image"
]
},
{
"id": 6,
"type": "PreviewImage",
"pos": [
780,
30
],
"size": [
370,
350
],
"flags": {},
"order": 4,
"mode": 4,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 21
}
],
"outputs": [],
"title": "Depth Preview (one frame per view)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "PreviewImage"
},
"widgets_values": []
},
{
"id": 89,
"type": "CreateVideo",
"pos": [
1200,
30
],
"size": [
270,
130
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 115
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": 116
},
{
"name": "fps",
"type": "FLOAT",
"widget": {
"name": "fps"
},
"link": 117
}
],
"outputs": [
{
"name": "VIDEO",
"type": "VIDEO",
"links": [
118
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "CreateVideo"
},
"widgets_values": [
30
]
},
{
"id": 88,
"type": "SaveVideo",
"pos": [
1510,
30
],
"size": [
560,
520
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "video",
"type": "VIDEO",
"link": 118
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "SaveVideo"
},
"widgets_values": [
"video/depth_anything3",
"auto",
"auto"
]
}
],
"links": [
[
21,
14,
0,
6,
0,
"IMAGE"
],
[
114,
87,
0,
14,
3,
"VIDEO"
],
[
115,
14,
0,
89,
0,
"IMAGE"
],
[
116,
14,
1,
89,
1,
"AUDIO"
],
[
117,
14,
2,
89,
2,
"FLOAT"
],
[
118,
89,
0,
88,
0,
"VIDEO"
]
],
"groups": [],
"definitions": {
"subgraphs": [
{
"id": "605cfcbf-c05b-4cd4-8b8f-9d7d989ab5d3",
"version": 1,
"state": {
"lastGroupId": 4,
"lastNodeId": 89,
"lastLinkId": 118,
"lastRerouteId": 0
},
"revision": 2,
"config": {},
"name": "Video Depth Estimation (Depth Anything 3)",
"inputNode": {
"id": -10,
"bounding": [
160,
-110,
166.998046875,
188
]
},
"outputNode": {
"id": -20,
"bounding": [
1520,
140,
128,
108
]
},
"inputs": [
{
"id": "1089a0a1-6db1-45a8-84b0-0bfdc2ed920a",
"name": "resolution",
"type": "INT",
"linkIds": [
22
],
"pos": [
302.998046875,
-86
]
},
{
"id": "25fb64ac-26d5-466d-995b-6d51b9afa2c4",
"name": "resize_method",
"type": "COMBO",
"linkIds": [
23
],
"pos": [
302.998046875,
-66
]
},
{
"id": "8acafb7c-6c8b-46b3-9d74-c563498a3af1",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"linkIds": [
24
],
"label": "output_type",
"pos": [
302.998046875,
-46
]
},
{
"id": "1da5009b-4648-43e8-a257-16426630cf22",
"name": "output.normalization",
"type": "COMBO",
"linkIds": [
25
],
"label": "output_normalization",
"pos": [
302.998046875,
-26
]
},
{
"id": "fd7edb33-5fb1-4538-a411-26e5039a9321",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"linkIds": [
26
],
"label": "apply_sky_clip",
"pos": [
302.998046875,
-6
]
},
{
"id": "b5be4c8a-b833-4f1e-8c94-3ed1dd722190",
"name": "model_name",
"type": "COMBO",
"linkIds": [
106
],
"pos": [
302.998046875,
14
]
},
{
"id": "698c28c6-cf92-4039-8b39-f3062868ea7c",
"name": "video",
"type": "VIDEO",
"linkIds": [
110
],
"pos": [
302.998046875,
34
]
}
],
"outputs": [
{
"id": "478ab537-63bc-4d74-a9f0-c975f550880f",
"name": "IMAGE",
"type": "IMAGE",
"linkIds": [
7
],
"localized_name": "IMAGE",
"pos": [
1544,
164
]
},
{
"id": "cdaf037e-79bc-4a94-b06c-0fd32e76f615",
"name": "audio",
"type": "AUDIO",
"linkIds": [
112
],
"pos": [
1544,
184
]
},
{
"id": "4c0e5484-d193-49c7-b107-92619628880a",
"name": "fps",
"type": "FLOAT",
"linkIds": [
113
],
"pos": [
1544,
204
]
}
],
"widgets": [],
"nodes": [
{
"id": 7,
"type": "DA3Render",
"pos": [
780,
70
],
"size": [
380,
126
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"localized_name": "da3_geometry",
"name": "da3_geometry",
"type": "DA3_GEOMETRY",
"link": 12
},
{
"localized_name": "output",
"name": "output",
"type": "COMFY_DYNAMICCOMBO_V3",
"widget": {
"name": "output"
},
"link": 24
},
{
"localized_name": "output.normalization",
"name": "output.normalization",
"type": "COMBO",
"widget": {
"name": "output.normalization"
},
"link": 25
},
{
"localized_name": "output.apply_sky_clip",
"name": "output.apply_sky_clip",
"type": "BOOLEAN",
"widget": {
"name": "output.apply_sky_clip"
},
"link": 26
},
{
"name": "geometry",
"type": "DA3_GEOMETRY",
"link": null
}
],
"outputs": [
{
"localized_name": "IMAGE",
"name": "IMAGE",
"type": "IMAGE",
"slot_index": 0,
"links": [
7
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "DA3Render"
},
"widgets_values": [
"depth",
"v2_style",
false
]
},
{
"id": 5,
"type": "DA3Inference",
"pos": [
780,
-190
],
"size": [
390,
130
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"localized_name": "da3_model",
"name": "da3_model",
"type": "DA3_MODEL",
"link": 107
},
{
"localized_name": "image",
"name": "image",
"type": "IMAGE",
"link": 111
},
{
"localized_name": "resolution",
"name": "resolution",
"type": "INT",
"widget": {
"name": "resolution"
},
"link": 22
},
{
"localized_name": "resize_method",
"name": "resize_method",
"type": "COMBO",
"widget": {
"name": "resize_method"
},
"link": 23
}
],
"outputs": [
{
"localized_name": "da3_geometry",
"name": "da3_geometry",
"type": "DA3_GEOMETRY",
"slot_index": 0,
"links": [
12
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.19.0",
"Node name for S&R": "DA3Inference"
},
"widgets_values": [
504,
"lower_bound_resize",
"mono"
]
},
{
"id": 82,
"type": "LoadDA3Model",
"pos": [
790,
-400
],
"size": [
400,
140
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"localized_name": "model_name",
"name": "model_name",
"type": "COMBO",
"widget": {
"name": "model_name"
},
"link": 106
}
],
"outputs": [
{
"localized_name": "DA3_MODEL",
"name": "DA3_MODEL",
"type": "DA3_MODEL",
"links": [
107
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "LoadDA3Model",
"models": [
{
"name": "depth_anything_3_mono_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
"directory": "geometry_estimation"
}
]
},
"widgets_values": [
"depth_anything_3_mono_large.safetensors",
"default"
]
},
{
"id": 86,
"type": "GetVideoComponents",
"pos": [
380,
150
],
"size": [
230,
120
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"localized_name": "video",
"name": "video",
"type": "VIDEO",
"link": 110
}
],
"outputs": [
{
"localized_name": "images",
"name": "images",
"type": "IMAGE",
"links": [
111
]
},
{
"localized_name": "audio",
"name": "audio",
"type": "AUDIO",
"links": [
112
]
},
{
"localized_name": "fps",
"name": "fps",
"type": "FLOAT",
"links": [
113
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.24.0",
"Node name for S&R": "GetVideoComponents"
},
"widgets_values": []
}
],
"groups": [],
"links": [
{
"id": 12,
"origin_id": 5,
"origin_slot": 0,
"target_id": 7,
"target_slot": 0,
"type": "DA3_GEOMETRY"
},
{
"id": 7,
"origin_id": 7,
"origin_slot": 0,
"target_id": -20,
"target_slot": 0,
"type": "IMAGE"
},
{
"id": 22,
"origin_id": -10,
"origin_slot": 0,
"target_id": 5,
"target_slot": 2,
"type": "INT"
},
{
"id": 23,
"origin_id": -10,
"origin_slot": 1,
"target_id": 5,
"target_slot": 3,
"type": "COMBO"
},
{
"id": 24,
"origin_id": -10,
"origin_slot": 2,
"target_id": 7,
"target_slot": 1,
"type": "COMFY_DYNAMICCOMBO_V3"
},
{
"id": 25,
"origin_id": -10,
"origin_slot": 3,
"target_id": 7,
"target_slot": 2,
"type": "COMBO"
},
{
"id": 26,
"origin_id": -10,
"origin_slot": 4,
"target_id": 7,
"target_slot": 3,
"type": "BOOLEAN"
},
{
"id": 106,
"origin_id": -10,
"origin_slot": 5,
"target_id": 82,
"target_slot": 0,
"type": "COMBO"
},
{
"id": 107,
"origin_id": 82,
"origin_slot": 0,
"target_id": 5,
"target_slot": 0,
"type": "DA3_MODEL"
},
{
"id": 110,
"origin_id": -10,
"origin_slot": 6,
"target_id": 86,
"target_slot": 0,
"type": "VIDEO"
},
{
"id": 111,
"origin_id": 86,
"origin_slot": 0,
"target_id": 5,
"target_slot": 1,
"type": "IMAGE"
},
{
"id": 112,
"origin_id": 86,
"origin_slot": 1,
"target_id": -20,
"target_slot": 1,
"type": "AUDIO"
},
{
"id": 113,
"origin_id": 86,
"origin_slot": 2,
"target_id": -20,
"target_slot": 2,
"type": "FLOAT"
}
],
"extra": {}
}
]
},
"config": {},
"extra": {
"ds": {
"scale": 0.6830134553650705,
"offset": [
532.010608439562,
553.4384332508414
]
},
"frontendVersion": "1.45.15",
"workflowRendererVersion": "LG",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
} No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Description says "image" but workflow takes video—quite a mix-up in the input grip!

The i18n description (from context snippet) states "Upload 1 image to generate a depth map for video depth estimation", but this workflow uses a LoadVideo node (line 161) that expects video input, not a single image. The description should be corrected to say "Upload 1 video" to match the actual workflow input type.

🧰 Tools
🪛 OpenGrep (1.22.0)

[ERROR] 892-892: Possible credit card number (PAN) detected in source code. Credit card numbers should never be hardcoded or stored in source files. Use a secrets manager or tokenization service instead.

(coderabbit.pii.credit-card-number)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_video_depth_estimation.json` around lines 1
- 903, The Markdown note titled "About: Depth Anything 3 Video" (node id 84)
currently tells users to "Upload 1 image" but the workflow uses a LoadVideo node
(node id 87) and expects a video input; update the Markdown text to say "Upload
1 video" (and any nearby phrasing referencing an image input) to match the
workflow, and also fix the LoadVideo node's widget value (node id 87,
widgets_values second entry) from "image" to "video" so UI hints and node
settings are consistent.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if the thumbnail file exists in the templates directory
fd -t f "utility_depth_anything3_video_depth_estimation.*\.webp$" templates/

Repository: Comfy-Org/workflow_templates

Length of output: 200


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="templates/utility_depth_anything3_video_depth_estimation.json"

echo "== Thumbnail reference check (-1.webp) =="
rg -n --fixed-strings "utility_depth_anything3_video_depth_estimation-1.webp" "$FILE" || true
rg -n --fixed-strings ".webp" "$FILE" || true

echo
echo "== SHA256 presence check =="
rg -n --ignore-case "sha256" "$FILE" || true

echo
echo "== Embedded model metadata (properties.models) check =="
rg -n "\"models\"" "$FILE" || true
python3 - <<'PY'
import json,sys
path="templates/utility_depth_anything3_video_depth_estimation.json"
with open(path,'r',encoding='utf-8') as f:
    data=json.load(f)

def walk(obj, path=""):
    if isinstance(obj, dict):
        for k,v in obj.items():
            p=f"{path}/{k}" if path else k
            if k=="models" and isinstance(v,list):
                print("Found models list at", path)
                for i,m in enumerate(v):
                    if isinstance(m,dict):
                        keys=list(m.keys())
                        print(f"  models[{i}] keys={keys}")
            walk(v, p)
    elif isinstance(obj, list):
        for i,v in enumerate(obj):
            walk(v, f"{path}[{i}]")
walk(data)
PY

echo
echo "== i18n description wording check =="
# try common locations; avoid huge output by limiting matches
if [ -f "scripts/i18n.json" ]; then
  rg -n --fixed-strings "Upload 1 image" scripts/i18n.json | head -n 20 || true
  rg -n --fixed-strings "depth_anything_3_video" scripts/i18n.json | head -n 50 || true
fi
if [ -f "i18n.json" ]; then
  rg -n --fixed-strings "Upload 1 image" i18n.json | head -n 20 || true
fi

Repository: Comfy-Org/workflow_templates

Length of output: 5552


Fix template metadata: add SHA256 hashes, wire in the -1.webp thumbnail, and correct the i18n text

  • templates/utility_depth_anything3_video_depth_estimation.json has no reference to utility_depth_anything3_video_depth_estimation-1.webp (even though the file exists), so the template has no thumbnail “breadcrumbs”—UI time, not ghost time.
  • templates/utility_depth_anything3_video_depth_estimation.json includes properties.models[] entries with name/url/directory but no sha256 (coding guideline requires SHA256 hashes).
  • scripts/i18n.json text says “Upload 1 image…” while this workflow uses LoadVideo/CreateVideo (video input), making the description misleading.
🧰 Tools
🪛 OpenGrep (1.22.0)

[ERROR] 892-892: Possible credit card number (PAN) detected in source code. Credit card numbers should never be hardcoded or stored in source files. Use a secrets manager or tokenization service instead.

(coderabbit.pii.credit-card-number)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_video_depth_estimation.json` around lines 1
- 903, The template is missing thumbnail wiring, model SHA256s, and has wrong
i18n text: add a reference to
utility_depth_anything3_video_depth_estimation-1.webp in the template metadata
so the UI shows the thumbnail breadcrumbs, add a sha256 field to each entry in
the LoadDA3Model properties.models array (node id 82 / "LoadDA3Model") with the
correct SHA256 checksums for those safetensors, and update the i18n string in
scripts/i18n.json that currently reads "Upload 1 image…" to a video-appropriate
phrase like "Upload a video…" (or similar) so the description matches
LoadVideo/CreateVideo usage. Ensure you modify the template's top-level metadata
section the UI reads for thumbnails and the specific properties.models objects
rather than adding new duplicate model entries.

Source: Coding guidelines

Comment on lines +706 to +712
"models": [
{
"name": "depth_anything_3_mono_large.safetensors",
"url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
"directory": "geometry_estimation"
}
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add SHA256 hash to model metadata for depth perception protection.

The properties.models[] entry includes name, url, and directory, but is missing the required sha256 field. As per coding guidelines, workflow JSON files must include SHA256 hashes in embedded model metadata to ensure download integrity and security verification.

🔐 Proposed fix
               "properties.models": [
                 {
                   "name": "depth_anything_3_mono_large.safetensors",
                   "url": "https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors",
-                  "directory": "geometry_estimation"
+                  "directory": "geometry_estimation",
+                  "sha256": "<add_the_actual_sha256_hash_here>"
                 }
               ]

As per coding guidelines: "Workflow JSON files must follow standard ComfyUI workflow format with embedded model metadata in properties.models[] including download URLs and SHA256 hashes".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/utility_depth_anything3_video_depth_estimation.json` around lines
706 - 712, The model metadata entry in properties.models[] is missing the
required sha256 field; update the model object (the entry with name
"depth_anything_3_mono_large.safetensors" and url
"https://huggingface.co/Comfy-Org/Depth-Anything-3/resolve/main/geometry_estimation/depth_anything_3_mono_large.safetensors")
to include a sha256 property containing the SHA-256 checksum of the file,
keeping the existing name/url/directory keys intact and formatted the same way
as other models in properties.models[] so the workflow JSON follows the standard
ComfyUI model metadata schema.

Source: Coding guidelines

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

♻️ Duplicate comments (1)
scripts/i18n.json (1)

4600-4612: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove unsupported fa locale to keep the 11-language contract in tune (no extra verse).

Line 4611 adds fa to missing_languages, and the same locale is also added in content maps at Line 20947 and Line 20961. The declared supported locale set is 11 languages and does not include fa, so this introduces scope drift between localization metadata and template locale policy.

As per coding guidelines, “Support 11 languages in templates: en (default), zh, zh-TW, ja, ko, es, fr, ru, tr, ar, pt-BR; maintain corresponding index.{locale}.json files for each locale”.

Proposed minimal diff
@@
-          "pt-BR",
-          "fa"
+          "pt-BR"
@@
-        "pt-BR": "Bernini-R: Video Editing",
-        "fa": "Bernini-R: Video Editing"
+        "pt-BR": "Bernini-R: Video Editing"
@@
-        "pt-BR": "Generate an edited video with consistent relighting using Bernini-R. Ideal for portrait and product relighting, e-commerce catalog photography, and creating consistent lighting across photo sets.",
-        "fa": "Generate an edited video with consistent relighting using Bernini-R. Ideal for portrait and product relighting, e-commerce catalog photography, and creating consistent lighting across photo sets."
+        "pt-BR": "Generate an edited video with consistent relighting using Bernini-R. Ideal for portrait and product relighting, e-commerce catalog photography, and creating consistent lighting across photo sets."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/i18n.json` around lines 4600 - 4612, The `fa` (Farsi) locale is being
added to the `missing_languages` array in the diff, but it is not part of the
11-language contract supported by the project (en, zh, zh-TW, ja, ko, es, fr,
ru, tr, ar, pt-BR). Remove `fa` from the `missing_languages` array in
scripts/i18n.json, and also remove `fa` from the content maps at the other
locations referenced in the comment, to maintain consistency between the
localization metadata and the template locale policy.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@templates/index.ar.json`:
- Around line 8415-8417: The Bernini-R template entry in templates/index.ar.json
at lines 8415-8417 has English text for the "title" and "description" fields,
which breaks consistency with the Arabic locale. Translate the "title" field
"Bernini-R: Video Editing" and the entire "description" field about video
editing and relighting to Arabic, ensuring the localized content maintains the
same meaning and context for Arabic-speaking users. The "mediaType" field should
remain unchanged as it is a technical value, not user-facing text.

In `@templates/index.es.json`:
- Around line 8415-8416: The title and description fields for the Bernini-R:
Video Editing entry in index.es.json are currently in English, but this file is
the Spanish locale version and must maintain Spanish translations throughout.
Translate both the title "Bernini-R: Video Editing" and the full description
text about video editing, relighting, portraiture, and e-commerce catalog
photography into Spanish to ensure consistent localization and avoid
mixed-language user experience.

In `@templates/index.fa.json`:
- Around line 8415-8416: The "title" and "description" fields for the Bernini-R
entry in templates/index.fa.json at lines 8415-8416 are in English but should be
translated to Persian (فارسی) to maintain consistent localization throughout the
Persian locale file. Translate both the title "Bernini-R: Video Editing" and the
complete description text into Persian to ensure the UI displays entirely in the
correct language for Persian-speaking users.

In `@templates/index.ja.json`:
- Around line 8417-8439: The index entry for the video_bernini_r_video_editing
template declares mediaType as image with a LoadImage input node, but the actual
workflow contains LoadVideo and SaveVideo nodes representing a genuine video
editing path. Update the entries in both templates/index.json and
templates/index.ja.json for this template to change mediaType from "image" to
"video" and update the io section to include sample inputs/outputs that reflect
the LoadVideo input node (node 47) and SaveVideo output node (node 46) instead
of the current LoadImage node, ensuring the index metadata accurately represents
the video editing workflow.

In `@templates/index.json`:
- Around line 8416-8439: The template metadata describes a video editing
workflow for consistent relighting, but the io section defines only an image
input (LoadImage node) with empty outputs, creating a mismatch between the
template's purpose and its IO contract. Align the inputs and outputs in the io
section to match the template's actual purpose: either add appropriate video
input and output definitions if this is truly a video editing template, or
update the description and tags to reflect that this is an image processing
template. Ensure the mediaType, inputs array, and outputs array are consistent
with what the template actually produces.

In `@templates/index.ko.json`:
- Around line 8415-8416: The Bernini-R template entry in the Korean locale file
contains English text in the "title" and "description" fields instead of Korean
translations. Replace the English "title" value "Bernini-R: Video Editing" and
the English "description" value about video editing and relighting with their
appropriate Korean translations to maintain consistency with the locale
requirements for the KO index file.

In `@templates/index.pt-BR.json`:
- Around line 8415-8416: The Bernini-R template entry in
templates/index.pt-BR.json contains English text for both the "title" field
(currently "Bernini-R: Video Editing") and the "description" field at lines
8415-8416, which breaks locale consistency in the Portuguese-Brazilian catalog
file. Translate both of these string values into Portuguese-Brazilian while
preserving all other JSON structure and field names. Ensure the translated title
maintains the product name "Bernini-R" as part of the translation and that the
description accurately conveys the functionality of video editing with
relighting capabilities in Portuguese-Brazilian.

In `@templates/index.ru.json`:
- Around line 8415-8416: The title and description fields in the Bernini-R entry
within the Russian localization file contain English text instead of Russian
translations, causing mixed-language UI in the Russian catalog. Translate both
the title "Bernini-R: Video Editing" and the description text about video
editing and relighting into Russian to maintain consistency with the rest of the
Russian index file and comply with the localization guidelines for all supported
languages.

In `@templates/index.tr.json`:
- Around line 8415-8416: The Bernini-R template in the Turkish locale file
(templates/index.tr.json) contains English text for the title and description
fields instead of Turkish translations. Replace the English "title" value
"Bernini-R: Video Editing" with its Turkish translation, and replace the English
"description" value describing video editing and relighting with its
corresponding Turkish translation to maintain locale consistency for Turkish
users.

In `@templates/index.zh.json`:
- Around line 8415-8416: The Chinese locale template file contains English-only
title and description text for the Bernini-R: Video Editing template entry,
which creates a mixed-locale user experience in the zh catalog. Translate both
the title "Bernini-R: Video Editing" and its corresponding description text from
English to Chinese to maintain consistent localization as per the supported 11
languages guideline for template files.

---

Duplicate comments:
In `@scripts/i18n.json`:
- Around line 4600-4612: The `fa` (Farsi) locale is being added to the
`missing_languages` array in the diff, but it is not part of the 11-language
contract supported by the project (en, zh, zh-TW, ja, ko, es, fr, ru, tr, ar,
pt-BR). Remove `fa` from the `missing_languages` array in scripts/i18n.json, and
also remove `fa` from the content maps at the other locations referenced in the
comment, to maintain consistency between the localization metadata and the
template locale policy.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: af48692d-bade-4ef8-ab5c-26ce3d0b1983

📥 Commits

Reviewing files that changed from the base of the PR and between 6879a6c and 4c3f662.

📒 Files selected for processing (16)
  • bundles.json
  • scripts/i18n.json
  • templates/index.ar.json
  • templates/index.es.json
  • templates/index.fa.json
  • templates/index.fr.json
  • templates/index.ja.json
  • templates/index.json
  • templates/index.ko.json
  • templates/index.pt-BR.json
  • templates/index.ru.json
  • templates/index.tr.json
  • templates/index.zh-TW.json
  • templates/index.zh.json
  • templates/video_bernini_r_video_editing-1.webp
  • templates/video_bernini_r_video_editing.json

Comment thread templates/index.ar.json Outdated
Comment thread templates/index.es.json Outdated
Comment thread templates/index.fa.json Outdated
Comment thread templates/index.ja.json
Comment on lines +8417 to +8439
"mediaType": "image",
"mediaSubtype": "webp",
"tags": ["動画編集"],
"models": ["Bernini-R"],
"requiresCustomNodes": ["was-node-suite-comfyui"],
"date": "2026-06-14",
"openSource": true,
"size": 38762079846,
"vram": 38762079846,
"usage": 0,
"searchRank": 0,
"username": "ComfyUI",
"io": {
"inputs": [
{
"nodeId": 104,
"nodeType": "LoadImage",
"file": "example.png",
"mediaType": "image"
}
],
"outputs": []
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify Bernini-R template IO contract across index and workflow files (read-only).
set -euo pipefail

echo "== Locate Bernini-R workflow file(s) =="
fd -i "bernini" templates

echo
echo "== Inspect index registrations for Bernini-R =="
jq '.. | objects | select(has("name") and .name=="video_bernini_r_video_editing")' \
  templates/index.json templates/index.ja.json 2>/dev/null

echo
echo "== If workflow file exists, inspect node IO types =="
WF="$(fd -i "video_bernini_r_video_editing.json" templates | head -n1 || true)"
if [ -n "${WF:-}" ]; then
  echo "Workflow file: $WF"
  jq '
    {
      load_nodes: [ .nodes[]? | select(.type|test("Load(Video|Image)$")) | {id, type} ],
      save_nodes: [ .nodes[]? | select(.type|test("Save(Video|Image)$")) | {id, type} ]
    }' "$WF"
else
  echo "Workflow JSON not found in provided checkout."
fi

Repository: Comfy-Org/workflow_templates

Length of output: 2212


Index IO metadata for video-editing template needs alignment with workflow nodes.

The index entry declares this as an image input template ("mediaType": "image", LoadImage node), with zero sample outputs. However, the actual workflow file contains LoadVideo (node 47), LoadImage (node 104), and SaveVideo (node 46) nodes—a genuine video input/output path that the index refuses to reflect. That's a data contract mismatch that'll make Template Manager wiring misleading—a video edit that reads as image-only won't hit the right note.

Update templates/index.json and templates/index.ja.json entries for video_bernini_r_video_editing to declare "mediaType": "video" with sample input/output reflecting the LoadVideo and SaveVideo nodes, or adjust the workflow if it's truly image-driven.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/index.ja.json` around lines 8417 - 8439, The index entry for the
video_bernini_r_video_editing template declares mediaType as image with a
LoadImage input node, but the actual workflow contains LoadVideo and SaveVideo
nodes representing a genuine video editing path. Update the entries in both
templates/index.json and templates/index.ja.json for this template to change
mediaType from "image" to "video" and update the io section to include sample
inputs/outputs that reflect the LoadVideo input node (node 47) and SaveVideo
output node (node 46) instead of the current LoadImage node, ensuring the index
metadata accurately represents the video editing workflow.

Comment thread templates/index.json
Comment on lines +8416 to +8439
"description": "Generate an edited video with consistent relighting using Bernini-R. Ideal for portrait and product relighting, e-commerce catalog photography, and creating consistent lighting across photo sets.",
"mediaType": "image",
"mediaSubtype": "webp",
"tags": ["Video Edit"],
"models": ["Bernini-R"],
"requiresCustomNodes": ["was-node-suite-comfyui"],
"date": "2026-06-14",
"openSource": true,
"size": 38762079846,
"vram": 38762079846,
"usage": 0,
"searchRank": 0,
"username": "ComfyUI",
"io": {
"inputs": [
{
"nodeId": 104,
"nodeType": "LoadImage",
"file": "example.png",
"mediaType": "image"
}
],
"outputs": []
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Video template metadata and IO contract are out of sync.

This entry says “video editing” but defines an image input and no outputs. That mismatch will misroute users in the UI—same beat, wrong street.

🔧 Proposed fix
       {
         "name": "video_bernini_r_video_editing",
         "title": "Bernini-R: Video Editing",
         "description": "Generate an edited video with consistent relighting using Bernini-R. Ideal for portrait and product relighting, e-commerce catalog photography, and creating consistent lighting across photo sets.",
         "mediaType": "image",
         "mediaSubtype": "webp",
@@
         "io": {
           "inputs": [
             {
               "nodeId": 104,
-              "nodeType": "LoadImage",
-              "file": "example.png",
-              "mediaType": "image"
+              "nodeType": "LoadVideo",
+              "file": "example.mp4",
+              "mediaType": "video"
             }
           ],
-          "outputs": []
+          "outputs": [
+            {
+              "nodeId": 200,
+              "nodeType": "SaveVideo",
+              "file": "video_bernini_r_video_editing.mp4",
+              "mediaType": "video"
+            }
+          ]
         }
       },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@templates/index.json` around lines 8416 - 8439, The template metadata
describes a video editing workflow for consistent relighting, but the io section
defines only an image input (LoadImage node) with empty outputs, creating a
mismatch between the template's purpose and its IO contract. Align the inputs
and outputs in the io section to match the template's actual purpose: either add
appropriate video input and output definitions if this is truly a video editing
template, or update the description and tags to reflect that this is an image
processing template. Ensure the mediaType, inputs array, and outputs array are
consistent with what the template actually produces.

Comment thread templates/index.ko.json Outdated
Comment thread templates/index.pt-BR.json Outdated
Comment thread templates/index.ru.json Outdated
Comment thread templates/index.tr.json Outdated
Comment thread templates/index.zh.json Outdated
Created via ComfyUI Template Manager
Updated via ComfyUI Template Manager
Updated via ComfyUI Template Manager
Updated via ComfyUI Template Manager
Created via ComfyUI Template Manager
Created via ComfyUI Template Manager
Created via ComfyUI Template Manager
Updated via Translation Manager
Included new entries for Bernini, Aleph, and various related terms to enhance the wordlist for better recognition in workflows.
- Added multiple new input files including images and videos to the workflow template.
- Introduced new templates for video processing and depth estimation, enhancing functionality for users.
- Updated existing templates with additional input nodes for improved workflow integration.
- Added the term 'gothic' to the existing wordlist to enhance recognition in workflows.
@comfyui-wiki comfyui-wiki merged commit 65c22bb into Comfy-Org:main Jun 15, 2026
13 of 14 checks passed
@comfyui-wiki comfyui-wiki deleted the template-update-20260612-131543 branch June 15, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant