comfyui-frontend-package 1.10.16__py3-none-any.whl → 1.10.18__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. comfyui_frontend_package/static/assets/BaseViewTemplate-BKJWSNY3.js +51 -0
  2. comfyui_frontend_package/static/assets/BaseViewTemplate-BKJWSNY3.js.map +1 -0
  3. comfyui_frontend_package/static/assets/CREDIT.txt +1 -0
  4. comfyui_frontend_package/static/assets/DesktopStartView-BzszfQbD.js +19 -0
  5. comfyui_frontend_package/static/assets/DesktopStartView-BzszfQbD.js.map +1 -0
  6. comfyui_frontend_package/static/assets/DesktopUpdateView-CoZUcBzh.css +20 -0
  7. comfyui_frontend_package/static/assets/DesktopUpdateView-D0b0SoOf.js +59 -0
  8. comfyui_frontend_package/static/assets/DesktopUpdateView-D0b0SoOf.js.map +1 -0
  9. comfyui_frontend_package/static/assets/DownloadGitView-D9dUxN1O.js +58 -0
  10. comfyui_frontend_package/static/assets/DownloadGitView-D9dUxN1O.js.map +1 -0
  11. comfyui_frontend_package/static/assets/ExtensionPanel-C8xcKQO_.js +182 -0
  12. comfyui_frontend_package/static/assets/ExtensionPanel-C8xcKQO_.js.map +1 -0
  13. comfyui_frontend_package/static/assets/GraphView-DlmVRoyu.css +404 -0
  14. comfyui_frontend_package/static/assets/GraphView-VqsZENk9.js +5306 -0
  15. comfyui_frontend_package/static/assets/GraphView-VqsZENk9.js.map +1 -0
  16. comfyui_frontend_package/static/assets/InstallView-B5n3tAa3.css +81 -0
  17. comfyui_frontend_package/static/assets/InstallView-DQBTHS7S.js +971 -0
  18. comfyui_frontend_package/static/assets/InstallView-DQBTHS7S.js.map +1 -0
  19. comfyui_frontend_package/static/assets/KeybindingPanel-CodLuhVC.js +292 -0
  20. comfyui_frontend_package/static/assets/KeybindingPanel-CodLuhVC.js.map +1 -0
  21. comfyui_frontend_package/static/assets/KeybindingPanel-CwPLIgAf.css +8 -0
  22. comfyui_frontend_package/static/assets/MaintenanceView-BS2HYnVf.js +770 -0
  23. comfyui_frontend_package/static/assets/MaintenanceView-BS2HYnVf.js.map +1 -0
  24. comfyui_frontend_package/static/assets/MaintenanceView-Cu_e206A.css +87 -0
  25. comfyui_frontend_package/static/assets/ManualConfigurationView-CKvjst4u.js +74 -0
  26. comfyui_frontend_package/static/assets/ManualConfigurationView-CKvjst4u.js.map +1 -0
  27. comfyui_frontend_package/static/assets/ManualConfigurationView-Cq3hPfap.css +7 -0
  28. comfyui_frontend_package/static/assets/MetricsConsentView-By6P4yiS.js +86 -0
  29. comfyui_frontend_package/static/assets/MetricsConsentView-By6P4yiS.js.map +1 -0
  30. comfyui_frontend_package/static/assets/NotSupportedView-BOGjtlpO.js +86 -0
  31. comfyui_frontend_package/static/assets/NotSupportedView-BOGjtlpO.js.map +1 -0
  32. comfyui_frontend_package/static/assets/NotSupportedView-BiyVuLfX.css +19 -0
  33. comfyui_frontend_package/static/assets/ServerConfigPanel-duFxCeLL.js +156 -0
  34. comfyui_frontend_package/static/assets/ServerConfigPanel-duFxCeLL.js.map +1 -0
  35. comfyui_frontend_package/static/assets/ServerStartView-BLlSvhJ0.css +5 -0
  36. comfyui_frontend_package/static/assets/ServerStartView-De-naYhY.js +100 -0
  37. comfyui_frontend_package/static/assets/ServerStartView-De-naYhY.js.map +1 -0
  38. comfyui_frontend_package/static/assets/TerminalOutputDrawer-Co7SzIYB.js +676 -0
  39. comfyui_frontend_package/static/assets/TerminalOutputDrawer-Co7SzIYB.js.map +1 -0
  40. comfyui_frontend_package/static/assets/UserSelectView-CkJZ1SMd.js +101 -0
  41. comfyui_frontend_package/static/assets/UserSelectView-CkJZ1SMd.js.map +1 -0
  42. comfyui_frontend_package/static/assets/WelcomeView-CfkBzmHu.js +39 -0
  43. comfyui_frontend_package/static/assets/WelcomeView-CfkBzmHu.js.map +1 -0
  44. comfyui_frontend_package/static/assets/WelcomeView-aCH40CSK.css +36 -0
  45. comfyui_frontend_package/static/assets/images/Git-Logo-White.svg +1 -0
  46. comfyui_frontend_package/static/assets/images/apple-mps-logo.png +0 -0
  47. comfyui_frontend_package/static/assets/images/manual-configuration.svg +5 -0
  48. comfyui_frontend_package/static/assets/images/nvidia-logo.svg +6 -0
  49. comfyui_frontend_package/static/assets/images/sad_girl.png +0 -0
  50. comfyui_frontend_package/static/assets/index-BUod660P.css +4972 -0
  51. comfyui_frontend_package/static/assets/index-Bg3tRJLv.js +4993 -0
  52. comfyui_frontend_package/static/assets/index-Bg3tRJLv.js.map +1 -0
  53. comfyui_frontend_package/static/assets/index-C2vcFsO-.js +54899 -0
  54. comfyui_frontend_package/static/assets/index-C2vcFsO-.js.map +1 -0
  55. comfyui_frontend_package/static/assets/index-CC55z89j.css +149 -0
  56. comfyui_frontend_package/static/assets/index-CCrbsdGI.js +24875 -0
  57. comfyui_frontend_package/static/assets/index-CCrbsdGI.js.map +1 -0
  58. comfyui_frontend_package/static/assets/index-D2ypqsdp.js +224952 -0
  59. comfyui_frontend_package/static/assets/index-D2ypqsdp.js.map +1 -0
  60. comfyui_frontend_package/static/assets/index-DHDw-qtg.js +8790 -0
  61. comfyui_frontend_package/static/assets/index-DHDw-qtg.js.map +1 -0
  62. comfyui_frontend_package/static/assets/index-DLVe1b1A.js +392 -0
  63. comfyui_frontend_package/static/assets/index-DLVe1b1A.js.map +1 -0
  64. comfyui_frontend_package/static/assets/index-DOdlfYlf.js +27 -0
  65. comfyui_frontend_package/static/assets/index-DOdlfYlf.js.map +1 -0
  66. comfyui_frontend_package/static/assets/index-Fv_JcF-L.js +618 -0
  67. comfyui_frontend_package/static/assets/index-Fv_JcF-L.js.map +1 -0
  68. comfyui_frontend_package/static/assets/index-KsjwLeDX.js +539 -0
  69. comfyui_frontend_package/static/assets/index-KsjwLeDX.js.map +1 -0
  70. comfyui_frontend_package/static/assets/keybindingService-VkfpM8k0.js +250 -0
  71. comfyui_frontend_package/static/assets/keybindingService-VkfpM8k0.js.map +1 -0
  72. comfyui_frontend_package/static/assets/primeicons-C6QP2o4f.woff2 +0 -0
  73. comfyui_frontend_package/static/assets/primeicons-DMOk5skT.eot +0 -0
  74. comfyui_frontend_package/static/assets/primeicons-Dr5RGzOO.svg +345 -0
  75. comfyui_frontend_package/static/assets/primeicons-MpK4pl85.ttf +0 -0
  76. comfyui_frontend_package/static/assets/primeicons-WjwUDZjB.woff +0 -0
  77. comfyui_frontend_package/static/assets/serverConfigStore-DfpVYG-S.js +90 -0
  78. comfyui_frontend_package/static/assets/serverConfigStore-DfpVYG-S.js.map +1 -0
  79. comfyui_frontend_package/static/assets/sorted-custom-node-map.json +2602 -0
  80. comfyui_frontend_package/static/assets/uvMirrors-DCz2jm9P.js +16 -0
  81. comfyui_frontend_package/static/assets/uvMirrors-DCz2jm9P.js.map +1 -0
  82. comfyui_frontend_package/static/cursor/colorSelect.png +0 -0
  83. comfyui_frontend_package/static/cursor/paintBucket.png +0 -0
  84. comfyui_frontend_package/static/extensions/core/clipspace.js +2 -0
  85. comfyui_frontend_package/static/extensions/core/groupNode.js +3 -0
  86. comfyui_frontend_package/static/extensions/core/groupNodeManage.js +2 -0
  87. comfyui_frontend_package/static/extensions/core/maskEditorOld.js +2 -0
  88. comfyui_frontend_package/static/extensions/core/widgetInputs.js +5 -0
  89. comfyui_frontend_package/static/fonts/materialdesignicons-webfont.woff2 +0 -0
  90. comfyui_frontend_package/static/index.html +15 -0
  91. comfyui_frontend_package/static/materialdesignicons.min.css +3 -0
  92. comfyui_frontend_package/static/scripts/api.js +3 -0
  93. comfyui_frontend_package/static/scripts/app.js +4 -0
  94. comfyui_frontend_package/static/scripts/changeTracker.js +2 -0
  95. comfyui_frontend_package/static/scripts/defaultGraph.js +4 -0
  96. comfyui_frontend_package/static/scripts/domWidget.js +2 -0
  97. comfyui_frontend_package/static/scripts/metadata/flac.js +3 -0
  98. comfyui_frontend_package/static/scripts/metadata/png.js +3 -0
  99. comfyui_frontend_package/static/scripts/pnginfo.js +6 -0
  100. comfyui_frontend_package/static/scripts/ui/components/asyncDialog.js +2 -0
  101. comfyui_frontend_package/static/scripts/ui/components/button.js +2 -0
  102. comfyui_frontend_package/static/scripts/ui/components/buttonGroup.js +2 -0
  103. comfyui_frontend_package/static/scripts/ui/components/popup.js +2 -0
  104. comfyui_frontend_package/static/scripts/ui/components/splitButton.js +2 -0
  105. comfyui_frontend_package/static/scripts/ui/dialog.js +2 -0
  106. comfyui_frontend_package/static/scripts/ui/draggableList.js +2 -0
  107. comfyui_frontend_package/static/scripts/ui/imagePreview.js +3 -0
  108. comfyui_frontend_package/static/scripts/ui/menu/index.js +2 -0
  109. comfyui_frontend_package/static/scripts/ui/settings.js +2 -0
  110. comfyui_frontend_package/static/scripts/ui/toggleSwitch.js +2 -0
  111. comfyui_frontend_package/static/scripts/ui/utils.js +3 -0
  112. comfyui_frontend_package/static/scripts/ui.js +4 -0
  113. comfyui_frontend_package/static/scripts/utils.js +9 -0
  114. comfyui_frontend_package/static/scripts/widgets.js +6 -0
  115. comfyui_frontend_package/static/templates/2_pass_pose_worship-1.webp +0 -0
  116. comfyui_frontend_package/static/templates/2_pass_pose_worship-2.webp +0 -0
  117. comfyui_frontend_package/static/templates/2_pass_pose_worship.json +673 -0
  118. comfyui_frontend_package/static/templates/area_composition-1.webp +0 -0
  119. comfyui_frontend_package/static/templates/area_composition.json +966 -0
  120. comfyui_frontend_package/static/templates/area_composition_reversed-1.webp +0 -0
  121. comfyui_frontend_package/static/templates/area_composition_reversed.json +967 -0
  122. comfyui_frontend_package/static/templates/area_composition_square_area_for_subject-1.webp +0 -0
  123. comfyui_frontend_package/static/templates/area_composition_square_area_for_subject.json +620 -0
  124. comfyui_frontend_package/static/templates/controlnet_example-1.webp +0 -0
  125. comfyui_frontend_package/static/templates/controlnet_example-2.webp +0 -0
  126. comfyui_frontend_package/static/templates/controlnet_example.json +385 -0
  127. comfyui_frontend_package/static/templates/default-1.webp +0 -0
  128. comfyui_frontend_package/static/templates/default.json +356 -0
  129. comfyui_frontend_package/static/templates/depth_controlnet-1.webp +0 -0
  130. comfyui_frontend_package/static/templates/depth_controlnet-2.webp +0 -0
  131. comfyui_frontend_package/static/templates/depth_controlnet.json +378 -0
  132. comfyui_frontend_package/static/templates/depth_t2i_adapter-1.webp +0 -0
  133. comfyui_frontend_package/static/templates/depth_t2i_adapter-2.webp +0 -0
  134. comfyui_frontend_package/static/templates/depth_t2i_adapter.json +371 -0
  135. comfyui_frontend_package/static/templates/embedding_example-1.webp +0 -0
  136. comfyui_frontend_package/static/templates/embedding_example.json +267 -0
  137. comfyui_frontend_package/static/templates/esrgan_example-1.webp +0 -0
  138. comfyui_frontend_package/static/templates/esrgan_example.json +329 -0
  139. comfyui_frontend_package/static/templates/flux_canny_model_example-1.webp +0 -0
  140. comfyui_frontend_package/static/templates/flux_canny_model_example-2.webp +0 -0
  141. comfyui_frontend_package/static/templates/flux_canny_model_example.json +474 -0
  142. comfyui_frontend_package/static/templates/flux_depth_lora_example-1.webp +0 -0
  143. comfyui_frontend_package/static/templates/flux_depth_lora_example-2.webp +0 -0
  144. comfyui_frontend_package/static/templates/flux_depth_lora_example.json +454 -0
  145. comfyui_frontend_package/static/templates/flux_dev_checkpoint_example-1.webp +0 -0
  146. comfyui_frontend_package/static/templates/flux_dev_checkpoint_example.json +332 -0
  147. comfyui_frontend_package/static/templates/flux_dev_example.json +771 -0
  148. comfyui_frontend_package/static/templates/flux_fill_inpaint_example-1.webp +0 -0
  149. comfyui_frontend_package/static/templates/flux_fill_inpaint_example-2.webp +0 -0
  150. comfyui_frontend_package/static/templates/flux_fill_inpaint_example.json +458 -0
  151. comfyui_frontend_package/static/templates/flux_fill_outpaint_example-1.webp +0 -0
  152. comfyui_frontend_package/static/templates/flux_fill_outpaint_example-2.webp +0 -0
  153. comfyui_frontend_package/static/templates/flux_fill_outpaint_example.json +491 -0
  154. comfyui_frontend_package/static/templates/flux_redux_model_example-1.webp +0 -0
  155. comfyui_frontend_package/static/templates/flux_redux_model_example.json +951 -0
  156. comfyui_frontend_package/static/templates/flux_schnell-1.webp +0 -0
  157. comfyui_frontend_package/static/templates/flux_schnell.json +302 -0
  158. comfyui_frontend_package/static/templates/gligen_textbox_example-1.webp +0 -0
  159. comfyui_frontend_package/static/templates/gligen_textbox_example.json +376 -0
  160. comfyui_frontend_package/static/templates/hiresfix_esrgan_workflow-1.webp +0 -0
  161. comfyui_frontend_package/static/templates/hiresfix_esrgan_workflow.json +607 -0
  162. comfyui_frontend_package/static/templates/hiresfix_latent_workflow-1.webp +0 -0
  163. comfyui_frontend_package/static/templates/hiresfix_latent_workflow.json +442 -0
  164. comfyui_frontend_package/static/templates/hunyuan_video_text_to_video-1.webp +0 -0
  165. comfyui_frontend_package/static/templates/hunyuan_video_text_to_video.json +553 -0
  166. comfyui_frontend_package/static/templates/image2image-1.webp +0 -0
  167. comfyui_frontend_package/static/templates/image2image.json +447 -0
  168. comfyui_frontend_package/static/templates/image_to_video-1.webp +0 -0
  169. comfyui_frontend_package/static/templates/image_to_video.json +314 -0
  170. comfyui_frontend_package/static/templates/inpain_model_outpainting-1.webp +0 -0
  171. comfyui_frontend_package/static/templates/inpain_model_outpainting-2.webp +0 -0
  172. comfyui_frontend_package/static/templates/inpain_model_outpainting.json +360 -0
  173. comfyui_frontend_package/static/templates/inpaint_example-1.webp +0 -0
  174. comfyui_frontend_package/static/templates/inpaint_example-2.webp +0 -0
  175. comfyui_frontend_package/static/templates/inpaint_example.json +323 -0
  176. comfyui_frontend_package/static/templates/latent_upscale_different_prompt_model-1.webp +0 -0
  177. comfyui_frontend_package/static/templates/latent_upscale_different_prompt_model.json +528 -0
  178. comfyui_frontend_package/static/templates/lora-1.webp +0 -0
  179. comfyui_frontend_package/static/templates/lora.json +311 -0
  180. comfyui_frontend_package/static/templates/lora_multiple-1.webp +0 -0
  181. comfyui_frontend_package/static/templates/lora_multiple.json +357 -0
  182. comfyui_frontend_package/static/templates/ltxv_image_to_video-1.webp +0 -0
  183. comfyui_frontend_package/static/templates/ltxv_image_to_video.json +482 -0
  184. comfyui_frontend_package/static/templates/ltxv_text_to_video-1.webp +0 -0
  185. comfyui_frontend_package/static/templates/ltxv_text_to_video.json +419 -0
  186. comfyui_frontend_package/static/templates/mixing_controlnets-1.webp +0 -0
  187. comfyui_frontend_package/static/templates/mixing_controlnets-2.webp +0 -0
  188. comfyui_frontend_package/static/templates/mixing_controlnets.json +492 -0
  189. comfyui_frontend_package/static/templates/mochi_text_to_video_example-1.webp +0 -0
  190. comfyui_frontend_package/static/templates/mochi_text_to_video_example.json +308 -0
  191. comfyui_frontend_package/static/templates/sd3.5_large_blur-1.webp +0 -0
  192. comfyui_frontend_package/static/templates/sd3.5_large_blur-2.webp +0 -0
  193. comfyui_frontend_package/static/templates/sd3.5_large_blur.json +582 -0
  194. comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example-1.webp +0 -0
  195. comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example-2.webp +0 -0
  196. comfyui_frontend_package/static/templates/sd3.5_large_canny_controlnet_example.json +470 -0
  197. comfyui_frontend_package/static/templates/sd3.5_large_depth-1.webp +0 -0
  198. comfyui_frontend_package/static/templates/sd3.5_large_depth-2.webp +0 -0
  199. comfyui_frontend_package/static/templates/sd3.5_large_depth.json +713 -0
  200. comfyui_frontend_package/static/templates/sd3.5_simple_example-1.webp +0 -0
  201. comfyui_frontend_package/static/templates/sd3.5_simple_example.json +278 -0
  202. comfyui_frontend_package/static/templates/sdxl_refiner_prompt_example-1.webp +0 -0
  203. comfyui_frontend_package/static/templates/sdxl_refiner_prompt_example.json +728 -0
  204. comfyui_frontend_package/static/templates/sdxl_revision_text_prompts-1.webp +0 -0
  205. comfyui_frontend_package/static/templates/sdxl_revision_text_prompts.json +490 -0
  206. comfyui_frontend_package/static/templates/sdxl_revision_zero_positive-1.webp +0 -0
  207. comfyui_frontend_package/static/templates/sdxl_revision_zero_positive.json +494 -0
  208. comfyui_frontend_package/static/templates/sdxl_simple_example-1.webp +0 -0
  209. comfyui_frontend_package/static/templates/sdxl_simple_example.json +896 -0
  210. comfyui_frontend_package/static/templates/sdxlturbo_example-1.webp +0 -0
  211. comfyui_frontend_package/static/templates/sdxlturbo_example.json +372 -0
  212. comfyui_frontend_package/static/templates/stable_audio_example-1.flac +0 -0
  213. comfyui_frontend_package/static/templates/stable_audio_example.json +302 -0
  214. comfyui_frontend_package/static/templates/stable_zero123_example-1.webp +0 -0
  215. comfyui_frontend_package/static/templates/stable_zero123_example.json +273 -0
  216. comfyui_frontend_package/static/templates/txt_to_image_to_video-1.webp +0 -0
  217. comfyui_frontend_package/static/templates/txt_to_image_to_video.json +535 -0
  218. comfyui_frontend_package/static/user.css +1 -0
  219. {comfyui_frontend_package-1.10.16.dist-info → comfyui_frontend_package-1.10.18.dist-info}/METADATA +1 -1
  220. comfyui_frontend_package-1.10.18.dist-info/RECORD +223 -0
  221. comfyui_frontend_package-1.10.18.dist-info/top_level.txt +1 -0
  222. comfyui_frontend_package-1.10.16.dist-info/RECORD +0 -5
  223. comfyui_frontend_package-1.10.16.dist-info/top_level.txt +0 -1
  224. {comfyui_frontend → comfyui_frontend_package}/__init__.py +0 -0
  225. {comfyui_frontend_package-1.10.16.dist-info → comfyui_frontend_package-1.10.18.dist-info}/WHEEL +0 -0
@@ -0,0 +1,971 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { d as defineComponent, T as ref, bx as useModel, o as openBlock, f as createElementBlock, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, by as script, bs as script$1, aC as withModifiers, z as withCtx, an as script$2, I as useI18n, c as computed, Y as normalizeClass, B as createCommentVNode, ag as script$3, aj as createTextVNode, bg as electronAPI, _ as _export_sfc, p as onMounted, r as resolveDirective, br as script$4, i as withDirectives, bz as script$5, bA as script$6, l as script$7, y as createBlock, bu as script$8, bB as MigrationItems, w as watchEffect, F as Fragment, D as renderList, bC as script$9, bD as mergeModels, bE as ValidationState, X as normalizeI18nKey, N as watch, bF as checkMirrorReachable, bG as _sfc_main$7, bH as isInChina, bI as mergeValidationStates, bn as t, a7 as script$a, bJ as CUDA_TORCH_URL, bK as NIGHTLY_CPU_TORCH_URL, bp as useRouter, as as toRaw } from "./index-D2ypqsdp.js";
4
+ import { s as script$b, a as script$c, b as script$d, c as script$e, d as script$f } from "./index-KsjwLeDX.js";
5
+ import { P as PYTHON_MIRROR, a as PYPI_MIRROR } from "./uvMirrors-DCz2jm9P.js";
6
+ import { _ as _sfc_main$8 } from "./BaseViewTemplate-BKJWSNY3.js";
7
+ const _hoisted_1$5 = { class: "flex flex-col gap-6 w-[600px]" };
8
+ const _hoisted_2$5 = { class: "flex flex-col gap-4" };
9
+ const _hoisted_3$5 = { class: "text-2xl font-semibold text-neutral-100" };
10
+ const _hoisted_4$5 = { class: "text-neutral-400 my-0" };
11
+ const _hoisted_5$3 = { class: "flex flex-col bg-neutral-800 p-4 rounded-lg" };
12
+ const _hoisted_6$3 = { class: "flex items-center gap-4" };
13
+ const _hoisted_7$3 = { class: "flex-1" };
14
+ const _hoisted_8$3 = { class: "text-lg font-medium text-neutral-100" };
15
+ const _hoisted_9$3 = { class: "text-sm text-neutral-400 mt-1" };
16
+ const _hoisted_10$3 = { class: "flex items-center gap-4" };
17
+ const _hoisted_11$3 = { class: "flex-1" };
18
+ const _hoisted_12$3 = { class: "text-lg font-medium text-neutral-100" };
19
+ const _hoisted_13$1 = { class: "text-sm text-neutral-400 mt-1" };
20
+ const _hoisted_14$1 = { class: "text-neutral-300" };
21
+ const _hoisted_15 = { class: "font-medium mb-2" };
22
+ const _hoisted_16 = { class: "list-disc pl-6 space-y-1" };
23
+ const _hoisted_17 = { class: "font-medium mt-4 mb-2" };
24
+ const _hoisted_18 = { class: "list-disc pl-6 space-y-1" };
25
+ const _hoisted_19 = { class: "mt-4" };
26
+ const _hoisted_20 = {
27
+ href: "https://comfy.org/privacy",
28
+ target: "_blank",
29
+ class: "text-blue-400 hover:text-blue-300 underline"
30
+ };
31
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
32
+ __name: "DesktopSettingsConfiguration",
33
+ props: {
34
+ "autoUpdate": { type: Boolean, ...{ required: true } },
35
+ "autoUpdateModifiers": {},
36
+ "allowMetrics": { type: Boolean, ...{ required: true } },
37
+ "allowMetricsModifiers": {}
38
+ },
39
+ emits: ["update:autoUpdate", "update:allowMetrics"],
40
+ setup(__props) {
41
+ const showDialog = ref(false);
42
+ const autoUpdate = useModel(__props, "autoUpdate");
43
+ const allowMetrics = useModel(__props, "allowMetrics");
44
+ const showMetricsInfo = /* @__PURE__ */ __name(() => {
45
+ showDialog.value = true;
46
+ }, "showMetricsInfo");
47
+ return (_ctx, _cache) => {
48
+ return openBlock(), createElementBlock("div", _hoisted_1$5, [
49
+ createBaseVNode("div", _hoisted_2$5, [
50
+ createBaseVNode("h2", _hoisted_3$5, toDisplayString(_ctx.$t("install.desktopAppSettings")), 1),
51
+ createBaseVNode("p", _hoisted_4$5, toDisplayString(_ctx.$t("install.desktopAppSettingsDescription")), 1)
52
+ ]),
53
+ createBaseVNode("div", _hoisted_5$3, [
54
+ createBaseVNode("div", _hoisted_6$3, [
55
+ createBaseVNode("div", _hoisted_7$3, [
56
+ createBaseVNode("h3", _hoisted_8$3, toDisplayString(_ctx.$t("install.settings.autoUpdate")), 1),
57
+ createBaseVNode("p", _hoisted_9$3, toDisplayString(_ctx.$t("install.settings.autoUpdateDescription")), 1)
58
+ ]),
59
+ createVNode(unref(script), {
60
+ modelValue: autoUpdate.value,
61
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => autoUpdate.value = $event)
62
+ }, null, 8, ["modelValue"])
63
+ ]),
64
+ createVNode(unref(script$1)),
65
+ createBaseVNode("div", _hoisted_10$3, [
66
+ createBaseVNode("div", _hoisted_11$3, [
67
+ createBaseVNode("h3", _hoisted_12$3, toDisplayString(_ctx.$t("install.settings.allowMetrics")), 1),
68
+ createBaseVNode("p", _hoisted_13$1, toDisplayString(_ctx.$t("install.settings.allowMetricsDescription")), 1),
69
+ createBaseVNode("a", {
70
+ href: "#",
71
+ class: "text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block",
72
+ onClick: withModifiers(showMetricsInfo, ["prevent"])
73
+ }, toDisplayString(_ctx.$t("install.settings.learnMoreAboutData")), 1)
74
+ ]),
75
+ createVNode(unref(script), {
76
+ modelValue: allowMetrics.value,
77
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => allowMetrics.value = $event)
78
+ }, null, 8, ["modelValue"])
79
+ ])
80
+ ]),
81
+ createVNode(unref(script$2), {
82
+ visible: showDialog.value,
83
+ "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => showDialog.value = $event),
84
+ modal: "",
85
+ header: _ctx.$t("install.settings.dataCollectionDialog.title")
86
+ }, {
87
+ default: withCtx(() => [
88
+ createBaseVNode("div", _hoisted_14$1, [
89
+ createBaseVNode("h4", _hoisted_15, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeCollect")), 1),
90
+ createBaseVNode("ul", _hoisted_16, [
91
+ createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.errorReports")), 1),
92
+ createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.systemInfo")), 1),
93
+ createBaseVNode("li", null, toDisplayString(_ctx.$t(
94
+ "install.settings.dataCollectionDialog.collect.userJourneyEvents"
95
+ )), 1)
96
+ ]),
97
+ createBaseVNode("h4", _hoisted_17, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeDoNotCollect")), 1),
98
+ createBaseVNode("ul", _hoisted_18, [
99
+ createBaseVNode("li", null, toDisplayString(_ctx.$t(
100
+ "install.settings.dataCollectionDialog.doNotCollect.personalInformation"
101
+ )), 1),
102
+ createBaseVNode("li", null, toDisplayString(_ctx.$t(
103
+ "install.settings.dataCollectionDialog.doNotCollect.workflowContents"
104
+ )), 1),
105
+ createBaseVNode("li", null, toDisplayString(_ctx.$t(
106
+ "install.settings.dataCollectionDialog.doNotCollect.fileSystemInformation"
107
+ )), 1),
108
+ createBaseVNode("li", null, toDisplayString(_ctx.$t(
109
+ "install.settings.dataCollectionDialog.doNotCollect.customNodeConfigurations"
110
+ )), 1)
111
+ ]),
112
+ createBaseVNode("div", _hoisted_19, [
113
+ createBaseVNode("a", _hoisted_20, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.viewFullPolicy")), 1)
114
+ ])
115
+ ])
116
+ ]),
117
+ _: 1
118
+ }, 8, ["visible", "header"])
119
+ ]);
120
+ };
121
+ }
122
+ });
123
+ const _imports_0 = "" + new URL("images/nvidia-logo.svg", import.meta.url).href;
124
+ const _imports_1 = "" + new URL("images/apple-mps-logo.png", import.meta.url).href;
125
+ const _imports_2 = "" + new URL("images/manual-configuration.svg", import.meta.url).href;
126
+ const _hoisted_1$4 = { class: "flex flex-col gap-6 w-[600px] h-[30rem] select-none" };
127
+ const _hoisted_2$4 = { class: "grow flex flex-col gap-4 text-neutral-300" };
128
+ const _hoisted_3$4 = { class: "text-2xl font-semibold text-neutral-100" };
129
+ const _hoisted_4$4 = { class: "m-1 text-neutral-400" };
130
+ const _hoisted_5$2 = {
131
+ key: 0,
132
+ class: "m-1"
133
+ };
134
+ const _hoisted_6$2 = {
135
+ key: 1,
136
+ class: "m-1"
137
+ };
138
+ const _hoisted_7$2 = {
139
+ key: 2,
140
+ class: "text-neutral-300"
141
+ };
142
+ const _hoisted_8$2 = { class: "m-1" };
143
+ const _hoisted_9$2 = { key: 3 };
144
+ const _hoisted_10$2 = { class: "m-1" };
145
+ const _hoisted_11$2 = { class: "m-1" };
146
+ const _hoisted_12$2 = {
147
+ for: "cpu-mode",
148
+ class: "select-none"
149
+ };
150
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
151
+ __name: "GpuPicker",
152
+ props: {
153
+ "device": {
154
+ required: true
155
+ },
156
+ "deviceModifiers": {}
157
+ },
158
+ emits: ["update:device"],
159
+ setup(__props) {
160
+ const { t: t2 } = useI18n();
161
+ const cpuMode = computed({
162
+ get: /* @__PURE__ */ __name(() => selected.value === "cpu", "get"),
163
+ set: /* @__PURE__ */ __name((value) => {
164
+ selected.value = value ? "cpu" : null;
165
+ }, "set")
166
+ });
167
+ const selected = useModel(__props, "device");
168
+ const electron = electronAPI();
169
+ const platform = electron.getPlatform();
170
+ const pickGpu = /* @__PURE__ */ __name((value) => {
171
+ const newValue = selected.value === value ? null : value;
172
+ selected.value = newValue;
173
+ }, "pickGpu");
174
+ return (_ctx, _cache) => {
175
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
176
+ createBaseVNode("div", _hoisted_2$4, [
177
+ createBaseVNode("h2", _hoisted_3$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpu")), 1),
178
+ createBaseVNode("p", _hoisted_4$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpuDescription")) + ": ", 1),
179
+ createBaseVNode("div", {
180
+ class: normalizeClass(["flex gap-2 text-center transition-opacity", { selected: selected.value }])
181
+ }, [
182
+ unref(platform) !== "darwin" ? (openBlock(), createElementBlock("div", {
183
+ key: 0,
184
+ class: normalizeClass(["gpu-button", { selected: selected.value === "nvidia" }]),
185
+ role: "button",
186
+ onClick: _cache[0] || (_cache[0] = ($event) => pickGpu("nvidia"))
187
+ }, _cache[4] || (_cache[4] = [
188
+ createBaseVNode("img", {
189
+ class: "m-12",
190
+ alt: "NVIDIA logo",
191
+ width: "196",
192
+ height: "32",
193
+ src: _imports_0
194
+ }, null, -1)
195
+ ]), 2)) : createCommentVNode("", true),
196
+ unref(platform) === "darwin" ? (openBlock(), createElementBlock("div", {
197
+ key: 1,
198
+ class: normalizeClass(["gpu-button", { selected: selected.value === "mps" }]),
199
+ role: "button",
200
+ onClick: _cache[1] || (_cache[1] = ($event) => pickGpu("mps"))
201
+ }, _cache[5] || (_cache[5] = [
202
+ createBaseVNode("img", {
203
+ class: "rounded-lg hover-brighten",
204
+ alt: "Apple Metal Performance Shaders Logo",
205
+ width: "292",
206
+ ratio: "",
207
+ src: _imports_1
208
+ }, null, -1)
209
+ ]), 2)) : createCommentVNode("", true),
210
+ createBaseVNode("div", {
211
+ class: normalizeClass(["gpu-button", { selected: selected.value === "unsupported" }]),
212
+ role: "button",
213
+ onClick: _cache[2] || (_cache[2] = ($event) => pickGpu("unsupported"))
214
+ }, _cache[6] || (_cache[6] = [
215
+ createBaseVNode("img", {
216
+ class: "m-12",
217
+ alt: "Manual configuration",
218
+ width: "196",
219
+ src: _imports_2
220
+ }, null, -1)
221
+ ]), 2)
222
+ ], 2),
223
+ selected.value === "nvidia" ? (openBlock(), createElementBlock("p", _hoisted_5$2, [
224
+ createVNode(unref(script$3), {
225
+ icon: "pi pi-check",
226
+ severity: "success",
227
+ value: "CUDA"
228
+ }),
229
+ createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.nvidiaDescription")), 1)
230
+ ])) : createCommentVNode("", true),
231
+ selected.value === "mps" ? (openBlock(), createElementBlock("p", _hoisted_6$2, [
232
+ createVNode(unref(script$3), {
233
+ icon: "pi pi-check",
234
+ severity: "success",
235
+ value: "MPS"
236
+ }),
237
+ createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.mpsDescription")), 1)
238
+ ])) : createCommentVNode("", true),
239
+ selected.value === "unsupported" ? (openBlock(), createElementBlock("div", _hoisted_7$2, [
240
+ createBaseVNode("p", _hoisted_8$2, [
241
+ createVNode(unref(script$3), {
242
+ icon: "pi pi-exclamation-triangle",
243
+ severity: "warn",
244
+ value: unref(t2)("icon.exclamation-triangle")
245
+ }, null, 8, ["value"]),
246
+ createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.customSkipsPython")), 1)
247
+ ]),
248
+ createBaseVNode("ul", null, [
249
+ createBaseVNode("li", null, [
250
+ createBaseVNode("strong", null, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1)
251
+ ]),
252
+ createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1),
253
+ createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1),
254
+ createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customMayNotWork")), 1)
255
+ ])
256
+ ])) : createCommentVNode("", true),
257
+ selected.value === "cpu" ? (openBlock(), createElementBlock("div", _hoisted_9$2, [
258
+ createBaseVNode("p", _hoisted_10$2, [
259
+ createVNode(unref(script$3), {
260
+ icon: "pi pi-exclamation-triangle",
261
+ severity: "warn",
262
+ value: unref(t2)("icon.exclamation-triangle")
263
+ }, null, 8, ["value"]),
264
+ createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription")), 1)
265
+ ]),
266
+ createBaseVNode("p", _hoisted_11$2, toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription2")), 1)
267
+ ])) : createCommentVNode("", true)
268
+ ]),
269
+ createBaseVNode("div", {
270
+ class: normalizeClass(["transition-opacity flex gap-3 h-0", {
271
+ "opacity-40": selected.value && selected.value !== "cpu"
272
+ }])
273
+ }, [
274
+ createVNode(unref(script), {
275
+ modelValue: cpuMode.value,
276
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => cpuMode.value = $event),
277
+ inputId: "cpu-mode",
278
+ class: "-translate-y-40"
279
+ }, null, 8, ["modelValue"]),
280
+ createBaseVNode("label", _hoisted_12$2, toDisplayString(_ctx.$t("install.gpuSelection.enableCpuMode")), 1)
281
+ ], 2)
282
+ ]);
283
+ };
284
+ }
285
+ });
286
+ const GpuPicker = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-79125ff6"]]);
287
+ const _hoisted_1$3 = { class: "flex flex-col gap-6 w-[600px]" };
288
+ const _hoisted_2$3 = { class: "flex flex-col gap-4" };
289
+ const _hoisted_3$3 = { class: "text-2xl font-semibold text-neutral-100" };
290
+ const _hoisted_4$3 = { class: "text-neutral-400 my-0" };
291
+ const _hoisted_5$1 = { class: "flex gap-2" };
292
+ const _hoisted_6$1 = { class: "bg-neutral-800 p-4 rounded-lg" };
293
+ const _hoisted_7$1 = { class: "text-lg font-medium mt-0 mb-3 text-neutral-100" };
294
+ const _hoisted_8$1 = { class: "flex flex-col gap-2" };
295
+ const _hoisted_9$1 = { class: "flex items-center gap-2" };
296
+ const _hoisted_10$1 = { class: "text-neutral-200" };
297
+ const _hoisted_11$1 = { class: "pi pi-info-circle" };
298
+ const _hoisted_12$1 = { class: "flex items-center gap-2" };
299
+ const _hoisted_13 = { class: "text-neutral-200" };
300
+ const _hoisted_14 = { class: "pi pi-info-circle" };
301
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
302
+ __name: "InstallLocationPicker",
303
+ props: {
304
+ "installPath": { required: true },
305
+ "installPathModifiers": {},
306
+ "pathError": { required: true },
307
+ "pathErrorModifiers": {}
308
+ },
309
+ emits: ["update:installPath", "update:pathError"],
310
+ setup(__props) {
311
+ const { t: t2 } = useI18n();
312
+ const installPath = useModel(__props, "installPath");
313
+ const pathError = useModel(__props, "pathError");
314
+ const pathExists = ref(false);
315
+ const appData = ref("");
316
+ const appPath = ref("");
317
+ const inputTouched = ref(false);
318
+ const electron = electronAPI();
319
+ onMounted(async () => {
320
+ const paths = await electron.getSystemPaths();
321
+ appData.value = paths.appData;
322
+ appPath.value = paths.appPath;
323
+ installPath.value = paths.defaultInstallPath;
324
+ await validatePath(paths.defaultInstallPath);
325
+ });
326
+ const validatePath = /* @__PURE__ */ __name(async (path) => {
327
+ try {
328
+ pathError.value = "";
329
+ pathExists.value = false;
330
+ const validation = await electron.validateInstallPath(path);
331
+ if (!validation.isValid) {
332
+ const errors = [];
333
+ if (validation.cannotWrite) errors.push(t2("install.cannotWrite"));
334
+ if (validation.freeSpace < validation.requiredSpace) {
335
+ const requiredGB = validation.requiredSpace / 1024 / 1024 / 1024;
336
+ errors.push(`${t2("install.insufficientFreeSpace")}: ${requiredGB} GB`);
337
+ }
338
+ if (validation.parentMissing) errors.push(t2("install.parentMissing"));
339
+ if (validation.error)
340
+ errors.push(`${t2("install.unhandledError")}: ${validation.error}`);
341
+ pathError.value = errors.join("\n");
342
+ }
343
+ if (validation.exists) pathExists.value = true;
344
+ } catch (error) {
345
+ pathError.value = t2("install.pathValidationFailed");
346
+ }
347
+ }, "validatePath");
348
+ const browsePath = /* @__PURE__ */ __name(async () => {
349
+ try {
350
+ const result = await electron.showDirectoryPicker();
351
+ if (result) {
352
+ installPath.value = result;
353
+ await validatePath(result);
354
+ }
355
+ } catch (error) {
356
+ pathError.value = t2("install.failedToSelectDirectory");
357
+ }
358
+ }, "browsePath");
359
+ const onFocus = /* @__PURE__ */ __name(() => {
360
+ if (!inputTouched.value) {
361
+ inputTouched.value = true;
362
+ return;
363
+ }
364
+ validatePath(installPath.value);
365
+ }, "onFocus");
366
+ return (_ctx, _cache) => {
367
+ const _directive_tooltip = resolveDirective("tooltip");
368
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [
369
+ createBaseVNode("div", _hoisted_2$3, [
370
+ createBaseVNode("h2", _hoisted_3$3, toDisplayString(_ctx.$t("install.chooseInstallationLocation")), 1),
371
+ createBaseVNode("p", _hoisted_4$3, toDisplayString(_ctx.$t("install.installLocationDescription")), 1),
372
+ createBaseVNode("div", _hoisted_5$1, [
373
+ createVNode(unref(script$6), { class: "flex-1" }, {
374
+ default: withCtx(() => [
375
+ createVNode(unref(script$4), {
376
+ modelValue: installPath.value,
377
+ "onUpdate:modelValue": [
378
+ _cache[0] || (_cache[0] = ($event) => installPath.value = $event),
379
+ validatePath
380
+ ],
381
+ class: normalizeClass(["w-full", { "p-invalid": pathError.value }]),
382
+ onFocus
383
+ }, null, 8, ["modelValue", "class"]),
384
+ withDirectives(createVNode(unref(script$5), { class: "pi pi-info-circle" }, null, 512), [
385
+ [
386
+ _directive_tooltip,
387
+ _ctx.$t("install.installLocationTooltip"),
388
+ void 0,
389
+ { top: true }
390
+ ]
391
+ ])
392
+ ]),
393
+ _: 1
394
+ }),
395
+ createVNode(unref(script$7), {
396
+ icon: "pi pi-folder",
397
+ onClick: browsePath,
398
+ class: "w-12"
399
+ })
400
+ ]),
401
+ pathError.value ? (openBlock(), createBlock(unref(script$8), {
402
+ key: 0,
403
+ severity: "error",
404
+ class: "whitespace-pre-line"
405
+ }, {
406
+ default: withCtx(() => [
407
+ createTextVNode(toDisplayString(pathError.value), 1)
408
+ ]),
409
+ _: 1
410
+ })) : createCommentVNode("", true),
411
+ pathExists.value ? (openBlock(), createBlock(unref(script$8), {
412
+ key: 1,
413
+ severity: "warn"
414
+ }, {
415
+ default: withCtx(() => [
416
+ createTextVNode(toDisplayString(_ctx.$t("install.pathExists")), 1)
417
+ ]),
418
+ _: 1
419
+ })) : createCommentVNode("", true)
420
+ ]),
421
+ createBaseVNode("div", _hoisted_6$1, [
422
+ createBaseVNode("h3", _hoisted_7$1, toDisplayString(_ctx.$t("install.systemLocations")), 1),
423
+ createBaseVNode("div", _hoisted_8$1, [
424
+ createBaseVNode("div", _hoisted_9$1, [
425
+ _cache[1] || (_cache[1] = createBaseVNode("i", { class: "pi pi-folder text-neutral-400" }, null, -1)),
426
+ _cache[2] || (_cache[2] = createBaseVNode("span", { class: "text-neutral-400" }, "App Data:", -1)),
427
+ createBaseVNode("span", _hoisted_10$1, toDisplayString(appData.value), 1),
428
+ withDirectives(createBaseVNode("span", _hoisted_11$1, null, 512), [
429
+ [_directive_tooltip, _ctx.$t("install.appDataLocationTooltip")]
430
+ ])
431
+ ]),
432
+ createBaseVNode("div", _hoisted_12$1, [
433
+ _cache[3] || (_cache[3] = createBaseVNode("i", { class: "pi pi-desktop text-neutral-400" }, null, -1)),
434
+ _cache[4] || (_cache[4] = createBaseVNode("span", { class: "text-neutral-400" }, "App Path:", -1)),
435
+ createBaseVNode("span", _hoisted_13, toDisplayString(appPath.value), 1),
436
+ withDirectives(createBaseVNode("span", _hoisted_14, null, 512), [
437
+ [_directive_tooltip, _ctx.$t("install.appPathLocationTooltip")]
438
+ ])
439
+ ])
440
+ ])
441
+ ])
442
+ ]);
443
+ };
444
+ }
445
+ });
446
+ const _hoisted_1$2 = { class: "flex flex-col gap-6 w-[600px]" };
447
+ const _hoisted_2$2 = { class: "flex flex-col gap-4" };
448
+ const _hoisted_3$2 = { class: "text-2xl font-semibold text-neutral-100" };
449
+ const _hoisted_4$2 = { class: "text-neutral-400 my-0" };
450
+ const _hoisted_5 = { class: "flex gap-2" };
451
+ const _hoisted_6 = {
452
+ key: 0,
453
+ class: "flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg"
454
+ };
455
+ const _hoisted_7 = { class: "text-lg mt-0 font-medium text-neutral-100" };
456
+ const _hoisted_8 = { class: "flex flex-col gap-3" };
457
+ const _hoisted_9 = ["onClick"];
458
+ const _hoisted_10 = ["for"];
459
+ const _hoisted_11 = { class: "text-sm text-neutral-400 my-1" };
460
+ const _hoisted_12 = {
461
+ key: 1,
462
+ class: "text-neutral-400 italic"
463
+ };
464
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
465
+ __name: "MigrationPicker",
466
+ props: {
467
+ "sourcePath": { required: false },
468
+ "sourcePathModifiers": {},
469
+ "migrationItemIds": {
470
+ required: false
471
+ },
472
+ "migrationItemIdsModifiers": {}
473
+ },
474
+ emits: ["update:sourcePath", "update:migrationItemIds"],
475
+ setup(__props) {
476
+ const { t: t2 } = useI18n();
477
+ const electron = electronAPI();
478
+ const sourcePath = useModel(__props, "sourcePath");
479
+ const migrationItemIds = useModel(__props, "migrationItemIds");
480
+ const migrationItems = ref(
481
+ MigrationItems.map((item) => ({
482
+ ...item,
483
+ selected: true
484
+ }))
485
+ );
486
+ const pathError = ref("");
487
+ const isValidSource = computed(
488
+ () => sourcePath.value !== "" && pathError.value === ""
489
+ );
490
+ const validateSource = /* @__PURE__ */ __name(async (sourcePath2) => {
491
+ if (!sourcePath2) {
492
+ pathError.value = "";
493
+ return;
494
+ }
495
+ try {
496
+ pathError.value = "";
497
+ const validation = await electron.validateComfyUISource(sourcePath2);
498
+ if (!validation.isValid) pathError.value = validation.error;
499
+ } catch (error) {
500
+ console.error(error);
501
+ pathError.value = t2("install.pathValidationFailed");
502
+ }
503
+ }, "validateSource");
504
+ const browsePath = /* @__PURE__ */ __name(async () => {
505
+ try {
506
+ const result = await electron.showDirectoryPicker();
507
+ if (result) {
508
+ sourcePath.value = result;
509
+ await validateSource(result);
510
+ }
511
+ } catch (error) {
512
+ console.error(error);
513
+ pathError.value = t2("install.failedToSelectDirectory");
514
+ }
515
+ }, "browsePath");
516
+ watchEffect(() => {
517
+ migrationItemIds.value = migrationItems.value.filter((item) => item.selected).map((item) => item.id);
518
+ });
519
+ return (_ctx, _cache) => {
520
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
521
+ createBaseVNode("div", _hoisted_2$2, [
522
+ createBaseVNode("h2", _hoisted_3$2, toDisplayString(_ctx.$t("install.migrateFromExistingInstallation")), 1),
523
+ createBaseVNode("p", _hoisted_4$2, toDisplayString(_ctx.$t("install.migrationSourcePathDescription")), 1),
524
+ createBaseVNode("div", _hoisted_5, [
525
+ createVNode(unref(script$4), {
526
+ modelValue: sourcePath.value,
527
+ "onUpdate:modelValue": [
528
+ _cache[0] || (_cache[0] = ($event) => sourcePath.value = $event),
529
+ validateSource
530
+ ],
531
+ placeholder: "Select existing ComfyUI installation (optional)",
532
+ class: normalizeClass(["flex-1", { "p-invalid": pathError.value }])
533
+ }, null, 8, ["modelValue", "class"]),
534
+ createVNode(unref(script$7), {
535
+ icon: "pi pi-folder",
536
+ onClick: browsePath,
537
+ class: "w-12"
538
+ })
539
+ ]),
540
+ pathError.value ? (openBlock(), createBlock(unref(script$8), {
541
+ key: 0,
542
+ severity: "error"
543
+ }, {
544
+ default: withCtx(() => [
545
+ createTextVNode(toDisplayString(pathError.value), 1)
546
+ ]),
547
+ _: 1
548
+ })) : createCommentVNode("", true)
549
+ ]),
550
+ isValidSource.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
551
+ createBaseVNode("h3", _hoisted_7, toDisplayString(_ctx.$t("install.selectItemsToMigrate")), 1),
552
+ createBaseVNode("div", _hoisted_8, [
553
+ (openBlock(true), createElementBlock(Fragment, null, renderList(migrationItems.value, (item) => {
554
+ return openBlock(), createElementBlock("div", {
555
+ key: item.id,
556
+ class: "flex items-center gap-3 p-2 hover:bg-neutral-700 rounded",
557
+ onClick: /* @__PURE__ */ __name(($event) => item.selected = !item.selected, "onClick")
558
+ }, [
559
+ createVNode(unref(script$9), {
560
+ modelValue: item.selected,
561
+ "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => item.selected = $event, "onUpdate:modelValue"),
562
+ inputId: item.id,
563
+ binary: true,
564
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {
565
+ }, ["stop"]))
566
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "inputId"]),
567
+ createBaseVNode("div", null, [
568
+ createBaseVNode("label", {
569
+ for: item.id,
570
+ class: "text-neutral-200 font-medium"
571
+ }, toDisplayString(item.label), 9, _hoisted_10),
572
+ createBaseVNode("p", _hoisted_11, toDisplayString(item.description), 1)
573
+ ])
574
+ ], 8, _hoisted_9);
575
+ }), 128))
576
+ ])
577
+ ])) : (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(_ctx.$t("install.migrationOptional")), 1))
578
+ ]);
579
+ };
580
+ }
581
+ });
582
+ const _hoisted_1$1 = { class: "flex flex-col items-center gap-4" };
583
+ const _hoisted_2$1 = { class: "w-full" };
584
+ const _hoisted_3$1 = { class: "text-lg font-medium text-neutral-100" };
585
+ const _hoisted_4$1 = { class: "text-sm text-neutral-400 mt-1" };
586
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
587
+ __name: "MirrorItem",
588
+ props: /* @__PURE__ */ mergeModels({
589
+ item: {}
590
+ }, {
591
+ "modelValue": { required: true },
592
+ "modelModifiers": {}
593
+ }),
594
+ emits: /* @__PURE__ */ mergeModels(["state-change"], ["update:modelValue"]),
595
+ setup(__props, { emit: __emit }) {
596
+ const emit = __emit;
597
+ const modelValue = useModel(__props, "modelValue");
598
+ const validationState = ref(ValidationState.IDLE);
599
+ const normalizedSettingId = computed(() => {
600
+ return normalizeI18nKey(__props.item.settingId);
601
+ });
602
+ onMounted(() => {
603
+ modelValue.value = __props.item.mirror;
604
+ });
605
+ watch(validationState, (newState) => {
606
+ emit("state-change", newState);
607
+ if (newState === ValidationState.INVALID && modelValue.value === __props.item.mirror) {
608
+ modelValue.value = __props.item.fallbackMirror;
609
+ }
610
+ });
611
+ return (_ctx, _cache) => {
612
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
613
+ createBaseVNode("div", _hoisted_2$1, [
614
+ createBaseVNode("h3", _hoisted_3$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.name`)), 1),
615
+ createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.tooltip`)), 1)
616
+ ]),
617
+ createVNode(_sfc_main$7, {
618
+ modelValue: modelValue.value,
619
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
620
+ "validate-url-fn": /* @__PURE__ */ __name((mirror) => unref(checkMirrorReachable)(mirror + (_ctx.item.validationPathSuffix ?? "")), "validate-url-fn"),
621
+ onStateChange: _cache[1] || (_cache[1] = ($event) => validationState.value = $event)
622
+ }, null, 8, ["modelValue", "validate-url-fn"])
623
+ ]);
624
+ };
625
+ }
626
+ });
627
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
628
+ __name: "MirrorsConfiguration",
629
+ props: /* @__PURE__ */ mergeModels({
630
+ device: {}
631
+ }, {
632
+ "pythonMirror": { required: true },
633
+ "pythonMirrorModifiers": {},
634
+ "pypiMirror": { required: true },
635
+ "pypiMirrorModifiers": {},
636
+ "torchMirror": { required: true },
637
+ "torchMirrorModifiers": {}
638
+ }),
639
+ emits: ["update:pythonMirror", "update:pypiMirror", "update:torchMirror"],
640
+ setup(__props) {
641
+ const showMirrorInputs = ref(false);
642
+ const pythonMirror = useModel(__props, "pythonMirror");
643
+ const pypiMirror = useModel(__props, "pypiMirror");
644
+ const torchMirror = useModel(__props, "torchMirror");
645
+ const getTorchMirrorItem = /* @__PURE__ */ __name((device) => {
646
+ const settingId = "Comfy-Desktop.UV.TorchInstallMirror";
647
+ switch (device) {
648
+ case "mps":
649
+ return {
650
+ settingId,
651
+ mirror: NIGHTLY_CPU_TORCH_URL,
652
+ fallbackMirror: NIGHTLY_CPU_TORCH_URL
653
+ };
654
+ case "nvidia":
655
+ return {
656
+ settingId,
657
+ mirror: CUDA_TORCH_URL,
658
+ fallbackMirror: CUDA_TORCH_URL
659
+ };
660
+ case "cpu":
661
+ default:
662
+ return {
663
+ settingId,
664
+ mirror: PYPI_MIRROR.mirror,
665
+ fallbackMirror: PYPI_MIRROR.fallbackMirror
666
+ };
667
+ }
668
+ }, "getTorchMirrorItem");
669
+ const userIsInChina = ref(false);
670
+ onMounted(async () => {
671
+ userIsInChina.value = await isInChina();
672
+ });
673
+ const useFallbackMirror = /* @__PURE__ */ __name((mirror) => ({
674
+ ...mirror,
675
+ mirror: mirror.fallbackMirror
676
+ }), "useFallbackMirror");
677
+ const mirrors = computed(
678
+ () => [
679
+ [PYTHON_MIRROR, pythonMirror],
680
+ [PYPI_MIRROR, pypiMirror],
681
+ [getTorchMirrorItem(__props.device), torchMirror]
682
+ ].map(([item, modelValue]) => [
683
+ userIsInChina.value ? useFallbackMirror(item) : item,
684
+ modelValue
685
+ ])
686
+ );
687
+ const validationStates = ref(
688
+ mirrors.value.map(() => ValidationState.IDLE)
689
+ );
690
+ const validationState = computed(() => {
691
+ return mergeValidationStates(validationStates.value);
692
+ });
693
+ const validationStateTooltip = computed(() => {
694
+ switch (validationState.value) {
695
+ case ValidationState.INVALID:
696
+ return t("install.settings.mirrorsUnreachable");
697
+ case ValidationState.VALID:
698
+ return t("install.settings.mirrorsReachable");
699
+ default:
700
+ return t("install.settings.checkingMirrors");
701
+ }
702
+ });
703
+ return (_ctx, _cache) => {
704
+ const _directive_tooltip = resolveDirective("tooltip");
705
+ return openBlock(), createBlock(unref(script$a), {
706
+ header: _ctx.$t("install.settings.mirrorSettings"),
707
+ toggleable: "",
708
+ collapsed: !showMirrorInputs.value,
709
+ "pt:root": "bg-neutral-800 border-none w-[600px]"
710
+ }, {
711
+ icons: withCtx(() => [
712
+ withDirectives(createBaseVNode("i", {
713
+ class: normalizeClass({
714
+ "pi pi-spin pi-spinner text-neutral-400": validationState.value === unref(ValidationState).LOADING,
715
+ "pi pi-check text-green-500": validationState.value === unref(ValidationState).VALID,
716
+ "pi pi-times text-red-500": validationState.value === unref(ValidationState).INVALID
717
+ })
718
+ }, null, 2), [
719
+ [_directive_tooltip, validationStateTooltip.value]
720
+ ])
721
+ ]),
722
+ default: withCtx(() => [
723
+ (openBlock(true), createElementBlock(Fragment, null, renderList(mirrors.value, ([item, modelValue], index) => {
724
+ return openBlock(), createElementBlock(Fragment, {
725
+ key: item.settingId + item.mirror
726
+ }, [
727
+ index > 0 ? (openBlock(), createBlock(unref(script$1), { key: 0 })) : createCommentVNode("", true),
728
+ createVNode(_sfc_main$2, {
729
+ item,
730
+ modelValue: modelValue.value,
731
+ "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => modelValue.value = $event, "onUpdate:modelValue"),
732
+ onStateChange: /* @__PURE__ */ __name(($event) => validationStates.value[index] = $event, "onStateChange")
733
+ }, null, 8, ["item", "modelValue", "onUpdate:modelValue", "onStateChange"])
734
+ ], 64);
735
+ }), 128))
736
+ ]),
737
+ _: 1
738
+ }, 8, ["header", "collapsed"]);
739
+ };
740
+ }
741
+ });
742
+ const _hoisted_1 = { class: "flex pt-6 justify-end" };
743
+ const _hoisted_2 = { class: "flex pt-6 justify-between" };
744
+ const _hoisted_3 = { class: "flex pt-6 justify-between" };
745
+ const _hoisted_4 = { class: "flex mt-6 justify-between" };
746
+ const _sfc_main = /* @__PURE__ */ defineComponent({
747
+ __name: "InstallView",
748
+ setup(__props) {
749
+ const device = ref(null);
750
+ const installPath = ref("");
751
+ const pathError = ref("");
752
+ const migrationSourcePath = ref("");
753
+ const migrationItemIds = ref([]);
754
+ const autoUpdate = ref(true);
755
+ const allowMetrics = ref(true);
756
+ const pythonMirror = ref("");
757
+ const pypiMirror = ref("");
758
+ const torchMirror = ref("");
759
+ const highestStep = ref(0);
760
+ const handleStepChange = /* @__PURE__ */ __name((value) => {
761
+ setHighestStep(value);
762
+ electronAPI().Events.trackEvent("install_stepper_change", {
763
+ step: value
764
+ });
765
+ }, "handleStepChange");
766
+ const setHighestStep = /* @__PURE__ */ __name((value) => {
767
+ const int = typeof value === "number" ? value : parseInt(value, 10);
768
+ if (!isNaN(int) && int > highestStep.value) highestStep.value = int;
769
+ }, "setHighestStep");
770
+ const hasError = computed(() => pathError.value !== "");
771
+ const noGpu = computed(() => typeof device.value !== "string");
772
+ const electron = electronAPI();
773
+ const router = useRouter();
774
+ const install = /* @__PURE__ */ __name(() => {
775
+ const options = {
776
+ installPath: installPath.value,
777
+ autoUpdate: autoUpdate.value,
778
+ allowMetrics: allowMetrics.value,
779
+ migrationSourcePath: migrationSourcePath.value,
780
+ migrationItemIds: toRaw(migrationItemIds.value),
781
+ pythonMirror: pythonMirror.value,
782
+ pypiMirror: pypiMirror.value,
783
+ torchMirror: torchMirror.value,
784
+ device: device.value
785
+ };
786
+ electron.installComfyUI(options);
787
+ const nextPage = options.device === "unsupported" ? "/manual-configuration" : "/server-start";
788
+ router.push(nextPage);
789
+ }, "install");
790
+ onMounted(async () => {
791
+ if (!electron) return;
792
+ const detectedGpu = await electron.Config.getDetectedGpu();
793
+ if (detectedGpu === "mps" || detectedGpu === "nvidia") {
794
+ device.value = detectedGpu;
795
+ }
796
+ electronAPI().Events.trackEvent("install_stepper_change", {
797
+ step: "0",
798
+ gpu: detectedGpu
799
+ });
800
+ });
801
+ return (_ctx, _cache) => {
802
+ return openBlock(), createBlock(_sfc_main$8, { dark: "" }, {
803
+ default: withCtx(() => [
804
+ createVNode(unref(script$f), {
805
+ class: "h-full p-8 2xl:p-16",
806
+ value: "0",
807
+ "onUpdate:value": handleStepChange
808
+ }, {
809
+ default: withCtx(() => [
810
+ createVNode(unref(script$b), { class: "select-none" }, {
811
+ default: withCtx(() => [
812
+ createVNode(unref(script$c), { value: "0" }, {
813
+ default: withCtx(() => [
814
+ createTextVNode(toDisplayString(_ctx.$t("install.gpu")), 1)
815
+ ]),
816
+ _: 1
817
+ }),
818
+ createVNode(unref(script$c), {
819
+ value: "1",
820
+ disabled: noGpu.value
821
+ }, {
822
+ default: withCtx(() => [
823
+ createTextVNode(toDisplayString(_ctx.$t("install.installLocation")), 1)
824
+ ]),
825
+ _: 1
826
+ }, 8, ["disabled"]),
827
+ createVNode(unref(script$c), {
828
+ value: "2",
829
+ disabled: noGpu.value || hasError.value || highestStep.value < 1
830
+ }, {
831
+ default: withCtx(() => [
832
+ createTextVNode(toDisplayString(_ctx.$t("install.migration")), 1)
833
+ ]),
834
+ _: 1
835
+ }, 8, ["disabled"]),
836
+ createVNode(unref(script$c), {
837
+ value: "3",
838
+ disabled: noGpu.value || hasError.value || highestStep.value < 2
839
+ }, {
840
+ default: withCtx(() => [
841
+ createTextVNode(toDisplayString(_ctx.$t("install.desktopSettings")), 1)
842
+ ]),
843
+ _: 1
844
+ }, 8, ["disabled"])
845
+ ]),
846
+ _: 1
847
+ }),
848
+ createVNode(unref(script$d), null, {
849
+ default: withCtx(() => [
850
+ createVNode(unref(script$e), { value: "0" }, {
851
+ default: withCtx(({ activateCallback }) => [
852
+ createVNode(GpuPicker, {
853
+ device: device.value,
854
+ "onUpdate:device": _cache[0] || (_cache[0] = ($event) => device.value = $event)
855
+ }, null, 8, ["device"]),
856
+ createBaseVNode("div", _hoisted_1, [
857
+ createVNode(unref(script$7), {
858
+ label: _ctx.$t("g.next"),
859
+ icon: "pi pi-arrow-right",
860
+ iconPos: "right",
861
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick"),
862
+ disabled: typeof device.value !== "string"
863
+ }, null, 8, ["label", "onClick", "disabled"])
864
+ ])
865
+ ]),
866
+ _: 1
867
+ }),
868
+ createVNode(unref(script$e), { value: "1" }, {
869
+ default: withCtx(({ activateCallback }) => [
870
+ createVNode(_sfc_main$4, {
871
+ installPath: installPath.value,
872
+ "onUpdate:installPath": _cache[1] || (_cache[1] = ($event) => installPath.value = $event),
873
+ pathError: pathError.value,
874
+ "onUpdate:pathError": _cache[2] || (_cache[2] = ($event) => pathError.value = $event)
875
+ }, null, 8, ["installPath", "pathError"]),
876
+ createBaseVNode("div", _hoisted_2, [
877
+ createVNode(unref(script$7), {
878
+ label: _ctx.$t("g.back"),
879
+ severity: "secondary",
880
+ icon: "pi pi-arrow-left",
881
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("0"), "onClick")
882
+ }, null, 8, ["label", "onClick"]),
883
+ createVNode(unref(script$7), {
884
+ label: _ctx.$t("g.next"),
885
+ icon: "pi pi-arrow-right",
886
+ iconPos: "right",
887
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick"),
888
+ disabled: pathError.value !== ""
889
+ }, null, 8, ["label", "onClick", "disabled"])
890
+ ])
891
+ ]),
892
+ _: 1
893
+ }),
894
+ createVNode(unref(script$e), { value: "2" }, {
895
+ default: withCtx(({ activateCallback }) => [
896
+ createVNode(_sfc_main$3, {
897
+ sourcePath: migrationSourcePath.value,
898
+ "onUpdate:sourcePath": _cache[3] || (_cache[3] = ($event) => migrationSourcePath.value = $event),
899
+ migrationItemIds: migrationItemIds.value,
900
+ "onUpdate:migrationItemIds": _cache[4] || (_cache[4] = ($event) => migrationItemIds.value = $event)
901
+ }, null, 8, ["sourcePath", "migrationItemIds"]),
902
+ createBaseVNode("div", _hoisted_3, [
903
+ createVNode(unref(script$7), {
904
+ label: _ctx.$t("g.back"),
905
+ severity: "secondary",
906
+ icon: "pi pi-arrow-left",
907
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick")
908
+ }, null, 8, ["label", "onClick"]),
909
+ createVNode(unref(script$7), {
910
+ label: _ctx.$t("g.next"),
911
+ icon: "pi pi-arrow-right",
912
+ iconPos: "right",
913
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("3"), "onClick")
914
+ }, null, 8, ["label", "onClick"])
915
+ ])
916
+ ]),
917
+ _: 1
918
+ }),
919
+ createVNode(unref(script$e), { value: "3" }, {
920
+ default: withCtx(({ activateCallback }) => [
921
+ createVNode(_sfc_main$6, {
922
+ autoUpdate: autoUpdate.value,
923
+ "onUpdate:autoUpdate": _cache[5] || (_cache[5] = ($event) => autoUpdate.value = $event),
924
+ allowMetrics: allowMetrics.value,
925
+ "onUpdate:allowMetrics": _cache[6] || (_cache[6] = ($event) => allowMetrics.value = $event)
926
+ }, null, 8, ["autoUpdate", "allowMetrics"]),
927
+ createVNode(_sfc_main$1, {
928
+ device: device.value,
929
+ pythonMirror: pythonMirror.value,
930
+ "onUpdate:pythonMirror": _cache[7] || (_cache[7] = ($event) => pythonMirror.value = $event),
931
+ pypiMirror: pypiMirror.value,
932
+ "onUpdate:pypiMirror": _cache[8] || (_cache[8] = ($event) => pypiMirror.value = $event),
933
+ torchMirror: torchMirror.value,
934
+ "onUpdate:torchMirror": _cache[9] || (_cache[9] = ($event) => torchMirror.value = $event),
935
+ class: "mt-6"
936
+ }, null, 8, ["device", "pythonMirror", "pypiMirror", "torchMirror"]),
937
+ createBaseVNode("div", _hoisted_4, [
938
+ createVNode(unref(script$7), {
939
+ label: _ctx.$t("g.back"),
940
+ severity: "secondary",
941
+ icon: "pi pi-arrow-left",
942
+ onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick")
943
+ }, null, 8, ["label", "onClick"]),
944
+ createVNode(unref(script$7), {
945
+ label: _ctx.$t("g.install"),
946
+ icon: "pi pi-check",
947
+ iconPos: "right",
948
+ disabled: hasError.value,
949
+ onClick: _cache[10] || (_cache[10] = ($event) => install())
950
+ }, null, 8, ["label", "disabled"])
951
+ ])
952
+ ]),
953
+ _: 1
954
+ })
955
+ ]),
956
+ _: 1
957
+ })
958
+ ]),
959
+ _: 1
960
+ })
961
+ ]),
962
+ _: 1
963
+ });
964
+ };
965
+ }
966
+ });
967
+ const InstallView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cd6731d2"]]);
968
+ export {
969
+ InstallView as default
970
+ };
971
+ //# sourceMappingURL=InstallView-DQBTHS7S.js.map