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