Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package 
python-comfyui-workflow-templates-core for openSUSE:Factory checked in at 
2026-09-17 15:17:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-comfyui-workflow-templates-core 
(Old)
 and      
/work/SRC/openSUSE:Factory/.python-comfyui-workflow-templates-core.new.383539 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-comfyui-workflow-templates-core"

Thu Sep 17 15:17:44 2026 rev:10 rq:1378346 version:0.3.351

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-comfyui-workflow-templates-core/python-comfyui-workflow-templates-core.changes
    2026-09-12 21:25:24.179650140 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-comfyui-workflow-templates-core.new.383539/python-comfyui-workflow-templates-core.changes
        2026-09-17 15:18:32.084735882 +0200
@@ -1,0 +2,19 @@
+Wed Sep 16 11:35:59 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.3.351:
+  * Manifest now lists 571 templates: new FastVideo FastH3 i2v
+    and t2v entries
+  * No code or dependency change: loader.py byte-identical,
+    sdist still declares no install dependencies
+
+-------------------------------------------------------------------
+Tue Sep 15 12:19:57 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.3.343:
+  * Manifest now lists 569 templates: new flux video edit,
+    yue2 music cover and text2music, marigold v2 albedo, depth
+    and surface-normal entries
+  * No code or dependency change: loader.py byte-identical,
+    sdist still declares no install dependencies
+
+-------------------------------------------------------------------

Old:
----
  comfyui_workflow_templates_core-0.3.339.tar.gz

New:
----
  comfyui_workflow_templates_core-0.3.351.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-comfyui-workflow-templates-core.spec ++++++
--- /var/tmp/diff_new_pack.ChNAIM/_old  2026-09-17 15:18:32.754764007 +0200
+++ /var/tmp/diff_new_pack.ChNAIM/_new  2026-09-17 15:18:32.755764049 +0200
@@ -16,7 +16,7 @@
 #
 
 Name:           python-comfyui-workflow-templates-core
-Version:        0.3.339
+Version:        0.3.351
 Release:        0
 Summary:        Core helpers for ComfyUI workflow templates
 # Legal-Review-Notice: sdist ships no LICENSE file; upstream

++++++ comfyui_workflow_templates_core-0.3.339.tar.gz -> 
comfyui_workflow_templates_core-0.3.351.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/comfyui_workflow_templates_core-0.3.339/PKG-INFO 
new/comfyui_workflow_templates_core-0.3.351/PKG-INFO
--- old/comfyui_workflow_templates_core-0.3.339/PKG-INFO        2026-09-10 
19:04:40.167950000 +0200
+++ new/comfyui_workflow_templates_core-0.3.351/PKG-INFO        2026-09-16 
04:27:53.370107200 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: comfyui-workflow-templates-core
-Version: 0.3.339
+Version: 0.3.351
 Summary: Core helpers for ComfyUI workflow templates
 License-Expression: MIT
 Requires-Python: >=3.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/comfyui_workflow_templates_core-0.3.339/pyproject.toml 
new/comfyui_workflow_templates_core-0.3.351/pyproject.toml
--- old/comfyui_workflow_templates_core-0.3.339/pyproject.toml  2026-09-10 
19:04:11.428978200 +0200
+++ new/comfyui_workflow_templates_core-0.3.351/pyproject.toml  2026-09-16 
04:27:28.987773700 +0200
@@ -4,7 +4,7 @@
 
 [project]
 name = "comfyui-workflow-templates-core"
-version = "0.3.339"
+version = "0.3.351"
 description = "Core helpers for ComfyUI workflow templates"
 readme = {text = "Core helpers for ComfyUI workflow templates.", content-type 
= "text/plain"}
 requires-python = ">=3.9"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core/manifest.json
 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core/manifest.json
--- 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core/manifest.json
       2026-09-10 19:04:37.424502600 +0200
+++ 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core/manifest.json
       2026-09-16 04:27:51.191300000 +0200
@@ -2139,7 +2139,7 @@
       "assets": [
         {
           "filename": "api_ideogram_v4_t2i.json",
-          "sha256": 
"093b5edf04ad22d08f63cf3a468bf70feb7e27e4252aaa8af6aec13bf906298c"
+          "sha256": 
"ac423cc3ae632114ff4be474d7dcc8a26c9ef11a76023ecba9b03fcf341c5a20"
         },
         {
           "filename": "api_ideogram_v4_t2i-1.webp",
@@ -5939,7 +5939,7 @@
       "assets": [
         {
           "filename": "api_tripo3_1_image_to_model.json",
-          "sha256": 
"5b08aca768260776fa6801ac97b4a3dbc27e0ad351a794abe7ee86bd749fe091"
+          "sha256": 
"676a9b68df96ee50e8643e8180d0f2e6db709b0213a79367a803e8719e1b175b"
         },
         {
           "filename": "api_tripo3_1_image_to_model-1.webp",
@@ -5993,7 +5993,7 @@
       "assets": [
         {
           "filename": "api_tripo_p1_image_to_model.json",
-          "sha256": 
"5f0be2162eafa44298e1c1aa40f582bc2f30ae75fb65555af0387800a03bb839"
+          "sha256": 
"d4658e25ccaf1888ff1b794fc8a054f7d95cf78e1bc8ca8c8bdba32990586adf"
         },
         {
           "filename": "api_tripo_p1_image_to_model-1.webp",
@@ -6011,7 +6011,7 @@
       "assets": [
         {
           "filename": "api_tripo_p1_mv_to_model.json",
-          "sha256": 
"df7ceda13593df2be6c108822db1a8abea158f7c69f922730e2fb9e45de74516"
+          "sha256": 
"0391c413fe4aa9cf456e4de2edbc858265720e687f57471d947e17b9cf96b184"
         },
         {
           "filename": "api_tripo_p1_mv_to_model-1.webp",
@@ -6029,7 +6029,7 @@
       "assets": [
         {
           "filename": "api_tripo_p1_text_to_model.json",
-          "sha256": 
"a644783bf8664d3dfa16f1d5f1feb940ece73a4096b20b11787ecfca4a0c9270"
+          "sha256": 
"82150233b915f2c1a227dd34599104bcc8901a61006a7aa5f4aa506e34951702"
         },
         {
           "filename": "api_tripo_p1_text_to_model-1.webp",
@@ -6223,7 +6223,7 @@
       "assets": [
         {
           "filename": "index.json",
-          "sha256": 
"c6e60c9de9ac16b8370e5f7158f34eec5f9c03418ad83cec06bc11257bd5ae7c"
+          "sha256": 
"33337a76d5672d2117f74f83a38db70d6dc52653add3c6a61f20cb60f7a24694"
         }
       ],
       "cdn": {
@@ -6237,7 +6237,7 @@
       "assets": [
         {
           "filename": "index.ar.json",
-          "sha256": 
"975f99a2a1eed1edb5ad8ce2c9d55f35edee39c4953c8eda803ce37f59d9727a"
+          "sha256": 
"f76388ad293e36f3fb6891f6ef8c30304132ec989a4142c03ad44e653c07fbf4"
         }
       ],
       "cdn": {
@@ -6251,7 +6251,7 @@
       "assets": [
         {
           "filename": "index.es.json",
-          "sha256": 
"5d93c8c4dc3603fd5574b512250f9c85c429e663a32db703d9f6b4182f474ef6"
+          "sha256": 
"a83f01315add1ed458e724db102fec34413bcdcae900ec1d22d388d5e87826ec"
         }
       ],
       "cdn": {
@@ -6265,7 +6265,7 @@
       "assets": [
         {
           "filename": "index.fa.json",
-          "sha256": 
"1181bd2ea33ae6590b8fd8fab78449abaaf464fc620cb3d09f832cbf1c9b34d2"
+          "sha256": 
"2bb4476a11822315022ba8f4779abd1e392ed71637e3a8190265d3badeff36f4"
         }
       ],
       "cdn": {
@@ -6279,7 +6279,7 @@
       "assets": [
         {
           "filename": "index.fr.json",
-          "sha256": 
"97127b6c9137301f73d7c618189a6bc27ffc968ddf0406fdc1c448bc07edf2b5"
+          "sha256": 
"eeb8782112b46475e80ad2e4d17091086ee37f7d6470d5152560133dd058b93e"
         }
       ],
       "cdn": {
@@ -6293,7 +6293,7 @@
       "assets": [
         {
           "filename": "index.ja.json",
-          "sha256": 
"e6f5207b78bd93f1fdb2f5ac1b391d34a51bcce89b748ffd83727e2a11f9641e"
+          "sha256": 
"97768f30c5087f00d727d479451d738ae9685da79580edf1bb31e2bcf6cb2dbb"
         }
       ],
       "cdn": {
@@ -6307,7 +6307,7 @@
       "assets": [
         {
           "filename": "index.ko.json",
-          "sha256": 
"6f46c70889fab2bee84cec5b9b6d049a2155b8a664dbf691dfc78a4dcf6967b6"
+          "sha256": 
"bc9a8463f00e4c22f5852dd37f57182055ec16d6febf99e35d3009745070ed37"
         }
       ],
       "cdn": {
@@ -6321,7 +6321,7 @@
       "assets": [
         {
           "filename": "index.mcp.json",
-          "sha256": 
"89b2050113c7b7331e520537d09e145907aaea9c0d1ad25ba9bc670a5d64ddb2"
+          "sha256": 
"915bdd2babe1362a502b9a9f8d6b6689d0879431b5f4fcf216a121660e9d13f6"
         }
       ],
       "cdn": {
@@ -6335,7 +6335,7 @@
       "assets": [
         {
           "filename": "index.pt-BR.json",
-          "sha256": 
"ec269426aa3b9c5b19f5abcbbcfd6f6ef2853a544b5a6944f8f3aeea7bc6b14e"
+          "sha256": 
"7022c86563dd14f5235f6ec667dd00fd33b2f6f1671c1596c9d6554855a8f34c"
         }
       ],
       "cdn": {
@@ -6349,7 +6349,7 @@
       "assets": [
         {
           "filename": "index.ru.json",
-          "sha256": 
"a9218f900cea56c54837dcad1fff40fc9391ed9c8bb9a71e06fa25a2913e75dc"
+          "sha256": 
"2a8924b6b71367ec23cd2c22dcea47c767f101d9007670dcc2aad3bccdc6c977"
         }
       ],
       "cdn": {
@@ -6363,7 +6363,7 @@
       "assets": [
         {
           "filename": "index.schema.json",
-          "sha256": 
"931ad6fe17dd52c9a5cf630cabb004aabdd848302a7a2716dd77ab1028ab977f"
+          "sha256": 
"a1c704218a7db7b1937125d75d26c2b2f45bc50371eec6938ccc1376688f6a57"
         }
       ],
       "cdn": {
@@ -6377,7 +6377,7 @@
       "assets": [
         {
           "filename": "index.tr.json",
-          "sha256": 
"2541f9422560a790eabdf0ea097dc6c4235f2fe196ac2d48d750e39b65baf41e"
+          "sha256": 
"576eca47b351a28b20561072131be7275e50d42b100022bef4be5d52bb26a406"
         }
       ],
       "cdn": {
@@ -6391,7 +6391,7 @@
       "assets": [
         {
           "filename": "index.zh.json",
-          "sha256": 
"dba29c971b3cb9cd6466e1e8cbcd5185f1a0c71dd91f8f2caf67d4d88ea48004"
+          "sha256": 
"d36e95e101d7cf8a5cc15479a8e492b0e8ef67c5b944851b89b0d213693f05bb"
         }
       ],
       "cdn": {
@@ -6405,7 +6405,7 @@
       "assets": [
         {
           "filename": "index.zh-TW.json",
-          "sha256": 
"f60823d3ccae87bf5e117b13146b58b131f6455b7689713c4fec4205f50dd37c"
+          "sha256": 
"5ad9137ef7d3e0bec7a8bfe523724d8c16b19290039190ee79b0248b00cb6968"
         }
       ],
       "cdn": {
@@ -6821,7 +6821,7 @@
       "assets": [
         {
           "filename": "template_seedance2_0_viral_videos_character_swap.json",
-          "sha256": 
"2725b838f4a2cab9dca140f6509d59d2fc1e682da58fbda52b02bac0a276260a"
+          "sha256": 
"f9a7baf356457704853e9a0c8277a2c3c8c21c7f50414f3bb68f76fa8adf6167"
         },
         {
           "filename": 
"template_seedance2_0_viral_videos_character_swap-1.webp",
@@ -7377,7 +7377,7 @@
       "assets": [
         {
           "filename": "api_google_gemini_omni_flash_video_edit.json",
-          "sha256": 
"39d84b22070a0b7fa5ee83f78e9acd9d2ebe60033b38873871afcf52cf5f8631"
+          "sha256": 
"819b62cdcd3c848768a8f047943dfd3672fe92d62840de89529935e246ebf334"
         },
         {
           "filename": "api_google_gemini_omni_flash_video_edit-1.webp",
@@ -8963,6 +8963,28 @@
       }
     },
     {
+      "id": "api_flux_video_edit",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "api_flux_video_edit.json",
+          "sha256": 
"5dd5d2c50732e449a1df3f7a688d1141390f3ecefa9cf5a464a25b9a4fe7379f"
+        },
+        {
+          "filename": "api_flux_video_edit-1.webp",
+          "sha256": 
"9964a4b056cecaf0530b7394d5c084a247e5b855bcb726d6005ed40c4dd4599d"
+        },
+        {
+          "filename": "api_flux_video_edit-2.webp",
+          "sha256": 
"45d5a56de1f883a06be82224f09e699193059485a1f4ab461879b91917cb0a6c"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/api_flux_video_edit/"
+      }
+    },
+    {
       "id": "api_google_gemini_omni_flash_1_1_edit",
       "bundle": "media-assets-01",
       "version": "0.0.0",
@@ -10207,6 +10229,42 @@
       }
     },
     {
+      "id": "audio_yue2_music_cover",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "audio_yue2_music_cover.json",
+          "sha256": 
"10af34cf21bfdedbf7bf3535857d1ed211f9bcba7be18b02530c4c69243f0602"
+        },
+        {
+          "filename": "audio_yue2_music_cover-1.webp",
+          "sha256": 
"4b59a5cb4eb5ed62b0ff34caeaac0c10d9068ee83fc710083921aa9a26151dec"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/audio_yue2_music_cover/"
+      }
+    },
+    {
+      "id": "audio_yue2_text2music",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "audio_yue2_text2music.json",
+          "sha256": 
"08100f87f1d7d3b3bc65b89b83af63f41a41116881eb5524040a054cf019577e"
+        },
+        {
+          "filename": "audio_yue2_text2music-1.webp",
+          "sha256": 
"b45d4e3a34a32530cafb375a4aaf25e6c9c8362d2c3dab97762f6303b14d187e"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/audio_yue2_text2music/"
+      }
+    },
+    {
       "id": "image_anima_lllite_any_control_to_image",
       "bundle": "media-assets-01",
       "version": "0.0.0",
@@ -10439,7 +10497,7 @@
       "assets": [
         {
           "filename": "image_mage_flow_turbo_t2i_int8.json",
-          "sha256": 
"80430a53af34d7eeca50e662a921f5dae8f210a617f4d31300177925a0c6cd76"
+          "sha256": 
"868046f552a56b443a4151bdfd2cb85bf1e4cac7a649ab3309f9686e7c683bfe"
         },
         {
           "filename": "image_mage_flow_turbo_t2i_int8-1.webp",
@@ -10451,6 +10509,72 @@
       }
     },
     {
+      "id": "image_marigold_v2_albedo_estimation",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "image_marigold_v2_albedo_estimation.json",
+          "sha256": 
"11a0a600efc274c1312abbd1bbfe4852eafe3d504219bf0f4a782d5a265ece80"
+        },
+        {
+          "filename": "image_marigold_v2_albedo_estimation-1.webp",
+          "sha256": 
"d0adcd61467e30ccbaba79bed25c4a3ecc03957bba8207e3c9b812697d698ade"
+        },
+        {
+          "filename": "image_marigold_v2_albedo_estimation-2.webp",
+          "sha256": 
"436b02ca1a9be434bec6fe34ae546130cd50ea3587e7fe37b650901ae0554f04"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/image_marigold_v2_albedo_estimation/"
+      }
+    },
+    {
+      "id": "image_marigold_v2_depth_estimation",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "image_marigold_v2_depth_estimation.json",
+          "sha256": 
"2104cdd234ae579aa7ed5fa60c796ea30680b0100871d4f3cd898df80d319ce1"
+        },
+        {
+          "filename": "image_marigold_v2_depth_estimation-1.webp",
+          "sha256": 
"ed083f59ab5363b17d02654dfc3f5037628cbc0b81c8bfed4d092f68e68a2575"
+        },
+        {
+          "filename": "image_marigold_v2_depth_estimation-2.webp",
+          "sha256": 
"ffae99bb7f4b9d2bc10c03e9f448e6e66d78e0e17059151bcc359b6f00c41b6a"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/image_marigold_v2_depth_estimation/"
+      }
+    },
+    {
+      "id": "image_marigold_v2_surface_normal_estimation",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "image_marigold_v2_surface_normal_estimation.json",
+          "sha256": 
"3d3d32448632513e7c2aa53da528012201f607fd95f8cfb7bf783582a9b5e62c"
+        },
+        {
+          "filename": "image_marigold_v2_surface_normal_estimation-1.webp",
+          "sha256": 
"c1f6c25273d2367ff3379856feb95b7ccbc45e4f089c97cbcef954eabec7386e"
+        },
+        {
+          "filename": "image_marigold_v2_surface_normal_estimation-2.webp",
+          "sha256": 
"670846d9c28bfbfdb1ce136764c0a775052750541f9b735910810c4dc9a99973"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/image_marigold_v2_surface_normal_estimation/"
+      }
+    },
+    {
       "id": "image_qwen_image_edit_2511_int8",
       "bundle": "media-assets-01",
       "version": "0.0.0",
@@ -10651,6 +10775,42 @@
       }
     },
     {
+      "id": "video_fastvideo_fasth3_i2v",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "video_fastvideo_fasth3_i2v.json",
+          "sha256": 
"20a49bf0346dd7af28b182b69ac4fab754d771955c77b18dc1fbee86a272c49f"
+        },
+        {
+          "filename": "video_fastvideo_fasth3_i2v-1.webp",
+          "sha256": 
"8eb5a016a92b83b7d8884a5e16357daa29e8914cf03bc6f9da77231384c27251"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/video_fastvideo_fasth3_i2v/"
+      }
+    },
+    {
+      "id": "video_fastvideo_fasth3_t2v",
+      "bundle": "media-assets-01",
+      "version": "0.0.0",
+      "assets": [
+        {
+          "filename": "video_fastvideo_fasth3_t2v.json",
+          "sha256": 
"fdbd427725de816235a7217e6d55edd2d3a4208b8a2e7a3d4df6779c5cec7aa4"
+        },
+        {
+          "filename": "video_fastvideo_fasth3_t2v-1.webp",
+          "sha256": 
"979e4ee85785ae0f6d4b695bc5873b5e34b32cf183889db923d74994368fbc63"
+        }
+      ],
+      "cdn": {
+        "path": "media-assets-01/video_fastvideo_fasth3_t2v/"
+      }
+    },
+    {
       "id": "video_ltx2_5_flf2v",
       "bundle": "media-assets-01",
       "version": "0.0.0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core.egg-info/PKG-INFO
 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core.egg-info/PKG-INFO
--- 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core.egg-info/PKG-INFO
   2026-09-10 19:04:40.154230400 +0200
+++ 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core.egg-info/PKG-INFO
   2026-09-16 04:27:53.358655700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: comfyui-workflow-templates-core
-Version: 0.3.339
+Version: 0.3.351
 Summary: Core helpers for ComfyUI workflow templates
 License-Expression: MIT
 Requires-Python: >=3.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core.egg-info/SOURCES.txt
 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core.egg-info/SOURCES.txt
--- 
old/comfyui_workflow_templates_core-0.3.339/src/comfyui_workflow_templates_core.egg-info/SOURCES.txt
        2026-09-10 19:04:40.160485000 +0200
+++ 
new/comfyui_workflow_templates_core-0.3.351/src/comfyui_workflow_templates_core.egg-info/SOURCES.txt
        2026-09-16 04:27:53.363667500 +0200
@@ -10,6 +10,7 @@
 tests/test_bundles_config.py
 tests/test_http_routes.py
 tests/test_index_format.py
+tests/test_input_source_revisions.py
 tests/test_loader.py
 tests/test_sync_is_app.py
 tests/test_templates_repo.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/comfyui_workflow_templates_core-0.3.339/tests/test_input_source_revisions.py
 
new/comfyui_workflow_templates_core-0.3.351/tests/test_input_source_revisions.py
--- 
old/comfyui_workflow_templates_core-0.3.339/tests/test_input_source_revisions.py
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/comfyui_workflow_templates_core-0.3.351/tests/test_input_source_revisions.py
    2026-09-16 04:27:28.989314300 +0200
@@ -0,0 +1,141 @@
+import importlib.util
+import json
+import subprocess
+from pathlib import Path
+
+import pytest
+
+REPO_ROOT = Path(__file__).resolve().parents[3]
+spec = importlib.util.spec_from_file_location(
+    "sync_bundles", REPO_ROOT / "scripts" / "sync" / "sync_bundles.py"
+)
+sync = importlib.util.module_from_spec(spec)
+spec.loader.exec_module(sync)
+
+
+def git(repo: Path, *args: str) -> str:
+    return subprocess.check_output(
+        ["git", "-c", "user.name=Template tests", "-c", 
"[email protected]", *args],
+        cwd=repo,
+        text=True,
+    ).strip()
+
+
[email protected]
+def repo(tmp_path):
+    git(tmp_path, "init", "-b", "main")
+    (tmp_path / "input").mkdir()
+    (tmp_path / "input" / "sample.mp4").write_text("original video")
+    templates = tmp_path / "templates"
+    templates.mkdir()
+    catalog = [
+        {
+            "templates": [
+                {
+                    "name": "video",
+                    "io": {
+                        "inputs": [{"nodeId": 35, "nodeType": "LoadVideo", 
"file": "sample.mp4"}],
+                        "outputs": [{"file": "result.mp4"}],
+                    },
+                }
+            ]
+        }
+    ]
+    for name in ("index.json", "index.ja.json"):
+        (templates / name).write_text(json.dumps(catalog))
+    git(tmp_path, "add", ".")
+    git(tmp_path, "commit", "--no-gpg-sign", "-m", "Initial template release")
+    return tmp_path
+
+
+def packaged_input(repo: Path, sources: dict[str, str]) -> dict:
+    catalog = sync.filter_index_for_pip(
+        (repo / "templates" / "index.json").read_bytes(), frozenset(), sources
+    )
+    return json.loads(catalog)[0]["templates"][0]["io"]["inputs"][0]
+
+
+def test_published_reference_survives_replacement_and_removal_on_main(repo):
+    published = packaged_input(repo, sync.get_input_source_revisions(repo))
+    revision = published["sourceRevision"]
+    assert revision == git(repo, "rev-parse", "HEAD")
+
+    (repo / "input" / "sample.mp4").write_text("replacement video")
+    git(repo, "commit", "-am", "Replace sample", "--no-gpg-sign")
+    replacement = packaged_input(repo, sync.get_input_source_revisions(repo))
+    assert replacement["sourceRevision"] != revision
+    assert (
+        git(repo, "show", f"{replacement['sourceRevision']}:input/sample.mp4")
+        == "replacement video"
+    )
+    assert git(repo, "show", f"{revision}:input/sample.mp4") == "original 
video"
+
+    git(repo, "rm", "input/sample.mp4")
+    git(repo, "commit", "-m", "Remove sample", "--no-gpg-sign")
+    assert "sourceRevision" not in packaged_input(repo, 
sync.get_input_source_revisions(repo))
+    assert git(repo, "show", f"{revision}:input/sample.mp4") == "original 
video"
+
+
+def test_only_regular_committed_inputs_are_versioned(repo):
+    (repo / "input" / "uncommitted.mp4").write_text("new video")
+    (repo / "input" / "link.mp4").symlink_to("sample.mp4")
+    git(repo, "add", "input/link.mp4")
+    git(repo, "commit", "-m", "Add symlink", "--no-gpg-sign")
+    assert sync.get_input_source_revisions(repo) == {"sample.mp4": git(repo, 
"rev-parse", "HEAD")}
+
+
+def test_release_sparse_checkout_can_pin_inputs_without_downloading_them(repo):
+    git(repo, "sparse-checkout", "init", "--cone")
+    git(repo, "sparse-checkout", "set", "templates")
+    assert not (repo / "input").exists()
+    assert packaged_input(repo, 
sync.get_input_source_revisions(repo))["sourceRevision"] == git(
+        repo, "rev-parse", "HEAD"
+    )
+
+
+def test_sync_versions_all_packaged_catalogs_without_changing_source(repo, 
tmp_path, monkeypatch):
+    target = tmp_path / "packaged"
+    sources = sync.get_input_source_revisions(repo)
+    monkeypatch.setattr(sync, "get_input_source_revisions", lambda: sources)
+    monkeypatch.setattr(sync, "TEMPLATES_DIR", repo / "templates")
+    monkeypatch.setattr(sync, "JSON_TARGET", target)
+    monkeypatch.setattr(sync, "BUNDLE_TARGETS", {})
+    sync.sync_bundle_directories(
+        {
+            "templates": [
+                {
+                    "bundle": "json",
+                    "assets": [{"filename": "index.json"}, {"filename": 
"index.ja.json"}],
+                }
+            ]
+        },
+        excluded_names=frozenset(),
+    )
+    for name in ("index.json", "index.ja.json"):
+        source = json.loads((repo / "templates" / name).read_text())
+        packaged = json.loads((target / name).read_text())
+        io = packaged[0]["templates"][0]["io"]
+        assert io["inputs"][0]["sourceRevision"] == sources["sample.mp4"]
+        assert io["outputs"] == source[0]["templates"][0]["io"]["outputs"]
+        assert "sourceRevision" not in 
source[0]["templates"][0]["io"]["inputs"][0]
+
+
+def test_missing_asset_does_not_keep_an_old_source_revision():
+    catalog = [
+        {
+            "templates": [
+                {
+                    "name": "video",
+                    "io": {"inputs": [{"file": "missing.mp4", 
"sourceRevision": "stale"}]},
+                }
+            ]
+        }
+    ]
+    result = json.loads(sync.filter_index_for_pip(json.dumps(catalog), 
frozenset(), {}))
+    assert result[0]["templates"][0]["io"]["inputs"] == [{"file": 
"missing.mp4"}]
+
+
+def test_mcp_input_type_names_are_preserved():
+    catalog = [{"templates": [{"name": "video", "io": {"inputs": ["video", 
"text"]}}]}]
+    result = json.loads(sync.filter_index_for_pip(json.dumps(catalog), 
frozenset(), {}))
+    assert result == catalog

Reply via email to