Compare commits

...

14 Commits

Author SHA1 Message Date
Christian Byrne
30f7f547f2 1.12.14 (#3069) 2025-03-14 21:23:56 -07:00
Christian Byrne
b4cd2c8a65 1.12.13 (#3068) 2025-03-14 21:18:26 -07:00
Christian Byrne
92c9758be3 1.12.12 (#3067)
Co-authored-by: github-actions <github-actions@github.com>
2025-03-14 20:56:17 -07:00
github-actions
feef1d1edc Update test expectations [skip ci] 2025-03-14 20:39:37 -07:00
bymyself
b9678eaffc fix load audio node
load audio node fix
2025-03-14 20:15:56 -07:00
Chenlei Hu
c988be6b12 1.12.11 (#3057) 2025-03-14 16:03:56 -04:00
Chenlei Hu
3be23a8329 [i18n] Fix Wan i2v label (#3056)
Co-authored-by: github-actions <github-actions@github.com>
2025-03-14 16:03:18 -04:00
Chenlei Hu
3eb7495b40 1.12.10 (#3055) 2025-03-14 15:14:33 -04:00
Christian Byrne
a98e8ffa9a Add Wan 2.1 template title translations (#3042)
Co-authored-by: github-actions <github-actions@github.com>
2025-03-14 15:13:38 -04:00
Chenlei Hu
76d20a7dfe 1.12.9 (#3053) 2025-03-14 14:29:10 -04:00
Comfy Org PR Bot
1218dff432 Update locales for node definitions (#3048)
Co-authored-by: huchenlei <20929282+huchenlei@users.noreply.github.com>
2025-03-14 14:27:15 -04:00
Chenlei Hu
714e289ba1 [Bug] Handle null return value from createBounds (#3046) 2025-03-14 14:26:51 -04:00
Chenlei Hu
1fffe6020b [Bug] Fix mask editor saving (#2979) 2025-03-14 14:24:37 -04:00
Chenlei Hu
d7f3719e52 [Bug] Fix load audio node (#2927)
Co-authored-by: github-actions <github-actions@github.com>
2025-03-14 14:23:33 -04:00
22 changed files with 887 additions and 240 deletions

View File

@@ -0,0 +1,32 @@
{
"last_node_id": 1,
"last_link_id": 0,
"nodes": [
{
"id": 1,
"type": "LoadAudio",
"pos": [41.5296516418457, 16.930862426757812],
"size": [315, 82],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "AUDIO",
"type": "AUDIO",
"links": null
}
],
"properties": {
"Node name for S&R": "LoadAudio"
},
"widgets_values": [null, ""]
}
],
"links": [],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}

View File

@@ -134,3 +134,10 @@ test.describe('Load image widget', () => {
await expect(comfyPage.canvas).toHaveScreenshot('load_image_widget.png')
})
})
test.describe('Load audio widget', () => {
test('Can load audio', async ({ comfyPage }) => {
await comfyPage.loadWorkflow('widgets/load_audio_widget')
await expect(comfyPage.canvas).toHaveScreenshot('load_audio_widget.png')
})
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@comfyorg/comfyui-frontend",
"version": "1.12.8",
"version": "1.12.14",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@comfyorg/comfyui-frontend",
"version": "1.12.8",
"version": "1.12.14",
"license": "GPL-3.0-only",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",

View File

@@ -1,7 +1,7 @@
{
"name": "@comfyorg/comfyui-frontend",
"private": true,
"version": "1.12.8",
"version": "1.12.14",
"type": "module",
"repository": "https://github.com/Comfy-Org/ComfyUI_frontend",
"homepage": "https://comfy.org",

View File

@@ -38,10 +38,12 @@ const positionSelectionOverlay = (canvas: LGraphCanvas) => {
visible.value = true
const bounds = createBounds(selectedItems)
updatePosition({
pos: [bounds[0], bounds[1]],
size: [bounds[2], bounds[3]]
})
if (bounds) {
updatePosition({
pos: [bounds[0], bounds[1]],
size: [bounds[2], bounds[3]]
})
}
}
// Register listener on canvas creation.

View File

@@ -88,11 +88,11 @@ app.registerExtension({
name: 'Comfy.AudioWidget',
async beforeRegisterNodeDef(nodeType, nodeData) {
if (
// @ts-expect-error ComfyNode
['LoadAudio', 'SaveAudio', 'PreviewAudio'].includes(nodeType.comfyClass)
['LoadAudio', 'SaveAudio', 'PreviewAudio'].includes(
nodeType.prototype.comfyClass
)
) {
// @ts-expect-error InputSpec is not typed correctly
nodeData.input.required.audioUI = ['AUDIO_UI']
nodeData.input.required.audioUI = ['AUDIO_UI', {}]
}
},
getCustomWidgets() {
@@ -150,8 +150,7 @@ app.registerExtension({
name: 'Comfy.UploadAudio',
async beforeRegisterNodeDef(nodeType, nodeData: ComfyNodeDef) {
if (nodeData?.input?.required?.audio?.[1]?.audio_upload === true) {
// @ts-expect-error InputSpec is not typed correctly
nodeData.input.required.upload = ['AUDIOUPLOAD']
nodeData.input.required.upload = ['AUDIOUPLOAD', {}]
}
},
getCustomWidgets() {

View File

@@ -403,6 +403,8 @@
"latent_upscale_different_prompt_model": "Latent Upscale Different Prompt Model"
},
"Video": {
"text_to_video_wan": "Wan 2.1 Text to Video",
"image_to_video_wan": "Wan 2.1 Image to Video",
"image_to_video": "SVD Image to Video",
"txt_to_image_to_video": "SVD Text to Image to Video",
"ltxv_image_to_video": "LTXV Image to Video",
@@ -749,10 +751,10 @@
"model_patches": "model_patches",
"unet": "unet",
"gligen": "gligen",
"video_models": "video_models",
"postprocessing": "postprocessing",
"transform": "transform",
"batch": "batch",
"video_models": "video_models",
"upscaling": "upscaling",
"instructpix2pix": "instructpix2pix",
"compositing": "compositing",

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "HunyuanImageToVideo",
"inputs": {
"positive": {
"name": "positive"
},
"vae": {
"name": "vae"
},
"width": {
"name": "width"
},
"height": {
"name": "height"
},
"length": {
"name": "length"
},
"batch_size": {
"name": "batch_size"
},
"guidance_type": {
"name": "guidance_type"
},
"start_image": {
"name": "start_image"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "latent"
}
}
},
"HypernetworkLoader": {
"display_name": "HypernetworkLoader",
"inputs": {
@@ -2276,12 +2313,6 @@
"height": {
"name": "height"
},
"material": {
"name": "material"
},
"up_direction": {
"name": "up_direction"
},
"clear": {},
"upload 3d model": {}
},
@@ -2312,12 +2343,6 @@
"height": {
"name": "height"
},
"material": {
"name": "material"
},
"up_direction": {
"name": "up_direction"
},
"clear": {},
"upload 3d model": {}
},
@@ -2339,9 +2364,6 @@
"audio": {
"name": "audio"
},
"audioUI": {
"name": "audioUI"
},
"upload": {
"name": "choose file to upload"
}
@@ -2472,6 +2494,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXVAddGuide",
"inputs": {
"positive": {
"name": "positive"
},
"negative": {
"name": "negative"
},
"vae": {
"name": "vae"
},
"latent": {
"name": "latent"
},
"image": {
"name": "image",
"tooltip": "Image or video to condition the latent video on. Must be 8*n + 1 frames.If the video is not 8*n + 1 frames, it will be cropped to the nearest 8*n + 1 frames."
},
"frame_idx": {
"name": "frame_idx",
"tooltip": "Frame index to start the conditioning at. For single-frame images or videos with 1-8 frames, any frame_idx value is acceptable. For videos with 9+ frames, frame_idx must be divisible by 8, otherwise it will be rounded down to the nearest multiple of 8. Negative values are counted from the end of the video."
},
"strength": {
"name": "strength"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "negative"
},
"2": {
"name": "latent"
}
}
},
"LTXVConditioning": {
"display_name": "LTXVConditioning",
"inputs": {
@@ -2494,6 +2555,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXVCropGuides",
"inputs": {
"positive": {
"name": "positive"
},
"negative": {
"name": "negative"
},
"latent": {
"name": "latent"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "negative"
},
"2": {
"name": "latent"
}
}
},
"LTXVImgToVideo": {
"display_name": "LTXVImgToVideo",
"inputs": {
@@ -2520,10 +2606,6 @@
},
"batch_size": {
"name": "batch_size"
},
"image_noise_scale": {
"name": "image_noise_scale",
"tooltip": "Amount of noise to apply on conditioning image latent."
}
},
"outputs": {
@@ -2538,6 +2620,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXVPreprocess",
"inputs": {
"image": {
"name": "image"
},
"img_compression": {
"name": "img_compression",
"tooltip": "Amount of compression to apply on image."
}
},
"outputs": {
"0": {
"name": "output_image"
}
}
},
"LTXVScheduler": {
"display_name": "LTXVScheduler",
"inputs": {
@@ -4489,12 +4588,6 @@
"model_file": {
"name": "model_file"
},
"material": {
"name": "material"
},
"up_direction": {
"name": "up_direction"
},
"image": {
"name": "image"
}
@@ -4506,12 +4599,6 @@
"model_file": {
"name": "model_file"
},
"material": {
"name": "material"
},
"up_direction": {
"name": "up_direction"
},
"image": {
"name": "image"
}
@@ -4522,9 +4609,6 @@
"inputs": {
"audio": {
"name": "audio"
},
"audioUI": {
"name": "audioUI"
}
}
},
@@ -4882,9 +4966,6 @@
},
"filename_prefix": {
"name": "filename_prefix"
},
"audioUI": {
"name": "audioUI"
}
}
},
@@ -5444,6 +5525,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "TextEncodeHunyuanVideo_ImageToVideo",
"inputs": {
"clip": {
"name": "clip"
},
"clip_vision_output": {
"name": "clip_vision_output"
},
"prompt": {
"name": "prompt"
},
"image_interleave": {
"name": "image_interleave",
"tooltip": "How much the image influences things vs the text prompt. Higher number means more influence from the text prompt."
}
}
},
"ThresholdMask": {
"display_name": "ThresholdMask",
"inputs": {

View File

@@ -836,9 +836,11 @@
"Video": {
"hunyuan_video_text_to_video": "Texte à Vidéo Hunyuan",
"image_to_video": "Image à Vidéo",
"image_to_video_wan": "Wan 2.1 Image à Vidéo",
"ltxv_image_to_video": "LTXV Image à Vidéo",
"ltxv_text_to_video": "LTXV Texte à Vidéo",
"mochi_text_to_video_example": "Exemple de Texte à Vidéo Mochi",
"text_to_video_wan": "Wan 2.1 Texte à Vidéo",
"txt_to_image_to_video": "Texte à Image à Vidéo"
}
},

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "HunyuanImageToVideo",
"inputs": {
"batch_size": {
"name": "taille_du_lot"
},
"guidance_type": {
"name": "type_de_guidage"
},
"height": {
"name": "hauteur"
},
"length": {
"name": "longueur"
},
"positive": {
"name": "positive"
},
"start_image": {
"name": "image_de_départ"
},
"vae": {
"name": "vae"
},
"width": {
"name": "largeur"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "latent"
}
}
},
"HyperTile": {
"display_name": "HyperTile",
"inputs": {
@@ -1981,6 +2018,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXVAddGuide",
"inputs": {
"frame_idx": {
"name": "indice_de_l'image",
"tooltip": "Indice de l'image pour commencer le conditionnement. Pour les images uniques ou les vidéos de 1 à 8 images, toute valeur d'indice de l'image est acceptable. Pour les vidéos de 9 images ou plus, l'indice de l'image doit être divisible par 8, sinon il sera arrondi à la baisse au multiple de 8 le plus proche. Les valeurs négatives sont comptées à partir de la fin de la vidéo."
},
"image": {
"name": "image",
"tooltip": "Image ou vidéo pour conditionner la vidéo latente. Doit être 8*n + 1 images. Si la vidéo n'est pas 8*n + 1 images, elle sera coupée au plus proche 8*n + 1 images."
},
"latent": {
"name": "latent"
},
"negative": {
"name": "négatif"
},
"positive": {
"name": "positive"
},
"strength": {
"name": "force"
},
"vae": {
"name": "vae"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "négatif"
},
"2": {
"name": "latent"
}
}
},
"LTXVConditioning": {
"display_name": "LTXVConditioning",
"inputs": {
@@ -2003,6 +2079,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXVCropGuides",
"inputs": {
"latent": {
"name": "latent"
},
"negative": {
"name": "négatif"
},
"positive": {
"name": "positive"
}
},
"outputs": {
"0": {
"name": "positive"
},
"1": {
"name": "négatif"
},
"2": {
"name": "latent"
}
}
},
"LTXVImgToVideo": {
"display_name": "LTXVImgToVideo",
"inputs": {
@@ -2015,10 +2116,6 @@
"image": {
"name": "image"
},
"image_noise_scale": {
"name": "image_noise_scale",
"tooltip": "Quantité de bruit à appliquer sur le latent de l'image de conditionnement."
},
"length": {
"name": "length"
},
@@ -2047,6 +2144,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXVPreprocess",
"inputs": {
"image": {
"name": "image"
},
"img_compression": {
"name": "compression_d'image",
"tooltip": "Quantité de compression à appliquer sur l'image."
}
},
"outputs": {
"0": {
"name": "image_de_sortie"
}
}
},
"LTXVScheduler": {
"display_name": "LTXVScheduler",
"inputs": {
@@ -2363,15 +2477,9 @@
"image": {
"name": "image"
},
"material": {
"name": "matériel"
},
"model_file": {
"name": "fichier_modèle"
},
"up_direction": {
"name": "direction_haut"
},
"upload 3d model": {
},
"width": {
@@ -2401,15 +2509,9 @@
"image": {
"name": "image"
},
"material": {
"name": "matériel"
},
"model_file": {
"name": "fichier_modèle"
},
"up_direction": {
"name": "direction_haut"
},
"upload 3d model": {
},
"width": {
@@ -2434,9 +2536,6 @@
"audio": {
"name": "audio"
},
"audioUI": {
"name": "audioUI"
},
"upload": {
"name": "choisissez le fichier à télécharger"
}
@@ -4494,14 +4593,8 @@
"image": {
"name": "image"
},
"material": {
"name": "matériel"
},
"model_file": {
"name": "fichier_modèle"
},
"up_direction": {
"name": "direction_haut"
}
}
},
@@ -4511,14 +4604,8 @@
"image": {
"name": "image"
},
"material": {
"name": "matériel"
},
"model_file": {
"name": "fichier_modèle"
},
"up_direction": {
"name": "direction_haut"
}
}
},
@@ -4527,9 +4614,6 @@
"inputs": {
"audio": {
"name": "audio"
},
"audioUI": {
"name": "audioUI"
}
}
},
@@ -5010,9 +5094,6 @@
"audio": {
"name": "audio"
},
"audioUI": {
"name": "audioUI"
},
"filename_prefix": {
"name": "préfixe_du_nom_de_fichier"
}
@@ -5449,6 +5530,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "TextEncodeHunyuanVideo_ImageToVideo",
"inputs": {
"clip": {
"name": "clip"
},
"clip_vision_output": {
"name": "sortie_vision_clip"
},
"image_interleave": {
"name": "entrelacement_image",
"tooltip": "À quel point l'image influence les choses par rapport à l'invite de texte. Un nombre plus élevé signifie plus d'influence de l'invite de texte."
},
"prompt": {
"name": "invite"
}
}
},
"ThresholdMask": {
"display_name": "SeuilMasque",
"inputs": {

View File

@@ -836,9 +836,11 @@
"Video": {
"hunyuan_video_text_to_video": "Hunyuanビデオテキストからビデオへ",
"image_to_video": "画像からビデオへ",
"image_to_video_wan": "Wan 2.1 画像からビデオへ",
"ltxv_image_to_video": "LTXV画像からビデオへ",
"ltxv_text_to_video": "LTXVテキストからビデオへ",
"mochi_text_to_video_example": "Mochiテキストからビデオへ",
"text_to_video_wan": "Wan 2.1 テキストからビデオへ",
"txt_to_image_to_video": "テキストから画像へ、画像からビデオへ"
}
},

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "HunyuanImageToVideo",
"inputs": {
"batch_size": {
"name": "バッチサイズ"
},
"guidance_type": {
"name": "ガイダンスタイプ"
},
"height": {
"name": "高さ"
},
"length": {
"name": "長さ"
},
"positive": {
"name": "ポジティブ"
},
"start_image": {
"name": "開始画像"
},
"vae": {
"name": "vae"
},
"width": {
"name": "幅"
}
},
"outputs": {
"0": {
"name": "ポジティブ"
},
"1": {
"name": "潜在"
}
}
},
"HyperTile": {
"display_name": "ハイパータイル",
"inputs": {
@@ -1981,6 +2018,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXVAddGuide",
"inputs": {
"frame_idx": {
"name": "フレームインデックス",
"tooltip": "条件付けを開始するフレームインデックス。単一フレームの画像や1-8フレームのビデオの場合、任意のframe_idx値が許容されます。9フレーム以上のビデオの場合、frame_idxは8で割り切れる数でなければならず、そうでない場合は最も近い8の倍数に切り捨てられます。負の値はビデオの終わりから数えます。"
},
"image": {
"name": "画像",
"tooltip": "潜在ビデオの条件付けに使用する画像またはビデオ。フレーム数は8*n + 1でなければなりません。ビデオが8*n + 1フレームでない場合、最も近い8*n + 1フレームに切り取られます。"
},
"latent": {
"name": "潜在"
},
"negative": {
"name": "ネガティブ"
},
"positive": {
"name": "ポジティブ"
},
"strength": {
"name": "強度"
},
"vae": {
"name": "vae"
}
},
"outputs": {
"0": {
"name": "ポジティブ"
},
"1": {
"name": "ネガティブ"
},
"2": {
"name": "潜在"
}
}
},
"LTXVConditioning": {
"display_name": "LTXV条件付け",
"inputs": {
@@ -2003,6 +2079,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXVCropGuides",
"inputs": {
"latent": {
"name": "潜在"
},
"negative": {
"name": "ネガティブ"
},
"positive": {
"name": "ポジティブ"
}
},
"outputs": {
"0": {
"name": "ポジティブ"
},
"1": {
"name": "ネガティブ"
},
"2": {
"name": "潜在"
}
}
},
"LTXVImgToVideo": {
"display_name": "LTXV画像からビデオへ",
"inputs": {
@@ -2015,10 +2116,6 @@
"image": {
"name": "画像"
},
"image_noise_scale": {
"name": "画像ノイズスケール",
"tooltip": "条件付け画像の潜在に適用するノイズの量。"
},
"length": {
"name": "長さ"
},
@@ -2047,6 +2144,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXVPreprocess",
"inputs": {
"image": {
"name": "画像"
},
"img_compression": {
"name": "画像圧縮",
"tooltip": "画像に適用する圧縮の量。"
}
},
"outputs": {
"0": {
"name": "出力画像"
}
}
},
"LTXVScheduler": {
"display_name": "LTXVスケジューラー",
"inputs": {
@@ -2363,15 +2477,9 @@
"image": {
"name": "画像"
},
"material": {
"name": "素材"
},
"model_file": {
"name": "モデルファイル"
},
"up_direction": {
"name": "上方向"
},
"upload 3d model": {
},
"width": {
@@ -2401,15 +2509,9 @@
"image": {
"name": "画像"
},
"material": {
"name": "素材"
},
"model_file": {
"name": "モデルファイル"
},
"up_direction": {
"name": "上方向"
},
"upload 3d model": {
},
"width": {
@@ -2434,9 +2536,6 @@
"audio": {
"name": "オーディオ"
},
"audioUI": {
"name": "audioUI"
},
"upload": {
"name": "アップロードするファイルを選択"
}
@@ -4494,14 +4593,8 @@
"image": {
"name": "画像"
},
"material": {
"name": "マテリアル"
},
"model_file": {
"name": "モデルファイル"
},
"up_direction": {
"name": "上方向"
}
}
},
@@ -4511,14 +4604,8 @@
"image": {
"name": "画像"
},
"material": {
"name": "素材"
},
"model_file": {
"name": "モデルファイル"
},
"up_direction": {
"name": "上方向"
}
}
},
@@ -4527,9 +4614,6 @@
"inputs": {
"audio": {
"name": "オーディオ"
},
"audioUI": {
"name": "オーディオUI"
}
}
},
@@ -5010,9 +5094,6 @@
"audio": {
"name": "オーディオ"
},
"audioUI": {
"name": "audioUI"
},
"filename_prefix": {
"name": "ファイル名_プレフィックス"
}
@@ -5449,6 +5530,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "TextEncodeHunyuanVideo_ImageToVideo",
"inputs": {
"clip": {
"name": "clip"
},
"clip_vision_output": {
"name": "clip_vision_output"
},
"image_interleave": {
"name": "画像インターリーブ",
"tooltip": "画像がテキストプロンプトと比べてどれだけ影響を与えるか。数値が大きいほどテキストプロンプトからの影響が大きくなります。"
},
"prompt": {
"name": "プロンプト"
}
}
},
"ThresholdMask": {
"display_name": "しきい値マスク",
"inputs": {

View File

@@ -836,9 +836,11 @@
"Video": {
"hunyuan_video_text_to_video": "텍스트 -> 비디오 (Hunyuan Video)",
"image_to_video": "이미지 -> 동영상",
"image_to_video_wan": "Wan 2.1 이미지에서 비디오로",
"ltxv_image_to_video": "이미지 -> 동영상 (LTXV)",
"ltxv_text_to_video": "텍스트 -> 동영상 (LTXV)",
"mochi_text_to_video_example": "텍스트 -> 동영상 (Mochi)",
"text_to_video_wan": "Wan 2.1 텍스트를 비디오로",
"txt_to_image_to_video": "텍스트 -> 이미지 -> 동영상"
}
},

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "HunyuanImageToVideo",
"inputs": {
"batch_size": {
"name": "배치 크기"
},
"guidance_type": {
"name": "지침 유형"
},
"height": {
"name": "높이"
},
"length": {
"name": "길이"
},
"positive": {
"name": "긍정적"
},
"start_image": {
"name": "시작 이미지"
},
"vae": {
"name": "vae"
},
"width": {
"name": "너비"
}
},
"outputs": {
"0": {
"name": "긍정적"
},
"1": {
"name": "잠재"
}
}
},
"HyperTile": {
"display_name": "하이퍼 타일",
"inputs": {
@@ -1981,6 +2018,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXVAddGuide",
"inputs": {
"frame_idx": {
"name": "프레임 인덱스",
"tooltip": "조건을 시작할 프레임 인덱스. 단일 프레임 이미지 또는 1-8 프레임의 비디오의 경우 어떤 프레임 인덱스 값도 허용됩니다. 9+ 프레임의 비디오의 경우, 프레임 인덱스는 8로 나누어 떨어져야 하며, 그렇지 않으면 가장 가까운 8의 배수로 내림됩니다. 음수 값은 비디오의 끝에서부터 계산됩니다."
},
"image": {
"name": "이미지",
"tooltip": "잠재 비디오에 조건을 부여하는 이미지 또는 비디오. 8*n + 1 프레임이어야 합니다. 비디오가 8*n + 1 프레임이 아닌 경우 가장 가까운 8*n + 1 프레임으로 자릅니다."
},
"latent": {
"name": "잠재"
},
"negative": {
"name": "부정적"
},
"positive": {
"name": "긍정적"
},
"strength": {
"name": "강도"
},
"vae": {
"name": "vae"
}
},
"outputs": {
"0": {
"name": "긍정적"
},
"1": {
"name": "부정적"
},
"2": {
"name": "잠재"
}
}
},
"LTXVConditioning": {
"display_name": "LTXV 조건 설정",
"inputs": {
@@ -2003,6 +2079,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXVCropGuides",
"inputs": {
"latent": {
"name": "잠재"
},
"negative": {
"name": "부정적"
},
"positive": {
"name": "긍정적"
}
},
"outputs": {
"0": {
"name": "긍정적"
},
"1": {
"name": "부정적"
},
"2": {
"name": "잠재"
}
}
},
"LTXVImgToVideo": {
"display_name": "이미지를 비디오로 (LTXV)",
"inputs": {
@@ -2015,10 +2116,6 @@
"image": {
"name": "이미지"
},
"image_noise_scale": {
"name": "이미지 노이즈 규모",
"tooltip": "조건 이미지 잠재 비디오에 적용할 노이즈의 양입니다."
},
"length": {
"name": "길이"
},
@@ -2047,6 +2144,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXVPreprocess",
"inputs": {
"image": {
"name": "이미지"
},
"img_compression": {
"name": "이미지 압축",
"tooltip": "이미지에 적용할 압축의 양."
}
},
"outputs": {
"0": {
"name": "출력 이미지"
}
}
},
"LTXVScheduler": {
"display_name": "LTXV 스케줄러",
"inputs": {
@@ -2363,15 +2477,9 @@
"image": {
"name": "이미지"
},
"material": {
"name": "재질"
},
"model_file": {
"name": "모델 파일"
},
"up_direction": {
"name": "위 방향"
},
"upload 3d model": {
},
"width": {
@@ -2401,15 +2509,9 @@
"image": {
"name": "이미지"
},
"material": {
"name": "재질"
},
"model_file": {
"name": "모델 파일"
},
"up_direction": {
"name": "위 방향"
},
"upload 3d model": {
},
"width": {
@@ -2434,9 +2536,6 @@
"audio": {
"name": "오디오"
},
"audioUI": {
"name": "오디오UI"
},
"upload": {
"name": "업로드할 파일 선택"
}
@@ -4494,14 +4593,8 @@
"image": {
"name": "이미지"
},
"material": {
"name": "재질"
},
"model_file": {
"name": "모델 파일"
},
"up_direction": {
"name": "위 방향"
}
}
},
@@ -4511,14 +4604,8 @@
"image": {
"name": "이미지"
},
"material": {
"name": "재질"
},
"model_file": {
"name": "모델 파일"
},
"up_direction": {
"name": "위 방향"
}
}
},
@@ -4527,9 +4614,6 @@
"inputs": {
"audio": {
"name": "오디오"
},
"audioUI": {
"name": "오디오UI"
}
}
},
@@ -5010,9 +5094,6 @@
"audio": {
"name": "오디오"
},
"audioUI": {
"name": "오디오UI"
},
"filename_prefix": {
"name": "파일명 접두사"
}
@@ -5449,6 +5530,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "TextEncodeHunyuanVideo_ImageToVideo",
"inputs": {
"clip": {
"name": "클립"
},
"clip_vision_output": {
"name": "클립 비전 출력"
},
"image_interleave": {
"name": "이미지 인터리브",
"tooltip": "이미지가 텍스트 프롬프트와 비교하여 얼마나 영향을 미치는지. 높은 숫자는 텍스트 프롬프트로부터 더 많은 영향을 받음을 의미합니다."
},
"prompt": {
"name": "프롬프트"
}
}
},
"ThresholdMask": {
"display_name": "임계값 마스크",
"inputs": {

View File

@@ -836,9 +836,11 @@
"Video": {
"hunyuan_video_text_to_video": "Hunyuan Video Text to Video",
"image_to_video": "Изображение в видео",
"image_to_video_wan": "Wan 2.1 Изображение в Видео",
"ltxv_image_to_video": "LTXV Image to Video",
"ltxv_text_to_video": "LTXV Text to Video",
"mochi_text_to_video_example": "Mochi Text to Video",
"text_to_video_wan": "Wan 2.1 Текст в Видео",
"txt_to_image_to_video": "Текст в изображение в видео"
}
},

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "HunyuanImageToVideo",
"inputs": {
"batch_size": {
"name": "размер пакета"
},
"guidance_type": {
"name": "тип руководства"
},
"height": {
"name": "высота"
},
"length": {
"name": "длина"
},
"positive": {
"name": "положительный"
},
"start_image": {
"name": "начальное изображение"
},
"vae": {
"name": "vae"
},
"width": {
"name": "ширина"
}
},
"outputs": {
"0": {
"name": "положительный"
},
"1": {
"name": "скрытое пространство"
}
}
},
"HyperTile": {
"display_name": "Гиперплитка",
"inputs": {
@@ -1981,6 +2018,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXVAddGuide",
"inputs": {
"frame_idx": {
"name": "индекс кадра",
"tooltip": "Индекс кадра для начала условия. Для однокадровых изображений или видео с 1-8 кадрами любое значение frame_idx приемлемо. Для видео с 9+ кадрами, frame_idx должен быть кратен 8, в противном случае он будет округлен вниз до ближайшего кратного 8. Отрицательные значения считаются с конца видео."
},
"image": {
"name": "изображение",
"tooltip": "Изображение или видео для условия скрытого видео. Должно быть 8*n + 1 кадров. Если видео не 8*n + 1 кадров, оно будет обрезано до ближайших 8*n + 1 кадров."
},
"latent": {
"name": "скрытое пространство"
},
"negative": {
"name": "отрицательный"
},
"positive": {
"name": "положительный"
},
"strength": {
"name": "сила"
},
"vae": {
"name": "vae"
}
},
"outputs": {
"0": {
"name": "положительный"
},
"1": {
"name": "отрицательный"
},
"2": {
"name": "скрытое пространство"
}
}
},
"LTXVConditioning": {
"display_name": "Кондиционирование LTXV",
"inputs": {
@@ -2003,6 +2079,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXVCropGuides",
"inputs": {
"latent": {
"name": "скрытое пространство"
},
"negative": {
"name": "отрицательный"
},
"positive": {
"name": "положительный"
}
},
"outputs": {
"0": {
"name": "положительный"
},
"1": {
"name": "отрицательный"
},
"2": {
"name": "скрытое пространство"
}
}
},
"LTXVImgToVideo": {
"display_name": "LTXVImgToVideo",
"inputs": {
@@ -2015,10 +2116,6 @@
"image": {
"name": "изображение"
},
"image_noise_scale": {
"name": асштабума_изображения",
"tooltip": "Количество шума, применяемого к латентному изображению."
},
"length": {
"name": "длина"
},
@@ -2047,6 +2144,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXVPreprocess",
"inputs": {
"image": {
"name": "изображение"
},
"img_compression": {
"name": "сжатие изображения",
"tooltip": "Степень сжатия, применяемая к изображению."
}
},
"outputs": {
"0": {
"name": "выходное изображение"
}
}
},
"LTXVScheduler": {
"display_name": "Scheduler LTXV",
"inputs": {
@@ -2363,15 +2477,9 @@
"image": {
"name": "изображение"
},
"material": {
"name": "материал"
},
"model_file": {
"name": айл_модели"
},
"up_direction": {
"name": аправление_вверх"
},
"upload 3d model": {
},
"width": {
@@ -2401,15 +2509,9 @@
"image": {
"name": "изображение"
},
"material": {
"name": "материал"
},
"model_file": {
"name": айл_модели"
},
"up_direction": {
"name": аправление_вверх"
},
"upload 3d model": {
},
"width": {
@@ -2434,9 +2536,6 @@
"audio": {
"name": "аудио"
},
"audioUI": {
"name": "audioUI"
},
"upload": {
"name": "выберите файл для загрузки"
}
@@ -4494,14 +4593,8 @@
"image": {
"name": "изображение"
},
"material": {
"name": "материал"
},
"model_file": {
"name": айл_модели"
},
"up_direction": {
"name": аправление_вверх"
}
}
},
@@ -4511,14 +4604,8 @@
"image": {
"name": "изображение"
},
"material": {
"name": "материал"
},
"model_file": {
"name": айл_модели"
},
"up_direction": {
"name": аправление_вверх"
}
}
},
@@ -4527,9 +4614,6 @@
"inputs": {
"audio": {
"name": "аудио"
},
"audioUI": {
"name": "audioUI"
}
}
},
@@ -5010,9 +5094,6 @@
"audio": {
"name": "аудио"
},
"audioUI": {
"name": "audioUI"
},
"filename_prefix": {
"name": "префиксазвания_файла"
}
@@ -5449,6 +5530,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "TextEncodeHunyuanVideo_ImageToVideo",
"inputs": {
"clip": {
"name": "clip"
},
"clip_vision_output": {
"name": "выход clip_vision"
},
"image_interleave": {
"name": "перемежение изображения",
"tooltip": "Насколько сильно изображение влияет на текстовую подсказку. Чем выше число, тем больше влияние от текстовой подсказки."
},
"prompt": {
"name": "подсказка"
}
}
},
"ThresholdMask": {
"display_name": "Пороговая маска",
"inputs": {

View File

@@ -836,9 +836,11 @@
"Video": {
"hunyuan_video_text_to_video": "Hunyuan视频文本到视频",
"image_to_video": "图像到视频",
"image_to_video_wan": "Wan 2.1 图像到视频",
"ltxv_image_to_video": "LTXV图像到视频",
"ltxv_text_to_video": "LTXV文本到视频",
"mochi_text_to_video_example": "Mochi文本到视频",
"text_to_video_wan": "Wan 2.1 文字到视频",
"txt_to_image_to_video": "文本到图像到视频"
}
},

View File

@@ -1472,6 +1472,43 @@
}
}
},
"HunyuanImageToVideo": {
"display_name": "Hunyuan图像到视频",
"inputs": {
"batch_size": {
"name": "批量大小"
},
"guidance_type": {
"name": "指导类型"
},
"height": {
"name": "高度"
},
"length": {
"name": "长度"
},
"positive": {
"name": "正向"
},
"start_image": {
"name": "起始图像"
},
"vae": {
"name": "vae"
},
"width": {
"name": "宽度"
}
},
"outputs": {
"0": {
"name": "正向"
},
"1": {
"name": "潜在空间"
}
}
},
"HyperTile": {
"display_name": "超分块HyperTile",
"inputs": {
@@ -1981,6 +2018,45 @@
}
}
},
"LTXVAddGuide": {
"display_name": "LTXV添加指导",
"inputs": {
"frame_idx": {
"name": "帧索引",
"tooltip": "开始调节的帧索引。对于单帧图像或1-8帧的视频任何帧索引值都可以接受。对于9+帧的视频帧索引必须能被8整除否则它将被向下取整到最接近的8的倍数。负值从视频的末尾开始计算。"
},
"image": {
"name": "图像",
"tooltip": "用于调节潜在视频的图像或视频。必须是8*n + 1帧。如果视频不是8*n + 1帧它将被裁剪到最接近的8*n + 1帧。"
},
"latent": {
"name": "潜在空间"
},
"negative": {
"name": "负向"
},
"positive": {
"name": "正向"
},
"strength": {
"name": "强度"
},
"vae": {
"name": "vae"
}
},
"outputs": {
"0": {
"name": "正向"
},
"1": {
"name": "负向"
},
"2": {
"name": "潜在空间"
}
}
},
"LTXVConditioning": {
"display_name": "LTXV条件",
"inputs": {
@@ -2003,6 +2079,31 @@
}
}
},
"LTXVCropGuides": {
"display_name": "LTXV裁剪指导",
"inputs": {
"latent": {
"name": "潜在空间"
},
"negative": {
"name": "负向"
},
"positive": {
"name": "正向"
}
},
"outputs": {
"0": {
"name": "正向"
},
"1": {
"name": "负向"
},
"2": {
"name": "潜在空间"
}
}
},
"LTXVImgToVideo": {
"display_name": "LTXV图像到视频",
"inputs": {
@@ -2015,10 +2116,6 @@
"image": {
"name": "图像"
},
"image_noise_scale": {
"name": "图像噪波比例",
"tooltip": "在条件图像Latent图像上应用的噪波量。"
},
"length": {
"name": "长度"
},
@@ -2047,6 +2144,23 @@
}
}
},
"LTXVPreprocess": {
"display_name": "LTXV预处理",
"inputs": {
"image": {
"name": "图像"
},
"img_compression": {
"name": "图像压缩",
"tooltip": "应用于图像的压缩量。"
}
},
"outputs": {
"0": {
"name": "输出图像"
}
}
},
"LTXVScheduler": {
"display_name": "LTXV调度器",
"inputs": {
@@ -2363,15 +2477,9 @@
"image": {
"name": "图像"
},
"material": {
"name": "材质"
},
"model_file": {
"name": "模型文件"
},
"up_direction": {
"name": "上方向"
},
"upload 3d model": {
},
"width": {
@@ -2401,15 +2509,9 @@
"image": {
"name": "图像"
},
"material": {
"name": "材质"
},
"model_file": {
"name": "模型文件"
},
"up_direction": {
"name": "上方向"
},
"upload 3d model": {
},
"width": {
@@ -2434,9 +2536,6 @@
"audio": {
"name": "音频"
},
"audioUI": {
"name": "音频界面"
},
"upload": {
"name": "选择文件上传"
}
@@ -4494,14 +4593,8 @@
"image": {
"name": "图像"
},
"material": {
"name": "材质"
},
"model_file": {
"name": "模型文件"
},
"up_direction": {
"name": "上方向"
}
}
},
@@ -4511,14 +4604,8 @@
"image": {
"name": "图像"
},
"material": {
"name": "材质"
},
"model_file": {
"name": "模型文件"
},
"up_direction": {
"name": "上方向"
}
}
},
@@ -4527,9 +4614,6 @@
"inputs": {
"audio": {
"name": "音频"
},
"audioUI": {
"name": "音频界面"
}
}
},
@@ -5010,9 +5094,6 @@
"audio": {
"name": "音频"
},
"audioUI": {
"name": "音频UI"
},
"filename_prefix": {
"name": "文件名前缀"
}
@@ -5449,6 +5530,24 @@
}
}
},
"TextEncodeHunyuanVideo_ImageToVideo": {
"display_name": "文本编码Hunyuan视频_图像到视频",
"inputs": {
"clip": {
"name": "clip"
},
"clip_vision_output": {
"name": "clip视觉输出"
},
"image_interleave": {
"name": "图像交错",
"tooltip": "图像与文本提示的影响程度。数字越高,文本提示的影响越大。"
},
"prompt": {
"name": "提示"
}
}
},
"ThresholdMask": {
"display_name": "遮罩阈值",
"inputs": {

View File

@@ -381,7 +381,7 @@ export class ComfyApp {
// @ts-expect-error
prop.value = value
// @ts-expect-error
prop.callback(value)
prop.callback?.(value)
}
}
})

View File

@@ -170,7 +170,10 @@ export const useLitegraphService = () => {
addNodeContextMenuHandler(node)
addDrawBackgroundHandler(node)
addNodeKeyHandler(node)
// Note: Some extensions expects node.comfyClass to be set in
// `beforeRegisterNodeDef`.
node.prototype.comfyClass = nodeDefV1.name
node.comfyClass = nodeDefV1.name
await extensionService.invokeExtensionsAsync(
'beforeRegisterNodeDef',
node,
@@ -178,8 +181,6 @@ export const useLitegraphService = () => {
)
const nodeDef = new ComfyNodeDefImpl(nodeDefV1)
node.comfyClass = nodeDef.name
node.prototype.comfyClass = nodeDef.name
node.nodeData = nodeDef
LiteGraph.registerNodeType(nodeId, node)
// Note: Do not following assignments before `LiteGraph.registerNodeType`