horde-engine 3.9.0__tar.gz → 3.9.2__tar.gz

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 (243) hide show
  1. {horde_engine-3.9.0 → horde_engine-3.9.2}/PKG-INFO +1 -1
  2. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/_version.py +2 -2
  3. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/civitai_adhoc.py +122 -1
  4. {horde_engine-3.9.0 → horde_engine-3.9.2}/.gitignore +0 -0
  5. {horde_engine-3.9.0 → horde_engine-3.9.2}/LICENSE +0 -0
  6. {horde_engine-3.9.0 → horde_engine-3.9.2}/README.md +0 -0
  7. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/__init__.py +0 -0
  8. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/__pyinstaller.py +0 -0
  9. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/api.py +0 -0
  10. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/benchmark.py +0 -0
  11. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/beta_models.py +0 -0
  12. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/comfy_horde.py +0 -0
  13. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/config_path.py +0 -0
  14. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/consts.py +0 -0
  15. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/exceptions.py +0 -0
  16. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/__init__.py +0 -0
  17. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/comfy_patches.py +0 -0
  18. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/graph_utils.py +0 -0
  19. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/in_process.py +0 -0
  20. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/interface.py +0 -0
  21. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/phase_timing.py +0 -0
  22. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/progress_hook.py +0 -0
  23. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/execution/sampling_lease.py +0 -0
  24. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/feature_impact.py +0 -0
  25. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/feature_requirements.py +0 -0
  26. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/horde.py +0 -0
  27. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/initialisation.py +0 -0
  28. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/installation/__init__.py +0 -0
  29. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/installation/__main__.py +0 -0
  30. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/installation/installer.py +0 -0
  31. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/installation/manifest.json +0 -0
  32. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/installation/manifest.py +0 -0
  33. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/integrations/__init__.py +0 -0
  34. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/integrations/logfire_comfy_internals.py +0 -0
  35. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/integrations/logfire_setup.py +0 -0
  36. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/metrics.py +0 -0
  37. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_database/db_dep.json +0 -0
  38. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_database/db_embeds.json +0 -0
  39. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_database/diffusers.json +0 -0
  40. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_database/med_config.json +0 -0
  41. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/__init__.py +0 -0
  42. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/annotator_provider.py +0 -0
  43. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/base.py +0 -0
  44. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/civitai_provider.py +0 -0
  45. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/civitai_records.py +0 -0
  46. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/codeformer.py +0 -0
  47. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/compvis.py +0 -0
  48. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/controlnet.py +0 -0
  49. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/controlnet_annotator.py +0 -0
  50. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/diffusers.py +0 -0
  51. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/esrgan.py +0 -0
  52. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/gfpgan.py +0 -0
  53. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/hyper.py +0 -0
  54. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/lora.py +0 -0
  55. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/miscellaneous.py +0 -0
  56. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/safety_checker.py +0 -0
  57. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/model_manager/ti.py +0 -0
  58. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/__init__.py +0 -0
  59. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/LICENSE +0 -0
  60. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/README.md +0 -0
  61. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/__init__.py +0 -0
  62. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_example.json +0 -0
  63. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_fg_all.json +0 -0
  64. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_joint_bg.json +0 -0
  65. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_joint_fg.json +0 -0
  66. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_bg.json +0 -0
  67. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_bg_stop_at.json +0 -0
  68. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_fg.json +0 -0
  69. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_fg_example.json +0 -0
  70. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_fg_example_rgba.json +0 -0
  71. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_joint.json +0 -0
  72. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/layered_diffusion.py +0 -0
  73. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/__init__.py +0 -0
  74. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/attention_sharing.py +0 -0
  75. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/enums.py +0 -0
  76. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/models.py +0 -0
  77. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/utils.py +0 -0
  78. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/pyproject.toml +0 -0
  79. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/comfyui_layerdiffuse/requirements.txt +0 -0
  80. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/LICENSE +0 -0
  81. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/README.md +0 -0
  82. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/__init__.py +0 -0
  83. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/VERSION +0 -0
  84. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/__init__.py +0 -0
  85. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/__init__.py +0 -0
  86. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/arcface_arch.py +0 -0
  87. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/arch_util.py +0 -0
  88. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/codeformer_arch.py +0 -0
  89. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/rrdbnet_arch.py +0 -0
  90. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/vgg_arch.py +0 -0
  91. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/archs/vqgan_arch.py +0 -0
  92. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/data/__init__.py +0 -0
  93. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/data/data_sampler.py +0 -0
  94. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/data/data_util.py +0 -0
  95. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/data/prefetch_dataloader.py +0 -0
  96. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/data/transforms.py +0 -0
  97. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/losses/__init__.py +0 -0
  98. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/losses/loss_util.py +0 -0
  99. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/losses/losses.py +0 -0
  100. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/metrics/__init__.py +0 -0
  101. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/metrics/metric_util.py +0 -0
  102. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/metrics/psnr_ssim.py +0 -0
  103. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/models/__init__.py +0 -0
  104. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/__init__.py +0 -0
  105. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/__init__.py +0 -0
  106. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/deform_conv.py +0 -0
  107. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_cuda.cpp +0 -0
  108. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_cuda_kernel.cu +0 -0
  109. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_ext.cpp +0 -0
  110. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/__init__.py +0 -0
  111. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/fused_act.py +0 -0
  112. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/src/fused_bias_act.cpp +0 -0
  113. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/src/fused_bias_act_kernel.cu +0 -0
  114. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/__init__.py +0 -0
  115. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/src/upfirdn2d.cpp +0 -0
  116. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/src/upfirdn2d_kernel.cu +0 -0
  117. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/upfirdn2d.py +0 -0
  118. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/setup.py +0 -0
  119. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/train.py +0 -0
  120. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/__init__.py +0 -0
  121. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/dist_util.py +0 -0
  122. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/download_util.py +0 -0
  123. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/file_client.py +0 -0
  124. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/img_util.py +0 -0
  125. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/lmdb_util.py +0 -0
  126. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/logger.py +0 -0
  127. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/matlab_functions.py +0 -0
  128. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/misc.py +0 -0
  129. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/options.py +0 -0
  130. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/realesrgan_utils.py +0 -0
  131. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/utils/registry.py +0 -0
  132. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/basicsr/version.py +0 -0
  133. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/__init__.py +0 -0
  134. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/__init__.py +0 -0
  135. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/align_trans.py +0 -0
  136. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/matlab_cp2tform.py +0 -0
  137. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface.py +0 -0
  138. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface_net.py +0 -0
  139. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface_utils.py +0 -0
  140. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/__init__.py +0 -0
  141. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/face_detector.py +0 -0
  142. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/__init__.py +0 -0
  143. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/common.py +0 -0
  144. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/experimental.py +0 -0
  145. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolo.py +0 -0
  146. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolov5l.yaml +0 -0
  147. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolov5n.yaml +0 -0
  148. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/__init__.py +0 -0
  149. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/autoanchor.py +0 -0
  150. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/datasets.py +0 -0
  151. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/extract_ckpt.py +0 -0
  152. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/general.py +0 -0
  153. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/torch_utils.py +0 -0
  154. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/parsing/__init__.py +0 -0
  155. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/parsing/bisenet.py +0 -0
  156. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/parsing/parsenet.py +0 -0
  157. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/parsing/resnet.py +0 -0
  158. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/utils/__init__.py +0 -0
  159. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/utils/face_restoration_helper.py +0 -0
  160. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/utils/face_utils.py +0 -0
  161. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/facelib/utils/misc.py +0 -0
  162. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/README.md +0 -0
  163. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/__init__.py +0 -0
  164. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/gfpganv1_clean_arch.py +0 -0
  165. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/model_loading.py +0 -0
  166. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/stylegan2_clean_arch.py +0 -0
  167. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/facerestore_cf/r_chainner/types.py +0 -0
  168. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_controlnet_model_loader.py +0 -0
  169. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_image_loader.py +0 -0
  170. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_image_output.py +0 -0
  171. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_lora_loader.py +0 -0
  172. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_model_loader.py +0 -0
  173. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/nodes/node_upscale_model_loader.py +0 -0
  174. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/__init__.py +0 -0
  175. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/constants.py +0 -0
  176. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/context.py +0 -0
  177. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/families/__init__.py +0 -0
  178. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/families/image.py +0 -0
  179. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/families/post_processing.py +0 -0
  180. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/graph.py +0 -0
  181. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/horde_compat.py +0 -0
  182. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/patches.py +0 -0
  183. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/payload.py +0 -0
  184. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/payload_pp.py +0 -0
  185. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/registry.py +0 -0
  186. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/resolution.py +0 -0
  187. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline/template.py +0 -0
  188. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_controlnet.json +0 -0
  189. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_controlnet_annotator.json +0 -0
  190. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_controlnet_hires_fix.json +0 -0
  191. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_flux.json +0 -0
  192. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_image_facefix.json +0 -0
  193. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_image_upscale.json +0 -0
  194. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_qr_code.json +0 -0
  195. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_qwen.json +0 -0
  196. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_cascade.json +0 -0
  197. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_cascade_2pass.json +0 -0
  198. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_cascade_remix.json +0 -0
  199. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_diffusion.json +0 -0
  200. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_diffusion_hires_fix.json +0 -0
  201. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_diffusion_img2img_mask.json +0 -0
  202. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipeline_designs/pipeline_stable_diffusion_paint.json +0 -0
  203. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_controlnet.json +0 -0
  204. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_controlnet_annotator.json +0 -0
  205. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_controlnet_hires_fix.json +0 -0
  206. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_flux.json +0 -0
  207. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_image_facefix.json +0 -0
  208. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_image_upscale.json +0 -0
  209. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_qr_code.json +0 -0
  210. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_qwen.json +0 -0
  211. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_cascade.json +0 -0
  212. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_cascade_2pass.json +0 -0
  213. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_cascade_remix.json +0 -0
  214. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_diffusion.json +0 -0
  215. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_diffusion_hires_fix.json +0 -0
  216. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_diffusion_img2img_mask.json +0 -0
  217. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_stable_diffusion_paint.json +0 -0
  218. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pipelines/pipeline_z_image.json +0 -0
  219. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/preload.py +0 -0
  220. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/py.typed +0 -0
  221. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pyinstaller_hooks/__init__.py +0 -0
  222. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/pyinstaller_hooks/hook-hordelib.horde.py +0 -0
  223. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/safety.py +0 -0
  224. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/safety_checker.py +0 -0
  225. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/settings.py +0 -0
  226. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/shared_model_manager.py +0 -0
  227. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/train.py +0 -0
  228. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/__init__.py +0 -0
  229. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/device_pinning.py +0 -0
  230. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/distance.py +0 -0
  231. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/dynamicprompt.py +0 -0
  232. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/gpuinfo.py +0 -0
  233. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/image_utils.py +0 -0
  234. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/ioredirect.py +0 -0
  235. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/logger.py +0 -0
  236. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/nvml.py +0 -0
  237. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/optional_deps.py +0 -0
  238. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/sanitizer.py +0 -0
  239. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/switch.py +0 -0
  240. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/torch_build.py +0 -0
  241. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/utils/torch_memory.py +0 -0
  242. {horde_engine-3.9.0 → horde_engine-3.9.2}/hordelib/vram_planning.py +0 -0
  243. {horde_engine-3.9.0 → horde_engine-3.9.2}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: horde-engine
3
- Version: 3.9.0
3
+ Version: 3.9.2
4
4
  Summary: A wrapper around ComfyUI to allow use by AI Horde.
5
5
  Project-URL: Homepage, https://github.com/Haidra-Org/hordelib
6
6
  Project-URL: Bug Tracker, https://github.com/Haidra-Org/hordelib/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '3.9.0'
22
- __version_tuple__ = version_tuple = (3, 9, 0)
21
+ __version__ = version = '3.9.2'
22
+ __version_tuple__ = version_tuple = (3, 9, 2)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -149,6 +149,12 @@ class _QueuedDownload[R]:
149
149
 
150
150
  record: R
151
151
  context: dict = field(default_factory=dict)
152
+ generation: int = 0
153
+ """The cancellation generation this download was enqueued under.
154
+
155
+ A worker thread abandons an in-flight or queued download once the manager's current generation has
156
+ moved past the value stamped here (see :meth:`CivitaiAdhocModelManager.cancel_active_downloads`),
157
+ so a caller that has given up on a job can free the shared pool without killing its threads."""
152
158
 
153
159
 
154
160
  class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
@@ -189,6 +195,14 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
189
195
  """The poll interval while waiting on the download queue/threads, in seconds."""
190
196
  FUZZ_THRESHOLD: int = 90
191
197
  """The minimum fuzzy-match ratio for a name to be accepted as a reference key."""
198
+ NEGATIVE_CACHE_TTL: float = 600 if not TESTS_ONGOING else 1
199
+ """How long (seconds) a version that returned a terminal 404/auth failure is remembered and
200
+ skipped, so repeated jobs requesting a dead model don't each re-spend the full retry budget.
201
+ Deliberately short: the cache is in-memory only (clears on restart) and expires so a model
202
+ that CivitAI later restores self-heals."""
203
+ NOTFOUND_CONFIRM_DELAY: float = 1 if not TESTS_ONGOING else 0.05
204
+ """The delay before the single confirm retry of a download-endpoint 404, which absorbs a brief
205
+ CivitAI CDN gap for a just-published or still-propagating file before giving up."""
192
206
 
193
207
  def __init__(
194
208
  self,
@@ -242,9 +256,18 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
242
256
  self.nsfw = True
243
257
  self._adhoc_reset_thread: threading.Thread | None = None
244
258
  self._stop_all_threads = False
259
+ # Monotonic cancellation generation. cancel_active_downloads() bumps it; an in-flight or queued
260
+ # download whose stamped generation has fallen behind is abandoned at its next retry boundary,
261
+ # freeing the (shared, daemon) pool for the next job without tearing the threads down. Guarded by
262
+ # _download_mutex for writes; read locklessly in the worker loop (a plain int read is atomic).
263
+ self._download_generation = 0
245
264
  self._index_ids: dict[int, str] = {}
246
265
  self._index_orig_names: dict[str, str] = {}
247
266
  self.total_retries_attempted = 0
267
+ # Versions that returned a terminal download failure (404/auth), keyed to a monotonic
268
+ # expiry; guarded by _download_mutex. Lets repeat jobs skip a dead model instantly instead
269
+ # of each re-spending the full retry budget (the gotomaki_jp_idol-style multi-minute stall).
270
+ self._known_bad_versions: dict[str, float] = {}
248
271
 
249
272
  self._init_metrics()
250
273
 
@@ -454,7 +477,9 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
454
477
  worker.start()
455
478
  self._metric_active_threads.set(len(self._download_threads))
456
479
 
457
- self._download_queue.append(_QueuedDownload(record=record, context=context or {}))
480
+ self._download_queue.append(
481
+ _QueuedDownload(record=record, context=context or {}, generation=self._download_generation),
482
+ )
458
483
  self._metric_queue_size.set(len(self._download_queue))
459
484
 
460
485
  def _download_thread(self, thread_number: int) -> None:
@@ -505,6 +530,35 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
505
530
  ),
506
531
  )
507
532
 
533
+ def _download_cache_key(self, record: RecordT, target: DownloadTarget | None) -> str:
534
+ """Stable negative-cache identifier for a download.
535
+
536
+ Uses the version id for multi-version (LoRA) records and falls back to the record name for
537
+ single-version (TI) records, so both the skip-check and the failure-marking agree on a key.
538
+ """
539
+ if target is not None and target.version_key:
540
+ return target.version_key
541
+ return record.name
542
+
543
+ def _mark_version_bad(self, key: str) -> None:
544
+ """Remember *key* as terminally unfetchable until :attr:`NEGATIVE_CACHE_TTL` elapses."""
545
+ with self._download_mutex:
546
+ self._known_bad_versions[key] = time.monotonic() + self.NEGATIVE_CACHE_TTL
547
+
548
+ def _is_version_bad(self, key: str) -> bool:
549
+ """Whether *key* is in the negative cache and still within its TTL.
550
+
551
+ Expired entries are pruned on access so the cache cannot grow without bound.
552
+ """
553
+ with self._download_mutex:
554
+ expiry = self._known_bad_versions.get(key)
555
+ if expiry is None:
556
+ return False
557
+ if time.monotonic() >= expiry:
558
+ del self._known_bad_versions[key]
559
+ return False
560
+ return True
561
+
508
562
  def _process_download(self, queued: _QueuedDownload, thread_logger) -> None:
509
563
  """Download a single queued record's weight file, retrying transient failures."""
510
564
  record = queued.record
@@ -512,11 +566,39 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
512
566
 
513
567
  overall_start = time.perf_counter()
514
568
  retries = 0
569
+ notfound_attempts = 0
570
+ cache_key = record.name # Refined to the version id once the target is prepared.
515
571
  while retries <= self.MAX_RETRIES:
572
+ # Abandon a download whose job has been cancelled (the caller gave up and freed the slot): a
573
+ # single-shot requests.get cannot be interrupted mid-transfer, but checking here bails before
574
+ # the next attempt or retry sleep, so a wedged retry ladder stops within ~one request timeout
575
+ # and the shared pool is free for the next job instead of pinning a thread on dead work.
576
+ if queued.generation != self._download_generation:
577
+ download_logger.info("adhoc.download_cancelled", retries=retries)
578
+ self._record_download_event(
579
+ record,
580
+ success=False,
581
+ size_bytes=0,
582
+ duration_seconds=time.perf_counter() - overall_start,
583
+ retries=retries,
584
+ )
585
+ return
516
586
  try:
517
587
  target = self._prepare_download(record)
518
588
  if target is None:
519
589
  return
590
+
591
+ cache_key = self._download_cache_key(record, target)
592
+ if self._is_version_bad(cache_key):
593
+ download_logger.info("adhoc.download_skipped_known_bad", version=cache_key)
594
+ self._record_download_event(
595
+ record,
596
+ success=False,
597
+ size_bytes=0,
598
+ duration_seconds=time.perf_counter() - overall_start,
599
+ retries=retries,
600
+ )
601
+ return
520
602
  filepath = os.path.join(self.model_folder_path, target.filename)
521
603
  hashpath = f"{os.path.splitext(filepath)[0]}.sha256"
522
604
 
@@ -558,6 +640,7 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
558
640
  response.raise_for_status()
559
641
  if "reason=download-auth" in response.url:
560
642
  download_logger.error("adhoc.download_auth_redirect", response_url=response.url)
643
+ self._mark_version_bad(cache_key)
561
644
  self._record_download_event(
562
645
  record,
563
646
  success=False,
@@ -616,6 +699,7 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
616
699
  status_code = getattr(getattr(net_error, "response", None), "status_code", None)
617
700
  download_logger.warning("adhoc.download_network_error", error_type=error_type, status_code=status_code)
618
701
  if isinstance(net_error, requests.HTTPError) and status_code in (401, 403):
702
+ self._mark_version_bad(cache_key)
619
703
  self._record_download_event(
620
704
  record,
621
705
  success=False,
@@ -624,6 +708,25 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
624
708
  retries=retries,
625
709
  )
626
710
  return
711
+ if isinstance(net_error, requests.HTTPError) and status_code == 404:
712
+ # A 404 on the signed download URL is deterministic: the file (or its
713
+ # token-scoped resource) is gone and the identical URL will not heal. Retrying the
714
+ # full ladder only burns ~MAX_RETRIES*RETRY_DELAY seconds while the job blocks in
715
+ # download_aux_models. Allow a single quick confirm retry to absorb a brief CDN
716
+ # propagation gap, then give up and remember the version so later jobs skip it.
717
+ notfound_attempts += 1
718
+ if notfound_attempts > 1:
719
+ self._mark_version_bad(cache_key)
720
+ self._record_download_event(
721
+ record,
722
+ success=False,
723
+ size_bytes=0,
724
+ duration_seconds=time.perf_counter() - overall_start,
725
+ retries=retries,
726
+ )
727
+ return
728
+ time.sleep(self.NOTFOUND_CONFIRM_DELAY)
729
+ continue
627
730
  except OSError as disk_error:
628
731
  if disk_error.errno in _TERMINAL_DISK_ERRNOS:
629
732
  # A full / read-only / over-quota disk will not heal between attempts, so retrying only
@@ -731,6 +834,24 @@ class CivitaiAdhocModelManager[RecordT: GenericModelRecord](
731
834
  """Signal all worker threads to stop at their next iteration."""
732
835
  self._stop_all_threads = True
733
836
 
837
+ def cancel_active_downloads(self) -> None:
838
+ """Abandon all queued and in-flight downloads, leaving the worker pool alive for the next job.
839
+
840
+ Unlike :meth:`stop_all` (which permanently shuts the pool down), this bumps the cancellation
841
+ generation and clears the pending queue: any download already running abandons itself at its next
842
+ retry boundary, and nothing new is pre-empted. A caller that has given up on a job (e.g. its aux
843
+ downloads blew a deadline) uses this to stop pinning shared download threads on dead work so the
844
+ next job's downloads are not stuck behind it. Idempotent; the pool resumes normally on the next
845
+ :meth:`_enqueue_download`, which stamps the new generation.
846
+ """
847
+ with self._download_mutex:
848
+ self._download_generation += 1
849
+ cancelled = len(self._download_queue)
850
+ self._download_queue.clear()
851
+ self._metric_queue_size.set(0)
852
+ if cancelled:
853
+ logger.bind(manager=self.METRIC_PREFIX).info("adhoc.downloads_cancelled", queued_dropped=cancelled)
854
+
734
855
  # ------------------------------------------------------------------
735
856
  # Cache accounting and eviction (generic over CacheEntry)
736
857
  # ------------------------------------------------------------------
File without changes
File without changes
File without changes